forgecraft-mcp 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +525 -525
  2. package/dist/artifacts/commit-hooks.d.ts +1 -1
  3. package/dist/artifacts/commit-hooks.d.ts.map +1 -1
  4. package/dist/artifacts/commit-hooks.js +2 -0
  5. package/dist/artifacts/commit-hooks.js.map +1 -1
  6. package/dist/cli/commands.d.ts +35 -1
  7. package/dist/cli/commands.d.ts.map +1 -1
  8. package/dist/cli/commands.js +109 -2
  9. package/dist/cli/commands.js.map +1 -1
  10. package/dist/cli/help.d.ts.map +1 -1
  11. package/dist/cli/help.js +51 -44
  12. package/dist/cli/help.js.map +1 -1
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +10 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/registry/renderer-skeletons.js +92 -92
  17. package/dist/shared/gs-score-logger.js +6 -6
  18. package/dist/shared/result-utils.d.ts +27 -0
  19. package/dist/shared/result-utils.d.ts.map +1 -0
  20. package/dist/shared/result-utils.js +41 -0
  21. package/dist/shared/result-utils.js.map +1 -0
  22. package/dist/tools/add-module.js +123 -123
  23. package/dist/tools/advice-registry.js +18 -18
  24. package/dist/tools/check-cascade-report.js +64 -64
  25. package/dist/tools/close-cycle-helpers.d.ts +21 -2
  26. package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
  27. package/dist/tools/close-cycle-helpers.js +66 -10
  28. package/dist/tools/close-cycle-helpers.js.map +1 -1
  29. package/dist/tools/close-cycle.d.ts +2 -2
  30. package/dist/tools/close-cycle.d.ts.map +1 -1
  31. package/dist/tools/close-cycle.js +1 -1
  32. package/dist/tools/close-cycle.js.map +1 -1
  33. package/dist/tools/configure-mcp.d.ts +3 -0
  34. package/dist/tools/configure-mcp.d.ts.map +1 -1
  35. package/dist/tools/configure-mcp.js +10 -0
  36. package/dist/tools/configure-mcp.js.map +1 -1
  37. package/dist/tools/consolidate-status.d.ts +81 -0
  38. package/dist/tools/consolidate-status.d.ts.map +1 -0
  39. package/dist/tools/consolidate-status.js +251 -0
  40. package/dist/tools/consolidate-status.js.map +1 -0
  41. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  42. package/dist/tools/forgecraft-dispatch.js +13 -0
  43. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  44. package/dist/tools/forgecraft-router.d.ts +8 -0
  45. package/dist/tools/forgecraft-router.d.ts.map +1 -1
  46. package/dist/tools/forgecraft-router.js +21 -1
  47. package/dist/tools/forgecraft-router.js.map +1 -1
  48. package/dist/tools/forgecraft-schema-params.d.ts +13 -4
  49. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  50. package/dist/tools/forgecraft-schema-params.js +21 -0
  51. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  52. package/dist/tools/forgecraft-schema.d.ts +14 -5
  53. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  54. package/dist/tools/forgecraft-schema.js +3 -0
  55. package/dist/tools/forgecraft-schema.js.map +1 -1
  56. package/dist/tools/gate-violations.d.ts +59 -0
  57. package/dist/tools/gate-violations.d.ts.map +1 -0
  58. package/dist/tools/gate-violations.js +152 -0
  59. package/dist/tools/gate-violations.js.map +1 -0
  60. package/dist/tools/generate-session-prompt.d.ts +3 -3
  61. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  62. package/dist/tools/generate-session-prompt.js +57 -15
  63. package/dist/tools/generate-session-prompt.js.map +1 -1
  64. package/dist/tools/refresh-output.js +14 -14
  65. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  66. package/dist/tools/roadmap-builder.js +19 -9
  67. package/dist/tools/roadmap-builder.js.map +1 -1
  68. package/dist/tools/scaffold-spec-stubs.js +115 -115
  69. package/dist/tools/scaffold-templates.js +62 -62
  70. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  71. package/dist/tools/session-prompt-builders.js +34 -10
  72. package/dist/tools/session-prompt-builders.js.map +1 -1
  73. package/dist/tools/setup-artifact-writers.d.ts +30 -0
  74. package/dist/tools/setup-artifact-writers.d.ts.map +1 -1
  75. package/dist/tools/setup-artifact-writers.js +120 -8
  76. package/dist/tools/setup-artifact-writers.js.map +1 -1
  77. package/dist/tools/setup-phase1.d.ts +3 -0
  78. package/dist/tools/setup-phase1.d.ts.map +1 -1
  79. package/dist/tools/setup-phase1.js +79 -35
  80. package/dist/tools/setup-phase1.js.map +1 -1
  81. package/dist/tools/setup-phase2.d.ts +2 -0
  82. package/dist/tools/setup-phase2.d.ts.map +1 -1
  83. package/dist/tools/setup-phase2.js +10 -1
  84. package/dist/tools/setup-phase2.js.map +1 -1
  85. package/dist/tools/setup-project.d.ts +18 -0
  86. package/dist/tools/setup-project.d.ts.map +1 -1
  87. package/dist/tools/setup-project.js +77 -1
  88. package/dist/tools/setup-project.js.map +1 -1
  89. package/dist/tools/spec-parser-tags.d.ts +9 -0
  90. package/dist/tools/spec-parser-tags.d.ts.map +1 -1
  91. package/dist/tools/spec-parser-tags.js +92 -0
  92. package/dist/tools/spec-parser-tags.js.map +1 -1
  93. package/package.json +89 -86
  94. package/templates/analytics/instructions.yaml +37 -37
  95. package/templates/analytics/mcp-servers.yaml +11 -11
  96. package/templates/analytics/structure.yaml +25 -25
  97. package/templates/api/instructions.yaml +231 -231
  98. package/templates/api/mcp-servers.yaml +22 -13
  99. package/templates/api/nfr.yaml +23 -23
  100. package/templates/api/review.yaml +103 -103
  101. package/templates/api/structure.yaml +34 -34
  102. package/templates/api/verification.yaml +132 -132
  103. package/templates/cli/instructions.yaml +31 -31
  104. package/templates/cli/mcp-servers.yaml +11 -11
  105. package/templates/cli/review.yaml +53 -53
  106. package/templates/cli/structure.yaml +16 -16
  107. package/templates/data-lineage/instructions.yaml +28 -28
  108. package/templates/data-lineage/mcp-servers.yaml +22 -22
  109. package/templates/data-pipeline/instructions.yaml +84 -84
  110. package/templates/data-pipeline/mcp-servers.yaml +13 -13
  111. package/templates/data-pipeline/nfr.yaml +39 -39
  112. package/templates/data-pipeline/structure.yaml +23 -23
  113. package/templates/fintech/hooks.yaml +55 -55
  114. package/templates/fintech/instructions.yaml +112 -112
  115. package/templates/fintech/mcp-servers.yaml +13 -13
  116. package/templates/fintech/nfr.yaml +46 -46
  117. package/templates/fintech/playbook.yaml +210 -210
  118. package/templates/fintech/verification.yaml +239 -239
  119. package/templates/game/instructions.yaml +289 -289
  120. package/templates/game/mcp-servers.yaml +38 -38
  121. package/templates/game/nfr.yaml +64 -64
  122. package/templates/game/playbook.yaml +214 -214
  123. package/templates/game/review.yaml +97 -97
  124. package/templates/game/structure.yaml +67 -67
  125. package/templates/game/verification.yaml +174 -174
  126. package/templates/healthcare/instructions.yaml +42 -42
  127. package/templates/healthcare/mcp-servers.yaml +13 -13
  128. package/templates/healthcare/nfr.yaml +47 -47
  129. package/templates/hipaa/instructions.yaml +41 -41
  130. package/templates/hipaa/mcp-servers.yaml +13 -13
  131. package/templates/infra/instructions.yaml +104 -104
  132. package/templates/infra/mcp-servers.yaml +20 -20
  133. package/templates/infra/nfr.yaml +46 -46
  134. package/templates/infra/review.yaml +65 -65
  135. package/templates/infra/structure.yaml +25 -25
  136. package/templates/library/instructions.yaml +36 -36
  137. package/templates/library/mcp-servers.yaml +20 -20
  138. package/templates/library/review.yaml +56 -56
  139. package/templates/library/structure.yaml +19 -19
  140. package/templates/medallion-architecture/instructions.yaml +41 -41
  141. package/templates/medallion-architecture/mcp-servers.yaml +22 -22
  142. package/templates/ml/instructions.yaml +85 -85
  143. package/templates/ml/mcp-servers.yaml +11 -11
  144. package/templates/ml/nfr.yaml +39 -39
  145. package/templates/ml/structure.yaml +25 -25
  146. package/templates/ml/verification.yaml +156 -156
  147. package/templates/mobile/instructions.yaml +44 -44
  148. package/templates/mobile/mcp-servers.yaml +11 -11
  149. package/templates/mobile/nfr.yaml +49 -49
  150. package/templates/mobile/structure.yaml +27 -27
  151. package/templates/mobile/verification.yaml +121 -121
  152. package/templates/observability-xray/instructions.yaml +40 -40
  153. package/templates/observability-xray/mcp-servers.yaml +15 -15
  154. package/templates/realtime/instructions.yaml +42 -42
  155. package/templates/realtime/mcp-servers.yaml +13 -13
  156. package/templates/soc2/instructions.yaml +41 -41
  157. package/templates/soc2/mcp-servers.yaml +24 -24
  158. package/templates/social/instructions.yaml +43 -43
  159. package/templates/social/mcp-servers.yaml +24 -24
  160. package/templates/state-machine/instructions.yaml +42 -42
  161. package/templates/state-machine/mcp-servers.yaml +11 -11
  162. package/templates/tools-registry.yaml +164 -164
  163. package/templates/universal/hooks.yaml +723 -531
  164. package/templates/universal/instructions.yaml +1692 -1692
  165. package/templates/universal/mcp-servers.yaml +50 -50
  166. package/templates/universal/nfr.yaml +197 -197
  167. package/templates/universal/reference.yaml +326 -326
  168. package/templates/universal/review.yaml +204 -204
  169. package/templates/universal/skills.yaml +262 -262
  170. package/templates/universal/structure.yaml +67 -67
  171. package/templates/universal/verification.yaml +416 -416
  172. package/templates/web-react/hooks.yaml +44 -44
  173. package/templates/web-react/instructions.yaml +207 -207
  174. package/templates/web-react/mcp-servers.yaml +20 -20
  175. package/templates/web-react/nfr.yaml +27 -27
  176. package/templates/web-react/review.yaml +94 -94
  177. package/templates/web-react/structure.yaml +46 -46
  178. package/templates/web-react/verification.yaml +126 -126
  179. package/templates/web-static/instructions.yaml +115 -115
  180. package/templates/web-static/mcp-servers.yaml +20 -20
  181. package/templates/web3/instructions.yaml +44 -44
  182. package/templates/web3/mcp-servers.yaml +11 -11
  183. package/templates/web3/verification.yaml +159 -159
  184. package/templates/zero-trust/instructions.yaml +41 -41
  185. package/templates/zero-trust/mcp-servers.yaml +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-schema.js","sourceRoot":"","sources":["../../src/tools/forgecraft-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forgecraft-schema.js","sourceRoot":"","sources":["../../src/tools/forgecraft-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * gate-violations tool.
3
+ *
4
+ * Reads .forgecraft/gate-violations.jsonl and surfaces active violations
5
+ * (those newer than the last git commit). Stale violations (from before
6
+ * the last commit) are shown separately so history is preserved.
7
+ */
8
+ import { z } from "zod";
9
+ import type { ToolResult } from "../shared/types.js";
10
+ export declare const readGateViolationsSchema: z.ZodObject<{
11
+ project_dir: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ project_dir: string;
14
+ }, {
15
+ project_dir: string;
16
+ }>;
17
+ export type ReadGateViolationsInput = z.infer<typeof readGateViolationsSchema>;
18
+ export interface GateViolation {
19
+ readonly hook: string;
20
+ readonly severity: string;
21
+ readonly message: string;
22
+ readonly timestamp: string;
23
+ }
24
+ export interface GateViolationReport {
25
+ readonly active: ReadonlyArray<GateViolation>;
26
+ readonly stale: ReadonlyArray<GateViolation>;
27
+ readonly lastCommitAt: string | null;
28
+ }
29
+ /**
30
+ * Read gate violations from the project's .forgecraft directory.
31
+ *
32
+ * @param args - Validated input containing project directory
33
+ * @returns MCP tool result with formatted violation report
34
+ */
35
+ export declare function readGateViolationsHandler(args: ReadGateViolationsInput): Promise<ToolResult>;
36
+ /**
37
+ * Build a GateViolationReport from the project directory.
38
+ * Violations newer than the last commit are "active"; older ones are "stale".
39
+ *
40
+ * @param projectDir - Absolute path to project root
41
+ * @returns Violation report partitioned into active and stale
42
+ */
43
+ export declare function buildGateViolationReport(projectDir: string): GateViolationReport;
44
+ /**
45
+ * Read and parse the gate-violations.jsonl file.
46
+ * Returns an empty array when the file is absent or unreadable.
47
+ *
48
+ * @param projectDir - Absolute path to project root
49
+ * @returns Array of parsed gate violations
50
+ */
51
+ export declare function readViolationsFile(projectDir: string): ReadonlyArray<GateViolation>;
52
+ /**
53
+ * Format a GateViolationReport as a human-readable markdown block.
54
+ *
55
+ * @param report - The violation report to format
56
+ * @returns Formatted markdown text
57
+ */
58
+ export declare function formatGateViolationReport(report: GateViolationReport): string;
59
+ //# sourceMappingURL=gate-violations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-violations.d.ts","sourceRoot":"","sources":["../../src/tools/gate-violations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAI/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAID;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAMrB;AAID;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAsBrB;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,aAAa,CAAC,aAAa,CAAC,CA4B9B;AA0BD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAiC7E"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * gate-violations tool.
3
+ *
4
+ * Reads .forgecraft/gate-violations.jsonl and surfaces active violations
5
+ * (those newer than the last git commit). Stale violations (from before
6
+ * the last commit) are shown separately so history is preserved.
7
+ */
8
+ import { z } from "zod";
9
+ import { existsSync, readFileSync } from "node:fs";
10
+ import { join, resolve } from "node:path";
11
+ import { execSync } from "node:child_process";
12
+ // ── Schema ──────────────────────────────────────────────────────────────
13
+ export const readGateViolationsSchema = z.object({
14
+ project_dir: z.string().describe("Absolute path to the project root."),
15
+ });
16
+ // ── Handler ─────────────────────────────────────────────────────────────
17
+ /**
18
+ * Read gate violations from the project's .forgecraft directory.
19
+ *
20
+ * @param args - Validated input containing project directory
21
+ * @returns MCP tool result with formatted violation report
22
+ */
23
+ export async function readGateViolationsHandler(args) {
24
+ const projectDir = resolve(args.project_dir);
25
+ const report = buildGateViolationReport(projectDir);
26
+ return {
27
+ content: [{ type: "text", text: formatGateViolationReport(report) }],
28
+ };
29
+ }
30
+ // ── Core builder ────────────────────────────────────────────────────────
31
+ /**
32
+ * Build a GateViolationReport from the project directory.
33
+ * Violations newer than the last commit are "active"; older ones are "stale".
34
+ *
35
+ * @param projectDir - Absolute path to project root
36
+ * @returns Violation report partitioned into active and stale
37
+ */
38
+ export function buildGateViolationReport(projectDir) {
39
+ const lastCommitAt = readLastCommitTimestamp(projectDir);
40
+ const allViolations = readViolationsFile(projectDir);
41
+ if (lastCommitAt === null) {
42
+ return { active: allViolations, stale: [], lastCommitAt: null };
43
+ }
44
+ const lastCommitMs = new Date(lastCommitAt).getTime();
45
+ const active = [];
46
+ const stale = [];
47
+ for (const v of allViolations) {
48
+ const violationMs = new Date(v.timestamp).getTime();
49
+ if (isNaN(violationMs) || violationMs > lastCommitMs) {
50
+ active.push(v);
51
+ }
52
+ else {
53
+ stale.push(v);
54
+ }
55
+ }
56
+ return { active, stale, lastCommitAt };
57
+ }
58
+ // ── File readers ────────────────────────────────────────────────────────
59
+ /**
60
+ * Read and parse the gate-violations.jsonl file.
61
+ * Returns an empty array when the file is absent or unreadable.
62
+ *
63
+ * @param projectDir - Absolute path to project root
64
+ * @returns Array of parsed gate violations
65
+ */
66
+ export function readViolationsFile(projectDir) {
67
+ const filePath = join(projectDir, ".forgecraft", "gate-violations.jsonl");
68
+ if (!existsSync(filePath))
69
+ return [];
70
+ try {
71
+ const lines = readFileSync(filePath, "utf-8")
72
+ .split("\n")
73
+ .map((l) => l.trim())
74
+ .filter((l) => l.length > 0);
75
+ return lines
76
+ .map((line) => {
77
+ try {
78
+ const parsed = JSON.parse(line);
79
+ return {
80
+ hook: String(parsed["hook"] ?? "unknown"),
81
+ severity: String(parsed["severity"] ?? "error"),
82
+ message: String(parsed["message"] ?? ""),
83
+ timestamp: String(parsed["timestamp"] ?? ""),
84
+ };
85
+ }
86
+ catch {
87
+ return null;
88
+ }
89
+ })
90
+ .filter((v) => v !== null);
91
+ }
92
+ catch {
93
+ return [];
94
+ }
95
+ }
96
+ /**
97
+ * Get the ISO timestamp of the last git commit in the project.
98
+ * Returns null when .git is absent or git is unavailable.
99
+ *
100
+ * @param projectDir - Absolute path to project root
101
+ * @returns ISO 8601 timestamp string or null
102
+ */
103
+ function readLastCommitTimestamp(projectDir) {
104
+ if (!existsSync(join(projectDir, ".git")))
105
+ return null;
106
+ try {
107
+ const raw = execSync("git log -1 --format=%cI", {
108
+ cwd: projectDir,
109
+ stdio: ["pipe", "pipe", "pipe"],
110
+ })
111
+ .toString()
112
+ .trim();
113
+ return raw.length > 0 ? raw : null;
114
+ }
115
+ catch {
116
+ return null;
117
+ }
118
+ }
119
+ // ── Formatter ───────────────────────────────────────────────────────────
120
+ /**
121
+ * Format a GateViolationReport as a human-readable markdown block.
122
+ *
123
+ * @param report - The violation report to format
124
+ * @returns Formatted markdown text
125
+ */
126
+ export function formatGateViolationReport(report) {
127
+ if (report.active.length === 0 && report.stale.length === 0) {
128
+ return "## Gate Violations\n\nNo violations recorded. Last commit gate was clean.";
129
+ }
130
+ const lines = ["## Gate Violations"];
131
+ if (report.lastCommitAt) {
132
+ lines.push(`_Last commit: ${report.lastCommitAt}_`);
133
+ }
134
+ lines.push("");
135
+ if (report.active.length > 0) {
136
+ lines.push(`### ❌ Active (${report.active.length}) — from after last commit`);
137
+ for (const v of report.active) {
138
+ lines.push(`- **${v.hook}** [${v.severity}]: ${v.message}`);
139
+ lines.push(` _${v.timestamp}_`);
140
+ }
141
+ lines.push("");
142
+ }
143
+ if (report.stale.length > 0) {
144
+ lines.push(`### ⚪ Stale (${report.stale.length}) — cleared by last commit`);
145
+ for (const v of report.stale) {
146
+ lines.push(`- ~~${v.hook}~~: ${v.message}`);
147
+ }
148
+ lines.push("");
149
+ }
150
+ return lines.join("\n");
151
+ }
152
+ //# sourceMappingURL=gate-violations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-violations.js","sourceRoot":"","sources":["../../src/tools/gate-violations.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import { z } from "zod";
10
10
  import type { ToolResult, ToolAmbiguity } from "../shared/types.js";
11
- export type { ArtifactContext, PromptBuildInput, McpServerYamlEntry, McpServersYaml } from "./session-prompt-builders.js";
11
+ export type { ArtifactContext, PromptBuildInput, McpServerYamlEntry, McpServersYaml, } from "./session-prompt-builders.js";
12
12
  export { buildPrompt, loadMcpServerDescriptions, buildMcpToolsSection, FORGECRAFT_PRIMARY_USE, discoverArtifacts, readStatusSummary, buildDefaultCriteria, } from "./session-prompt-builders.js";
13
13
  export { isPlaceholderTestScript, deriveTestCommand, isServerConfigured, buildContextLoadBlock, buildTddGateSection, buildContextRetrievalSection, buildExecutionLoopSection, } from "./session-prompt-sections.js";
14
14
  export declare const generateSessionPromptSchema: z.ZodObject<{
@@ -20,7 +20,7 @@ export declare const generateSessionPromptSchema: z.ZodObject<{
20
20
  session_type: z.ZodDefault<z.ZodEnum<["feature", "fix", "refactor", "test", "docs", "chore"]>>;
21
21
  }, "strip", z.ZodTypeAny, {
22
22
  project_dir: string;
23
- session_type: "docs" | "test" | "feature" | "fix" | "refactor" | "chore";
23
+ session_type: "docs" | "test" | "fix" | "refactor" | "chore" | "feature";
24
24
  item_description?: string | undefined;
25
25
  acceptance_criteria?: string[] | undefined;
26
26
  scope_note?: string | undefined;
@@ -30,7 +30,7 @@ export declare const generateSessionPromptSchema: z.ZodObject<{
30
30
  item_description?: string | undefined;
31
31
  acceptance_criteria?: string[] | undefined;
32
32
  scope_note?: string | undefined;
33
- session_type?: "docs" | "test" | "feature" | "fix" | "refactor" | "chore" | undefined;
33
+ session_type?: "docs" | "test" | "fix" | "refactor" | "chore" | "feature" | undefined;
34
34
  roadmap_item_id?: string | undefined;
35
35
  }>;
36
36
  export type GenerateSessionPromptInput = z.infer<typeof generateSessionPromptSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"generate-session-prompt.d.ts","sourceRoot":"","sources":["../../src/tools/generate-session-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUpE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC1H,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;EAqCtC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAIrF;;;;;;;;;;;GAWG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,UAAU,CAAC,CA0ErB;AAwDD,YAAY,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"generate-session-prompt.d.ts","sourceRoot":"","sources":["../../src/tools/generate-session-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAapE,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;EAuCtC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,2BAA2B,CACnC,CAAC;AAIF;;;;;;;;;;;GAWG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,UAAU,CAAC,CAyGrB;AAmFD,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -10,9 +10,10 @@ import { z } from "zod";
10
10
  import { resolve, join } from "node:path";
11
11
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
12
12
  import { runCascadeChecks, isCascadeComplete, buildGuidedRemediation, loadCascadeDecisions, } from "./check-cascade.js";
13
- import { findNextRoadmapItem } from "./close-cycle.js";
13
+ import { findNextRoadmapItem, parseRoadmapItems } from "./close-cycle.js";
14
14
  import { detectSpecRoadmapDrift } from "../shared/drift-detector.js";
15
- import { buildPrompt, discoverArtifacts, readStatusSummary, buildDefaultCriteria, buildRoadmapItemAmbiguity, } from "./session-prompt-builders.js";
15
+ import { buildPrompt, discoverArtifacts, buildDefaultCriteria, buildRoadmapItemAmbiguity, } from "./session-prompt-builders.js";
16
+ import { buildConsolidatedStatus, formatConsolidatedStatus, } from "./consolidate-status.js";
16
17
  export { buildPrompt, loadMcpServerDescriptions, buildMcpToolsSection, FORGECRAFT_PRIMARY_USE, discoverArtifacts, readStatusSummary, buildDefaultCriteria, } from "./session-prompt-builders.js";
17
18
  export { isPlaceholderTestScript, deriveTestCommand, isServerConfigured, buildContextLoadBlock, buildTddGateSection, buildContextRetrievalSection, buildExecutionLoopSection, } from "./session-prompt-sections.js";
18
19
  // ── Schema ───────────────────────────────────────────────────────────
@@ -66,13 +67,16 @@ export async function generateSessionPromptHandler(args) {
66
67
  if (!isCascadeComplete(cascadeSteps)) {
67
68
  const guidance = buildGuidedRemediation(cascadeSteps);
68
69
  return {
69
- content: [{
70
+ content: [
71
+ {
70
72
  type: "text",
71
73
  text: `## Session Prompt Blocked — Cascade Incomplete\n\n` +
72
74
  `A session prompt cannot be generated until the derivation cascade is complete.\n` +
73
75
  `The cascade ensures each implementation session is fully derivable from the spec,\n` +
74
- `eliminating context guessing and specification drift.\n\n` + guidance,
75
- }],
76
+ `eliminating context guessing and specification drift.\n\n` +
77
+ guidance,
78
+ },
79
+ ],
76
80
  };
77
81
  }
78
82
  const driftResult = detectSpecRoadmapDrift(projectDir);
@@ -89,19 +93,37 @@ export async function generateSessionPromptHandler(args) {
89
93
  ? "docs/roadmap.md has no pending items — all roadmap items are complete."
90
94
  : "No docs/roadmap.md found. Run generate_roadmap first, or provide item_description.";
91
95
  return {
92
- content: [{
96
+ content: [
97
+ {
93
98
  type: "text",
94
99
  text: `## Session Prompt Blocked — No Item to Generate\n\n${hint}\n\n` +
95
100
  `Provide \`item_description\` explicitly or run \`generate_roadmap\` to create a roadmap.`,
96
- }],
101
+ },
102
+ ],
97
103
  };
98
104
  }
99
105
  resolvedDescription = roadmapItem.title;
100
106
  resolvedItemId = roadmapItem.id;
101
107
  markRoadmapItemInProgress(projectDir, roadmapItem.id);
102
108
  }
109
+ if (resolvedItemId) {
110
+ const blockers = checkDagDependencies(projectDir, resolvedItemId);
111
+ if (blockers && blockers.length > 0) {
112
+ return {
113
+ content: [
114
+ {
115
+ type: "text",
116
+ text: `## Session Prompt Blocked — Unmet Dependencies\n\n` +
117
+ `**${resolvedItemId}** cannot be started until the following items are done:\n\n` +
118
+ blockers.map((id) => `- ${id}`).join("\n") +
119
+ `\n\nComplete those items first, then run \`generate_session_prompt\` with \`roadmap_item_id="${resolvedItemId}"\`.`,
120
+ },
121
+ ],
122
+ };
123
+ }
124
+ }
103
125
  const artifacts = discoverArtifacts(projectDir);
104
- const statusSummary = readStatusSummary(projectDir);
126
+ const statusSummary = formatConsolidatedStatus(buildConsolidatedStatus(projectDir));
105
127
  const criteria = args.acceptance_criteria ?? buildDefaultCriteria(resolvedDescription);
106
128
  const prompt = buildPrompt({
107
129
  projectDir,
@@ -118,7 +140,9 @@ export async function generateSessionPromptHandler(args) {
118
140
  const header = resolvedItemId
119
141
  ? `## Session Prompt — ${resolvedItemId}: ${resolvedDescription}\n> Persisted to docs/session-prompts/${resolvedItemId}.md\n\n`
120
142
  : "";
121
- const driftBanner = driftResult.driftDetected ? `> ${driftResult.message}\n\n` : "";
143
+ const driftBanner = driftResult.driftDetected
144
+ ? `> ${driftResult.message}\n\n`
145
+ : "";
122
146
  return {
123
147
  content: [{ type: "text", text: driftBanner + header + prompt }],
124
148
  ...(ambiguities ? { ambiguities: [ambiguities] } : {}),
@@ -137,14 +161,12 @@ function findRoadmapItemById(projectDir, itemId) {
137
161
  if (!existsSync(roadmapPath))
138
162
  return null;
139
163
  const content = readFileSync(roadmapPath, "utf-8");
140
- const escapedId = itemId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
141
- const match = content.match(new RegExp(`\\|\\s*(${escapedId})\\s*\\|\\s*([^|]+)\\s*\\|`));
142
- if (!match)
143
- return null;
144
- return { id: match[1].trim(), title: match[2].trim() };
164
+ const item = parseRoadmapItems(content).find((i) => i.id === itemId);
165
+ return item ? { id: item.id, title: item.title } : null;
145
166
  }
146
167
  /**
147
168
  * Mark a roadmap item as in-progress in docs/roadmap.md.
169
+ * Works for both 4-column (legacy) and 5-column (current) formats.
148
170
  *
149
171
  * @param projectDir - Absolute path to project root
150
172
  * @param itemId - Roadmap item ID to mark
@@ -155,10 +177,30 @@ function markRoadmapItemInProgress(projectDir, itemId) {
155
177
  return;
156
178
  const content = readFileSync(roadmapPath, "utf-8");
157
179
  const escapedId = itemId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
158
- const updated = content.replace(new RegExp(`(\\|\\s*${escapedId}\\s*\\|[^|]+\\|)\\s*pending\\s*(\\|)`), "$1 in-progress $2");
180
+ const updated = content.replace(new RegExp(`(\\|\\s*${escapedId}\\s*\\|[^\\n]*)\\bpending\\b`, "g"), "$1in-progress");
159
181
  if (updated !== content)
160
182
  writeFileSync(roadmapPath, updated, "utf-8");
161
183
  }
184
+ /**
185
+ * Check whether a roadmap item's DAG dependencies are all done.
186
+ * Returns the list of blocking dependency IDs, or null if no roadmap/item found.
187
+ *
188
+ * @param projectDir - Absolute path to project root
189
+ * @param itemId - Roadmap item ID to check
190
+ * @returns Array of pending dependency IDs (empty = unblocked), or null if item not found
191
+ */
192
+ function checkDagDependencies(projectDir, itemId) {
193
+ const roadmapPath = join(projectDir, "docs", "roadmap.md");
194
+ if (!existsSync(roadmapPath))
195
+ return null;
196
+ const content = readFileSync(roadmapPath, "utf-8");
197
+ const items = parseRoadmapItems(content);
198
+ const item = items.find((i) => i.id === itemId);
199
+ if (!item)
200
+ return null;
201
+ const doneIds = new Set(items.filter((i) => i.status === "done").map((i) => i.id));
202
+ return item.dependsOn.filter((dep) => !doneIds.has(dep));
203
+ }
162
204
  /**
163
205
  * Write the bound session prompt to docs/session-prompts/<id>.md.
164
206
  *
@@ -1 +1 @@
1
- {"version":3,"file":"generate-session-prompt.js","sourceRoot":"","sources":["../../src/tools/generate-session-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-session-prompt.js","sourceRoot":"","sources":["../../src/tools/generate-session-prompt.ts"],"names":[],"mappings":"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"}
@@ -8,20 +8,20 @@ import { writeFileSync, readFileSync, existsSync, mkdirSync } from "node:fs";
8
8
  import { join, dirname } from "node:path";
9
9
  import yaml from "js-yaml";
10
10
  // ── Constants ────────────────────────────────────────────────────────
11
- export const PROJECT_SPECIFIC_PLACEHOLDER = `# Project-Specific Rules
12
- <!-- This file is owned by YOU. ForgeCraft will never overwrite it. -->
13
- <!-- Add project-specific rules, framework choices, conventions, and custom corrections here. -->
14
- <!-- The sentinel CLAUDE.md links here for any AI reading your project. -->
15
-
16
- ## Framework & Stack Choices
17
- <!-- e.g. We use Prisma for ORM. Deploy target is Railway. -->
18
-
19
- ## Custom Corrections
20
- <!-- Log corrections here so the AI learns from them. -->
21
- <!-- Format: - YYYY-MM-DD: [description of correction] -->
22
-
23
- ## Project-Specific Gates
24
- <!-- Add any quality rules specific to this project that don't belong in universal standards. -->
11
+ export const PROJECT_SPECIFIC_PLACEHOLDER = `# Project-Specific Rules
12
+ <!-- This file is owned by YOU. ForgeCraft will never overwrite it. -->
13
+ <!-- Add project-specific rules, framework choices, conventions, and custom corrections here. -->
14
+ <!-- The sentinel CLAUDE.md links here for any AI reading your project. -->
15
+
16
+ ## Framework & Stack Choices
17
+ <!-- e.g. We use Prisma for ORM. Deploy target is Railway. -->
18
+
19
+ ## Custom Corrections
20
+ <!-- Log corrections here so the AI learns from them. -->
21
+ <!-- Format: - YYYY-MM-DD: [description of correction] -->
22
+
23
+ ## Project-Specific Gates
24
+ <!-- Add any quality rules specific to this project that don't belong in universal standards. -->
25
25
  `;
26
26
  // ── Project Specific File ────────────────────────────────────────────
27
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"roadmap-builder.d.ts","sourceRoot":"","sources":["../../src/tools/roadmap-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,eAAO,MAAM,YAAY;;;;;;;;;EAIf,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;;EAaf,CAAC;AAIX;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAehE;AAmBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0B1D;AAgBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EACvE,YAAY,EAAE,MAAM,GACnB,MAAM,CAqDR;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,MAAM,CAeR;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
1
+ {"version":3,"file":"roadmap-builder.d.ts","sourceRoot":"","sources":["../../src/tools/roadmap-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,eAAO,MAAM,YAAY;;;;;;;;;EAIf,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;;EAaf,CAAC;AAIX;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAehE;AAmBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0B1D;AAgBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EACvE,YAAY,EAAE,MAAM,GACnB,MAAM,CA0DR;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,MAAM,CAeR;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -121,40 +121,50 @@ function inferNameFromDir(projectDir) {
121
121
  */
122
122
  export function buildRoadmapContent(projectName, ucItems, specFilePath) {
123
123
  const date = new Date().toISOString().split("T")[0];
124
+ const lastPhase1Id = formatRmId(ucItems.length);
124
125
  const phase1Rows = ucItems
125
126
  .map((uc, i) => {
126
127
  const rmId = formatRmId(i + 1);
127
128
  const title = `Implement ${uc.id}: ${uc.title}`;
128
- return `| ${rmId} | ${title} | pending | docs/session-prompts/${rmId}.md |`;
129
+ return `| ${rmId} | ${title} | — | pending | docs/session-prompts/${rmId}.md |`;
129
130
  })
130
131
  .join("\n");
131
- const phase2Rows = PHASE2_ITEMS.map((item) => `| ${item.id} | ${item.title} | pending | docs/session-prompts/${item.id}.md |`).join("\n");
132
- const phase3Rows = PHASE3_ITEMS.map((item) => `| ${item.id} | ${item.title} | pending | docs/session-prompts/${item.id}.md |`).join("\n");
132
+ const phase2Rows = PHASE2_ITEMS.map((item, i) => {
133
+ const dependsOn = i === 0 ? lastPhase1Id : PHASE2_ITEMS[i - 1].id;
134
+ return `| ${item.id} | ${item.title} | ${dependsOn} | pending | docs/session-prompts/${item.id}.md |`;
135
+ }).join("\n");
136
+ const phase3Rows = PHASE3_ITEMS.map((item, i) => {
137
+ const dependsOn = i === 0
138
+ ? PHASE2_ITEMS[PHASE2_ITEMS.length - 1].id
139
+ : PHASE3_ITEMS[i - 1].id;
140
+ return `| ${item.id} | ${item.title} | ${dependsOn} | pending | docs/session-prompts/${item.id}.md |`;
141
+ }).join("\n");
133
142
  return [
134
143
  `# ${projectName} Roadmap`,
135
144
  "",
136
145
  "> Generated by ForgeCraft. Each item maps to one implementation session.",
137
146
  "> Status: pending | in-progress | done",
147
+ "> Depends On: comma-separated RM IDs that must be done first; — means no dependencies.",
138
148
  "> Run `generate_session_prompt` with the item ID to get the bound prompt.",
139
149
  "",
140
150
  "---",
141
151
  "",
142
152
  "## Phase 1: Core Implementation",
143
153
  "",
144
- "| ID | Title | Status | Prompt |",
145
- "|---|---|---|---|",
154
+ "| ID | Title | Depends On | Status | Prompt |",
155
+ "|---|---|---|---|---|",
146
156
  phase1Rows,
147
157
  "",
148
158
  "## Phase 2: Integration & Quality Hardening",
149
159
  "",
150
- "| ID | Title | Status | Prompt |",
151
- "|---|---|---|---|",
160
+ "| ID | Title | Depends On | Status | Prompt |",
161
+ "|---|---|---|---|---|",
152
162
  phase2Rows,
153
163
  "",
154
164
  "## Phase 3: Pre-Release Hardening",
155
165
  "",
156
- "| ID | Title | Status | Prompt |",
157
- "|---|---|---|---|",
166
+ "| ID | Title | Depends On | Status | Prompt |",
167
+ "|---|---|---|---|---|",
158
168
  phase3Rows,
159
169
  "",
160
170
  "---",
@@ -1 +1 @@
1
- {"version":3,"file":"roadmap-builder.js","sourceRoot":"","sources":["../../src/tools/roadmap-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roadmap-builder.js","sourceRoot":"","sources":["../../src/tools/roadmap-builder.ts"],"names":[],"mappings":"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"}