@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,113 +0,0 @@
1
- // halt-advisor.ts — Halt-recovery advisor helper (FORGE-S26-T18).
2
- //
3
- // When preflight-gate.cjs exits 1 and emits a structured failure JSON,
4
- // the CLI route (run-task / fix-bug) calls runHaltAdvisor to spawn a
5
- // read-only one-shot subagent that explains the failure and guides recovery.
6
- //
7
- // Design constraints:
8
- // - Advisor is READ-ONLY: no store writes, no artifact mutations.
9
- // - Model: the HEAVY model the runtime resolves point-in-time — the
10
- // approve/architect slot through the existing routing cascade
11
- // (project > user > pi default). NO dedicated advisorModel config entry.
12
- // If nothing is routed and no current model exists, the advisor is
13
- // skipped silently (non-fatal).
14
- // - runHaltAdvisor is best-effort: failures must not mask the primary halt.
15
- import { runForgeSubagent, loadForgePersona } from "../forge-subagent.js";
16
- import { resolveModelForPhase } from "../model-resolver.js";
17
- /**
18
- * Resolve the advisor model for halt-recovery.
19
- *
20
- * Priority:
21
- * 1. Explicit `advisorModel` config slot from forge-cli layered config.
22
- * Contract (rev. 2026-06-04): the advisor model is the HEAVY model the runtime
23
- * resolves point-in-time. There is NO dedicated advisorModel config entry —
24
- * "heavy" is the approve/architect slot resolved through the existing routing
25
- * cascade (L4 phase override → L3/L2 project → L1 user/global → default),
26
- * exactly as the approve phase itself would resolve. When the cascade bottoms
27
- * out at inherit, the session's current model (pi default) is used. In the
28
- * Claude Code plugin route the equivalent is the opus-class session model.
29
- *
30
- * Returns undefined (advisor skipped, non-fatal) only when nothing is routed
31
- * AND no current model is available.
32
- *
33
- * (History: the original FORGE-S26-T18 implementation used a dedicated
34
- * advisorModel config slot with a blind registry fallback that produced
35
- * "anthropic/undefined" on the CART-S03-T01 halt — both retired.)
36
- */
37
- export function resolveAdvisorModel(merged, currentModel, pipelineName = "default") {
38
- // Heavy slot: the approve phase / architect persona routing resolution.
39
- try {
40
- const heavy = resolveModelForPhase(pipelineName, "approve", "architect", merged ?? {});
41
- if (heavy.model)
42
- return heavy.model;
43
- }
44
- catch {
45
- // resolution errors are non-fatal — fall through to the current model
46
- }
47
- // Inherit → pi's current model (provider-neutral, known-good).
48
- if (currentModel?.provider) {
49
- const model = currentModel.model ?? currentModel.id;
50
- if (model)
51
- return { provider: currentModel.provider, model };
52
- }
53
- return undefined;
54
- }
55
- /**
56
- * Spawn a read-only advisor subagent to explain the gate failure and guide recovery.
57
- *
58
- * Best-effort: errors are notified via ctx.ui but do NOT propagate. The
59
- * primary halt status is the caller's responsibility to surface separately.
60
- */
61
- export async function runHaltAdvisor(opts) {
62
- const { gateFailure, advisorModel, taskId, cwd, ctx, forgeRoot } = opts;
63
- if (!advisorModel) {
64
- // No model available — skip advisor silently.
65
- return;
66
- }
67
- ctx.ui.notify(`ℹ forge: halt advisor running on ${advisorModel.provider}/${advisorModel.model} for ${taskId}`, "info");
68
- const advisoryPrompt = [
69
- `# Halt-Recovery Advisory for ${taskId}`,
70
- ``,
71
- `A preflight gate halted the pipeline for phase **${gateFailure.phase}**.`,
72
- ``,
73
- `## Failure Details`,
74
- `- **Reason code:** \`${gateFailure.reasonCode}\``,
75
- `- **Detail:** ${gateFailure.detail}`,
76
- ``,
77
- `## Recommended Remediation`,
78
- gateFailure.remediation,
79
- ``,
80
- `## Your Role`,
81
- `You are a read-only advisor. Explain the failure in plain language, confirm the`,
82
- `remediation step, and provide any additional context the user needs to unblock.`,
83
- `Do NOT modify any files, run any commands, or write to the store.`,
84
- `Output your advisory as a brief structured summary (2–4 sentences).`,
85
- ].join("\n");
86
- try {
87
- let persona;
88
- try {
89
- persona = loadForgePersona("engineer", cwd);
90
- }
91
- catch {
92
- // Persona unavailable — use a minimal fallback rather than crashing.
93
- persona = {
94
- name: "advisor",
95
- description: "Halt-recovery advisor",
96
- systemPrompt: "You are a Forge engineering advisor. Be concise and helpful.",
97
- filePath: "",
98
- };
99
- }
100
- await runForgeSubagent({
101
- persona,
102
- task: advisoryPrompt,
103
- cwd,
104
- forgeRoot,
105
- requestedModel: advisorModel,
106
- });
107
- }
108
- catch (err) {
109
- const e = err;
110
- ctx.ui.notify(`⚠ forge: halt advisor failed (non-fatal): ${e.message ?? "unknown"}`, "warning");
111
- }
112
- }
113
- //# sourceMappingURL=halt-advisor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"halt-advisor.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/halt-advisor.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import type { MergedConfig } from "../config-layer.js";
2
- import type { OrchestratorResult } from "./orchestrator-types.js";
3
- /** Minimal context interface — only the bits preflight needs. */
4
- export interface PreflightContext {
5
- ui: {
6
- notify(message: string, type?: "error" | "info" | "warning"): void;
7
- };
8
- }
9
- export interface RunOrchestratorPreflightOptions {
10
- /** "task" runs validateModelConfig; "ceremony" skips it. */
11
- mode: "task" | "ceremony";
12
- /** Minimal context for notifications. */
13
- ctx: PreflightContext;
14
- /** Prefix for notify messages, e.g. "forge:run-task" or "forge:fix-bug". */
15
- notifyPrefix: string;
16
- /** Persona name catalogue from readPersonaDir. */
17
- personaCatalogue: string[];
18
- /** Pipeline name catalogue from readPipelineNames; null if no config found. */
19
- pipelineCatalogue: string[] | null;
20
- /** Merged model-routing config from loadLayeredConfig. */
21
- modelRoutingConfig: MergedConfig;
22
- /** Available models from ctx.modelRegistry.getAvailable(). */
23
- availableModels: Array<{
24
- provider: string;
25
- id: string;
26
- }>;
27
- }
28
- /** Discriminated union: proceed=true → continue; proceed=false → return result early. */
29
- export type OrchestratorPreflightResult = {
30
- proceed: true;
31
- } | {
32
- proceed: false;
33
- result: OrchestratorResult;
34
- };
35
- /**
36
- * Run the orchestrator pre-flight check.
37
- *
38
- * In mode="task": calls validateModelConfig and surfaces warnings/errors via
39
- * ctx.ui.notify. Returns `{ proceed: false, result }` with status="failed" if
40
- * there are errors; returns `{ proceed: true }` otherwise.
41
- *
42
- * In mode="ceremony": returns `{ proceed: true }` immediately without calling
43
- * validateModelConfig. This matches the existing behaviour of ceremony dispatch
44
- * which uses lookupPersonaModel rather than the full validator.
45
- */
46
- export declare function runOrchestratorPreflight(opts: RunOrchestratorPreflightOptions): OrchestratorPreflightResult;
@@ -1,64 +0,0 @@
1
- // lib/orchestrator-preflight.ts — FORGE-S25-T17 (H-13, N-H-D)
2
- //
3
- // Single shared preflight helper for orchestrator pipelines. Replaces the
4
- // duplicate pre-flight validation blocks in run-task.ts and fix-bug.ts.
5
- //
6
- // Design: a `mode` parameter selects behaviour:
7
- //
8
- // mode="task" — full model-config validation via validateModelConfig.
9
- // Used by runTaskPipeline and runBugPipeline.
10
- // mode="ceremony" — skips validateModelConfig entirely.
11
- // Aligns with dispatchSprintCeremony which uses
12
- // lookupPersonaModel (not the full validator). The
13
- // run-sprint.ts ceremony call does NOT use this helper
14
- // directly; it was already skip-validation by design
15
- // (N-H-D). This mode is available for future callers
16
- // that need a ceremony-style preflight.
17
- //
18
- // Why run-sprint.ts is NOT migrated to this helper:
19
- // run-sprint.ts contains a separate sprint-entry validation block
20
- // (lines 470–498) that validates sprint-level config, not task/phase-level.
21
- // That block is architecturally distinct and is explicitly out of scope
22
- // per the plan-review finding (N-H-D resolved, reviewer-approved).
23
- import { validateModelConfig } from "../model-validator.js";
24
- // ---------------------------------------------------------------------------
25
- // runOrchestratorPreflight
26
- // ---------------------------------------------------------------------------
27
- /**
28
- * Run the orchestrator pre-flight check.
29
- *
30
- * In mode="task": calls validateModelConfig and surfaces warnings/errors via
31
- * ctx.ui.notify. Returns `{ proceed: false, result }` with status="failed" if
32
- * there are errors; returns `{ proceed: true }` otherwise.
33
- *
34
- * In mode="ceremony": returns `{ proceed: true }` immediately without calling
35
- * validateModelConfig. This matches the existing behaviour of ceremony dispatch
36
- * which uses lookupPersonaModel rather than the full validator.
37
- */
38
- export function runOrchestratorPreflight(opts) {
39
- if (opts.mode === "ceremony") {
40
- return { proceed: true };
41
- }
42
- // mode="task" — full validation
43
- const strict = process.env.FORGE_STRICT_MODELS === "1";
44
- const { errors, warnings } = validateModelConfig(opts.personaCatalogue, opts.pipelineCatalogue, opts.modelRoutingConfig, opts.availableModels, strict);
45
- for (const w of warnings) {
46
- opts.ctx.ui.notify(`⚠ ${opts.notifyPrefix} — model routing: ${w.message}`, "warning");
47
- }
48
- if (errors.length > 0) {
49
- for (const e of errors) {
50
- opts.ctx.ui.notify(`× ${opts.notifyPrefix} — model routing: ${e.message}`, "error");
51
- }
52
- return {
53
- proceed: false,
54
- result: {
55
- status: "failed",
56
- lastPhaseIndex: 0,
57
- iterationCounts: {},
58
- lastError: `model config validation failed: ${errors.map((e) => e.code).join(", ")}`,
59
- },
60
- };
61
- }
62
- return { proceed: true };
63
- }
64
- //# sourceMappingURL=orchestrator-preflight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator-preflight.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/orchestrator-preflight.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,4EAA4E;AAC5E,kEAAkE;AAClE,0DAA0D;AAC1D,oEAAoE;AACpE,uEAAuE;AACvE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,4DAA4D;AAC5D,EAAE;AACF,oDAAoD;AACpD,oEAAoE;AACpE,8EAA8E;AAC9E,0EAA0E;AAC1E,qEAAqE;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAkC5D,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAqC;IAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,gCAAgC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG,CAAC;IACvD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAC/C,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,MAAM,CACN,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,YAAY,qBAAqB,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,YAAY,qBAAqB,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACrF,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,MAAM,EAAE;gBACP,MAAM,EAAE,QAAQ;gBAChB,cAAc,EAAE,CAAC;gBACjB,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,mCAAmC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACpF;SACD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
- export interface ParsedMaterializeArgs {
3
- mode: "all" | "single-workflow";
4
- workflowId?: string;
5
- }
6
- /**
7
- * Parse /forge:materialize arguments.
8
- *
9
- * Recognised forms:
10
- * (empty) → { mode: "all" }
11
- * --all → { mode: "all" }
12
- * workflows <id> → { mode: "single-workflow", workflowId: "<id>" }
13
- * workflows:<id> → { mode: "single-workflow", workflowId: "<id>" }
14
- */
15
- export declare function parseMaterializeArgs(args: string): ParsedMaterializeArgs;
16
- export declare function registerMaterialize(pi: ExtensionAPI): void;
@@ -1,195 +0,0 @@
1
- // materialize.ts — native handler for /forge:materialize (FORGE-S23-T09)
2
- //
3
- // Ports the deterministic subset of the plugin's /forge:materialize:
4
- // - Full warm-up (no args or --all): runs substitute-placeholders.cjs,
5
- // build-persona-pack.cjs, and build-context-pack.cjs from the bundled payload.
6
- // - Single-workflow mode: deferred — notify + return (follow-up task).
7
- //
8
- // Mode-neutral invariant: never writes .forge/config.json mode field.
9
- // Uses spawn("node", [toolPath, ...argv]) — argv-array, no shell (IL6).
10
- //
11
- // References: regenerate.ts (substitute-placeholders.cjs argv),
12
- // forge-init.ts (build-persona-pack / build-context-pack argv).
13
- import { spawn } from "node:child_process";
14
- import * as fs from "node:fs";
15
- import * as path from "node:path";
16
- import { getBundledPayloadRoot, getBundledToolsRoot } from "./forge-init.js";
17
- // ── Argument parser ─────────────────────────────────────────────────────────
18
- /**
19
- * Parse /forge:materialize arguments.
20
- *
21
- * Recognised forms:
22
- * (empty) → { mode: "all" }
23
- * --all → { mode: "all" }
24
- * workflows <id> → { mode: "single-workflow", workflowId: "<id>" }
25
- * workflows:<id> → { mode: "single-workflow", workflowId: "<id>" }
26
- */
27
- export function parseMaterializeArgs(args) {
28
- const trimmed = args.trim();
29
- if (!trimmed || trimmed === "--all") {
30
- return { mode: "all" };
31
- }
32
- // "workflows plan_task" or "workflows:plan_task"
33
- const workflowsMatch = trimmed.match(/^workflows[: ](.+)$/);
34
- if (workflowsMatch) {
35
- return { mode: "single-workflow", workflowId: workflowsMatch[1].trim() };
36
- }
37
- // Unrecognised flags/forms: treat as full warm-up (fail-open)
38
- return { mode: "all" };
39
- }
40
- // ── Tool runner ─────────────────────────────────────────────────────────────
41
- /**
42
- * Spawn `node <toolPath> [...argv]` and await completion.
43
- * Returns `{ ok: boolean, stderr: string }`.
44
- *
45
- * Non-zero exit is FATAL when `fatal === true` (default), ADVISORY otherwise.
46
- */
47
- async function runTool(toolPath, argv, cwd, label, timeoutMs = 60_000) {
48
- return new Promise((resolve) => {
49
- const child = spawn("node", [toolPath, ...argv], {
50
- cwd,
51
- stdio: ["ignore", "pipe", "pipe"],
52
- });
53
- let stderrBuf = "";
54
- const timer = setTimeout(() => {
55
- child.kill("SIGKILL");
56
- resolve({ ok: false, stderr: `${label} timed out after ${timeoutMs}ms` });
57
- }, timeoutMs);
58
- child.stderr?.on("data", (d) => {
59
- stderrBuf += d.toString();
60
- });
61
- child.on("close", (code) => {
62
- clearTimeout(timer);
63
- resolve({ ok: code === 0, stderr: stderrBuf });
64
- });
65
- child.on("error", (err) => {
66
- clearTimeout(timer);
67
- resolve({ ok: false, stderr: err.message });
68
- });
69
- });
70
- }
71
- // ── Register ────────────────────────────────────────────────────────────────
72
- export function registerMaterialize(pi) {
73
- pi.registerCommand("forge:materialize", {
74
- description: "Fill missing or stubbed Forge scaffolding without overwriting pristine files. " +
75
- "Deterministic complement to /forge:init --fast. Mode-neutral: never writes config mode.",
76
- async handler(args, ctx) {
77
- const cwd = process.cwd();
78
- const parsed = parseMaterializeArgs(args);
79
- // Single-workflow mode: deferred in forge-cli — notify and return
80
- if (parsed.mode === "single-workflow") {
81
- ctx.ui.notify(`〇 forge:materialize — single-workflow mode ('${parsed.workflowId ?? "?"}') is not yet supported in forge-cli. ` +
82
- "Use the Forge plugin directly or run /forge:materialize --all for a full warm-up.", "info");
83
- return;
84
- }
85
- // Config guard
86
- const configPath = path.join(cwd, ".forge", "config.json");
87
- if (!fs.existsSync(configPath)) {
88
- ctx.ui.notify("× forge:materialize — no .forge/config.json found. Run /forge:init first.", "error");
89
- return;
90
- }
91
- // Resolve tool paths
92
- let bundleRoot;
93
- let toolsRoot;
94
- try {
95
- bundleRoot = getBundledPayloadRoot();
96
- toolsRoot = getBundledToolsRoot();
97
- }
98
- catch (err) {
99
- const msg = err instanceof Error ? err.message : String(err);
100
- ctx.ui.notify(`× forge:materialize — could not resolve bundle paths: ${msg}`, "error");
101
- return;
102
- }
103
- const substituteTool = path.join(toolsRoot, "substitute-placeholders.cjs");
104
- const basePackDir = path.join(bundleRoot, ".base-pack");
105
- const configJsonPath = path.join(cwd, ".forge", "config.json");
106
- // Guard: tools must exist
107
- if (!fs.existsSync(substituteTool)) {
108
- ctx.ui.notify(`× forge:materialize — substitute-placeholders.cjs not found at ${substituteTool}`, "error");
109
- return;
110
- }
111
- if (!fs.existsSync(basePackDir)) {
112
- ctx.ui.notify(`× forge:materialize — .base-pack not found at ${basePackDir}`, "error");
113
- return;
114
- }
115
- ctx.ui.setStatus?.("forge:materialize", "Materializing .forge/ artifacts…");
116
- // Step 1: substitute-placeholders.cjs (fatal on failure)
117
- // argv shape mirrors regenerate.ts usage
118
- const initContextJson = path.join(cwd, ".forge", "init-context.json");
119
- const subArgv = [
120
- "--forge-root",
121
- bundleRoot,
122
- "--base-pack",
123
- basePackDir,
124
- "--config",
125
- configJsonPath,
126
- "--out",
127
- cwd,
128
- ];
129
- if (fs.existsSync(initContextJson)) {
130
- subArgv.push("--context", initContextJson);
131
- }
132
- const subResult = await runTool(substituteTool, subArgv, cwd, "substitute-placeholders", 60_000);
133
- if (!subResult.ok) {
134
- const errMsg = subResult.stderr.trim().split("\n").slice(-3).join(" | ") || "unknown error";
135
- ctx.ui.notify(`× forge:materialize — substitute-placeholders.cjs failed: ${errMsg}`, "error");
136
- ctx.ui.setStatus?.("forge:materialize", undefined);
137
- return;
138
- }
139
- ctx.ui.notify("〇 forge:materialize — scaffold filled", "info");
140
- // Step 2: build-persona-pack.cjs (advisory — non-fatal)
141
- const buildPersonaPackTool = path.join(toolsRoot, "build-persona-pack.cjs");
142
- if (fs.existsSync(buildPersonaPackTool)) {
143
- fs.mkdirSync(path.join(cwd, ".forge", "cache"), { recursive: true });
144
- const personaResult = await runTool(buildPersonaPackTool, ["--out", path.join(cwd, ".forge", "cache", "persona-pack.json")], cwd, "build-persona-pack", 30_000);
145
- if (!personaResult.ok) {
146
- const msg = personaResult.stderr.trim().split("\n").at(-1) ?? "unknown";
147
- ctx.ui.notify(`△ forge:materialize — build-persona-pack.cjs failed (non-fatal): ${msg}`, "warning");
148
- }
149
- }
150
- // Step 3: build-context-pack.cjs (advisory — non-fatal)
151
- const buildContextPackTool = path.join(toolsRoot, "build-context-pack.cjs");
152
- if (fs.existsSync(buildContextPackTool)) {
153
- // Read engineering path from config
154
- let kbPath = "engineering";
155
- try {
156
- const raw = fs.readFileSync(configPath, "utf8");
157
- const cfg = JSON.parse(raw);
158
- const p = cfg.paths;
159
- if (p && typeof p.engineering === "string")
160
- kbPath = p.engineering;
161
- }
162
- catch {
163
- // use default
164
- }
165
- const ctxResult = await runTool(buildContextPackTool, [
166
- "--arch-dir",
167
- path.join(cwd, kbPath, "architecture"),
168
- "--out-md",
169
- path.join(cwd, ".forge", "cache", "context-pack.md"),
170
- "--out-json",
171
- path.join(cwd, ".forge", "cache", "context-pack.json"),
172
- ], cwd, "build-context-pack", 30_000);
173
- if (!ctxResult.ok) {
174
- const msg = ctxResult.stderr.trim().split("\n").at(-1) ?? "unknown";
175
- ctx.ui.notify(`△ forge:materialize — build-context-pack.cjs failed (non-fatal): ${msg}`, "warning");
176
- }
177
- }
178
- // Complete
179
- ctx.ui.setStatus?.("forge:materialize", undefined);
180
- ctx.ui.notify("〇 forge:materialize complete — gaps filled (mode unchanged)", "info");
181
- // Promotion hint (mode-neutral: only read, never write)
182
- try {
183
- const raw = fs.readFileSync(configPath, "utf8");
184
- const cfg = JSON.parse(raw);
185
- if (cfg.mode === "fast") {
186
- ctx.ui.notify("〇 To declare the project fully generated: /forge:config mode full", "info");
187
- }
188
- }
189
- catch {
190
- // non-fatal — promotion hint is cosmetic
191
- }
192
- },
193
- });
194
- }
195
- //# sourceMappingURL=materialize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"materialize.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/materialize.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
- import { type ForgeToolDefs } from "./forge-tools.js";
3
- export interface ParsedMigrateArgs {
4
- /** True when --structural flag present OR .forge/structure-versions.json absent. */
5
- structural: boolean;
6
- /** True when --dry-run flag present (schema branch only). */
7
- dryRun: boolean;
8
- }
9
- /**
10
- * Parse /forge:migrate arguments.
11
- *
12
- * Also checks filesystem for .forge/structure-versions.json to determine
13
- * structural vs schema branch (absence → structural).
14
- */
15
- export declare function parseMigrateArgs(args: string, cwd: string): ParsedMigrateArgs;
16
- export interface RegisterMigrateOptions {
17
- /** Override bundleRoot — for testing only. Production: always undefined (resolved via getBundledPayloadRoot). */
18
- _testBundleRoot?: string;
19
- /** Forge tool definitions for subagent injection. */
20
- forgeToolDefs?: ForgeToolDefs;
21
- }
22
- export declare function registerMigrate(pi: ExtensionAPI, opts?: RegisterMigrateOptions): void;