forgecraft-mcp 1.1.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.
Files changed (142) hide show
  1. package/README.md +525 -525
  2. package/dist/cli/help.js +44 -44
  3. package/dist/registry/renderer-skeletons.js +92 -92
  4. package/dist/shared/gs-score-logger.js +6 -6
  5. package/dist/tools/add-module.js +123 -123
  6. package/dist/tools/advice-registry.js +18 -18
  7. package/dist/tools/check-cascade-report.js +64 -64
  8. package/dist/tools/configure-mcp.d.ts +3 -0
  9. package/dist/tools/configure-mcp.d.ts.map +1 -1
  10. package/dist/tools/configure-mcp.js +10 -0
  11. package/dist/tools/configure-mcp.js.map +1 -1
  12. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  13. package/dist/tools/forgecraft-dispatch.js +3 -0
  14. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  15. package/dist/tools/forgecraft-schema-params.d.ts +9 -0
  16. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  17. package/dist/tools/forgecraft-schema-params.js +21 -0
  18. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  19. package/dist/tools/forgecraft-schema.d.ts +9 -0
  20. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  21. package/dist/tools/refresh-output.js +14 -14
  22. package/dist/tools/scaffold-spec-stubs.d.ts +43 -0
  23. package/dist/tools/scaffold-spec-stubs.d.ts.map +1 -1
  24. package/dist/tools/scaffold-spec-stubs.js +166 -24
  25. package/dist/tools/scaffold-spec-stubs.js.map +1 -1
  26. package/dist/tools/scaffold-templates.js +62 -62
  27. package/dist/tools/scaffold-writer.d.ts.map +1 -1
  28. package/dist/tools/scaffold-writer.js +11 -3
  29. package/dist/tools/scaffold-writer.js.map +1 -1
  30. package/dist/tools/setup-artifact-writers.d.ts +30 -0
  31. package/dist/tools/setup-artifact-writers.d.ts.map +1 -1
  32. package/dist/tools/setup-artifact-writers.js +120 -8
  33. package/dist/tools/setup-artifact-writers.js.map +1 -1
  34. package/dist/tools/setup-phase1.d.ts +3 -0
  35. package/dist/tools/setup-phase1.d.ts.map +1 -1
  36. package/dist/tools/setup-phase1.js +79 -35
  37. package/dist/tools/setup-phase1.js.map +1 -1
  38. package/dist/tools/setup-phase2.d.ts +2 -0
  39. package/dist/tools/setup-phase2.d.ts.map +1 -1
  40. package/dist/tools/setup-phase2.js +10 -1
  41. package/dist/tools/setup-phase2.js.map +1 -1
  42. package/dist/tools/setup-project.d.ts +18 -0
  43. package/dist/tools/setup-project.d.ts.map +1 -1
  44. package/dist/tools/setup-project.js +77 -1
  45. package/dist/tools/setup-project.js.map +1 -1
  46. package/dist/tools/spec-parser-tags.d.ts +9 -0
  47. package/dist/tools/spec-parser-tags.d.ts.map +1 -1
  48. package/dist/tools/spec-parser-tags.js +92 -0
  49. package/dist/tools/spec-parser-tags.js.map +1 -1
  50. package/package.json +89 -86
  51. package/templates/analytics/instructions.yaml +37 -37
  52. package/templates/analytics/mcp-servers.yaml +11 -11
  53. package/templates/analytics/structure.yaml +25 -25
  54. package/templates/api/instructions.yaml +231 -231
  55. package/templates/api/mcp-servers.yaml +22 -13
  56. package/templates/api/nfr.yaml +23 -23
  57. package/templates/api/review.yaml +103 -103
  58. package/templates/api/structure.yaml +34 -34
  59. package/templates/api/verification.yaml +132 -132
  60. package/templates/cli/instructions.yaml +31 -31
  61. package/templates/cli/mcp-servers.yaml +11 -11
  62. package/templates/cli/review.yaml +53 -53
  63. package/templates/cli/structure.yaml +16 -16
  64. package/templates/data-lineage/instructions.yaml +28 -28
  65. package/templates/data-lineage/mcp-servers.yaml +22 -22
  66. package/templates/data-pipeline/instructions.yaml +84 -84
  67. package/templates/data-pipeline/mcp-servers.yaml +13 -13
  68. package/templates/data-pipeline/nfr.yaml +39 -39
  69. package/templates/data-pipeline/structure.yaml +23 -23
  70. package/templates/fintech/hooks.yaml +55 -55
  71. package/templates/fintech/instructions.yaml +112 -112
  72. package/templates/fintech/mcp-servers.yaml +13 -13
  73. package/templates/fintech/nfr.yaml +46 -46
  74. package/templates/fintech/playbook.yaml +210 -210
  75. package/templates/fintech/verification.yaml +239 -239
  76. package/templates/game/instructions.yaml +289 -289
  77. package/templates/game/mcp-servers.yaml +38 -38
  78. package/templates/game/nfr.yaml +64 -64
  79. package/templates/game/playbook.yaml +214 -214
  80. package/templates/game/review.yaml +97 -97
  81. package/templates/game/structure.yaml +67 -67
  82. package/templates/game/verification.yaml +174 -174
  83. package/templates/healthcare/instructions.yaml +42 -42
  84. package/templates/healthcare/mcp-servers.yaml +13 -13
  85. package/templates/healthcare/nfr.yaml +47 -47
  86. package/templates/hipaa/instructions.yaml +41 -41
  87. package/templates/hipaa/mcp-servers.yaml +13 -13
  88. package/templates/infra/instructions.yaml +104 -104
  89. package/templates/infra/mcp-servers.yaml +20 -20
  90. package/templates/infra/nfr.yaml +46 -46
  91. package/templates/infra/review.yaml +65 -65
  92. package/templates/infra/structure.yaml +25 -25
  93. package/templates/library/instructions.yaml +36 -36
  94. package/templates/library/mcp-servers.yaml +20 -20
  95. package/templates/library/review.yaml +56 -56
  96. package/templates/library/structure.yaml +19 -19
  97. package/templates/medallion-architecture/instructions.yaml +41 -41
  98. package/templates/medallion-architecture/mcp-servers.yaml +22 -22
  99. package/templates/ml/instructions.yaml +85 -85
  100. package/templates/ml/mcp-servers.yaml +11 -11
  101. package/templates/ml/nfr.yaml +39 -39
  102. package/templates/ml/structure.yaml +25 -25
  103. package/templates/ml/verification.yaml +156 -156
  104. package/templates/mobile/instructions.yaml +44 -44
  105. package/templates/mobile/mcp-servers.yaml +11 -11
  106. package/templates/mobile/nfr.yaml +49 -49
  107. package/templates/mobile/structure.yaml +27 -27
  108. package/templates/mobile/verification.yaml +121 -121
  109. package/templates/observability-xray/instructions.yaml +40 -40
  110. package/templates/observability-xray/mcp-servers.yaml +15 -15
  111. package/templates/realtime/instructions.yaml +42 -42
  112. package/templates/realtime/mcp-servers.yaml +13 -13
  113. package/templates/soc2/instructions.yaml +41 -41
  114. package/templates/soc2/mcp-servers.yaml +24 -24
  115. package/templates/social/instructions.yaml +43 -43
  116. package/templates/social/mcp-servers.yaml +24 -24
  117. package/templates/state-machine/instructions.yaml +42 -42
  118. package/templates/state-machine/mcp-servers.yaml +11 -11
  119. package/templates/tools-registry.yaml +164 -164
  120. package/templates/universal/hooks.yaml +531 -531
  121. package/templates/universal/instructions.yaml +1692 -1681
  122. package/templates/universal/mcp-servers.yaml +50 -50
  123. package/templates/universal/nfr.yaml +197 -197
  124. package/templates/universal/reference.yaml +326 -326
  125. package/templates/universal/review.yaml +204 -204
  126. package/templates/universal/skills.yaml +262 -262
  127. package/templates/universal/structure.yaml +67 -67
  128. package/templates/universal/verification.yaml +416 -416
  129. package/templates/web-react/hooks.yaml +44 -44
  130. package/templates/web-react/instructions.yaml +207 -207
  131. package/templates/web-react/mcp-servers.yaml +20 -20
  132. package/templates/web-react/nfr.yaml +27 -27
  133. package/templates/web-react/review.yaml +94 -94
  134. package/templates/web-react/structure.yaml +46 -46
  135. package/templates/web-react/verification.yaml +126 -126
  136. package/templates/web-static/instructions.yaml +115 -115
  137. package/templates/web-static/mcp-servers.yaml +20 -20
  138. package/templates/web3/instructions.yaml +44 -44
  139. package/templates/web3/mcp-servers.yaml +11 -11
  140. package/templates/web3/verification.yaml +159 -159
  141. package/templates/zero-trust/instructions.yaml +41 -41
  142. package/templates/zero-trust/mcp-servers.yaml +15 -15
@@ -1,12 +1,30 @@
1
1
  /**
2
2
  * setup-artifact-writers: Writers for forgecraft.yaml, PRD, use-cases, and git init.
3
3
  */
4
- import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
5
  import { join } from "node:path";
6
6
  import { execSync } from "node:child_process";
7
7
  import yaml from "js-yaml";
8
8
  import { deriveDefaultCascadeDecisions } from "./cascade-defaults.js";
9
- // ── Git initialization ────────────────────────────────────────────────
9
+ /**
10
+ * Check whether a git repository and the git binary are present.
11
+ *
12
+ * Does NOT modify the filesystem. Safe to call at any time.
13
+ *
14
+ * @param projectDir - Absolute path to the project root
15
+ * @returns Current git status for the directory
16
+ */
17
+ export function checkGitStatus(projectDir) {
18
+ if (existsSync(join(projectDir, ".git")))
19
+ return "repo";
20
+ try {
21
+ execSync("git --version", { stdio: "ignore" });
22
+ return "no-repo";
23
+ }
24
+ catch {
25
+ return "no-git";
26
+ }
27
+ }
10
28
  /**
11
29
  * Initialise a git repository in projectDir if one does not already exist.
12
30
  * Falls back gracefully when git is not installed.
@@ -127,7 +145,12 @@ export function writePrd(projectDir, projectName, aiFields, _specContent) {
127
145
  }
128
146
  function buildPrdContent(projectName, aiFields) {
129
147
  const fill = (placeholder) => `<!-- FILL: ${placeholder} -->`;
130
- const listOrFill = (csv, placeholder) => csv ? csv.split(",").map((s) => `- ${s.trim()}`).join("\n") : fill(placeholder);
148
+ const listOrFill = (csv, placeholder) => csv
149
+ ? csv
150
+ .split(",")
151
+ .map((s) => `- ${s.trim()}`)
152
+ .join("\n")
153
+ : fill(placeholder);
131
154
  return [
132
155
  `# ${projectName}\n`,
133
156
  `## Problem\n\n${aiFields.problemStatement ?? fill("describe the problem this project solves")}\n`,
@@ -157,18 +180,107 @@ export function writeUseCases(projectDir, projectName, aiFields, _specContent) {
157
180
  }
158
181
  function buildUseCasesContent(projectName, aiFields) {
159
182
  const fill = (placeholder) => `<!-- FILL: ${placeholder} -->`;
160
- const actors = aiFields.primaryUsers ? aiFields.primaryUsers.split(",").map((s) => s.trim()) : [];
183
+ const actors = aiFields.primaryUsers
184
+ ? aiFields.primaryUsers.split(",").map((s) => s.trim())
185
+ : [];
161
186
  const primaryActor = actors[0] ?? fill("primary actor");
162
187
  const secondaryActor = actors[1] ?? actors[0] ?? fill("secondary actor");
163
188
  const thirdActor = actors[2] ?? actors[0] ?? fill("actor");
164
- const problemContext = aiFields.problemStatement ? aiFields.problemStatement.slice(0, 150).replace(/\n/g, " ") : fill("problem context");
165
- const uc1 = [`## UC-001: Accomplish Primary Goal`, ``, `**Actor**: ${primaryActor}`, `**Precondition**: Actor is authenticated and the system is operational.`, `**Steps**:`, `1. Actor initiates the primary workflow.`, `2. System validates the request and processes the input.`, `3. System returns the result confirming the action was completed.`, `**Outcome**: The actor's goal is achieved. Context: ${problemContext}`].join("\n");
166
- const uc2 = [`## UC-002: Configure and Manage`, ``, `**Actor**: ${secondaryActor}`, `**Precondition**: Actor has appropriate permissions.`, `**Steps**:`, `1. Actor selects the configuration option.`, `2. System presents available options and current state.`, `3. Actor applies changes; system persists the configuration.`, `**Outcome**: Configuration is updated and takes effect immediately.`].join("\n");
167
- const uc3 = [`## UC-003: Review and Observe`, ``, `**Actor**: ${thirdActor}`, `**Precondition**: At least one operation has been completed.`, `**Steps**:`, `1. Actor navigates to the overview section.`, `2. System retrieves and displays the current state and history.`, `3. Actor reviews the information and takes appropriate action.`, `**Outcome**: Actor has a clear picture of the current system state.`].join("\n");
189
+ const problemContext = aiFields.problemStatement
190
+ ? aiFields.problemStatement.slice(0, 150).replace(/\n/g, " ")
191
+ : fill("problem context");
192
+ const uc1 = [
193
+ `## UC-001: Accomplish Primary Goal`,
194
+ ``,
195
+ `**Actor**: ${primaryActor}`,
196
+ `**Precondition**: Actor is authenticated and the system is operational.`,
197
+ `**Steps**:`,
198
+ `1. Actor initiates the primary workflow.`,
199
+ `2. System validates the request and processes the input.`,
200
+ `3. System returns the result confirming the action was completed.`,
201
+ `**Outcome**: The actor's goal is achieved. Context: ${problemContext}`,
202
+ ].join("\n");
203
+ const uc2 = [
204
+ `## UC-002: Configure and Manage`,
205
+ ``,
206
+ `**Actor**: ${secondaryActor}`,
207
+ `**Precondition**: Actor has appropriate permissions.`,
208
+ `**Steps**:`,
209
+ `1. Actor selects the configuration option.`,
210
+ `2. System presents available options and current state.`,
211
+ `3. Actor applies changes; system persists the configuration.`,
212
+ `**Outcome**: Configuration is updated and takes effect immediately.`,
213
+ ].join("\n");
214
+ const uc3 = [
215
+ `## UC-003: Review and Observe`,
216
+ ``,
217
+ `**Actor**: ${thirdActor}`,
218
+ `**Precondition**: At least one operation has been completed.`,
219
+ `**Steps**:`,
220
+ `1. Actor navigates to the overview section.`,
221
+ `2. System retrieves and displays the current state and history.`,
222
+ `3. Actor reviews the information and takes appropriate action.`,
223
+ `**Outcome**: Actor has a clear picture of the current system state.`,
224
+ ].join("\n");
168
225
  return [`# Use Cases — ${projectName}`, ``, uc1, ``, uc2, ``, uc3, ``].join("\n");
169
226
  }
170
227
  // ── Re-export deriveDefaultCascadeDecisions for convenience ──────────
171
228
  export { deriveDefaultCascadeDecisions };
229
+ // ── Sample-outcome writer ─────────────────────────────────────────────
230
+ /**
231
+ * Write docs/sample-outcome.md — a stub for the first real deliverable of
232
+ * a generative tool. Created when Phase 2 receives tool_sample_split = "tool_and_sample".
233
+ *
234
+ * The AI assistant should fill in the sections from the creative content
235
+ * described in the spec (the book, song, game, artwork, etc.).
236
+ * Never overwrites an existing file.
237
+ *
238
+ * @param projectDir - Project root
239
+ * @param toolName - Name of the core generative tool
240
+ * @returns True if the file was written
241
+ */
242
+ export function writeSampleOutcome(projectDir, toolName) {
243
+ const outcomePath = join(projectDir, "docs", "sample-outcome.md");
244
+ if (existsSync(outcomePath))
245
+ return false;
246
+ mkdirSync(join(projectDir, "docs"), { recursive: true });
247
+ const fill = (placeholder) => `<!-- FILL: ${placeholder} -->`;
248
+ const content = [
249
+ `# Sample Outcome — First Real Deliverable`,
250
+ ``,
251
+ `> **What this file is:** The core tool is **${toolName}**. This file captures the`,
252
+ `> first specific creative work the tool will produce — the proof that the tool works.`,
253
+ `> It is an acceptance test, not a deliverable in itself.`,
254
+ `> Read the original spec and extract the creative content details into the sections below.`,
255
+ ``,
256
+ `## The Work`,
257
+ ``,
258
+ `**Title / Name**: ${fill("name of the book, song, game, artwork, etc.")}`,
259
+ `**Type**: ${fill("novel | music track | game | artwork | script | other")}`,
260
+ ``,
261
+ `## Description`,
262
+ ``,
263
+ fill("brief description of what this creative work is — 2-3 sentences from the spec"),
264
+ ``,
265
+ `## Key Elements`,
266
+ ``,
267
+ fill("characters, themes, setting, style, structure — the specifics from the spec"),
268
+ ``,
269
+ `## Acceptance Criteria`,
270
+ ``,
271
+ `The tool has succeeded with this first outcome when:`,
272
+ ``,
273
+ `- [ ] ${fill("first measurable criterion — e.g. 'generates a coherent chapter 1'")}`,
274
+ `- [ ] ${fill("second criterion")}`,
275
+ `- [ ] ${fill("third criterion")}`,
276
+ ``,
277
+ `## Notes`,
278
+ ``,
279
+ fill("anything else from the spec about this specific creative work"),
280
+ ].join("\n");
281
+ writeFileSync(outcomePath, content, "utf-8");
282
+ return true;
283
+ }
172
284
  /**
173
285
  * Load cascade decisions from forgecraft.yaml (convenience re-used in writers).
174
286
  */
@@ -1 +1 @@
1
- {"version":3,"file":"setup-artifact-writers.js","sourceRoot":"","sources":["../../src/tools/setup-artifact-writers.ts"],"names":[],"mappings":"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"}
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,EAAE,kBAAkB,EAA6B,MAAM,qBAAqB,CAAC;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CA2BvE;AAoHD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
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\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
- function buildPhase1Questions() {
111
- return `### Before I proceed, I need three answers:
112
-
113
- **Q1: What is the development stage?**
114
- - \`mvp\` — early validation, expect significant changes, minimal ceremony
115
- - \`production\` shipping to real users, full spec and quality gates required
116
-
117
- **Q2: Is the scope defined and stable?**
118
- - \`complete\` requirements are clear; proceed with full cascade
119
- - \`evolving\` scope is still forming; use lighter cascade, revisit when stable
120
-
121
- **Q3: Does this project have existing users or downstream consumers?**
122
- - \`yes\`behavioral contracts and breaking-change detection are required
123
- - \`no\` — contracts are recommended but not blocking
124
-
125
- Call \`setup_project\` again with \`mvp\`, \`scope_complete\`, and \`has_consumers\` to proceed.`;
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
- return `## Brownfield Project Detected
132
-
133
- I found existing source code. Before we proceed:
134
-
135
- 1. **What is currently broken or incomplete?** (Describe the known issues or missing features)
136
- 2. **What new feature or improvement are you adding?** (Describe the specific change)
137
- 3. **Do tests exist, and do they currently pass?** (Run \`npm test\` or \`pytest\` to check)
138
-
139
- I've generated a reverse-engineered spec stub at \`docs/PRD.md\`. Review and complete it.
140
-
141
- Create a \`work/\` branch before making changes: \`git checkout -b work/forgecraft-setup\`
142
-
143
- Call \`setup_project\` again with \`mvp\`, \`scope_complete\`, and \`has_consumers\` to proceed.`;
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,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,wEAAwE;AAExE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAuB;IACzD,IAAI,IAAI,GAAG,+BAA+B,CAAC;IAC3C,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,IAAI,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,4BAA4B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,0BAA0B,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,IAAI,wBAAwB,EAAE,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,oBAAoB,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,UAAU,EAAE,EAAE,EAAE,CAAC;QACnB,IAAI,IAAI,yBAAyB,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,4DAA4D,CAAC;IACjI,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CACnC,UAA4D;IAE5D,IAAI,KAAK,GAAG,8CAA8C,CAAC;IAC3D,KAAK,IAAI,oGAAoG,CAAC;IAC9G,KAAK,IAAI,oFAAoF,CAAC;IAC9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACtD,KAAK,IAAI,WAAW,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC;IAChF,CAAC;IACD,KAAK,IAAI,oDAAoD,CAAC;IAC9D,KAAK,IAAI,qEAAqE,CAAC;IAC/E,KAAK,IAAI,oFAAoF,CAAC;IAC9F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,QAAgB;IAClD,IAAI,KAAK,GAAG,4BAA4B,QAAQ,QAAQ,CAAC;IACzD,KAAK,IAAI,uFAAuF,CAAC;IACjG,KAAK,IAAI,oFAAoF,CAAC;IAC9F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,WAA4B;IACzD,IAAI,OAAO,GAAG,2BAA2B,CAAC;IAC1C,OAAO,IAAI,6EAA6E,CAAC;IACzF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,IAAI,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC;QACjC,OAAO,IAAI,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,OAAO,IAAI,uBAAuB,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,OAAO,IAAI,MAAM,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC;YACzD,OAAO,IAAI,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,+FAA+F,CAAC;IAC7G,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAuB;IAChD,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAC/G,MAAM,SAAS,GAAG,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACxE,MAAM,WAAW,GAAG,SAAS,IAAI,SAAS,KAAK,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1F,IAAI,OAAO,GAAG,qBAAqB,CAAC;IACpC,OAAO,IAAI,kBAAkB,WAAW,IAAI,CAAC;IAC7C,OAAO,IAAI,eAAe,iBAAiB,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC;IAC5G,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,qBAAqB,cAAc,CAAC,MAAM,2DAA2D,CAAC;IACnH,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,OAAO,IAAI,eAAe,eAAe,IAAI,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,oDAAoD,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,wBAAwB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACrF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB;IAC3B,OAAO;;;;;;;;;;;;;;iGAcwF,CAAC;AAClG,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAC/B,OAAO;;;;;;;;;;;;iGAYwF,CAAC;AAClG,CAAC;AAED,uDAAuD;AACvD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
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,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"}
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":"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"}
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;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"}
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
  *