spec-gen-cli 1.1.0 → 1.2.1

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 (205) hide show
  1. package/README.md +163 -77
  2. package/dist/api/analyze.d.ts.map +1 -1
  3. package/dist/api/analyze.js +56 -27
  4. package/dist/api/analyze.js.map +1 -1
  5. package/dist/api/drift.d.ts.map +1 -1
  6. package/dist/api/drift.js +26 -20
  7. package/dist/api/drift.js.map +1 -1
  8. package/dist/api/generate.d.ts.map +1 -1
  9. package/dist/api/generate.js +19 -43
  10. package/dist/api/generate.js.map +1 -1
  11. package/dist/api/init.d.ts.map +1 -1
  12. package/dist/api/init.js +6 -5
  13. package/dist/api/init.js.map +1 -1
  14. package/dist/api/run.d.ts.map +1 -1
  15. package/dist/api/run.js +67 -51
  16. package/dist/api/run.js.map +1 -1
  17. package/dist/api/specs.d.ts.map +1 -1
  18. package/dist/api/specs.js +5 -4
  19. package/dist/api/specs.js.map +1 -1
  20. package/dist/api/types.d.ts +7 -1
  21. package/dist/api/types.d.ts.map +1 -1
  22. package/dist/api/verify.d.ts.map +1 -1
  23. package/dist/api/verify.js +31 -32
  24. package/dist/api/verify.js.map +1 -1
  25. package/dist/cli/commands/analyze.d.ts.map +1 -1
  26. package/dist/cli/commands/analyze.js +41 -62
  27. package/dist/cli/commands/analyze.js.map +1 -1
  28. package/dist/cli/commands/doctor.d.ts +9 -0
  29. package/dist/cli/commands/doctor.d.ts.map +1 -0
  30. package/dist/cli/commands/doctor.js +273 -0
  31. package/dist/cli/commands/doctor.js.map +1 -0
  32. package/dist/cli/commands/drift.d.ts.map +1 -1
  33. package/dist/cli/commands/drift.js +18 -32
  34. package/dist/cli/commands/drift.js.map +1 -1
  35. package/dist/cli/commands/generate.d.ts.map +1 -1
  36. package/dist/cli/commands/generate.js +40 -101
  37. package/dist/cli/commands/generate.js.map +1 -1
  38. package/dist/cli/commands/init.d.ts.map +1 -1
  39. package/dist/cli/commands/init.js +17 -15
  40. package/dist/cli/commands/init.js.map +1 -1
  41. package/dist/cli/commands/mcp.d.ts.map +1 -1
  42. package/dist/cli/commands/mcp.js +3 -2
  43. package/dist/cli/commands/mcp.js.map +1 -1
  44. package/dist/cli/commands/run.d.ts +0 -15
  45. package/dist/cli/commands/run.d.ts.map +1 -1
  46. package/dist/cli/commands/run.js +61 -111
  47. package/dist/cli/commands/run.js.map +1 -1
  48. package/dist/cli/commands/verify.d.ts.map +1 -1
  49. package/dist/cli/commands/verify.js +18 -52
  50. package/dist/cli/commands/verify.js.map +1 -1
  51. package/dist/cli/commands/view.d.ts +4 -0
  52. package/dist/cli/commands/view.d.ts.map +1 -1
  53. package/dist/cli/commands/view.js +33 -26
  54. package/dist/cli/commands/view.js.map +1 -1
  55. package/dist/cli/index.js +22 -4
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/constants.d.ts +254 -0
  58. package/dist/constants.d.ts.map +1 -0
  59. package/dist/constants.js +320 -0
  60. package/dist/constants.js.map +1 -0
  61. package/dist/core/analyzer/artifact-generator.d.ts +8 -0
  62. package/dist/core/analyzer/artifact-generator.d.ts.map +1 -1
  63. package/dist/core/analyzer/artifact-generator.js +59 -11
  64. package/dist/core/analyzer/artifact-generator.js.map +1 -1
  65. package/dist/core/analyzer/call-graph.d.ts.map +1 -1
  66. package/dist/core/analyzer/call-graph.js +135 -1
  67. package/dist/core/analyzer/call-graph.js.map +1 -1
  68. package/dist/core/analyzer/dependency-graph.d.ts +32 -0
  69. package/dist/core/analyzer/dependency-graph.d.ts.map +1 -1
  70. package/dist/core/analyzer/dependency-graph.js +104 -10
  71. package/dist/core/analyzer/dependency-graph.js.map +1 -1
  72. package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -1
  73. package/dist/core/analyzer/duplicate-detector.js +4 -0
  74. package/dist/core/analyzer/duplicate-detector.js.map +1 -1
  75. package/dist/core/analyzer/embedding-service.d.ts +6 -0
  76. package/dist/core/analyzer/embedding-service.d.ts.map +1 -1
  77. package/dist/core/analyzer/embedding-service.js +15 -1
  78. package/dist/core/analyzer/embedding-service.js.map +1 -1
  79. package/dist/core/analyzer/file-walker.d.ts.map +1 -1
  80. package/dist/core/analyzer/file-walker.js +4 -3
  81. package/dist/core/analyzer/file-walker.js.map +1 -1
  82. package/dist/core/analyzer/http-route-parser.d.ts +111 -0
  83. package/dist/core/analyzer/http-route-parser.d.ts.map +1 -0
  84. package/dist/core/analyzer/http-route-parser.js +466 -0
  85. package/dist/core/analyzer/http-route-parser.js.map +1 -0
  86. package/dist/core/analyzer/import-parser.d.ts.map +1 -1
  87. package/dist/core/analyzer/import-parser.js +19 -5
  88. package/dist/core/analyzer/import-parser.js.map +1 -1
  89. package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -1
  90. package/dist/core/analyzer/refactor-analyzer.js +8 -7
  91. package/dist/core/analyzer/refactor-analyzer.js.map +1 -1
  92. package/dist/core/analyzer/repository-mapper.d.ts.map +1 -1
  93. package/dist/core/analyzer/repository-mapper.js +12 -13
  94. package/dist/core/analyzer/repository-mapper.js.map +1 -1
  95. package/dist/core/analyzer/signature-extractor.d.ts +1 -1
  96. package/dist/core/analyzer/signature-extractor.d.ts.map +1 -1
  97. package/dist/core/analyzer/signature-extractor.js +69 -1
  98. package/dist/core/analyzer/signature-extractor.js.map +1 -1
  99. package/dist/core/analyzer/spec-vector-index.d.ts.map +1 -1
  100. package/dist/core/analyzer/spec-vector-index.js +4 -3
  101. package/dist/core/analyzer/spec-vector-index.js.map +1 -1
  102. package/dist/core/analyzer/vector-index.d.ts.map +1 -1
  103. package/dist/core/analyzer/vector-index.js +29 -1
  104. package/dist/core/analyzer/vector-index.js.map +1 -1
  105. package/dist/core/drift/drift-detector.d.ts.map +1 -1
  106. package/dist/core/drift/drift-detector.js +7 -6
  107. package/dist/core/drift/drift-detector.js.map +1 -1
  108. package/dist/core/drift/git-diff.d.ts.map +1 -1
  109. package/dist/core/drift/git-diff.js +28 -16
  110. package/dist/core/drift/git-diff.js.map +1 -1
  111. package/dist/core/generator/mapping-generator.d.ts.map +1 -1
  112. package/dist/core/generator/mapping-generator.js +11 -10
  113. package/dist/core/generator/mapping-generator.js.map +1 -1
  114. package/dist/core/generator/openspec-compat.d.ts.map +1 -1
  115. package/dist/core/generator/openspec-compat.js +3 -2
  116. package/dist/core/generator/openspec-compat.js.map +1 -1
  117. package/dist/core/generator/openspec-format-generator.js.map +1 -1
  118. package/dist/core/generator/openspec-writer.d.ts +0 -4
  119. package/dist/core/generator/openspec-writer.d.ts.map +1 -1
  120. package/dist/core/generator/openspec-writer.js +30 -41
  121. package/dist/core/generator/openspec-writer.js.map +1 -1
  122. package/dist/core/generator/spec-pipeline.d.ts.map +1 -1
  123. package/dist/core/generator/spec-pipeline.js +4 -4
  124. package/dist/core/generator/spec-pipeline.js.map +1 -1
  125. package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -1
  126. package/dist/core/generator/stages/stage1-survey.js +5 -3
  127. package/dist/core/generator/stages/stage1-survey.js.map +1 -1
  128. package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -1
  129. package/dist/core/generator/stages/stage2-entities.js +10 -9
  130. package/dist/core/generator/stages/stage2-entities.js.map +1 -1
  131. package/dist/core/generator/stages/stage3-services.d.ts.map +1 -1
  132. package/dist/core/generator/stages/stage3-services.js +9 -8
  133. package/dist/core/generator/stages/stage3-services.js.map +1 -1
  134. package/dist/core/generator/stages/stage4-api.d.ts.map +1 -1
  135. package/dist/core/generator/stages/stage4-api.js +10 -9
  136. package/dist/core/generator/stages/stage4-api.js.map +1 -1
  137. package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -1
  138. package/dist/core/generator/stages/stage5-architecture.js +5 -4
  139. package/dist/core/generator/stages/stage5-architecture.js.map +1 -1
  140. package/dist/core/generator/stages/stage6-adr.d.ts.map +1 -1
  141. package/dist/core/generator/stages/stage6-adr.js +7 -2
  142. package/dist/core/generator/stages/stage6-adr.js.map +1 -1
  143. package/dist/core/services/chat-agent.d.ts.map +1 -1
  144. package/dist/core/services/chat-agent.js +46 -15
  145. package/dist/core/services/chat-agent.js.map +1 -1
  146. package/dist/core/services/config-manager.d.ts.map +1 -1
  147. package/dist/core/services/config-manager.js +32 -26
  148. package/dist/core/services/config-manager.js.map +1 -1
  149. package/dist/core/services/gitignore-manager.d.ts.map +1 -1
  150. package/dist/core/services/gitignore-manager.js +2 -13
  151. package/dist/core/services/gitignore-manager.js.map +1 -1
  152. package/dist/core/services/llm-service.d.ts.map +1 -1
  153. package/dist/core/services/llm-service.js +33 -35
  154. package/dist/core/services/llm-service.js.map +1 -1
  155. package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -1
  156. package/dist/core/services/mcp-handlers/analysis.js +23 -14
  157. package/dist/core/services/mcp-handlers/analysis.js.map +1 -1
  158. package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -1
  159. package/dist/core/services/mcp-handlers/graph.js +24 -23
  160. package/dist/core/services/mcp-handlers/graph.js.map +1 -1
  161. package/dist/core/services/mcp-handlers/semantic.d.ts +1 -1
  162. package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -1
  163. package/dist/core/services/mcp-handlers/semantic.js +17 -16
  164. package/dist/core/services/mcp-handlers/semantic.js.map +1 -1
  165. package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -1
  166. package/dist/core/services/mcp-handlers/utils.js +4 -3
  167. package/dist/core/services/mcp-handlers/utils.js.map +1 -1
  168. package/dist/core/services/project-detector.d.ts.map +1 -1
  169. package/dist/core/services/project-detector.js +2 -13
  170. package/dist/core/services/project-detector.js.map +1 -1
  171. package/dist/core/verifier/verification-engine.d.ts +9 -3
  172. package/dist/core/verifier/verification-engine.d.ts.map +1 -1
  173. package/dist/core/verifier/verification-engine.js +25 -13
  174. package/dist/core/verifier/verification-engine.js.map +1 -1
  175. package/dist/types/index.d.ts +2 -0
  176. package/dist/types/index.d.ts.map +1 -1
  177. package/dist/utils/command-helpers.d.ts +38 -0
  178. package/dist/utils/command-helpers.d.ts.map +1 -0
  179. package/dist/utils/command-helpers.js +82 -0
  180. package/dist/utils/command-helpers.js.map +1 -0
  181. package/dist/utils/errors.d.ts.map +1 -1
  182. package/dist/utils/errors.js +4 -3
  183. package/dist/utils/errors.js.map +1 -1
  184. package/dist/utils/logger.d.ts.map +1 -1
  185. package/dist/utils/logger.js +14 -3
  186. package/dist/utils/logger.js.map +1 -1
  187. package/dist/utils/progress.d.ts +1 -1
  188. package/dist/utils/progress.d.ts.map +1 -1
  189. package/dist/utils/progress.js +15 -12
  190. package/dist/utils/progress.js.map +1 -1
  191. package/dist/utils/shutdown.d.ts.map +1 -1
  192. package/dist/utils/shutdown.js +4 -3
  193. package/dist/utils/shutdown.js.map +1 -1
  194. package/package.json +9 -5
  195. package/src/viewer/InteractiveGraphViewer.jsx +182 -139
  196. package/src/viewer/components/ArchitectureView.jsx +19 -19
  197. package/src/viewer/components/ChatPanel.jsx +40 -40
  198. package/src/viewer/components/ClusterGraph.jsx +34 -22
  199. package/src/viewer/components/FilterBar.jsx +26 -26
  200. package/src/viewer/components/FlatGraph.jsx +22 -15
  201. package/src/viewer/components/MicroComponents.jsx +14 -12
  202. package/src/viewer/utils/constants.js +17 -0
  203. package/src/viewer/utils/graph-helpers.js +7 -3
  204. package/src/viewer/utils/graph-helpers.test.ts +39 -0
  205. package/src/viewer/utils/themes.js +170 -0
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC,UAAU,UAAU;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd;AAoMD,eAAO,MAAM,UAAU,SAubnB,CAAC;AAEL;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlG"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmOpC,eAAO,MAAM,UAAU,SA4bnB,CAAC"}
@@ -5,64 +5,33 @@
5
5
  * Smart defaults skip unnecessary steps and detect existing setups.
6
6
  */
7
7
  import { Command } from 'commander';
8
- import { access, stat, readFile, mkdir, writeFile } from 'node:fs/promises';
8
+ import { stat, mkdir, writeFile } from 'node:fs/promises';
9
9
  import { join, basename } from 'node:path';
10
+ import { createRequire } from 'node:module';
11
+ import { fileExists, formatDuration, formatAge, readJsonFile } from '../../utils/command-helpers.js';
12
+ import { ANALYSIS_REUSE_THRESHOLD_MS, DEFAULT_MAX_FILES, DEFAULT_ANTHROPIC_MODEL, DEFAULT_SURVEY_ESTIMATED_TOKENS, SPEC_GEN_DIR, SPEC_GEN_ANALYSIS_SUBDIR, SPEC_GEN_LOGS_SUBDIR, SPEC_GEN_CONFIG_REL_PATH, SPEC_GEN_GENERATION_SUBDIR, SPEC_GEN_RUNS_SUBDIR, DEFAULT_OPENSPEC_PATH, ARTIFACT_REPO_STRUCTURE, ARTIFACT_LLM_CONTEXT, ARTIFACT_DEPENDENCY_GRAPH, ARTIFACT_GENERATION_REPORT, } from '../../constants.js';
10
13
  import { confirm } from '@inquirer/prompts';
11
14
  import { logger } from '../../utils/logger.js';
12
15
  import { detectProjectType, getProjectTypeName, } from '../../core/services/project-detector.js';
13
16
  import { getDefaultConfig, readSpecGenConfig, writeSpecGenConfig, specGenConfigExists, openspecDirExists, createOpenSpecStructure, } from '../../core/services/config-manager.js';
14
17
  import { gitignoreExists, isInGitignore, addToGitignore, } from '../../core/services/gitignore-manager.js';
15
18
  import { runAnalysis } from './analyze.js';
16
- import { createLLMService, } from '../../core/services/llm-service.js';
19
+ import { createLLMService, lookupPricing, } from '../../core/services/llm-service.js';
17
20
  import { SpecGenerationPipeline, } from '../../core/generator/spec-pipeline.js';
18
21
  import { OpenSpecFormatGenerator, } from '../../core/generator/openspec-format-generator.js';
19
22
  import { OpenSpecWriter, } from '../../core/generator/openspec-writer.js';
20
23
  import { ADRGenerator } from '../../core/generator/adr-generator.js';
24
+ const _require = createRequire(import.meta.url);
25
+ const { version: PKG_VERSION } = _require('../../../package.json');
21
26
  // ============================================================================
22
27
  // HELPER FUNCTIONS
23
28
  // ============================================================================
24
- /**
25
- * Check if a file exists
26
- */
27
- async function fileExists(path) {
28
- try {
29
- await access(path);
30
- return true;
31
- }
32
- catch {
33
- return false;
34
- }
35
- }
36
- /**
37
- * Format time duration for display
38
- */
39
- function formatDuration(ms) {
40
- if (ms < 1000)
41
- return `${ms}ms`;
42
- if (ms < 60000)
43
- return `${(ms / 1000).toFixed(1)}s`;
44
- const minutes = Math.floor(ms / 60000);
45
- const seconds = Math.floor((ms % 60000) / 1000);
46
- return `${minutes}m ${seconds}s`;
47
- }
48
- /**
49
- * Format age in human-readable form
50
- */
51
- function formatAge(ms) {
52
- if (ms < 60000)
53
- return 'just now';
54
- if (ms < 3600000)
55
- return `${Math.floor(ms / 60000)} minutes ago`;
56
- if (ms < 86400000)
57
- return `${Math.floor(ms / 3600000)} hours ago`;
58
- return `${Math.floor(ms / 86400000)} days ago`;
59
- }
60
29
  /**
61
30
  * Get analysis age if it exists
62
31
  */
63
32
  async function getAnalysisAge(analysisPath) {
64
33
  try {
65
- const repoStructurePath = join(analysisPath, 'repo-structure.json');
34
+ const repoStructurePath = join(analysisPath, ARTIFACT_REPO_STRUCTURE);
66
35
  if (!(await fileExists(repoStructurePath))) {
67
36
  return null;
68
37
  }
@@ -78,31 +47,18 @@ async function getAnalysisAge(analysisPath) {
78
47
  */
79
48
  async function loadAnalysis(analysisPath) {
80
49
  try {
81
- const repoStructurePath = join(analysisPath, 'repo-structure.json');
82
- const llmContextPath = join(analysisPath, 'llm-context.json');
83
- const depGraphPath = join(analysisPath, 'dependency-graph.json');
84
- if (!(await fileExists(repoStructurePath))) {
50
+ const repoStructurePath = join(analysisPath, ARTIFACT_REPO_STRUCTURE);
51
+ const llmContextPath = join(analysisPath, ARTIFACT_LLM_CONTEXT);
52
+ const depGraphPath = join(analysisPath, ARTIFACT_DEPENDENCY_GRAPH);
53
+ const repoStructure = await readJsonFile(repoStructurePath, ARTIFACT_REPO_STRUCTURE);
54
+ if (!repoStructure)
85
55
  return null;
86
- }
87
- const repoStructureContent = await readFile(repoStructurePath, 'utf-8');
88
- const repoStructure = JSON.parse(repoStructureContent);
89
- let llmContext;
90
- if (await fileExists(llmContextPath)) {
91
- const llmContextContent = await readFile(llmContextPath, 'utf-8');
92
- llmContext = JSON.parse(llmContextContent);
93
- }
94
- else {
95
- llmContext = {
96
- phase1_survey: { purpose: 'Initial survey', files: [], estimatedTokens: 0 },
97
- phase2_deep: { purpose: 'Deep analysis', files: [], totalTokens: 0 },
98
- phase3_validation: { purpose: 'Validation', files: [], totalTokens: 0 },
99
- };
100
- }
101
- let depGraph;
102
- if (await fileExists(depGraphPath)) {
103
- const depGraphContent = await readFile(depGraphPath, 'utf-8');
104
- depGraph = JSON.parse(depGraphContent);
105
- }
56
+ const llmContext = await readJsonFile(llmContextPath, ARTIFACT_LLM_CONTEXT) ?? {
57
+ phase1_survey: { purpose: 'Initial survey', files: [], estimatedTokens: 0 },
58
+ phase2_deep: { purpose: 'Deep analysis', files: [], totalTokens: 0 },
59
+ phase3_validation: { purpose: 'Validation', files: [], totalTokens: 0 },
60
+ };
61
+ const depGraph = await readJsonFile(depGraphPath, ARTIFACT_DEPENDENCY_GRAPH) ?? undefined;
106
62
  const stats = await stat(repoStructurePath);
107
63
  const age = Date.now() - stats.mtime.getTime();
108
64
  return { repoStructure, llmContext, depGraph, age };
@@ -116,21 +72,19 @@ async function loadAnalysis(analysisPath) {
116
72
  */
117
73
  function estimateCost(llmContext, model) {
118
74
  let totalTokens = 0;
119
- totalTokens += llmContext.phase1_survey.estimatedTokens ?? 2000;
75
+ totalTokens += llmContext.phase1_survey.estimatedTokens ?? DEFAULT_SURVEY_ESTIMATED_TOKENS;
120
76
  for (const file of llmContext.phase2_deep.files) {
121
77
  totalTokens += file.tokens;
122
78
  }
123
79
  const outputTokens = Math.ceil(totalTokens * 0.3);
124
80
  totalTokens += outputTokens;
125
- const pricing = {
126
- 'claude-sonnet-4-20250514': { input: 3.0, output: 15.0 },
127
- 'claude-3-5-sonnet-20241022': { input: 3.0, output: 15.0 },
128
- 'claude-opus-4-20250514': { input: 15.0, output: 75.0 },
129
- 'gpt-4o': { input: 5.0, output: 15.0 },
130
- 'gpt-4o-mini': { input: 0.15, output: 0.6 },
131
- default: { input: 3.0, output: 15.0 },
132
- };
133
- const modelPricing = pricing[model] ?? pricing.default;
81
+ // Infer provider from model ID prefix for cost estimation
82
+ const provider = model.startsWith('gpt-') || model.startsWith('o1') || model.startsWith('o3') || model.startsWith('o4')
83
+ ? 'openai'
84
+ : model.startsWith('gemini')
85
+ ? 'gemini'
86
+ : 'anthropic';
87
+ const modelPricing = lookupPricing(provider, model);
134
88
  const inputCost = (totalTokens * 0.7 / 1_000_000) * modelPricing.input;
135
89
  const outputCost = (outputTokens / 1_000_000) * modelPricing.output;
136
90
  const cost = inputCost + outputCost;
@@ -140,7 +94,7 @@ function estimateCost(llmContext, model) {
140
94
  * Save run metadata
141
95
  */
142
96
  async function saveRunMetadata(rootPath, metadata) {
143
- const runsDir = join(rootPath, '.spec-gen', 'runs');
97
+ const runsDir = join(rootPath, SPEC_GEN_DIR, SPEC_GEN_RUNS_SUBDIR);
144
98
  await mkdir(runsDir, { recursive: true });
145
99
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
146
100
  const filename = `${timestamp}.json`;
@@ -150,10 +104,14 @@ async function saveRunMetadata(rootPath, metadata) {
150
104
  * Display the pipeline banner
151
105
  */
152
106
  function displayBanner(projectName, projectType, rootPath) {
107
+ const versionLabel = `spec-gen v${PKG_VERSION}`;
108
+ const title = `${versionLabel} — OpenSpec Reverse Engineering Tool`;
109
+ const width = Math.max(53, title.length + 4);
110
+ const pad = (s) => s + ' '.repeat(width - s.length - 2);
153
111
  console.log('');
154
- console.log('╭─────────────────────────────────────────────────────╮');
155
- console.log('│ spec-gen v1.0.0 — OpenSpec Reverse Engineering Tool │');
156
- console.log('╰─────────────────────────────────────────────────────╯');
112
+ console.log(`╭${''.repeat(width - 2)}╮`);
113
+ console.log(`│ ${pad(title)}│`);
114
+ console.log(`╰${''.repeat(width - 2)}╯`);
157
115
  console.log('');
158
116
  console.log(` Project: ${projectName}`);
159
117
  console.log(` Type: ${projectType}`);
@@ -182,7 +140,7 @@ export const runCommand = new Command('run')
182
140
  .description('Run the full spec-gen pipeline (init → analyze → generate)')
183
141
  .option('--force', 'Reinitialize even if config exists', false)
184
142
  .option('--reanalyze', 'Force fresh analysis even if recent exists', false)
185
- .option('--model <name>', 'LLM model to use for generation', 'claude-sonnet-4-20250514')
143
+ .option('--model <name>', 'LLM model to use for generation', DEFAULT_ANTHROPIC_MODEL)
186
144
  .option('--dry-run', 'Show what would be done without making changes', false)
187
145
  .option('-y, --yes', 'Skip all confirmation prompts', false)
188
146
  .option('--max-files <n>', 'Maximum files to analyze', '500')
@@ -213,16 +171,21 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
213
171
  const opts = {
214
172
  force: options.force ?? false,
215
173
  reanalyze: options.reanalyze ?? false,
216
- model: options.model ?? 'claude-sonnet-4-20250514',
174
+ model: options.model ?? DEFAULT_ANTHROPIC_MODEL,
217
175
  dryRun: options.dryRun ?? false,
218
176
  yes: options.yes ?? false,
219
177
  maxFiles: typeof options.maxFiles === 'string'
220
178
  ? parseInt(options.maxFiles, 10)
221
- : options.maxFiles ?? 500,
179
+ : options.maxFiles ?? DEFAULT_MAX_FILES,
222
180
  adr: options.adr ?? false,
223
181
  };
182
+ if (isNaN(opts.maxFiles) || opts.maxFiles < 1) {
183
+ logger.error('--max-files must be a positive integer');
184
+ process.exitCode = 1;
185
+ return;
186
+ }
224
187
  const metadata = {
225
- version: '1.0.0',
188
+ version: PKG_VERSION,
226
189
  timestamp: new Date().toISOString(),
227
190
  duration: 0,
228
191
  steps: {
@@ -251,20 +214,20 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
251
214
  const configExists = await specGenConfigExists(rootPath);
252
215
  let specGenConfig = configExists ? await readSpecGenConfig(rootPath) : null;
253
216
  if (configExists && !opts.force) {
254
- console.log(' ✓ Configuration exists (.spec-gen/config.json)');
217
+ console.log(` ✓ Configuration exists (${SPEC_GEN_CONFIG_REL_PATH})`);
255
218
  metadata.steps.init = { status: 'skipped', reason: 'Config exists' };
256
219
  }
257
220
  else {
258
221
  if (opts.dryRun) {
259
- console.log(' → Would create .spec-gen/config.json');
222
+ console.log(` → Would create ${SPEC_GEN_CONFIG_REL_PATH}`);
260
223
  console.log(` → Would detect project type: ${projectTypeName}`);
261
224
  }
262
225
  else {
263
226
  // Create config
264
- const openspecPath = './openspec';
227
+ const openspecPath = DEFAULT_OPENSPEC_PATH;
265
228
  specGenConfig = getDefaultConfig(detection.projectType, openspecPath);
266
229
  await writeSpecGenConfig(rootPath, specGenConfig);
267
- console.log(' ✓ Created .spec-gen/config.json');
230
+ console.log(` ✓ Created ${SPEC_GEN_CONFIG_REL_PATH}`);
268
231
  // Create openspec directory if needed
269
232
  const fullOpenspecPath = join(rootPath, openspecPath);
270
233
  if (!(await openspecDirExists(fullOpenspecPath))) {
@@ -272,15 +235,15 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
272
235
  console.log(' ✓ Created openspec/ directory');
273
236
  }
274
237
  else {
275
- console.log(' ✓ OpenSpec directory exists (./openspec)');
238
+ console.log(` ✓ OpenSpec directory exists (${DEFAULT_OPENSPEC_PATH})`);
276
239
  }
277
240
  // Update gitignore
278
241
  const hasGitignore = await gitignoreExists(rootPath);
279
242
  if (hasGitignore) {
280
- const alreadyIgnored = await isInGitignore(rootPath, '.spec-gen/');
243
+ const alreadyIgnored = await isInGitignore(rootPath, `${SPEC_GEN_DIR}/`);
281
244
  if (!alreadyIgnored) {
282
- await addToGitignore(rootPath, '.spec-gen/', 'spec-gen analysis artifacts');
283
- console.log(' ✓ Added .spec-gen/ to .gitignore');
245
+ await addToGitignore(rootPath, `${SPEC_GEN_DIR}/`, 'spec-gen analysis artifacts');
246
+ console.log(` ✓ Added ${SPEC_GEN_DIR}/ to .gitignore`);
284
247
  }
285
248
  }
286
249
  metadata.steps.init = { status: 'completed' };
@@ -294,7 +257,7 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
294
257
  }
295
258
  }
296
259
  // Check openspec directory
297
- const openspecPath = specGenConfig?.openspecPath ?? './openspec';
260
+ const openspecPath = specGenConfig?.openspecPath ?? DEFAULT_OPENSPEC_PATH;
298
261
  const fullOpenspecPath = join(rootPath, openspecPath);
299
262
  if (await openspecDirExists(fullOpenspecPath)) {
300
263
  console.log(` ✓ OpenSpec directory exists (${openspecPath})`);
@@ -304,11 +267,10 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
304
267
  // STEP 2/3: ANALYSIS
305
268
  // ========================================================================
306
269
  console.log('[Step 2/3] Analysis');
307
- const analysisPath = join(rootPath, '.spec-gen', 'analysis');
270
+ const analysisPath = join(rootPath, SPEC_GEN_DIR, SPEC_GEN_ANALYSIS_SUBDIR);
308
271
  const analysisAge = await getAnalysisAge(analysisPath);
309
- const oneHour = 60 * 60 * 1000;
310
272
  let analysisData = null;
311
- if (analysisAge !== null && analysisAge < oneHour && !opts.reanalyze && !opts.force) {
273
+ if (analysisAge !== null && analysisAge < ANALYSIS_REUSE_THRESHOLD_MS && !opts.reanalyze && !opts.force) {
312
274
  // Use existing analysis
313
275
  console.log(` ✓ Recent analysis found (${formatAge(analysisAge)})`);
314
276
  analysisData = await loadAnalysis(analysisPath);
@@ -427,7 +389,7 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
427
389
  apiBase: globalOpts.apiBase ?? specGenConfig?.llm?.apiBase,
428
390
  sslVerify: globalOpts.insecure != null ? !globalOpts.insecure : specGenConfig?.llm?.sslVerify ?? true,
429
391
  enableLogging: true,
430
- logDir: join(rootPath, '.spec-gen', 'logs'),
392
+ logDir: join(rootPath, SPEC_GEN_DIR, SPEC_GEN_LOGS_SUBDIR),
431
393
  });
432
394
  }
433
395
  catch (error) {
@@ -437,7 +399,7 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
437
399
  console.log(' Generating specifications...');
438
400
  // Run generation pipeline
439
401
  const pipeline = new SpecGenerationPipeline(llm, {
440
- outputDir: join(rootPath, '.spec-gen', 'generation'),
402
+ outputDir: join(rootPath, SPEC_GEN_DIR, SPEC_GEN_GENERATION_SUBDIR),
441
403
  saveIntermediate: true,
442
404
  generateADRs: opts.adr,
443
405
  });
@@ -446,7 +408,7 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
446
408
  pipelineResult = await pipeline.run(analysisData.repoStructure, analysisData.llmContext, analysisData.depGraph);
447
409
  }
448
410
  catch (error) {
449
- await llm.saveLogs().catch(() => { });
411
+ await llm.saveLogs().catch((e) => logger.debug(`Failed to save LLM logs: ${e.message}`));
450
412
  throw new Error(`Pipeline failed: ${error.message}`);
451
413
  }
452
414
  console.log(' ├─ Project Survey ✓');
@@ -501,7 +463,7 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
501
463
  console.log(` ${prefix} ${file} ✓`);
502
464
  }
503
465
  // Save LLM logs
504
- await llm.saveLogs().catch(() => { });
466
+ await llm.saveLogs().catch((e) => logger.debug(`Failed to save LLM logs: ${e.message}`));
505
467
  metadata.steps.generate = {
506
468
  status: 'completed',
507
469
  specsGenerated: report.filesWritten.length,
@@ -512,7 +474,7 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
512
474
  displayCompletionBanner();
513
475
  const duration = Date.now() - startTime;
514
476
  metadata.duration = duration;
515
- console.log(` Full report: .spec-gen/outputs/generation-report.json`);
477
+ console.log(` Full report: ${SPEC_GEN_DIR}/outputs/${ARTIFACT_GENERATION_REPORT}`);
516
478
  console.log(` Total time: ${formatDuration(duration)}`);
517
479
  console.log('');
518
480
  // Save run metadata
@@ -523,7 +485,7 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
523
485
  metadata.duration = duration;
524
486
  metadata.result = 'failure';
525
487
  metadata.error = error.message;
526
- await saveRunMetadata(rootPath, metadata).catch(() => { });
488
+ await saveRunMetadata(rootPath, metadata).catch((e) => logger.debug(`Failed to save run metadata: ${e.message}`));
527
489
  logger.error(`Pipeline failed: ${error.message}`);
528
490
  if (process.env.DEBUG) {
529
491
  console.error(error);
@@ -531,16 +493,4 @@ The pipeline saves run metadata to .spec-gen/runs/ for tracking.
531
493
  process.exitCode = 1;
532
494
  }
533
495
  });
534
- /**
535
- * Create the default action for spec-gen (no subcommand)
536
- * This wraps runCommand to be used as the default action
537
- */
538
- export async function runDefaultPipeline(path, options) {
539
- // Change to the specified path if provided and different from cwd
540
- if (path && path !== '.') {
541
- process.chdir(path);
542
- }
543
- // Invoke the run command action
544
- await runCommand.parseAsync(['node', 'spec-gen', 'run', ...(options.yes ? ['-y'] : [])], { from: 'user' });
545
- }
546
496
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwOpC,eAAO,MAAM,aAAa,SA2QtB,CAAC"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkNpC,eAAO,MAAM,aAAa,SAiRtB,CAAC"}
@@ -5,45 +5,16 @@
5
5
  * Samples files and validates that specs accurately describe behavior.
6
6
  */
7
7
  import { Command } from 'commander';
8
- import { access, readFile } from 'node:fs/promises';
9
8
  import { join } from 'node:path';
10
9
  import { logger } from '../../utils/logger.js';
10
+ import { fileExists, formatDuration, parseList, readJsonFile } from '../../utils/command-helpers.js';
11
+ import { SPEC_GEN_DIR, SPEC_GEN_ANALYSIS_SUBDIR, SPEC_GEN_LOGS_SUBDIR, SPEC_GEN_VERIFICATION_SUBDIR, SPEC_GEN_OUTPUTS_SUBDIR, SPEC_GEN_CONFIG_REL_PATH, OPENSPEC_DIR, OPENSPEC_SPECS_SUBDIR, ARTIFACT_DEPENDENCY_GRAPH, ARTIFACT_GENERATION_REPORT, } from '../../constants.js';
11
12
  import { readSpecGenConfig } from '../../core/services/config-manager.js';
12
13
  import { createLLMService } from '../../core/services/llm-service.js';
13
14
  import { SpecVerificationEngine, } from '../../core/verifier/verification-engine.js';
14
15
  // ============================================================================
15
16
  // HELPER FUNCTIONS
16
17
  // ============================================================================
17
- /**
18
- * Parse comma-separated list
19
- */
20
- function parseList(value) {
21
- return value.split(',').map((s) => s.trim()).filter(Boolean);
22
- }
23
- /**
24
- * Check if a file exists
25
- */
26
- async function fileExists(path) {
27
- try {
28
- await access(path);
29
- return true;
30
- }
31
- catch {
32
- return false;
33
- }
34
- }
35
- /**
36
- * Format time duration for display
37
- */
38
- function formatDuration(ms) {
39
- if (ms < 1000)
40
- return `${ms}ms`;
41
- if (ms < 60000)
42
- return `${(ms / 1000).toFixed(1)}s`;
43
- const minutes = Math.floor(ms / 60000);
44
- const seconds = Math.floor((ms % 60000) / 1000);
45
- return `${minutes}m ${seconds}s`;
46
- }
47
18
  /**
48
19
  * Format score as bar
49
20
  */
@@ -67,12 +38,7 @@ function getStatusEmoji(score, threshold) {
67
38
  */
68
39
  async function loadDependencyGraph(analysisPath) {
69
40
  try {
70
- const depGraphPath = join(analysisPath, 'dependency-graph.json');
71
- if (!(await fileExists(depGraphPath))) {
72
- return null;
73
- }
74
- const content = await readFile(depGraphPath, 'utf-8');
75
- return JSON.parse(content);
41
+ return await readJsonFile(join(analysisPath, ARTIFACT_DEPENDENCY_GRAPH), ARTIFACT_DEPENDENCY_GRAPH);
76
42
  }
77
43
  catch {
78
44
  return null;
@@ -83,12 +49,7 @@ async function loadDependencyGraph(analysisPath) {
83
49
  */
84
50
  async function loadGenerationReport(rootPath) {
85
51
  try {
86
- const reportPath = join(rootPath, '.spec-gen', 'outputs', 'generation-report.json');
87
- if (!(await fileExists(reportPath))) {
88
- return null;
89
- }
90
- const content = await readFile(reportPath, 'utf-8');
91
- return JSON.parse(content);
52
+ return await readJsonFile(join(rootPath, SPEC_GEN_DIR, SPEC_GEN_OUTPUTS_SUBDIR, ARTIFACT_GENERATION_REPORT), ARTIFACT_GENERATION_REPORT);
92
53
  }
93
54
  catch {
94
55
  return null;
@@ -190,7 +151,7 @@ function displaySummary(report, _threshold) {
190
151
  console.log(`📝 Recommendation: ${recommendationIcon} ${recommendationText}`);
191
152
  console.log(` ${recommendationDetail}`);
192
153
  console.log('');
193
- console.log(` Full report: .spec-gen/verification/REPORT.md`);
154
+ console.log(` Full report: ${SPEC_GEN_DIR}/${SPEC_GEN_VERIFICATION_SUBDIR}/REPORT.md`);
194
155
  console.log('');
195
156
  }
196
157
  // ============================================================================
@@ -247,11 +208,16 @@ A score >= threshold indicates specs are production-ready.
247
208
  json: options.json ?? false,
248
209
  quiet: false,
249
210
  noColor: false,
250
- config: '.spec-gen/config.json',
211
+ config: SPEC_GEN_CONFIG_REL_PATH,
251
212
  };
213
+ if (isNaN(opts.samples) || opts.samples < 1) {
214
+ logger.error('--samples must be a positive integer');
215
+ process.exitCode = 1;
216
+ return;
217
+ }
252
218
  // Validate threshold range
253
- if (opts.threshold < 0 || opts.threshold > 1) {
254
- logger.error('Threshold must be between 0 and 1');
219
+ if (isNaN(opts.threshold) || opts.threshold < 0 || opts.threshold > 1) {
220
+ logger.error('Threshold must be a number between 0 and 1');
255
221
  process.exitCode = 1;
256
222
  return;
257
223
  }
@@ -270,8 +236,8 @@ A score >= threshold indicates specs are production-ready.
270
236
  return;
271
237
  }
272
238
  // Determine openspec path
273
- const openspecPath = join(rootPath, specGenConfig.openspecPath ?? 'openspec');
274
- const specsPath = join(openspecPath, 'specs');
239
+ const openspecPath = join(rootPath, specGenConfig.openspecPath ?? OPENSPEC_DIR);
240
+ const specsPath = join(openspecPath, OPENSPEC_SPECS_SUBDIR);
275
241
  // Check if specs exist
276
242
  if (!(await fileExists(specsPath))) {
277
243
  logger.error('No specs found. Run "spec-gen generate" first.');
@@ -285,7 +251,7 @@ A score >= threshold indicates specs are production-ready.
285
251
  const generationReport = await loadGenerationReport(rootPath);
286
252
  const generationContext = generationReport?.filesWritten ?? [];
287
253
  // Load dependency graph
288
- const analysisPath = join(rootPath, '.spec-gen', 'analysis');
254
+ const analysisPath = join(rootPath, SPEC_GEN_DIR, SPEC_GEN_ANALYSIS_SUBDIR);
289
255
  const depGraph = await loadDependencyGraph(analysisPath);
290
256
  if (!depGraph) {
291
257
  logger.error('No analysis found. Run "spec-gen analyze" first.');
@@ -316,7 +282,7 @@ A score >= threshold indicates specs are production-ready.
316
282
  apiBase: globalOpts.apiBase ?? specGenConfig.llm?.apiBase,
317
283
  sslVerify: globalOpts.insecure != null ? !globalOpts.insecure : specGenConfig.llm?.sslVerify ?? true,
318
284
  enableLogging: true,
319
- logDir: join(rootPath, '.spec-gen', 'logs'),
285
+ logDir: join(rootPath, SPEC_GEN_DIR, SPEC_GEN_LOGS_SUBDIR),
320
286
  });
321
287
  }
322
288
  catch (error) {
@@ -327,7 +293,7 @@ A score >= threshold indicates specs are production-ready.
327
293
  // ========================================================================
328
294
  // PHASE 3: RUN VERIFICATION
329
295
  // ========================================================================
330
- const verificationDir = join(rootPath, '.spec-gen', 'verification');
296
+ const verificationDir = join(rootPath, SPEC_GEN_DIR, SPEC_GEN_VERIFICATION_SUBDIR);
331
297
  const engine = new SpecVerificationEngine(llm, {
332
298
  rootPath,
333
299
  openspecPath,