@entelligentsia/forgecli 0.10.0 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +95 -0
- package/README.md +21 -3
- package/dist/CHANGELOG-forge-plugin.md +90 -0
- package/dist/bin/config.js +6 -0
- package/dist/bin/config.js.map +1 -1
- package/dist/extensions/forgecli/add-pipeline.d.ts +19 -0
- package/dist/extensions/forgecli/add-pipeline.js +143 -0
- package/dist/extensions/forgecli/add-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/add-task.d.ts +20 -0
- package/dist/extensions/forgecli/add-task.js +154 -0
- package/dist/extensions/forgecli/add-task.js.map +1 -0
- package/dist/extensions/forgecli/calibrate.d.ts +61 -0
- package/dist/extensions/forgecli/calibrate.js +488 -0
- package/dist/extensions/forgecli/calibrate.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.d.ts +9 -1
- package/dist/extensions/forgecli/fix-bug.js +155 -45
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-commands.js +15 -22
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +16 -1
- package/dist/extensions/forgecli/forge-subagent.js +45 -8
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-update-command.d.ts +9 -0
- package/dist/extensions/forgecli/forge-update-command.js +106 -7
- package/dist/extensions/forgecli/forge-update-command.js.map +1 -1
- package/dist/extensions/forgecli/health-check.d.ts +22 -1
- package/dist/extensions/forgecli/health-check.js +177 -4
- package/dist/extensions/forgecli/health-check.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +25 -1
- package/dist/extensions/forgecli/hook-dispatcher.js +104 -9
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/hooks/check-update.d.ts +81 -0
- package/dist/extensions/forgecli/hooks/check-update.js +308 -0
- package/dist/extensions/forgecli/hooks/check-update.js.map +1 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.d.ts +32 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.js +119 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.js.map +1 -0
- package/dist/extensions/forgecli/hooks/triage-error.d.ts +23 -0
- package/dist/extensions/forgecli/hooks/triage-error.js +62 -0
- package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -0
- package/dist/extensions/forgecli/hooks/write-guard.d.ts +28 -0
- package/dist/extensions/forgecli/hooks/write-guard.js +225 -0
- package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -0
- package/dist/extensions/forgecli/index.js +60 -0
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/init-context.d.ts +1 -1
- package/dist/extensions/forgecli/init-context.js +21 -6
- package/dist/extensions/forgecli/init-context.js.map +1 -1
- package/dist/extensions/forgecli/materialize.d.ts +16 -0
- package/dist/extensions/forgecli/materialize.js +195 -0
- package/dist/extensions/forgecli/materialize.js.map +1 -0
- package/dist/extensions/forgecli/migrate.d.ts +19 -0
- package/dist/extensions/forgecli/migrate.js +258 -0
- package/dist/extensions/forgecli/migrate.js.map +1 -0
- package/dist/extensions/forgecli/migration-engine.d.ts +111 -0
- package/dist/extensions/forgecli/migration-engine.js +533 -0
- package/dist/extensions/forgecli/migration-engine.js.map +1 -0
- package/dist/extensions/forgecli/quiz-agent.d.ts +17 -0
- package/dist/extensions/forgecli/quiz-agent.js +98 -0
- package/dist/extensions/forgecli/quiz-agent.js.map +1 -0
- package/dist/extensions/forgecli/remove-command.d.ts +17 -0
- package/dist/extensions/forgecli/remove-command.js +124 -0
- package/dist/extensions/forgecli/remove-command.js.map +1 -0
- package/dist/extensions/forgecli/report-bug.d.ts +25 -0
- package/dist/extensions/forgecli/report-bug.js +159 -0
- package/dist/extensions/forgecli/report-bug.js.map +1 -0
- package/dist/extensions/forgecli/retrospective.d.ts +19 -0
- package/dist/extensions/forgecli/retrospective.js +156 -0
- package/dist/extensions/forgecli/retrospective.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.js +36 -3
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +9 -1
- package/dist/extensions/forgecli/run-task.js +66 -13
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +40 -2
- package/dist/extensions/forgecli/session-registry.js +71 -1
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/status-command.d.ts +19 -0
- package/dist/extensions/forgecli/status-command.js +140 -0
- package/dist/extensions/forgecli/status-command.js.map +1 -0
- package/dist/extensions/forgecli/store-query.d.ts +22 -0
- package/dist/extensions/forgecli/store-query.js +107 -0
- package/dist/extensions/forgecli/store-query.js.map +1 -0
- package/dist/extensions/forgecli/store-repair.d.ts +17 -0
- package/dist/extensions/forgecli/store-repair.js +123 -0
- package/dist/extensions/forgecli/store-repair.js.map +1 -0
- package/dist/extensions/forgecli/test-orchestrate.js +1 -0
- package/dist/extensions/forgecli/test-orchestrate.js.map +1 -1
- package/dist/extensions/forgecli/thread-switcher.js +286 -41
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/transition-guard.js +7 -2
- package/dist/extensions/forgecli/transition-guard.js.map +1 -1
- package/dist/extensions/forgecli/update-tools.d.ts +23 -0
- package/dist/extensions/forgecli/update-tools.js +136 -0
- package/dist/extensions/forgecli/update-tools.js.map +1 -0
- package/dist/extensions/forgecli/viewport-events.js +10 -0
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/extensions/forgecli/viewport-renderer.d.ts +18 -0
- package/dist/extensions/forgecli/viewport-renderer.js +27 -0
- package/dist/extensions/forgecli/viewport-renderer.js.map +1 -1
- package/dist/extensions/forgecli/viewport-theme.js +4 -0
- package/dist/extensions/forgecli/viewport-theme.js.map +1 -1
- package/dist/extensions/forgecli/whats-new-widget.d.ts +13 -8
- package/dist/extensions/forgecli/whats-new-widget.js +111 -42
- package/dist/extensions/forgecli/whats-new-widget.js.map +1 -1
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +29 -3
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +15 -8
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +327 -185
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +18 -10
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +15 -9
- package/dist/forge-payload/.base-pack/workflows/review_code.md +14 -6
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +18 -10
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/bug.schema.json +3 -2
- package/dist/forge-payload/.schemas/config.schema.json +83 -0
- package/dist/forge-payload/.schemas/migrations.json +2049 -0
- package/dist/forge-payload/commands/regenerate.md +17 -1
- package/dist/forge-payload/meta/personas/README.md +16 -0
- package/dist/forge-payload/meta/personas/meta-architect.md +70 -0
- package/dist/forge-payload/meta/personas/meta-bug-fixer.md +73 -0
- package/dist/forge-payload/meta/personas/meta-collator.md +72 -0
- package/dist/forge-payload/meta/personas/meta-engineer.md +70 -0
- package/dist/forge-payload/meta/personas/meta-orchestrator.md +71 -0
- package/dist/forge-payload/meta/personas/meta-product-manager.md +82 -0
- package/dist/forge-payload/meta/personas/meta-qa-engineer.md +91 -0
- package/dist/forge-payload/meta/personas/meta-supervisor.md +92 -0
- package/dist/forge-payload/meta/skill-recommendations.md +154 -0
- package/dist/forge-payload/meta/skills/meta-architect-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-bug-fixer-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-collator-skills.md +41 -0
- package/dist/forge-payload/meta/skills/meta-engineer-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-generic-skills.md +58 -0
- package/dist/forge-payload/meta/skills/meta-qa-engineer-skills.md +46 -0
- package/dist/forge-payload/meta/skills/meta-supervisor-skills.md +43 -0
- package/dist/forge-payload/meta/store-schema/bug.schema.md +71 -0
- package/dist/forge-payload/meta/store-schema/event.schema.md +76 -0
- package/dist/forge-payload/meta/store-schema/feature.schema.md +65 -0
- package/dist/forge-payload/meta/store-schema/sprint.schema.md +64 -0
- package/dist/forge-payload/meta/store-schema/task.schema.md +78 -0
- package/dist/forge-payload/meta/templates/meta-code-review.md +26 -0
- package/dist/forge-payload/meta/templates/meta-plan-review.md +28 -0
- package/dist/forge-payload/meta/templates/meta-plan.md +28 -0
- package/dist/forge-payload/meta/templates/meta-progress.md +25 -0
- package/dist/forge-payload/meta/templates/meta-retrospective.md +28 -0
- package/dist/forge-payload/meta/templates/meta-sprint-manifest.md +26 -0
- package/dist/forge-payload/meta/templates/meta-sprint-requirements.md +91 -0
- package/dist/forge-payload/meta/templates/meta-task-prompt.md +26 -0
- package/dist/forge-payload/meta/tool-specs/collate.spec.md +88 -0
- package/dist/forge-payload/meta/tool-specs/generation-manifest.spec.md +139 -0
- package/dist/forge-payload/meta/tool-specs/manage-config.spec.md +143 -0
- package/dist/forge-payload/meta/tool-specs/seed-store.spec.md +91 -0
- package/dist/forge-payload/meta/tool-specs/store-cli.spec.md +328 -0
- package/dist/forge-payload/meta/tool-specs/validate-store.spec.md +191 -0
- package/dist/forge-payload/meta/workflows/_fragments/context-injection.md +75 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +73 -0
- package/dist/forge-payload/meta/workflows/_fragments/finalize.md +13 -0
- package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +73 -0
- package/dist/forge-payload/meta/workflows/_fragments/progress-reporting.md +38 -0
- package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +39 -0
- package/dist/forge-payload/meta/workflows/meta-approve.md +119 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +89 -0
- package/dist/forge-payload/meta/workflows/meta-commit.md +93 -0
- package/dist/forge-payload/meta/workflows/meta-enhance.md +286 -0
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +501 -0
- package/dist/forge-payload/meta/workflows/meta-implement.md +132 -0
- package/dist/forge-payload/meta/workflows/meta-migrate.md +455 -0
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +993 -0
- package/dist/forge-payload/meta/workflows/meta-plan-task.md +133 -0
- package/dist/forge-payload/meta/workflows/meta-quiz-agent.md +135 -0
- package/dist/forge-payload/meta/workflows/meta-retrospective.md +65 -0
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +119 -0
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +108 -0
- package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +65 -0
- package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +147 -0
- package/dist/forge-payload/meta/workflows/meta-update-implementation.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-update-plan.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-validate.md +111 -0
- package/dist/forge-payload/tools/check-structure.cjs +344 -0
- package/dist/forge-payload/tools/collate.cjs +34 -9
- package/dist/forge-payload/tools/list-skills.js +76 -0
- package/dist/forge-payload/tools/parse-gates.cjs +8 -2
- package/dist/forge-payload/tools/store-cli.cjs +56 -11
- package/dist/forge-payload/tools/store.cjs +61 -0
- package/dist/forge-payload/tools/substitute-placeholders.cjs +60 -8
- package/dist/forge-payload/tools/validate-store.cjs +6 -2
- package/dist/forge-payload/tools/verify-integrity.cjs +86 -0
- package/package.json +2 -2
|
@@ -30,6 +30,9 @@ export class SessionRegistry extends EventEmitter {
|
|
|
30
30
|
// Resume — refresh status, keep prior events for visibility.
|
|
31
31
|
existing.status = "running";
|
|
32
32
|
existing.updatedAt = now;
|
|
33
|
+
// Re-create AbortController on resume (previous one was from a
|
|
34
|
+
// prior run that may have been aborted or completed).
|
|
35
|
+
existing.abortController = new AbortController();
|
|
33
36
|
}
|
|
34
37
|
else {
|
|
35
38
|
this.sessions.set(taskId, {
|
|
@@ -39,6 +42,7 @@ export class SessionRegistry extends EventEmitter {
|
|
|
39
42
|
status: "running",
|
|
40
43
|
phases: [],
|
|
41
44
|
events: [],
|
|
45
|
+
abortController: new AbortController(),
|
|
42
46
|
});
|
|
43
47
|
this.evictIfNeeded();
|
|
44
48
|
}
|
|
@@ -128,10 +132,13 @@ export class SessionRegistry extends EventEmitter {
|
|
|
128
132
|
// it again. This lets every early-return path in run-task.ts blindly
|
|
129
133
|
// call completeSession("failed") without clobbering the success-path's
|
|
130
134
|
// prior "completed" mark.
|
|
131
|
-
|
|
135
|
+
// "cancelling" is treated as non-terminal here — the phase loop will
|
|
136
|
+
// call confirmCancelled() to transition it to "cancelled".
|
|
137
|
+
if (s.status !== "running" && s.status !== "cancelling")
|
|
132
138
|
return;
|
|
133
139
|
s.status = status;
|
|
134
140
|
s.currentPhaseRole = undefined;
|
|
141
|
+
s.abortController = undefined; // clear on any terminal transition
|
|
135
142
|
s.updatedAt = Date.now();
|
|
136
143
|
this.emit("change", taskId);
|
|
137
144
|
}
|
|
@@ -140,6 +147,50 @@ export class SessionRegistry extends EventEmitter {
|
|
|
140
147
|
s.events.splice(0, s.events.length - MAX_EVENTS_PER_SESSION);
|
|
141
148
|
}
|
|
142
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Request cancellation of a running session. Transitions status to
|
|
152
|
+
* "cancelling" and fires the session's AbortController.abort().
|
|
153
|
+
* Returns false if session not found or already terminal.
|
|
154
|
+
*/
|
|
155
|
+
requestCancel(taskId) {
|
|
156
|
+
const s = this.sessions.get(taskId);
|
|
157
|
+
if (!s)
|
|
158
|
+
return false;
|
|
159
|
+
// Only running sessions can be cancelled.
|
|
160
|
+
if (s.status !== "running")
|
|
161
|
+
return false;
|
|
162
|
+
s.status = "cancelling";
|
|
163
|
+
s.abortController?.abort();
|
|
164
|
+
s.updatedAt = Date.now();
|
|
165
|
+
this.emit("change", taskId);
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Confirm that cancellation has fully unwound. Called by the orchestrator
|
|
170
|
+
* after abort is detected and the pipeline exits. Transitions
|
|
171
|
+
* "cancelling" → "cancelled".
|
|
172
|
+
*/
|
|
173
|
+
confirmCancelled(taskId) {
|
|
174
|
+
const s = this.sessions.get(taskId);
|
|
175
|
+
if (!s)
|
|
176
|
+
return;
|
|
177
|
+
if (s.status !== "cancelling")
|
|
178
|
+
return;
|
|
179
|
+
s.status = "cancelled";
|
|
180
|
+
s.currentPhaseRole = undefined;
|
|
181
|
+
s.abortController = undefined;
|
|
182
|
+
s.updatedAt = Date.now();
|
|
183
|
+
this.emit("change", taskId);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Convenience accessor — returns the AbortSignal from the session's
|
|
187
|
+
* AbortController, or undefined if the session doesn't exist or has
|
|
188
|
+
* no controller.
|
|
189
|
+
*/
|
|
190
|
+
getAbortSignal(taskId) {
|
|
191
|
+
const s = this.sessions.get(taskId);
|
|
192
|
+
return s?.abortController?.signal;
|
|
193
|
+
}
|
|
143
194
|
// ── Per-phase tail buffer + unread tracking ──────────────────────────────
|
|
144
195
|
//
|
|
145
196
|
// These feed the thread-switcher widget. They are decoupled from the
|
|
@@ -216,6 +267,25 @@ export class SessionRegistry extends EventEmitter {
|
|
|
216
267
|
this.emit("tail", { taskId, phaseRole });
|
|
217
268
|
this.emit("change", taskId);
|
|
218
269
|
}
|
|
270
|
+
setPhaseModel(taskId, phaseRole, modelInfo) {
|
|
271
|
+
const p = this.findPhase(taskId, phaseRole);
|
|
272
|
+
if (!p)
|
|
273
|
+
return;
|
|
274
|
+
// Only emit when the value actually changes — turn_end fires every
|
|
275
|
+
// turn and the (provider, model) is stable across the phase, so this
|
|
276
|
+
// keeps the tail re-render fan-out quiet.
|
|
277
|
+
const nextProvider = modelInfo.provider ?? p.provider;
|
|
278
|
+
const nextModel = modelInfo.model ?? p.model;
|
|
279
|
+
if (nextProvider === p.provider && nextModel === p.model)
|
|
280
|
+
return;
|
|
281
|
+
p.provider = nextProvider;
|
|
282
|
+
p.model = nextModel;
|
|
283
|
+
const s = this.sessions.get(taskId);
|
|
284
|
+
if (s)
|
|
285
|
+
s.updatedAt = Date.now();
|
|
286
|
+
this.emit("tail", { taskId, phaseRole });
|
|
287
|
+
this.emit("change", taskId);
|
|
288
|
+
}
|
|
219
289
|
appendTail(taskId, phaseRole, line, opts) {
|
|
220
290
|
const p = this.findPhase(taskId, phaseRole);
|
|
221
291
|
if (!p)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/session-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/session-registry.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,EAAE;AACF,kFAAkF;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA0F3C,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,YAAY,GAAG,EAAE,CAAC;AAwBxB,MAAM,OAAO,eAAgB,SAAQ,YAAY;IACxC,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IACnD;4BACwB;IAChB,OAAO,GAAgB,EAAE,CAAC;IAElC,UAAU,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,YAAY;QACX,+BAA+B;QAC/B,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9E,CAAC;IAED,YAAY,CAAC,MAAc;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACd,6DAA6D;YAC7D,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;YAC5B,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;YACzB,+DAA+D;YAC/D,sDAAsD;YACtD,QAAQ,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;gBACzB,MAAM;gBACN,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;gBACV,eAAe,EAAE,IAAI,eAAe,EAAE;aACtC,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,UAAkB;QAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YACb,IAAI;YACJ,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,EAAE;YACd,cAAc,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,MAAc;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO;QACrB,CAAC,CAAC,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe,CACd,MAAc,EACd,UAAkB,EAClB,QAAgB,EAChB,IAAa;QAEb,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO;QACrB,CAAC,CAAC,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,CAAC,CAAC,IAAI;YACjB,QAAQ;YACR,UAAU;YACV,IAAI;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,aAAa,CACZ,MAAc,EACd,UAAkB,EAClB,QAAgB,EAChB,OAAgB,EAChB,MAAe;QAEf,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO;QACrB,IAAI,OAAO;YAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,CAAC,CAAC,IAAI;YACjB,QAAQ;YACR,UAAU;YACV,OAAO;YACP,MAAM;SACN,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,IAAY,EAAE,MAA8B;QACzE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO;QACxC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,MAAc,EAAE,MAA8B;QAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,sEAAsE;QACtE,qEAAqE;QACrE,uEAAuE;QACvE,0BAA0B;QAC1B,qEAAqE;QACrE,2DAA2D;QAC3D,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO;QAChE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,mCAAmC;QAClE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,UAAU,CAAC,CAAe;QACjC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;YAC9C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAc;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrB,0CAA0C;QAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACzC,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;QACxB,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,MAAc;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO;QACtC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC;QAC9B,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,MAAc;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC;IACnC,CAAC;IAED,4EAA4E;IAC5E,EAAE;IACF,qEAAqE;IACrE,0EAA0E;IAC1E,0EAA0E;IAC1E,+BAA+B;IAEvB,SAAS,CAAC,MAAc,EAAE,SAAiB;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,uEAAuE;QACvE,4EAA4E;QAC5E,qDAAqD;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,GAAc;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,iEAAiE;IACjE,mBAAmB,CAAC,KAAK,GAAG,YAAY;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAgB,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,sEAAsE;IACtE,kBAAkB;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QAChB,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,CAAC,KAAK;oBAAE,SAAS;gBACvB,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC3B,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC7B,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACpC,CAAC;QACF,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,aAAa,CACZ,MAAc,EACd,SAAiB,EACjB,KAA2D;QAE3D,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,CAAC,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACnF,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC;YAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,8DAA8D;QAC9D,kEAAkE;QAClE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,aAAa,CACZ,MAAc,EACd,SAAiB,EACjB,SAAgD;QAEhD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,mEAAmE;QACnE,qEAAqE;QACrE,0CAA0C;QAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;QAC7C,IAAI,YAAY,KAAK,CAAC,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO;QACjE,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC1B,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC;YAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,SAAiB,EAAE,IAAY,EAAE,IAA4B;QACvF,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;YACpD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,wBAAwB,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,IAAI,EAAE,OAAO;YAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC;YAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,SAAiB;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC;YAAE,OAAO;QACnC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,SAAiB,EAAE,KAAc;QAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAClB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACrF,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,OAAe;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,IAAI,CAAC,CAAC,kBAAkB,KAAK,OAAO;YAAE,OAAO;QAC7C,CAAC,CAAC,kBAAkB,GAAG,OAAO,CAAC;QAC/B,mEAAmE;QACnE,oEAAoE;QACpE,0CAA0C;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS;gBAAE,CAAC,CAAC,gBAAgB,GAAG,OAAO,CAAC;YACnE,CAAC,CAAC,eAAe,GAAG,OAAO,CAAC;QAC7B,CAAC;QACD,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAEO,aAAa;QACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,YAAY;YAAE,OAAO;QAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACzC,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACD;AAED,IAAI,SAAsC,CAAC;AAE3C,MAAM,UAAU,kBAAkB;IACjC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IAClD,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
export interface StatusResult {
|
|
3
|
+
lines: string[];
|
|
4
|
+
hasActiveSprint: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Read active sprint and its tasks from store-cli.
|
|
8
|
+
* Returns formatted text lines for display via ctx.ui.notify.
|
|
9
|
+
* Exported so orchestrators can call directly without going through sendUserMessage.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runStatus(forgeRoot: string, cwd: string): Promise<StatusResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Register /forge:status (v0 native handler).
|
|
14
|
+
* forgeRoot is nullable — null means we're outside a Forge project.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerStatusCommand(pi: ExtensionAPI, opts: {
|
|
17
|
+
forgeRoot: string | null;
|
|
18
|
+
}): void;
|
|
19
|
+
export declare function readForgeRootFromConfig(cwd: string): string | null;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// status-command.ts — native v0 handler for /forge:status (FORGE-S23-T10)
|
|
2
|
+
//
|
|
3
|
+
// Replaces the delegateMarkdownCommand stub that previously lived in forge-commands.ts.
|
|
4
|
+
// Reads the active sprint from store and lists tasks with their statuses.
|
|
5
|
+
// No TUI — text-only widget via ctx.ui.notify.
|
|
6
|
+
//
|
|
7
|
+
// Archetype: Atomic (no LLM in loop — pack-04 §Atomic).
|
|
8
|
+
// Iron Laws:
|
|
9
|
+
// IL1 — new code lives in forge-cli/ only
|
|
10
|
+
// IL6 — no shell-string interpolation (argv-array throughout)
|
|
11
|
+
// IL7 — silent continuation past failures is never acceptable
|
|
12
|
+
import { execFile } from "node:child_process";
|
|
13
|
+
import * as fs from "node:fs";
|
|
14
|
+
import * as path from "node:path";
|
|
15
|
+
import { promisify } from "node:util";
|
|
16
|
+
import { resolveToolDir } from "./store-resolver.js";
|
|
17
|
+
const execFileAsync = promisify(execFile);
|
|
18
|
+
/**
|
|
19
|
+
* Read active sprint and its tasks from store-cli.
|
|
20
|
+
* Returns formatted text lines for display via ctx.ui.notify.
|
|
21
|
+
* Exported so orchestrators can call directly without going through sendUserMessage.
|
|
22
|
+
*/
|
|
23
|
+
export async function runStatus(forgeRoot, cwd) {
|
|
24
|
+
const toolDir = resolveToolDir(forgeRoot);
|
|
25
|
+
const storeCliPath = path.join(toolDir, "store-cli.cjs");
|
|
26
|
+
// Step 1: list all sprints
|
|
27
|
+
let listResult;
|
|
28
|
+
try {
|
|
29
|
+
const out = await execFileAsync("node", [storeCliPath, "query", "--list-sprints"], {
|
|
30
|
+
cwd,
|
|
31
|
+
encoding: "utf8",
|
|
32
|
+
timeout: 10_000,
|
|
33
|
+
});
|
|
34
|
+
listResult = JSON.parse(out.stdout);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
38
|
+
return {
|
|
39
|
+
lines: [`× forge:status — could not list sprints: ${msg}`],
|
|
40
|
+
hasActiveSprint: false,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Step 2: filter active sprints, sort by ID descending (proxy for recency)
|
|
44
|
+
const activeSprints = (listResult.results ?? [])
|
|
45
|
+
.filter((s) => s.status === "active")
|
|
46
|
+
.sort((a, b) => b.id.localeCompare(a.id));
|
|
47
|
+
if (activeSprints.length === 0) {
|
|
48
|
+
return {
|
|
49
|
+
lines: [
|
|
50
|
+
"forge:status — No active sprint found.",
|
|
51
|
+
'Run /forge:init to initialise a project, or check your store with /forge:store-query "--list-sprints".',
|
|
52
|
+
],
|
|
53
|
+
hasActiveSprint: false,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Use the most recent active sprint
|
|
57
|
+
const sprint = activeSprints[0];
|
|
58
|
+
// Step 3: fetch tasks for this sprint
|
|
59
|
+
let sprintResult;
|
|
60
|
+
try {
|
|
61
|
+
const out = await execFileAsync("node", [storeCliPath, "query", "--sprint", sprint.id], {
|
|
62
|
+
cwd,
|
|
63
|
+
encoding: "utf8",
|
|
64
|
+
timeout: 10_000,
|
|
65
|
+
});
|
|
66
|
+
sprintResult = JSON.parse(out.stdout);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
70
|
+
return {
|
|
71
|
+
lines: [`× forge:status — could not fetch tasks for sprint ${sprint.id}: ${msg}`],
|
|
72
|
+
hasActiveSprint: true,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const tasks = sprintResult.results ?? [];
|
|
76
|
+
// Step 4: format output
|
|
77
|
+
const lines = [
|
|
78
|
+
`Sprint: ${sprint.id}${sprint.title ? ` — ${sprint.title}` : ""}`,
|
|
79
|
+
`Tasks: ${tasks.length}`,
|
|
80
|
+
"",
|
|
81
|
+
];
|
|
82
|
+
if (tasks.length === 0) {
|
|
83
|
+
lines.push(" (no tasks found)");
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
for (const task of tasks) {
|
|
87
|
+
const status = task.status ?? "unknown";
|
|
88
|
+
const title = task.title ? ` — ${task.title.slice(0, 60)}` : "";
|
|
89
|
+
lines.push(` ${task.id} [${status}]${title}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (activeSprints.length > 1) {
|
|
93
|
+
lines.push("");
|
|
94
|
+
lines.push(` Note: ${activeSprints.length - 1} other active sprint(s) found. Showing most recent (${sprint.id}).`);
|
|
95
|
+
}
|
|
96
|
+
return { lines, hasActiveSprint: true };
|
|
97
|
+
}
|
|
98
|
+
// ── Register ─────────────────────────────────────────────────────────────────
|
|
99
|
+
/**
|
|
100
|
+
* Register /forge:status (v0 native handler).
|
|
101
|
+
* forgeRoot is nullable — null means we're outside a Forge project.
|
|
102
|
+
*/
|
|
103
|
+
export function registerStatusCommand(pi, opts) {
|
|
104
|
+
pi.registerCommand("forge:status", {
|
|
105
|
+
description: "Sprint and task summary widget — lists active sprint and task statuses.",
|
|
106
|
+
async handler(_args, ctx) {
|
|
107
|
+
const cwd = process.cwd();
|
|
108
|
+
// Outside-project guard
|
|
109
|
+
if (!opts.forgeRoot) {
|
|
110
|
+
ctx.ui.notify("× forge:status — not inside a Forge project. Run /forge:init first.", "error");
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
ctx.ui.setStatus?.("forge:status", "Loading sprint status…");
|
|
114
|
+
const result = await runStatus(opts.forgeRoot, cwd);
|
|
115
|
+
ctx.ui.setStatus?.("forge:status", undefined);
|
|
116
|
+
for (const line of result.lines) {
|
|
117
|
+
const severity = line.startsWith("×") ? "error" : "info";
|
|
118
|
+
ctx.ui.notify(line, severity);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// ── Outside-project config guard helper ──────────────────────────────────────
|
|
124
|
+
// Not used above because forgeRoot is passed in at register time, but exported
|
|
125
|
+
// for use in tests that need to verify the guard path.
|
|
126
|
+
export function readForgeRootFromConfig(cwd) {
|
|
127
|
+
try {
|
|
128
|
+
const configPath = path.join(cwd, ".forge", "config.json");
|
|
129
|
+
const raw = fs.readFileSync(configPath, "utf8");
|
|
130
|
+
const cfg = JSON.parse(raw);
|
|
131
|
+
const paths = cfg.paths;
|
|
132
|
+
if (paths && typeof paths.forgeRoot === "string")
|
|
133
|
+
return paths.forgeRoot;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// fall through
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=status-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-command.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/status-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
export interface StoreQueryResult {
|
|
3
|
+
stdout: string;
|
|
4
|
+
ok: boolean;
|
|
5
|
+
errorMessage?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Run store-cli in query or nlp mode.
|
|
9
|
+
* - Args starting with "--" → query branch: `store-cli query ...flags`
|
|
10
|
+
* - Otherwise → nlp branch: `store-cli nlp "<args>"`
|
|
11
|
+
*
|
|
12
|
+
* Returns raw stdout for display. Does NOT JSON-parse — caller renders as-is.
|
|
13
|
+
* Exported so orchestrators can call directly without going through sendUserMessage.
|
|
14
|
+
*/
|
|
15
|
+
export declare function runStoreQuery(args: string, forgeRoot: string, cwd: string): Promise<StoreQueryResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Register /forge:store-query.
|
|
18
|
+
* forgeRoot is nullable — null means we're outside a Forge project.
|
|
19
|
+
*/
|
|
20
|
+
export declare function registerStoreQuery(pi: ExtensionAPI, opts: {
|
|
21
|
+
forgeRoot: string | null;
|
|
22
|
+
}): void;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// store-query.ts — native atomic handler for /forge:store-query (FORGE-S23-T10)
|
|
2
|
+
//
|
|
3
|
+
// Dispatches to store-cli query (flags path) or store-cli nlp (intent path)
|
|
4
|
+
// and emits raw stdout via ctx.ui.notify.
|
|
5
|
+
//
|
|
6
|
+
// Archetype: Atomic (no LLM in loop — pack-04 §Atomic).
|
|
7
|
+
// Iron Laws:
|
|
8
|
+
// IL1 — new code lives in forge-cli/ only
|
|
9
|
+
// IL6 — no shell-string interpolation (argv-array throughout)
|
|
10
|
+
// IL7 — silent continuation past failures is never acceptable
|
|
11
|
+
import { execFile } from "node:child_process";
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import { promisify } from "node:util";
|
|
14
|
+
import { resolveToolDir } from "./store-resolver.js";
|
|
15
|
+
const execFileAsync = promisify(execFile);
|
|
16
|
+
// ── Usage message ─────────────────────────────────────────────────────────────
|
|
17
|
+
const USAGE = `Usage: /forge:store-query <intent or flags>
|
|
18
|
+
|
|
19
|
+
Examples:
|
|
20
|
+
/forge:store-query open bugs in S12
|
|
21
|
+
/forge:store-query FORGE-BUG-047
|
|
22
|
+
/forge:store-query --sprint FORGE-S12 --status in-progress
|
|
23
|
+
/forge:store-query --keyword auth
|
|
24
|
+
/forge:store-query schema`;
|
|
25
|
+
/**
|
|
26
|
+
* Run store-cli in query or nlp mode.
|
|
27
|
+
* - Args starting with "--" → query branch: `store-cli query ...flags`
|
|
28
|
+
* - Otherwise → nlp branch: `store-cli nlp "<args>"`
|
|
29
|
+
*
|
|
30
|
+
* Returns raw stdout for display. Does NOT JSON-parse — caller renders as-is.
|
|
31
|
+
* Exported so orchestrators can call directly without going through sendUserMessage.
|
|
32
|
+
*/
|
|
33
|
+
export async function runStoreQuery(args, forgeRoot, cwd) {
|
|
34
|
+
const trimmed = args.trim();
|
|
35
|
+
const toolDir = resolveToolDir(forgeRoot);
|
|
36
|
+
const storeCliPath = path.join(toolDir, "store-cli.cjs");
|
|
37
|
+
let argv;
|
|
38
|
+
let timeoutMs;
|
|
39
|
+
if (trimmed.startsWith("--")) {
|
|
40
|
+
// Query branch: pass flags verbatim as argv tokens
|
|
41
|
+
const tokens = trimmed.split(/\s+/).filter(Boolean);
|
|
42
|
+
argv = ["query", ...tokens];
|
|
43
|
+
timeoutMs = 10_000;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// NLP branch: pass entire trimmed arg string as single argument
|
|
47
|
+
argv = ["nlp", trimmed];
|
|
48
|
+
timeoutMs = 30_000;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const result = await execFileAsync("node", [storeCliPath, ...argv], {
|
|
52
|
+
cwd,
|
|
53
|
+
encoding: "utf8",
|
|
54
|
+
timeout: timeoutMs,
|
|
55
|
+
});
|
|
56
|
+
return { stdout: result.stdout, ok: true };
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const e = err;
|
|
60
|
+
// execFile rejects on non-zero exit; stdout may still contain partial results
|
|
61
|
+
const stderr = e.stderr || e.message || String(err);
|
|
62
|
+
const stdout = e.stdout || "";
|
|
63
|
+
return {
|
|
64
|
+
stdout,
|
|
65
|
+
ok: false,
|
|
66
|
+
errorMessage: stderr.slice(0, 500),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ── Register ─────────────────────────────────────────────────────────────────
|
|
71
|
+
/**
|
|
72
|
+
* Register /forge:store-query.
|
|
73
|
+
* forgeRoot is nullable — null means we're outside a Forge project.
|
|
74
|
+
*/
|
|
75
|
+
export function registerStoreQuery(pi, opts) {
|
|
76
|
+
pi.registerCommand("forge:store-query", {
|
|
77
|
+
description: "Query the Forge store by natural language or exact flags. " +
|
|
78
|
+
"Use flags (--sprint, --task, --keyword) for exact queries; " +
|
|
79
|
+
"use plain text for NLP intent queries.",
|
|
80
|
+
async handler(args, ctx) {
|
|
81
|
+
const cwd = process.cwd();
|
|
82
|
+
// Outside-project guard
|
|
83
|
+
if (!opts.forgeRoot) {
|
|
84
|
+
ctx.ui.notify("× forge:store-query — not inside a Forge project. Run /forge:init first.", "error");
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const trimmed = args.trim();
|
|
88
|
+
if (!trimmed) {
|
|
89
|
+
ctx.ui.notify(USAGE, "info");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
ctx.ui.setStatus?.("forge:store-query", "Querying store…");
|
|
93
|
+
const result = await runStoreQuery(trimmed, opts.forgeRoot, cwd);
|
|
94
|
+
ctx.ui.setStatus?.("forge:store-query", undefined);
|
|
95
|
+
if (!result.ok && result.errorMessage) {
|
|
96
|
+
ctx.ui.notify(`× forge:store-query — ${result.errorMessage}`, "error");
|
|
97
|
+
// Still show partial stdout if available
|
|
98
|
+
if (result.stdout.trim()) {
|
|
99
|
+
ctx.ui.notify(result.stdout.trim(), "info");
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
ctx.ui.notify(result.stdout.trim() || "(no results)", "info");
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=store-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-query.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/store-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
export interface ParsedStoreRepairArgs {
|
|
3
|
+
dryRun: boolean;
|
|
4
|
+
seed: string;
|
|
5
|
+
sourceLabel: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseStoreRepairArgs(rawArgs: string, cwd: string): ParsedStoreRepairArgs;
|
|
8
|
+
export interface ComposeStoreRepairKickoffOpts {
|
|
9
|
+
commandMd: string;
|
|
10
|
+
parsed: ParsedStoreRepairArgs;
|
|
11
|
+
}
|
|
12
|
+
export declare function composeStoreRepairKickoff(opts: ComposeStoreRepairKickoffOpts): string;
|
|
13
|
+
export interface RegisterStoreRepairOptions {
|
|
14
|
+
forgeRoot: string | null;
|
|
15
|
+
cwd?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function registerStoreRepair(pi: ExtensionAPI, options: RegisterStoreRepairOptions): void;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// forge:store-repair — native kickoff handler (FORGE-S23-T11).
|
|
2
|
+
//
|
|
3
|
+
// Replaces the auto-generated stub previously installed by
|
|
4
|
+
// registerAllForgeCommands (forge-commands.ts). Kickoff Shim archetype
|
|
5
|
+
// (Pack-04 + Pack-06): single LLM handoff in current context, no fork.
|
|
6
|
+
//
|
|
7
|
+
// --dry-run flag is forwarded in the kickoff body so the LLM calls
|
|
8
|
+
// validate-store --dry-run and skips write phases accordingly.
|
|
9
|
+
//
|
|
10
|
+
// Workflow source: <forgeRoot>/commands/store-repair.md (command file).
|
|
11
|
+
// File-existence check only — command files lack Pack-06 workflow markers.
|
|
12
|
+
//
|
|
13
|
+
// Iron Laws:
|
|
14
|
+
// IL1 — code only under forge-cli/src/extensions/forgecli/.
|
|
15
|
+
// IL4 — no JSON.stringify-into-subagent dispatch.
|
|
16
|
+
// IL6 — no shell-string interpolation; no spawn calls here.
|
|
17
|
+
// IL7 — every failure path emits ctx.ui.notify and returns; no silent
|
|
18
|
+
// continuation.
|
|
19
|
+
import * as fs from "node:fs";
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
import { sendKickoff } from "./kickoff.js";
|
|
22
|
+
export function parseStoreRepairArgs(rawArgs, cwd) {
|
|
23
|
+
const trimmed = (rawArgs ?? "").trim();
|
|
24
|
+
const result = {
|
|
25
|
+
dryRun: false,
|
|
26
|
+
seed: "",
|
|
27
|
+
sourceLabel: "",
|
|
28
|
+
};
|
|
29
|
+
if (!trimmed) {
|
|
30
|
+
result.sourceLabel = "(no args — full repair run)";
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
const tokens = trimmed.split(/\s+/);
|
|
34
|
+
const remaining = [];
|
|
35
|
+
for (const tok of tokens) {
|
|
36
|
+
if (tok === "--dry-run") {
|
|
37
|
+
result.dryRun = true;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
remaining.push(tok);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const tail = remaining.join(" ").trim();
|
|
44
|
+
if (tail.startsWith("@")) {
|
|
45
|
+
const ref = tail.slice(1).trim();
|
|
46
|
+
const filePath = path.isAbsolute(ref) ? ref : path.resolve(cwd, ref);
|
|
47
|
+
result.seed = fs.readFileSync(filePath, "utf8");
|
|
48
|
+
result.sourceLabel = `(seed from file: ${ref})`;
|
|
49
|
+
}
|
|
50
|
+
else if (tail) {
|
|
51
|
+
result.seed = tail;
|
|
52
|
+
result.sourceLabel = "(seed from inline text)";
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
result.sourceLabel = result.dryRun ? "(--dry-run mode)" : "(no args — full repair run)";
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
export function composeStoreRepairKickoff(opts) {
|
|
60
|
+
const { commandMd, parsed } = opts;
|
|
61
|
+
const sections = ["# /forge:store-repair", ""];
|
|
62
|
+
sections.push("## Dispatch", "");
|
|
63
|
+
sections.push("Diagnose and repair the Forge JSON store. Run the repair workflow below. Specifically:");
|
|
64
|
+
sections.push("");
|
|
65
|
+
if (parsed.dryRun) {
|
|
66
|
+
sections.push("**`--dry-run` mode.** Preview all repairs without writing anything. " +
|
|
67
|
+
"In Phase 2 (LLM repair) and Phase 3 (final validation), show what would change but skip all writes. " +
|
|
68
|
+
"Skip Phase 4 verification (nothing changed).");
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
sections.push("Full repair mode: diagnose, propose fixes, apply approved repairs, verify.");
|
|
72
|
+
}
|
|
73
|
+
sections.push("", "Use `forge_store` for all store reads and writes (never raw file writes to `.forge/store/`).");
|
|
74
|
+
sections.push("", "---", "", "## Command", "", commandMd.trim(), "", "---");
|
|
75
|
+
if (parsed.seed) {
|
|
76
|
+
sections.push("", `## Additional Context — ${parsed.sourceLabel}`, "", parsed.seed.trim());
|
|
77
|
+
}
|
|
78
|
+
return sections.join("\n");
|
|
79
|
+
}
|
|
80
|
+
// ── Registration ──────────────────────────────────────────────────────────
|
|
81
|
+
const COMMAND_NAME = "store-repair";
|
|
82
|
+
export function registerStoreRepair(pi, options) {
|
|
83
|
+
pi.registerCommand("forge:store-repair", {
|
|
84
|
+
description: "Diagnose and repair corrupted Forge store records. " +
|
|
85
|
+
"Usage: /forge:store-repair [--dry-run]. " +
|
|
86
|
+
"--dry-run shows what would be repaired without making changes.",
|
|
87
|
+
async handler(args, ctx) {
|
|
88
|
+
const { forgeRoot } = options;
|
|
89
|
+
const cwd = options.cwd ?? process.cwd();
|
|
90
|
+
if (!forgeRoot) {
|
|
91
|
+
ctx.ui.notify("× forge:store-repair — no Forge project at cwd; run /forge:init to bootstrap", "warning");
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const commandPath = path.join(forgeRoot, "commands", `${COMMAND_NAME}.md`);
|
|
95
|
+
let commandMd;
|
|
96
|
+
try {
|
|
97
|
+
commandMd = fs.readFileSync(commandPath, "utf8");
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const e = err;
|
|
101
|
+
if (e.code === "ENOENT") {
|
|
102
|
+
ctx.ui.notify(`× forge:store-repair — command file not found at commands/${COMMAND_NAME}.md; run /forge:init or /forge:regenerate first.`, "error");
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
ctx.ui.notify(`× forge:store-repair — failed to read command file: ${e.message ?? "unknown error"}`, "error");
|
|
106
|
+
}
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
let parsed;
|
|
110
|
+
try {
|
|
111
|
+
parsed = parseStoreRepairArgs(args, cwd);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
const e = err;
|
|
115
|
+
ctx.ui.notify(`× forge:store-repair — failed to parse args: ${e.message ?? "unknown"}`, "error");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const kickoff = composeStoreRepairKickoff({ commandMd, parsed });
|
|
119
|
+
sendKickoff(pi, kickoff);
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=store-repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-repair.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/store-repair.ts"],"names":[],"mappings":"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"}
|