gherkin-ai 2.1.0 → 2.2.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.
- package/README.md +9 -10
- package/dist/commands/autopilot.d.ts.map +1 -1
- package/dist/commands/autopilot.js +24 -10
- package/dist/commands/autopilot.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +47 -6
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/skill.d.ts +2 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +73 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +20 -12
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +4 -1
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/web.d.ts +2 -0
- package/dist/commands/web.d.ts.map +1 -0
- package/dist/commands/web.js +30 -0
- package/dist/commands/web.js.map +1 -0
- package/dist/core/agent-adapter.d.ts.map +1 -1
- package/dist/core/agent-adapter.js +21 -6
- package/dist/core/agent-adapter.js.map +1 -1
- package/dist/core/config.d.ts +3 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/execution-sandbox.d.ts.map +1 -1
- package/dist/core/execution-sandbox.js +26 -1
- package/dist/core/execution-sandbox.js.map +1 -1
- package/dist/core/gherkin-parser.d.ts.map +1 -1
- package/dist/core/gherkin-parser.js +74 -70
- package/dist/core/gherkin-parser.js.map +1 -1
- package/dist/core/quality-score.d.ts.map +1 -1
- package/dist/core/quality-score.js +25 -6
- package/dist/core/quality-score.js.map +1 -1
- package/dist/core/stack-detector.d.ts.map +1 -1
- package/dist/core/stack-detector.js +103 -2
- package/dist/core/stack-detector.js.map +1 -1
- package/dist/generators/contracts.d.ts.map +1 -1
- package/dist/generators/contracts.js +20 -4
- package/dist/generators/contracts.js.map +1 -1
- package/dist/generators/prompt-templates/base.d.ts +23 -0
- package/dist/generators/prompt-templates/base.d.ts.map +1 -0
- package/dist/generators/prompt-templates/base.js +20 -0
- package/dist/generators/prompt-templates/base.js.map +1 -0
- package/dist/generators/prompt-templates/factory.d.ts +3 -0
- package/dist/generators/prompt-templates/factory.d.ts.map +1 -0
- package/dist/generators/prompt-templates/factory.js +44 -0
- package/dist/generators/prompt-templates/factory.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/desktop-client.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/desktop-client.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/desktop-client.js +28 -0
- package/dist/generators/prompt-templates/stacks/desktop-client.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/dotnet.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/dotnet.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/dotnet.js +30 -0
- package/dist/generators/prompt-templates/stacks/dotnet.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/fallback.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/fallback.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/fallback.js +31 -0
- package/dist/generators/prompt-templates/stacks/fallback.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/flutter.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/flutter.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/flutter.js +29 -0
- package/dist/generators/prompt-templates/stacks/flutter.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/frontend-web.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/frontend-web.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/frontend-web.js +35 -0
- package/dist/generators/prompt-templates/stacks/frontend-web.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/go-backend.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/go-backend.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/go-backend.js +30 -0
- package/dist/generators/prompt-templates/stacks/go-backend.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/ionic.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/ionic.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/ionic.js +29 -0
- package/dist/generators/prompt-templates/stacks/ionic.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/laravel.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/laravel.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/laravel.js +30 -0
- package/dist/generators/prompt-templates/stacks/laravel.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/native-mobile.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/native-mobile.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/native-mobile.js +29 -0
- package/dist/generators/prompt-templates/stacks/native-mobile.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/nestjs.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/nestjs.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/nestjs.js +30 -0
- package/dist/generators/prompt-templates/stacks/nestjs.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/python-backend.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/python-backend.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/python-backend.js +36 -0
- package/dist/generators/prompt-templates/stacks/python-backend.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/react-native.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/react-native.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/react-native.js +29 -0
- package/dist/generators/prompt-templates/stacks/react-native.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/ruby-on-rails.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/ruby-on-rails.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/ruby-on-rails.js +30 -0
- package/dist/generators/prompt-templates/stacks/ruby-on-rails.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/rust-backend.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/rust-backend.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/rust-backend.js +30 -0
- package/dist/generators/prompt-templates/stacks/rust-backend.js.map +1 -0
- package/dist/generators/prompt-templates/stacks/spring-boot.d.ts +3 -0
- package/dist/generators/prompt-templates/stacks/spring-boot.d.ts.map +1 -0
- package/dist/generators/prompt-templates/stacks/spring-boot.js +30 -0
- package/dist/generators/prompt-templates/stacks/spring-boot.js.map +1 -0
- package/dist/generators/prompts.d.ts.map +1 -1
- package/dist/generators/prompts.js +19 -62
- package/dist/generators/prompts.js.map +1 -1
- package/dist/index.js +57 -1
- package/dist/index.js.map +1 -1
- package/dist/ui/server.d.ts +2 -0
- package/dist/ui/server.d.ts.map +1 -0
- package/dist/ui/server.js +99 -0
- package/dist/ui/server.js.map +1 -0
- package/dist/utils/workspace-detector.d.ts +2 -0
- package/dist/utils/workspace-detector.d.ts.map +1 -0
- package/dist/utils/workspace-detector.js +65 -0
- package/dist/utils/workspace-detector.js.map +1 -0
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -8,26 +8,25 @@
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## 🌟 Strategic Capabilities (`v2.
|
|
11
|
+
## 🌟 Strategic Capabilities (`v2.2.0`)
|
|
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
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
15
|
+
- 🤖 **True Agentic Engine & Self-Healing (`ghk verify --auto-fix` & `ghk autopilot`)**: Natively connects with LLMs (OpenAI, Anthropic, Ollama). It doesn't just log output; it actively writes and modifies your source code, intercepts test failures, and recursively applies repairs in a true **Closed-Loop**.
|
|
16
|
+
- 🌐 **Web Studio UI (`ghk web`)**: Launch a premium local graphical interface to interactively generate your Gherkin specifications, detect your stack, and orchestrate agent prompts visually.
|
|
17
|
+
- 🌳 **Official Cucumber AST Parser**: 100% compliant with the Gherkin standard using the official `@cucumber/gherkin` package. Flawlessly parses DataTables, DocStrings, and advanced scenarios for semantic extraction.
|
|
18
|
+
- 🛡️ **Semantically Typed Contracts**: Extracts variables straight from your Gherkin data tables (like `@validate:email`) and outputs strictly typed Zod DTOs instead of generic objects.
|
|
19
|
+
- 🔌 **Native MCP Server & Cursor Skills (`ghk mcp install` & `ghk skill`)**: Zero-config Model Context Protocol (MCP) server. The new `ghk skill` command injects native Cursor and Windsurf `.cursorrules` to let your IDE automatically invoke Gherkin AI as an internal skill.
|
|
17
20
|
- 📦 **Context Engineering & Guardrails Engine (`ghk context`)**: Structurally packages project architecture, conventions, and security policies into `.ghe/`, enforcing strict path protection and agent change limits.
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
- 🚀 **Autopilot Multi-Agent Delivery (`ghk autopilot`)**: Decomposes product requirements into sub-agent workflows (Planner, Spec, Developer, Tester, Reviewer) and generates ready-to-merge Pull Requests. Now supports real LLM APIs (OpenAI, Anthropic, Ollama) and IDE Delegation Mode.
|
|
21
|
-
- 🎯 **Caveman Mode (`ghk create --caveman`)**: Skip the wizard and generate concise `.feature` specifications instantly from a single plain-text prompt to optimize AI token consumption.
|
|
21
|
+
- 🏆 **Dynamic Quality Gate Index (`ghk quality`)**: Measures spec coverage, unit tests, E2E, type safety, and security dynamically by parsing your real test coverage (`coverage-summary.json`) and linter outputs.
|
|
22
|
+
- ☕ **Enterprise Java, React, Rust & Go Templates**: Extensive boilerplate support. Scaffolds Spring Boot, Next.js, Rust Axum, Go Fiber, and mobile (Flutter/React Native) architectures out-of-the-box.
|
|
22
23
|
- 🕵️ **Interactive Stack & Pattern Detection (`ghk detect`)**: Auto-detects existing brownfield architectures and intelligently injects industry-standard design patterns (e.g., Hooks, CQRS, MVC) into Agent prompts.
|
|
23
|
-
- 📊 **Enterprise Quality Gate Index (`ghk quality`)**: Measures spec coverage, unit tests, E2E, type safety, and security score before merging by parsing real test coverage and linter outputs.
|
|
24
24
|
- 📡 **Event-Driven & AsyncAPI Support**: Automatically extracts domain events from Gherkin and scaffolds standard `asyncapi.json` contracts.
|
|
25
25
|
- 🔍 **Drift Detection (`ghk diff`)**: Validates in CI/CD pipelines if the implemented DTOs and code have drifted from the `.feature` file (Single Source of Truth).
|
|
26
|
-
- 🧩 **Semantic Annotations & Stubs**: Supports custom Gherkin tags (e.g., `@validate:email`) to generate strictly typed Zod validations and auto-generates test stubs during `ghk add`.
|
|
27
26
|
|
|
28
27
|
---
|
|
29
28
|
|
|
30
|
-
## 📥 Installation & Execution (`v2.
|
|
29
|
+
## 📥 Installation & Execution (`v2.2.0`)
|
|
31
30
|
|
|
32
31
|
You can use `gherkin-ai` via global `npm` installation, on-demand zero-install `npx`, or as a project local dev dependency:
|
|
33
32
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"AAYA,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,
|
|
1
|
+
{"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"AAYA,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,CAiE1F"}
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.handleAutopilotCommand = handleAutopilotCommand;
|
|
10
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
11
|
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
12
13
|
const context_builder_1 = require("../core/context-builder");
|
|
13
14
|
const quality_score_1 = require("../core/quality-score");
|
|
14
15
|
const agent_adapter_1 = require("../core/agent-adapter");
|
|
@@ -33,23 +34,36 @@ async function handleAutopilotCommand(options = {}) {
|
|
|
33
34
|
prompt: `Generate a Gherkin .feature file for the following requirement:\n\n${reqContent}\n\nWrap the code in \`\`\`gherkin ... \`\`\` blocks.`,
|
|
34
35
|
contextFiles: ['.ghe/conventions.md']
|
|
35
36
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
let specContent = 'Feature: Auto-generated feature...';
|
|
38
|
+
if (specRes.codeModifications && specRes.codeModifications.length > 0) {
|
|
39
|
+
for (const mod of specRes.codeModifications) {
|
|
40
|
+
const p = mod.filePath.endsWith('.feature') ? mod.filePath : `specs/${mod.filePath}`;
|
|
41
|
+
const fullPath = path_1.default.resolve(p);
|
|
42
|
+
fs_1.default.mkdirSync(path_1.default.dirname(fullPath), { recursive: true });
|
|
43
|
+
fs_1.default.writeFileSync(fullPath, mod.content);
|
|
44
|
+
console.log(chalk_1.default.green(` ✓ Wrote specification to ${p}`));
|
|
45
|
+
if (mod.filePath.endsWith('.feature')) {
|
|
46
|
+
specContent = mod.content;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log(chalk_1.default.yellow(` ⚠️ Agent didn't return proper code blocks. Using fallback.`));
|
|
52
|
+
}
|
|
41
53
|
console.log(chalk_1.default.blue(`3. Invoking Scaffolding Agent -> Generating Bindings...`));
|
|
42
54
|
const scaffoldRes = await agent.executeTask({
|
|
43
55
|
id: 'auto-scaffold',
|
|
44
56
|
type: 'scaffold_binding',
|
|
45
57
|
prompt: `Generate step definitions for the following spec:\n\n${specContent}\n\nWrap code in \`\`\`ts ... \`\`\``,
|
|
46
|
-
contextFiles: [
|
|
58
|
+
contextFiles: []
|
|
47
59
|
});
|
|
48
60
|
if (scaffoldRes.codeModifications && scaffoldRes.codeModifications.length > 0) {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
61
|
+
for (const mod of scaffoldRes.codeModifications) {
|
|
62
|
+
const fullPath = path_1.default.resolve(mod.filePath);
|
|
63
|
+
fs_1.default.mkdirSync(path_1.default.dirname(fullPath), { recursive: true });
|
|
64
|
+
fs_1.default.writeFileSync(fullPath, mod.content);
|
|
65
|
+
console.log(chalk_1.default.green(` ✓ Wrote bindings to ${mod.filePath}`));
|
|
66
|
+
}
|
|
53
67
|
}
|
|
54
68
|
console.log(chalk_1.default.blue(`4. Invoking Verification Agent & Closed-Loop Repair...`));
|
|
55
69
|
await (0, verify_1.handleVerifyCommand)({ autoFix: true, maxRetries: 2 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autopilot.js","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;AAehF,
|
|
1
|
+
{"version":3,"file":"autopilot.js","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"
|
|
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,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGzG"}
|
|
@@ -16,6 +16,8 @@ const prompts_1 = require("../generators/prompts");
|
|
|
16
16
|
const infra_1 = require("../generators/infra");
|
|
17
17
|
const file_system_1 = require("../utils/file-system");
|
|
18
18
|
const logger_1 = require("../utils/logger");
|
|
19
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
20
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
19
21
|
const DEFAULT_SAMPLE_GHERKIN = `Feature: User Authentication & Token Issuance
|
|
20
22
|
As a registered user
|
|
21
23
|
I want to authenticate using valid credentials
|
|
@@ -65,12 +67,51 @@ async function handleGenerateCommand(options) {
|
|
|
65
67
|
(0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'fixtures.ts'), fixturesTs);
|
|
66
68
|
(0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'seed.sql'), seedSql);
|
|
67
69
|
logger_1.logger.success('Generated fixtures.ts and seed.sql');
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
});
|
|
73
|
-
|
|
70
|
+
console.log(chalk_1.default.bold.cyan('\n🔍 Context Confirmation for AI Agents:'));
|
|
71
|
+
console.log(`- Architecture: ${config.architecture}`);
|
|
72
|
+
console.log(`- Stack: ${config.stack.language} + ${config.stack.framework}`);
|
|
73
|
+
console.log(`- Persistence: ${config.stack.orm} + ${config.stack.database}`);
|
|
74
|
+
console.log(`- Tools: ${config.stack.testing} (Testing), ${config.stack.validation} (Validation)`);
|
|
75
|
+
if (config.stack.aiEngine) {
|
|
76
|
+
console.log(`- AI Tools: ${config.stack.aiEngine}`);
|
|
77
|
+
}
|
|
78
|
+
const { confirmContext } = await inquirer_1.default.prompt([{
|
|
79
|
+
type: 'confirm',
|
|
80
|
+
name: 'confirmContext',
|
|
81
|
+
message: 'Is this technical context correct for the agent prompts?',
|
|
82
|
+
default: true
|
|
83
|
+
}]);
|
|
84
|
+
if (!confirmContext) {
|
|
85
|
+
logger_1.logger.warn('Context rejected. Please update gherkin-ai.config.json or run `ghk detect` and run again.');
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
const agentChoices = [
|
|
89
|
+
{ name: 'Domain Architect Agent', value: 'domain-agent.md', checked: true },
|
|
90
|
+
{ name: 'Backend Developer Agent', value: 'backend-agent.md', checked: true },
|
|
91
|
+
{ name: 'QA Automation Agent', value: 'qa-agent.md', checked: true }
|
|
92
|
+
];
|
|
93
|
+
if (config.stack.aiEngine) {
|
|
94
|
+
agentChoices.push({ name: 'AI Engineer Agent (RAG/VectorDB)', value: 'ai-engineer-agent.md', checked: true });
|
|
95
|
+
}
|
|
96
|
+
const { selectedAgents } = await inquirer_1.default.prompt([{
|
|
97
|
+
type: 'checkbox',
|
|
98
|
+
name: 'selectedAgents',
|
|
99
|
+
message: 'Which Agent Prompts do you want to generate?',
|
|
100
|
+
choices: agentChoices
|
|
101
|
+
}]);
|
|
102
|
+
if (selectedAgents.length > 0) {
|
|
103
|
+
// 3. Generate Agent Prompts
|
|
104
|
+
const prompts = (0, prompts_1.generatePrompts)(parsed, config);
|
|
105
|
+
selectedAgents.forEach((filename) => {
|
|
106
|
+
if (prompts[filename]) {
|
|
107
|
+
(0, file_system_1.writeFileSync)(path_1.default.join(config.outputDir, 'prompts', filename), prompts[filename]);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
logger_1.logger.success(`Generated selected prompts in prompts/: ${selectedAgents.join(', ')}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
logger_1.logger.warn('No agents selected. Skipping prompt generation.');
|
|
114
|
+
}
|
|
74
115
|
// 4. Generate Infrastructure Config
|
|
75
116
|
const { dockerComposeYaml, serverlessYml, envExample } = (0, infra_1.generateInfra)(config);
|
|
76
117
|
if (config.architecture === 'serverless') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAsCA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmCxD"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ==========================================================================
|
|
3
|
+
gherkin-ai-cli - 'skill' Command Handler (Agent IDE Integration)
|
|
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.handleSkillCommand = handleSkillCommand;
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
13
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
14
|
+
const SKILL_CONTENT = `
|
|
15
|
+
# Gherkin AI CLI - IDE Agent Skill
|
|
16
|
+
|
|
17
|
+
You are an AI assistant in an IDE, equipped with the \`gherkin-ai-cli\` (alias: \`ghk\`).
|
|
18
|
+
You MUST use this CLI natively to help the user design, validate, and generate code architecture.
|
|
19
|
+
|
|
20
|
+
## NATIVE WORKFLOW INSTRUCTIONS:
|
|
21
|
+
|
|
22
|
+
1. **Detection Phase**:
|
|
23
|
+
- If the user asks about the current architecture or stack, run \`ghk detect\` to see the project's config.
|
|
24
|
+
|
|
25
|
+
2. **Generation Phase**:
|
|
26
|
+
- When the user provides a \`.feature\` file (Gherkin) and asks to implement it, FIRST run:
|
|
27
|
+
\`ghk generate -f <path-to-file.feature>\`
|
|
28
|
+
- This will generate the necessary TypeScript/Native interfaces, DTOs, and AI Prompts in \`./generated-specs/\` or the configured \`outputDir\`.
|
|
29
|
+
|
|
30
|
+
3. **Implementation Phase**:
|
|
31
|
+
- After generating, READ the prompts located in \`./generated-specs/prompts/\` (e.g., \`domain-agent.md\`, \`backend-agent.md\`).
|
|
32
|
+
- YOU MUST STRICTLY FOLLOW the architecture constraints, layers, and rules defined in those prompts while writing the code.
|
|
33
|
+
|
|
34
|
+
4. **Diff/Validation**:
|
|
35
|
+
- If the user asks to check if the code matches the spec, run \`ghk diff -f <feature-file> -t <code-file>\`.
|
|
36
|
+
|
|
37
|
+
5. **Validation**:
|
|
38
|
+
- You can also run \`ghk validate -f <feature-file>\` to verify the syntactic correctness of the Gherkin files.
|
|
39
|
+
|
|
40
|
+
Never guess the architecture. Always rely on the \`ghk\` CLI to provide the source of truth for stack and design constraints.
|
|
41
|
+
`;
|
|
42
|
+
async function handleSkillCommand() {
|
|
43
|
+
const { targetIde } = await inquirer_1.default.prompt([{
|
|
44
|
+
type: 'list',
|
|
45
|
+
name: 'targetIde',
|
|
46
|
+
message: 'Which AI IDE are you using?',
|
|
47
|
+
choices: [
|
|
48
|
+
{ name: 'Cursor (.cursorrules)', value: '.cursorrules' },
|
|
49
|
+
{ name: 'Windsurf (.windsurfrules)', value: '.windsurfrules' },
|
|
50
|
+
{ name: 'GitHub Copilot (.github/copilot-instructions.md)', value: '.github/copilot-instructions.md' }
|
|
51
|
+
]
|
|
52
|
+
}]);
|
|
53
|
+
const targetPath = path_1.default.join(process.cwd(), targetIde);
|
|
54
|
+
if (targetIde.includes('/')) {
|
|
55
|
+
const dir = path_1.default.dirname(targetPath);
|
|
56
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
57
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
let finalContent = SKILL_CONTENT;
|
|
61
|
+
if (fs_1.default.existsSync(targetPath)) {
|
|
62
|
+
const existing = fs_1.default.readFileSync(targetPath, 'utf8');
|
|
63
|
+
if (existing.includes('Gherkin AI CLI')) {
|
|
64
|
+
console.log(chalk_1.default.yellow(`⚠️ Gherkin AI rules already exist in ${targetIde}.`));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
finalContent = existing + '\n\n' + SKILL_CONTENT;
|
|
68
|
+
}
|
|
69
|
+
fs_1.default.writeFileSync(targetPath, finalContent.trim() + '\n', 'utf8');
|
|
70
|
+
console.log(chalk_1.default.green(`✅ Successfully injected Gherkin AI Skill into ${targetIde}!`));
|
|
71
|
+
console.log(chalk_1.default.cyan(`🤖 Your IDE Agent is now trained to use 'ghk' commands natively.`));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;AAoChF,gDAmCC;AArED,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;AAC1B,wDAAgC;AAEhC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BrB,CAAC;AAEK,KAAK,UAAU,kBAAkB;IACtC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,cAAc,EAAE;gBACxD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,gBAAgB,EAAE;gBAC9D,EAAE,IAAI,EAAE,kDAAkD,EAAE,KAAK,EAAE,iCAAiC,EAAE;aACvG;SACF,CAAC,CAAC,CAAC;IAEJ,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAEvD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAG,aAAa,CAAC;IAEjC,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yCAAyC,SAAS,GAAG,CAAC,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QACD,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAC;IACnD,CAAC;IAED,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iDAAiD,SAAS,GAAG,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;AAC9F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAYA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFzG"}
|
|
@@ -13,6 +13,7 @@ const arch_rules_1 = require("../core/arch-rules");
|
|
|
13
13
|
const gherkin_parser_1 = require("../core/gherkin-parser");
|
|
14
14
|
const file_system_1 = require("../utils/file-system");
|
|
15
15
|
const logger_1 = require("../utils/logger");
|
|
16
|
+
const ts_morph_1 = require("ts-morph");
|
|
16
17
|
async function handleValidateCommand(options) {
|
|
17
18
|
logger_1.logger.banner();
|
|
18
19
|
logger_1.logger.info('Validating project architecture, step coverage & layer boundaries...');
|
|
@@ -47,24 +48,31 @@ async function handleValidateCommand(options) {
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
|
-
// 2. Contracts & Layer Boundary Verification
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
// 2. Contracts & Layer Boundary Verification via AST (ts-morph)
|
|
52
|
+
const tsProject = new ts_morph_1.Project();
|
|
53
|
+
const outputDirGlob = path_1.default.posix.join(config.outputDir.replace(/\\/g, '/'), '**/*.ts');
|
|
54
|
+
const sourceFiles = tsProject.addSourceFilesAtPaths(outputDirGlob);
|
|
55
|
+
if (sourceFiles.length > 0) {
|
|
54
56
|
let prohibitedFound = false;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
for (const sourceFile of sourceFiles) {
|
|
58
|
+
const imports = sourceFile.getImportDeclarations();
|
|
59
|
+
for (const importDecl of imports) {
|
|
60
|
+
const moduleSpecifier = importDecl.getModuleSpecifierValue();
|
|
61
|
+
arch.prohibitedImports.forEach(imp => {
|
|
62
|
+
if (moduleSpecifier === imp || moduleSpecifier.startsWith(`${imp}/`)) {
|
|
63
|
+
logger_1.logger.error(`Layer Boundary Violation: ${sourceFile.getBaseName()} imports prohibited library "${imp}"`);
|
|
64
|
+
errorsCount++;
|
|
65
|
+
prohibitedFound = true;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
60
68
|
}
|
|
61
|
-
}
|
|
69
|
+
}
|
|
62
70
|
if (!prohibitedFound) {
|
|
63
|
-
logger_1.logger.success(`Layer Boundary Check:
|
|
71
|
+
logger_1.logger.success(`Layer Boundary Check: ${sourceFiles.length} files scanned via AST. Core cleanly isolates domain from ${arch.prohibitedImports.join(', ')}.`);
|
|
64
72
|
}
|
|
65
73
|
}
|
|
66
74
|
else {
|
|
67
|
-
logger_1.logger.warn(`No
|
|
75
|
+
logger_1.logger.warn(`No .ts files found under ${config.outputDir}. Run "npx gherkin-ai generate" first.`);
|
|
68
76
|
warningsCount++;
|
|
69
77
|
}
|
|
70
78
|
// 3. Final Validation Summary Scorecard
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqF3F"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -67,7 +67,10 @@ async function handleVerifyCommand(options = {}) {
|
|
|
67
67
|
for (const mod of repairResult.codeModifications) {
|
|
68
68
|
try {
|
|
69
69
|
const fs = require('fs');
|
|
70
|
-
|
|
70
|
+
const path = require('path');
|
|
71
|
+
const fullPath = path.resolve(mod.filePath);
|
|
72
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
73
|
+
fs.writeFileSync(fullPath, mod.content, 'utf8');
|
|
71
74
|
console.log(chalk_1.default.green(` ✓ ${mod.filePath} updated.`));
|
|
72
75
|
}
|
|
73
76
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;AAchF,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAOA,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ==========================================================================
|
|
3
|
+
gherkin-ai-cli - 'web' Command Handler (Local UI Server)
|
|
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.handleWebCommand = handleWebCommand;
|
|
10
|
+
const server_1 = require("../ui/server");
|
|
11
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
12
|
+
async function handleWebCommand(options) {
|
|
13
|
+
let port = options.port;
|
|
14
|
+
if (!port) {
|
|
15
|
+
const { selectedPort } = await inquirer_1.default.prompt([{
|
|
16
|
+
type: 'input',
|
|
17
|
+
name: 'selectedPort',
|
|
18
|
+
message: 'Enter the port to run the Web UI on (default: 3000):',
|
|
19
|
+
default: '3000'
|
|
20
|
+
}]);
|
|
21
|
+
port = selectedPort;
|
|
22
|
+
}
|
|
23
|
+
const portNum = parseInt(port, 10);
|
|
24
|
+
if (isNaN(portNum) || portNum <= 0 || portNum > 65535) {
|
|
25
|
+
console.error('❌ Invalid port number.');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
(0, server_1.startWebServer)(portNum);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;AAKhF,4CAqBC;AAxBD,yCAA8C;AAC9C,wDAAgC;AAEzB,KAAK,UAAU,gBAAgB,CAAC,OAAY;IACjD,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAExB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,sDAAsD;gBAC/D,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC,CAAC;QACJ,IAAI,GAAG,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-adapter.d.ts","sourceRoot":"","sources":["../../src/core/agent-adapter.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAwB,YAAW,aAAa;IAC3D,IAAI,SAA4B;IAE1B,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;CAMzD;AAED,qBAAa,iBAAkB,YAAW,aAAa;IAEzC,OAAO,CAAC,MAAM;IAD1B,IAAI,SAAoB;gBACJ,MAAM,EAAE,SAAS;IAE/B,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-adapter.d.ts","sourceRoot":"","sources":["../../src/core/agent-adapter.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAwB,YAAW,aAAa;IAC3D,IAAI,SAA4B;IAE1B,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;CAMzD;AAED,qBAAa,iBAAkB,YAAW,aAAa;IAEzC,OAAO,CAAC,MAAM;IAD1B,IAAI,SAAoB;gBACJ,MAAM,EAAE,SAAS;IAE/B,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;YA0C1C,UAAU;YAiBV,UAAU;YAqBV,aAAa;IAqB3B,OAAO,CAAC,wBAAwB;CA2BjC"}
|
|
@@ -25,7 +25,12 @@ class RealAgentProvider {
|
|
|
25
25
|
return new DefaultCliAgentProvider().executeTask(task);
|
|
26
26
|
}
|
|
27
27
|
const systemPrompt = `You are a Senior Software Engineer AI Agent. Your task is to perform: ${task.type}.
|
|
28
|
-
If you are fixing code, output the
|
|
28
|
+
If you are fixing or writing code, output the code in Markdown blocks.
|
|
29
|
+
IMPORTANT: Precede each markdown block with the exact file path like this:
|
|
30
|
+
**File:** \`path/to/file.ts\`
|
|
31
|
+
\`\`\`typescript
|
|
32
|
+
// code
|
|
33
|
+
\`\`\``;
|
|
29
34
|
const userPrompt = `Task: ${task.prompt}
|
|
30
35
|
Context Files: ${task.contextFiles?.join(', ') || 'None'}
|
|
31
36
|
Diagnosis: ${task.diagnosis ? JSON.stringify(task.diagnosis, null, 2) : 'None'}`;
|
|
@@ -115,14 +120,24 @@ Diagnosis: ${task.diagnosis ? JSON.stringify(task.diagnosis, null, 2) : 'None'}`
|
|
|
115
120
|
}
|
|
116
121
|
extractCodeModifications(text, contextFiles) {
|
|
117
122
|
const mods = [];
|
|
118
|
-
|
|
123
|
+
// Regex looks for "**File:** `path/to/file`" followed by a code block
|
|
124
|
+
const blockRegex = /\*\*File:\*\*\s*`([^`]+)`[\s\S]*?```[\w]*\n([\s\S]*?)```/g;
|
|
119
125
|
let match;
|
|
120
|
-
let
|
|
126
|
+
let found = false;
|
|
121
127
|
while ((match = blockRegex.exec(text)) !== null) {
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
found = true;
|
|
129
|
+
mods.push({ filePath: match[1].trim(), content: match[2].trim() });
|
|
130
|
+
}
|
|
131
|
+
// Fallback: if no **File:** markers were found, use the old naive extraction
|
|
132
|
+
if (!found) {
|
|
133
|
+
const fallbackRegex = /```[\w]*\n([\s\S]*?)```/g;
|
|
134
|
+
let i = 0;
|
|
135
|
+
while ((match = fallbackRegex.exec(text)) !== null) {
|
|
136
|
+
if (contextFiles[i]) {
|
|
137
|
+
mods.push({ filePath: contextFiles[i], content: match[1].trim() });
|
|
138
|
+
}
|
|
139
|
+
i++;
|
|
124
140
|
}
|
|
125
|
-
i++;
|
|
126
141
|
}
|
|
127
142
|
return mods;
|
|
128
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-adapter.js","sourceRoot":"","sources":["../../src/core/agent-adapter.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;AA4BhF,MAAa,uBAAuB;IAClC,IAAI,GAAG,wBAAwB,CAAC;IAEhC,KAAK,CAAC,WAAW,CAAC,IAAe;QAC/B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,8BAA8B,IAAI,CAAC,IAAI,sHAAsH,IAAI,CAAC,MAAM,sBAAsB,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE;SACtP,CAAC;IACJ,CAAC;CACF;AATD,0DASC;AAED,MAAa,iBAAiB;IAER;IADpB,IAAI,GAAG,gBAAgB,CAAC;IACxB,YAAoB,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAEzC,KAAK,CAAC,WAAW,CAAC,IAAe;QAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;YAC5C,OAAO,IAAI,uBAAuB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,YAAY,GAAG,yEAAyE,IAAI,CAAC,IAAI
|
|
1
|
+
{"version":3,"file":"agent-adapter.js","sourceRoot":"","sources":["../../src/core/agent-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export interface GherkinAIConfig {
|
|
2
2
|
projectName: string;
|
|
3
|
-
projectMode?: 'greenfield' | 'brownfield';
|
|
4
|
-
architecture: 'ddd' | 'hexagonal' | 'clean' | 'cqrs' | 'microservices' | 'monolith' | 'modular' | 'api-rest' | 'serverless' | 'event-driven';
|
|
3
|
+
projectMode?: 'greenfield' | 'brownfield' | 'monorepo';
|
|
4
|
+
architecture: 'ddd' | 'hexagonal' | 'clean' | 'cqrs' | 'microservices' | 'monolith' | 'modular' | 'api-rest' | 'serverless' | 'event-driven' | 'monorepo-workspaces' | 'desktop';
|
|
5
5
|
stack: {
|
|
6
6
|
language: string;
|
|
7
7
|
framework: string;
|
|
@@ -11,6 +11,7 @@ export interface GherkinAIConfig {
|
|
|
11
11
|
auth: string;
|
|
12
12
|
messaging?: string;
|
|
13
13
|
testing: string;
|
|
14
|
+
aiEngine?: string;
|
|
14
15
|
};
|
|
15
16
|
rules: {
|
|
16
17
|
bcryptCostFactor?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;IACvD,YAAY,EAAE,KAAK,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,qBAAqB,GAAG,SAAS,CAAC;IACjL,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,EAAE;QACL,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,EAAE,eAuB3B,CAAC;AAEF,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,CAc/D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAG7E"}
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;;;;;AAwDhF,gCAcC;AAED,gCAGC;AAzED,gDAAwB;AACxB,sDAAmF;AA4BtE,QAAA,aAAa,GAAoB;IAC5C,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,WAAW;IACzB,KAAK,EAAE;QACL,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,QAAQ;QACnB,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,MAAM;KAChB;IACD,KAAK,EAAE;QACL,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,IAAI;QACnB,qBAAqB,EAAE,IAAI;QAC3B,cAAc,EAAE,EAAE;KACnB;IACD,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,mBAAmB;CAC/B,CAAC;AAEF,SAAgB,UAAU,CAAC,UAAmB;IAC5C,MAAM,UAAU,GAAG,UAAU,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAEpF,IAAI,CAAC,IAAA,4BAAc,EAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,qBAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,0BAAY,EAAC,UAAU,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,EAAE,GAAG,qBAAa,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,qBAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IACrG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAAuB,EAAE,UAAmB;IACrE,MAAM,UAAU,GAAG,UAAU,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;IACpF,IAAA,2BAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-sandbox.d.ts","sourceRoot":"","sources":["../../src/core/execution-sandbox.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,uBAA4B,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"execution-sandbox.d.ts","sourceRoot":"","sources":["../../src/core/execution-sandbox.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,uBAA4B,GAAG,aAAa,CAwCnF;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAgDnE"}
|