spec-gen-cli 1.2.7 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +135 -41
  2. package/dist/api/generate.d.ts.map +1 -1
  3. package/dist/api/generate.js +1 -0
  4. package/dist/api/generate.js.map +1 -1
  5. package/dist/api/types.d.ts +2 -0
  6. package/dist/api/types.d.ts.map +1 -1
  7. package/dist/cli/commands/analyze.d.ts +3 -0
  8. package/dist/cli/commands/analyze.d.ts.map +1 -1
  9. package/dist/cli/commands/analyze.js +112 -17
  10. package/dist/cli/commands/analyze.js.map +1 -1
  11. package/dist/cli/commands/drift.d.ts.map +1 -1
  12. package/dist/cli/commands/drift.js +8 -10
  13. package/dist/cli/commands/drift.js.map +1 -1
  14. package/dist/cli/commands/generate.d.ts.map +1 -1
  15. package/dist/cli/commands/generate.js +12 -36
  16. package/dist/cli/commands/generate.js.map +1 -1
  17. package/dist/cli/commands/mcp.d.ts +2 -2
  18. package/dist/cli/commands/mcp.d.ts.map +1 -1
  19. package/dist/cli/commands/mcp.js +105 -2
  20. package/dist/cli/commands/mcp.js.map +1 -1
  21. package/dist/cli/commands/run.d.ts.map +1 -1
  22. package/dist/cli/commands/run.js +9 -47
  23. package/dist/cli/commands/run.js.map +1 -1
  24. package/dist/cli/commands/setup.d.ts +17 -0
  25. package/dist/cli/commands/setup.d.ts.map +1 -0
  26. package/dist/cli/commands/setup.js +201 -0
  27. package/dist/cli/commands/setup.js.map +1 -0
  28. package/dist/cli/commands/verify.d.ts.map +1 -1
  29. package/dist/cli/commands/verify.js +7 -8
  30. package/dist/cli/commands/verify.js.map +1 -1
  31. package/dist/cli/index.js +12 -8
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/constants.d.ts +10 -0
  34. package/dist/constants.d.ts.map +1 -1
  35. package/dist/constants.js +10 -0
  36. package/dist/constants.js.map +1 -1
  37. package/dist/core/analyzer/ai-config-generator.d.ts +54 -0
  38. package/dist/core/analyzer/ai-config-generator.d.ts.map +1 -0
  39. package/dist/core/analyzer/ai-config-generator.js +85 -0
  40. package/dist/core/analyzer/ai-config-generator.js.map +1 -0
  41. package/dist/core/analyzer/artifact-generator.d.ts +27 -2
  42. package/dist/core/analyzer/artifact-generator.d.ts.map +1 -1
  43. package/dist/core/analyzer/artifact-generator.js +86 -8
  44. package/dist/core/analyzer/artifact-generator.js.map +1 -1
  45. package/dist/core/analyzer/codebase-digest.d.ts.map +1 -1
  46. package/dist/core/analyzer/codebase-digest.js +12 -11
  47. package/dist/core/analyzer/codebase-digest.js.map +1 -1
  48. package/dist/core/analyzer/env-extractor.d.ts +33 -0
  49. package/dist/core/analyzer/env-extractor.d.ts.map +1 -0
  50. package/dist/core/analyzer/env-extractor.js +196 -0
  51. package/dist/core/analyzer/env-extractor.js.map +1 -0
  52. package/dist/core/analyzer/http-route-parser.d.ts +36 -1
  53. package/dist/core/analyzer/http-route-parser.d.ts.map +1 -1
  54. package/dist/core/analyzer/http-route-parser.js +276 -0
  55. package/dist/core/analyzer/http-route-parser.js.map +1 -1
  56. package/dist/core/analyzer/middleware-extractor.d.ts +29 -0
  57. package/dist/core/analyzer/middleware-extractor.d.ts.map +1 -0
  58. package/dist/core/analyzer/middleware-extractor.js +195 -0
  59. package/dist/core/analyzer/middleware-extractor.js.map +1 -0
  60. package/dist/core/analyzer/schema-extractor.d.ts +41 -0
  61. package/dist/core/analyzer/schema-extractor.d.ts.map +1 -0
  62. package/dist/core/analyzer/schema-extractor.js +229 -0
  63. package/dist/core/analyzer/schema-extractor.js.map +1 -0
  64. package/dist/core/analyzer/ui-component-extractor.d.ts +43 -0
  65. package/dist/core/analyzer/ui-component-extractor.d.ts.map +1 -0
  66. package/dist/core/analyzer/ui-component-extractor.js +245 -0
  67. package/dist/core/analyzer/ui-component-extractor.js.map +1 -0
  68. package/dist/core/generator/openspec-format-generator.d.ts.map +1 -1
  69. package/dist/core/generator/openspec-format-generator.js +8 -0
  70. package/dist/core/generator/openspec-format-generator.js.map +1 -1
  71. package/dist/core/generator/spec-pipeline.d.ts +9 -0
  72. package/dist/core/generator/spec-pipeline.d.ts.map +1 -1
  73. package/dist/core/generator/spec-pipeline.js +94 -2
  74. package/dist/core/generator/spec-pipeline.js.map +1 -1
  75. package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -1
  76. package/dist/core/generator/stages/stage1-survey.js +43 -0
  77. package/dist/core/generator/stages/stage1-survey.js.map +1 -1
  78. package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -1
  79. package/dist/core/generator/stages/stage2-entities.js +6 -2
  80. package/dist/core/generator/stages/stage2-entities.js.map +1 -1
  81. package/dist/core/generator/stages/stage3-services.d.ts.map +1 -1
  82. package/dist/core/generator/stages/stage3-services.js +9 -2
  83. package/dist/core/generator/stages/stage3-services.js.map +1 -1
  84. package/dist/core/generator/stages/stage4-api.d.ts.map +1 -1
  85. package/dist/core/generator/stages/stage4-api.js +6 -2
  86. package/dist/core/generator/stages/stage4-api.js.map +1 -1
  87. package/dist/core/services/llm-service.d.ts +8 -9
  88. package/dist/core/services/llm-service.d.ts.map +1 -1
  89. package/dist/core/services/llm-service.js +59 -12
  90. package/dist/core/services/llm-service.js.map +1 -1
  91. package/dist/core/services/mcp-handlers/analysis.d.ts +27 -1
  92. package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -1
  93. package/dist/core/services/mcp-handlers/analysis.js +165 -2
  94. package/dist/core/services/mcp-handlers/analysis.js.map +1 -1
  95. package/dist/core/verifier/verification-engine.d.ts +67 -6
  96. package/dist/core/verifier/verification-engine.d.ts.map +1 -1
  97. package/dist/core/verifier/verification-engine.js +316 -90
  98. package/dist/core/verifier/verification-engine.js.map +1 -1
  99. package/dist/types/pipeline.d.ts +9 -0
  100. package/dist/types/pipeline.d.ts.map +1 -1
  101. package/dist/utils/command-helpers.d.ts +30 -0
  102. package/dist/utils/command-helpers.d.ts.map +1 -1
  103. package/dist/utils/command-helpers.js +69 -1
  104. package/dist/utils/command-helpers.js.map +1 -1
  105. package/examples/bmad/README.md +113 -0
  106. package/examples/bmad/agents/architect.md +226 -0
  107. package/examples/bmad/agents/dev-brownfield.md +69 -0
  108. package/examples/bmad/setup/architect.customize.yaml +14 -0
  109. package/examples/bmad/tasks/implement-story.md +254 -0
  110. package/examples/bmad/tasks/onboarding.md +169 -0
  111. package/examples/bmad/tasks/refactor.md +178 -0
  112. package/examples/bmad/tasks/sprint-planning.md +168 -0
  113. package/examples/bmad/templates/story.md +108 -0
  114. package/examples/cline-workflows/spec-gen-analyze-codebase.md +100 -0
  115. package/examples/cline-workflows/spec-gen-check-spec-drift.md +102 -0
  116. package/examples/cline-workflows/spec-gen-execute-refactor.md +194 -0
  117. package/examples/cline-workflows/spec-gen-implement-feature.md +238 -0
  118. package/examples/cline-workflows/spec-gen-plan-refactor.md +255 -0
  119. package/examples/cline-workflows/spec-gen-refactor-codebase.md +16 -0
  120. package/examples/drift-demo/openspec/config.yaml +14 -0
  121. package/examples/drift-demo/openspec/specs/architecture/spec.md +30 -0
  122. package/examples/drift-demo/openspec/specs/auth/spec.md +71 -0
  123. package/examples/drift-demo/openspec/specs/database/spec.md +33 -0
  124. package/examples/drift-demo/openspec/specs/overview/spec.md +20 -0
  125. package/examples/drift-demo/openspec/specs/projects/spec.md +55 -0
  126. package/examples/drift-demo/openspec/specs/tasks/spec.md +78 -0
  127. package/examples/drift-demo/package.json +21 -0
  128. package/examples/drift-demo/src/auth/auth-middleware.ts +30 -0
  129. package/examples/drift-demo/src/auth/auth-routes.ts +29 -0
  130. package/examples/drift-demo/src/auth/auth-service.ts +45 -0
  131. package/examples/drift-demo/src/database/connection.ts +27 -0
  132. package/examples/drift-demo/src/index.ts +16 -0
  133. package/examples/drift-demo/src/projects/project-model.ts +15 -0
  134. package/examples/drift-demo/src/projects/project-service.ts +34 -0
  135. package/examples/drift-demo/src/tasks/task-model.ts +37 -0
  136. package/examples/drift-demo/src/tasks/task-routes.ts +53 -0
  137. package/examples/drift-demo/src/tasks/task-service.ts +60 -0
  138. package/examples/drift-demo/src/utils/validation.ts +11 -0
  139. package/examples/drift-demo/tests/auth.test.ts +4 -0
  140. package/examples/drift-demo/tests/tasks.test.ts +4 -0
  141. package/examples/drift-demo/tsconfig.json +10 -0
  142. package/examples/drift-test/run-drift-test.sh +1087 -0
  143. package/examples/gsd/README.md +119 -0
  144. package/examples/gsd/commands/gsd/spec-gen-drift.md +111 -0
  145. package/examples/gsd/commands/gsd/spec-gen-orient.md +191 -0
  146. package/examples/mistral-vibe/README.md +101 -0
  147. package/examples/mistral-vibe/antipatterns-template.md +18 -0
  148. package/examples/mistral-vibe/skills/spec-gen-analyze-codebase/SKILL.md +123 -0
  149. package/examples/mistral-vibe/skills/spec-gen-brainstorm/SKILL.md +379 -0
  150. package/examples/mistral-vibe/skills/spec-gen-debug/SKILL.md +320 -0
  151. package/examples/mistral-vibe/skills/spec-gen-execute-refactor/SKILL.md +210 -0
  152. package/examples/mistral-vibe/skills/spec-gen-generate/SKILL.md +245 -0
  153. package/examples/mistral-vibe/skills/spec-gen-implement-story/SKILL.md +274 -0
  154. package/examples/mistral-vibe/skills/spec-gen-plan-refactor/SKILL.md +251 -0
  155. package/examples/openspec-analysis/README.md +59 -0
  156. package/examples/openspec-analysis/SUMMARY.md +72 -0
  157. package/examples/openspec-analysis/config.json +16 -0
  158. package/examples/openspec-analysis/dependencies.mermaid +35 -0
  159. package/examples/openspec-analysis/dependency-graph.json +12116 -0
  160. package/examples/openspec-analysis/llm-context.json +119 -0
  161. package/examples/openspec-analysis/repo-structure.json +871 -0
  162. package/examples/openspec-cli/README.md +67 -0
  163. package/examples/openspec-cli/openspec/config.yaml +26 -0
  164. package/examples/openspec-cli/openspec/specs/architecture/spec.md +178 -0
  165. package/examples/openspec-cli/openspec/specs/artifact-graph/spec.md +143 -0
  166. package/examples/openspec-cli/openspec/specs/cli/spec.md +138 -0
  167. package/examples/openspec-cli/openspec/specs/overview/spec.md +60 -0
  168. package/examples/openspec-cli/openspec/specs/parsing/spec.md +123 -0
  169. package/examples/openspec-cli/openspec/specs/validation/spec.md +108 -0
  170. package/examples/spec-kit/README.md +104 -0
  171. package/examples/spec-kit/commands/drift.md +87 -0
  172. package/examples/spec-kit/commands/orient.md +138 -0
  173. package/examples/spec-kit/extension.yml +54 -0
  174. package/package.json +3 -6
package/README.md CHANGED
@@ -18,10 +18,11 @@ npm install -g spec-gen-cli
18
18
  cd /path/to/your-project
19
19
 
20
20
  # Run the pipeline
21
- spec-gen init # Detect project type, create config
22
- spec-gen analyze # Static analysis (no API key needed)
23
- spec-gen generate # Generate specs (requires API key)
24
- spec-gen drift # Check for spec drift
21
+ spec-gen init # Detect project type, create config
22
+ spec-gen analyze --ai-configs # Static analysis + generate context files (CLAUDE.md, .cursorrules…)
23
+ spec-gen setup # Install workflow skills (Vibe, Cline, GSD, BMAD)
24
+ spec-gen generate # Generate specs (requires API key)
25
+ spec-gen drift # Check for spec drift
25
26
 
26
27
  # Troubleshoot setup issues
27
28
  spec-gen doctor # Check environment and configuration
@@ -94,6 +95,8 @@ Scans your codebase using pure static analysis:
94
95
  - Resolves Python absolute imports (`from services.retriever import X`) to local files
95
96
  - Synthesizes cross-file dependency edges from call-graph data for languages without file-level imports (Swift, C++), so the dependency graph and viewer are meaningful even in single-module projects
96
97
  - Clusters related files into structural business domains automatically
98
+ - Extracts DB schema tables (Prisma, TypeORM, Drizzle, SQLAlchemy), HTTP routes (Express, NestJS, Next.js, FastAPI, Flask), UI components (React, Vue, Svelte, Angular), middleware chains, and environment variables — saved as structured JSON artifacts in `.spec-gen/analysis/`
99
+ - Generates AI tool config files (`CLAUDE.md`, `.cursorrules`, `.clinerules/`, `.vibe/skills/`, etc.) with `--ai-configs`
97
100
  - Produces structured context that makes LLM generation more accurate
98
101
 
99
102
  **2. Generate** (API key required)
@@ -477,6 +480,7 @@ Priority: CLI flags > environment variables > config file > provider defaults.
477
480
  | `spec-gen audit` | Report spec coverage gaps: uncovered functions, hub gaps, stale domains | No |
478
481
  | `spec-gen run` | Full pipeline: init, analyze, generate | Yes |
479
482
  | `spec-gen view` | Launch interactive graph & spec viewer in the browser | No |
483
+ | `spec-gen setup` | Install workflow skills into the project (Vibe, Cline, GSD, BMAD) | No |
480
484
  | `spec-gen mcp` | Start MCP server (stdio, for Cline / Claude Code) | No |
481
485
  | `spec-gen doctor` | Check environment and configuration for common issues | No |
482
486
  | `spec-gen refresh-stories` | Refresh story files with latest structural context after each commit | No |
@@ -552,10 +556,39 @@ spec-gen analyze [options]
552
556
  --include <glob> # Additional include patterns
553
557
  --exclude <glob> # Additional exclude patterns
554
558
  --force # Force re-analysis (bypass 1-hour cache)
559
+ --ai-configs # Generate AI tool config files (CLAUDE.md, .cursorrules, .clinerules/spec-gen.md,
560
+ # .github/copilot-instructions.md, .windsurf/rules.md, .vibe/skills/spec-gen.md)
561
+ # Safe to re-run — skips files that already exist, marks pre-existing ones.
555
562
  --no-embed # Skip building the semantic vector index (index is built by default when embedding is configured)
556
563
  --reindex-specs # Re-index OpenSpec specs into the vector index without re-running full analysis
557
564
  ```
558
565
 
566
+ ### Setup Options
567
+
568
+ ```bash
569
+ spec-gen setup [options]
570
+ --tools <list> Comma-separated tools to install: vibe, cline, gsd, bmad (default: interactive prompt)
571
+ --dir <path> Project root directory (default: current directory)
572
+ ```
573
+
574
+ Installs workflow skills from the spec-gen package into the project. Skills are static assets — identical across projects — so this command only needs to be run once at project onboarding and again after upgrading spec-gen.
575
+
576
+ Files installed:
577
+
578
+ | Tool | Destination | Skills |
579
+ |------|-------------|--------|
580
+ | `vibe` | `.vibe/skills/spec-gen-{name}/SKILL.md` | analyze-codebase, brainstorm, debug, execute-refactor, generate, implement-story, plan-refactor |
581
+ | `cline` | `.clinerules/workflows/spec-gen-{name}.md` | analyze-codebase, check-spec-drift, execute-refactor, implement-feature, plan-refactor, refactor-codebase |
582
+ | `gsd` | `.claude/commands/gsd/spec-gen-{name}.md` | orient, drift |
583
+ | `bmad` | `_bmad/spec-gen/{agents,tasks}/` | agents: architect, dev-brownfield — tasks: implement-story, onboarding, refactor, sprint-planning |
584
+
585
+ Never overwrites existing files. Combine with `analyze --ai-configs` for a complete agent setup:
586
+
587
+ ```bash
588
+ spec-gen analyze --ai-configs # project-specific context files
589
+ spec-gen setup # workflow skills
590
+ ```
591
+
559
592
  ### Verify Options
560
593
 
561
594
  ```bash
@@ -617,7 +650,27 @@ This is structural signal, not prose. It complements `openspec/specs/overview/sp
617
650
 
618
651
  ### Setup
619
652
 
620
- After running `spec-gen analyze`, wire the generated digest into your agent's context:
653
+ Two commands, run once per project:
654
+
655
+ ```bash
656
+ spec-gen analyze --ai-configs # generate project-specific context files
657
+ spec-gen setup # install workflow skills
658
+ ```
659
+
660
+ **`analyze --ai-configs`** generates files that are specific to this project — they reference `.spec-gen/analysis/CODEBASE.md` and embed the project name. Safe to re-run (skips existing files).
661
+
662
+ **`spec-gen setup`** copies static workflow assets from the spec-gen package that are identical across all projects. Run once at onboarding; re-run after upgrading spec-gen to get new or updated skills.
663
+
664
+ ```
665
+ spec-gen setup [--tools vibe,cline,gsd,bmad]
666
+
667
+ Mistral Vibe -> .vibe/skills/spec-gen-{name}/SKILL.md (7 skills)
668
+ Cline / Roo -> .clinerules/workflows/spec-gen-{name}.md (6 workflows)
669
+ GSD -> .claude/commands/gsd/spec-gen-{name}.md (2 commands)
670
+ BMAD -> _bmad/spec-gen/{agents,tasks}/ (2 agents, 4 tasks)
671
+ ```
672
+
673
+ Wire the generated digest into your agent's context:
621
674
 
622
675
  **Claude Code** — add to `CLAUDE.md`:
623
676
 
@@ -625,7 +678,7 @@ After running `spec-gen analyze`, wire the generated digest into your agent's co
625
678
  @.spec-gen/analysis/CODEBASE.md
626
679
  @openspec/specs/overview/spec.md
627
680
 
628
- ## spec-gen MCP tools — when to use them
681
+ ## spec-gen MCP workflow
629
682
 
630
683
  | Situation | Tool |
631
684
  |-----------|------|
@@ -638,7 +691,17 @@ After running `spec-gen analyze`, wire the generated digest into your agent's co
638
691
  | Finding spec requirements by meaning | `search_specs` |
639
692
  | Checking spec coverage before starting a feature | `audit_spec_coverage` |
640
693
 
641
- For all other cases (reading a file, grepping, listing files) use native tools directly.
694
+ **Follow this sequence for every task:**
695
+
696
+ 1. **`orient "<task description>"`** — always start here. Returns relevant functions, files, spec domains, call paths, and insertion points in one call.
697
+ 2. **If the task involves data models, APIs, or config** — call the relevant inventory tool:
698
+ `get_schema_inventory` · `get_route_inventory` · `get_env_vars` · `get_ui_components` · `get_middleware_inventory`
699
+ 3. **If debugging a call flow** ("how does X reach Y?") — `trace_execution_path`
700
+ 4. **Before modifying a function** — `get_subgraph` to understand blast radius
701
+ 5. **Before opening a PR** — `check_spec_drift`
702
+
703
+ **On-demand** (when orient's results aren't enough):
704
+ `search_code` · `suggest_insertion_points` · `get_spec <domain>` · `search_specs` · `analyze_impact` · `get_function_body` · `get_function_skeleton`
642
705
  ```
643
706
 
644
707
  **Cline / Roo Code / Kilocode** — create `.clinerules/spec-gen.md`:
@@ -656,29 +719,46 @@ Always use these before writing or modifying code.
656
719
  - Read `openspec/specs/overview/spec.md` — functional domain map: what the system does,
657
720
  which domains exist, data-flow requirements.
658
721
 
659
- ## MCP tools — use these instead of grep/read when exploring
722
+ ## spec-gen MCP workflow
660
723
 
661
- - **Orient first**: call `orient` at the start of every task — it returns relevant functions,
662
- files, specs, call paths, and insertion points in one shot.
663
- - **Finding code**: use `search_code` when you don't know which file or function handles a concept.
664
- - **Call topology**: use `get_subgraph` or `analyze_impact` when you need to understand
665
- how calls flow across multiple files (not just a single file).
666
- - **Adding a feature**: call `suggest_insertion_points` before deciding where to add code —
667
- it accounts for the dependency graph, not just filenames.
668
- - **Reading specs**: call `get_spec <domain>` before writing code in that domain;
669
- use `search_specs` to find requirements by meaning when you don't know the domain name.
670
- - **Checking drift**: call `check_spec_drift` after modifying a file to verify it still
671
- matches its spec — do not skip this step before opening a PR.
724
+ **Follow this sequence for every task:**
672
725
 
673
- Use native tools (Read, Grep, Glob) only for cases not covered above.
726
+ 1. **`orient "<task description>"`** — always start here. Returns relevant functions, files, spec domains, call paths, and insertion points in one call.
727
+ 2. **If the task involves data models, APIs, or config** — call the relevant inventory tool:
728
+ `get_schema_inventory` · `get_route_inventory` · `get_env_vars` · `get_ui_components` · `get_middleware_inventory`
729
+ 3. **If debugging a call flow** ("how does X reach Y?") — `trace_execution_path`
730
+ 4. **Before modifying a function** — `get_subgraph` to understand blast radius
731
+ 5. **Before opening a PR** — `check_spec_drift`
732
+
733
+ **On-demand** (when orient's results aren't enough):
734
+ `search_code` · `suggest_insertion_points` · `get_spec <domain>` · `search_specs` · `analyze_impact` · `get_function_body` · `get_function_skeleton`
674
735
  ```
675
736
 
676
- `CODEBASE.md` gives the agent passive architectural context. `overview/spec.md` gives the functional domain map. The table tells it when the passive context isn't enough and an active MCP tool call is warranted.
737
+ `CODEBASE.md` gives the agent passive architectural context. `overview/spec.md` gives the functional domain map. The workflow tells it exactly what to call and when, without requiring the agent to choose from a menu.
677
738
 
678
739
  > **Tip:** `spec-gen analyze` prints these snippets after every run as a reminder.
679
740
 
680
741
  > **Note:** `.spec-gen/analysis/` is git-ignored — each developer generates it locally. Re-run `spec-gen analyze` after significant structural changes to keep the digest current.
681
742
 
743
+ **Mistral Vibe (Devstral)** — inject CODEBASE.md into Vibe's global context:
744
+
745
+ > **Vibe shows "0 skills" after setup?** Check `~/.vibe/config.toml` — if `enabled_skills` is set to a pattern like `["SKILL-*"]` (the old naming format), it won't match the new `spec-gen-*` names. Change it to `["spec-gen-*"]` or `["*"]` to load all skills.
746
+
747
+ 1. Run `spec-gen analyze` to generate `.spec-gen/analysis/CODEBASE.md`
748
+ 2. Append it to `~/.vibe/prompts/spec-gen.md` so Devstral absorbs it at every session start:
749
+
750
+ ```bash
751
+ cat .spec-gen/analysis/CODEBASE.md >> ~/.vibe/prompts/spec-gen.md
752
+ ```
753
+
754
+ Or install the Vibe skill (creates a `/spec-gen` slash command in `.vibe/skills/spec-gen.md`):
755
+
756
+ ```bash
757
+ spec-gen analyze --ai-configs # creates .vibe/skills/spec-gen.md
758
+ ```
759
+
760
+ Then invoke `/spec-gen` inside Vibe to get architecture context on demand.
761
+
682
762
  ---
683
763
 
684
764
  ## MCP Server
@@ -791,7 +871,7 @@ curl -sL https://raw.githubusercontent.com/clay-good/spec-gen/main/skills/opensp
791
871
 
792
872
  All tools run on **pure static analysis** -- no LLM quota consumed.
793
873
 
794
- **Analysis**
874
+ **Run analysis**
795
875
 
796
876
  | Tool | Description | Requires prior analysis |
797
877
  |------|-------------|:---:|
@@ -800,30 +880,43 @@ All tools run on **pure static analysis** -- no LLM quota consumed.
800
880
  | `get_signatures` | Compact function/class signatures per file. Filter by path substring with `filePattern`. Useful for understanding a module's public API without reading full source. | Yes |
801
881
  | `get_duplicate_report` | Detect duplicate code: Type 1 (exact clones), Type 2 (structural -- renamed variables), Type 3 (near-clones with Jaccard similarity >= 0.7). Groups sorted by impact. | Yes |
802
882
 
803
- **Refactoring**
804
-
805
- | Tool | Description | Requires prior analysis |
806
- |------|-------------|:---:|
807
- | `get_refactor_report` | Prioritized list of functions with structural issues: unreachable code, hub overload (high fan-in), god functions (high fan-out), SRP violations, cyclic dependencies. | Yes |
808
- | `analyze_impact` | Deep impact analysis for a specific function: fan-in/fan-out, upstream call chain, downstream critical path, risk score (0-100), blast radius, and recommended strategy. | Yes |
809
- | `get_low_risk_refactor_candidates` | Safest functions to refactor first: low fan-in, low fan-out, not a hub, no cyclic involvement. Best starting point for incremental, low-risk sessions. | Yes |
810
- | `get_leaf_functions` | Functions that make no internal calls (leaves of the call graph). Zero downstream blast radius. Sorted by fan-in by default -- most-called leaves have the best unit-test ROI. | Yes |
811
- | `get_critical_hubs` | Highest-impact hub functions ranked by criticality. Each hub gets a stability score (0-100) and a recommended approach: extract, split, facade, or delegate. | Yes |
812
- | `get_god_functions` | Detect god functions (high fan-out, likely orchestrators) in the project or in a specific file, and return their call-graph neighborhood. Use this to identify which functions need to be refactored and understand what logical blocks to extract. | Yes |
813
-
814
- **Navigation**
883
+ **Explore & Navigate**
815
884
 
816
885
  | Tool | Description | Requires prior analysis |
817
886
  |------|-------------|:---:|
818
887
  | `orient` | **Single entry point for any new task.** Given a natural-language task description, returns in one call: relevant functions, source files, spec domains, call neighbourhoods, insertion-point candidates, and matching spec sections. Start here. | Yes (+ embedding) |
888
+ | `search_code` | Natural-language semantic search over indexed functions. Returns the closest matches by meaning with similarity score, call-graph neighbourhood enrichment, and spec-linked peer functions. Falls back to BM25 keyword search when no embedding server is configured. | Yes (+ embedding) |
889
+ | `suggest_insertion_points` | Semantic search over the vector index to find the best existing functions to extend or hook into when implementing a new feature. Returns ranked candidates with role and strategy. Falls back to BM25 keyword search when no embedding server is configured. | Yes (+ embedding) |
819
890
  | `get_subgraph` | Depth-limited subgraph centred on a function. Direction: `downstream` (what it calls), `upstream` (who calls it), or `both`. Output as JSON or Mermaid diagram. | Yes |
820
- | `get_architecture_overview` | High-level cluster map: roles (entry layer, orchestrator, core utilities, API layer, internal), inter-cluster dependencies, global entry points, and critical hubs. No LLM required. | Yes |
821
- | `get_function_skeleton` | Noise-stripped view of a source file: logs, inline comments, and non-JSDoc block comments removed. Signatures, control flow, return/throw, and call expressions preserved. Returns reduction %. | No |
891
+ | `trace_execution_path` | Find all call-graph paths between two functions (DFS, configurable depth/max-paths). Use this when debugging: "how does request X reach function Y?" Returns shortest path, all paths sorted by hops, and a step-by-step chain per path. | Yes |
822
892
  | `get_function_body` | Return the exact source code of a named function in a file. | No |
893
+ | `get_function_skeleton` | Noise-stripped view of a source file: logs, inline comments, and non-JSDoc block comments removed. Signatures, control flow, return/throw, and call expressions preserved. Returns reduction %. | No |
823
894
  | `get_file_dependencies` | Return the file-level import dependencies for a given source file (imports, imported-by, or both). | Yes |
824
- | `trace_execution_path` | Find all call-graph paths between two functions (DFS, configurable depth/max-paths). Use this when debugging: "how does request X reach function Y?" Returns shortest path, all paths sorted by hops, and a step-by-step chain per path. | Yes |
825
- | `suggest_insertion_points` | Semantic search over the vector index to find the best existing functions to extend or hook into when implementing a new feature. Returns ranked candidates with role and strategy. Falls back to BM25 keyword search when no embedding server is configured. | Yes (+ embedding) |
826
- | `search_code` | Natural-language semantic search over indexed functions. Returns the closest matches by meaning with similarity score, call-graph neighbourhood enrichment, and spec-linked peer functions. Falls back to BM25 keyword search when no embedding server is configured. | Yes (+ embedding) |
895
+ | `get_architecture_overview` | High-level cluster map: roles (entry layer, orchestrator, core utilities, API layer, internal), inter-cluster dependencies, global entry points, and critical hubs. No LLM required. | Yes |
896
+ | `get_signatures` | Compact function/class signatures per file. Filter by path substring with `filePattern`. Useful for understanding a module's public API without reading full source. | Yes |
897
+
898
+ **Stack inventory**
899
+
900
+ | Tool | Description | Requires prior analysis |
901
+ |------|-------------|:---:|
902
+ | `get_route_inventory` | All detected HTTP routes with method, path, handler, and framework. Supports Express, NestJS, Next.js, FastAPI, Flask, and more. | Yes |
903
+ | `get_schema_inventory` | ORM schema tables with field names and types. Supports Prisma, TypeORM, Drizzle, and SQLAlchemy. | Yes |
904
+ | `get_ui_components` | Detected UI components with framework, props, and source file. Supports React, Vue, Svelte, and Angular. | Yes |
905
+ | `get_env_vars` | Env vars referenced in source code with `required` (no fallback) and `hasDefault` flags. Supports JS/TS, Python, Go, and Ruby. | Yes |
906
+ | `get_middleware_inventory` | Detected middleware with type (auth/cors/rate-limit/validation/logging/error-handler) and framework. | Yes |
907
+
908
+ **Code quality**
909
+
910
+ | Tool | Description | Requires prior analysis |
911
+ |------|-------------|:---:|
912
+ | `get_call_graph` | Hub functions (high fan-in), entry points (no internal callers), and architectural layer violations. Supports TypeScript, JavaScript, Python, Go, Rust, Ruby, Java, C++. | Yes |
913
+ | `get_refactor_report` | Prioritized list of functions with structural issues: unreachable code, hub overload (high fan-in), god functions (high fan-out), SRP violations, cyclic dependencies. | Yes |
914
+ | `get_critical_hubs` | Highest-impact hub functions ranked by criticality. Each hub gets a stability score (0-100) and a recommended approach: extract, split, facade, or delegate. | Yes |
915
+ | `get_god_functions` | Detect god functions (high fan-out, likely orchestrators) in the project or in a specific file, and return their call-graph neighborhood. Use this to identify which functions need to be refactored and understand what logical blocks to extract. | Yes |
916
+ | `analyze_impact` | Deep impact analysis for a specific function: fan-in/fan-out, upstream call chain, downstream critical path, risk score (0-100), blast radius, and recommended strategy. | Yes |
917
+ | `get_low_risk_refactor_candidates` | Safest functions to refactor first: low fan-in, low fan-out, not a hub, no cyclic involvement. Best starting point for incremental, low-risk sessions. | Yes |
918
+ | `get_leaf_functions` | Functions that make no internal calls (leaves of the call graph). Zero downstream blast radius. Sorted by fan-in by default -- most-called leaves have the best unit-test ROI. | Yes |
919
+ | `get_duplicate_report` | Detect duplicate code: Type 1 (exact clones), Type 2 (structural -- renamed variables), Type 3 (near-clones with Jaccard similarity >= 0.7). Groups sorted by impact. | Yes |
827
920
 
828
921
  **Specs**
829
922
 
@@ -1395,6 +1488,7 @@ console.log(`Analyzed ${analysis.repoMap.summary.analyzedFiles} files`);
1395
1488
  | `specGenVerify(options?)` | Verify spec accuracy | Yes |
1396
1489
  | `specGenDrift(options?)` | Detect spec-to-code drift | No* |
1397
1490
  | `specGenRun(options?)` | Full pipeline: init + analyze + generate | Yes |
1491
+ | `specGenAudit(options?)` | Parity audit: uncovered functions, hub gaps, orphan requirements, stale domains | No |
1398
1492
  | `specGenGetSpecRequirements(options?)` | Read requirement blocks from generated specs | No |
1399
1493
 
1400
1494
  \* `specGenDrift` requires an API key only when `llmEnhanced: true`.
@@ -1451,11 +1545,11 @@ for (const [key, req] of Object.entries(requirements)) {
1451
1545
  npm install # Install dependencies
1452
1546
  npm run dev # Development mode (watch)
1453
1547
  npm run build # Build
1454
- npm run test:run # Run tests (2200+ unit tests)
1548
+ npm run test:run # Run tests (2300+ unit tests)
1455
1549
  npm run typecheck # Type check
1456
1550
  ```
1457
1551
 
1458
- 2200+ unit tests covering static analysis, call graph (including Swift), refactor analysis, spec mapping, drift detection, LLM enhancement, ADR generation, MCP handlers, change proposals, cross-file edge synthesis, and the full CLI.
1552
+ 2300+ unit tests covering static analysis, call graph (including Swift), refactor analysis, spec mapping, drift detection, LLM enhancement, ADR generation, MCP handlers, change proposals, cross-file edge synthesis, and the full CLI.
1459
1553
 
1460
1554
  ## Links
1461
1555
 
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/api/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AA8DvF;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CA2O/F"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/api/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AA8DvF;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4O/F"}
@@ -149,6 +149,7 @@ export async function specGenGenerate(options = {}) {
149
149
  outputDir: join(rootPath, SPEC_GEN_DIR, SPEC_GEN_GENERATION_SUBDIR),
150
150
  saveIntermediate: true,
151
151
  generateADRs: adr || adrOnly,
152
+ force: options.force,
152
153
  });
153
154
  let pipelineResult;
154
155
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/api/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,cAAc,EAAkB,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAKnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,SAAS,QAAQ,CAAC,UAAwC,EAAE,IAAY,EAAE,MAAkD,EAAE,MAAe;IAC3I,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC;AAUD,KAAK,UAAU,gBAAgB,CAAC,YAAoB;IAClD,MAAM,aAAa,GAAG,MAAM,YAAY,CACtC,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,EAC3C,uBAAuB,CACxB,CAAC;IACF,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,UAAU,GAAG,MAAM,YAAY,CACnC,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,EACxC,oBAAoB,CACrB,IAAI;QACH,aAAa,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;QAC3E,WAAW,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;QACpE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;KACxE,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,EAC7C,yBAAyB,CAC1B,IAAI,SAAS,CAAC;IAEf,MAAM,cAAc,GAAG,MAAM,YAAY,CACvC,IAAI,CAAC,YAAY,EAAE,4BAA4B,CAAC,EAChD,4BAA4B,CAC7B,IAAI,SAAS,CAAC;IAEf,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA8B,EAAE;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACnD,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,IAAI,GAAG,0BAA0B,GAAG,CAAC;IACjF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAE/B,cAAc;IACd,QAAQ,CAAC,UAAU,EAAE,uBAAuB,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,eAAe,GAAG,aAAa,CAAC,YAAY,IAAI,YAAY,CAAC;IACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC,uBAAuB;IACnE,QAAQ,CAAC,UAAU,EAAE,uBAAuB,EAAE,UAAU,CAAC,CAAC;IAE1D,gBAAgB;IAChB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC;IAC7E,QAAQ,CAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC,aAAa,QAAQ,CAAC,CAAC;IAExG,mBAAmB;IACnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAE7C,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;IACjF,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAEhG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,kBAAkB,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC;QACxH,MAAM,IAAI,KAAK,CACb,gIAAgI,CACjI,CAAC;IACJ,CAAC;IAED,MAAM,mBAAmB,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW;QACpD,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACtB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe;gBACnC,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,iBAAiB,GAAG,kBAAkB,IAAI,mBAAmB,CAAC;IAEpE,MAAM,aAAa,GAA2B;QAC5C,SAAS,EAAE,uBAAuB;QAClC,MAAM,EAAE,oBAAoB;QAC5B,eAAe,EAAE,2BAA2B;QAC5C,OAAO,EAAE,qBAAqB;QAC9B,MAAM,EAAE,oBAAoB;QAC5B,aAAa,EAAE,aAAa;QAC5B,cAAc,EAAE,cAAc;QAC9B,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,cAAc;KAC/B,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAE3G,MAAM,UAAU,GAAG,aAAkD,CAAC;IACtE,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB;WAC/C,OAAO,CAAC,GAAG,CAAC,sBAAsB;WAClC,aAAa,CAAC,UAAU,CAAC,mBAAmB;WAC5C,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAEvC,iCAAiC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC;IAC5E,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,UAAU,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,GAAG,CAAC;IACjD,CAAC;IAED,qBAAqB;IACrB,QAAQ,CAAC,UAAU,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,GAAe,CAAC;IACpB,IAAI,CAAC;QACH,GAAG,GAAG,gBAAgB,CAAC;YACrB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,cAAc;YACrB,mBAAmB,EAAE,gBAAgB;YACrC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,GAAG,EAAE,OAAO;YACtD,SAAS;YACT,aAAa,EAAE,IAAI;YACnB,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,oBAAoB,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iCAAkC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,QAAQ,CAAC,UAAU,EAAE,sBAAsB,EAAE,UAAU,EAAE,GAAG,iBAAiB,IAAI,cAAc,EAAE,CAAC,CAAC;IAEnG,gCAAgC;IAChC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC;QACrD,OAAO;YACL,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,eAAe,EAAE,aAAa,CAAC,OAAO,IAAI,OAAO;gBACjD,cAAc,EAAE,OAAO;gBACvB,YAAY,EAAE,EAAE;gBAChB,YAAY,EAAE,EAAE;gBAChB,aAAa,EAAE,EAAE;gBACjB,WAAW,EAAE,EAAE;gBACf,aAAa,EAAE,KAAK;gBACpB,gBAAgB,EAAE,EAAE;gBACpB,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,CAAC,yCAAyC,CAAC;aACvD;YACD,cAAc,EAAE,EAAsC;YACtD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;IAED,eAAe;IACf,QAAQ,CAAC,UAAU,EAAE,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,GAAG,EAAE;QAC/C,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,0BAA0B,CAAC;QACnE,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,GAAG,IAAI,OAAO;KAC7B,CAAC,CAAC;IAEH,IAAI,cAAc,CAAC;IACnB,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,oBAAqB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,QAAQ,CAAC,UAAU,EAAE,iCAAiC,EAAE,UAAU,CAAC,CAAC;IAEpE,4FAA4F;IAC5F,IAAI,eAA4C,CAAC;IACjD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,IAAI,cAA6F,CAAC;YAClG,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;YAC3E,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;YACzE,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;gBACnF,IAAI,QAA2D,CAAC;gBAChE,IAAI,CAAC;oBAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;gBAC5E,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;oBACvD,IAAI,GAAG;wBAAE,QAAQ,GAAG,GAAG,CAAC;gBAC1B,CAAC;gBACD,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,QAAQ,CAAC;oBACrB,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5F,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;YAC/E,eAAe,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAClE,QAAQ,CAAC,UAAU,EAAE,6BAA6B,EAAE,UAAU,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAED,eAAe;IACf,QAAQ,CAAC,UAAU,EAAE,2BAA2B,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAI,uBAAuB,CAAC;QAClD,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,iBAAiB,EAAE,IAAI;QACvB,qBAAqB,EAAE,IAAI;QAC3B,QAAQ;KACT,CAAC,CAAC;IAEH,IAAI,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAEnG,oBAAoB;IACpB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACrE,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC5C,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CACrG,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;YACpC,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC3D,cAAc,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,QAAQ,CAAC,UAAU,EAAE,2BAA2B,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEhG,cAAc;IACd,QAAQ,CAAC,UAAU,EAAE,wBAAwB,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,SAAS,GAAc,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;IAE5D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,QAAQ;QACR,SAAS;QACT,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9E,QAAQ,CAAC,UAAU,EAAE,wBAAwB,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,CAAC;IAEpG,wBAAwB;IACxB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACvD,MAAM,SAAS,CACb,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,EAC7C,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,OAAO,CACR,CAAC;QACF,QAAQ,CAAC,UAAU,EAAE,yBAAyB,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,iBAAiB,GAAG,IAAI,qBAAqB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC/E,MAAM,iBAAiB,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEnD,gBAAgB;IAChB,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAErC,OAAO;QACL,MAAM;QACN,cAAc;QACd,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/api/generate.ts"],"names":[],"mappings":"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"}
@@ -99,6 +99,8 @@ export interface GenerateApiOptions extends BaseOptions {
99
99
  dryRun?: boolean;
100
100
  /** Path to analysis directory. Default: '.spec-gen/analysis/' */
101
101
  analysisPath?: string;
102
+ /** Force regeneration from scratch, ignoring any cached stage results on disk */
103
+ force?: boolean;
102
104
  }
103
105
  export interface GenerateResult {
104
106
  report: GenerationReport;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,9 @@ interface AnalysisResult {
14
14
  artifacts: AnalysisArtifacts;
15
15
  duration: number;
16
16
  }
17
+ /**
18
+ * Check if analysis exists and return its age
19
+ */
17
20
  /**
18
21
  * Run the complete analysis pipeline
19
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEhG,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,2CAA2C,CAAC;AAkBnD,UAAU,cAAc;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiCD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GACA,OAAO,CAAC,cAAc,CAAC,CAiEzB;AAMD,eAAO,MAAM,cAAc,SA4bvB,CAAC"}
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEhG,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,2CAA2C,CAAC;AAyBnD,UAAU,cAAc;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAaD;;GAEG;AAMH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GACA,OAAO,CAAC,cAAc,CAAC,CAoFzB;AAMD,eAAO,MAAM,cAAc,SAyhBvB,CAAC"}
@@ -5,10 +5,10 @@
5
5
  * Outputs repository map, dependency graph, and file significance scores.
6
6
  */
7
7
  import { Command } from 'commander';
8
- import { stat, writeFile, mkdir, readFile } from 'node:fs/promises';
8
+ import { writeFile, mkdir, readFile } from 'node:fs/promises';
9
9
  import { join } from 'node:path';
10
10
  import { logger } from '../../utils/logger.js';
11
- import { fileExists, formatDuration, formatAge } from '../../utils/command-helpers.js';
11
+ import { fileExists, formatDuration, formatAge, getAnalysisAge } from '../../utils/command-helpers.js';
12
12
  import { ANALYSIS_STALE_THRESHOLD_MS, DEFAULT_MAX_FILES, MAX_DEEP_ANALYSIS_FILES, DEEP_ANALYSIS_FILE_RATIO, MAX_VALIDATION_FILES, SPEC_GEN_ANALYSIS_REL_PATH, SPEC_GEN_CONFIG_REL_PATH, OPENSPEC_DIR, OPENSPEC_SPECS_SUBDIR, ARTIFACT_REPO_STRUCTURE, ARTIFACT_DEPENDENCY_GRAPH, ARTIFACT_REFACTOR_PRIORITIES, } from '../../constants.js';
13
13
  import { readSpecGenConfig } from '../../core/services/config-manager.js';
14
14
  import { RepositoryMapper } from '../../core/analyzer/repository-mapper.js';
@@ -17,6 +17,12 @@ import { AnalysisArtifactGenerator, } from '../../core/analyzer/artifact-generat
17
17
  import { buildArchitectureOverview, writeArchitectureMd, } from '../../core/analyzer/architecture-writer.js';
18
18
  import { EmbeddingService } from '../../core/analyzer/embedding-service.js';
19
19
  import { generateCodebaseDigest } from '../../core/analyzer/codebase-digest.js';
20
+ import { extractUIComponents } from '../../core/analyzer/ui-component-extractor.js';
21
+ import { extractSchemas } from '../../core/analyzer/schema-extractor.js';
22
+ import { buildRouteInventory } from '../../core/analyzer/http-route-parser.js';
23
+ import { extractMiddleware } from '../../core/analyzer/middleware-extractor.js';
24
+ import { extractEnvVars } from '../../core/analyzer/env-extractor.js';
25
+ import { generateAiConfigs, AI_TOOL_TARGETS } from '../../core/analyzer/ai-config-generator.js';
20
26
  // ============================================================================
21
27
  // HELPER FUNCTIONS
22
28
  // ============================================================================
@@ -29,19 +35,6 @@ function collect(value, previous) {
29
35
  /**
30
36
  * Check if analysis exists and return its age
31
37
  */
32
- async function getAnalysisAge(outputPath) {
33
- try {
34
- const repoStructurePath = join(outputPath, ARTIFACT_REPO_STRUCTURE);
35
- if (!(await fileExists(repoStructurePath))) {
36
- return null;
37
- }
38
- const stats = await stat(repoStructurePath);
39
- return Date.now() - stats.mtime.getTime();
40
- }
41
- catch {
42
- return null;
43
- }
44
- }
45
38
  // ============================================================================
46
39
  // CORE ANALYSIS FUNCTION
47
40
  // ============================================================================
@@ -82,7 +75,17 @@ export async function runAnalysis(rootPath, outputPath, options) {
82
75
  logger.warning(`Circular dependencies: ${depGraph.statistics.cycleCount}`);
83
76
  }
84
77
  logger.blank();
85
- // Phase 3: Generate Artifacts
78
+ // Phase 3: Run new enrichment extractors in parallel
79
+ logger.analysis('Extracting UI components, schemas, routes, and env vars...');
80
+ const allFilePaths = repoMap.allFiles.map(f => f.path);
81
+ const [uiComponents, schemas, routeInventory, middleware, envVars] = await Promise.all([
82
+ extractUIComponents(allFilePaths, rootPath),
83
+ extractSchemas(allFilePaths, rootPath),
84
+ buildRouteInventory(allFilePaths, rootPath),
85
+ extractMiddleware(allFilePaths, rootPath),
86
+ extractEnvVars(allFilePaths, rootPath),
87
+ ]);
88
+ // Phase 4: Generate Artifacts
86
89
  logger.analysis('Generating analysis artifacts...');
87
90
  const artifactGenerator = new AnalysisArtifactGenerator({
88
91
  rootDir: rootPath,
@@ -90,7 +93,13 @@ export async function runAnalysis(rootPath, outputPath, options) {
90
93
  maxDeepAnalysisFiles: Math.min(MAX_DEEP_ANALYSIS_FILES, Math.ceil(repoMap.highValueFiles.length * DEEP_ANALYSIS_FILE_RATIO)),
91
94
  maxValidationFiles: MAX_VALIDATION_FILES,
92
95
  });
93
- const artifacts = await artifactGenerator.generateAndSave(repoMap, depGraph);
96
+ const artifacts = await artifactGenerator.generateAndSave(repoMap, depGraph, {
97
+ uiComponents,
98
+ schemas,
99
+ routeInventory,
100
+ middleware,
101
+ envVars,
102
+ });
94
103
  // Also save the raw dependency graph
95
104
  await writeFile(join(outputPath, ARTIFACT_DEPENDENCY_GRAPH), JSON.stringify(depGraph, null, 2));
96
105
  const duration = Date.now() - startTime;
@@ -109,6 +118,7 @@ export const analyzeCommand = new Command('analyze')
109
118
  .option('--embed', 'Build a semantic vector index after analysis (requires EMBED_BASE_URL + EMBED_MODEL)', true)
110
119
  .option('--no-embed', 'Skip vector index build (overrides default --embed)')
111
120
  .option('--reindex-specs', 'Re-index OpenSpec specs into the vector index without re-running full analysis (requires EMBED_BASE_URL + EMBED_MODEL)', false)
121
+ .option('--ai-configs', 'Generate AI tool config files (.cursorrules, .clinerules/spec-gen.md, CLAUDE.md) if they do not already exist', false)
112
122
  .addHelpText('after', `
113
123
  Examples:
114
124
  $ spec-gen analyze Analyze with defaults
@@ -147,6 +157,7 @@ After analysis, run 'spec-gen generate' to create OpenSpec files.
147
157
  force: options.force ?? false,
148
158
  embed: options.embed ?? false,
149
159
  reindexSpecs: options.reindexSpecs ?? false,
160
+ aiConfigs: options.aiConfigs ?? false,
150
161
  quiet: false,
151
162
  verbose: false,
152
163
  noColor: false,
@@ -220,6 +231,37 @@ After analysis, run 'spec-gen generate' to create OpenSpec files.
220
231
  if (opts.embed) {
221
232
  await runEmbedStep(rootPath, outputPath, specGenConfig, opts.force ?? false, null);
222
233
  }
234
+ // If --ai-configs is requested, generate them even from cached analysis
235
+ if (opts.aiConfigs) {
236
+ let selectedTools;
237
+ if (process.stdin.isTTY) {
238
+ const { checkbox } = await import('@inquirer/prompts');
239
+ const chosen = await checkbox({
240
+ message: 'Generate config files for which AI assistants?',
241
+ choices: AI_TOOL_TARGETS.map(t => ({
242
+ name: t.label,
243
+ value: t.tool,
244
+ checked: true,
245
+ })),
246
+ });
247
+ selectedTools = chosen.length > 0 ? chosen : undefined;
248
+ }
249
+ if (selectedTools === undefined || selectedTools.length > 0) {
250
+ const aiResults = await generateAiConfigs({
251
+ rootDir: rootPath,
252
+ analysisDir: opts.output.replace(/\/$/, ''),
253
+ projectName: repoStructure.projectName ?? 'project',
254
+ tools: selectedTools,
255
+ });
256
+ logger.blank();
257
+ console.log(' Agent config files:');
258
+ for (const { rel, created } of aiResults) {
259
+ const tag = created ? '(created)' : '(already exists)';
260
+ console.log(` ├─ ${rel} ${tag}`);
261
+ }
262
+ logger.blank();
263
+ }
264
+ }
223
265
  logger.info('Next step', "Run 'spec-gen generate' to create OpenSpec files");
224
266
  return;
225
267
  }
@@ -414,12 +456,53 @@ After analysis, run 'spec-gen generate' to create OpenSpec files.
414
456
  }
415
457
  // Generate .spec-gen/analysis/CODEBASE.md — agent-readable architecture digest
416
458
  const digestWritten = await generateCodebaseDigest(artifacts.llmContext, depGraph, { rootPath, outputDir: outputPath });
459
+ // Generate AI tool config files — prompt user to select which assistants
460
+ let aiConfigsCreated = [];
461
+ if (opts.aiConfigs) {
462
+ let selectedTools;
463
+ if (process.stdin.isTTY) {
464
+ const { checkbox } = await import('@inquirer/prompts');
465
+ const chosen = await checkbox({
466
+ message: 'Generate config files for which AI assistants?',
467
+ choices: AI_TOOL_TARGETS.map(t => ({
468
+ name: t.label,
469
+ value: t.tool,
470
+ checked: true,
471
+ })),
472
+ });
473
+ selectedTools = chosen.length > 0 ? chosen : undefined;
474
+ }
475
+ // Non-TTY: generate for all tools (CI / pipe usage)
476
+ if (selectedTools === undefined || selectedTools.length > 0) {
477
+ aiConfigsCreated = await generateAiConfigs({
478
+ rootDir: rootPath,
479
+ analysisDir: opts.output.replace(/\/$/, ''),
480
+ projectName: result.repoMap.metadata.projectName,
481
+ tools: selectedTools,
482
+ });
483
+ }
484
+ }
417
485
  // Files generated
418
486
  console.log(' Output Files:');
419
487
  console.log(` ├─ ${opts.output}repo-structure.json`);
420
488
  console.log(` ├─ ${opts.output}dependency-graph.json`);
421
489
  console.log(` ├─ ${opts.output}llm-context.json`);
422
490
  console.log(` ├─ ${opts.output}dependencies.mermaid`);
491
+ if (artifacts.repoStructure.schemas.length > 0) {
492
+ console.log(` ├─ ${opts.output}schema-inventory.json (${artifacts.repoStructure.schemas.length} table(s))`);
493
+ }
494
+ if (artifacts.repoStructure.routeInventory.total > 0) {
495
+ console.log(` ├─ ${opts.output}route-inventory.json (${artifacts.repoStructure.routeInventory.total} route(s))`);
496
+ }
497
+ if (artifacts.repoStructure.middleware.length > 0) {
498
+ console.log(` ├─ ${opts.output}middleware-inventory.json (${artifacts.repoStructure.middleware.length} middleware entry(ies))`);
499
+ }
500
+ if (artifacts.repoStructure.uiComponents.length > 0) {
501
+ console.log(` ├─ ${opts.output}ui-inventory.json (${artifacts.repoStructure.uiComponents.length} UI component(s))`);
502
+ }
503
+ if (artifacts.repoStructure.envVars.length > 0) {
504
+ console.log(` ├─ ${opts.output}env-inventory.json (${artifacts.repoStructure.envVars.length} env var(s))`);
505
+ }
423
506
  if (architectureMdWritten) {
424
507
  console.log(` ├─ ${opts.output}SUMMARY.md`);
425
508
  console.log(' ├─ ARCHITECTURE.md');
@@ -446,6 +529,18 @@ After analysis, run 'spec-gen generate' to create OpenSpec files.
446
529
  console.log(' | Finding spec requirements by meaning | search_specs |');
447
530
  }
448
531
  console.log('');
532
+ if (aiConfigsCreated.length > 0) {
533
+ console.log(' Agent config files:');
534
+ for (const { rel, created } of aiConfigsCreated) {
535
+ const tag = created ? '(created)' : '(already exists)';
536
+ console.log(` ├─ ${rel} ${tag}`);
537
+ }
538
+ }
539
+ else {
540
+ console.log(' Agent config files: not generated');
541
+ console.log(' Tip: Re-run with --ai-configs to generate CLAUDE.md, .cursorrules, AGENTS.md, etc.');
542
+ }
543
+ console.log('');
449
544
  // ========================================================================
450
545
  // PHASE 5 (optional): BUILD VECTOR INDEX
451
546
  // ========================================================================