forgecraft-mcp 1.0.0 → 1.0.2
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 +95 -49
- package/dist/analyzers/anti-pattern.d.ts.map +1 -1
- package/dist/analyzers/anti-pattern.js +28 -0
- package/dist/analyzers/anti-pattern.js.map +1 -1
- package/dist/cli/assistant-detector.d.ts +28 -0
- package/dist/cli/assistant-detector.d.ts.map +1 -0
- package/dist/cli/assistant-detector.js +107 -0
- package/dist/cli/assistant-detector.js.map +1 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +18 -3
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/help.js +44 -44
- package/dist/http-server-contribute.d.ts +21 -0
- package/dist/http-server-contribute.d.ts.map +1 -0
- package/dist/http-server-contribute.js +168 -0
- package/dist/http-server-contribute.js.map +1 -0
- package/dist/http-server.d.ts +16 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +200 -0
- package/dist/http-server.js.map +1 -0
- package/dist/registry/remote-gates.js +10 -4
- package/dist/registry/remote-gates.js.map +1 -1
- package/dist/tools/check-cascade-report.js +64 -64
- package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch.js +1 -0
- package/dist/tools/forgecraft-dispatch.js.map +1 -1
- package/dist/tools/forgecraft-schema.d.ts +2 -2
- package/dist/tools/scaffold-spec-stubs.js +24 -24
- package/dist/tools/scaffold-templates.d.ts +1 -1
- package/dist/tools/scaffold-templates.d.ts.map +1 -1
- package/dist/tools/scaffold-templates.js +73 -64
- package/dist/tools/scaffold-templates.js.map +1 -1
- package/dist/tools/setup-phase2.d.ts +1 -0
- package/dist/tools/setup-phase2.d.ts.map +1 -1
- package/dist/tools/setup-phase2.js +24 -6
- package/dist/tools/setup-phase2.js.map +1 -1
- package/dist/tools/setup-project.d.ts +6 -0
- package/dist/tools/setup-project.d.ts.map +1 -1
- package/dist/tools/setup-project.js +25 -8
- package/dist/tools/setup-project.js.map +1 -1
- package/dist/tools/spec-parser-inference.d.ts +10 -0
- package/dist/tools/spec-parser-inference.d.ts.map +1 -1
- package/dist/tools/spec-parser-inference.js +134 -31
- package/dist/tools/spec-parser-inference.js.map +1 -1
- package/package.json +7 -2
|
@@ -32,70 +32,70 @@ export function writeInitialSessionPromptIfAbsent(projectDir) {
|
|
|
32
32
|
.filter(Boolean)
|
|
33
33
|
.join("\n");
|
|
34
34
|
const tagLine = tags.length > 0 ? `\nProject tags: ${tags.join(", ")}\n` : "";
|
|
35
|
-
const content = `# Initial Implementation Session Prompt
|
|
36
|
-
> Generated by ForgeCraft \`check_cascade\` on cascade completion.
|
|
37
|
-
> Delete this file after the first implementation session begins — it is a one-time bootstrap.
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Context Load Order
|
|
42
|
-
|
|
43
|
-
Load these artifacts **before** issuing the implementation prompt:
|
|
44
|
-
|
|
45
|
-
${contextBlock || "- (No derived artifacts found — run setup_project first)"}
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Implementation Prompt
|
|
50
|
-
|
|
51
|
-
*(Paste everything below this line to the AI assistant)*
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
### Task
|
|
56
|
-
|
|
57
|
-
You are starting the first implementation session for **${projectName}**.
|
|
58
|
-
${tagLine}
|
|
59
|
-
Read the PRD and use-cases, then implement the first feature end-to-end following
|
|
60
|
-
the architectural constitution. Begin with the domain layer (entities + port interfaces),
|
|
61
|
-
then the service layer, then the API/CLI adapter. Apply TDD throughout — write the test
|
|
62
|
-
first, then the implementation. Do not proceed to the next layer until tests pass.
|
|
63
|
-
|
|
64
|
-
### Scope
|
|
65
|
-
|
|
66
|
-
- Implement the primary use case (UC-001) completely before touching UC-002 or UC-003.
|
|
67
|
-
- Infrastructure setup (DB, config, DI container) is in scope only as required by UC-001.
|
|
68
|
-
- Do not stub or mock domain logic — implement it fully.
|
|
69
|
-
|
|
70
|
-
### Execution Loop
|
|
71
|
-
|
|
72
|
-
1. Read docs/PRD.md → identify UC-001 domain entities and port interfaces
|
|
73
|
-
2. Write failing tests for the domain layer
|
|
74
|
-
3. Implement domain layer until tests pass
|
|
75
|
-
4. Write failing tests for the service layer
|
|
76
|
-
5. Implement service layer until tests pass
|
|
77
|
-
6. Write failing integration/API tests
|
|
78
|
-
7. Implement API/CLI adapter until tests pass
|
|
79
|
-
8. Run \`check_cascade\` and \`close_cycle\` before committing
|
|
80
|
-
|
|
81
|
-
### Acceptance Criteria
|
|
82
|
-
|
|
83
|
-
- [ ] UC-001 is fully implemented and tested (unit + integration)
|
|
84
|
-
- [ ] All tests pass with ≥80% coverage
|
|
85
|
-
- [ ] No circular imports (run layer check)
|
|
86
|
-
- [ ] SOLID principles applied — each class has a single reason to change
|
|
87
|
-
- [ ] \`close_cycle\` reports no blocking gate failures
|
|
88
|
-
|
|
89
|
-
### Session Close
|
|
90
|
-
|
|
91
|
-
Before ending this session:
|
|
92
|
-
1. Run the full test suite — paste the summary output
|
|
93
|
-
2. Update Status.md: what was completed, current state, next steps
|
|
94
|
-
3. If a non-obvious architectural decision was made: write an ADR in docs/adrs/
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
\`files_created\`: []
|
|
98
|
-
\`next_steps\`: ["Run check_cascade to verify cascade is still complete after this session"]
|
|
35
|
+
const content = `# Initial Implementation Session Prompt
|
|
36
|
+
> Generated by ForgeCraft \`check_cascade\` on cascade completion.
|
|
37
|
+
> Delete this file after the first implementation session begins — it is a one-time bootstrap.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Context Load Order
|
|
42
|
+
|
|
43
|
+
Load these artifacts **before** issuing the implementation prompt:
|
|
44
|
+
|
|
45
|
+
${contextBlock || "- (No derived artifacts found — run setup_project first)"}
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Implementation Prompt
|
|
50
|
+
|
|
51
|
+
*(Paste everything below this line to the AI assistant)*
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### Task
|
|
56
|
+
|
|
57
|
+
You are starting the first implementation session for **${projectName}**.
|
|
58
|
+
${tagLine}
|
|
59
|
+
Read the PRD and use-cases, then implement the first feature end-to-end following
|
|
60
|
+
the architectural constitution. Begin with the domain layer (entities + port interfaces),
|
|
61
|
+
then the service layer, then the API/CLI adapter. Apply TDD throughout — write the test
|
|
62
|
+
first, then the implementation. Do not proceed to the next layer until tests pass.
|
|
63
|
+
|
|
64
|
+
### Scope
|
|
65
|
+
|
|
66
|
+
- Implement the primary use case (UC-001) completely before touching UC-002 or UC-003.
|
|
67
|
+
- Infrastructure setup (DB, config, DI container) is in scope only as required by UC-001.
|
|
68
|
+
- Do not stub or mock domain logic — implement it fully.
|
|
69
|
+
|
|
70
|
+
### Execution Loop
|
|
71
|
+
|
|
72
|
+
1. Read docs/PRD.md → identify UC-001 domain entities and port interfaces
|
|
73
|
+
2. Write failing tests for the domain layer
|
|
74
|
+
3. Implement domain layer until tests pass
|
|
75
|
+
4. Write failing tests for the service layer
|
|
76
|
+
5. Implement service layer until tests pass
|
|
77
|
+
6. Write failing integration/API tests
|
|
78
|
+
7. Implement API/CLI adapter until tests pass
|
|
79
|
+
8. Run \`check_cascade\` and \`close_cycle\` before committing
|
|
80
|
+
|
|
81
|
+
### Acceptance Criteria
|
|
82
|
+
|
|
83
|
+
- [ ] UC-001 is fully implemented and tested (unit + integration)
|
|
84
|
+
- [ ] All tests pass with ≥80% coverage
|
|
85
|
+
- [ ] No circular imports (run layer check)
|
|
86
|
+
- [ ] SOLID principles applied — each class has a single reason to change
|
|
87
|
+
- [ ] \`close_cycle\` reports no blocking gate failures
|
|
88
|
+
|
|
89
|
+
### Session Close
|
|
90
|
+
|
|
91
|
+
Before ending this session:
|
|
92
|
+
1. Run the full test suite — paste the summary output
|
|
93
|
+
2. Update Status.md: what was completed, current state, next steps
|
|
94
|
+
3. If a non-obvious architectural decision was made: write an ADR in docs/adrs/
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
\`files_created\`: []
|
|
98
|
+
\`next_steps\`: ["Run check_cascade to verify cascade is still complete after this session"]
|
|
99
99
|
`;
|
|
100
100
|
mkdirSync(join(projectDir, "docs"), { recursive: true });
|
|
101
101
|
writeFileSync(outputPath, content, "utf-8");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgecraft-dispatch.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAwB1D,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,wBAAwB,CAAC;AAQrE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"forgecraft-dispatch.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAwB1D,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,wBAAwB,CAAC;AAQrE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CAuOrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgecraft-dispatch.js","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EACL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAoB;IAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;IAErC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,eAAe;YAClB,OAAO,mBAAmB,CAAC;gBACzB,WAAW,EAAE,YAAY,CACvB,IAAI,CAAC,WAAW,EAChB,aAAa,EACb,eAAe,CAChB;gBACD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"forgecraft-dispatch.js","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,6 +124,7 @@ export declare const forgecraftSchema: z.ZodObject<{
|
|
|
124
124
|
include_mutation?: boolean | undefined;
|
|
125
125
|
coverage_dir?: string | undefined;
|
|
126
126
|
merge?: boolean | undefined;
|
|
127
|
+
resource?: string | undefined;
|
|
127
128
|
item_description?: string | undefined;
|
|
128
129
|
acceptance_criteria?: string[] | undefined;
|
|
129
130
|
scope_note?: string | undefined;
|
|
@@ -155,7 +156,6 @@ export declare const forgecraftSchema: z.ZodObject<{
|
|
|
155
156
|
cnt_content?: string | undefined;
|
|
156
157
|
deployment_url?: string | undefined;
|
|
157
158
|
skip_load_test?: boolean | undefined;
|
|
158
|
-
resource?: string | undefined;
|
|
159
159
|
}, {
|
|
160
160
|
action: string;
|
|
161
161
|
tag?: string | undefined;
|
|
@@ -194,6 +194,7 @@ export declare const forgecraftSchema: z.ZodObject<{
|
|
|
194
194
|
include_mutation?: boolean | undefined;
|
|
195
195
|
coverage_dir?: string | undefined;
|
|
196
196
|
merge?: boolean | undefined;
|
|
197
|
+
resource?: string | undefined;
|
|
197
198
|
item_description?: string | undefined;
|
|
198
199
|
acceptance_criteria?: string[] | undefined;
|
|
199
200
|
scope_note?: string | undefined;
|
|
@@ -225,7 +226,6 @@ export declare const forgecraftSchema: z.ZodObject<{
|
|
|
225
226
|
cnt_content?: string | undefined;
|
|
226
227
|
deployment_url?: string | undefined;
|
|
227
228
|
skip_load_test?: boolean | undefined;
|
|
228
|
-
resource?: string | undefined;
|
|
229
229
|
}>;
|
|
230
230
|
export type ForgecraftArgs = z.infer<typeof forgecraftSchema>;
|
|
231
231
|
//# sourceMappingURL=forgecraft-schema.d.ts.map
|
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
7
7
|
import { dirname } from "node:path";
|
|
8
|
-
export const USE_CASES_STUB = `<!-- UNFILLED: Use Cases -->
|
|
9
|
-
# Use Cases
|
|
10
|
-
|
|
11
|
-
## UC-01: [Name]
|
|
12
|
-
**Actor**: <!-- FILL: who? -->
|
|
13
|
-
**Precondition**: <!-- FILL: what must be true before? -->
|
|
14
|
-
**Steps**: <!-- FILL: numbered steps -->
|
|
15
|
-
**Success**: <!-- FILL: what changed? -->
|
|
16
|
-
|
|
17
|
-
## UC-02: [Name]
|
|
18
|
-
<!-- FILL -->
|
|
19
|
-
|
|
20
|
-
## UC-03: [Name]
|
|
21
|
-
<!-- FILL -->
|
|
8
|
+
export const USE_CASES_STUB = `<!-- UNFILLED: Use Cases -->
|
|
9
|
+
# Use Cases
|
|
10
|
+
|
|
11
|
+
## UC-01: [Name]
|
|
12
|
+
**Actor**: <!-- FILL: who? -->
|
|
13
|
+
**Precondition**: <!-- FILL: what must be true before? -->
|
|
14
|
+
**Steps**: <!-- FILL: numbered steps -->
|
|
15
|
+
**Success**: <!-- FILL: what changed? -->
|
|
16
|
+
|
|
17
|
+
## UC-02: [Name]
|
|
18
|
+
<!-- FILL -->
|
|
19
|
+
|
|
20
|
+
## UC-03: [Name]
|
|
21
|
+
<!-- FILL -->
|
|
22
22
|
`;
|
|
23
23
|
/**
|
|
24
24
|
* Build the UNFILLED stub content for docs/diagrams/c4-context.md.
|
|
@@ -27,16 +27,16 @@ export const USE_CASES_STUB = `<!-- UNFILLED: Use Cases -->
|
|
|
27
27
|
* @returns Stub content with UNFILLED markers
|
|
28
28
|
*/
|
|
29
29
|
export function buildC4ContextStub(projectName) {
|
|
30
|
-
return `<!-- UNFILLED: C4 Context Diagram -->
|
|
31
|
-
<!-- Run \`forgecraft generate_diagram\` to auto-generate from your spec -->
|
|
32
|
-
# System Context Diagram
|
|
33
|
-
\`\`\`mermaid
|
|
34
|
-
C4Context
|
|
35
|
-
title System Context: ${projectName}
|
|
36
|
-
Person(user, "User", "<!-- FILL: Who uses the system? -->")
|
|
37
|
-
System(system, "${projectName}", "<!-- FILL: What does the system do in one sentence? -->")
|
|
38
|
-
Rel(user, system, "<!-- FILL: Primary interaction -->")
|
|
39
|
-
\`\`\`
|
|
30
|
+
return `<!-- UNFILLED: C4 Context Diagram -->
|
|
31
|
+
<!-- Run \`forgecraft generate_diagram\` to auto-generate from your spec -->
|
|
32
|
+
# System Context Diagram
|
|
33
|
+
\`\`\`mermaid
|
|
34
|
+
C4Context
|
|
35
|
+
title System Context: ${projectName}
|
|
36
|
+
Person(user, "User", "<!-- FILL: Who uses the system? -->")
|
|
37
|
+
System(system, "${projectName}", "<!-- FILL: What does the system do in one sentence? -->")
|
|
38
|
+
Rel(user, system, "<!-- FILL: Primary interaction -->")
|
|
39
|
+
\`\`\`
|
|
40
40
|
`;
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import type { ProjectDeploymentConfig } from "../shared/types.js";
|
|
5
5
|
export declare const PROJECT_SPECIFIC_TEMPLATE = "# Project-Specific Rules\n<!-- This file is owned by YOU. ForgeCraft will never overwrite it. -->\n<!-- Add project-specific rules, framework choices, conventions, and corrections here. -->\n<!-- The sentinel CLAUDE.md links here so any AI reading your project can find it. -->\n\n## Framework & Stack Choices\n<!-- e.g. We use Prisma for ORM. Deploy target is Railway. Python 3.11+. -->\n\n## Custom Corrections Log\n<!-- Log AI corrections so the pattern isn't repeated. -->\n<!-- Format: - YYYY-MM-DD: [description of correction] -->\n\n## Project-Specific Gates\n<!-- Add quality rules specific to this project that don't belong in universal standards. -->\n";
|
|
6
6
|
export declare const EXCEPTIONS_TEMPLATE: string;
|
|
7
|
-
export declare const PROJECT_GATES_TEMPLATE = "version: \"1\"\n# Project-specific quality gates.\n# Gates you discover while working that should be enforced for this project.\n# Set generalizable: true + fill in evidence to contribute to the community registry.\n# See: https://github.com/
|
|
7
|
+
export declare const PROJECT_GATES_TEMPLATE = "version: \"1\"\n# Project-specific quality gates.\n# Gates you discover while working that should be enforced for this project.\n# Set generalizable: true + fill in evidence to contribute to the community registry.\n# See: https://github.com/jghiringhelli/quality-gates/issues/new?template=quality-gate-proposal.md\ngates: []\n";
|
|
8
8
|
export declare const SMOKE_TESTS_README = "# Smoke Tests\n\nGenerated by ForgeCraft scaffold. Fill in the critical paths from your tech spec.\n\n## What smoke tests cover\n- Every API entry point that serves real users\n- Every critical user journey end-to-end\n- Every DB migration (verify schema applied correctly)\n- Every external integration handshake\n\n## Format\nUse the tool configured in forgecraft.yaml deployment.testing.smokeTool (or default to HTTP assertions).\nAll smoke tests must complete in < 60 seconds total.\n\n## Running\nSee forgecraft.yaml tools.test or your project's test runner.\nResults are written to .forgecraft/reports/smoke-latest.json.\n\n## Required before deployment\nAll smoke tests must pass against staging before any production deploy.\nSee verification.yaml deployment-gates phase.\n";
|
|
9
9
|
export declare const LOAD_TESTS_README = "# Load Tests\n\nGenerated by ForgeCraft scaffold. Fill in the parameters from your tech spec.\n\n## Parameters (fill in from forgecraft.yaml deployment.testing.load)\n- Concurrent users: [TODO: concurrentUsers from forgecraft.yaml]\n- Target RPS: [TODO: targetRps from forgecraft.yaml]\n- p99 ceiling: [TODO: p99CeilingMs ms]\n- Duration: [TODO: durationSeconds seconds minimum]\n\n## When these parameters are missing\nDeploying without stated load test parameters is full deployment with manual monitoring.\nThe paper requires: parameters named in spec BEFORE the test runs, not after.\nAdd them to forgecraft.yaml deployment.testing.load before running.\n\n## Tool\nUse the tool configured in forgecraft.yaml deployment.testing.load.tool (k6, Artillery, Locust, etc.)\nResults are written to .forgecraft/reports/load-latest.json.\n\n## Required before pre-release\nSee verification.yaml pre-release-hardening phase, load-test step.\n";
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-templates.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold-templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,eAAO,MAAM,yBAAyB,2pBAcrC,CAAC;AAEF,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"scaffold-templates.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold-templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,eAAO,MAAM,yBAAyB,2pBAcrC,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAUtB,CAAC;AAEX,eAAO,MAAM,sBAAsB,4UAMlC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kxBAqB9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,66BAqB7B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA6B5D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,CAezE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,CAO3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAoB3C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,uBAAuB,GAClC,MAAM,CAQR;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,uBAAuB,GAClC,MAAM,CA8BR"}
|
|
@@ -1,76 +1,76 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* scaffold-templates: Static template strings and render functions for scaffold_project.
|
|
3
3
|
*/
|
|
4
|
-
export const PROJECT_SPECIFIC_TEMPLATE = `# Project-Specific Rules
|
|
5
|
-
<!-- This file is owned by YOU. ForgeCraft will never overwrite it. -->
|
|
6
|
-
<!-- Add project-specific rules, framework choices, conventions, and corrections here. -->
|
|
7
|
-
<!-- The sentinel CLAUDE.md links here so any AI reading your project can find it. -->
|
|
8
|
-
|
|
9
|
-
## Framework & Stack Choices
|
|
10
|
-
<!-- e.g. We use Prisma for ORM. Deploy target is Railway. Python 3.11+. -->
|
|
11
|
-
|
|
12
|
-
## Custom Corrections Log
|
|
13
|
-
<!-- Log AI corrections so the pattern isn't repeated. -->
|
|
14
|
-
<!-- Format: - YYYY-MM-DD: [description of correction] -->
|
|
15
|
-
|
|
16
|
-
## Project-Specific Gates
|
|
17
|
-
<!-- Add quality rules specific to this project that don't belong in universal standards. -->
|
|
4
|
+
export const PROJECT_SPECIFIC_TEMPLATE = `# Project-Specific Rules
|
|
5
|
+
<!-- This file is owned by YOU. ForgeCraft will never overwrite it. -->
|
|
6
|
+
<!-- Add project-specific rules, framework choices, conventions, and corrections here. -->
|
|
7
|
+
<!-- The sentinel CLAUDE.md links here so any AI reading your project can find it. -->
|
|
8
|
+
|
|
9
|
+
## Framework & Stack Choices
|
|
10
|
+
<!-- e.g. We use Prisma for ORM. Deploy target is Railway. Python 3.11+. -->
|
|
11
|
+
|
|
12
|
+
## Custom Corrections Log
|
|
13
|
+
<!-- Log AI corrections so the pattern isn't repeated. -->
|
|
14
|
+
<!-- Format: - YYYY-MM-DD: [description of correction] -->
|
|
15
|
+
|
|
16
|
+
## Project-Specific Gates
|
|
17
|
+
<!-- Add quality rules specific to this project that don't belong in universal standards. -->
|
|
18
18
|
`;
|
|
19
19
|
export const EXCEPTIONS_TEMPLATE = JSON.stringify({
|
|
20
20
|
version: "1",
|
|
21
21
|
_comment: "Hook false-positive exceptions. Add entries here to prevent rediscovering the same false positive each session. Each entry: {id, hook, pattern, reason, addedAt, addedBy, adr?}",
|
|
22
22
|
exceptions: [],
|
|
23
23
|
}, null, 2) + "\n";
|
|
24
|
-
export const PROJECT_GATES_TEMPLATE = `version: "1"
|
|
25
|
-
# Project-specific quality gates.
|
|
26
|
-
# Gates you discover while working that should be enforced for this project.
|
|
27
|
-
# Set generalizable: true + fill in evidence to contribute to the community registry.
|
|
28
|
-
# See: https://github.com/
|
|
29
|
-
gates: []
|
|
24
|
+
export const PROJECT_GATES_TEMPLATE = `version: "1"
|
|
25
|
+
# Project-specific quality gates.
|
|
26
|
+
# Gates you discover while working that should be enforced for this project.
|
|
27
|
+
# Set generalizable: true + fill in evidence to contribute to the community registry.
|
|
28
|
+
# See: https://github.com/jghiringhelli/quality-gates/issues/new?template=quality-gate-proposal.md
|
|
29
|
+
gates: []
|
|
30
30
|
`;
|
|
31
|
-
export const SMOKE_TESTS_README = `# Smoke Tests
|
|
32
|
-
|
|
33
|
-
Generated by ForgeCraft scaffold. Fill in the critical paths from your tech spec.
|
|
34
|
-
|
|
35
|
-
## What smoke tests cover
|
|
36
|
-
- Every API entry point that serves real users
|
|
37
|
-
- Every critical user journey end-to-end
|
|
38
|
-
- Every DB migration (verify schema applied correctly)
|
|
39
|
-
- Every external integration handshake
|
|
40
|
-
|
|
41
|
-
## Format
|
|
42
|
-
Use the tool configured in forgecraft.yaml deployment.testing.smokeTool (or default to HTTP assertions).
|
|
43
|
-
All smoke tests must complete in < 60 seconds total.
|
|
44
|
-
|
|
45
|
-
## Running
|
|
46
|
-
See forgecraft.yaml tools.test or your project's test runner.
|
|
47
|
-
Results are written to .forgecraft/reports/smoke-latest.json.
|
|
48
|
-
|
|
49
|
-
## Required before deployment
|
|
50
|
-
All smoke tests must pass against staging before any production deploy.
|
|
51
|
-
See verification.yaml deployment-gates phase.
|
|
31
|
+
export const SMOKE_TESTS_README = `# Smoke Tests
|
|
32
|
+
|
|
33
|
+
Generated by ForgeCraft scaffold. Fill in the critical paths from your tech spec.
|
|
34
|
+
|
|
35
|
+
## What smoke tests cover
|
|
36
|
+
- Every API entry point that serves real users
|
|
37
|
+
- Every critical user journey end-to-end
|
|
38
|
+
- Every DB migration (verify schema applied correctly)
|
|
39
|
+
- Every external integration handshake
|
|
40
|
+
|
|
41
|
+
## Format
|
|
42
|
+
Use the tool configured in forgecraft.yaml deployment.testing.smokeTool (or default to HTTP assertions).
|
|
43
|
+
All smoke tests must complete in < 60 seconds total.
|
|
44
|
+
|
|
45
|
+
## Running
|
|
46
|
+
See forgecraft.yaml tools.test or your project's test runner.
|
|
47
|
+
Results are written to .forgecraft/reports/smoke-latest.json.
|
|
48
|
+
|
|
49
|
+
## Required before deployment
|
|
50
|
+
All smoke tests must pass against staging before any production deploy.
|
|
51
|
+
See verification.yaml deployment-gates phase.
|
|
52
52
|
`;
|
|
53
|
-
export const LOAD_TESTS_README = `# Load Tests
|
|
54
|
-
|
|
55
|
-
Generated by ForgeCraft scaffold. Fill in the parameters from your tech spec.
|
|
56
|
-
|
|
57
|
-
## Parameters (fill in from forgecraft.yaml deployment.testing.load)
|
|
58
|
-
- Concurrent users: [TODO: concurrentUsers from forgecraft.yaml]
|
|
59
|
-
- Target RPS: [TODO: targetRps from forgecraft.yaml]
|
|
60
|
-
- p99 ceiling: [TODO: p99CeilingMs ms]
|
|
61
|
-
- Duration: [TODO: durationSeconds seconds minimum]
|
|
62
|
-
|
|
63
|
-
## When these parameters are missing
|
|
64
|
-
Deploying without stated load test parameters is full deployment with manual monitoring.
|
|
65
|
-
The paper requires: parameters named in spec BEFORE the test runs, not after.
|
|
66
|
-
Add them to forgecraft.yaml deployment.testing.load before running.
|
|
67
|
-
|
|
68
|
-
## Tool
|
|
69
|
-
Use the tool configured in forgecraft.yaml deployment.testing.load.tool (k6, Artillery, Locust, etc.)
|
|
70
|
-
Results are written to .forgecraft/reports/load-latest.json.
|
|
71
|
-
|
|
72
|
-
## Required before pre-release
|
|
73
|
-
See verification.yaml pre-release-hardening phase, load-test step.
|
|
53
|
+
export const LOAD_TESTS_README = `# Load Tests
|
|
54
|
+
|
|
55
|
+
Generated by ForgeCraft scaffold. Fill in the parameters from your tech spec.
|
|
56
|
+
|
|
57
|
+
## Parameters (fill in from forgecraft.yaml deployment.testing.load)
|
|
58
|
+
- Concurrent users: [TODO: concurrentUsers from forgecraft.yaml]
|
|
59
|
+
- Target RPS: [TODO: targetRps from forgecraft.yaml]
|
|
60
|
+
- p99 ceiling: [TODO: p99CeilingMs ms]
|
|
61
|
+
- Duration: [TODO: durationSeconds seconds minimum]
|
|
62
|
+
|
|
63
|
+
## When these parameters are missing
|
|
64
|
+
Deploying without stated load test parameters is full deployment with manual monitoring.
|
|
65
|
+
The paper requires: parameters named in spec BEFORE the test runs, not after.
|
|
66
|
+
Add them to forgecraft.yaml deployment.testing.load before running.
|
|
67
|
+
|
|
68
|
+
## Tool
|
|
69
|
+
Use the tool configured in forgecraft.yaml deployment.testing.load.tool (k6, Artillery, Locust, etc.)
|
|
70
|
+
Results are written to .forgecraft/reports/load-latest.json.
|
|
71
|
+
|
|
72
|
+
## Required before pre-release
|
|
73
|
+
See verification.yaml pre-release-hardening phase, load-test step.
|
|
74
74
|
`;
|
|
75
75
|
/**
|
|
76
76
|
* Render the bootstrap README for docs/adrs/.
|
|
@@ -118,7 +118,15 @@ export function renderGitignore(language) {
|
|
|
118
118
|
const universal = [".env", ".env.*", "coverage/", "*.log", ".DS_Store"];
|
|
119
119
|
const byLanguage = {
|
|
120
120
|
typescript: ["node_modules/", "dist/", "build/", ".tsbuildinfo"],
|
|
121
|
-
python: [
|
|
121
|
+
python: [
|
|
122
|
+
"__pycache__/",
|
|
123
|
+
"*.pyc",
|
|
124
|
+
".venv/",
|
|
125
|
+
"venv/",
|
|
126
|
+
"dist/",
|
|
127
|
+
"*.egg-info/",
|
|
128
|
+
".mypy_cache/",
|
|
129
|
+
],
|
|
122
130
|
};
|
|
123
131
|
return [...(byLanguage[language] ?? []), ...universal].join("\n") + "\n";
|
|
124
132
|
}
|
|
@@ -168,7 +176,8 @@ export function renderGsDisclosure() {
|
|
|
168
176
|
* @returns README content string
|
|
169
177
|
*/
|
|
170
178
|
export function renderSmokeTestsReadme(deployment) {
|
|
171
|
-
const smokeTool = deployment.testing?.smokeTool ??
|
|
179
|
+
const smokeTool = deployment.testing?.smokeTool ??
|
|
180
|
+
"[TODO: set smokeTool in forgecraft.yaml deployment.testing]";
|
|
172
181
|
return SMOKE_TESTS_README.replace("deployment.testing.smokeTool (or default to HTTP assertions)", `deployment.testing.smokeTool: ${smokeTool}`);
|
|
173
182
|
}
|
|
174
183
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-templates.js","sourceRoot":"","sources":["../../src/tools/scaffold-templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;CAcxC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAC9B,IAAI,CAAC,SAAS,CACZ;IACE,OAAO,EAAE,GAAG;IACZ,QAAQ,
|
|
1
|
+
{"version":3,"file":"scaffold-templates.js","sourceRoot":"","sources":["../../src/tools/scaffold-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-phase2.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase2.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAc1D;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,GACpB,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"setup-phase2.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase2.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAc1D;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,GACpB,eAAe,EAAE,CA8BnB;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAoExE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,GACpB,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,eAAe,EAAE,GACpC,MAAM,CAeR"}
|
|
@@ -40,7 +40,13 @@ export function deriveCascadeDecisions(tags, projectName, mvp, scopeComplete, ha
|
|
|
40
40
|
required = true;
|
|
41
41
|
rationale = `Existing consumers detected: behavioral contracts (docs/use-cases.md) are required for breaking-change detection.`;
|
|
42
42
|
}
|
|
43
|
-
return {
|
|
43
|
+
return {
|
|
44
|
+
...decision,
|
|
45
|
+
required,
|
|
46
|
+
rationale,
|
|
47
|
+
decidedAt,
|
|
48
|
+
decidedBy: "scaffold",
|
|
49
|
+
};
|
|
44
50
|
});
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
@@ -50,7 +56,7 @@ export function deriveCascadeDecisions(tags, projectName, mvp, scopeComplete, ha
|
|
|
50
56
|
* @returns Formatted markdown completion message
|
|
51
57
|
*/
|
|
52
58
|
export function buildPhase2Response(params) {
|
|
53
|
-
const { decisions, tags, mvp, scopeComplete, hasConsumers, prdWritten, useCasesWritten, yamlWritten, indexMdWritten, coreMdWritten, adrIndexWritten, gatesIndexWritten } = params;
|
|
59
|
+
const { decisions, tags, mvp, scopeComplete, hasConsumers, prdWritten, useCasesWritten, yamlWritten, indexMdWritten, coreMdWritten, adrIndexWritten, gatesIndexWritten, } = params;
|
|
54
60
|
const stageLabel = mvp ? "MVP" : "Production";
|
|
55
61
|
const tagLabel = tags.filter((t) => t !== "UNIVERSAL").join(", ") || "UNIVERSAL";
|
|
56
62
|
let text = `## Project Setup Complete\n\n`;
|
|
@@ -95,7 +101,12 @@ export function buildPhase2Response(params) {
|
|
|
95
101
|
text += `\n### Git\n ${params.gitInitStatus}\n`;
|
|
96
102
|
text += `\n### Next step — call this now:\n`;
|
|
97
103
|
text += `\`\`\`\naction: "check_cascade"\nproject_dir: "${params.projectDir ?? ""}"\n\`\`\`\n`;
|
|
98
|
-
|
|
104
|
+
if (params.isBrownfield) {
|
|
105
|
+
text += `Do not ask the user — run check_cascade immediately. When it passes, run audit_project to surface any existing violations in this brownfield codebase before writing new code.`;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
text += `Do not ask the user — run check_cascade immediately. If it passes, run generate_session_prompt for the first roadmap item.`;
|
|
109
|
+
}
|
|
99
110
|
return text;
|
|
100
111
|
}
|
|
101
112
|
/**
|
|
@@ -106,7 +117,9 @@ export function buildDecisionNote(decision, mvp, scopeComplete, hasConsumers) {
|
|
|
106
117
|
return " (MVP stage, revisit at production)";
|
|
107
118
|
if (decision.step === "adrs" && !decision.required)
|
|
108
119
|
return scopeComplete ? " (MVP stage)" : " (scope still evolving)";
|
|
109
|
-
if (decision.step === "behavioral_contracts" &&
|
|
120
|
+
if (decision.step === "behavioral_contracts" &&
|
|
121
|
+
decision.required &&
|
|
122
|
+
hasConsumers)
|
|
110
123
|
return " (existing consumers detected)";
|
|
111
124
|
return "";
|
|
112
125
|
}
|
|
@@ -119,7 +132,9 @@ export function renderCascadeDecisionsSection(decisions) {
|
|
|
119
132
|
for (const decision of decisions) {
|
|
120
133
|
const icon = decision.required ? "✓" : "○";
|
|
121
134
|
const artifact = STEP_ARTIFACT_DISPLAY[decision.step] ?? decision.step;
|
|
122
|
-
const label = decision.required
|
|
135
|
+
const label = decision.required
|
|
136
|
+
? `required (${artifact})`
|
|
137
|
+
: `optional — ${decision.rationale.split(".")[0]}`;
|
|
123
138
|
text += ` ${icon} ${decision.step} — ${label}\n`;
|
|
124
139
|
}
|
|
125
140
|
text += `\nReview these decisions. To revise: use \`set_cascade_requirement\` or edit\n`;
|
|
@@ -134,6 +149,9 @@ function extractScaffoldFiles(scaffoldText) {
|
|
|
134
149
|
const matches = scaffoldText.match(/^\s{2}([^\n]+\.(md|yaml|json|ts|js|sh))/gm);
|
|
135
150
|
if (!matches)
|
|
136
151
|
return [];
|
|
137
|
-
return matches
|
|
152
|
+
return matches
|
|
153
|
+
.map((m) => m.trim())
|
|
154
|
+
.filter((m) => m.length > 0)
|
|
155
|
+
.slice(0, 12);
|
|
138
156
|
}
|
|
139
157
|
//# sourceMappingURL=setup-phase2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-phase2.js","sourceRoot":"","sources":["../../src/tools/setup-phase2.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE,yEAAyE;AAEzE,mEAAmE;AACnE,MAAM,qBAAqB,GAA2B;IACpD,eAAe,EAAE,QAAQ;IACzB,qBAAqB,EAAE,eAAe;IACtC,YAAY,EAAE,WAAW;IACzB,IAAI,EAAE,YAAY;IAClB,oBAAoB,EAAE,cAAc;CACrC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAuB,EACvB,WAAmB,EACnB,GAAY,EACZ,aAAsB,EACtB,YAAqB;IAErB,MAAM,IAAI,GAAG,6BAA6B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAExD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC3B,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACjC,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAEnC,IAAI,QAAQ,CAAC,IAAI,KAAK,uBAAuB,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YACjE,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS,GAAG,yEAAyE,CAAC;QACxF,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpE,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC;YACrE,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS,GAAG,sBAAsB,MAAM,kEAAkE,CAAC;QAC7G,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,sBAAsB,IAAI,YAAY,EAAE,CAAC;YAC7D,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS,GAAG,mHAAmH,CAAC;QAClI,CAAC;QAED,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-phase2.js","sourceRoot":"","sources":["../../src/tools/setup-phase2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ToolResult } from "../shared/types.js";
|
|
2
|
+
export { detectProjectMode } from "./setup-detector.js";
|
|
2
3
|
export interface SetupProjectArgs {
|
|
3
4
|
readonly project_dir: string;
|
|
4
5
|
readonly spec_path?: string;
|
|
@@ -34,6 +35,11 @@ export interface SetupProjectArgs {
|
|
|
34
35
|
* Comma-separated list of measurable outcomes or goals.
|
|
35
36
|
*/
|
|
36
37
|
readonly success_criteria?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Phase 2: LLM-corrected tags based on reading the spec.
|
|
40
|
+
* When provided, these override the directory-inferred tags.
|
|
41
|
+
*/
|
|
42
|
+
readonly tags?: string[];
|
|
37
43
|
}
|
|
38
44
|
/**
|
|
39
45
|
* Unified two-phase setup handler.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-project.d.ts","sourceRoot":"","sources":["../../src/tools/setup-project.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-project.d.ts","sourceRoot":"","sources":["../../src/tools/setup-project.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQ1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAsBxD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAOD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,UAAU,CAAC,CA0BrB;AAyID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAezE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CAaV"}
|