gherkin-ai 2.5.0 → 2.6.0

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 (166) hide show
  1. package/README.md +2 -2
  2. package/dist/commands/autopilot.d.ts +1 -0
  3. package/dist/commands/autopilot.d.ts.map +1 -1
  4. package/dist/commands/autopilot.js +94 -31
  5. package/dist/commands/autopilot.js.map +1 -1
  6. package/dist/commands/converge.d.ts +7 -0
  7. package/dist/commands/converge.d.ts.map +1 -0
  8. package/dist/commands/converge.js +115 -0
  9. package/dist/commands/converge.js.map +1 -0
  10. package/dist/commands/diff.d.ts.map +1 -1
  11. package/dist/commands/diff.js +15 -1
  12. package/dist/commands/diff.js.map +1 -1
  13. package/dist/commands/doc.d.ts +2 -0
  14. package/dist/commands/doc.d.ts.map +1 -0
  15. package/dist/commands/doc.js +20 -0
  16. package/dist/commands/doc.js.map +1 -0
  17. package/dist/commands/generate.d.ts.map +1 -1
  18. package/dist/commands/generate.js +45 -48
  19. package/dist/commands/generate.js.map +1 -1
  20. package/dist/commands/impact.d.ts +6 -0
  21. package/dist/commands/impact.d.ts.map +1 -0
  22. package/dist/commands/impact.js +65 -0
  23. package/dist/commands/impact.js.map +1 -0
  24. package/dist/commands/init.d.ts +5 -1
  25. package/dist/commands/init.d.ts.map +1 -1
  26. package/dist/commands/init.js +77 -56
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/lint.d.ts +8 -0
  29. package/dist/commands/lint.d.ts.map +1 -0
  30. package/dist/commands/lint.js +143 -0
  31. package/dist/commands/lint.js.map +1 -0
  32. package/dist/commands/pr-review.d.ts +6 -0
  33. package/dist/commands/pr-review.d.ts.map +1 -0
  34. package/dist/commands/pr-review.js +74 -0
  35. package/dist/commands/pr-review.js.map +1 -0
  36. package/dist/commands/sbom.d.ts +2 -0
  37. package/dist/commands/sbom.d.ts.map +1 -0
  38. package/dist/commands/sbom.js +62 -0
  39. package/dist/commands/sbom.js.map +1 -0
  40. package/dist/commands/skill.d.ts.map +1 -1
  41. package/dist/commands/skill.js +251 -25
  42. package/dist/commands/skill.js.map +1 -1
  43. package/dist/commands/validate.d.ts +1 -0
  44. package/dist/commands/validate.d.ts.map +1 -1
  45. package/dist/commands/validate.js +35 -1
  46. package/dist/commands/validate.js.map +1 -1
  47. package/dist/commands/verify.d.ts.map +1 -1
  48. package/dist/commands/verify.js +43 -15
  49. package/dist/commands/verify.js.map +1 -1
  50. package/dist/core/agent-adapter.d.ts +7 -0
  51. package/dist/core/agent-adapter.d.ts.map +1 -1
  52. package/dist/core/agent-adapter.js +145 -25
  53. package/dist/core/agent-adapter.js.map +1 -1
  54. package/dist/core/constitution.d.ts +83 -0
  55. package/dist/core/constitution.d.ts.map +1 -0
  56. package/dist/core/constitution.js +317 -0
  57. package/dist/core/constitution.js.map +1 -0
  58. package/dist/core/context-security.d.ts +25 -0
  59. package/dist/core/context-security.d.ts.map +1 -0
  60. package/dist/core/context-security.js +154 -0
  61. package/dist/core/context-security.js.map +1 -0
  62. package/dist/core/convergence-engine.d.ts +21 -0
  63. package/dist/core/convergence-engine.d.ts.map +1 -0
  64. package/dist/core/convergence-engine.js +266 -0
  65. package/dist/core/convergence-engine.js.map +1 -0
  66. package/dist/core/doc-engine.d.ts +6 -0
  67. package/dist/core/doc-engine.d.ts.map +1 -0
  68. package/dist/core/doc-engine.js +105 -0
  69. package/dist/core/doc-engine.js.map +1 -0
  70. package/dist/core/gherkin-parser.d.ts +1 -0
  71. package/dist/core/gherkin-parser.d.ts.map +1 -1
  72. package/dist/core/gherkin-parser.js +11 -1
  73. package/dist/core/gherkin-parser.js.map +1 -1
  74. package/dist/core/guardrails.d.ts +10 -1
  75. package/dist/core/guardrails.d.ts.map +1 -1
  76. package/dist/core/guardrails.js +56 -8
  77. package/dist/core/guardrails.js.map +1 -1
  78. package/dist/core/impact-analyzer.d.ts +12 -0
  79. package/dist/core/impact-analyzer.d.ts.map +1 -0
  80. package/dist/core/impact-analyzer.js +117 -0
  81. package/dist/core/impact-analyzer.js.map +1 -0
  82. package/dist/core/ir-builder.d.ts +5 -0
  83. package/dist/core/ir-builder.d.ts.map +1 -0
  84. package/dist/core/ir-builder.js +944 -0
  85. package/dist/core/ir-builder.js.map +1 -0
  86. package/dist/core/openapi-validator.d.ts +16 -0
  87. package/dist/core/openapi-validator.d.ts.map +1 -0
  88. package/dist/core/openapi-validator.js +132 -0
  89. package/dist/core/openapi-validator.js.map +1 -0
  90. package/dist/core/plugin-system.d.ts +57 -0
  91. package/dist/core/plugin-system.d.ts.map +1 -0
  92. package/dist/core/plugin-system.js +71 -0
  93. package/dist/core/plugin-system.js.map +1 -0
  94. package/dist/core/pr-reviewer.d.ts +12 -0
  95. package/dist/core/pr-reviewer.d.ts.map +1 -0
  96. package/dist/core/pr-reviewer.js +58 -0
  97. package/dist/core/pr-reviewer.js.map +1 -0
  98. package/dist/core/quality-score.d.ts +3 -0
  99. package/dist/core/quality-score.d.ts.map +1 -1
  100. package/dist/core/quality-score.js +108 -35
  101. package/dist/core/quality-score.js.map +1 -1
  102. package/dist/core/requirement-validator.d.ts.map +1 -1
  103. package/dist/core/requirement-validator.js +10 -2
  104. package/dist/core/requirement-validator.js.map +1 -1
  105. package/dist/core/security-sanitizer.d.ts +8 -0
  106. package/dist/core/security-sanitizer.d.ts.map +1 -0
  107. package/dist/core/security-sanitizer.js +73 -0
  108. package/dist/core/security-sanitizer.js.map +1 -0
  109. package/dist/core/semantic-ir.d.ts +179 -0
  110. package/dist/core/semantic-ir.d.ts.map +1 -0
  111. package/dist/core/semantic-ir.js +15 -0
  112. package/dist/core/semantic-ir.js.map +1 -0
  113. package/dist/core/specification-linter.d.ts +31 -0
  114. package/dist/core/specification-linter.d.ts.map +1 -0
  115. package/dist/core/specification-linter.js +463 -0
  116. package/dist/core/specification-linter.js.map +1 -0
  117. package/dist/core/step-indexer.d.ts +2 -0
  118. package/dist/core/step-indexer.d.ts.map +1 -1
  119. package/dist/core/step-indexer.js +99 -33
  120. package/dist/core/step-indexer.js.map +1 -1
  121. package/dist/core/telemetry.d.ts +42 -0
  122. package/dist/core/telemetry.d.ts.map +1 -0
  123. package/dist/core/telemetry.js +111 -0
  124. package/dist/core/telemetry.js.map +1 -0
  125. package/dist/generators/ci-workflow-generator.d.ts +5 -0
  126. package/dist/generators/ci-workflow-generator.d.ts.map +1 -0
  127. package/dist/generators/ci-workflow-generator.js +54 -0
  128. package/dist/generators/ci-workflow-generator.js.map +1 -0
  129. package/dist/generators/contracts.js +8 -7
  130. package/dist/generators/contracts.js.map +1 -1
  131. package/dist/generators/preset-node-nestjs.d.ts.map +1 -1
  132. package/dist/generators/preset-node-nestjs.js +39 -18
  133. package/dist/generators/preset-node-nestjs.js.map +1 -1
  134. package/dist/generators/prisma-generator.d.ts +6 -0
  135. package/dist/generators/prisma-generator.d.ts.map +1 -0
  136. package/dist/generators/prisma-generator.js +143 -0
  137. package/dist/generators/prisma-generator.js.map +1 -0
  138. package/dist/generators/prisma-stack.d.ts +7 -0
  139. package/dist/generators/prisma-stack.d.ts.map +1 -0
  140. package/dist/generators/prisma-stack.js +77 -0
  141. package/dist/generators/prisma-stack.js.map +1 -0
  142. package/dist/generators/prompts.d.ts.map +1 -1
  143. package/dist/generators/prompts.js +15 -1
  144. package/dist/generators/prompts.js.map +1 -1
  145. package/dist/index.js +80 -5
  146. package/dist/index.js.map +1 -1
  147. package/dist/mcp/mcp-server.d.ts.map +1 -1
  148. package/dist/mcp/mcp-server.js +336 -98
  149. package/dist/mcp/mcp-server.js.map +1 -1
  150. package/dist/plugins/core-generators-plugin.d.ts +35 -0
  151. package/dist/plugins/core-generators-plugin.d.ts.map +1 -0
  152. package/dist/plugins/core-generators-plugin.js +146 -0
  153. package/dist/plugins/core-generators-plugin.js.map +1 -0
  154. package/dist/utils/logger.d.ts +3 -0
  155. package/dist/utils/logger.d.ts.map +1 -1
  156. package/dist/utils/logger.js +31 -4
  157. package/dist/utils/logger.js.map +1 -1
  158. package/dist/utils/spec-dir-resolver.d.ts.map +1 -1
  159. package/dist/utils/spec-dir-resolver.js +4 -3
  160. package/dist/utils/spec-dir-resolver.js.map +1 -1
  161. package/dist/utils/workspace-detector.d.ts.map +1 -1
  162. package/dist/utils/workspace-detector.js +13 -5
  163. package/dist/utils/workspace-detector.js.map +1 -1
  164. package/docs/MCP_GUIDE.md +14 -11
  165. package/docs/USAGE_GUIDE.md +10 -6
  166. package/package.json +5 -2
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ---
10
10
 
11
- ## 🌟 Strategic Capabilities (`v2.5.0`)
11
+ ## 🌟 Strategic Capabilities (`v2.6.0` Stable Release)
12
12
 
13
13
  While basic AI spec tools only generate text prompts, `gherkin-ai` acts as an **executable contract and verification harness** between Product Intent, AI Agents (Cursor, Claude Code, Windsurf, Antigravity), Code Implementation, and CI/CD Quality Gates:
14
14
 
@@ -30,7 +30,7 @@ While basic AI spec tools only generate text prompts, `gherkin-ai` acts as an **
30
30
 
31
31
  ---
32
32
 
33
- ## šŸ“„ Installation & Execution (`v2.5.0`)
33
+ ## šŸ“„ Installation & Execution (`v2.6.0`)
34
34
 
35
35
  You can use `gherkin-ai` via global `npm` installation, on-demand zero-install `npx`, or as a project local dev dependency:
36
36
 
@@ -1,6 +1,7 @@
1
1
  export interface AutopilotOptions {
2
2
  requirement?: string;
3
3
  autonomous?: boolean;
4
+ command?: string;
4
5
  }
5
6
  export declare function handleAutopilotCommand(options?: AutopilotOptions): Promise<void>;
6
7
  //# sourceMappingURL=autopilot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG1F"}
1
+ {"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmK1F"}
@@ -39,31 +39,43 @@ async function handleAutopilotCommand(options = {}) {
39
39
  process.exitCode = 1;
40
40
  return;
41
41
  }
42
+ const { detectPromptInjection } = require('../core/security-sanitizer');
43
+ const securityCheck = detectPromptInjection(reqContent);
44
+ if (!securityCheck.isSafe) {
45
+ console.log(chalk_1.default.red('\nāœ– SECURITY ALERT: Prompt Injection Attempt Blocked!'));
46
+ console.log(chalk_1.default.red(` ⚠ Reason: ${securityCheck.reason}`));
47
+ process.exitCode = 1;
48
+ return;
49
+ }
42
50
  const configInstance = (0, config_1.loadConfig)();
43
51
  console.log(chalk_1.default.blue(`1. Analyzing repository & building context package...`));
44
52
  const context = (0, context_builder_1.buildProjectContext)();
45
- const config = {
46
- provider: process.env.LLM_PROVIDER || 'ide_delegate',
47
- model: process.env.LLM_MODEL,
48
- apiKey: process.env.OPENAI_API_KEY || process.env.ANTHROPIC_API_KEY || process.env.LLM_API_KEY,
49
- baseUrl: process.env.LLM_BASE_URL
50
- };
53
+ const { resolveLLMConfig } = require('../core/agent-adapter');
54
+ const config = resolveLLMConfig();
51
55
  const agent = new agent_adapter_1.RealAgentProvider(config);
52
56
  console.log(chalk_1.default.blue(`2. Invoking Spec Agent -> Generating Gherkin AST...`));
53
- const specRes = await agent.executeTask({
54
- id: 'auto-spec',
55
- type: 'spec_generation',
56
- prompt: `Generate a Gherkin .feature file for the following requirement:\n\n${reqContent}\n\nWrap the code in \`\`\`gherkin ... \`\`\` blocks.`,
57
- contextFiles: ['.ghe/conventions.md']
58
- });
59
- let specContent = 'Feature: Auto-generated feature...';
60
- if (specRes.codeModifications && specRes.codeModifications.length > 0) {
61
- let specDirPath = 'specs';
57
+ let specRes;
58
+ try {
59
+ specRes = await agent.executeTask({
60
+ id: 'auto-spec',
61
+ type: 'spec_generation',
62
+ prompt: `Generate a Gherkin .feature file for the following requirement:\n\n${reqContent}\n\nWrap the code in \`\`\`gherkin ... \`\`\` blocks.`,
63
+ contextFiles: ['.ghe/conventions.md']
64
+ });
65
+ }
66
+ catch (error) {
67
+ console.log(chalk_1.default.red(`\nāœ– Spec Agent execution crashed: ${error.message}`));
68
+ process.exitCode = 1;
69
+ return;
70
+ }
71
+ let specContent = '';
72
+ if (specRes.success && specRes.codeModifications && specRes.codeModifications.length > 0) {
73
+ let specDirPath = process.env.GHK_SPEC_DIR || configInstance.specDir || 'specs';
62
74
  try {
63
75
  specDirPath = (0, spec_dir_resolver_1.resolveSpecDir)(configInstance.specDir);
64
76
  }
65
77
  catch {
66
- // Use fallback if none found
78
+ // Use fallback if none found (specDirPath retains the fallback value)
67
79
  }
68
80
  for (const mod of specRes.codeModifications) {
69
81
  let p = mod.filePath;
@@ -74,25 +86,53 @@ async function handleAutopilotCommand(options = {}) {
74
86
  p = path_1.default.join(specDirPath, p);
75
87
  }
76
88
  const fullPath = path_1.default.resolve(p);
77
- fs_1.default.mkdirSync(path_1.default.dirname(fullPath), { recursive: true });
78
- fs_1.default.writeFileSync(fullPath, mod.content);
79
- console.log(chalk_1.default.green(` āœ“ Wrote specification to ${p}`));
89
+ if (process.env.GHK_DRY_RUN === 'true') {
90
+ if (process.env.GHK_STDOUT === 'true') {
91
+ console.log(chalk_1.default.yellow(` [DRY RUN] Proposed spec for ${p}:\n${mod.content}`));
92
+ }
93
+ else {
94
+ const patchDir = path_1.default.resolve('.ghe', 'patches');
95
+ fs_1.default.mkdirSync(patchDir, { recursive: true });
96
+ const patchPath = path_1.default.join(patchDir, path_1.default.basename(p) + '.proposed');
97
+ fs_1.default.writeFileSync(patchPath, mod.content, 'utf8');
98
+ console.log(chalk_1.default.yellow(` [DRY RUN] Saved proposed spec to ${patchPath}`));
99
+ }
100
+ }
101
+ else {
102
+ fs_1.default.mkdirSync(path_1.default.dirname(fullPath), { recursive: true });
103
+ fs_1.default.writeFileSync(fullPath, mod.content);
104
+ console.log(chalk_1.default.green(` āœ“ Wrote specification to ${p}`));
105
+ }
80
106
  if (mod.filePath.endsWith('.feature')) {
81
107
  specContent = mod.content;
82
108
  }
83
109
  }
84
110
  }
85
111
  else {
86
- console.log(chalk_1.default.yellow(` āš ļø Agent didn't return proper code blocks. Using fallback.`));
112
+ const { saveFailedAttemptLog } = require('../core/agent-adapter');
113
+ const logPath = saveFailedAttemptLog('auto-spec', reqContent, specRes?.agentResponse || 'No response', 'Failed to extract valid code modifications');
114
+ console.log(chalk_1.default.red(`\nāœ– Spec Agent failed to generate valid code blocks.`));
115
+ console.log(chalk_1.default.yellow(` Response from Agent:\n${specRes.agentResponse.substring(0, 300)}...\n`));
116
+ console.log(chalk_1.default.cyan(` → Diagnostics log saved to: ${logPath}\n`));
117
+ process.exitCode = 1;
118
+ return;
87
119
  }
88
120
  console.log(chalk_1.default.blue(`3. Invoking Scaffolding Agent -> Generating Bindings...`));
89
- const scaffoldRes = await agent.executeTask({
90
- id: 'auto-scaffold',
91
- type: 'scaffold_binding',
92
- prompt: `Generate step definitions for the following spec:\n\n${specContent}\n\nWrap code in \`\`\`ts ... \`\`\``,
93
- contextFiles: []
94
- });
95
- if (scaffoldRes.codeModifications && scaffoldRes.codeModifications.length > 0) {
121
+ let scaffoldRes;
122
+ try {
123
+ scaffoldRes = await agent.executeTask({
124
+ id: 'auto-scaffold',
125
+ type: 'scaffold_binding',
126
+ prompt: `Generate step definitions for the following spec:\n\n${specContent}\n\nWrap code in \`\`\`ts ... \`\`\``,
127
+ contextFiles: []
128
+ });
129
+ }
130
+ catch (error) {
131
+ console.log(chalk_1.default.red(`\nāœ– Scaffolding Agent execution crashed: ${error.message}`));
132
+ process.exitCode = 1;
133
+ return;
134
+ }
135
+ if (scaffoldRes.success && scaffoldRes.codeModifications && scaffoldRes.codeModifications.length > 0) {
96
136
  const { validateTypeScriptSyntax } = require('../core/syntax-validator');
97
137
  for (const mod of scaffoldRes.codeModifications) {
98
138
  if (!validateTypeScriptSyntax(mod.filePath, mod.content)) {
@@ -100,13 +140,36 @@ async function handleAutopilotCommand(options = {}) {
100
140
  continue;
101
141
  }
102
142
  const fullPath = path_1.default.resolve(mod.filePath);
103
- fs_1.default.mkdirSync(path_1.default.dirname(fullPath), { recursive: true });
104
- fs_1.default.writeFileSync(fullPath, mod.content);
105
- console.log(chalk_1.default.green(` āœ“ Wrote bindings to ${mod.filePath}`));
143
+ if (process.env.GHK_DRY_RUN === 'true') {
144
+ if (process.env.GHK_STDOUT === 'true') {
145
+ console.log(chalk_1.default.yellow(` [DRY RUN] Proposed bindings for ${mod.filePath}:\n${mod.content}`));
146
+ }
147
+ else {
148
+ const patchDir = path_1.default.resolve('.ghe', 'patches');
149
+ fs_1.default.mkdirSync(patchDir, { recursive: true });
150
+ const patchPath = path_1.default.join(patchDir, path_1.default.basename(mod.filePath) + '.proposed');
151
+ fs_1.default.writeFileSync(patchPath, mod.content, 'utf8');
152
+ console.log(chalk_1.default.yellow(` [DRY RUN] Saved proposed bindings to ${patchPath}`));
153
+ }
154
+ }
155
+ else {
156
+ fs_1.default.mkdirSync(path_1.default.dirname(fullPath), { recursive: true });
157
+ fs_1.default.writeFileSync(fullPath, mod.content);
158
+ console.log(chalk_1.default.green(` āœ“ Wrote bindings to ${mod.filePath}`));
159
+ }
106
160
  }
107
161
  }
162
+ else {
163
+ const { saveFailedAttemptLog } = require('../core/agent-adapter');
164
+ const logPath = saveFailedAttemptLog('auto-scaffold', specContent, scaffoldRes?.agentResponse || 'No response', 'Failed to extract valid code modifications');
165
+ console.log(chalk_1.default.red(`\nāœ– Scaffolding Agent failed to generate valid code blocks.`));
166
+ console.log(chalk_1.default.yellow(` Response from Agent:\n${scaffoldRes.agentResponse.substring(0, 300)}...\n`));
167
+ console.log(chalk_1.default.cyan(` → Diagnostics log saved to: ${logPath}\n`));
168
+ process.exitCode = 1;
169
+ return;
170
+ }
108
171
  console.log(chalk_1.default.blue(`4. Invoking Verification Agent & Closed-Loop Repair...`));
109
- await (0, verify_1.handleVerifyCommand)({ autoFix: true, maxRetries: 2 });
172
+ await (0, verify_1.handleVerifyCommand)({ autoFix: true, maxRetries: 2, command: options.command });
110
173
  console.log(chalk_1.default.blue(`5. Evaluating Enterprise Quality Score Gate...`));
111
174
  const scorecard = (0, quality_score_1.calculateQualityScorecard)(process.cwd(), configInstance.specDir);
112
175
  console.log(chalk_1.default.bold.green(`\nāœ… Autopilot Execution Complete! Quality Score: ${scorecard.overallScore}%`));
@@ -1 +1 @@
1
- {"version":3,"file":"autopilot.js","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autopilot.js","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;AAmBhF,wDAmKC;AApLD,kDAA0B;AAC1B,4CAAoB;AACpB,gDAAwB;AACxB,6DAA8D;AAC9D,yDAAkE;AAClE,yDAAqE;AACrE,qCAA+C;AAC/C,2CAA4C;AAC5C,kEAA4D;AAC5D,yEAAoE;AAQ7D,KAAK,UAAU,sBAAsB,CAAC,UAA4B,EAAE;IACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC,CAAC;IAE1G,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,gBAAgB,CAAC;IACxD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEpD,qDAAqD;IACrD,MAAM,UAAU,GAAG,IAAA,2CAAmB,EAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,mBAAU,GAAE,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,IAAA,qCAAmB,GAAE,CAAC;IAEtC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAc,gBAAgB,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,iCAAiB,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,sEAAsE,UAAU,uDAAuD;YAC/I,YAAY,EAAE,CAAC,qBAAqB,CAAC;SACtC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzF,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,CAAC,OAAO,IAAI,OAAO,CAAC;QAChF,IAAI,CAAC;YACH,WAAW,GAAG,IAAA,kCAAc,EAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5C,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;YACrB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,CAAC,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,CAAC,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACjD,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5C,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;oBACtE,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,4CAA4C,CAAC,CAAC;QACrJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,OAAO,IAAI,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;IACnF,IAAI,WAAW,CAAC;IAChB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;YACpC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,wDAAwD,WAAW,sCAAsC;YACjH,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,iBAAiB,IAAI,WAAW,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrG,MAAM,EAAE,wBAAwB,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACzE,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;YAChD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,GAAG,CAAC,QAAQ,wBAAwB,CAAC,CAAC,CAAC;gBAC1F,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5C,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,sCAAsC,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACnG,CAAC;qBAAM,CAAC;oBACN,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACjD,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5C,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,CAAC;oBACjF,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2CAA2C,SAAS,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,oBAAoB,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,IAAI,aAAa,EAAE,4CAA4C,CAAC,CAAC;QAC9J,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,OAAO,IAAI,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAClF,MAAM,IAAA,4BAAmB,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAA,yCAAyB,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,oDAAoD,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAC7G,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface ConvergeCommandOptions {
2
+ feature?: string;
3
+ threshold?: string;
4
+ json?: boolean;
5
+ }
6
+ export declare function handleConvergeCommand(options?: ConvergeCommandOptions): Promise<void>;
7
+ //# sourceMappingURL=converge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converge.d.ts","sourceRoot":"","sources":["../../src/commands/converge.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsH/F"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - 'converge' Command Handler
4
+ ========================================================================== */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.handleConvergeCommand = handleConvergeCommand;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const gherkin_parser_1 = require("../core/gherkin-parser");
14
+ const convergence_engine_1 = require("../core/convergence-engine");
15
+ async function handleConvergeCommand(options = {}) {
16
+ const threshold = parseInt(options.threshold || '80', 10);
17
+ // Resolve feature files
18
+ let featureFiles = [];
19
+ if (options.feature) {
20
+ featureFiles = [path_1.default.resolve(options.feature)];
21
+ }
22
+ else {
23
+ const { resolveSpecDir } = require('../utils/spec-dir-resolver');
24
+ try {
25
+ const specDir = resolveSpecDir(undefined, process.cwd());
26
+ featureFiles = fs_1.default.readdirSync(specDir)
27
+ .filter(f => f.endsWith('.feature'))
28
+ .map(f => path_1.default.join(specDir, f));
29
+ }
30
+ catch (e) {
31
+ console.log(chalk_1.default.yellow('\n⚠ No feature files found. Use --feature <file> or ensure a specs/ directory exists.\n'));
32
+ return;
33
+ }
34
+ }
35
+ if (featureFiles.length === 0) {
36
+ console.log(chalk_1.default.yellow('\n⚠ No .feature files found to analyze.\n'));
37
+ return;
38
+ }
39
+ console.log(chalk_1.default.bold.cyan('\nšŸ”„ Running Convergence Analysis...\n'));
40
+ const allReports = [];
41
+ let totalConvergence = 0;
42
+ for (const file of featureFiles) {
43
+ if (!fs_1.default.existsSync(file)) {
44
+ console.log(chalk_1.default.red(` āœ– File not found: ${file}`));
45
+ continue;
46
+ }
47
+ const content = fs_1.default.readFileSync(file, 'utf8');
48
+ let parsed;
49
+ try {
50
+ parsed = (0, gherkin_parser_1.parseGherkinText)(content);
51
+ }
52
+ catch (e) {
53
+ console.log(chalk_1.default.red(` āœ– Parse error in ${path_1.default.basename(file)}: ${e.message}`));
54
+ continue;
55
+ }
56
+ const report = (0, convergence_engine_1.calculateConvergence)(parsed, file);
57
+ allReports.push(report);
58
+ totalConvergence += report.overallConvergence;
59
+ if (options.json)
60
+ continue;
61
+ // Display convergence report
62
+ const statusColor = report.status === 'CONVERGED' ? chalk_1.default.green :
63
+ report.status === 'PARTIAL' ? chalk_1.default.yellow : chalk_1.default.red;
64
+ const statusIcon = report.status === 'CONVERGED' ? 'āœ“' :
65
+ report.status === 'PARTIAL' ? '⚠' : 'āœ–';
66
+ console.log(chalk_1.default.bold(` šŸ“„ ${path_1.default.basename(file)} — ${report.featureName}`));
67
+ console.log('');
68
+ // Dimension bars
69
+ for (const dim of report.dimensions) {
70
+ const barWidth = 30;
71
+ const filledWidth = Math.round((dim.score / 100) * barWidth);
72
+ const emptyWidth = barWidth - filledWidth;
73
+ const barColor = dim.status === 'pass' ? chalk_1.default.green :
74
+ dim.status === 'warn' ? chalk_1.default.yellow : chalk_1.default.red;
75
+ const bar = barColor('ā–ˆ'.repeat(filledWidth)) + chalk_1.default.gray('ā–‘'.repeat(emptyWidth));
76
+ const scoreStr = `${dim.score}%`.padStart(4);
77
+ console.log(` ${dim.name.padEnd(25)} ${bar} ${barColor(scoreStr)}`);
78
+ if (dim.status !== 'pass') {
79
+ for (const detail of dim.details.slice(0, 2)) {
80
+ console.log(chalk_1.default.gray(` ↳ ${detail}`));
81
+ }
82
+ }
83
+ }
84
+ console.log('');
85
+ console.log(` ${'Overall Convergence'.padEnd(25)} ${statusColor.bold(`${report.overallConvergence}%`)} ${statusColor(`[${report.status}]`)}`);
86
+ if (report.recommendations.length > 0) {
87
+ console.log('');
88
+ console.log(chalk_1.default.cyan(' Recommendations:'));
89
+ for (const rec of report.recommendations) {
90
+ console.log(chalk_1.default.cyan(` → ${rec}`));
91
+ }
92
+ }
93
+ console.log('');
94
+ console.log(chalk_1.default.gray(' ' + '─'.repeat(70)));
95
+ console.log('');
96
+ }
97
+ if (options.json) {
98
+ console.log(JSON.stringify(allReports, null, 2));
99
+ return;
100
+ }
101
+ // Overall summary
102
+ const avgConvergence = allReports.length > 0 ? Math.round(totalConvergence / allReports.length) : 0;
103
+ const overallStatus = avgConvergence >= threshold ? chalk_1.default.green.bold('PASSED āœ“') : chalk_1.default.red.bold('FAILED āœ–');
104
+ const overallColor = avgConvergence >= 80 ? chalk_1.default.green : avgConvergence >= 60 ? chalk_1.default.yellow : chalk_1.default.red;
105
+ console.log(chalk_1.default.bold('═'.repeat(60)));
106
+ console.log(` ${chalk_1.default.bold('Overall Convergence:')} ${overallColor.bold(`${avgConvergence}%`)} (threshold: ${threshold}%)`);
107
+ console.log(` ${chalk_1.default.bold('Status:')} ${overallStatus}`);
108
+ console.log(` ${chalk_1.default.bold('Features Analyzed:')} ${allReports.length}`);
109
+ console.log(chalk_1.default.bold('═'.repeat(60)));
110
+ console.log('');
111
+ if (avgConvergence < threshold) {
112
+ process.exitCode = 1;
113
+ }
114
+ }
115
+ //# sourceMappingURL=converge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converge.js","sourceRoot":"","sources":["../../src/commands/converge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;KAAE,EAAE,CAAC;IACxE,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IACpE,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAChE,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGvF"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;KAAE,EAAE,CAAC;IACxE,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IACpE,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAChE,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHvF"}
@@ -39,6 +39,7 @@ async function handleDiffCommand(options = {}) {
39
39
  let driftFound = false;
40
40
  console.log(chalk_1.default.blue(`Checking synchronization for ${fields.length} semantic fields...\n`));
41
41
  let targetProperties = [];
42
+ let targetDecorators = [];
42
43
  if (options.target.endsWith('.ts')) {
43
44
  try {
44
45
  const { Project } = require('ts-morph');
@@ -51,6 +52,15 @@ async function handleDiffCommand(options = {}) {
51
52
  }
52
53
  for (const cls of classes) {
53
54
  targetProperties.push(...cls.getProperties().map((p) => p.getName()));
55
+ // Extract HTTP methods/endpoints via Decorators (NestJS)
56
+ for (const method of cls.getMethods()) {
57
+ const decorators = method.getDecorators();
58
+ for (const dec of decorators) {
59
+ targetDecorators.push(dec.getName());
60
+ const args = dec.getArguments();
61
+ args.forEach((a) => targetDecorators.push(a.getText().replace(/['"]/g, '')));
62
+ }
63
+ }
54
64
  }
55
65
  }
56
66
  catch (e) {
@@ -83,7 +93,11 @@ async function handleDiffCommand(options = {}) {
83
93
  }
84
94
  const endpoints = featureContent.match(/(?:\/api\/[\w/-]+)/gi) || [];
85
95
  for (const endpoint of endpoints) {
86
- if (!targetContent.includes(endpoint)) {
96
+ // AST Check for endpoints (checking if path is part of any decorator argument)
97
+ const isEndpointFound = targetDecorators.length > 0
98
+ ? targetDecorators.some(d => endpoint.includes(d) || d.includes(endpoint)) || targetDecorators.includes('Controller')
99
+ : targetContent.includes(endpoint);
100
+ if (!isEndpointFound && !targetContent.includes(endpoint)) {
87
101
  console.log(chalk_1.default.red(` āœ– Drift Detected! Endpoint ${endpoint} from feature is not explicitly found in ${options.target}`));
88
102
  driftFound = true;
89
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function handleDocCommand(): Promise<void>;
2
+ //# sourceMappingURL=doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../src/commands/doc.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAatD"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleDocCommand = handleDocCommand;
4
+ const doc_engine_1 = require("../core/doc-engine");
5
+ const logger_1 = require("../utils/logger");
6
+ async function handleDocCommand() {
7
+ logger_1.logger.banner();
8
+ logger_1.logger.info('Generating Living Documentation from specifications...');
9
+ try {
10
+ const result = (0, doc_engine_1.generateLivingDocumentation)(process.cwd());
11
+ logger_1.logger.success(`Living Documentation successfully generated!`);
12
+ logger_1.logger.info(`šŸ“ Wrote ${result.filesGenerated} markdown files to: ${result.outputDir}`);
13
+ logger_1.logger.info(`You can now serve this folder using VitePress, Docusaurus, or view it natively in GitHub/GitLab.`);
14
+ }
15
+ catch (error) {
16
+ logger_1.logger.error(`Failed to generate documentation: ${error.message}`);
17
+ process.exit(1);
18
+ }
19
+ }
20
+ //# sourceMappingURL=doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.js","sourceRoot":"","sources":["../../src/commands/doc.ts"],"names":[],"mappings":";;AAGA,4CAaC;AAhBD,mDAAiE;AACjE,4CAAyC;AAElC,KAAK,UAAU,gBAAgB;IACpC,eAAM,CAAC,MAAM,EAAE,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wCAA2B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,eAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;QAC/D,eAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,cAAc,uBAAuB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxF,eAAM,CAAC,IAAI,CAAC,kGAAkG,CAAC,CAAC;IAClH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAmCA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsHxH"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAkCA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyHxH"}
@@ -10,10 +10,9 @@ exports.handleGenerateCommand = handleGenerateCommand;
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const config_1 = require("../core/config");
12
12
  const gherkin_parser_1 = require("../core/gherkin-parser");
13
- const contracts_1 = require("../generators/contracts");
14
- const fixtures_1 = require("../generators/fixtures");
15
- const prompts_1 = require("../generators/prompts");
16
- const infra_1 = require("../generators/infra");
13
+ const ir_builder_1 = require("../core/ir-builder");
14
+ const plugin_system_1 = require("../core/plugin-system");
15
+ const core_generators_plugin_1 = require("../plugins/core-generators-plugin");
17
16
  const file_system_1 = require("../utils/file-system");
18
17
  const logger_1 = require("../utils/logger");
19
18
  const inquirer_1 = __importDefault(require("inquirer"));
@@ -53,27 +52,25 @@ async function handleGenerateCommand(options) {
53
52
  else {
54
53
  logger_1.logger.info('No feature file specified. Using built-in sample feature spec.');
55
54
  }
55
+ const { detectPromptInjection } = require('../core/security-sanitizer');
56
+ const securityCheck = detectPromptInjection(gherkinText);
57
+ if (!securityCheck.isSafe) {
58
+ logger_1.logger.error('SECURITY ALERT: Prompt Injection Attempt Blocked!');
59
+ logger_1.logger.error(`Reason: ${securityCheck.reason}`);
60
+ process.exitCode = 1;
61
+ return;
62
+ }
56
63
  logger_1.logger.info('Parsing Gherkin specification and extracting domain AST...');
57
64
  const parsed = (0, gherkin_parser_1.parseGherkinText)(gherkinText);
65
+ logger_1.logger.info('Building Semantic IR...');
66
+ const ir = (0, ir_builder_1.buildIR)(parsed, options.feature || 'sample.feature');
58
67
  logger_1.logger.info(`Target Output Directory: ${config.outputDir}`);
59
- // 1. Generate Contracts, ADR & OpenAPI
60
- const { contractsTs, adrMd, openApiJson } = (0, contracts_1.generateContracts)(parsed, config);
61
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'contracts.ts'), contractsTs);
62
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'ADR-001-architecture-decisions.md'), adrMd);
63
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'openapi.json'), openApiJson);
64
- logger_1.logger.success('Generated contracts.ts, ADR-001-architecture-decisions.md and openapi.json');
65
- // 2. Generate Test Fixtures & Seeds
66
- const { fixturesTs, seedSql } = (0, fixtures_1.generateFixtures)(parsed, config);
67
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'fixtures.ts'), fixturesTs);
68
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'seed.sql'), seedSql);
69
- logger_1.logger.success('Generated fixtures.ts and seed.sql');
70
- // 2.5 Generate Boilerplate Presets (Step Definitions)
71
- const { generatePresets } = require('../generators/presets');
72
- const presets = generatePresets(parsed, config);
73
- presets.forEach((preset) => {
74
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, preset.filename), preset.content);
75
- logger_1.logger.success(`Generated boilerplate preset: ${preset.filename}`);
76
- });
68
+ // Initialize Plugin Architecture
69
+ plugin_system_1.pluginRegistry.initialize({ config, constitution: null, projectDir: process.cwd() });
70
+ // Only register core plugins if not already registered (to prevent duplicate throws)
71
+ if (plugin_system_1.pluginRegistry.getPlugins().length === 0) {
72
+ (0, core_generators_plugin_1.registerCorePlugins)(plugin_system_1.pluginRegistry);
73
+ }
77
74
  console.log(chalk_1.default.bold.cyan('\nšŸ” Context Confirmation for AI Agents:'));
78
75
  console.log(`- Architecture: ${config.architecture}`);
79
76
  console.log(`- Stack: ${config.stack.language} + ${config.stack.framework}`);
@@ -82,8 +79,9 @@ async function handleGenerateCommand(options) {
82
79
  if (config.stack.aiEngine) {
83
80
  console.log(`- AI Tools: ${config.stack.aiEngine}`);
84
81
  }
82
+ const isNonInteractive = options.yes || process.env.GHK_NON_INTERACTIVE === 'true' || !!process.env.CI;
85
83
  let confirmContext = true;
86
- if (!options.yes && !process.env.CI) {
84
+ if (!isNonInteractive) {
87
85
  const answer = await inquirer_1.default.prompt([{
88
86
  type: 'confirm',
89
87
  name: 'confirmContext',
@@ -105,7 +103,7 @@ async function handleGenerateCommand(options) {
105
103
  agentChoices.push({ name: 'AI Engineer Agent (RAG/VectorDB)', value: 'ai-engineer-agent.md', checked: true });
106
104
  }
107
105
  let selectedAgents = agentChoices.map(c => c.value);
108
- if (!options.yes && !process.env.CI) {
106
+ if (!isNonInteractive) {
109
107
  const answer = await inquirer_1.default.prompt([{
110
108
  type: 'checkbox',
111
109
  name: 'selectedAgents',
@@ -114,31 +112,30 @@ async function handleGenerateCommand(options) {
114
112
  }]);
115
113
  selectedAgents = answer.selectedAgents;
116
114
  }
117
- if (selectedAgents.length > 0) {
118
- // 3. Generate Agent Prompts
119
- const prompts = (0, prompts_1.generatePrompts)(parsed, config);
120
- selectedAgents.forEach((filename) => {
121
- if (prompts[filename]) {
122
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'prompts', filename), prompts[filename]);
123
- }
124
- });
125
- logger_1.logger.success(`Generated selected prompts in prompts/: ${selectedAgents.join(', ')}`);
126
- }
127
- else {
128
- logger_1.logger.warn('No agents selected. Skipping prompt generation.');
129
- }
130
- // 4. Generate Infrastructure Config
131
- const { dockerComposeYaml, serverlessYml, envExample } = (0, infra_1.generateInfra)(config);
132
- if (config.architecture === 'serverless') {
133
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'serverless.yml'), serverlessYml);
134
- logger_1.logger.success('Generated serverless.yml (AWS Lambda FaaS)');
115
+ if (selectedAgents.length === 0) {
116
+ logger_1.logger.warn('No agents selected. Filtering out prompt generation.');
135
117
  }
136
- else {
137
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'docker-compose.yml'), dockerComposeYaml);
138
- logger_1.logger.success('Generated docker-compose.yml');
139
- }
140
- (0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, '.env.example'), envExample);
141
- logger_1.logger.success('Generated .env.example');
118
+ // Generate all artifacts via Plugin System
119
+ logger_1.logger.info('Running Generation Plugins...');
120
+ const artifacts = plugin_system_1.pluginRegistry.runGeneration(ir, config);
121
+ // Filter out unselected prompts
122
+ const filteredArtifacts = artifacts.filter(a => {
123
+ if (a.type === 'prompt') {
124
+ const filename = path_1.default.basename(a.filePath);
125
+ return selectedAgents.includes(filename);
126
+ }
127
+ return true;
128
+ });
129
+ const fs = require('fs');
130
+ filteredArtifacts.forEach(artifact => {
131
+ const fullPath = path_1.default.join(config.outputDir, artifact.filePath);
132
+ const dir = path_1.default.dirname(fullPath);
133
+ if (!fs.existsSync(dir)) {
134
+ fs.mkdirSync(dir, { recursive: true });
135
+ }
136
+ (0, file_system_1.writeFileSync)(fullPath, artifact.content);
137
+ logger_1.logger.success(`[Plugin ${artifact.type}] Generated: ${artifact.filePath}`);
138
+ });
142
139
  logger_1.logger.banner();
143
140
  logger_1.logger.success(`All artifacts successfully generated under ${config.outputDir}!`);
144
141
  logger_1.logger.info('Ready for AI Agents (Claude Code, Cursor, Antigravity, Copilot).');