issue-flow 0.12.0 → 0.14.0
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/README.md +79 -274
- package/dist/agent-OX3KPHE4.js +30 -0
- package/dist/{analyze-OEET7KGE.js → analyze-WIND2SEB.js} +31 -16
- package/dist/analyze-WIND2SEB.js.map +1 -0
- package/dist/{apply-ZIA3C52S.js → apply-JNOI2LR4.js} +18 -7
- package/dist/{apply-ZIA3C52S.js.map → apply-JNOI2LR4.js.map} +1 -1
- package/dist/bench-B4VZON7E.js +910 -0
- package/dist/bench-B4VZON7E.js.map +1 -0
- package/dist/{chunk-FADTCQGM.js → chunk-2IQ6M4ZE.js} +94 -32
- package/dist/chunk-2IQ6M4ZE.js.map +1 -0
- package/dist/chunk-3BWZO4YI.js +141 -0
- package/dist/chunk-3BWZO4YI.js.map +1 -0
- package/dist/chunk-3WFZETIM.js +163 -0
- package/dist/chunk-3WFZETIM.js.map +1 -0
- package/dist/chunk-67YIU2VB.js +362 -0
- package/dist/chunk-67YIU2VB.js.map +1 -0
- package/dist/{chunk-QCPGHBSZ.js → chunk-6BENHR2I.js} +63 -21
- package/dist/chunk-6BENHR2I.js.map +1 -0
- package/dist/{chunk-BYZDPR7N.js → chunk-6QYMSNVA.js} +194 -235
- package/dist/chunk-6QYMSNVA.js.map +1 -0
- package/dist/{chunk-Y5ZDJ4PJ.js → chunk-76MMPJ53.js} +20 -10
- package/dist/chunk-76MMPJ53.js.map +1 -0
- package/dist/chunk-7Z4Y3VKM.js +26 -0
- package/dist/chunk-7Z4Y3VKM.js.map +1 -0
- package/dist/{chunk-3QHK4YQA.js → chunk-B72RQZBV.js} +346 -119
- package/dist/chunk-B72RQZBV.js.map +1 -0
- package/dist/chunk-BEZ5BA5U.js +625 -0
- package/dist/chunk-BEZ5BA5U.js.map +1 -0
- package/dist/chunk-BRCNQXYQ.js +74 -0
- package/dist/chunk-BRCNQXYQ.js.map +1 -0
- package/dist/chunk-CGKLE6WR.js +1203 -0
- package/dist/chunk-CGKLE6WR.js.map +1 -0
- package/dist/chunk-CRGIQFUQ.js +83 -0
- package/dist/chunk-CRGIQFUQ.js.map +1 -0
- package/dist/{chunk-NS6R37II.js → chunk-F6TOYSYY.js} +141 -12
- package/dist/chunk-F6TOYSYY.js.map +1 -0
- package/dist/chunk-G5EK2XRN.js +25 -0
- package/dist/chunk-G5EK2XRN.js.map +1 -0
- package/dist/chunk-HAKDLR6N.js +134 -0
- package/dist/chunk-HAKDLR6N.js.map +1 -0
- package/dist/chunk-J3SOTUVI.js +298 -0
- package/dist/chunk-J3SOTUVI.js.map +1 -0
- package/dist/chunk-JN6D3MY6.js +30 -0
- package/dist/chunk-JN6D3MY6.js.map +1 -0
- package/dist/{chunk-LAFNLLQP.js → chunk-KMRFRXIT.js} +5 -5
- package/dist/chunk-KT7JKOXB.js +72 -0
- package/dist/chunk-KT7JKOXB.js.map +1 -0
- package/dist/chunk-L6HSKTQE.js +77 -0
- package/dist/chunk-L6HSKTQE.js.map +1 -0
- package/dist/chunk-LBGHI4S2.js +1264 -0
- package/dist/chunk-LBGHI4S2.js.map +1 -0
- package/dist/chunk-LEW4QM74.js +180 -0
- package/dist/chunk-LEW4QM74.js.map +1 -0
- package/dist/{chunk-FJP3UQGD.js → chunk-LFEQIZLB.js} +115 -20
- package/dist/chunk-LFEQIZLB.js.map +1 -0
- package/dist/chunk-OOVG2KBY.js +77 -0
- package/dist/chunk-OOVG2KBY.js.map +1 -0
- package/dist/{chunk-56KS3TFQ.js → chunk-OR43364P.js} +115 -160
- package/dist/chunk-OR43364P.js.map +1 -0
- package/dist/chunk-P3LRUNC6.js +16 -0
- package/dist/chunk-P3LRUNC6.js.map +1 -0
- package/dist/{chunk-TSOLWK7Y.js → chunk-PBTA3QQX.js} +8 -7
- package/dist/{chunk-TSOLWK7Y.js.map → chunk-PBTA3QQX.js.map} +1 -1
- package/dist/{chunk-MJULIKQU.js → chunk-PHW2YV6N.js} +23 -47
- package/dist/chunk-PHW2YV6N.js.map +1 -0
- package/dist/{chunk-73ATPIYX.js → chunk-PZTWU277.js} +36 -71
- package/dist/chunk-PZTWU277.js.map +1 -0
- package/dist/{chunk-M5UCXTIT.js → chunk-QD4VOILZ.js} +22 -18
- package/dist/chunk-QD4VOILZ.js.map +1 -0
- package/dist/chunk-QJ5UZAH5.js +2718 -0
- package/dist/chunk-QJ5UZAH5.js.map +1 -0
- package/dist/chunk-QK7WUO7A.js +283 -0
- package/dist/chunk-QK7WUO7A.js.map +1 -0
- package/dist/{chunk-A4SLHOW7.js → chunk-QZVKRDJY.js} +27 -19
- package/dist/chunk-QZVKRDJY.js.map +1 -0
- package/dist/chunk-REO3PXXO.js +71 -0
- package/dist/chunk-REO3PXXO.js.map +1 -0
- package/dist/{chunk-EZATO3DW.js → chunk-RVO7L4FX.js} +594 -17
- package/dist/chunk-RVO7L4FX.js.map +1 -0
- package/dist/{chunk-XQUSIEKA.js → chunk-SZMHCEYV.js} +63 -14
- package/dist/chunk-SZMHCEYV.js.map +1 -0
- package/dist/chunk-TYRNTSPJ.js +243 -0
- package/dist/chunk-TYRNTSPJ.js.map +1 -0
- package/dist/chunk-UJ3L2MS7.js +238 -0
- package/dist/chunk-UJ3L2MS7.js.map +1 -0
- package/dist/chunk-V7MO5EDS.js +120 -0
- package/dist/chunk-V7MO5EDS.js.map +1 -0
- package/dist/chunk-WB2X37MO.js +415 -0
- package/dist/chunk-WB2X37MO.js.map +1 -0
- package/dist/{chunk-NTMMF5UD.js → chunk-X44FKNKP.js} +525 -252
- package/dist/chunk-X44FKNKP.js.map +1 -0
- package/dist/chunk-XEYH6ZZI.js +289 -0
- package/dist/chunk-XEYH6ZZI.js.map +1 -0
- package/dist/cli.js +267 -44
- package/dist/cli.js.map +1 -1
- package/dist/{config-PRJGWW7J.js → config-HMFMCY2M.js} +31 -5
- package/dist/contract-JH2WBIO6.js +8 -0
- package/dist/conventions-NJF2OPVQ.js +146 -0
- package/dist/conventions-NJF2OPVQ.js.map +1 -0
- package/dist/diagnostics-THH42ZMP.js +23 -0
- package/dist/execute-KFNNZZHI.js +35 -0
- package/dist/{generate-EGB4KV2B.js → generate-FW5C6NP7.js} +37 -20
- package/dist/{generate-EGB4KV2B.js.map → generate-FW5C6NP7.js.map} +1 -1
- package/dist/git-W72QQ6GT.js +33 -0
- package/dist/init-HTN4V67Q.js +24 -0
- package/dist/{operations-BYT626KQ.js → operations-BCFOBH42.js} +27 -15
- package/dist/{operations-BYT626KQ.js.map → operations-BCFOBH42.js.map} +1 -1
- package/dist/permissions-4AKNQZHK.js +18 -0
- package/dist/plan-SIZLGA4V.js +34 -0
- package/dist/{policy-6S4GFC76.js → policy-DT6Q6ZVM.js} +20 -6
- package/dist/policy-DT6Q6ZVM.js.map +1 -0
- package/dist/pr-OMWCGUOW.js +39 -0
- package/dist/pr-review-N24CZPKR.js +32 -0
- package/dist/pr-review-N24CZPKR.js.map +1 -0
- package/dist/prd-5OFTZAHJ.js +33 -0
- package/dist/prd-5OFTZAHJ.js.map +1 -0
- package/dist/ps-RFORTCUD.js +93 -0
- package/dist/ps-RFORTCUD.js.map +1 -0
- package/dist/recorder-KCCPMKQG.js +32 -0
- package/dist/recorder-KCCPMKQG.js.map +1 -0
- package/dist/registry-GLPXOMFG.js +15 -0
- package/dist/registry-GLPXOMFG.js.map +1 -0
- package/dist/{resume-PPCNQVVV.js → resume-M5RLKP4I.js} +55 -34
- package/dist/{resume-PPCNQVVV.js.map → resume-M5RLKP4I.js.map} +1 -1
- package/dist/review-YM4JAABY.js +35 -0
- package/dist/review-YM4JAABY.js.map +1 -0
- package/dist/routing-NNT5WKGX.js +94 -0
- package/dist/routing-NNT5WKGX.js.map +1 -0
- package/dist/run-PZUKHPQK.js +54 -0
- package/dist/run-PZUKHPQK.js.map +1 -0
- package/dist/session-publisher-T7EI3CIP.js +11 -0
- package/dist/session-publisher-T7EI3CIP.js.map +1 -0
- package/dist/{state-manager-2EDVDBAR.js → state-manager-GQH32C44.js} +4 -2
- package/dist/state-manager-GQH32C44.js.map +1 -0
- package/dist/usage-V2CHE5PY.js +177 -0
- package/dist/usage-V2CHE5PY.js.map +1 -0
- package/dist/{web-EF5WIIGG.js → web-EA3KGNFN.js} +45 -30
- package/dist/web-EA3KGNFN.js.map +1 -0
- package/package.json +6 -2
- package/prompts/execute.md +7 -8
- package/prompts/plan.md +4 -5
- package/prompts/pr.md +2 -2
- package/web/AGENTS.md +152 -13
- package/web/public/app.css +380 -109
- package/web/public/app.js +525 -25
- package/web/public/index.html +68 -1
- package/dist/analyze-OEET7KGE.js.map +0 -1
- package/dist/chunk-3QHK4YQA.js.map +0 -1
- package/dist/chunk-42PJFMAR.js +0 -605
- package/dist/chunk-42PJFMAR.js.map +0 -1
- package/dist/chunk-4JSOYE4G.js +0 -368
- package/dist/chunk-4JSOYE4G.js.map +0 -1
- package/dist/chunk-56KS3TFQ.js.map +0 -1
- package/dist/chunk-73ATPIYX.js.map +0 -1
- package/dist/chunk-A4SLHOW7.js.map +0 -1
- package/dist/chunk-BAUPQXPE.js +0 -173
- package/dist/chunk-BAUPQXPE.js.map +0 -1
- package/dist/chunk-BYZDPR7N.js.map +0 -1
- package/dist/chunk-CD5ULRVC.js +0 -615
- package/dist/chunk-CD5ULRVC.js.map +0 -1
- package/dist/chunk-DIDUVL6O.js +0 -1365
- package/dist/chunk-DIDUVL6O.js.map +0 -1
- package/dist/chunk-EZATO3DW.js.map +0 -1
- package/dist/chunk-FADTCQGM.js.map +0 -1
- package/dist/chunk-FJP3UQGD.js.map +0 -1
- package/dist/chunk-LWRSMTTZ.js +0 -18
- package/dist/chunk-LWRSMTTZ.js.map +0 -1
- package/dist/chunk-M5UCXTIT.js.map +0 -1
- package/dist/chunk-M66SJHQQ.js +0 -206
- package/dist/chunk-M66SJHQQ.js.map +0 -1
- package/dist/chunk-MJULIKQU.js.map +0 -1
- package/dist/chunk-NS6R37II.js.map +0 -1
- package/dist/chunk-NTMMF5UD.js.map +0 -1
- package/dist/chunk-QCPGHBSZ.js.map +0 -1
- package/dist/chunk-XQUSIEKA.js.map +0 -1
- package/dist/chunk-Y5ZDJ4PJ.js.map +0 -1
- package/dist/execute-XBNVL753.js +0 -18
- package/dist/init-AJHCXJBP.js +0 -10
- package/dist/plan-QOZ3RIO6.js +0 -21
- package/dist/policy-6S4GFC76.js.map +0 -1
- package/dist/pr-EBBHD2ZX.js +0 -26
- package/dist/pr-review-VVMW5PO4.js +0 -20
- package/dist/prd-JQSZF7PR.js +0 -21
- package/dist/review-3F6MARWH.js +0 -19
- package/dist/run-RXE5GDQO.js +0 -36
- package/dist/web-EF5WIIGG.js.map +0 -1
- /package/dist/{config-PRJGWW7J.js.map → agent-OX3KPHE4.js.map} +0 -0
- /package/dist/{chunk-LAFNLLQP.js.map → chunk-KMRFRXIT.js.map} +0 -0
- /package/dist/{execute-XBNVL753.js.map → config-HMFMCY2M.js.map} +0 -0
- /package/dist/{init-AJHCXJBP.js.map → contract-JH2WBIO6.js.map} +0 -0
- /package/dist/{plan-QOZ3RIO6.js.map → diagnostics-THH42ZMP.js.map} +0 -0
- /package/dist/{pr-EBBHD2ZX.js.map → execute-KFNNZZHI.js.map} +0 -0
- /package/dist/{pr-review-VVMW5PO4.js.map → git-W72QQ6GT.js.map} +0 -0
- /package/dist/{prd-JQSZF7PR.js.map → init-HTN4V67Q.js.map} +0 -0
- /package/dist/{review-3F6MARWH.js.map → permissions-4AKNQZHK.js.map} +0 -0
- /package/dist/{run-RXE5GDQO.js.map → plan-SIZLGA4V.js.map} +0 -0
- /package/dist/{state-manager-2EDVDBAR.js.map → pr-OMWCGUOW.js.map} +0 -0
package/dist/cli.js
CHANGED
|
@@ -1,25 +1,39 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
DEFAULT_INACTIVITY_TIMEOUT_MS,
|
|
4
|
-
installShutdownHandlers
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
installShutdownHandlers,
|
|
5
|
+
parseAgentPhaseFlag,
|
|
6
|
+
setAgentCliOverrides,
|
|
7
7
|
setIssuesCliOverrides,
|
|
8
8
|
setResilienceCliOverrides,
|
|
9
|
+
setRoutingCliOverrides,
|
|
10
|
+
setVerifyCliOverrides,
|
|
9
11
|
setWebCliOverrides
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-QJ5UZAH5.js";
|
|
13
|
+
import "./chunk-QK7WUO7A.js";
|
|
12
14
|
import {
|
|
13
15
|
printError,
|
|
14
16
|
setGlobalTimeout,
|
|
15
17
|
setInactivityTimeout,
|
|
16
18
|
setVerbose
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
+
} from "./chunk-TYRNTSPJ.js";
|
|
20
|
+
import "./chunk-6QYMSNVA.js";
|
|
21
|
+
import "./chunk-3WFZETIM.js";
|
|
22
|
+
import "./chunk-HAKDLR6N.js";
|
|
23
|
+
import "./chunk-BEZ5BA5U.js";
|
|
24
|
+
import "./chunk-67YIU2VB.js";
|
|
25
|
+
import "./chunk-P3LRUNC6.js";
|
|
26
|
+
import "./chunk-G5EK2XRN.js";
|
|
27
|
+
import "./chunk-J3SOTUVI.js";
|
|
28
|
+
import {
|
|
29
|
+
isAgentProviderId
|
|
30
|
+
} from "./chunk-LBGHI4S2.js";
|
|
31
|
+
import "./chunk-7Z4Y3VKM.js";
|
|
32
|
+
import "./chunk-XEYH6ZZI.js";
|
|
19
33
|
|
|
20
34
|
// src/cli.ts
|
|
21
35
|
import { createRequire } from "module";
|
|
22
|
-
import { Command, InvalidArgumentError } from "commander";
|
|
36
|
+
import { Command, InvalidArgumentError, Option } from "commander";
|
|
23
37
|
|
|
24
38
|
// src/cli-options.ts
|
|
25
39
|
function resolveNoBranch(options) {
|
|
@@ -37,9 +51,15 @@ function resolveQueueScopeFlags(options) {
|
|
|
37
51
|
"--yes cannot be combined with --only: --yes runs the whole discovered hierarchy, --only runs just the issues you informed."
|
|
38
52
|
);
|
|
39
53
|
}
|
|
54
|
+
if (options.cascade === true && options.only === true) {
|
|
55
|
+
throw new CliFlagError(
|
|
56
|
+
"--cascade cannot be combined with --only: --cascade runs the container hierarchy, --only runs just the issues you informed."
|
|
57
|
+
);
|
|
58
|
+
}
|
|
40
59
|
return {
|
|
41
60
|
yes: options.yes === true ? true : void 0,
|
|
42
|
-
only: options.only === true ? true : void 0
|
|
61
|
+
only: options.only === true ? true : void 0,
|
|
62
|
+
cascade: options.cascade === true ? true : void 0
|
|
43
63
|
};
|
|
44
64
|
}
|
|
45
65
|
function resolveRunPhaseFlags(options) {
|
|
@@ -156,6 +176,16 @@ function parseInteger(value) {
|
|
|
156
176
|
}
|
|
157
177
|
return parsed;
|
|
158
178
|
}
|
|
179
|
+
function parseUsd(value) {
|
|
180
|
+
const parsed = Number.parseFloat(value);
|
|
181
|
+
if (!Number.isFinite(parsed) || parsed < 0) {
|
|
182
|
+
throw new InvalidArgumentError("Must be a non-negative number.");
|
|
183
|
+
}
|
|
184
|
+
return parsed;
|
|
185
|
+
}
|
|
186
|
+
function collectString(value, previous) {
|
|
187
|
+
return [...previous, value];
|
|
188
|
+
}
|
|
159
189
|
function parseQueueFailureMode(value) {
|
|
160
190
|
if (value === "stop" || value === "skip" || value === "block") return value;
|
|
161
191
|
throw new InvalidArgumentError("Must be one of: stop, skip, block.");
|
|
@@ -175,7 +205,7 @@ function withUserStoryNumberingOptions(cmd) {
|
|
|
175
205
|
);
|
|
176
206
|
}
|
|
177
207
|
function withGlobalOptions(cmd) {
|
|
178
|
-
return cmd.option("-v, --verbose", "Show
|
|
208
|
+
return cmd.option("-v, --verbose", "Show agent progress output in real time").option(
|
|
179
209
|
"-t, --timeout <seconds>",
|
|
180
210
|
"Override headless timeout in seconds (0 = no limit)",
|
|
181
211
|
parseInteger
|
|
@@ -183,7 +213,67 @@ function withGlobalOptions(cmd) {
|
|
|
183
213
|
"--inactivity-timeout <seconds>",
|
|
184
214
|
"Stop the agent after this many seconds with no output (0 = no watchdog)",
|
|
185
215
|
parseInteger
|
|
186
|
-
)
|
|
216
|
+
).option(
|
|
217
|
+
"--agent <provider>",
|
|
218
|
+
"Run every phase on this agent (claude|codex|cursor|antigravity)"
|
|
219
|
+
).option("--agent-model <model>", "Override the model for every phase").option(
|
|
220
|
+
"--agent-phase <phase>=<provider>[:<model>]",
|
|
221
|
+
"Override one phase (repeatable)",
|
|
222
|
+
collectAgentPhase,
|
|
223
|
+
{}
|
|
224
|
+
).option("--verify-level <level>", "Acceptance-contract level: L0 | L1 | L2 | L3 | L5").option("--no-cross-verify", "Keep L2 off even when a trigger would fire").option("--no-escalation", "Keep routing.escalation.enabled off").option("--max-cost <usd>", "Issue cost ceiling in USD (Issue Flow enforces it)", parseUsd).option("--max-duration <seconds>", "Issue duration ceiling in seconds", parseInteger);
|
|
225
|
+
}
|
|
226
|
+
function collectAgentPhase(value, previous) {
|
|
227
|
+
const parsed = parseAgentPhaseFlag(value);
|
|
228
|
+
return { ...previous, [parsed.phase]: parsed.block };
|
|
229
|
+
}
|
|
230
|
+
function resolveAgentOverrides(opts) {
|
|
231
|
+
const overrides = {};
|
|
232
|
+
if (typeof opts.agent === "string") {
|
|
233
|
+
if (!isAgentProviderId(opts.agent)) {
|
|
234
|
+
throw new InvalidArgumentError("Must be one of: claude, codex, cursor, antigravity.");
|
|
235
|
+
}
|
|
236
|
+
overrides.forceProvider = opts.agent;
|
|
237
|
+
}
|
|
238
|
+
if (typeof opts.agentModel === "string") {
|
|
239
|
+
overrides.forceModel = opts.agentModel;
|
|
240
|
+
}
|
|
241
|
+
if (opts.agentPhase && typeof opts.agentPhase === "object") {
|
|
242
|
+
overrides.phases = opts.agentPhase;
|
|
243
|
+
}
|
|
244
|
+
return overrides;
|
|
245
|
+
}
|
|
246
|
+
var VERIFY_LEVELS = ["L0", "L1", "L2", "L3", "L5"];
|
|
247
|
+
function resolveVerifyOverrides(opts) {
|
|
248
|
+
const overrides = {};
|
|
249
|
+
if (typeof opts.verifyLevel === "string") {
|
|
250
|
+
if (!VERIFY_LEVELS.includes(opts.verifyLevel)) {
|
|
251
|
+
throw new InvalidArgumentError("Must be one of: L0, L1, L2, L3, L5.");
|
|
252
|
+
}
|
|
253
|
+
overrides.level = opts.verifyLevel;
|
|
254
|
+
}
|
|
255
|
+
if (opts.crossVerify === false) overrides.crossVerify = false;
|
|
256
|
+
return overrides;
|
|
257
|
+
}
|
|
258
|
+
function resolveRoutingOverrides(opts) {
|
|
259
|
+
const overrides = {};
|
|
260
|
+
if (opts.escalation === false) {
|
|
261
|
+
overrides.escalation = {
|
|
262
|
+
enabled: false,
|
|
263
|
+
minAttemptsBeforeEscalation: 2,
|
|
264
|
+
maxEscalations: 2,
|
|
265
|
+
maxRungs: ["effort", "model", "harness"]
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
if (typeof opts.maxCost === "number" || typeof opts.maxDuration === "number") {
|
|
269
|
+
overrides.ceilings = {
|
|
270
|
+
maxCostUsdPerIssue: typeof opts.maxCost === "number" ? opts.maxCost : null,
|
|
271
|
+
maxDurationMsPerIssue: typeof opts.maxDuration === "number" ? opts.maxDuration * 1e3 : null,
|
|
272
|
+
maxExecutionsPerIssue: null,
|
|
273
|
+
onCeiling: "block"
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
return overrides;
|
|
187
277
|
}
|
|
188
278
|
function withResilienceOptions(cmd) {
|
|
189
279
|
return cmd.option("--continuous", "Long-running profile: keep going without supervision").option("--resilient", "Alias of --continuous").option("--no-failover", "Never migrate a phase to another agent provider").option("--auto-decompose", "Act on a decomposition report instead of only writing it");
|
|
@@ -218,7 +308,7 @@ function resolveWebOverrides(opts) {
|
|
|
218
308
|
}
|
|
219
309
|
var program = new Command();
|
|
220
310
|
program.name("issue-flow").description(
|
|
221
|
-
"Unified CLI for orchestrating the full issue-flow pipeline via Claude Code
|
|
311
|
+
"Unified CLI for orchestrating the full issue-flow pipeline via Claude Code, Codex CLI, Cursor CLI or Antigravity CLI."
|
|
222
312
|
).version(version);
|
|
223
313
|
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
224
314
|
installShutdownHandlers();
|
|
@@ -233,6 +323,17 @@ program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
|
233
323
|
setInactivityTimeout(opts.inactivityTimeout * 1e3);
|
|
234
324
|
}
|
|
235
325
|
setWebCliOverrides(resolveWebOverrides(opts));
|
|
326
|
+
try {
|
|
327
|
+
setVerifyCliOverrides(resolveVerifyOverrides(opts));
|
|
328
|
+
setAgentCliOverrides(resolveAgentOverrides(opts));
|
|
329
|
+
setRoutingCliOverrides(resolveRoutingOverrides(opts));
|
|
330
|
+
} catch (error) {
|
|
331
|
+
if (error instanceof InvalidArgumentError) {
|
|
332
|
+
printError(error.message);
|
|
333
|
+
process.exit(1);
|
|
334
|
+
}
|
|
335
|
+
throw error;
|
|
336
|
+
}
|
|
236
337
|
setResilienceCliOverrides(
|
|
237
338
|
resolveResilienceOverrides({
|
|
238
339
|
continuous: opts.continuous,
|
|
@@ -257,19 +358,22 @@ withIssueOptions(
|
|
|
257
358
|
withGlobalOptions(
|
|
258
359
|
program.command("init").description(
|
|
259
360
|
"Check prerequisites and report (or create) the conventions this repository is missing"
|
|
260
|
-
).option("--apply", "Create the missing files instead of only reporting them").option("--json", "Emit the plan as JSON").option("--scope <dir>", "Resolve the conventions for a subdirectory (monorepo)").option("--check-only", "Only verify prerequisites, as earlier releases did")
|
|
361
|
+
).option("--apply", "Create the missing files instead of only reporting them").option("--json", "Emit the plan as JSON").option("--scope <dir>", "Resolve the conventions for a subdirectory (monorepo)").option("--check-only", "Only verify prerequisites, as earlier releases did").option("--no-agent-prompt", "Skip the first-run agent choice")
|
|
261
362
|
)
|
|
262
363
|
).action(
|
|
263
364
|
async (options) => {
|
|
264
|
-
const { loadIssuesConfig } = await import("./config-
|
|
265
|
-
const { runInit } = await import("./init-
|
|
365
|
+
const { loadIssuesConfig } = await import("./config-HMFMCY2M.js");
|
|
366
|
+
const { runInit } = await import("./init-HTN4V67Q.js");
|
|
266
367
|
const { preferredProvider } = await loadIssuesConfig();
|
|
267
|
-
const code = await runInit(preferredProvider,
|
|
368
|
+
const code = await runInit(preferredProvider, {
|
|
369
|
+
...options,
|
|
370
|
+
noAgentPrompt: options.agentPrompt === false
|
|
371
|
+
});
|
|
268
372
|
process.exit(code);
|
|
269
373
|
}
|
|
270
374
|
);
|
|
271
375
|
withGlobalOptions(
|
|
272
|
-
program.command("generate").description("Draft an issue
|
|
376
|
+
program.command("generate").description("Draft an issue with the configured agent and create it").requiredOption("--prompt <text>", "Issue description text").option("--github", "Create the issue on GitHub").option("--local", "Create the issue under issues/<n>/ only").option("--both", "Create the issue on GitHub and mirror it locally")
|
|
273
377
|
).action(async (options) => {
|
|
274
378
|
let target;
|
|
275
379
|
try {
|
|
@@ -281,7 +385,7 @@ withGlobalOptions(
|
|
|
281
385
|
}
|
|
282
386
|
throw error;
|
|
283
387
|
}
|
|
284
|
-
const { runGenerate } = await import("./generate-
|
|
388
|
+
const { runGenerate } = await import("./generate-FW5C6NP7.js");
|
|
285
389
|
const code = await runGenerate(options.prompt, target);
|
|
286
390
|
process.exit(code);
|
|
287
391
|
});
|
|
@@ -295,7 +399,7 @@ withUserStoryNumberingOptions(
|
|
|
295
399
|
).argument("<issues...>", 'Issue number(s): 42, "42,43" or 42 43').option("--mode <mode>", "Execution mode: auto | manual", "auto").option("--from <phase>", "Resume from a specific phase").option(
|
|
296
400
|
"--no-branch",
|
|
297
401
|
"Run pipeline on current branch without creating a new branch or PR"
|
|
298
|
-
).option("--pr-review", "Review the created Pull Request after the pr phase").option("-y, --yes", "Run the whole discovered hierarchy without confirmation").option("--only", "Run just the issues informed, without their hierarchy").option(
|
|
402
|
+
).option("--pr-review", "Review the created Pull Request after the pr phase").option("-y, --yes", "Run the whole discovered hierarchy without confirmation").option("--cascade", "Run the children of a container, without implementing it").option("--only", "Run just the issues informed, without their hierarchy").option(
|
|
299
403
|
"--retry-limit <number>",
|
|
300
404
|
"Retry transient Claude failures up to N consecutive times",
|
|
301
405
|
parseInteger
|
|
@@ -303,7 +407,7 @@ withUserStoryNumberingOptions(
|
|
|
303
407
|
"--on-issue-failure <mode>",
|
|
304
408
|
"In a queue, on a failing issue: stop | skip | block",
|
|
305
409
|
parseQueueFailureMode
|
|
306
|
-
)
|
|
410
|
+
).option("-d, --background", "Detach after confirmation and return the terminal").addOption(new Option("--detached-child").hideHelp())
|
|
307
411
|
)
|
|
308
412
|
)
|
|
309
413
|
)
|
|
@@ -324,7 +428,7 @@ withUserStoryNumberingOptions(
|
|
|
324
428
|
}
|
|
325
429
|
throw error;
|
|
326
430
|
}
|
|
327
|
-
const { runPipeline } = await import("./run-
|
|
431
|
+
const { runPipeline } = await import("./run-PZUKHPQK.js");
|
|
328
432
|
const code = await runPipeline(
|
|
329
433
|
issues,
|
|
330
434
|
options.mode,
|
|
@@ -334,11 +438,14 @@ withUserStoryNumberingOptions(
|
|
|
334
438
|
{
|
|
335
439
|
yes: scope.yes,
|
|
336
440
|
only: scope.only,
|
|
441
|
+
cascade: scope.cascade,
|
|
337
442
|
continueNumbering: numbering.continueFlag,
|
|
338
443
|
startUs: numbering.startUs,
|
|
339
444
|
retryLimit: options.retryLimit,
|
|
340
445
|
retryForever: options.retryForever,
|
|
341
|
-
onIssueFailure: options.onIssueFailure
|
|
446
|
+
onIssueFailure: options.onIssueFailure,
|
|
447
|
+
background: options.background,
|
|
448
|
+
detachedChild: options.detachedChild
|
|
342
449
|
}
|
|
343
450
|
);
|
|
344
451
|
process.exit(code);
|
|
@@ -349,7 +456,7 @@ withIssueOptions(
|
|
|
349
456
|
program.command("resume").description("Resume an interrupted pipeline from the phase it stopped at").argument("[issue]", "Issue to resume. Omitted: the most recently attempted one").option("--all", "Resume every unfinished issue of this project, in order").option("--mode <mode>", "Execution mode: auto | manual", "auto")
|
|
350
457
|
)
|
|
351
458
|
).action(async (issue, options) => {
|
|
352
|
-
const { runResume } = await import("./resume-
|
|
459
|
+
const { runResume } = await import("./resume-M5RLKP4I.js");
|
|
353
460
|
const code = await runResume(issue, {
|
|
354
461
|
...options.all === void 0 ? {} : { all: options.all },
|
|
355
462
|
...options.mode === void 0 ? {} : { mode: options.mode }
|
|
@@ -359,22 +466,47 @@ withIssueOptions(
|
|
|
359
466
|
withGlobalOptions(
|
|
360
467
|
program.command("status").description("What is running right now, in which phase, and since when").argument("[issue]", "Restrict the report to one issue").option("--json", "Emit the assembled state as JSON")
|
|
361
468
|
).action(async (issue, options) => {
|
|
362
|
-
const { runStatus } = await import("./operations-
|
|
469
|
+
const { runStatus } = await import("./operations-BCFOBH42.js");
|
|
363
470
|
process.exit(
|
|
364
471
|
await runStatus(issue, { ...options.json === void 0 ? {} : { json: options.json } })
|
|
365
472
|
);
|
|
366
473
|
});
|
|
474
|
+
withGlobalOptions(
|
|
475
|
+
program.command("usage").description("Aggregate execution telemetry from tasks.json").argument("[issue]", "Restrict the report to one issue").option("--issue <issue>", "Same as the positional argument").option("--since <date>", "Only executions started on or after this ISO date").option("--by <key>", "Group by harness, provider, model, purpose or status").option("--json", "Emit the assembled totals as JSON")
|
|
476
|
+
).action(
|
|
477
|
+
async (issue, options) => {
|
|
478
|
+
const { runUsage, USAGE_GROUP_KEYS } = await import("./usage-V2CHE5PY.js");
|
|
479
|
+
const by = options.by;
|
|
480
|
+
if (by !== void 0 && !USAGE_GROUP_KEYS.includes(by)) {
|
|
481
|
+
printError("Must be one of: harness, provider, model, purpose, status.");
|
|
482
|
+
process.exit(1);
|
|
483
|
+
}
|
|
484
|
+
process.exit(
|
|
485
|
+
await runUsage(issue ?? options.issue, {
|
|
486
|
+
...options.since === void 0 ? {} : { since: options.since },
|
|
487
|
+
...by === void 0 ? {} : { by },
|
|
488
|
+
...options.json === void 0 ? {} : { json: options.json }
|
|
489
|
+
})
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
);
|
|
493
|
+
withGlobalOptions(
|
|
494
|
+
program.command("ps").description("Every issue-flow run active on this machine").option("--json", "Emit the listing as JSON").option("--watch", "Refresh the listing until interrupted")
|
|
495
|
+
).action(async (options) => {
|
|
496
|
+
const { runPs } = await import("./ps-RFORTCUD.js");
|
|
497
|
+
process.exit(await runPs(options));
|
|
498
|
+
});
|
|
367
499
|
withGlobalOptions(
|
|
368
500
|
program.command("runs").description("History of the runs of this project, with how each ended")
|
|
369
501
|
).action(async () => {
|
|
370
|
-
const { runRuns } = await import("./operations-
|
|
502
|
+
const { runRuns } = await import("./operations-BCFOBH42.js");
|
|
371
503
|
process.exit(await runRuns());
|
|
372
504
|
});
|
|
373
505
|
withGlobalOptions(
|
|
374
506
|
program.command("logs").description("Read the execution journal (events.jsonl), filtered and readable").argument("[issue]", "Issue to read. Omitted: the most recently attempted one").option("--issue <issue>", "Same as the positional argument").option("--follow", "Keep reading as the journal grows").option("--tail <n>", "How many entries to show first (default 50)", parseInteger).option("--kind <kinds>", "Only these event types, comma separated (retry, phase:end, \u2026)")
|
|
375
507
|
).action(
|
|
376
508
|
async (issue, options) => {
|
|
377
|
-
const { runLogs } = await import("./operations-
|
|
509
|
+
const { runLogs } = await import("./operations-BCFOBH42.js");
|
|
378
510
|
const kinds = options.kind === void 0 ? void 0 : options.kind.split(",").map((kind) => kind.trim()).filter((kind) => kind !== "");
|
|
379
511
|
process.exit(
|
|
380
512
|
await runLogs(issue ?? options.issue, {
|
|
@@ -388,37 +520,37 @@ withGlobalOptions(
|
|
|
388
520
|
withGlobalOptions(
|
|
389
521
|
program.command("pause").description("Ask the running pipeline to stop after writing a checkpoint")
|
|
390
522
|
).action(async () => {
|
|
391
|
-
const { runPause } = await import("./operations-
|
|
523
|
+
const { runPause } = await import("./operations-BCFOBH42.js");
|
|
392
524
|
process.exit(await runPause());
|
|
393
525
|
});
|
|
394
526
|
withGlobalOptions(
|
|
395
527
|
program.command("cancel").description("Stop the run and mark the issue so a resume does not pick it up").argument("[issue]", "Issue to cancel. Omitted: the most recently attempted one")
|
|
396
528
|
).action(async (issue) => {
|
|
397
|
-
const { runCancel } = await import("./operations-
|
|
529
|
+
const { runCancel } = await import("./operations-BCFOBH42.js");
|
|
398
530
|
process.exit(await runCancel(issue));
|
|
399
531
|
});
|
|
400
532
|
withIssueOptions(
|
|
401
533
|
withGlobalOptions(
|
|
402
|
-
program.command("analyze").description("Analyze an issue
|
|
534
|
+
program.command("analyze").description("Analyze an issue with the configured agent").argument("<issue>", "Issue number")
|
|
403
535
|
)
|
|
404
536
|
).action(async (issue) => {
|
|
405
|
-
const { runAnalyze } = await import("./analyze-
|
|
537
|
+
const { runAnalyze } = await import("./analyze-WIND2SEB.js");
|
|
406
538
|
const code = await runAnalyze(issue);
|
|
407
539
|
process.exit(code);
|
|
408
540
|
});
|
|
409
541
|
withIssueOptions(
|
|
410
542
|
withGlobalOptions(
|
|
411
|
-
program.command("prd").description("Generate a PRD from an analyzed issue
|
|
543
|
+
program.command("prd").description("Generate a PRD from an analyzed issue with the configured agent").argument("<issue>", "Issue number")
|
|
412
544
|
)
|
|
413
545
|
).action(async (issue) => {
|
|
414
|
-
const { runPrd } = await import("./prd-
|
|
546
|
+
const { runPrd } = await import("./prd-5OFTZAHJ.js");
|
|
415
547
|
const code = await runPrd(issue);
|
|
416
548
|
process.exit(code);
|
|
417
549
|
});
|
|
418
550
|
withUserStoryNumberingOptions(
|
|
419
551
|
withIssueOptions(
|
|
420
552
|
withGlobalOptions(
|
|
421
|
-
program.command("plan").description("Convert a PRD to a tasks.json task plan
|
|
553
|
+
program.command("plan").description("Convert a PRD to a tasks.json task plan with the configured agent").argument("<issue>", "Issue number")
|
|
422
554
|
)
|
|
423
555
|
)
|
|
424
556
|
).action(async (issue, options) => {
|
|
@@ -432,7 +564,7 @@ withUserStoryNumberingOptions(
|
|
|
432
564
|
}
|
|
433
565
|
throw error;
|
|
434
566
|
}
|
|
435
|
-
const { runPlan } = await import("./plan-
|
|
567
|
+
const { runPlan } = await import("./plan-SIZLGA4V.js");
|
|
436
568
|
const code = await runPlan(issue, void 0, numbering);
|
|
437
569
|
process.exit(code);
|
|
438
570
|
});
|
|
@@ -451,7 +583,7 @@ withWebOptions(
|
|
|
451
583
|
).action(
|
|
452
584
|
async (positionalMaxIter, options) => {
|
|
453
585
|
try {
|
|
454
|
-
const { runExecute } = await import("./execute-
|
|
586
|
+
const { runExecute } = await import("./execute-KFNNZZHI.js");
|
|
455
587
|
const code = await runExecute(positionalMaxIter, options);
|
|
456
588
|
process.exit(code);
|
|
457
589
|
} catch (error) {
|
|
@@ -462,19 +594,19 @@ withWebOptions(
|
|
|
462
594
|
);
|
|
463
595
|
withIssueOptions(
|
|
464
596
|
withGlobalOptions(
|
|
465
|
-
program.command("review").description("Validate an issue resolution
|
|
597
|
+
program.command("review").description("Validate an issue resolution with the configured agent").argument("<issue>", "Issue number")
|
|
466
598
|
)
|
|
467
599
|
).action(async (issue) => {
|
|
468
|
-
const { runReview } = await import("./review-
|
|
600
|
+
const { runReview } = await import("./review-YM4JAABY.js");
|
|
469
601
|
const code = await runReview(issue);
|
|
470
602
|
process.exit(code);
|
|
471
603
|
});
|
|
472
604
|
withIssueOptions(
|
|
473
605
|
withGlobalOptions(
|
|
474
|
-
program.command("pr").description("Create a pull request
|
|
606
|
+
program.command("pr").description("Create a pull request with the configured agent").argument("<issue>", "Issue number")
|
|
475
607
|
)
|
|
476
608
|
).action(async (issue) => {
|
|
477
|
-
const { runPr } = await import("./pr-
|
|
609
|
+
const { runPr } = await import("./pr-OMWCGUOW.js");
|
|
478
610
|
const code = await runPr(issue);
|
|
479
611
|
process.exit(code);
|
|
480
612
|
});
|
|
@@ -482,35 +614,126 @@ var webCommand = program.command("web").description("Manage the web monitoring s
|
|
|
482
614
|
webCommand.command("serve").description(
|
|
483
615
|
"Run the web monitor server in the foreground (internal \u2014 spawned detached by --web)"
|
|
484
616
|
).option("--port <n>", "Web server port (default: 3737)", parseInteger).option("--host <h>", "Web server host (default: 0.0.0.0)").option("--refresh <s>", "Suggested UI polling interval in seconds", parseInteger).action(async (options) => {
|
|
485
|
-
const { runWebServe } = await import("./web-
|
|
617
|
+
const { runWebServe } = await import("./web-EA3KGNFN.js");
|
|
486
618
|
const code = await runWebServe(options);
|
|
487
619
|
if (code !== 0) {
|
|
488
620
|
process.exit(code);
|
|
489
621
|
}
|
|
490
622
|
});
|
|
491
623
|
webCommand.command("stop").description("Stop the running web monitor server").action(async () => {
|
|
492
|
-
const { runWebStop } = await import("./web-
|
|
624
|
+
const { runWebStop } = await import("./web-EA3KGNFN.js");
|
|
493
625
|
const code = await runWebStop();
|
|
494
626
|
process.exit(code);
|
|
495
627
|
});
|
|
496
628
|
withGlobalOptions(
|
|
497
629
|
program.command("policy").description("Inspect the policies discovered in this repository and their provenance").option("--scope <dir>", "Resolve the policy for a subdirectory (monorepo)").option("--json", "Emit the resolved policy as JSON")
|
|
498
630
|
).action(async (options) => {
|
|
499
|
-
const { runPolicy } = await import("./policy-
|
|
631
|
+
const { runPolicy } = await import("./policy-DT6Q6ZVM.js");
|
|
500
632
|
const code = await runPolicy(options);
|
|
501
633
|
process.exit(code);
|
|
502
634
|
});
|
|
635
|
+
var routingCommand = withGlobalOptions(
|
|
636
|
+
program.command("routing").description("Inspect the shadow router (records a recommendation, does not act)")
|
|
637
|
+
);
|
|
638
|
+
routingCommand.option("--json", "Emit the resolved routing config as JSON").action(async (options) => {
|
|
639
|
+
const { runRoutingInspect } = await import("./routing-NNT5WKGX.js");
|
|
640
|
+
process.exit(await runRoutingInspect(options));
|
|
641
|
+
});
|
|
642
|
+
routingCommand.command("report").description("Shadow agreement between selected and actual harness").option("--issue <n>", "Issue number").option("--json", "Emit JSON").action(async (options) => {
|
|
643
|
+
const { runRoutingReport } = await import("./routing-NNT5WKGX.js");
|
|
644
|
+
process.exit(await runRoutingReport(options));
|
|
645
|
+
});
|
|
646
|
+
var conventionsCommand = withGlobalOptions(
|
|
647
|
+
program.command("conventions").description("Compute the repository Git convention (branch, commit, PR title)")
|
|
648
|
+
);
|
|
649
|
+
conventionsCommand.command("branch").description("Print the deterministic branch name for an issue").option("--issue <n>", "Issue number").option("--title <text>", "Issue title, when the issue cannot be resolved").option("--json", "Emit JSON").action(async (options) => {
|
|
650
|
+
const { runConventionsBranch } = await import("./conventions-NJF2OPVQ.js");
|
|
651
|
+
process.exit(await runConventionsBranch(options));
|
|
652
|
+
});
|
|
653
|
+
conventionsCommand.command("commit").description("Print a Conventional Commit message").requiredOption("--type <type>", "Change type (feat, fix, docs, \u2026)").option("--scope <scope>", "Optional scope").requiredOption("--subject <text>", "Commit subject").option("--issue <n>", "Issue number for the Refs trailer").option("--story <id>", "Story id (US-010)").option("--breaking <text>", "Breaking change description").option("--json", "Emit JSON").action(
|
|
654
|
+
async (options) => {
|
|
655
|
+
const { runConventionsCommit } = await import("./conventions-NJF2OPVQ.js");
|
|
656
|
+
process.exit(await runConventionsCommit(options));
|
|
657
|
+
}
|
|
658
|
+
);
|
|
659
|
+
conventionsCommand.command("pr-title").description("Print the Conventional Commit Pull Request title").option("--issue <n>", "Issue number").option("--title <text>", "Issue title, when the issue cannot be resolved").option("--json", "Emit JSON").action(async (options) => {
|
|
660
|
+
const { runConventionsPrTitle } = await import("./conventions-NJF2OPVQ.js");
|
|
661
|
+
process.exit(await runConventionsPrTitle(options));
|
|
662
|
+
});
|
|
663
|
+
var agentCommand = withGlobalOptions(
|
|
664
|
+
program.command("agent").description("Inspect the resolved agent and model for each phase").option("--json", "Emit the resolved agent configuration as JSON")
|
|
665
|
+
);
|
|
666
|
+
agentCommand.action(async (options) => {
|
|
667
|
+
const { runAgent } = await import("./agent-OX3KPHE4.js");
|
|
668
|
+
const code = await runAgent(options);
|
|
669
|
+
process.exit(code);
|
|
670
|
+
});
|
|
671
|
+
agentCommand.command("use").description("Write an agent preference to config.json or .issue-flow.json").argument("<provider>", "claude, codex, cursor or antigravity").option("--model <model>", "Model identifier for this preference").option("--global", "Write to ~/.issue-flow/config.json (default)").option("--project", "Write to .issue-flow.json in the repository").option("--phase <phase>", "Write only the override for this phase").action(
|
|
672
|
+
async (provider, options) => {
|
|
673
|
+
const { runAgentUse } = await import("./agent-OX3KPHE4.js");
|
|
674
|
+
const code = await runAgentUse(provider, options);
|
|
675
|
+
process.exit(code);
|
|
676
|
+
}
|
|
677
|
+
);
|
|
503
678
|
withGlobalOptions(
|
|
504
|
-
program.command("pr-review").description("Review a Pull Request as a whole
|
|
679
|
+
program.command("pr-review").description("Review a Pull Request as a whole with the configured agent").argument("[pr]", "Pull Request number (discovered from the session when omitted)").option("--issue <n>", "Issue the Pull Request belongs to").option("--round <n>", "Rewrite a specific review round instead of appending a new one").option("--yes", "Skip the confirmation of the discovered Pull Request").option(
|
|
505
680
|
"--fail-on <level>",
|
|
506
681
|
"Verdict that fails the command: request-changes | suggestions | none"
|
|
507
682
|
)
|
|
508
683
|
).action(
|
|
509
684
|
async (pr, options) => {
|
|
510
|
-
const { runPrReview } = await import("./pr-review-
|
|
685
|
+
const { runPrReview } = await import("./pr-review-N24CZPKR.js");
|
|
511
686
|
const code = await runPrReview(pr, options);
|
|
512
687
|
process.exit(code);
|
|
513
688
|
}
|
|
514
689
|
);
|
|
690
|
+
withGlobalOptions(
|
|
691
|
+
program.command("bench").description("Measure the corpus: synthetic (CI) or real (paid, on demand)").option("--mode <mode>", "synthetic (default, free) or real (fixtures + harness)").option(
|
|
692
|
+
"--task <class>",
|
|
693
|
+
"Corpus class (repeatable): trivial, small, medium, analysis",
|
|
694
|
+
collectString,
|
|
695
|
+
[]
|
|
696
|
+
).option("--arm <name>", "Experiment arm (repeatable). Default: baseline", collectString, []).option("--repeats <n>", "Repetitions per cell (default 5)", parseInteger).option(
|
|
697
|
+
"--campaign-max-cost <usd>",
|
|
698
|
+
"Campaign cost ceiling in USD (evaluateCeilings)",
|
|
699
|
+
parseUsd
|
|
700
|
+
).option(
|
|
701
|
+
"--campaign-max-duration <ms>",
|
|
702
|
+
"Campaign duration ceiling in milliseconds",
|
|
703
|
+
parseInteger
|
|
704
|
+
).option("--out <path>", "Write the markdown report to this path").option("--yes", "Skip the paid-campaign confirmation").option("--repo <path>", "Investigation escape; does not produce a publishable row").option("--json", "Also emit the campaign JSON")
|
|
705
|
+
).action(
|
|
706
|
+
async (options) => {
|
|
707
|
+
if (options.mode !== void 0 && options.mode !== "synthetic" && options.mode !== "real") {
|
|
708
|
+
printError("Unknown bench mode. Use 'synthetic' or 'real'.");
|
|
709
|
+
process.exit(1);
|
|
710
|
+
}
|
|
711
|
+
const { runBench } = await import("./bench-B4VZON7E.js");
|
|
712
|
+
process.exit(
|
|
713
|
+
await runBench({
|
|
714
|
+
...options.mode === void 0 ? {} : { mode: options.mode },
|
|
715
|
+
...options.task === void 0 || options.task.length === 0 ? {} : { task: options.task },
|
|
716
|
+
...options.arm === void 0 || options.arm.length === 0 ? {} : { arm: options.arm },
|
|
717
|
+
...options.repeats === void 0 ? {} : { repeats: options.repeats },
|
|
718
|
+
...options.campaignMaxCost === void 0 ? {} : { maxCost: options.campaignMaxCost },
|
|
719
|
+
...options.campaignMaxDuration === void 0 ? {} : { maxDuration: options.campaignMaxDuration },
|
|
720
|
+
...options.out === void 0 ? {} : { out: options.out },
|
|
721
|
+
...options.yes === void 0 ? {} : { yes: options.yes },
|
|
722
|
+
...options.repo === void 0 ? {} : { repo: options.repo },
|
|
723
|
+
...options.json === void 0 ? {} : { json: options.json }
|
|
724
|
+
})
|
|
725
|
+
);
|
|
726
|
+
}
|
|
727
|
+
);
|
|
728
|
+
program.action(async () => {
|
|
729
|
+
const { listLiveRuns } = await import("./registry-GLPXOMFG.js");
|
|
730
|
+
const runs = await listLiveRuns();
|
|
731
|
+
if (runs.length === 0) {
|
|
732
|
+
program.help();
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
const { runPs } = await import("./ps-RFORTCUD.js");
|
|
736
|
+
process.exit(await runPs());
|
|
737
|
+
});
|
|
515
738
|
program.parse();
|
|
516
739
|
//# sourceMappingURL=cli.js.map
|