@entelligentsia/forgecli 1.0.21 → 1.0.25

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 (232) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/dist/CHANGELOG-forge-plugin.md +118 -0
  3. package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
  4. package/dist/extensions/forgecli/forge-tools.js +73 -0
  5. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  6. package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
  7. package/dist/extensions/forgecli/lib/forge-root.js +14 -1
  8. package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
  9. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +1 -0
  10. package/dist/extensions/forgecli/orchestrators/fix-bug.js +26 -0
  11. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
  12. package/dist/extensions/forgecli/orchestrators/run-sprint.js +49 -0
  13. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
  14. package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
  15. package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
  16. package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
  17. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
  18. package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
  19. package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
  20. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  21. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  22. package/dist/forge-payload/.schemas/event.schema.json +8 -3
  23. package/dist/forge-payload/.schemas/migrations.json +56 -0
  24. package/dist/forge-payload/integrity.json +3 -3
  25. package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
  26. package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
  27. package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
  28. package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
  29. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
  30. package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
  31. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
  32. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  33. package/dist/forge-payload/schemas/event.schema.json +8 -3
  34. package/dist/forge-payload/schemas/structure-manifest.json +4 -2
  35. package/dist/forge-payload/tools/commit-task.cjs +218 -0
  36. package/dist/forge-payload/tools/store-cli.cjs +6 -1
  37. package/node_modules/@mariozechner/clipboard/package.json +2 -1
  38. package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +3 -0
  39. package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +25 -0
  40. package/package.json +2 -2
  41. package/dist/extensions/forgecli/add-pipeline.d.ts +0 -19
  42. package/dist/extensions/forgecli/add-pipeline.js +0 -143
  43. package/dist/extensions/forgecli/add-pipeline.js.map +0 -1
  44. package/dist/extensions/forgecli/add-task.d.ts +0 -20
  45. package/dist/extensions/forgecli/add-task.js +0 -154
  46. package/dist/extensions/forgecli/add-task.js.map +0 -1
  47. package/dist/extensions/forgecli/approve.d.ts +0 -22
  48. package/dist/extensions/forgecli/approve.js +0 -152
  49. package/dist/extensions/forgecli/approve.js.map +0 -1
  50. package/dist/extensions/forgecli/banner.d.ts +0 -10
  51. package/dist/extensions/forgecli/banner.js +0 -36
  52. package/dist/extensions/forgecli/banner.js.map +0 -1
  53. package/dist/extensions/forgecli/calibrate.d.ts +0 -64
  54. package/dist/extensions/forgecli/calibrate.js +0 -481
  55. package/dist/extensions/forgecli/calibrate.js.map +0 -1
  56. package/dist/extensions/forgecli/collate.d.ts +0 -22
  57. package/dist/extensions/forgecli/collate.js +0 -134
  58. package/dist/extensions/forgecli/collate.js.map +0 -1
  59. package/dist/extensions/forgecli/commit.d.ts +0 -22
  60. package/dist/extensions/forgecli/commit.js +0 -152
  61. package/dist/extensions/forgecli/commit.js.map +0 -1
  62. package/dist/extensions/forgecli/config-command.d.ts +0 -8
  63. package/dist/extensions/forgecli/config-command.js +0 -67
  64. package/dist/extensions/forgecli/config-command.js.map +0 -1
  65. package/dist/extensions/forgecli/config-layer.d.ts +0 -53
  66. package/dist/extensions/forgecli/config-layer.js +0 -72
  67. package/dist/extensions/forgecli/config-layer.js.map +0 -1
  68. package/dist/extensions/forgecli/config-writer.d.ts +0 -16
  69. package/dist/extensions/forgecli/config-writer.js +0 -69
  70. package/dist/extensions/forgecli/config-writer.js.map +0 -1
  71. package/dist/extensions/forgecli/enhance.d.ts +0 -27
  72. package/dist/extensions/forgecli/enhance.js +0 -199
  73. package/dist/extensions/forgecli/enhance.js.map +0 -1
  74. package/dist/extensions/forgecli/fix-bug.d.ts +0 -85
  75. package/dist/extensions/forgecli/fix-bug.js +0 -1580
  76. package/dist/extensions/forgecli/fix-bug.js.map +0 -1
  77. package/dist/extensions/forgecli/forge-header.d.ts +0 -12
  78. package/dist/extensions/forgecli/forge-header.js +0 -114
  79. package/dist/extensions/forgecli/forge-header.js.map +0 -1
  80. package/dist/extensions/forgecli/forge-init.d.ts +0 -26
  81. package/dist/extensions/forgecli/forge-init.js +0 -514
  82. package/dist/extensions/forgecli/forge-init.js.map +0 -1
  83. package/dist/extensions/forgecli/forge-root.d.ts +0 -10
  84. package/dist/extensions/forgecli/forge-root.js +0 -62
  85. package/dist/extensions/forgecli/forge-root.js.map +0 -1
  86. package/dist/extensions/forgecli/forge-update-command.d.ts +0 -100
  87. package/dist/extensions/forgecli/forge-update-command.js +0 -435
  88. package/dist/extensions/forgecli/forge-update-command.js.map +0 -1
  89. package/dist/extensions/forgecli/friction-emit.d.ts +0 -99
  90. package/dist/extensions/forgecli/friction-emit.js +0 -245
  91. package/dist/extensions/forgecli/friction-emit.js.map +0 -1
  92. package/dist/extensions/forgecli/implement.d.ts +0 -22
  93. package/dist/extensions/forgecli/implement.js +0 -170
  94. package/dist/extensions/forgecli/implement.js.map +0 -1
  95. package/dist/extensions/forgecli/init-context.d.ts +0 -99
  96. package/dist/extensions/forgecli/init-context.js +0 -178
  97. package/dist/extensions/forgecli/init-context.js.map +0 -1
  98. package/dist/extensions/forgecli/init-progress.d.ts +0 -39
  99. package/dist/extensions/forgecli/init-progress.js +0 -117
  100. package/dist/extensions/forgecli/init-progress.js.map +0 -1
  101. package/dist/extensions/forgecli/input-router.d.ts +0 -33
  102. package/dist/extensions/forgecli/input-router.js +0 -136
  103. package/dist/extensions/forgecli/input-router.js.map +0 -1
  104. package/dist/extensions/forgecli/lib/halt-advisor.d.ts +0 -59
  105. package/dist/extensions/forgecli/lib/halt-advisor.js +0 -113
  106. package/dist/extensions/forgecli/lib/halt-advisor.js.map +0 -1
  107. package/dist/extensions/forgecli/lib/orchestrator-preflight.d.ts +0 -46
  108. package/dist/extensions/forgecli/lib/orchestrator-preflight.js +0 -64
  109. package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +0 -1
  110. package/dist/extensions/forgecli/materialize.d.ts +0 -16
  111. package/dist/extensions/forgecli/materialize.js +0 -195
  112. package/dist/extensions/forgecli/materialize.js.map +0 -1
  113. package/dist/extensions/forgecli/migrate.d.ts +0 -22
  114. package/dist/extensions/forgecli/migrate.js +0 -260
  115. package/dist/extensions/forgecli/migrate.js.map +0 -1
  116. package/dist/extensions/forgecli/migration-engine.d.ts +0 -117
  117. package/dist/extensions/forgecli/migration-engine.js +0 -563
  118. package/dist/extensions/forgecli/migration-engine.js.map +0 -1
  119. package/dist/extensions/forgecli/model-registry.d.ts +0 -61
  120. package/dist/extensions/forgecli/model-registry.js +0 -127
  121. package/dist/extensions/forgecli/model-registry.js.map +0 -1
  122. package/dist/extensions/forgecli/model-resolver.d.ts +0 -32
  123. package/dist/extensions/forgecli/model-resolver.js +0 -65
  124. package/dist/extensions/forgecli/model-resolver.js.map +0 -1
  125. package/dist/extensions/forgecli/model-validator.d.ts +0 -29
  126. package/dist/extensions/forgecli/model-validator.js +0 -107
  127. package/dist/extensions/forgecli/model-validator.js.map +0 -1
  128. package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +0 -26
  129. package/dist/extensions/forgecli/orchestrator-status-bar.js +0 -213
  130. package/dist/extensions/forgecli/orchestrator-status-bar.js.map +0 -1
  131. package/dist/extensions/forgecli/plan.d.ts +0 -22
  132. package/dist/extensions/forgecli/plan.js +0 -167
  133. package/dist/extensions/forgecli/plan.js.map +0 -1
  134. package/dist/extensions/forgecli/quiz-agent.d.ts +0 -17
  135. package/dist/extensions/forgecli/quiz-agent.js +0 -98
  136. package/dist/extensions/forgecli/quiz-agent.js.map +0 -1
  137. package/dist/extensions/forgecli/read-command.d.ts +0 -2
  138. package/dist/extensions/forgecli/read-command.js +0 -100
  139. package/dist/extensions/forgecli/read-command.js.map +0 -1
  140. package/dist/extensions/forgecli/regenerate.d.ts +0 -40
  141. package/dist/extensions/forgecli/regenerate.js +0 -438
  142. package/dist/extensions/forgecli/regenerate.js.map +0 -1
  143. package/dist/extensions/forgecli/remove-command.d.ts +0 -17
  144. package/dist/extensions/forgecli/remove-command.js +0 -124
  145. package/dist/extensions/forgecli/remove-command.js.map +0 -1
  146. package/dist/extensions/forgecli/report-bug.d.ts +0 -25
  147. package/dist/extensions/forgecli/report-bug.js +0 -159
  148. package/dist/extensions/forgecli/report-bug.js.map +0 -1
  149. package/dist/extensions/forgecli/retrospective.d.ts +0 -20
  150. package/dist/extensions/forgecli/retrospective.js +0 -126
  151. package/dist/extensions/forgecli/retrospective.js.map +0 -1
  152. package/dist/extensions/forgecli/review-code.d.ts +0 -35
  153. package/dist/extensions/forgecli/review-code.js +0 -196
  154. package/dist/extensions/forgecli/review-code.js.map +0 -1
  155. package/dist/extensions/forgecli/review-plan.d.ts +0 -35
  156. package/dist/extensions/forgecli/review-plan.js +0 -200
  157. package/dist/extensions/forgecli/review-plan.js.map +0 -1
  158. package/dist/extensions/forgecli/run-sprint.d.ts +0 -27
  159. package/dist/extensions/forgecli/run-sprint.js +0 -716
  160. package/dist/extensions/forgecli/run-sprint.js.map +0 -1
  161. package/dist/extensions/forgecli/run-task.d.ts +0 -204
  162. package/dist/extensions/forgecli/run-task.js +0 -1403
  163. package/dist/extensions/forgecli/run-task.js.map +0 -1
  164. package/dist/extensions/forgecli/skill-curation-flag.d.ts +0 -21
  165. package/dist/extensions/forgecli/skill-curation-flag.js +0 -71
  166. package/dist/extensions/forgecli/skill-curation-flag.js.map +0 -1
  167. package/dist/extensions/forgecli/skill-curator-subagent.d.ts +0 -102
  168. package/dist/extensions/forgecli/skill-curator-subagent.js +0 -339
  169. package/dist/extensions/forgecli/skill-curator-subagent.js.map +0 -1
  170. package/dist/extensions/forgecli/skill-retriever.d.ts +0 -84
  171. package/dist/extensions/forgecli/skill-retriever.js +0 -246
  172. package/dist/extensions/forgecli/skill-retriever.js.map +0 -1
  173. package/dist/extensions/forgecli/skill-usage-tracker.d.ts +0 -91
  174. package/dist/extensions/forgecli/skill-usage-tracker.js +0 -224
  175. package/dist/extensions/forgecli/skill-usage-tracker.js.map +0 -1
  176. package/dist/extensions/forgecli/sprint-intake.d.ts +0 -10
  177. package/dist/extensions/forgecli/sprint-intake.js +0 -91
  178. package/dist/extensions/forgecli/sprint-intake.js.map +0 -1
  179. package/dist/extensions/forgecli/sprint-plan.d.ts +0 -14
  180. package/dist/extensions/forgecli/sprint-plan.js +0 -122
  181. package/dist/extensions/forgecli/sprint-plan.js.map +0 -1
  182. package/dist/extensions/forgecli/status-command.d.ts +0 -19
  183. package/dist/extensions/forgecli/status-command.js +0 -140
  184. package/dist/extensions/forgecli/status-command.js.map +0 -1
  185. package/dist/extensions/forgecli/store-error-remediation.d.ts +0 -65
  186. package/dist/extensions/forgecli/store-error-remediation.js +0 -307
  187. package/dist/extensions/forgecli/store-error-remediation.js.map +0 -1
  188. package/dist/extensions/forgecli/store-query.d.ts +0 -22
  189. package/dist/extensions/forgecli/store-query.js +0 -107
  190. package/dist/extensions/forgecli/store-query.js.map +0 -1
  191. package/dist/extensions/forgecli/store-repair.d.ts +0 -17
  192. package/dist/extensions/forgecli/store-repair.js +0 -123
  193. package/dist/extensions/forgecli/store-repair.js.map +0 -1
  194. package/dist/extensions/forgecli/store-resolver.d.ts +0 -56
  195. package/dist/extensions/forgecli/store-resolver.js +0 -263
  196. package/dist/extensions/forgecli/store-resolver.js.map +0 -1
  197. package/dist/extensions/forgecli/store-validator.d.ts +0 -16
  198. package/dist/extensions/forgecli/store-validator.js +0 -32
  199. package/dist/extensions/forgecli/store-validator.js.map +0 -1
  200. package/dist/extensions/forgecli/test-orchestrate.d.ts +0 -2
  201. package/dist/extensions/forgecli/test-orchestrate.js +0 -182
  202. package/dist/extensions/forgecli/test-orchestrate.js.map +0 -1
  203. package/dist/extensions/forgecli/thread-switcher.d.ts +0 -5
  204. package/dist/extensions/forgecli/thread-switcher.js +0 -189
  205. package/dist/extensions/forgecli/thread-switcher.js.map +0 -1
  206. package/dist/extensions/forgecli/transition-guard.d.ts +0 -20
  207. package/dist/extensions/forgecli/transition-guard.js +0 -89
  208. package/dist/extensions/forgecli/transition-guard.js.map +0 -1
  209. package/dist/extensions/forgecli/update-check.d.ts +0 -37
  210. package/dist/extensions/forgecli/update-check.js +0 -185
  211. package/dist/extensions/forgecli/update-check.js.map +0 -1
  212. package/dist/extensions/forgecli/update-tools.d.ts +0 -23
  213. package/dist/extensions/forgecli/update-tools.js +0 -135
  214. package/dist/extensions/forgecli/update-tools.js.map +0 -1
  215. package/dist/extensions/forgecli/validate.d.ts +0 -22
  216. package/dist/extensions/forgecli/validate.js +0 -152
  217. package/dist/extensions/forgecli/validate.js.map +0 -1
  218. package/dist/extensions/forgecli/viewport-events.d.ts +0 -78
  219. package/dist/extensions/forgecli/viewport-events.js +0 -243
  220. package/dist/extensions/forgecli/viewport-events.js.map +0 -1
  221. package/dist/extensions/forgecli/viewport-renderer.d.ts +0 -83
  222. package/dist/extensions/forgecli/viewport-renderer.js +0 -233
  223. package/dist/extensions/forgecli/viewport-renderer.js.map +0 -1
  224. package/dist/extensions/forgecli/viewport-theme.d.ts +0 -11
  225. package/dist/extensions/forgecli/viewport-theme.js +0 -128
  226. package/dist/extensions/forgecli/viewport-theme.js.map +0 -1
  227. package/dist/extensions/forgecli/whats-new-widget.d.ts +0 -26
  228. package/dist/extensions/forgecli/whats-new-widget.js +0 -376
  229. package/dist/extensions/forgecli/whats-new-widget.js.map +0 -1
  230. package/dist/extensions/forgecli/whats-new.d.ts +0 -120
  231. package/dist/extensions/forgecli/whats-new.js +0 -470
  232. package/dist/extensions/forgecli/whats-new.js.map +0 -1
@@ -1,481 +0,0 @@
1
- // calibrate.ts — /forge:calibrate orchestrator handler (FORGE-S23-T08).
2
- //
3
- // 4-phase flow matching calibrate.md:
4
- // Phase 1 — Structural-element readiness check (advisory, never blocks)
5
- // Phase 2 — Hash drift detection (deterministic). Auto-initializes baseline if absent.
6
- // Phase 3 — Architect patch proposal via runForgeSubagent
7
- // Phase 4 — Approval gate (ctx.ui.confirm) + patch application + calibration history write
8
- //
9
- // Non-interactive mode (FORGE_YES=1 or FORGE_NON_INTERACTIVE=1): auto-apply all patches.
10
- //
11
- // Iron Laws:
12
- // IL1 — code only under forge-cli/src/extensions/forgecli/
13
- // IL6 — no shell-string interpolation
14
- // IL7 — every failure path emits ctx.ui.notify and returns; no silent continuation
15
- // IL10 — LLM dispatch for patch-proposal phase goes through runForgeSubagent
16
- import * as crypto from "node:crypto";
17
- import * as fs from "node:fs";
18
- import * as path from "node:path";
19
- import { getBundledPayloadRoot } from "./forge-init.js";
20
- import { getFinalOutput, loadForgePersona, runForgeSubagent } from "./forge-subagent.js";
21
- import { getSubagentTools } from "./forge-tools.js";
22
- import { computeCalibrationBaseline } from "./init-context.js";
23
- import { isNonInteractive } from "./run-task.js";
24
- // ── Bundled forge version ─────────────────────────────────────────────────
25
- /**
26
- * Read the bundled forge version from .claude-plugin/plugin.json inside the
27
- * bundled payload root. Falls back to "0.0.0" on any error.
28
- * Mirrors the private getBundledForgeVersion() in forge-init.ts.
29
- */
30
- function getBundledForgeVersion() {
31
- try {
32
- const pluginPath = path.join(getBundledPayloadRoot(), ".claude-plugin", "plugin.json");
33
- const raw = fs.readFileSync(pluginPath, "utf8");
34
- const plugin = JSON.parse(raw);
35
- return typeof plugin.version === "string" ? plugin.version : "0.0.0";
36
- }
37
- catch {
38
- return "0.0.0";
39
- }
40
- }
41
- /**
42
- * Parse /forge:calibrate arguments.
43
- * Supports: --path <dir>
44
- */
45
- export function parseCalibrateFlags(args) {
46
- const parts = args.trim().split(/\s+/).filter(Boolean);
47
- let customPath = null;
48
- for (let i = 0; i < parts.length; i++) {
49
- if (parts[i] === "--path" && i + 1 < parts.length) {
50
- customPath = parts[i + 1];
51
- i++;
52
- }
53
- }
54
- return { path: customPath };
55
- }
56
- /** Read and parse .forge/config.json from projectRoot. Returns null on any error. */
57
- export function readForgeConfig(projectRoot) {
58
- const cfgPath = path.join(projectRoot, ".forge", "config.json");
59
- try {
60
- const raw = fs.readFileSync(cfgPath, "utf8");
61
- return JSON.parse(raw);
62
- }
63
- catch {
64
- return null;
65
- }
66
- }
67
- /** Write ForgeConfig to .forge/config.json. */
68
- function writeForgeConfig(projectRoot, cfg) {
69
- const cfgPath = path.join(projectRoot, ".forge", "config.json");
70
- fs.writeFileSync(cfgPath, JSON.stringify(cfg, null, 2) + "\n", "utf8");
71
- }
72
- // ── Hash computation ──────────────────────────────────────────────────────
73
- /**
74
- * Compute SHA-256 of MASTER_INDEX.md, stripping blank lines and HTML comment lines.
75
- * Returns null if the file does not exist.
76
- */
77
- export function computeCurrentHash(projectRoot, kbPath) {
78
- const masterIndexPath = path.join(projectRoot, kbPath, "MASTER_INDEX.md");
79
- try {
80
- const content = fs.readFileSync(masterIndexPath, "utf8");
81
- const lines = content.split("\n").filter((l) => l.trim() && !l.trim().startsWith("<!--"));
82
- return crypto.createHash("sha256").update(lines.join("\n")).digest("hex");
83
- }
84
- catch {
85
- return null;
86
- }
87
- }
88
- const SECTION_CATEGORY_MAP = [
89
- {
90
- keywords: [
91
- "stack",
92
- "architecture",
93
- "routing",
94
- "database",
95
- "deployment",
96
- "processes",
97
- "schema",
98
- "checklist",
99
- "convention",
100
- ],
101
- category: "technical",
102
- targets: ["personas:engineer", "skills:engineer-skills", "skills:supervisor-skills"],
103
- },
104
- {
105
- keywords: ["entity", "domain", "feature", "business", "model"],
106
- category: "business",
107
- targets: ["personas:all"],
108
- },
109
- {
110
- keywords: ["retrospective", "iron law", "lesson", "learning"],
111
- category: "retrospective",
112
- targets: ["personas:all"],
113
- },
114
- {
115
- keywords: ["acceptance", "criteria", "validation", "qa"],
116
- category: "acceptance criteria",
117
- targets: ["personas:product-manager", "skills:qa-engineer"],
118
- },
119
- ];
120
- /**
121
- * Categorize drift by scanning MASTER_INDEX.md content for section keywords
122
- * and identifying new sprints since last calibration.
123
- */
124
- export function categorizeDrift(projectRoot, kbPath, baseline) {
125
- const found = new Map();
126
- // Read MASTER_INDEX.md for keyword-based section categorization
127
- const masterIndexPath = path.join(projectRoot, kbPath, "MASTER_INDEX.md");
128
- let masterIndexContent = "";
129
- try {
130
- masterIndexContent = fs.readFileSync(masterIndexPath, "utf8").toLowerCase();
131
- }
132
- catch {
133
- // If we cannot read it, report generic technical drift
134
- found.set("technical", {
135
- category: "technical",
136
- evidence: "MASTER_INDEX.md changed (content unreadable)",
137
- targets: ["personas:engineer", "skills:engineer-skills", "skills:supervisor-skills"],
138
- });
139
- return [...found.values()];
140
- }
141
- // Check each category's keywords against content
142
- for (const mapping of SECTION_CATEGORY_MAP) {
143
- const matched = mapping.keywords.filter((kw) => masterIndexContent.includes(kw));
144
- if (matched.length > 0) {
145
- if (!found.has(mapping.category)) {
146
- found.set(mapping.category, {
147
- category: mapping.category,
148
- evidence: `MASTER_INDEX.md contains ${mapping.category} content (keywords: ${matched.slice(0, 3).join(", ")})`,
149
- targets: [...mapping.targets],
150
- });
151
- }
152
- }
153
- }
154
- // Identify new sprints since last calibration
155
- const coveredIds = new Set(Array.isArray(baseline.sprintsCovered) ? baseline.sprintsCovered : []);
156
- const storeSprintsDir = path.join(projectRoot, ".forge", "store", "sprints");
157
- let newSprintCount = 0;
158
- try {
159
- const files = fs.readdirSync(storeSprintsDir).filter((f) => f.endsWith(".json"));
160
- for (const f of files) {
161
- try {
162
- const raw = fs.readFileSync(path.join(storeSprintsDir, f), "utf8");
163
- const sprint = JSON.parse(raw);
164
- if (typeof sprint.sprintId === "string" &&
165
- (sprint.status === "done" || sprint.status === "retrospective-done") &&
166
- !coveredIds.has(sprint.sprintId)) {
167
- newSprintCount++;
168
- }
169
- }
170
- catch {
171
- // Skip malformed sprint file
172
- }
173
- }
174
- }
175
- catch {
176
- // Store not accessible
177
- }
178
- if (newSprintCount > 0) {
179
- if (!found.has("retrospective")) {
180
- found.set("retrospective", {
181
- category: "retrospective",
182
- evidence: `${newSprintCount} new completed sprint(s) since last calibration`,
183
- targets: ["personas:all"],
184
- });
185
- }
186
- }
187
- // If nothing found but hash changed, report generic technical drift
188
- if (found.size === 0) {
189
- found.set("technical", {
190
- category: "technical",
191
- evidence: "MASTER_INDEX.md hash changed — specific section changes not identified",
192
- targets: ["personas:engineer", "skills:engineer-skills", "skills:supervisor-skills"],
193
- });
194
- }
195
- return [...found.values()];
196
- }
197
- function buildPatchProposalPrompt(categories) {
198
- const lines = [
199
- "# Forge Calibration — Patch Proposal Request",
200
- "",
201
- "You are the Forge Architect. Drift has been detected in the project knowledge base.",
202
- "Review the drift categories below and propose surgical regeneration patches.",
203
- "",
204
- "## Drift Report",
205
- "",
206
- ];
207
- for (let i = 0; i < categories.length; i++) {
208
- const cat = categories[i];
209
- lines.push(`### Category ${i + 1}: ${cat.category.charAt(0).toUpperCase() + cat.category.slice(1)}`, `Evidence: ${cat.evidence}`, `Suggested targets: ${cat.targets.join(", ")}`, "");
210
- }
211
- lines.push("## Instructions", "", "For each drift category, output a JSON block (one per patch) with this exact structure:", "", "```json", "{", ' "target": "<target string e.g. personas:engineer or skills:engineer-skills>",', ' "type": "regenerate",', ' "rationale": "<brief explanation of why this target needs regeneration>"', "}", "```", "", "Output one json block per proposed patch. Add prose analysis before or after the blocks.", "If a suggested target is redundant or not needed, omit it and explain why.", "", "Targets must be from this set:", "- personas:engineer", "- personas:product-manager", "- personas:all (full persona rebuild)", "- skills:engineer-skills", "- skills:supervisor-skills", "- skills:qa-engineer", "- skills:all (full skills rebuild)");
212
- return lines.join("\n");
213
- }
214
- /** Extract PatchProposal objects from the architect's free-form response text. */
215
- export function extractPatchProposals(text) {
216
- const proposals = [];
217
- const blockRegex = /```json\s*([\s\S]+?)\s*```/g;
218
- let match;
219
- while ((match = blockRegex.exec(text)) !== null) {
220
- try {
221
- const obj = JSON.parse(match[1]);
222
- if (typeof obj.target === "string" && obj.type === "regenerate" && typeof obj.rationale === "string") {
223
- proposals.push({ target: obj.target, type: "regenerate", rationale: obj.rationale });
224
- }
225
- }
226
- catch {
227
- // Skip malformed JSON blocks
228
- }
229
- }
230
- return proposals;
231
- }
232
- // ── Structural readiness check ────────────────────────────────────────────
233
- function runStructuralReadinessCheck(projectRoot, bundledVersion, ctx) {
234
- const versionsPath = path.join(projectRoot, ".forge", "structure-versions.json");
235
- try {
236
- const raw = fs.readFileSync(versionsPath, "utf8");
237
- const versionsData = JSON.parse(raw);
238
- const { basePackVersion, currentSnapshot } = versionsData;
239
- if (basePackVersion === bundledVersion) {
240
- ctx.ui.notify(`○ Structural elements current — snapshot ${currentSnapshot ?? "?"} (plugin v${basePackVersion})`, "info");
241
- }
242
- else {
243
- ctx.ui.notify(`△ Structural element drift detected — installed elements were generated from plugin v${basePackVersion ?? "?"}; ` +
244
- `current plugin is v${bundledVersion}. Run /forge:update to refresh structural elements.`, "warning");
245
- }
246
- }
247
- catch (err) {
248
- const e = err;
249
- if (e.code === "ENOENT") {
250
- ctx.ui.notify(`◇ structure-versions.json absent — project predates snapshot versioning. Run /forge:update to install the versioning system.`, "info");
251
- }
252
- // Other errors: silently skip (advisory only)
253
- }
254
- }
255
- // ── Registration ──────────────────────────────────────────────────────────
256
- export function registerCalibrate(pi, options = {}) {
257
- const sendToAgent = async (text) => {
258
- await pi.sendUserMessage(text, { deliverAs: "steer" });
259
- };
260
- pi.registerCommand("forge:calibrate", {
261
- description: "Detect drift between the knowledge base and agent definitions, propose surgical regeneration patches, and apply approved patches.",
262
- async handler(args, ctx) {
263
- const rawCwd = process.cwd();
264
- const flags = parseCalibrateFlags(args);
265
- // Resolve projectRoot from --path flag or cwd
266
- let projectRoot = rawCwd;
267
- if (flags.path !== null) {
268
- projectRoot = path.isAbsolute(flags.path) ? flags.path : path.resolve(rawCwd, flags.path);
269
- }
270
- const bundleRoot = getBundledPayloadRoot();
271
- const bundledVersion = getBundledForgeVersion();
272
- // ── Step 0 — Structural-element readiness check (advisory) ──────────
273
- runStructuralReadinessCheck(projectRoot, bundledVersion, ctx);
274
- // ── Step 1 — Read config ─────────────────────────────────────────────
275
- const cfg = readForgeConfig(projectRoot);
276
- if (!cfg) {
277
- ctx.ui.notify("△ No Forge instance found — run /forge:init to create one.", "error");
278
- return;
279
- }
280
- const kbPath = cfg.paths?.engineering ?? "engineering";
281
- const forgeRoot = cfg.paths?.forgeRoot ?? bundleRoot;
282
- // ── Step 2 — Establish or verify calibration baseline ────────────────
283
- const baseline = cfg.calibrationBaseline;
284
- if (!baseline || !baseline.masterIndexHash) {
285
- // Auto-initialize baseline
286
- ctx.ui.notify("○ No calibration baseline found — initializing...", "info");
287
- const newBaseline = computeCalibrationBaseline(projectRoot, kbPath, bundledVersion);
288
- cfg.calibrationBaseline = newBaseline;
289
- try {
290
- writeForgeConfig(projectRoot, cfg);
291
- ctx.ui.notify(`○ Baseline established — calibration baseline written to config ` +
292
- `(version: ${bundledVersion}, sprints covered: ${newBaseline.sprintsCovered.length})`, "info");
293
- }
294
- catch (err) {
295
- const e = err;
296
- ctx.ui.notify(`× Failed to write calibration baseline: ${e.message ?? "unknown"}`, "error");
297
- }
298
- return;
299
- }
300
- // ── Step 3 — Detect drift ────────────────────────────────────────────
301
- const currentHash = computeCurrentHash(projectRoot, kbPath);
302
- if (currentHash !== null && currentHash === baseline.masterIndexHash) {
303
- ctx.ui.notify(`○ KB calibrated — no drift since last calibration ` +
304
- `(last: ${baseline.lastCalibrated ?? "unknown"}, version: ${baseline.version ?? "unknown"})`, "info");
305
- return;
306
- }
307
- ctx.ui.notify("△ Drift detected in MASTER_INDEX.md — analyzing...", "warning");
308
- // ── Step 4 — Categorize drift ────────────────────────────────────────
309
- const driftCategories = categorizeDrift(projectRoot, kbPath, baseline);
310
- if (driftCategories.length === 0) {
311
- ctx.ui.notify("△ Drift detected in MASTER_INDEX.md but no specific category changes identified. " +
312
- "Run /forge:rebuild to do a full rebuild.", "warning");
313
- return;
314
- }
315
- // ── Step 5 — Propose patches via architect subagent ──────────────────
316
- ctx.ui.setStatus?.("forge:health", "Generating patch proposals...");
317
- let proposals = [];
318
- try {
319
- const architectPersona = loadForgePersona("architect", projectRoot);
320
- const patchPrompt = buildPatchProposalPrompt(driftCategories);
321
- const result = await runForgeSubagent({
322
- persona: architectPersona,
323
- task: patchPrompt,
324
- cwd: projectRoot,
325
- forgeRoot,
326
- signal: ctx.signal,
327
- customTools: options.forgeToolDefs
328
- ? getSubagentTools(options.forgeToolDefs, architectPersona.name)
329
- : undefined,
330
- });
331
- if (result.exitCode !== 0) {
332
- ctx.ui.notify(`△ Architect subagent returned non-zero: ${result.errorMessage ?? "unknown error"}. ` +
333
- "Using drift categories directly as patch targets.", "warning");
334
- proposals = driftCategories.flatMap((cat) => cat.targets.map((t) => ({
335
- target: t,
336
- type: "regenerate",
337
- rationale: cat.evidence,
338
- })));
339
- }
340
- else {
341
- const proposalText = getFinalOutput(result.messages);
342
- proposals = extractPatchProposals(proposalText);
343
- if (proposals.length === 0) {
344
- ctx.ui.notify("△ Patch proposal parsing yielded no structured patches — using drift categories as targets.", "warning");
345
- proposals = driftCategories.flatMap((cat) => cat.targets.map((t) => ({
346
- target: t,
347
- type: "regenerate",
348
- rationale: cat.evidence,
349
- })));
350
- }
351
- }
352
- }
353
- catch (err) {
354
- const e = err;
355
- ctx.ui.notify(`△ Architect subagent failed: ${e.message ?? "unknown"}. Using drift categories as targets.`, "warning");
356
- proposals = driftCategories.flatMap((cat) => cat.targets.map((t) => ({
357
- target: t,
358
- type: "regenerate",
359
- rationale: cat.evidence,
360
- })));
361
- }
362
- ctx.ui.setStatus?.("forge:health", undefined);
363
- // ── Step 6 — Approval gate ───────────────────────────────────────────
364
- const driftLines = [
365
- "",
366
- `## Calibration Drift Report`,
367
- "",
368
- `△ Drift detected — ${driftCategories.length} categories since last calibration ` +
369
- `(${baseline.lastCalibrated ?? "unknown"})`,
370
- "",
371
- ];
372
- for (let i = 0; i < driftCategories.length; i++) {
373
- const cat = driftCategories[i];
374
- const catProposals = proposals.filter((p) => cat.targets.includes(p.target));
375
- driftLines.push(`### Category ${i + 1}: ${cat.category.charAt(0).toUpperCase() + cat.category.slice(1)}`, ` Evidence: ${cat.evidence}`, ` Proposed regeneration:`, ...catProposals.map((p) => ` · ${p.target}`), "");
376
- }
377
- ctx.ui.notify(driftLines.join("\n"), "info");
378
- const approvedPatches = [];
379
- const skippedPatches = [];
380
- if (isNonInteractive()) {
381
- ctx.ui.notify(`○ Non-interactive mode — auto-applying all ${proposals.length} patch(es).`, "info");
382
- for (const p of proposals) {
383
- approvedPatches.push({ ...p, applied: false });
384
- }
385
- }
386
- else {
387
- const proposalSummary = proposals.map((p, i) => `${i + 1}. ${p.target} — ${p.rationale}`).join("\n");
388
- const applyAll = await ctx.ui.confirm("Apply all calibration patches?", `${proposals.length} patch(es) proposed:\n\n${proposalSummary}\n\nYes = apply all | No = skip all`);
389
- if (!applyAll) {
390
- ctx.ui.notify("○ Calibration patches skipped — run /forge:health --fix again to apply.", "info");
391
- skippedPatches.push(...proposals);
392
- }
393
- else {
394
- for (const p of proposals) {
395
- approvedPatches.push({ ...p, applied: false });
396
- }
397
- }
398
- }
399
- // ── Step 7 — Execute approved patches ────────────────────────────────
400
- for (const patch of approvedPatches) {
401
- ctx.ui.notify(` → Regenerating ${patch.target}...`, "info");
402
- try {
403
- // Delegate to LLM via steer channel. sendToAgent is awaited (resolves after
404
- // agent completes when idle; enqueues steer when streaming). waitForIdle covers
405
- // the streaming case and is a no-op when idle (F2 from plan review).
406
- await sendToAgent(`Run /forge:regenerate for target: ${patch.target}\n\n` +
407
- `Regenerate the Forge knowledge base target: ${patch.target}\n` +
408
- `Project root: ${projectRoot}`);
409
- await ctx.waitForIdle();
410
- patch.applied = true;
411
- ctx.ui.notify(` ○ ${patch.target} regenerated.`, "info");
412
- }
413
- catch (err) {
414
- const e = err;
415
- ctx.ui.notify(` △ Regeneration failed for ${patch.target}: ${e.message ?? "unknown"} — skipping.`, "warning");
416
- patch.applied = false;
417
- }
418
- }
419
- // ── Step 8 — Update calibration state ────────────────────────────────
420
- const newHash = computeCurrentHash(projectRoot, kbPath);
421
- const newBaseline = computeCalibrationBaseline(projectRoot, kbPath, bundledVersion);
422
- if (newHash !== null) {
423
- newBaseline.masterIndexHash = newHash;
424
- }
425
- const historyPatches = [
426
- ...approvedPatches.map((p) => ({
427
- target: p.target,
428
- type: "regenerate",
429
- applied: p.applied,
430
- })),
431
- ...skippedPatches.map((p) => ({
432
- target: p.target,
433
- type: "regenerate",
434
- applied: false,
435
- })),
436
- ];
437
- const historyEntry = {
438
- date: new Date().toISOString(),
439
- version: bundledVersion,
440
- categories: driftCategories.map((c) => c.category),
441
- patches: historyPatches,
442
- };
443
- cfg.calibrationBaseline = newBaseline;
444
- if (!Array.isArray(cfg.calibrationHistory)) {
445
- cfg.calibrationHistory = [];
446
- }
447
- cfg.calibrationHistory.push(historyEntry);
448
- try {
449
- writeForgeConfig(projectRoot, cfg);
450
- }
451
- catch (err) {
452
- const e = err;
453
- ctx.ui.notify(`△ Failed to update calibration state: ${e.message ?? "unknown"} — baseline may be stale.`, "warning");
454
- }
455
- // ── Step 9 — Summary ─────────────────────────────────────────────────
456
- const appliedCount = approvedPatches.filter((p) => p.applied).length;
457
- const totalCount = approvedPatches.length + skippedPatches.length;
458
- const appliedTargets = approvedPatches
459
- .filter((p) => p.applied)
460
- .map((p) => p.target)
461
- .join(", ");
462
- const summaryLines = [
463
- "",
464
- "## ○ Calibration Complete",
465
- "",
466
- ` Patches applied: ${appliedCount} of ${totalCount}`,
467
- ` Regenerated: ${appliedTargets || "(none)"}`,
468
- ` Baseline updated: ${newBaseline.lastCalibrated}`,
469
- "",
470
- "── Run /forge:health to verify knowledge base currency.",
471
- ];
472
- const failedPatches = approvedPatches.filter((p) => !p.applied);
473
- if (failedPatches.length > 0) {
474
- const failedTargets = failedPatches.map((p) => p.target).join(", ");
475
- summaryLines.push("", `△ Failed patches: ${failedTargets}`, "── Re-run /forge:calibrate or manually /forge:regenerate the failed targets.");
476
- }
477
- ctx.ui.notify(summaryLines.join("\n"), "info");
478
- },
479
- });
480
- }
481
- //# sourceMappingURL=calibrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calibrate.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/calibrate.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
- import { extractPersonaNames } from "./lib/frontmatter-parser.js";
3
- export { extractPersonaNames };
4
- import { checkMaterialization, type MaterializationCheck } from "./lib/manifest-checker.js";
5
- export { checkMaterialization, type MaterializationCheck };
6
- export type ArgMode = "empty" | "file" | "text";
7
- export interface ParsedArgs {
8
- mode: ArgMode;
9
- taskRef: string;
10
- sourceLabel: string;
11
- }
12
- export declare function parseCollateArgs(rawArgs: string, cwd: string): ParsedArgs;
13
- export interface ComposeKickoffOpts {
14
- workflowMd: string;
15
- personaIdentity: string;
16
- parsed: ParsedArgs;
17
- }
18
- export declare function composeKickoff(opts: ComposeKickoffOpts): string;
19
- export interface RegisterCollateOptions {
20
- cwd?: string;
21
- }
22
- export declare function registerCollate(pi: ExtensionAPI, options?: RegisterCollateOptions): void;