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.
- package/README.md +135 -41
- package/dist/api/generate.d.ts.map +1 -1
- package/dist/api/generate.js +1 -0
- package/dist/api/generate.js.map +1 -1
- package/dist/api/types.d.ts +2 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/cli/commands/analyze.d.ts +3 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +112 -17
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/drift.d.ts.map +1 -1
- package/dist/cli/commands/drift.js +8 -10
- package/dist/cli/commands/drift.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +12 -36
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +2 -2
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +105 -2
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +9 -47
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +17 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +201 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +7 -8
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/index.js +12 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/analyzer/ai-config-generator.d.ts +54 -0
- package/dist/core/analyzer/ai-config-generator.d.ts.map +1 -0
- package/dist/core/analyzer/ai-config-generator.js +85 -0
- package/dist/core/analyzer/ai-config-generator.js.map +1 -0
- package/dist/core/analyzer/artifact-generator.d.ts +27 -2
- package/dist/core/analyzer/artifact-generator.d.ts.map +1 -1
- package/dist/core/analyzer/artifact-generator.js +86 -8
- package/dist/core/analyzer/artifact-generator.js.map +1 -1
- package/dist/core/analyzer/codebase-digest.d.ts.map +1 -1
- package/dist/core/analyzer/codebase-digest.js +12 -11
- package/dist/core/analyzer/codebase-digest.js.map +1 -1
- package/dist/core/analyzer/env-extractor.d.ts +33 -0
- package/dist/core/analyzer/env-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/env-extractor.js +196 -0
- package/dist/core/analyzer/env-extractor.js.map +1 -0
- package/dist/core/analyzer/http-route-parser.d.ts +36 -1
- package/dist/core/analyzer/http-route-parser.d.ts.map +1 -1
- package/dist/core/analyzer/http-route-parser.js +276 -0
- package/dist/core/analyzer/http-route-parser.js.map +1 -1
- package/dist/core/analyzer/middleware-extractor.d.ts +29 -0
- package/dist/core/analyzer/middleware-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/middleware-extractor.js +195 -0
- package/dist/core/analyzer/middleware-extractor.js.map +1 -0
- package/dist/core/analyzer/schema-extractor.d.ts +41 -0
- package/dist/core/analyzer/schema-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/schema-extractor.js +229 -0
- package/dist/core/analyzer/schema-extractor.js.map +1 -0
- package/dist/core/analyzer/ui-component-extractor.d.ts +43 -0
- package/dist/core/analyzer/ui-component-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/ui-component-extractor.js +245 -0
- package/dist/core/analyzer/ui-component-extractor.js.map +1 -0
- package/dist/core/generator/openspec-format-generator.d.ts.map +1 -1
- package/dist/core/generator/openspec-format-generator.js +8 -0
- package/dist/core/generator/openspec-format-generator.js.map +1 -1
- package/dist/core/generator/spec-pipeline.d.ts +9 -0
- package/dist/core/generator/spec-pipeline.d.ts.map +1 -1
- package/dist/core/generator/spec-pipeline.js +94 -2
- package/dist/core/generator/spec-pipeline.js.map +1 -1
- package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -1
- package/dist/core/generator/stages/stage1-survey.js +43 -0
- package/dist/core/generator/stages/stage1-survey.js.map +1 -1
- package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -1
- package/dist/core/generator/stages/stage2-entities.js +6 -2
- package/dist/core/generator/stages/stage2-entities.js.map +1 -1
- package/dist/core/generator/stages/stage3-services.d.ts.map +1 -1
- package/dist/core/generator/stages/stage3-services.js +9 -2
- package/dist/core/generator/stages/stage3-services.js.map +1 -1
- package/dist/core/generator/stages/stage4-api.d.ts.map +1 -1
- package/dist/core/generator/stages/stage4-api.js +6 -2
- package/dist/core/generator/stages/stage4-api.js.map +1 -1
- package/dist/core/services/llm-service.d.ts +8 -9
- package/dist/core/services/llm-service.d.ts.map +1 -1
- package/dist/core/services/llm-service.js +59 -12
- package/dist/core/services/llm-service.js.map +1 -1
- package/dist/core/services/mcp-handlers/analysis.d.ts +27 -1
- package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/analysis.js +165 -2
- package/dist/core/services/mcp-handlers/analysis.js.map +1 -1
- package/dist/core/verifier/verification-engine.d.ts +67 -6
- package/dist/core/verifier/verification-engine.d.ts.map +1 -1
- package/dist/core/verifier/verification-engine.js +316 -90
- package/dist/core/verifier/verification-engine.js.map +1 -1
- package/dist/types/pipeline.d.ts +9 -0
- package/dist/types/pipeline.d.ts.map +1 -1
- package/dist/utils/command-helpers.d.ts +30 -0
- package/dist/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +69 -1
- package/dist/utils/command-helpers.js.map +1 -1
- package/examples/bmad/README.md +113 -0
- package/examples/bmad/agents/architect.md +226 -0
- package/examples/bmad/agents/dev-brownfield.md +69 -0
- package/examples/bmad/setup/architect.customize.yaml +14 -0
- package/examples/bmad/tasks/implement-story.md +254 -0
- package/examples/bmad/tasks/onboarding.md +169 -0
- package/examples/bmad/tasks/refactor.md +178 -0
- package/examples/bmad/tasks/sprint-planning.md +168 -0
- package/examples/bmad/templates/story.md +108 -0
- package/examples/cline-workflows/spec-gen-analyze-codebase.md +100 -0
- package/examples/cline-workflows/spec-gen-check-spec-drift.md +102 -0
- package/examples/cline-workflows/spec-gen-execute-refactor.md +194 -0
- package/examples/cline-workflows/spec-gen-implement-feature.md +238 -0
- package/examples/cline-workflows/spec-gen-plan-refactor.md +255 -0
- package/examples/cline-workflows/spec-gen-refactor-codebase.md +16 -0
- package/examples/drift-demo/openspec/config.yaml +14 -0
- package/examples/drift-demo/openspec/specs/architecture/spec.md +30 -0
- package/examples/drift-demo/openspec/specs/auth/spec.md +71 -0
- package/examples/drift-demo/openspec/specs/database/spec.md +33 -0
- package/examples/drift-demo/openspec/specs/overview/spec.md +20 -0
- package/examples/drift-demo/openspec/specs/projects/spec.md +55 -0
- package/examples/drift-demo/openspec/specs/tasks/spec.md +78 -0
- package/examples/drift-demo/package.json +21 -0
- package/examples/drift-demo/src/auth/auth-middleware.ts +30 -0
- package/examples/drift-demo/src/auth/auth-routes.ts +29 -0
- package/examples/drift-demo/src/auth/auth-service.ts +45 -0
- package/examples/drift-demo/src/database/connection.ts +27 -0
- package/examples/drift-demo/src/index.ts +16 -0
- package/examples/drift-demo/src/projects/project-model.ts +15 -0
- package/examples/drift-demo/src/projects/project-service.ts +34 -0
- package/examples/drift-demo/src/tasks/task-model.ts +37 -0
- package/examples/drift-demo/src/tasks/task-routes.ts +53 -0
- package/examples/drift-demo/src/tasks/task-service.ts +60 -0
- package/examples/drift-demo/src/utils/validation.ts +11 -0
- package/examples/drift-demo/tests/auth.test.ts +4 -0
- package/examples/drift-demo/tests/tasks.test.ts +4 -0
- package/examples/drift-demo/tsconfig.json +10 -0
- package/examples/drift-test/run-drift-test.sh +1087 -0
- package/examples/gsd/README.md +119 -0
- package/examples/gsd/commands/gsd/spec-gen-drift.md +111 -0
- package/examples/gsd/commands/gsd/spec-gen-orient.md +191 -0
- package/examples/mistral-vibe/README.md +101 -0
- package/examples/mistral-vibe/antipatterns-template.md +18 -0
- package/examples/mistral-vibe/skills/spec-gen-analyze-codebase/SKILL.md +123 -0
- package/examples/mistral-vibe/skills/spec-gen-brainstorm/SKILL.md +379 -0
- package/examples/mistral-vibe/skills/spec-gen-debug/SKILL.md +320 -0
- package/examples/mistral-vibe/skills/spec-gen-execute-refactor/SKILL.md +210 -0
- package/examples/mistral-vibe/skills/spec-gen-generate/SKILL.md +245 -0
- package/examples/mistral-vibe/skills/spec-gen-implement-story/SKILL.md +274 -0
- package/examples/mistral-vibe/skills/spec-gen-plan-refactor/SKILL.md +251 -0
- package/examples/openspec-analysis/README.md +59 -0
- package/examples/openspec-analysis/SUMMARY.md +72 -0
- package/examples/openspec-analysis/config.json +16 -0
- package/examples/openspec-analysis/dependencies.mermaid +35 -0
- package/examples/openspec-analysis/dependency-graph.json +12116 -0
- package/examples/openspec-analysis/llm-context.json +119 -0
- package/examples/openspec-analysis/repo-structure.json +871 -0
- package/examples/openspec-cli/README.md +67 -0
- package/examples/openspec-cli/openspec/config.yaml +26 -0
- package/examples/openspec-cli/openspec/specs/architecture/spec.md +178 -0
- package/examples/openspec-cli/openspec/specs/artifact-graph/spec.md +143 -0
- package/examples/openspec-cli/openspec/specs/cli/spec.md +138 -0
- package/examples/openspec-cli/openspec/specs/overview/spec.md +60 -0
- package/examples/openspec-cli/openspec/specs/parsing/spec.md +123 -0
- package/examples/openspec-cli/openspec/specs/validation/spec.md +108 -0
- package/examples/spec-kit/README.md +104 -0
- package/examples/spec-kit/commands/drift.md +87 -0
- package/examples/spec-kit/commands/orient.md +138 -0
- package/examples/spec-kit/extension.yml +54 -0
- 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
|
|
22
|
-
spec-gen analyze
|
|
23
|
-
spec-gen
|
|
24
|
-
spec-gen
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
722
|
+
## spec-gen MCP workflow
|
|
660
723
|
|
|
661
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
| `
|
|
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
|
-
| `
|
|
825
|
-
| `
|
|
826
|
-
|
|
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 (
|
|
1548
|
+
npm run test:run # Run tests (2300+ unit tests)
|
|
1455
1549
|
npm run typecheck # Type check
|
|
1456
1550
|
```
|
|
1457
1551
|
|
|
1458
|
-
|
|
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,
|
|
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"}
|
package/dist/api/generate.js
CHANGED
|
@@ -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 {
|
package/dist/api/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/api/generate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/api/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/api/types.d.ts
CHANGED
|
@@ -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;
|
package/dist/api/types.d.ts.map
CHANGED
|
@@ -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":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAChG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGpE,YAAY,EAAE,iBAAiB,IAAI,aAAa,EAAE,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,CAAC;AACtC,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,CAAC;AAC/B,YAAY,EAAE,gBAAgB,EAAE,CAAC;AACjC,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAM3C,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IACnD,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAMD,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAC5I,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACzC,6CAA6C;IAC7C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAC5I,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAC5I,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAC5I,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iCAAiC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -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;
|
|
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 {
|
|
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:
|
|
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
|
// ========================================================================
|