@entelligentsia/forgecli 0.10.0 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +95 -0
- package/README.md +21 -3
- package/dist/CHANGELOG-forge-plugin.md +90 -0
- package/dist/bin/config.js +6 -0
- package/dist/bin/config.js.map +1 -1
- package/dist/extensions/forgecli/add-pipeline.d.ts +19 -0
- package/dist/extensions/forgecli/add-pipeline.js +143 -0
- package/dist/extensions/forgecli/add-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/add-task.d.ts +20 -0
- package/dist/extensions/forgecli/add-task.js +154 -0
- package/dist/extensions/forgecli/add-task.js.map +1 -0
- package/dist/extensions/forgecli/calibrate.d.ts +61 -0
- package/dist/extensions/forgecli/calibrate.js +488 -0
- package/dist/extensions/forgecli/calibrate.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.d.ts +9 -1
- package/dist/extensions/forgecli/fix-bug.js +155 -45
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-commands.js +15 -22
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +16 -1
- package/dist/extensions/forgecli/forge-subagent.js +45 -8
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-update-command.d.ts +9 -0
- package/dist/extensions/forgecli/forge-update-command.js +106 -7
- package/dist/extensions/forgecli/forge-update-command.js.map +1 -1
- package/dist/extensions/forgecli/health-check.d.ts +22 -1
- package/dist/extensions/forgecli/health-check.js +177 -4
- package/dist/extensions/forgecli/health-check.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +25 -1
- package/dist/extensions/forgecli/hook-dispatcher.js +104 -9
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/hooks/check-update.d.ts +81 -0
- package/dist/extensions/forgecli/hooks/check-update.js +308 -0
- package/dist/extensions/forgecli/hooks/check-update.js.map +1 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.d.ts +32 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.js +119 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.js.map +1 -0
- package/dist/extensions/forgecli/hooks/triage-error.d.ts +23 -0
- package/dist/extensions/forgecli/hooks/triage-error.js +62 -0
- package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -0
- package/dist/extensions/forgecli/hooks/write-guard.d.ts +28 -0
- package/dist/extensions/forgecli/hooks/write-guard.js +225 -0
- package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -0
- package/dist/extensions/forgecli/index.js +60 -0
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/init-context.d.ts +1 -1
- package/dist/extensions/forgecli/init-context.js +21 -6
- package/dist/extensions/forgecli/init-context.js.map +1 -1
- package/dist/extensions/forgecli/materialize.d.ts +16 -0
- package/dist/extensions/forgecli/materialize.js +195 -0
- package/dist/extensions/forgecli/materialize.js.map +1 -0
- package/dist/extensions/forgecli/migrate.d.ts +19 -0
- package/dist/extensions/forgecli/migrate.js +258 -0
- package/dist/extensions/forgecli/migrate.js.map +1 -0
- package/dist/extensions/forgecli/migration-engine.d.ts +111 -0
- package/dist/extensions/forgecli/migration-engine.js +533 -0
- package/dist/extensions/forgecli/migration-engine.js.map +1 -0
- package/dist/extensions/forgecli/quiz-agent.d.ts +17 -0
- package/dist/extensions/forgecli/quiz-agent.js +98 -0
- package/dist/extensions/forgecli/quiz-agent.js.map +1 -0
- package/dist/extensions/forgecli/remove-command.d.ts +17 -0
- package/dist/extensions/forgecli/remove-command.js +124 -0
- package/dist/extensions/forgecli/remove-command.js.map +1 -0
- package/dist/extensions/forgecli/report-bug.d.ts +25 -0
- package/dist/extensions/forgecli/report-bug.js +159 -0
- package/dist/extensions/forgecli/report-bug.js.map +1 -0
- package/dist/extensions/forgecli/retrospective.d.ts +19 -0
- package/dist/extensions/forgecli/retrospective.js +156 -0
- package/dist/extensions/forgecli/retrospective.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.js +36 -3
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +9 -1
- package/dist/extensions/forgecli/run-task.js +66 -13
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +40 -2
- package/dist/extensions/forgecli/session-registry.js +71 -1
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/status-command.d.ts +19 -0
- package/dist/extensions/forgecli/status-command.js +140 -0
- package/dist/extensions/forgecli/status-command.js.map +1 -0
- package/dist/extensions/forgecli/store-query.d.ts +22 -0
- package/dist/extensions/forgecli/store-query.js +107 -0
- package/dist/extensions/forgecli/store-query.js.map +1 -0
- package/dist/extensions/forgecli/store-repair.d.ts +17 -0
- package/dist/extensions/forgecli/store-repair.js +123 -0
- package/dist/extensions/forgecli/store-repair.js.map +1 -0
- package/dist/extensions/forgecli/test-orchestrate.js +1 -0
- package/dist/extensions/forgecli/test-orchestrate.js.map +1 -1
- package/dist/extensions/forgecli/thread-switcher.js +286 -41
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/transition-guard.js +7 -2
- package/dist/extensions/forgecli/transition-guard.js.map +1 -1
- package/dist/extensions/forgecli/update-tools.d.ts +23 -0
- package/dist/extensions/forgecli/update-tools.js +136 -0
- package/dist/extensions/forgecli/update-tools.js.map +1 -0
- package/dist/extensions/forgecli/viewport-events.js +10 -0
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/extensions/forgecli/viewport-renderer.d.ts +18 -0
- package/dist/extensions/forgecli/viewport-renderer.js +27 -0
- package/dist/extensions/forgecli/viewport-renderer.js.map +1 -1
- package/dist/extensions/forgecli/viewport-theme.js +4 -0
- package/dist/extensions/forgecli/viewport-theme.js.map +1 -1
- package/dist/extensions/forgecli/whats-new-widget.d.ts +13 -8
- package/dist/extensions/forgecli/whats-new-widget.js +111 -42
- package/dist/extensions/forgecli/whats-new-widget.js.map +1 -1
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +29 -3
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +15 -8
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +327 -185
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +18 -10
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +15 -9
- package/dist/forge-payload/.base-pack/workflows/review_code.md +14 -6
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +18 -10
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/bug.schema.json +3 -2
- package/dist/forge-payload/.schemas/config.schema.json +83 -0
- package/dist/forge-payload/.schemas/migrations.json +2049 -0
- package/dist/forge-payload/commands/regenerate.md +17 -1
- package/dist/forge-payload/meta/personas/README.md +16 -0
- package/dist/forge-payload/meta/personas/meta-architect.md +70 -0
- package/dist/forge-payload/meta/personas/meta-bug-fixer.md +73 -0
- package/dist/forge-payload/meta/personas/meta-collator.md +72 -0
- package/dist/forge-payload/meta/personas/meta-engineer.md +70 -0
- package/dist/forge-payload/meta/personas/meta-orchestrator.md +71 -0
- package/dist/forge-payload/meta/personas/meta-product-manager.md +82 -0
- package/dist/forge-payload/meta/personas/meta-qa-engineer.md +91 -0
- package/dist/forge-payload/meta/personas/meta-supervisor.md +92 -0
- package/dist/forge-payload/meta/skill-recommendations.md +154 -0
- package/dist/forge-payload/meta/skills/meta-architect-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-bug-fixer-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-collator-skills.md +41 -0
- package/dist/forge-payload/meta/skills/meta-engineer-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-generic-skills.md +58 -0
- package/dist/forge-payload/meta/skills/meta-qa-engineer-skills.md +46 -0
- package/dist/forge-payload/meta/skills/meta-supervisor-skills.md +43 -0
- package/dist/forge-payload/meta/store-schema/bug.schema.md +71 -0
- package/dist/forge-payload/meta/store-schema/event.schema.md +76 -0
- package/dist/forge-payload/meta/store-schema/feature.schema.md +65 -0
- package/dist/forge-payload/meta/store-schema/sprint.schema.md +64 -0
- package/dist/forge-payload/meta/store-schema/task.schema.md +78 -0
- package/dist/forge-payload/meta/templates/meta-code-review.md +26 -0
- package/dist/forge-payload/meta/templates/meta-plan-review.md +28 -0
- package/dist/forge-payload/meta/templates/meta-plan.md +28 -0
- package/dist/forge-payload/meta/templates/meta-progress.md +25 -0
- package/dist/forge-payload/meta/templates/meta-retrospective.md +28 -0
- package/dist/forge-payload/meta/templates/meta-sprint-manifest.md +26 -0
- package/dist/forge-payload/meta/templates/meta-sprint-requirements.md +91 -0
- package/dist/forge-payload/meta/templates/meta-task-prompt.md +26 -0
- package/dist/forge-payload/meta/tool-specs/collate.spec.md +88 -0
- package/dist/forge-payload/meta/tool-specs/generation-manifest.spec.md +139 -0
- package/dist/forge-payload/meta/tool-specs/manage-config.spec.md +143 -0
- package/dist/forge-payload/meta/tool-specs/seed-store.spec.md +91 -0
- package/dist/forge-payload/meta/tool-specs/store-cli.spec.md +328 -0
- package/dist/forge-payload/meta/tool-specs/validate-store.spec.md +191 -0
- package/dist/forge-payload/meta/workflows/_fragments/context-injection.md +75 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +73 -0
- package/dist/forge-payload/meta/workflows/_fragments/finalize.md +13 -0
- package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +73 -0
- package/dist/forge-payload/meta/workflows/_fragments/progress-reporting.md +38 -0
- package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +39 -0
- package/dist/forge-payload/meta/workflows/meta-approve.md +119 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +89 -0
- package/dist/forge-payload/meta/workflows/meta-commit.md +93 -0
- package/dist/forge-payload/meta/workflows/meta-enhance.md +286 -0
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +501 -0
- package/dist/forge-payload/meta/workflows/meta-implement.md +132 -0
- package/dist/forge-payload/meta/workflows/meta-migrate.md +455 -0
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +993 -0
- package/dist/forge-payload/meta/workflows/meta-plan-task.md +133 -0
- package/dist/forge-payload/meta/workflows/meta-quiz-agent.md +135 -0
- package/dist/forge-payload/meta/workflows/meta-retrospective.md +65 -0
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +119 -0
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +108 -0
- package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +65 -0
- package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +147 -0
- package/dist/forge-payload/meta/workflows/meta-update-implementation.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-update-plan.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-validate.md +111 -0
- package/dist/forge-payload/tools/check-structure.cjs +344 -0
- package/dist/forge-payload/tools/collate.cjs +34 -9
- package/dist/forge-payload/tools/list-skills.js +76 -0
- package/dist/forge-payload/tools/parse-gates.cjs +8 -2
- package/dist/forge-payload/tools/store-cli.cjs +56 -11
- package/dist/forge-payload/tools/store.cjs +61 -0
- package/dist/forge-payload/tools/substitute-placeholders.cjs +60 -8
- package/dist/forge-payload/tools/validate-store.cjs +6 -2
- package/dist/forge-payload/tools/verify-integrity.cjs +86 -0
- package/package.json +2 -2
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// forge:add-task — native kickoff handler (FORGE-S23-T11).
|
|
2
|
+
//
|
|
3
|
+
// Replaces the auto-generated stub previously installed by
|
|
4
|
+
// registerAllForgeCommands (forge-commands.ts). Kickoff Shim archetype
|
|
5
|
+
// (Pack-04 + Pack-06): single LLM handoff in current context, no fork.
|
|
6
|
+
//
|
|
7
|
+
// This handler reads commands/add-task.md from the bundled forge payload,
|
|
8
|
+
// forwards any provided argv shortcuts (--sprint, --title, --estimate,
|
|
9
|
+
// --pipeline) in the kickoff body so the LLM skips those interview steps,
|
|
10
|
+
// and dispatches via pi.sendUserMessage with { deliverAs: "steer" }.
|
|
11
|
+
//
|
|
12
|
+
// Note: The task prompt mentions "store-cli --next-id pre-flight", but
|
|
13
|
+
// store-cli has no next-id subcommand. The ID is computed by the LLM
|
|
14
|
+
// from the sprint record (per Step 3 in the command file). The handler
|
|
15
|
+
// only forwards shortcuts to reduce LLM round-trips.
|
|
16
|
+
//
|
|
17
|
+
// Workflow source: <forgeRoot>/commands/add-task.md (command file).
|
|
18
|
+
// File-existence check only (not Pack-06 4-marker check) — command files
|
|
19
|
+
// are simpler than full workflow files and lack the required markers.
|
|
20
|
+
//
|
|
21
|
+
// Iron Laws:
|
|
22
|
+
// IL1 — code only under forge-cli/src/extensions/forgecli/.
|
|
23
|
+
// IL4 — no JSON.stringify-into-subagent dispatch.
|
|
24
|
+
// IL6 — no shell-string interpolation; no spawn calls here.
|
|
25
|
+
// IL7 — every failure path emits ctx.ui.notify and returns; no silent
|
|
26
|
+
// continuation.
|
|
27
|
+
import * as fs from "node:fs";
|
|
28
|
+
import * as path from "node:path";
|
|
29
|
+
import { sendKickoff } from "./kickoff.js";
|
|
30
|
+
export function parseAddTaskArgs(rawArgs, cwd) {
|
|
31
|
+
const trimmed = (rawArgs ?? "").trim();
|
|
32
|
+
const result = {
|
|
33
|
+
sprintId: null,
|
|
34
|
+
title: null,
|
|
35
|
+
estimate: null,
|
|
36
|
+
pipeline: null,
|
|
37
|
+
seed: "",
|
|
38
|
+
sourceLabel: "",
|
|
39
|
+
};
|
|
40
|
+
if (!trimmed) {
|
|
41
|
+
result.sourceLabel = "(no args — LLM will conduct full interview)";
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
// Parse known flags
|
|
45
|
+
const tokens = trimmed.split(/\s+/);
|
|
46
|
+
const remaining = [];
|
|
47
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
48
|
+
const tok = tokens[i];
|
|
49
|
+
if (tok === "--sprint" && i + 1 < tokens.length) {
|
|
50
|
+
result.sprintId = tokens[++i];
|
|
51
|
+
}
|
|
52
|
+
else if (tok === "--title" && i + 1 < tokens.length) {
|
|
53
|
+
result.title = tokens[++i];
|
|
54
|
+
}
|
|
55
|
+
else if (tok === "--estimate" && i + 1 < tokens.length) {
|
|
56
|
+
result.estimate = tokens[++i];
|
|
57
|
+
}
|
|
58
|
+
else if (tok === "--pipeline" && i + 1 < tokens.length) {
|
|
59
|
+
result.pipeline = tokens[++i];
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
remaining.push(tok);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Remaining tokens: @<file> or free-form text
|
|
66
|
+
const tail = remaining.join(" ").trim();
|
|
67
|
+
if (tail.startsWith("@")) {
|
|
68
|
+
const ref = tail.slice(1).trim();
|
|
69
|
+
const filePath = path.isAbsolute(ref) ? ref : path.resolve(cwd, ref);
|
|
70
|
+
result.seed = fs.readFileSync(filePath, "utf8");
|
|
71
|
+
result.sourceLabel = `(seed from file: ${ref})`;
|
|
72
|
+
}
|
|
73
|
+
else if (tail) {
|
|
74
|
+
result.seed = tail;
|
|
75
|
+
result.sourceLabel = "(seed from inline text)";
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
result.sourceLabel = "(shortcuts provided)";
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
export function composeAddTaskKickoff(opts) {
|
|
83
|
+
const { commandMd, parsed } = opts;
|
|
84
|
+
const shortcuts = [];
|
|
85
|
+
if (parsed.sprintId)
|
|
86
|
+
shortcuts.push(`--sprint ${parsed.sprintId}`);
|
|
87
|
+
if (parsed.title)
|
|
88
|
+
shortcuts.push(`--title "${parsed.title}"`);
|
|
89
|
+
if (parsed.estimate)
|
|
90
|
+
shortcuts.push(`--estimate ${parsed.estimate}`);
|
|
91
|
+
if (parsed.pipeline)
|
|
92
|
+
shortcuts.push(`--pipeline ${parsed.pipeline}`);
|
|
93
|
+
const sections = ["# /forge:add-task", ""];
|
|
94
|
+
sections.push("## Dispatch", "");
|
|
95
|
+
sections.push("Run the add-task command below to add a new task to an existing sprint. Specifically:");
|
|
96
|
+
sections.push("");
|
|
97
|
+
sections.push("1. Follow the command file steps in order.");
|
|
98
|
+
if (shortcuts.length > 0) {
|
|
99
|
+
sections.push(`2. The following shortcuts were provided — skip the corresponding interview steps: \`${shortcuts.join(" ")}\``);
|
|
100
|
+
}
|
|
101
|
+
sections.push(`${shortcuts.length > 0 ? "3" : "2"}. Use \`forge_store\` for all store reads and writes (never raw bash \`forge store\`).`);
|
|
102
|
+
sections.push(`${shortcuts.length > 0 ? "4" : "3"}. Compute the next task ID from the sprint record's \`taskIds\` array per Step 3 in the command file.`);
|
|
103
|
+
sections.push("", "---", "", "## Command", "", commandMd.trim(), "", "---");
|
|
104
|
+
if (parsed.seed) {
|
|
105
|
+
sections.push("", `## Additional Input — ${parsed.sourceLabel}`, "", parsed.seed.trim());
|
|
106
|
+
}
|
|
107
|
+
else if (shortcuts.length === 0) {
|
|
108
|
+
sections.push("", "## Input", "", "(no args — begin mini-intake interview)");
|
|
109
|
+
}
|
|
110
|
+
return sections.join("\n");
|
|
111
|
+
}
|
|
112
|
+
// ── Registration ──────────────────────────────────────────────────────────
|
|
113
|
+
const COMMAND_NAME = "add-task";
|
|
114
|
+
export function registerAddTask(pi, options) {
|
|
115
|
+
pi.registerCommand("forge:add-task", {
|
|
116
|
+
description: "Add a new task to an existing sprint mid-flight — mini intake, sequential ID assignment, store write. " +
|
|
117
|
+
"Usage: /forge:add-task [--sprint <ID>] [--title <text>] [--estimate <S|M|L|XL>] [--pipeline <name>] [@<file> | <text>]",
|
|
118
|
+
async handler(args, ctx) {
|
|
119
|
+
const { forgeRoot } = options;
|
|
120
|
+
const cwd = options.cwd ?? process.cwd();
|
|
121
|
+
if (!forgeRoot) {
|
|
122
|
+
ctx.ui.notify("× forge:add-task — no Forge project at cwd; run /forge:init to bootstrap", "warning");
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const commandPath = path.join(forgeRoot, "commands", `${COMMAND_NAME}.md`);
|
|
126
|
+
let commandMd;
|
|
127
|
+
try {
|
|
128
|
+
commandMd = fs.readFileSync(commandPath, "utf8");
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const e = err;
|
|
132
|
+
if (e.code === "ENOENT") {
|
|
133
|
+
ctx.ui.notify(`× forge:add-task — command file not found at commands/${COMMAND_NAME}.md; run /forge:init or /forge:regenerate first.`, "error");
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
ctx.ui.notify(`× forge:add-task — failed to read command file: ${e.message ?? "unknown error"}`, "error");
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
let parsed;
|
|
141
|
+
try {
|
|
142
|
+
parsed = parseAddTaskArgs(args, cwd);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
const e = err;
|
|
146
|
+
ctx.ui.notify(`× forge:add-task — failed to parse args: ${e.message ?? "unknown"}`, "error");
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const kickoff = composeAddTaskKickoff({ commandMd, parsed });
|
|
150
|
+
sendKickoff(pi, kickoff);
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=add-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-task.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/add-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { type CalibrationBaseline } from "./init-context.js";
|
|
3
|
+
export interface ParsedCalibrateFlags {
|
|
4
|
+
/** Override project directory (from --path <dir>). Null = use cwd. */
|
|
5
|
+
path: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parse /forge:calibrate arguments.
|
|
9
|
+
* Supports: --path <dir>
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseCalibrateFlags(args: string): ParsedCalibrateFlags;
|
|
12
|
+
export interface ForgeConfig {
|
|
13
|
+
paths?: {
|
|
14
|
+
engineering?: string;
|
|
15
|
+
forgeRoot?: string;
|
|
16
|
+
store?: string;
|
|
17
|
+
};
|
|
18
|
+
calibrationBaseline?: Partial<CalibrationBaseline> & {
|
|
19
|
+
masterIndexHash?: string | null;
|
|
20
|
+
};
|
|
21
|
+
calibrationHistory?: CalibrationHistoryEntry[];
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
/** Read and parse .forge/config.json from projectRoot. Returns null on any error. */
|
|
25
|
+
export declare function readForgeConfig(projectRoot: string): ForgeConfig | null;
|
|
26
|
+
/**
|
|
27
|
+
* Compute SHA-256 of MASTER_INDEX.md, stripping blank lines and HTML comment lines.
|
|
28
|
+
* Returns null if the file does not exist.
|
|
29
|
+
*/
|
|
30
|
+
export declare function computeCurrentHash(projectRoot: string, kbPath: string): string | null;
|
|
31
|
+
export interface DriftCategory {
|
|
32
|
+
category: "technical" | "business" | "retrospective" | "acceptance criteria";
|
|
33
|
+
evidence: string;
|
|
34
|
+
targets: string[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Categorize drift by scanning MASTER_INDEX.md content for section keywords
|
|
38
|
+
* and identifying new sprints since last calibration.
|
|
39
|
+
*/
|
|
40
|
+
export declare function categorizeDrift(projectRoot: string, kbPath: string, baseline: Partial<CalibrationBaseline> & {
|
|
41
|
+
masterIndexHash?: string | null;
|
|
42
|
+
}): DriftCategory[];
|
|
43
|
+
export interface PatchProposal {
|
|
44
|
+
target: string;
|
|
45
|
+
type: "regenerate";
|
|
46
|
+
rationale: string;
|
|
47
|
+
}
|
|
48
|
+
/** Extract PatchProposal objects from the architect's free-form response text. */
|
|
49
|
+
export declare function extractPatchProposals(text: string): PatchProposal[];
|
|
50
|
+
export interface CalibrationHistoryPatch {
|
|
51
|
+
target: string;
|
|
52
|
+
type: "regenerate";
|
|
53
|
+
applied: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface CalibrationHistoryEntry {
|
|
56
|
+
date: string;
|
|
57
|
+
version: string;
|
|
58
|
+
categories: string[];
|
|
59
|
+
patches: CalibrationHistoryPatch[];
|
|
60
|
+
}
|
|
61
|
+
export declare function registerCalibrate(pi: ExtensionAPI): void;
|