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.
- package/dist/artifacts/commit-hooks.d.ts +1 -1
- package/dist/artifacts/commit-hooks.d.ts.map +1 -1
- package/dist/artifacts/commit-hooks.js +2 -0
- package/dist/artifacts/commit-hooks.js.map +1 -1
- package/dist/cli/commands.d.ts +35 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +109 -2
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +7 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/shared/result-utils.d.ts +27 -0
- package/dist/shared/result-utils.d.ts.map +1 -0
- package/dist/shared/result-utils.js +41 -0
- package/dist/shared/result-utils.js.map +1 -0
- package/dist/tools/close-cycle-helpers.d.ts +21 -2
- package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
- package/dist/tools/close-cycle-helpers.js +66 -10
- package/dist/tools/close-cycle-helpers.js.map +1 -1
- package/dist/tools/close-cycle.d.ts +2 -2
- package/dist/tools/close-cycle.d.ts.map +1 -1
- package/dist/tools/close-cycle.js +1 -1
- package/dist/tools/close-cycle.js.map +1 -1
- package/dist/tools/consolidate-status.d.ts +81 -0
- package/dist/tools/consolidate-status.d.ts.map +1 -0
- package/dist/tools/consolidate-status.js +251 -0
- package/dist/tools/consolidate-status.js.map +1 -0
- package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch.js +10 -0
- package/dist/tools/forgecraft-dispatch.js.map +1 -1
- package/dist/tools/forgecraft-router.d.ts +8 -0
- package/dist/tools/forgecraft-router.d.ts.map +1 -1
- package/dist/tools/forgecraft-router.js +21 -1
- package/dist/tools/forgecraft-router.js.map +1 -1
- package/dist/tools/forgecraft-schema-params.d.ts +4 -4
- package/dist/tools/forgecraft-schema.d.ts +5 -5
- package/dist/tools/forgecraft-schema.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema.js +3 -0
- package/dist/tools/forgecraft-schema.js.map +1 -1
- package/dist/tools/gate-violations.d.ts +59 -0
- package/dist/tools/gate-violations.d.ts.map +1 -0
- package/dist/tools/gate-violations.js +152 -0
- package/dist/tools/gate-violations.js.map +1 -0
- package/dist/tools/generate-session-prompt.d.ts +3 -3
- package/dist/tools/generate-session-prompt.d.ts.map +1 -1
- package/dist/tools/generate-session-prompt.js +57 -15
- package/dist/tools/generate-session-prompt.js.map +1 -1
- package/dist/tools/roadmap-builder.d.ts.map +1 -1
- package/dist/tools/roadmap-builder.js +19 -9
- package/dist/tools/roadmap-builder.js.map +1 -1
- package/dist/tools/session-prompt-builders.d.ts.map +1 -1
- package/dist/tools/session-prompt-builders.js +34 -10
- package/dist/tools/session-prompt-builders.js.map +1 -1
- package/package.json +1 -1
- 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" | "
|
|
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" | "
|
|
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,
|
|
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":"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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" | "
|
|
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" | "
|
|
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;
|
|
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,
|
|
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` +
|
|
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 =
|
|
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
|
|
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
|
|
141
|
-
|
|
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*\\|[
|
|
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
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,
|
|
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) =>
|
|
132
|
-
|
|
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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"}
|