@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,27 +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 EnhancePhase = 1 | 2 | 3;
7
- export interface ParsedArgs {
8
- phase: EnhancePhase;
9
- extra: string;
10
- rawPhaseFlag: string;
11
- }
12
- export declare function parseEnhanceArgs(rawArgs: string): ParsedArgs;
13
- export interface ComposeKickoffOpts {
14
- workflowMd: string;
15
- personaIdentity: string;
16
- parsed: ParsedArgs;
17
- cwd: string;
18
- timestamp: string;
19
- }
20
- export declare function composeKickoff(opts: ComposeKickoffOpts): string;
21
- export declare function defaultNow(): Date;
22
- export declare function formatTimestamp(d: Date): string;
23
- export interface RegisterEnhanceOptions {
24
- cwd?: string;
25
- now?: () => Date;
26
- }
27
- export declare function registerEnhance(pi: ExtensionAPI, options?: RegisterEnhanceOptions): void;
@@ -1,199 +0,0 @@
1
- // forge:enhance — Phase-2 native kickoff handler (FORGE-S20-T04).
2
- //
3
- // Replaces the post-S17 sentinel-writing stub registered in forge-commands.ts.
4
- // The handler is a thin kickoff shim per Pack-04 + Pack-06:
5
- // 1. Reads `.forge/workflows/enhance.md` (the materialized workflow).
6
- // 2. Verifies four Pack-06 materialization markers — refuses to dispatch on
7
- // regression and emits a per-marker `ctx.ui.notify` so a user sees the
8
- // cause.
9
- // 3. Loads the persona declared in the workflow's `deps.personas:`
10
- // frontmatter via the FORGE-S20-T02 loader (no ad-hoc fs.readFile of
11
- // `.forge/personas/`).
12
- // 4. Composes ONE kickoff message: persona identity, phase-specific
13
- // dispatch instruction, the workflow body verbatim, and any free-form
14
- // argv tail.
15
- // 5. Hands control to the LLM via `sendKickoff(pi, text)` —
16
- // `deliverAs: "steer"`. Never raw `pi.sendUserMessage`.
17
- //
18
- // Phase 2 (default) directs the LLM to read friction events ONLY through
19
- // `forge_store_query` (Pack-06 Read/Write/Ask/Store discipline) and to write
20
- // proposals to `engineering/enhancement-proposals/phase2-<timestamp>.md`. If
21
- // zero friction events exist, the LLM emits a notice and writes no file.
22
- //
23
- // Phases 1 and 3 are forwarded with the workflow's own dispatch text.
24
- //
25
- // Iron Laws:
26
- // IL1 — code only under forge-cli/src/extensions/forgecli/.
27
- // IL4 — no JSON.stringify-into-subagent dispatch.
28
- // IL6 — no shell-string interpolation; no spawn calls here.
29
- // IL7 — every failure path emits ctx.ui.notify and returns; no silent
30
- // continuation.
31
- import * as path from "node:path";
32
- import { assertAudience } from "./audience-gate.js";
33
- import { sendKickoff } from "./kickoff.js";
34
- // FORGE-S25-T16: extracted to lib modules (H-1, H-2). Re-exported here for
35
- // backward compatibility with existing test and consumer imports.
36
- import { extractPersonaNames } from "./lib/frontmatter-parser.js";
37
- import { loadPersona, PersonaSkillLoaderError } from "./parsers/persona-skill-loader.js";
38
- import { loadWorkflow, WorkflowLoaderError } from "./parsers/workflow-loader.js";
39
- export { extractPersonaNames };
40
- import { checkMaterialization } from "./lib/manifest-checker.js";
41
- export { checkMaterialization };
42
- const VALID_PHASES = new Set([1, 2, 3]);
43
- export function parseEnhanceArgs(rawArgs) {
44
- const trimmed = (rawArgs ?? "").trim();
45
- if (trimmed === "") {
46
- return { phase: 2, extra: "", rawPhaseFlag: "" };
47
- }
48
- const tokens = trimmed.split(/\s+/);
49
- let phase = 2;
50
- let rawPhaseFlag = "";
51
- const tail = [];
52
- for (let i = 0; i < tokens.length; i++) {
53
- const tok = tokens[i];
54
- if (tok === "--auto") {
55
- phase = 1;
56
- rawPhaseFlag = "--auto";
57
- continue;
58
- }
59
- if (tok === "--phase") {
60
- const next = tokens[i + 1];
61
- if (next === undefined) {
62
- throw new Error("invalid --phase value: missing argument");
63
- }
64
- const n = Number(next);
65
- if (!Number.isInteger(n) || !VALID_PHASES.has(n)) {
66
- throw new Error(`invalid --phase value: ${JSON.stringify(next)} (expected 1, 2, or 3)`);
67
- }
68
- phase = n;
69
- rawPhaseFlag = `--phase ${next}`;
70
- i += 1;
71
- continue;
72
- }
73
- const eqMatch = /^--phase=(.+)$/.exec(tok);
74
- if (eqMatch) {
75
- const n = Number(eqMatch[1]);
76
- if (!Number.isInteger(n) || !VALID_PHASES.has(n)) {
77
- throw new Error(`invalid --phase value: ${JSON.stringify(eqMatch[1])} (expected 1, 2, or 3)`);
78
- }
79
- phase = n;
80
- rawPhaseFlag = tok;
81
- continue;
82
- }
83
- tail.push(tok);
84
- }
85
- return { phase, extra: tail.join(" "), rawPhaseFlag };
86
- }
87
- export function composeKickoff(opts) {
88
- const { workflowMd, personaIdentity, parsed, timestamp } = opts;
89
- const sections = [`# /forge:enhance --phase ${parsed.phase}`, ""];
90
- if (personaIdentity.trim().length > 0) {
91
- sections.push(personaIdentity.trim(), "");
92
- }
93
- if (parsed.phase === 2) {
94
- const proposalRel = path.posix.join("engineering", "enhancement-proposals", `phase2-${timestamp}.md`);
95
- sections.push("## Dispatch — Phase 2 (post-sprint propose-diffs)", "", "Run the workflow below. Specifically:", "", "1. Discover friction events. **Preferred**: `forge_store_query` with `{command:'nlp', args:['events where type=friction']}`. **If that returns zero or a suspiciously low count** (the underlying NLP engine uses keyword heuristics that can miss events), **fall back to the workflow body's filesystem walk** (`meta-enhance.md` Step 1's JS one-liner: read `.forge/store/events/**/*.json`, filter `e => e && e.type === 'friction'`). The fs-walk filter is the source of truth on `type`; the MCP query is a convenience layer over it. Use whichever surfaces the events.", `2. If at least one friction event is present (from either path), synthesize concrete enrichment proposals per the workflow's Phase 2 algorithm, then write them via the \`write\` tool to \`${proposalRel}\` (one section per proposed change, with a fenced diff block showing before/after).`, "3. If genuinely zero friction events are present (both the MCP query AND the fs-walk return empty), emit an explicit notice — `〇 no friction events present — Phase 2 produces no proposals` — and write NO proposal file. Empty artifacts are not acceptable.", "4. Honour the Pack-06 Read/Write/Ask/Store discipline: store writes go via the `forge_store` MCP tool with `{command:'write', args:['<entity>','<json>']}` (2-positional, id INSIDE json); never raw-write `.forge/store/`. Do NOT bash-shell `forge store ...`.", "5. **VERIFY after apply — MANDATORY (forge-cli#31)**: After applying enhancement edits via Edit/Write, BEFORE calling add-snapshot, you MUST call `forge_verify_apply` with the list of claimed file paths. The tool runs `generation-manifest check` on each and returns four buckets: `modified` (verified ✓), `unchanged` (your Edit silently no-op'd — usually an `old_string` whitespace/punctuation mismatch), `untracked` (no manifest entry — treat as potentially modified), `missing` (file gone). **If `unchanged.length > 0`**, you MUST re-apply those edits via Edit/Write and call `forge_verify_apply` again — repeat until `unchanged` is empty. **Do NOT proceed to add-snapshot until every claimed file is in `modified` or `untracked`.** This guard exists because agents historically claim 'Files Modified' in their UI reports while the actual disk content is unchanged; without it the next `/forge:regenerate` overwrites stale state and replay restores nothing.", '6. **Snapshot after verify (forge#107 / forge-cli#30)**: Once `forge_verify_apply` reports no `unchanged` files, MUST call `manage-versions add-snapshot` via bash to capture the verified edits into `.forge/archive/snap-N/`. Without this, the next `/forge:regenerate` cannot restore via replay. Format:\n ```sh\n node "$FORGE_ROOT/tools/manage-versions.cjs" add-snapshot --source post-sprint:<SPRINT_ID> --enhanced-elements "<comma-separated paths, e.g. .forge/personas/architect.md,.forge/skills/engineer-skills.md>"\n ```\n `$FORGE_ROOT` is exported into the bash environment — see the orientation block above for its resolved value. After add-snapshot, verify success by checking `.forge/structure-versions.json`\'s `currentSnapshot` advanced and `ls .forge/archive/snap-N/` is non-empty.');
96
- }
97
- else if (parsed.phase === 1) {
98
- sections.push("## Dispatch — Phase 1 (post-init auto-apply placeholder fills)", "", "Run the workflow's Phase 1 algorithm verbatim. Apply only high-confidence placeholder fills; list low-confidence keys without substituting.");
99
- }
100
- else {
101
- sections.push("## Dispatch — Phase 3 (drift detection)", "", "Run the workflow's Phase 3 algorithm verbatim. Compare codebase state against structural-element knowledge and write the drift report to `.forge/enhancement-proposals/phase3-<timestamp>.md`.");
102
- }
103
- sections.push("", "---", "", "## Workflow", "", workflowMd.trim(), "", "---");
104
- if (parsed.extra.trim().length > 0) {
105
- sections.push("", "## Additional context", "", parsed.extra.trim());
106
- }
107
- return sections.join("\n");
108
- }
109
- // Timestamp helper ---------------------------------------------------------
110
- export function defaultNow() {
111
- return new Date();
112
- }
113
- export function formatTimestamp(d) {
114
- const pad = (n, w = 2) => String(n).padStart(w, "0");
115
- return (`${d.getUTCFullYear()}${pad(d.getUTCMonth() + 1)}${pad(d.getUTCDate())}` +
116
- "T" +
117
- `${pad(d.getUTCHours())}${pad(d.getUTCMinutes())}${pad(d.getUTCSeconds())}Z`);
118
- }
119
- // Registration -------------------------------------------------------------
120
- const WORKFLOW_REL_PATH = path.join(".forge", "workflows", "enhance.md");
121
- export function registerEnhance(pi, options = {}) {
122
- pi.registerCommand("forge:enhance", {
123
- description: "Progressive project-specific enrichment of structural elements. " +
124
- "Usage: /forge:enhance [--phase 1|2|3 | --auto] [free-form context]. " +
125
- "Default phase: 2 (post-sprint propose-diffs).",
126
- async handler(args, ctx) {
127
- const cwd = options.cwd ?? process.cwd();
128
- const workflowPath = path.join(cwd, WORKFLOW_REL_PATH);
129
- let workflowMd;
130
- let workflowAudience;
131
- try {
132
- const loaded = loadWorkflow(workflowPath);
133
- workflowMd = loaded.rawMarkdown;
134
- workflowAudience = loaded.audience;
135
- }
136
- catch (err) {
137
- if (err instanceof WorkflowLoaderError) {
138
- if (err.code === "missing_file") {
139
- ctx.ui.notify(`× forge:enhance — workflow not found at ${WORKFLOW_REL_PATH}; run /forge:init or /forge:rebuild first.`, "error");
140
- }
141
- else {
142
- ctx.ui.notify(`× forge:enhance — workflow load failed (${err.code}): ${err.message}`, "error");
143
- }
144
- return;
145
- }
146
- const e = err;
147
- ctx.ui.notify(`× forge:enhance — failed to read workflow: ${e.message ?? "unknown"}`, "error");
148
- return;
149
- }
150
- let parsed;
151
- try {
152
- parsed = parseEnhanceArgs(args);
153
- }
154
- catch (err) {
155
- const e = err;
156
- ctx.ui.notify(`× forge:enhance — ${e.message ?? "argv parse failed"}`, "error");
157
- return;
158
- }
159
- const check = checkMaterialization(workflowPath, workflowMd);
160
- if (!check.ok) {
161
- for (const marker of check.missing) {
162
- ctx.ui.notify(`× workflow regression: ${marker} not found in ${workflowPath}`, "error");
163
- }
164
- return;
165
- }
166
- const personas = extractPersonaNames(workflowMd);
167
- let personaIdentity = "";
168
- if (personas.length > 0) {
169
- try {
170
- const persona = loadPersona(personas[0], { cwd });
171
- personaIdentity = persona.identity;
172
- }
173
- catch (err) {
174
- if (err instanceof PersonaSkillLoaderError) {
175
- ctx.ui.notify(`× forge:enhance — persona '${personas[0]}' load failed (${err.code}): ${err.message}`, "error");
176
- return;
177
- }
178
- const e = err;
179
- ctx.ui.notify(`× forge:enhance — persona load error: ${e.message ?? "unknown"}`, "error");
180
- return;
181
- }
182
- }
183
- if (!assertAudience({ workflowName: "enhance", audience: workflowAudience }, ctx)) {
184
- return;
185
- }
186
- const now = options.now ?? defaultNow;
187
- const timestamp = formatTimestamp(now());
188
- const kickoff = composeKickoff({
189
- workflowMd,
190
- personaIdentity,
191
- parsed,
192
- cwd,
193
- timestamp,
194
- });
195
- sendKickoff(pi, kickoff);
196
- },
197
- });
198
- }
199
- //# sourceMappingURL=enhance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/enhance.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
2
- import { type ForgeToolDefs } from "./forge-tools.js";
3
- import { type PhaseDescriptor } from "./run-task.js";
4
- import { getSessionRegistry } from "./session-registry.js";
5
- export declare const BUG_PHASES: PhaseDescriptor[];
6
- export { BUG_SUMMARY_KEY_BY_ROLE } from "./subagent/phase-summary-map.js";
7
- export declare const BUG_TYPE_TOKENS: Record<string, {
8
- pass: string;
9
- fail: string;
10
- }>;
11
- export interface RunBugState {
12
- bugId: string;
13
- phaseIndex: number;
14
- iterationCounts: Record<string, number>;
15
- halted: boolean;
16
- /** Set on cancellation so the resume prompt says "cancelled" vs "halted". */
17
- status?: "cancelled" | "halted" | "running";
18
- lastError?: string;
19
- savedAt: string;
20
- }
21
- export declare function readBugState(cwd: string, bugId: string, sessionId?: string): RunBugState | null;
22
- export declare function writeBugState(cwd: string, state: RunBugState): void;
23
- export declare function deleteBugState(cwd: string, bugId: string): void;
24
- export declare function isBugStateStale(state: RunBugState): boolean;
25
- export interface BugRecord {
26
- bugId?: string;
27
- status?: string;
28
- summaries?: Record<string, unknown>;
29
- [key: string]: unknown;
30
- }
31
- export declare function readBugRecord(bugId: string, storeCli: string, cwd: string): BugRecord | null;
32
- export declare function assignNextBugId(storeCli: string, cwd: string): string;
33
- export declare function preCreateBug(bugId: string, title: string, storeCli: string, cwd: string): boolean;
34
- type BugVerdict = "approved" | "revision" | "n/a" | "missing";
35
- export declare function readBugVerdict(bugRecord: BugRecord | null, phaseRole: string, summaryKeyByRole: Record<string, string | null>): BugVerdict;
36
- export declare function composeBugBody(subWorkflowMd: string, bugId: string, phaseRole: string, bugStatusBeforePhase?: string, summariesBlock?: string): string;
37
- /**
38
- * Scan tool_execution_end events to extract the bugId written by a triage
39
- * subagent. Returns the LAST matching tool call's bugId, or null if none found.
40
- *
41
- * In pi runtime, the forge_store tool is registered as "forge_store" (not
42
- * "store-cli"). In Claude Code runtime, subagents may shell out via Bash.
43
- * This function covers all three paths.
44
- */
45
- export declare function extractBugIdFromEvents(events: Array<{
46
- toolName?: string;
47
- result?: unknown;
48
- }>): string | null;
49
- export type RunBugPipelineStatus = "completed" | "halted" | "escalated" | "failed" | "cancelled";
50
- export interface RunBugPipelineResult {
51
- status: RunBugPipelineStatus;
52
- lastPhaseIndex: number;
53
- iterationCounts: Record<string, number>;
54
- lastError?: string;
55
- model?: string;
56
- provider?: string;
57
- }
58
- export interface RunBugPipelineOptions {
59
- bugId: string;
60
- /** Original free-form text argument when creating a new bug (not a FORGE-BUG-NNN ID).
61
- * Passed to triage-phase subagent so it can create the bug with a meaningful description. */
62
- originalArg?: string;
63
- /** Whether this is a new bug (free-form text) vs. an existing FORGE-BUG-NNN ID. */
64
- isNewBug?: boolean;
65
- cwd: string;
66
- ctx: ExtensionCommandContext;
67
- forgeRoot: string;
68
- storeCli: string;
69
- preflightGate: string;
70
- registry: ReturnType<typeof getSessionRegistry>;
71
- resumeFromState?: RunBugState;
72
- /**
73
- * Optional AbortSignal from SessionRegistry. When provided, the pipeline
74
- * checks signal.aborted between phases and passes the signal to
75
- * runForgeSubagent so in-flight subagents can be aborted.
76
- */
77
- signal?: AbortSignal;
78
- forgeToolDefs?: ForgeToolDefs;
79
- }
80
- export declare function runBugPipeline(opts: RunBugPipelineOptions): Promise<RunBugPipelineResult>;
81
- export interface RegisterFixBugOptions {
82
- cwd?: string;
83
- forgeToolDefs?: ForgeToolDefs;
84
- }
85
- export declare function registerFixBug(pi: ExtensionAPI, options?: RegisterFixBugOptions): void;