forgecraft-mcp 1.2.0 → 1.3.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 +525 -525
- package/dist/cli/help.js +44 -44
- package/dist/registry/renderer-skeletons.js +92 -92
- package/dist/shared/gs-score-logger.js +6 -6
- package/dist/tools/add-module.js +123 -123
- package/dist/tools/advice-registry.js +18 -18
- package/dist/tools/check-cascade-report.js +64 -64
- package/dist/tools/configure-mcp.d.ts +3 -0
- package/dist/tools/configure-mcp.d.ts.map +1 -1
- package/dist/tools/configure-mcp.js +10 -0
- package/dist/tools/configure-mcp.js.map +1 -1
- package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch.js +3 -0
- package/dist/tools/forgecraft-dispatch.js.map +1 -1
- package/dist/tools/forgecraft-schema-params.d.ts +9 -0
- package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema-params.js +21 -0
- package/dist/tools/forgecraft-schema-params.js.map +1 -1
- package/dist/tools/forgecraft-schema.d.ts +9 -0
- package/dist/tools/forgecraft-schema.d.ts.map +1 -1
- package/dist/tools/refresh-output.js +14 -14
- package/dist/tools/scaffold-spec-stubs.js +115 -115
- package/dist/tools/scaffold-templates.js +62 -62
- package/dist/tools/setup-artifact-writers.d.ts +30 -0
- package/dist/tools/setup-artifact-writers.d.ts.map +1 -1
- package/dist/tools/setup-artifact-writers.js +120 -8
- package/dist/tools/setup-artifact-writers.js.map +1 -1
- package/dist/tools/setup-phase1.d.ts +3 -0
- package/dist/tools/setup-phase1.d.ts.map +1 -1
- package/dist/tools/setup-phase1.js +79 -35
- package/dist/tools/setup-phase1.js.map +1 -1
- package/dist/tools/setup-phase2.d.ts +2 -0
- package/dist/tools/setup-phase2.d.ts.map +1 -1
- package/dist/tools/setup-phase2.js +10 -1
- package/dist/tools/setup-phase2.js.map +1 -1
- package/dist/tools/setup-project.d.ts +18 -0
- package/dist/tools/setup-project.d.ts.map +1 -1
- package/dist/tools/setup-project.js +77 -1
- package/dist/tools/setup-project.js.map +1 -1
- package/dist/tools/spec-parser-tags.d.ts +9 -0
- package/dist/tools/spec-parser-tags.d.ts.map +1 -1
- package/dist/tools/spec-parser-tags.js +92 -0
- package/dist/tools/spec-parser-tags.js.map +1 -1
- package/package.json +89 -86
- package/templates/analytics/instructions.yaml +37 -37
- package/templates/analytics/mcp-servers.yaml +11 -11
- package/templates/analytics/structure.yaml +25 -25
- package/templates/api/instructions.yaml +231 -231
- package/templates/api/mcp-servers.yaml +22 -13
- package/templates/api/nfr.yaml +23 -23
- package/templates/api/review.yaml +103 -103
- package/templates/api/structure.yaml +34 -34
- package/templates/api/verification.yaml +132 -132
- package/templates/cli/instructions.yaml +31 -31
- package/templates/cli/mcp-servers.yaml +11 -11
- package/templates/cli/review.yaml +53 -53
- package/templates/cli/structure.yaml +16 -16
- package/templates/data-lineage/instructions.yaml +28 -28
- package/templates/data-lineage/mcp-servers.yaml +22 -22
- package/templates/data-pipeline/instructions.yaml +84 -84
- package/templates/data-pipeline/mcp-servers.yaml +13 -13
- package/templates/data-pipeline/nfr.yaml +39 -39
- package/templates/data-pipeline/structure.yaml +23 -23
- package/templates/fintech/hooks.yaml +55 -55
- package/templates/fintech/instructions.yaml +112 -112
- package/templates/fintech/mcp-servers.yaml +13 -13
- package/templates/fintech/nfr.yaml +46 -46
- package/templates/fintech/playbook.yaml +210 -210
- package/templates/fintech/verification.yaml +239 -239
- package/templates/game/instructions.yaml +289 -289
- package/templates/game/mcp-servers.yaml +38 -38
- package/templates/game/nfr.yaml +64 -64
- package/templates/game/playbook.yaml +214 -214
- package/templates/game/review.yaml +97 -97
- package/templates/game/structure.yaml +67 -67
- package/templates/game/verification.yaml +174 -174
- package/templates/healthcare/instructions.yaml +42 -42
- package/templates/healthcare/mcp-servers.yaml +13 -13
- package/templates/healthcare/nfr.yaml +47 -47
- package/templates/hipaa/instructions.yaml +41 -41
- package/templates/hipaa/mcp-servers.yaml +13 -13
- package/templates/infra/instructions.yaml +104 -104
- package/templates/infra/mcp-servers.yaml +20 -20
- package/templates/infra/nfr.yaml +46 -46
- package/templates/infra/review.yaml +65 -65
- package/templates/infra/structure.yaml +25 -25
- package/templates/library/instructions.yaml +36 -36
- package/templates/library/mcp-servers.yaml +20 -20
- package/templates/library/review.yaml +56 -56
- package/templates/library/structure.yaml +19 -19
- package/templates/medallion-architecture/instructions.yaml +41 -41
- package/templates/medallion-architecture/mcp-servers.yaml +22 -22
- package/templates/ml/instructions.yaml +85 -85
- package/templates/ml/mcp-servers.yaml +11 -11
- package/templates/ml/nfr.yaml +39 -39
- package/templates/ml/structure.yaml +25 -25
- package/templates/ml/verification.yaml +156 -156
- package/templates/mobile/instructions.yaml +44 -44
- package/templates/mobile/mcp-servers.yaml +11 -11
- package/templates/mobile/nfr.yaml +49 -49
- package/templates/mobile/structure.yaml +27 -27
- package/templates/mobile/verification.yaml +121 -121
- package/templates/observability-xray/instructions.yaml +40 -40
- package/templates/observability-xray/mcp-servers.yaml +15 -15
- package/templates/realtime/instructions.yaml +42 -42
- package/templates/realtime/mcp-servers.yaml +13 -13
- package/templates/soc2/instructions.yaml +41 -41
- package/templates/soc2/mcp-servers.yaml +24 -24
- package/templates/social/instructions.yaml +43 -43
- package/templates/social/mcp-servers.yaml +24 -24
- package/templates/state-machine/instructions.yaml +42 -42
- package/templates/state-machine/mcp-servers.yaml +11 -11
- package/templates/tools-registry.yaml +164 -164
- package/templates/universal/hooks.yaml +531 -531
- package/templates/universal/instructions.yaml +1692 -1692
- package/templates/universal/mcp-servers.yaml +50 -50
- package/templates/universal/nfr.yaml +197 -197
- package/templates/universal/reference.yaml +326 -326
- package/templates/universal/review.yaml +204 -204
- package/templates/universal/skills.yaml +262 -262
- package/templates/universal/structure.yaml +67 -67
- package/templates/universal/verification.yaml +416 -416
- package/templates/web-react/hooks.yaml +44 -44
- package/templates/web-react/instructions.yaml +207 -207
- package/templates/web-react/mcp-servers.yaml +20 -20
- package/templates/web-react/nfr.yaml +27 -27
- package/templates/web-react/review.yaml +94 -94
- package/templates/web-react/structure.yaml +46 -46
- package/templates/web-react/verification.yaml +126 -126
- package/templates/web-static/instructions.yaml +115 -115
- package/templates/web-static/mcp-servers.yaml +20 -20
- package/templates/web3/instructions.yaml +44 -44
- package/templates/web3/mcp-servers.yaml +11 -11
- package/templates/web3/verification.yaml +159 -159
- package/templates/zero-trust/instructions.yaml +41 -41
- package/templates/zero-trust/mcp-servers.yaml +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-artifact-writers.js","sourceRoot":"","sources":["../../src/tools/setup-artifact-writers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-artifact-writers.js","sourceRoot":"","sources":["../../src/tools/setup-artifact-writers.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,9 @@ import type { ProjectContext } from "./setup-context.js";
|
|
|
7
7
|
/**
|
|
8
8
|
* Build the phase 1 "what I found + three questions" response.
|
|
9
9
|
*
|
|
10
|
+
* Only reached when git pre-flight passes (repo exists), so no git status
|
|
11
|
+
* annotation is needed here.
|
|
12
|
+
*
|
|
10
13
|
* @param context - Assembled project context
|
|
11
14
|
* @returns MCP tool response with analysis summary and calibration questions
|
|
12
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-phase1.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-phase1.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CA2BvE;AAwKD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* setup-phase1: Phase 1 response builders — analysis summary and calibration questions.
|
|
3
3
|
*/
|
|
4
|
-
import { generateReversePrd, writeBrownfieldReversePrd } from "./setup-detector.js";
|
|
4
|
+
import { generateReversePrd, writeBrownfieldReversePrd, } from "./setup-detector.js";
|
|
5
5
|
import { readExperimentConfig } from "../shared/config.js";
|
|
6
6
|
// ── Phase 1 Response ─────────────────────────────────────────────────
|
|
7
7
|
/**
|
|
8
8
|
* Build the phase 1 "what I found + three questions" response.
|
|
9
9
|
*
|
|
10
|
+
* Only reached when git pre-flight passes (repo exists), so no git status
|
|
11
|
+
* annotation is needed here.
|
|
12
|
+
*
|
|
10
13
|
* @param context - Assembled project context
|
|
11
14
|
* @returns MCP tool response with analysis summary and calibration questions
|
|
12
15
|
*/
|
|
@@ -24,10 +27,10 @@ export function buildPhase1Response(context) {
|
|
|
24
27
|
}
|
|
25
28
|
if (context.isBrownfield) {
|
|
26
29
|
writeBrownfieldReversePrd(context.projectDir);
|
|
27
|
-
text += buildBrownfieldQuestions();
|
|
30
|
+
text += buildBrownfieldQuestions(context.inferredTags);
|
|
28
31
|
}
|
|
29
32
|
else {
|
|
30
|
-
text += buildPhase1Questions();
|
|
33
|
+
text += buildPhase1Questions(context.inferredTags);
|
|
31
34
|
}
|
|
32
35
|
const experiment = readExperimentConfig(context.projectDir);
|
|
33
36
|
if (experiment?.id) {
|
|
@@ -86,7 +89,7 @@ function buildAmbiguitySection(ambiguities) {
|
|
|
86
89
|
* Build the "what I found" summary block.
|
|
87
90
|
*/
|
|
88
91
|
function buildFoundSummary(context) {
|
|
89
|
-
const { projectName, isExistingProject, specContent, specSourceLabel, specCandidates, inferredTags } = context;
|
|
92
|
+
const { projectName, isExistingProject, specContent, specSourceLabel, specCandidates, inferredTags, } = context;
|
|
90
93
|
const specTitle = specContent?.match(/^#\s+(.+)/m)?.[1]?.trim() ?? null;
|
|
91
94
|
const displayName = specTitle && specTitle !== "[Project Name]" ? specTitle : projectName;
|
|
92
95
|
let summary = `### What I found:\n`;
|
|
@@ -101,46 +104,87 @@ function buildFoundSummary(context) {
|
|
|
101
104
|
else {
|
|
102
105
|
summary += `- **Spec**: not found — will scaffold with stubs\n`;
|
|
103
106
|
}
|
|
104
|
-
summary += `- **Inferred tags**: ${inferredTags.map((t) => `[${t}]`).join(" ")}\n
|
|
107
|
+
summary += `- **Inferred tags**: ${inferredTags.map((t) => `[${t}]`).join(" ")}\n`;
|
|
108
|
+
summary += `\n`;
|
|
105
109
|
return summary;
|
|
106
110
|
}
|
|
107
111
|
/**
|
|
108
112
|
* Build the three calibration questions block.
|
|
109
113
|
*/
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
**
|
|
122
|
-
|
|
123
|
-
- \`
|
|
124
|
-
|
|
125
|
-
|
|
114
|
+
const PLAYWRIGHT_TAGS = new Set(["WEB-REACT", "WEB-STATIC", "API"]);
|
|
115
|
+
/**
|
|
116
|
+
* Build the standard "four/five questions" block for greenfield projects.
|
|
117
|
+
* Q5 (Playwright) is only shown when the project has HTML or API tags.
|
|
118
|
+
*
|
|
119
|
+
* @param tags - Inferred project tags (to decide whether to show Q5)
|
|
120
|
+
*/
|
|
121
|
+
function buildPhase1Questions(tags) {
|
|
122
|
+
const needsPlaywright = tags.some((t) => PLAYWRIGHT_TAGS.has(t));
|
|
123
|
+
const questionCount = needsPlaywright ? "five" : "four";
|
|
124
|
+
const playwrightBlock = needsPlaywright
|
|
125
|
+
? `\n**Q5: Would you like to add Playwright MCP for browser automation and testing?**
|
|
126
|
+
Playwright MCP lets the AI assistant drive a real browser — navigate pages, fill forms, screenshot, and loop on visual feedback without leaving the chat. For API projects it adds request interception and response validation. It runs locally (no data leaves your machine).
|
|
127
|
+
- \`yes\` *(recommended)* — wire it in automatically
|
|
128
|
+
- \`no\` — skip it; choose this if you already use an equivalent browser testing tool\n`
|
|
129
|
+
: "";
|
|
130
|
+
const params = needsPlaywright
|
|
131
|
+
? "`mvp`, `scope_complete`, `has_consumers`, `use_codeseeker`, and `use_playwright`"
|
|
132
|
+
: "`mvp`, `scope_complete`, `has_consumers`, and `use_codeseeker`";
|
|
133
|
+
return `### Before I proceed, I need ${questionCount} answers:
|
|
134
|
+
|
|
135
|
+
**Q1: What is the development stage?**
|
|
136
|
+
- \`mvp\` — early validation, expect significant changes, minimal ceremony
|
|
137
|
+
- \`production\` — shipping to real users, full spec and quality gates required
|
|
138
|
+
|
|
139
|
+
**Q2: Is the scope defined and stable?**
|
|
140
|
+
- \`complete\` — requirements are clear; proceed with full cascade
|
|
141
|
+
- \`evolving\` — scope is still forming; use lighter cascade, revisit when stable
|
|
142
|
+
|
|
143
|
+
**Q3: Does this project have existing users or downstream consumers?**
|
|
144
|
+
- \`yes\` — behavioral contracts and breaking-change detection are required
|
|
145
|
+
- \`no\` — contracts are recommended but not blocking
|
|
146
|
+
|
|
147
|
+
**Q4: Would you like to add CodeSeeker for semantic code search?**
|
|
148
|
+
CodeSeeker builds a live knowledge graph of your codebase so the AI assistant can find existing patterns before writing new code — this cut duplication by ~53% in measured sessions. It runs locally (no data leaves your machine).
|
|
149
|
+
- \`yes\` *(recommended)* — wire it in automatically
|
|
150
|
+
- \`no\` — skip it; choose this if you already use a similar semantic search tool
|
|
151
|
+
${playwrightBlock}
|
|
152
|
+
Call \`setup_project\` again with ${params} to proceed.`;
|
|
126
153
|
}
|
|
127
154
|
/**
|
|
128
155
|
* Build brownfield-specific calibration questions for phase 1.
|
|
156
|
+
*
|
|
157
|
+
* @param tags - Inferred project tags (to decide whether to show Playwright Q)
|
|
129
158
|
*/
|
|
130
|
-
function buildBrownfieldQuestions() {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
159
|
+
function buildBrownfieldQuestions(tags) {
|
|
160
|
+
const needsPlaywright = tags.some((t) => PLAYWRIGHT_TAGS.has(t));
|
|
161
|
+
const playwrightBlock = needsPlaywright
|
|
162
|
+
? `\n**Also answer the Playwright question:** Would you like browser automation wired in?
|
|
163
|
+
Playwright MCP lets the AI drive a real browser for E2E loops, visual verification, and API request interception — all locally.
|
|
164
|
+
- \`use_playwright: true\` *(recommended)*
|
|
165
|
+
- \`use_playwright: false\` — skip if you already have an equivalent browser testing tool\n`
|
|
166
|
+
: "";
|
|
167
|
+
const params = needsPlaywright
|
|
168
|
+
? "`mvp`, `scope_complete`, `has_consumers`, `use_codeseeker`, and `use_playwright`"
|
|
169
|
+
: "`mvp`, `scope_complete`, `has_consumers`, and `use_codeseeker`";
|
|
170
|
+
return `## Brownfield Project Detected
|
|
171
|
+
|
|
172
|
+
I found existing source code. Before we proceed:
|
|
173
|
+
|
|
174
|
+
1. **What is currently broken or incomplete?** (Describe the known issues or missing features)
|
|
175
|
+
2. **What new feature or improvement are you adding?** (Describe the specific change)
|
|
176
|
+
3. **Do tests exist, and do they currently pass?** (Run \`npm test\` or \`pytest\` to check)
|
|
177
|
+
|
|
178
|
+
I've generated a reverse-engineered spec stub at \`docs/PRD.md\`. Review and complete it.
|
|
179
|
+
|
|
180
|
+
Create a \`work/\` branch before making changes: \`git checkout -b work/forgecraft-setup\`
|
|
181
|
+
|
|
182
|
+
**Also answer the CodeSeeker question:** Would you like semantic code search wired in?
|
|
183
|
+
CodeSeeker builds a live knowledge graph so the AI can find existing patterns before writing new code — measured ~53% reduction in duplication. Runs locally, no data leaves your machine.
|
|
184
|
+
- \`use_codeseeker: true\` *(recommended)*
|
|
185
|
+
- \`use_codeseeker: false\` — skip if you already have a similar semantic search tool
|
|
186
|
+
${playwrightBlock}
|
|
187
|
+
Call \`setup_project\` again with ${params} to proceed.`;
|
|
144
188
|
}
|
|
145
189
|
// Export generateReversePrd for backward compatibility
|
|
146
190
|
export { generateReversePrd };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-phase1.js","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-phase1.js","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,8 @@ export interface Phase2ResponseParams {
|
|
|
21
21
|
readonly hasConsumers: boolean;
|
|
22
22
|
readonly prdWritten: boolean;
|
|
23
23
|
readonly useCasesWritten: boolean;
|
|
24
|
+
readonly sampleOutcomeWritten: boolean;
|
|
25
|
+
readonly toolSampleSplit?: "tool_and_sample" | "tool_only" | "content_only";
|
|
24
26
|
readonly yamlWritten: boolean;
|
|
25
27
|
readonly scaffoldText: string;
|
|
26
28
|
readonly sensitiveData?: boolean;
|
|
@@ -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,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,
|
|
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,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB,GAAG,WAAW,GAAG,cAAc,CAAC;IAC5E,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,CA+ExE;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"}
|
|
@@ -76,9 +76,11 @@ export function buildPhase2Response(params) {
|
|
|
76
76
|
if (yamlWritten)
|
|
77
77
|
text += ` forgecraft.yaml (with cascade decisions)\n`;
|
|
78
78
|
if (prdWritten)
|
|
79
|
-
text += ` docs/PRD.md (from spec)\n`;
|
|
79
|
+
text += ` docs/PRD.md (from spec — focuses on the core tool)\n`;
|
|
80
80
|
if (useCasesWritten)
|
|
81
81
|
text += ` docs/use-cases.md (from spec)\n`;
|
|
82
|
+
if (params.sampleOutcomeWritten)
|
|
83
|
+
text += ` docs/sample-outcome.md (first real deliverable of the core tool)\n`;
|
|
82
84
|
if (indexMdWritten)
|
|
83
85
|
text += ` .claude/index.md (CNT routing root)\n`;
|
|
84
86
|
if (coreMdWritten)
|
|
@@ -99,6 +101,13 @@ export function buildPhase2Response(params) {
|
|
|
99
101
|
}
|
|
100
102
|
if (params.gitInitStatus)
|
|
101
103
|
text += `\n### Git\n ${params.gitInitStatus}\n`;
|
|
104
|
+
if (params.toolSampleSplit === "tool_and_sample") {
|
|
105
|
+
text += `\n### 🔀 Tool vs. Sample Output — Split Applied\n`;
|
|
106
|
+
text += ` The PRD covers the **core generative tool**.\n`;
|
|
107
|
+
text += ` \`docs/sample-outcome.md\` holds the specific creative work from the spec.\n`;
|
|
108
|
+
text += ` Fill in that file, then use it as the first acceptance test:\n`;
|
|
109
|
+
text += ` the tool is done when it can produce that specific outcome.\n`;
|
|
110
|
+
}
|
|
102
111
|
text += `\n### Next step — call this now:\n`;
|
|
103
112
|
text += `\`\`\`\naction: "check_cascade"\nproject_dir: "${params.projectDir ?? ""}"\n\`\`\`\n`;
|
|
104
113
|
if (params.isBrownfield) {
|
|
@@ -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;YACL,GAAG,QAAQ;YACX,QAAQ;YACR,SAAS;YACT,SAAS;YACT,SAAS,EAAE,UAAmB;SAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-phase2.js","sourceRoot":"","sources":["../../src/tools/setup-phase2.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,24 @@ export interface SetupProjectArgs {
|
|
|
40
40
|
* When provided, these override the directory-inferred tags.
|
|
41
41
|
*/
|
|
42
42
|
readonly tags?: string[];
|
|
43
|
+
/**
|
|
44
|
+
* Phase 2: whether to add CodeSeeker for semantic code search.
|
|
45
|
+
* Presented as an opt-in question in Phase 1.
|
|
46
|
+
* Defaults to true when omitted (backward compatible).
|
|
47
|
+
*/
|
|
48
|
+
readonly use_codeseeker?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Phase 2: whether to add Playwright MCP for browser automation and E2E/API testing.
|
|
51
|
+
* Only asked in Phase 1 for WEB-REACT, WEB-STATIC, or API projects.
|
|
52
|
+
* Defaults to true when omitted (backward compatible).
|
|
53
|
+
*/
|
|
54
|
+
readonly use_playwright?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Phase 2: how to handle a spec that conflates a generative tool with a
|
|
57
|
+
* specific named creative output. Only relevant when Phase 1 reports
|
|
58
|
+
* a tool_vs_sample_output ambiguity.
|
|
59
|
+
*/
|
|
60
|
+
readonly tool_sample_split?: "tool_and_sample" | "tool_only" | "content_only";
|
|
43
61
|
}
|
|
44
62
|
/**
|
|
45
63
|
* 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;AAQ1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,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;AAwBxD,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;IACzB;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,WAAW,GAAG,cAAc,CAAC;CAC/E;AAOD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,UAAU,CAAC,CAsCrB;AA+MD;;;;;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"}
|
|
@@ -17,7 +17,7 @@ import { parseSpec, inferSensitiveData } from "./spec-parser.js";
|
|
|
17
17
|
import { buildProjectContext } from "./setup-context.js";
|
|
18
18
|
export { detectProjectMode } from "./setup-detector.js";
|
|
19
19
|
import { buildPhase1Response } from "./setup-phase1.js";
|
|
20
|
-
import { writeForgeYaml, setExperimentGroupIfMissing, writePrd, writeUseCases, initGitRepo, } from "./setup-artifact-writers.js";
|
|
20
|
+
import { writeForgeYaml, setExperimentGroupIfMissing, writePrd, writeUseCases, writeSampleOutcome, initGitRepo, checkGitStatus, } from "./setup-artifact-writers.js";
|
|
21
21
|
import { deriveCascadeDecisions, buildPhase2Response } from "./setup-phase2.js";
|
|
22
22
|
import { writeCntFiles, writeCoreMd, writeAdrIndex, writeGatesIndex, } from "./setup-cnt.js";
|
|
23
23
|
const logger = createLogger("tools/setup-project");
|
|
@@ -41,6 +41,15 @@ export async function setupProjectHandler(args) {
|
|
|
41
41
|
phase: isPhase2 ? 2 : 1,
|
|
42
42
|
projectDir: args.project_dir,
|
|
43
43
|
});
|
|
44
|
+
// ── Git pre-flight (skip in test environments) ───────────────────
|
|
45
|
+
const gitStatus = process.env["VITEST"] || process.env["NODE_ENV"] === "test"
|
|
46
|
+
? "repo"
|
|
47
|
+
: checkGitStatus(args.project_dir);
|
|
48
|
+
if (gitStatus === "no-git" || gitStatus === "no-repo") {
|
|
49
|
+
return gitStatus === "no-git"
|
|
50
|
+
? buildNoGitResponse()
|
|
51
|
+
: buildNoRepoResponse();
|
|
52
|
+
}
|
|
44
53
|
const context = await buildProjectContext(args);
|
|
45
54
|
if (!isPhase2) {
|
|
46
55
|
return buildPhase1Response(context);
|
|
@@ -90,6 +99,9 @@ async function executePhase2(args, context) {
|
|
|
90
99
|
const useCasesWritten = hasSpec
|
|
91
100
|
? writeUseCases(projectDir, projectName, aiFields, context.specContent)
|
|
92
101
|
: false;
|
|
102
|
+
const sampleOutcomeWritten = args.tool_sample_split === "tool_and_sample"
|
|
103
|
+
? writeSampleOutcome(projectDir, projectName)
|
|
104
|
+
: false;
|
|
93
105
|
const validTagsForHooks = (forgeCraftTags.length > 0 ? forgeCraftTags : ["UNIVERSAL"]);
|
|
94
106
|
const scaffoldResult = await scaffoldProjectHandler({
|
|
95
107
|
tags: validTagsForHooks,
|
|
@@ -110,6 +122,12 @@ async function executePhase2(args, context) {
|
|
|
110
122
|
project_dir: projectDir,
|
|
111
123
|
auto_approve_tools: true,
|
|
112
124
|
include_remote: false,
|
|
125
|
+
excluded_servers: [
|
|
126
|
+
...(args.use_codeseeker === false ? ["codeseeker"] : []),
|
|
127
|
+
...(args.use_playwright === false
|
|
128
|
+
? ["playwright", "playwright-mcp"]
|
|
129
|
+
: []),
|
|
130
|
+
],
|
|
113
131
|
});
|
|
114
132
|
mcpServerNames = readConfiguredMcpServerNames(projectDir);
|
|
115
133
|
}
|
|
@@ -125,6 +143,8 @@ async function executePhase2(args, context) {
|
|
|
125
143
|
hasConsumers: args.has_consumers,
|
|
126
144
|
prdWritten,
|
|
127
145
|
useCasesWritten,
|
|
146
|
+
sampleOutcomeWritten,
|
|
147
|
+
toolSampleSplit: args.tool_sample_split,
|
|
128
148
|
yamlWritten,
|
|
129
149
|
scaffoldText,
|
|
130
150
|
sensitiveData: isSensitive,
|
|
@@ -140,6 +160,62 @@ async function executePhase2(args, context) {
|
|
|
140
160
|
return { content: [{ type: "text", text }] };
|
|
141
161
|
}
|
|
142
162
|
// ── Utilities ─────────────────────────────────────────────────────────
|
|
163
|
+
/**
|
|
164
|
+
* Return a hard-stop response when git is not installed on the system.
|
|
165
|
+
* ForgeCraft requires git to version-control the generated cascade artifacts.
|
|
166
|
+
*
|
|
167
|
+
* @returns MCP tool response with install instructions
|
|
168
|
+
*/
|
|
169
|
+
function buildNoGitResponse() {
|
|
170
|
+
const text = `## ⛔ Git Required
|
|
171
|
+
|
|
172
|
+
ForgeCraft tracks every generated artifact in version control, so **Git must be installed before setup can proceed**.
|
|
173
|
+
|
|
174
|
+
Git was not found on this system. To fix this:
|
|
175
|
+
|
|
176
|
+
1. **Install Git** → https://git-scm.com/downloads
|
|
177
|
+
2. **Configure identity**
|
|
178
|
+
\`\`\`
|
|
179
|
+
git config --global user.name "Your Name"
|
|
180
|
+
git config --global user.email "you@example.com"
|
|
181
|
+
\`\`\`
|
|
182
|
+
3. **Initialise your project repo** (if starting fresh)
|
|
183
|
+
\`\`\`
|
|
184
|
+
git init && git add . && git commit -m "chore: initial commit"
|
|
185
|
+
\`\`\`
|
|
186
|
+
|
|
187
|
+
Then re-run \`setup_project\`.`;
|
|
188
|
+
return { content: [{ type: "text", text }] };
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Return a hard-stop response when no git repository exists in the project directory.
|
|
192
|
+
* ForgeCraft cannot guarantee cascade artifact integrity without version control.
|
|
193
|
+
*
|
|
194
|
+
* @returns MCP tool response with init instructions
|
|
195
|
+
*/
|
|
196
|
+
function buildNoRepoResponse() {
|
|
197
|
+
const text = `## ⛔ Git Repository Required
|
|
198
|
+
|
|
199
|
+
ForgeCraft tracks every generated artifact in version control. **A git repository must exist before setup can proceed** — without it ForgeCraft cannot guarantee cascade integrity or metric baselines.
|
|
200
|
+
|
|
201
|
+
No \`.git\` directory was found in this project. To fix this, run:
|
|
202
|
+
|
|
203
|
+
\`\`\`
|
|
204
|
+
git init
|
|
205
|
+
git add .
|
|
206
|
+
git commit -m "chore: initial commit"
|
|
207
|
+
\`\`\`
|
|
208
|
+
|
|
209
|
+
If this is a new project with nothing to commit yet, a single placeholder commit is enough:
|
|
210
|
+
|
|
211
|
+
\`\`\`
|
|
212
|
+
git init
|
|
213
|
+
git commit --allow-empty -m "chore: initial commit"
|
|
214
|
+
\`\`\`
|
|
215
|
+
|
|
216
|
+
Then re-run \`setup_project\`.`;
|
|
217
|
+
return { content: [{ type: "text", text }] };
|
|
218
|
+
}
|
|
143
219
|
/**
|
|
144
220
|
* Filter inferred tag strings to only valid ALL_TAGS values.
|
|
145
221
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-project.js","sourceRoot":"","sources":["../../src/tools/setup-project.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,QAAQ,EACR,aAAa,EACb,WAAW,
|
|
1
|
+
{"version":3,"file":"setup-project.js","sourceRoot":"","sources":["../../src/tools/setup-project.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,cAAc,GACf,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAgEnD,kEAAkE;AAClE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,QAAQ,CAAC,CAAC;AAEjD,yEAAyE;AAEzE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAsB;IAEtB,MAAM,QAAQ,GACZ,IAAI,CAAC,GAAG,KAAK,SAAS;QACtB,IAAI,CAAC,cAAc,KAAK,SAAS;QACjC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;IAEnC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;QAC3B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,UAAU,EAAE,IAAI,CAAC,WAAW;KAC7B,CAAC,CAAC;IAEH,oEAAoE;IACpE,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM;QACzD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,SAAS,KAAK,QAAQ;YAC3B,CAAC,CAAC,kBAAkB,EAAE;YACtB,CAAC,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,aAAa,CAClB;QACE,GAAG,IAAI;QACP,GAAG,EAAE,IAAI,CAAC,GAAI;QACd,cAAc,EAAE,IAAI,CAAC,cAAe;QACpC,aAAa,EAAE,IAAI,CAAC,aAAc;KACnC,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,yEAAyE;AAEzE;;;;;;GAMG;AACH,KAAK,UAAU,aAAa,CAC1B,IAIC,EACD,OAAuB;IAEvB,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAE5C,MAAM,gBAAgB,GACpB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1E,MAAM,aAAa,GAAG,gBAAgB;QACpC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,IAAI,CAAC,qBAAqB;YAC1B,CAAC,CAAC,wBAAwB,CACtB,OAAO,CAAC,YAAY,EACpB,IAAI,CAAC,qBAAqB,CAC3B;YACH,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAE3B,MAAM,SAAS,GAAG,sBAAsB,CACtC,aAAa,EACb,WAAW,EACX,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,CACnB,CAAC;IACF,MAAM,cAAc,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAExD,MAAM,uBAAuB,GAAG,OAAO,CAAC,WAAW;QACjD,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,WAAW,GAAG,uBAAuB;QACzC,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,aAAa,CAAC;QAC5D,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACvB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC/D,CAAC;IAEN,MAAM,WAAW,GAAG,cAAc,CAChC,UAAU,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACT,WAAW,EACX,OAAO,CAAC,YAAY,CACrB,CAAC;IACF,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAsB;QAClC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;QACxC,YAAY,EAAE,IAAI,CAAC,aAAa;QAChC,eAAe,EAAE,IAAI,CAAC,gBAAgB;KACvC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACrE,MAAM,UAAU,GAAG,OAAO;QACxB,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC;QAClE,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,eAAe,GAAG,OAAO;QAC7B,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC;QACvE,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,oBAAoB,GACxB,IAAI,CAAC,iBAAiB,KAAK,iBAAiB;QAC1C,CAAC,CAAC,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC;QAC7C,CAAC,CAAC,KAAK,CAAC;IAEZ,MAAM,iBAAiB,GAAG,CACxB,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAClD,CAAC;IACX,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC;QAClD,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,CAAC,QAAQ,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IAE3D,MAAM,aAAa,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAEnD,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC;YACxB,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,UAAU;YACvB,kBAAkB,EAAE,IAAI;YACxB,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE;gBAChB,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,KAAK;oBAC/B,CAAC,CAAC,CAAC,YAAY,EAAE,gBAAgB,CAAC;oBAClC,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAC,CAAC;QACH,cAAc,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAE9C,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,SAAS;QACT,IAAI,EAAE,aAAa;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,aAAa,EAAE,IAAI,CAAC,cAAc;QAClC,YAAY,EAAE,IAAI,CAAC,aAAa;QAChC,UAAU;QACV,eAAe;QACf,oBAAoB;QACpB,eAAe,EAAE,IAAI,CAAC,iBAAiB;QACvC,WAAW;QACX,YAAY;QACZ,aAAa,EAAE,WAAW;QAC1B,cAAc;QACd,UAAU;QACV,cAAc,EAAE,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC;QACrE,aAAa,EAAE,WAAW,CACxB,UAAU,EACV,WAAW,EACX,aAAa,EACb,OAAO,CAAC,WAAW,CACpB;QACD,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC;QAC1C,iBAAiB,EAAE,eAAe,CAAC,UAAU,CAAC;QAC9C,aAAa;QACb,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,yEAAyE;AAEzE;;;;;GAKG;AACH,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;+BAiBgB,CAAC;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;+BAmBgB,CAAC;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,UAAkB;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAG9D,CAAC;QACF,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAE3B,CAAC;QACd,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,YAA+B,EAC/B,QAAgB;IAEhB,MAAM,WAAW,GAAuC;QACtD,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;QAC3B,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;QACzB,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;QACzB,OAAO,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;QACjC,aAAa,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC;QAC9C,SAAS,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;QACtC,aAAa,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC;KAC/C,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -39,6 +39,15 @@ export declare const DEPLOYMENT_TAGS: Set<string>;
|
|
|
39
39
|
* @returns Array of detected ambiguity items
|
|
40
40
|
*/
|
|
41
41
|
export declare function detectSpecAmbiguities(text: string, inferredTags: string[]): AmbiguityItem[];
|
|
42
|
+
/**
|
|
43
|
+
* Detect when a spec conflates a generative tool with a specific named creative
|
|
44
|
+
* output that the tool would produce. Returns an AmbiguityItem when both signals
|
|
45
|
+
* are present, or null when the spec is clearly about just one of them.
|
|
46
|
+
*
|
|
47
|
+
* @param text - Full spec text
|
|
48
|
+
* @returns AmbiguityItem or null
|
|
49
|
+
*/
|
|
50
|
+
export declare function detectToolSampleConflation(text: string): AmbiguityItem | null;
|
|
42
51
|
/**
|
|
43
52
|
* Keywords that imply sensitive data handling.
|
|
44
53
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-parser-tags.d.ts","sourceRoot":"","sources":["../../src/tools/spec-parser-tags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,iGAAiG;IACjG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;QACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC,CAAC;CACJ;AAID,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CA4EA,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASxD;AAID,uHAAuH;AACvH,eAAO,MAAM,cAAc,QAA2B,CAAC;AAEvD,eAAO,MAAM,eAAe,aAO1B,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,GACrB,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"spec-parser-tags.d.ts","sourceRoot":"","sources":["../../src/tools/spec-parser-tags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,iGAAiG;IACjG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;QACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC,CAAC;CACJ;AAID,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CA4EA,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASxD;AAID,uHAAuH;AACvH,eAAO,MAAM,cAAc,QAA2B,CAAC;AAEvD,eAAO,MAAM,eAAe,aAO1B,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,GACrB,aAAa,EAAE,CAyCjB;AAwCD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAkD7E;AAID;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EA4BpD,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAM3C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,EACvE,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAiBT"}
|
|
@@ -143,8 +143,100 @@ export function detectSpecAmbiguities(text, inferredTags) {
|
|
|
143
143
|
],
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
|
+
const conflation = detectToolSampleConflation(text);
|
|
147
|
+
if (conflation) {
|
|
148
|
+
ambiguities.push(conflation);
|
|
149
|
+
}
|
|
146
150
|
return ambiguities;
|
|
147
151
|
}
|
|
152
|
+
// ── Tool vs. sample-output conflation detection ───────────────────────
|
|
153
|
+
/**
|
|
154
|
+
* Signals that the spec describes a generative AI / creative tool being built.
|
|
155
|
+
* Looks for AI system capability descriptions, not just incidental AI mentions.
|
|
156
|
+
*/
|
|
157
|
+
const GENERATIVE_TOOL_PATTERNS = [
|
|
158
|
+
// Named AI creative roles
|
|
159
|
+
/\b(AI|automated?|autonomous?|intelligent)\s+(ghostwriter|composer|artist|writer|storyteller|narrator|creator|generator|designer|director|musician|author|painter|illustrator)\b/i,
|
|
160
|
+
// Generative AI technology being built
|
|
161
|
+
/\b(build|create|develop|make)\s+(an?\s+)?(AI|ML|LLM|generative|diffusion)\s+\w+\s+(that|to|for)\s+(generates?|creates?|writes?|produces?|composes?|renders?)\b/i,
|
|
162
|
+
// Capability described: "generates novels", "writes stories", "composes music"
|
|
163
|
+
/\b(generates?|creates?|produces?|writes?|composes?|renders?)\s+(novels?|books?|stories?|music|songs?|artworks?|images?|paintings?|games?|levels?|scripts?|content|narratives?|poems?|lyrics?)\b/i,
|
|
164
|
+
// Stable diffusion / text-to-X pattern
|
|
165
|
+
/\b(stable diffusion|diffusion model|text[\s-]to[\s-](image|video|music|speech|art|story|game)|LLM|language model|GPT|fine[\s-]tun)\b/i,
|
|
166
|
+
// "AI-powered [creative thing]"
|
|
167
|
+
/\bAI[\s-]powered\s+(writing|story|music|art|game|content|creative)\b/i,
|
|
168
|
+
];
|
|
169
|
+
/**
|
|
170
|
+
* Signals that the spec describes a specific named creative output —
|
|
171
|
+
* something the tool would produce rather than the tool itself.
|
|
172
|
+
*/
|
|
173
|
+
const NAMED_CREATIVE_OUTPUT_PATTERNS = [
|
|
174
|
+
// Quoted title-case multi-word title: "The Chronicles of Something"
|
|
175
|
+
/["']([A-Z][a-z]+([ '-][A-Za-z]+){1,6})["']/,
|
|
176
|
+
// Named character/protagonist/villain
|
|
177
|
+
/\b(character|protagonist|hero|villain|antagonist|player character|main character)\s+(named?|called?)\s+["']?[A-Z][a-z]+/i,
|
|
178
|
+
// Specific world or setting with proper noun
|
|
179
|
+
/\b(set in|takes place in|world of|the world named?|realm of|universe of)\s+["']?[A-Z][a-zA-Z\s]{2,25}["']?/i,
|
|
180
|
+
// "the first [novel/game/song/...] will be" — explicit sample language
|
|
181
|
+
/\bthe\s+(first|initial|sample|demo|example|pilot|showcase)\s+(novel|book|game|song|album|artwork?|story|level|episode|chapter|track|piece|composition)\b/i,
|
|
182
|
+
// Structural creative content markers: "Chapter 1:", "Act 1 —"
|
|
183
|
+
/\b(chapter|act|scene|episode|part)\s+\d+\s*[:\-—]/i,
|
|
184
|
+
// Specific plot/story beat language
|
|
185
|
+
/\b(plot|storyline|narrative arc|character arc|backstory|lore|world[\s-]build)\b.{0,80}\b(specific|detailed|complete|full)\b/i,
|
|
186
|
+
];
|
|
187
|
+
/**
|
|
188
|
+
* Detect when a spec conflates a generative tool with a specific named creative
|
|
189
|
+
* output that the tool would produce. Returns an AmbiguityItem when both signals
|
|
190
|
+
* are present, or null when the spec is clearly about just one of them.
|
|
191
|
+
*
|
|
192
|
+
* @param text - Full spec text
|
|
193
|
+
* @returns AmbiguityItem or null
|
|
194
|
+
*/
|
|
195
|
+
export function detectToolSampleConflation(text) {
|
|
196
|
+
const toolSignals = [];
|
|
197
|
+
for (const pattern of GENERATIVE_TOOL_PATTERNS) {
|
|
198
|
+
const match = text.match(pattern);
|
|
199
|
+
if (match) {
|
|
200
|
+
toolSignals.push(match[0].trim().replace(/\s+/g, " ").slice(0, 60));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (toolSignals.length === 0)
|
|
204
|
+
return null;
|
|
205
|
+
const contentSignals = [];
|
|
206
|
+
for (const pattern of NAMED_CREATIVE_OUTPUT_PATTERNS) {
|
|
207
|
+
const match = text.match(pattern);
|
|
208
|
+
if (match) {
|
|
209
|
+
contentSignals.push(match[0].trim().replace(/\s+/g, " ").slice(0, 60));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (contentSignals.length === 0)
|
|
213
|
+
return null;
|
|
214
|
+
return {
|
|
215
|
+
field: "tool_vs_sample_output",
|
|
216
|
+
signals: [
|
|
217
|
+
`Generative tool described: "${toolSignals[0]}"`,
|
|
218
|
+
`Specific creative output described: "${contentSignals[0]}"`,
|
|
219
|
+
],
|
|
220
|
+
interpretations: [
|
|
221
|
+
{
|
|
222
|
+
label: "tool_and_sample",
|
|
223
|
+
description: "Build the core tool; treat the named creative work as the first real deliverable",
|
|
224
|
+
consequence: "PRD focuses on the generative system. A docs/sample-outcome.md is created " +
|
|
225
|
+
"with the specific creative work details as the first acceptance test.",
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
label: "tool_only",
|
|
229
|
+
description: "Build the core tool only; the named creative work is illustrative, not a deliverable",
|
|
230
|
+
consequence: "Named creative content is treated as usage examples only. No sample-outcome artifact is created.",
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
label: "content_only",
|
|
234
|
+
description: "The goal is to produce the specific named creative work; the tool is a means, not the end",
|
|
235
|
+
consequence: "PRD focuses on delivering the creative work itself. Tool requirements are implementation details.",
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
};
|
|
239
|
+
}
|
|
148
240
|
// ── Sensitive data detection ──────────────────────────────────────────
|
|
149
241
|
/**
|
|
150
242
|
* Keywords that imply sensitive data handling.
|