forgecraft-mcp 1.3.2 → 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 (58) hide show
  1. package/dist/artifacts/commit-hooks.d.ts +1 -1
  2. package/dist/artifacts/commit-hooks.d.ts.map +1 -1
  3. package/dist/artifacts/commit-hooks.js +2 -0
  4. package/dist/artifacts/commit-hooks.js.map +1 -1
  5. package/dist/cli/commands.d.ts +35 -1
  6. package/dist/cli/commands.d.ts.map +1 -1
  7. package/dist/cli/commands.js +109 -2
  8. package/dist/cli/commands.js.map +1 -1
  9. package/dist/cli/help.d.ts.map +1 -1
  10. package/dist/cli/help.js +7 -0
  11. package/dist/cli/help.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +10 -1
  14. package/dist/cli.js.map +1 -1
  15. package/dist/shared/result-utils.d.ts +27 -0
  16. package/dist/shared/result-utils.d.ts.map +1 -0
  17. package/dist/shared/result-utils.js +41 -0
  18. package/dist/shared/result-utils.js.map +1 -0
  19. package/dist/tools/close-cycle-helpers.d.ts +21 -2
  20. package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
  21. package/dist/tools/close-cycle-helpers.js +66 -10
  22. package/dist/tools/close-cycle-helpers.js.map +1 -1
  23. package/dist/tools/close-cycle.d.ts +2 -2
  24. package/dist/tools/close-cycle.d.ts.map +1 -1
  25. package/dist/tools/close-cycle.js +1 -1
  26. package/dist/tools/close-cycle.js.map +1 -1
  27. package/dist/tools/consolidate-status.d.ts +81 -0
  28. package/dist/tools/consolidate-status.d.ts.map +1 -0
  29. package/dist/tools/consolidate-status.js +251 -0
  30. package/dist/tools/consolidate-status.js.map +1 -0
  31. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  32. package/dist/tools/forgecraft-dispatch.js +10 -0
  33. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  34. package/dist/tools/forgecraft-router.d.ts +8 -0
  35. package/dist/tools/forgecraft-router.d.ts.map +1 -1
  36. package/dist/tools/forgecraft-router.js +21 -1
  37. package/dist/tools/forgecraft-router.js.map +1 -1
  38. package/dist/tools/forgecraft-schema-params.d.ts +4 -4
  39. package/dist/tools/forgecraft-schema.d.ts +5 -5
  40. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  41. package/dist/tools/forgecraft-schema.js +3 -0
  42. package/dist/tools/forgecraft-schema.js.map +1 -1
  43. package/dist/tools/gate-violations.d.ts +59 -0
  44. package/dist/tools/gate-violations.d.ts.map +1 -0
  45. package/dist/tools/gate-violations.js +152 -0
  46. package/dist/tools/gate-violations.js.map +1 -0
  47. package/dist/tools/generate-session-prompt.d.ts +3 -3
  48. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  49. package/dist/tools/generate-session-prompt.js +57 -15
  50. package/dist/tools/generate-session-prompt.js.map +1 -1
  51. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  52. package/dist/tools/roadmap-builder.js +19 -9
  53. package/dist/tools/roadmap-builder.js.map +1 -1
  54. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  55. package/dist/tools/session-prompt-builders.js +34 -10
  56. package/dist/tools/session-prompt-builders.js.map +1 -1
  57. package/package.json +1 -1
  58. package/templates/universal/hooks.yaml +212 -20
@@ -5,7 +5,7 @@
5
5
  * Both halves are merged into the final forgecraftSchema.
6
6
  */
7
7
  import { z } from "zod";
8
- export declare const ACTIONS: readonly ["setup_project", "refresh", "scaffold", "generate", "audit", "review", "list", "classify", "add_hook", "add_module", "configure_mcp", "get_reference", "convert", "verify", "advice", "metrics", "check_cascade", "generate_session_prompt", "get_verification_strategy", "record_verification", "verification_status", "generate_adr", "contribute_gate", "generate_diagram", "set_cascade_requirement", "close_cycle", "generate_roadmap", "cnt_add_node", "start_hardening"];
8
+ export declare const ACTIONS: readonly ["setup_project", "refresh", "scaffold", "generate", "audit", "review", "list", "classify", "add_hook", "add_module", "configure_mcp", "get_reference", "convert", "verify", "advice", "metrics", "check_cascade", "generate_session_prompt", "get_verification_strategy", "record_verification", "verification_status", "generate_adr", "contribute_gate", "generate_diagram", "set_cascade_requirement", "close_cycle", "consolidate_status", "read_gate_violations", "generate_roadmap", "cnt_add_node", "start_hardening"];
9
9
  export type Action = (typeof ACTIONS)[number];
10
10
  export declare const forgecraftSchema: z.ZodObject<{
11
11
  action: z.ZodEnum<[string, ...string[]]>;
@@ -126,12 +126,13 @@ export declare const forgecraftSchema: z.ZodObject<{
126
126
  pass_threshold?: number | undefined;
127
127
  include_mutation?: boolean | undefined;
128
128
  coverage_dir?: string | undefined;
129
+ spec_path?: string | undefined;
129
130
  merge?: boolean | undefined;
130
131
  resource?: string | undefined;
131
132
  item_description?: string | undefined;
132
133
  acceptance_criteria?: string[] | undefined;
133
134
  scope_note?: string | undefined;
134
- session_type?: "docs" | "test" | "feature" | "fix" | "refactor" | "chore" | undefined;
135
+ session_type?: "docs" | "test" | "fix" | "refactor" | "chore" | "feature" | undefined;
135
136
  uncertainty_level?: "deterministic" | "behavioral" | "stochastic" | "heuristic" | "generative" | undefined;
136
137
  step_id?: string | undefined;
137
138
  phase_id?: string | undefined;
@@ -149,7 +150,6 @@ export declare const forgecraftSchema: z.ZodObject<{
149
150
  cascade_required?: boolean | undefined;
150
151
  cascade_rationale?: string | undefined;
151
152
  cascade_decided_by?: "user" | "assistant" | undefined;
152
- spec_path?: string | undefined;
153
153
  spec_text?: string | undefined;
154
154
  scope_complete?: boolean | undefined;
155
155
  has_consumers?: boolean | undefined;
@@ -199,12 +199,13 @@ export declare const forgecraftSchema: z.ZodObject<{
199
199
  pass_threshold?: number | undefined;
200
200
  include_mutation?: boolean | undefined;
201
201
  coverage_dir?: string | undefined;
202
+ spec_path?: string | undefined;
202
203
  merge?: boolean | undefined;
203
204
  resource?: string | undefined;
204
205
  item_description?: string | undefined;
205
206
  acceptance_criteria?: string[] | undefined;
206
207
  scope_note?: string | undefined;
207
- session_type?: "docs" | "test" | "feature" | "fix" | "refactor" | "chore" | undefined;
208
+ session_type?: "docs" | "test" | "fix" | "refactor" | "chore" | "feature" | undefined;
208
209
  uncertainty_level?: "deterministic" | "behavioral" | "stochastic" | "heuristic" | "generative" | undefined;
209
210
  step_id?: string | undefined;
210
211
  phase_id?: string | undefined;
@@ -222,7 +223,6 @@ export declare const forgecraftSchema: z.ZodObject<{
222
223
  cascade_required?: boolean | undefined;
223
224
  cascade_rationale?: string | undefined;
224
225
  cascade_decided_by?: "user" | "assistant" | undefined;
225
- spec_path?: string | undefined;
226
226
  spec_text?: string | undefined;
227
227
  scope_complete?: boolean | undefined;
228
228
  has_consumers?: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-schema.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,OAAO,2dA8BV,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAY9C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkOK,CAAC;AAEnC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"forgecraft-schema.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,OAAO,ygBAgCV,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAY9C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmOK,CAAC;AAEnC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -34,6 +34,8 @@ export const ACTIONS = [
34
34
  "generate_diagram",
35
35
  "set_cascade_requirement",
36
36
  "close_cycle",
37
+ "consolidate_status",
38
+ "read_gate_violations",
37
39
  "generate_roadmap",
38
40
  "cnt_add_node",
39
41
  "start_hardening",
@@ -86,6 +88,7 @@ export const forgecraftSchema = z
86
88
  " generate_roadmap — generate a phased docs/roadmap.md from PRD.md + use-cases.md (gated on cascade)\n\n" +
87
89
  " cnt_add_node — add a new CNT leaf node (.claude/standards/<domain>-<concern>.md)\n\n" +
88
90
  " start_hardening — generate hardening session prompts (pre-release → rc → load test)\n\n" +
91
+ " read_gate_violations — read structured gate violation records from .forgecraft/gate-violations.jsonl\n\n" +
89
92
  "Quick usage examples:\n" +
90
93
  ' To run a cascade check: action="check_cascade"\n' +
91
94
  ' To generate a session prompt: action="generate_session_prompt"\n' +
@@ -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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,eAAe;IACf,SAAS;IACT,UAAU;IACV,UAAU;IACV,OAAO;IACP,QAAQ;IACR,MAAM;IACN,UAAU;IACV,UAAU;IACV,YAAY;IACZ,eAAe;IACf,eAAe;IACf,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,eAAe;IACf,yBAAyB;IACzB,2BAA2B;IAC3B,qBAAqB;IACrB,qBAAqB;IACrB,cAAc;IACd,iBAAiB;IACjB,kBAAkB;IAClB,yBAAyB;IACzB,aAAa;IACb,oBAAoB;IACpB,sBAAsB;IACtB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;CACT,CAAC;AAIX,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAC5D,MAAM,mBAAmB,GAAG;IAC1B,KAAK;IACL,iBAAiB;IACjB,UAAU;IACV,UAAU;CACF,CAAC;AAEX,uEAAuE;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,OAA2C,CAAC;SACjD,QAAQ,CACP,2BAA2B;QACzB,sBAAsB;QACtB,iGAAiG;QACjG,0FAA0F;QAC1F,+FAA+F;QAC/F,2GAA2G;QAC3G,mFAAmF;QACnF,uEAAuE;QACvE,8DAA8D;QAC9D,4DAA4D;QAC5D,6EAA6E;QAC7E,0FAA0F;QAC1F,gFAAgF;QAChF,8DAA8D;QAC9D,+DAA+D;QAC/D,kDAAkD;QAClD,+CAA+C;QAC/C,0FAA0F;QAC1F,gEAAgE;QAChE,4DAA4D;QAC5D,gEAAgE;QAChE,kEAAkE;QAClE,8CAA8C;QAC9C,iDAAiD;QACjD,iDAAiD;QACjD,qEAAqE;QACrE,mDAAmD;QACnD,kEAAkE;QAClE,mDAAmD;QACnD,wDAAwD;QACxD,qEAAqE;QACrE,gFAAgF;QAChF,yGAAyG;QACzG,6GAA6G;QAC7G,+FAA+F;QAC/F,+FAA+F;QAC/F,4GAA4G;QAC5G,yBAAyB;QACzB,iEAAiE;QACjE,2EAA2E;QAC3E,iEAAiE;QACjE,0DAA0D,CAC7D;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uRAAuR,CACxR;IACH,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAA4C,CAAC,CAAC;SAC3D,QAAQ,EAAE;SACV,QAAQ,CACP,kLAAkL,CACnL;IACH,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAsD,CAAC,CAAC;SACrE,QAAQ,EAAE;SACV,QAAQ,CACP,+GAA+G,CAChH;IACH,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,aAAiD,CAAC;SACvD,QAAQ,EAAE;SACV,QAAQ,CACP,+DAA+D,CAChE;IACH,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,mBAAmB,CAG/C,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CACP,uSAAuS,CACxS;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE,CACtE;IACH,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;SAC9B,QAAQ,EAAE;SACV,QAAQ,CACP,2EAA2E,CAC5E;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;IAChE,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,oMAAoM,CACrM;IACH,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,+DAA+D,CAChE;IACH,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E,CAC3E;IACH,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,6HAA6H,CAC9H;IACH,aAAa,EAAE,CAAC;SACb,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;SACvE,QAAQ,EAAE;SACV,QAAQ,CACP,qJAAqJ,CACtJ;IACH,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;SAClC,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IACrE,UAAU,EAAE,CAAC;SACV,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACvB,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;IAChE,GAAG,EAAE,CAAC;SACH,IAAI,CAAC,QAA4C,CAAC;SAClD,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAA4C,CAAC,CAAC;SAC3D,QAAQ,EAAE;SACV,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAA4C,CAAC,CAAC;SAC3D,QAAQ,EAAE;SACV,QAAQ,CAAC,gCAAgC,CAAC;IAC7C,qBAAqB,EAAE,CAAC;SACrB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IACrE,cAAc,EAAE,CAAC;SACd,MAAM,CACL,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrC,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE,CACtE;IACH,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,oEAAoE,CACrE;IACH,mBAAmB,EAAE,CAAC;SACnB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CACP,yGAAyG,CAC1G;IACH,gBAAgB,EAAE,CAAC;SAChB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,gFAAgF,CACjF;IACH,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8GAA8G,CAC/G;CACJ,CAAC;KACD,KAAK,CAAC,wBAAwB,CAAC,CAAC"}
@@ -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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,2EAA2E;AAE3E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CACvE,CAAC,CAAC;AAmBH,2EAA2E;AAE3E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAA6B;IAE7B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACpD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,2EAA2E;AAE3E;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAkB;IAElB,MAAM,YAAY,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACzC,CAAC;AAED,2EAA2E;AAE3E;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;IAC1E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;aAC1C,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE/B,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;gBAC3D,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;oBACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC;oBAC/C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;oBACxC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;iBAC7C,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,UAAkB;IACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,yBAAyB,EAAE;YAC9C,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC;aACC,QAAQ,EAAE;aACV,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,2EAA2E;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAA2B;IACnE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,2EAA2E,CAAC;IACrF,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,oBAAoB,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,4BAA4B,CAClE,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,gBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,4BAA4B,CAChE,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -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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"}
@@ -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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"}