/** * Ruby detection — CONTENT-AWARE Gemfile / gemspec classification. * * Kill line: Gemfile alone ≠ Rails. * Bundler backs libraries, Rails apps, Sinatra/Roda/Grape/Hanami, CLIs, and MCP * servers. We read gem names (+ light layout), then branch. * * Same composition as go.ts / jvm.ts: knowledge in ruby-detection.json. */ export type RubyAppType = 'mcp' | 'backend' | 'cli' | 'library'; export interface RubyProject { appType: RubyAppType; /** Primary framework label (Rails / Sinatra / …) or ''. */ framework: string; /** package manager signal */ packageManager: 'bundler' | 'rubygems'; /** Glass Hood rationale for .faf `# found:`. */ found: string; } /** True if directory looks like a Ruby project root. */ export declare function isRubyRoot(dir: string): boolean; /** * Extract gem names from a Gemfile / gems.rb (static — does NOT execute Ruby). * Handles: gem 'x', gem "x", gem :x (rare), gem "x", "1.0" */ export declare function parseGemfileGems(content: string): Set; /** * Extract gem names from Gemfile.lock SPECS sections (static). * Lines like " rails (7.1.0)" under GEM specs. */ export declare function parseGemfileLockGems(content: string): Set; /** Gem names from *.gemspec dependency lines (static). */ export declare function parseGemspecGems(content: string): Set; /** * Classify a Ruby project from Gemfile / lock / gemspec (+ light layout). * Returns null if not a Ruby root. */ export declare function detectRubyProject(dir: string): RubyProject | null;