@cleocode/cleo 2026.4.152 → 2026.4.153
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/dist/cli/index.js +387 -195
- package/dist/cli/index.js.map +3 -3
- package/package.json +9 -9
package/dist/cli/index.js
CHANGED
|
@@ -385,7 +385,18 @@ var init_branch_lock = __esm({
|
|
|
385
385
|
/** L4c: override requires TTY but stdin/stderr is not a TTY. */
|
|
386
386
|
E_OVERRIDE_NEEDS_TTY: "E_OVERRIDE_NEEDS_TTY",
|
|
387
387
|
/** L4d: session override limit exceeded. */
|
|
388
|
-
E_OVERRIDE_RATE_LIMIT: "E_OVERRIDE_RATE_LIMIT"
|
|
388
|
+
E_OVERRIDE_RATE_LIMIT: "E_OVERRIDE_RATE_LIMIT",
|
|
389
|
+
/**
|
|
390
|
+
* T1501 / P0-5: per-session cap (default 3) exceeded without a valid waiver doc.
|
|
391
|
+
* Set CLEO_OWNER_OVERRIDE_WAIVER=<absolute path> to a file containing
|
|
392
|
+
* `cap-waiver: true` in its frontmatter to bypass the cap.
|
|
393
|
+
*/
|
|
394
|
+
E_OVERRIDE_CAP_EXCEEDED: "E_OVERRIDE_CAP_EXCEEDED",
|
|
395
|
+
/**
|
|
396
|
+
* T1502 / P0-6: the same evidence atom was used across >3 distinct tasks and
|
|
397
|
+
* `--shared-evidence` was not passed (or CLEO_STRICT_EVIDENCE=1 is set in CI).
|
|
398
|
+
*/
|
|
399
|
+
E_SHARED_EVIDENCE_FLAG_REQUIRED: "E_SHARED_EVIDENCE_FLAG_REQUIRED"
|
|
389
400
|
};
|
|
390
401
|
}
|
|
391
402
|
});
|
|
@@ -5290,6 +5301,32 @@ var init_registry = __esm({
|
|
|
5290
5301
|
}
|
|
5291
5302
|
]
|
|
5292
5303
|
},
|
|
5304
|
+
// T1147 W7 — sweep mutate variant (approve, rollback) — routes to same handler as query
|
|
5305
|
+
// Registered separately so mutate:memory.sweep resolves correctly (T1496/P0-1)
|
|
5306
|
+
{
|
|
5307
|
+
gateway: "mutate",
|
|
5308
|
+
domain: "memory",
|
|
5309
|
+
operation: "sweep",
|
|
5310
|
+
description: "memory.sweep (mutate) \u2014 T1147 W7 BRAIN noise sweep approve/rollback. approve <runId>: apply sweep to live brain tables. rollback <runId>: discard a staged run without applying changes.",
|
|
5311
|
+
tier: 0,
|
|
5312
|
+
idempotent: false,
|
|
5313
|
+
sessionRequired: false,
|
|
5314
|
+
requiredParams: [],
|
|
5315
|
+
params: [
|
|
5316
|
+
{
|
|
5317
|
+
name: "approve",
|
|
5318
|
+
type: "string",
|
|
5319
|
+
required: false,
|
|
5320
|
+
description: "Run ID to approve and apply to live tables."
|
|
5321
|
+
},
|
|
5322
|
+
{
|
|
5323
|
+
name: "rollback",
|
|
5324
|
+
type: "string",
|
|
5325
|
+
required: false,
|
|
5326
|
+
description: "Run ID to roll back without applying changes."
|
|
5327
|
+
}
|
|
5328
|
+
]
|
|
5329
|
+
},
|
|
5293
5330
|
// T791 — LLM extraction backend status
|
|
5294
5331
|
{
|
|
5295
5332
|
gateway: "query",
|
|
@@ -8563,6 +8600,25 @@ var init_registry = __esm({
|
|
|
8563
8600
|
description: "Remove worktrees idle for longer than this many hours (default: 24)"
|
|
8564
8601
|
}
|
|
8565
8602
|
]
|
|
8603
|
+
},
|
|
8604
|
+
// T1462 — Single-task worktree prune (auto-triggered by cleo complete)
|
|
8605
|
+
{
|
|
8606
|
+
gateway: "mutate",
|
|
8607
|
+
domain: "orchestrate",
|
|
8608
|
+
operation: "worktree.prune",
|
|
8609
|
+
description: "orchestrate.worktree.prune (mutate) \u2014 prune the worktree for a single completed task, or all orphaned worktrees when no taskId is supplied",
|
|
8610
|
+
tier: 2,
|
|
8611
|
+
idempotent: true,
|
|
8612
|
+
sessionRequired: false,
|
|
8613
|
+
requiredParams: [],
|
|
8614
|
+
params: [
|
|
8615
|
+
{
|
|
8616
|
+
name: "taskId",
|
|
8617
|
+
type: "string",
|
|
8618
|
+
required: false,
|
|
8619
|
+
description: "Task ID whose worktree should be pruned (omit for bulk prune)"
|
|
8620
|
+
}
|
|
8621
|
+
]
|
|
8566
8622
|
}
|
|
8567
8623
|
];
|
|
8568
8624
|
counts = getCounts();
|
|
@@ -9584,6 +9640,7 @@ import {
|
|
|
9584
9640
|
paginate,
|
|
9585
9641
|
parseScope,
|
|
9586
9642
|
persistHandoff,
|
|
9643
|
+
readSessionOverrideCount,
|
|
9587
9644
|
recordAssumption,
|
|
9588
9645
|
recordDecision,
|
|
9589
9646
|
showSession,
|
|
@@ -9598,12 +9655,14 @@ async function sessionStatus(projectRoot) {
|
|
|
9598
9655
|
const focusState = await accessor.getMetaValue("focus_state");
|
|
9599
9656
|
const sessions2 = await accessor.loadSessions();
|
|
9600
9657
|
const active = sessions2.find((s) => s.status === "active");
|
|
9658
|
+
const overrideCount = active ? readSessionOverrideCount(projectRoot, active.id) : 0;
|
|
9601
9659
|
return {
|
|
9602
9660
|
success: true,
|
|
9603
9661
|
data: {
|
|
9604
9662
|
hasActiveSession: !!active,
|
|
9605
9663
|
session: active || null,
|
|
9606
|
-
taskWork: focusState || null
|
|
9664
|
+
taskWork: focusState || null,
|
|
9665
|
+
overrideCount
|
|
9607
9666
|
}
|
|
9608
9667
|
};
|
|
9609
9668
|
} catch {
|
|
@@ -14605,8 +14664,10 @@ import {
|
|
|
14605
14664
|
import {
|
|
14606
14665
|
appendForceBypassLine,
|
|
14607
14666
|
appendGateAuditLine,
|
|
14667
|
+
checkAndIncrementOverrideCap,
|
|
14608
14668
|
checkGateEvidenceMinimum,
|
|
14609
14669
|
composeGateEvidence,
|
|
14670
|
+
enforceSharedEvidence,
|
|
14610
14671
|
getAccessor as getAccessor7,
|
|
14611
14672
|
parseEvidence,
|
|
14612
14673
|
validateAtom
|
|
@@ -15111,6 +15172,44 @@ async function validateGateVerify(params, projectRoot) {
|
|
|
15111
15172
|
}
|
|
15112
15173
|
const isWriteRequiringEvidence = (all || gate && value !== false) && !reset;
|
|
15113
15174
|
const override = readOverrideState();
|
|
15175
|
+
let sessionOverrideOrdinal;
|
|
15176
|
+
let isWorktreeCtx = false;
|
|
15177
|
+
if (override.override && isWriteRequiringEvidence) {
|
|
15178
|
+
const command = (process.argv.slice(1).join(" ") || "cleo").slice(0, 512);
|
|
15179
|
+
const capResult = checkAndIncrementOverrideCap(
|
|
15180
|
+
root,
|
|
15181
|
+
sessionId ?? "global",
|
|
15182
|
+
void 0,
|
|
15183
|
+
command
|
|
15184
|
+
);
|
|
15185
|
+
if (!capResult.allowed) {
|
|
15186
|
+
return engineError(
|
|
15187
|
+
capResult.errorCode ?? "E_OVERRIDE_CAP_EXCEEDED",
|
|
15188
|
+
capResult.errorMessage ?? "Per-session override cap exceeded."
|
|
15189
|
+
);
|
|
15190
|
+
}
|
|
15191
|
+
sessionOverrideOrdinal = capResult.sessionOverrideOrdinal;
|
|
15192
|
+
isWorktreeCtx = capResult.workTreeContext === true;
|
|
15193
|
+
}
|
|
15194
|
+
let sharedEvidenceAcknowledged = false;
|
|
15195
|
+
let sharedAtomWarned = false;
|
|
15196
|
+
if (isWriteRequiringEvidence && !override.override && params.evidence && sessionId) {
|
|
15197
|
+
const seResult = enforceSharedEvidence(
|
|
15198
|
+
root,
|
|
15199
|
+
sessionId,
|
|
15200
|
+
taskId,
|
|
15201
|
+
params.evidence,
|
|
15202
|
+
params.sharedEvidence === true
|
|
15203
|
+
);
|
|
15204
|
+
if (!seResult.allowed) {
|
|
15205
|
+
return engineError(
|
|
15206
|
+
seResult.errorCode ?? "E_SHARED_EVIDENCE_FLAG_REQUIRED",
|
|
15207
|
+
seResult.errorMessage ?? "Shared evidence flag required."
|
|
15208
|
+
);
|
|
15209
|
+
}
|
|
15210
|
+
sharedEvidenceAcknowledged = seResult.acknowledged === true;
|
|
15211
|
+
sharedAtomWarned = seResult.warned === true;
|
|
15212
|
+
}
|
|
15114
15213
|
let verification = task.verification ?? initVerification();
|
|
15115
15214
|
if (!verification.evidence) {
|
|
15116
15215
|
verification.evidence = {};
|
|
@@ -15225,7 +15324,18 @@ Or set CLEO_OWNER_OVERRIDE=1 with CLEO_OWNER_OVERRIDE_REASON=<reason> for emerge
|
|
|
15225
15324
|
...auditRecord,
|
|
15226
15325
|
overrideReason: override.reason,
|
|
15227
15326
|
pid: process.pid,
|
|
15228
|
-
command: (process.argv.slice(1).join(" ") || "cleo").slice(0, 512)
|
|
15327
|
+
command: (process.argv.slice(1).join(" ") || "cleo").slice(0, 512),
|
|
15328
|
+
...sessionOverrideOrdinal !== void 0 ? { sessionOverrideOrdinal } : {},
|
|
15329
|
+
...isWorktreeCtx ? { workTreeContext: true } : {}
|
|
15330
|
+
});
|
|
15331
|
+
} else if ((sharedEvidenceAcknowledged || sharedAtomWarned) && action !== "reset") {
|
|
15332
|
+
await appendForceBypassLine(root, {
|
|
15333
|
+
...auditRecord,
|
|
15334
|
+
overrideReason: "shared-evidence",
|
|
15335
|
+
pid: process.pid,
|
|
15336
|
+
command: (process.argv.slice(1).join(" ") || "cleo").slice(0, 512),
|
|
15337
|
+
...sharedEvidenceAcknowledged ? { sharedEvidence: true } : {},
|
|
15338
|
+
...sharedAtomWarned ? { sharedAtomWarning: true } : {}
|
|
15229
15339
|
});
|
|
15230
15340
|
}
|
|
15231
15341
|
} catch {
|
|
@@ -17729,7 +17839,8 @@ var init_check = __esm({
|
|
|
17729
17839
|
all: params.all,
|
|
17730
17840
|
reset: params.reset,
|
|
17731
17841
|
evidence: params.evidence,
|
|
17732
|
-
sessionId: params.sessionId
|
|
17842
|
+
sessionId: params.sessionId,
|
|
17843
|
+
sharedEvidence: params.sharedEvidence
|
|
17733
17844
|
};
|
|
17734
17845
|
const result = await validateGateVerify(gateParams, projectRoot);
|
|
17735
17846
|
setImmediate(async () => {
|
|
@@ -19273,7 +19384,7 @@ var init_memory2 = __esm({
|
|
|
19273
19384
|
switch (operation) {
|
|
19274
19385
|
case "find": {
|
|
19275
19386
|
const query = paramStringRequired(params, "query");
|
|
19276
|
-
if (!query)
|
|
19387
|
+
if (!query)
|
|
19277
19388
|
return errorResult(
|
|
19278
19389
|
"query",
|
|
19279
19390
|
"memory",
|
|
@@ -19282,24 +19393,27 @@ var init_memory2 = __esm({
|
|
|
19282
19393
|
"query is required",
|
|
19283
19394
|
startTime
|
|
19284
19395
|
);
|
|
19285
|
-
|
|
19286
|
-
|
|
19287
|
-
|
|
19288
|
-
|
|
19289
|
-
|
|
19290
|
-
|
|
19291
|
-
|
|
19292
|
-
|
|
19293
|
-
|
|
19294
|
-
|
|
19295
|
-
|
|
19296
|
-
|
|
19396
|
+
return wrapResult(
|
|
19397
|
+
await memoryFind(
|
|
19398
|
+
{
|
|
19399
|
+
query,
|
|
19400
|
+
limit: paramNumber(params, "limit"),
|
|
19401
|
+
tables: paramStringArray(params, "tables"),
|
|
19402
|
+
dateStart: paramString(params, "dateStart"),
|
|
19403
|
+
dateEnd: paramString(params, "dateEnd"),
|
|
19404
|
+
agent: paramString(params, "agent")
|
|
19405
|
+
},
|
|
19406
|
+
projectRoot
|
|
19407
|
+
),
|
|
19408
|
+
"query",
|
|
19409
|
+
"memory",
|
|
19410
|
+
operation,
|
|
19411
|
+
startTime
|
|
19297
19412
|
);
|
|
19298
|
-
return wrapResult(result, "query", "memory", operation, startTime);
|
|
19299
19413
|
}
|
|
19300
19414
|
case "timeline": {
|
|
19301
19415
|
const anchor = paramStringRequired(params, "anchor");
|
|
19302
|
-
if (!anchor)
|
|
19416
|
+
if (!anchor)
|
|
19303
19417
|
return errorResult(
|
|
19304
19418
|
"query",
|
|
19305
19419
|
"memory",
|
|
@@ -19308,20 +19422,24 @@ var init_memory2 = __esm({
|
|
|
19308
19422
|
"anchor is required",
|
|
19309
19423
|
startTime
|
|
19310
19424
|
);
|
|
19311
|
-
|
|
19312
|
-
|
|
19313
|
-
|
|
19314
|
-
|
|
19315
|
-
|
|
19316
|
-
|
|
19317
|
-
|
|
19318
|
-
|
|
19425
|
+
return wrapResult(
|
|
19426
|
+
await memoryTimeline(
|
|
19427
|
+
{
|
|
19428
|
+
anchor,
|
|
19429
|
+
depthBefore: paramNumber(params, "depthBefore"),
|
|
19430
|
+
depthAfter: paramNumber(params, "depthAfter")
|
|
19431
|
+
},
|
|
19432
|
+
projectRoot
|
|
19433
|
+
),
|
|
19434
|
+
"query",
|
|
19435
|
+
"memory",
|
|
19436
|
+
operation,
|
|
19437
|
+
startTime
|
|
19319
19438
|
);
|
|
19320
|
-
return wrapResult(result, "query", "memory", operation, startTime);
|
|
19321
19439
|
}
|
|
19322
19440
|
case "fetch": {
|
|
19323
19441
|
const ids = paramStringArray(params, "ids");
|
|
19324
|
-
if (!ids || ids.length === 0)
|
|
19442
|
+
if (!ids || ids.length === 0)
|
|
19325
19443
|
return errorResult(
|
|
19326
19444
|
"query",
|
|
19327
19445
|
"memory",
|
|
@@ -19330,9 +19448,13 @@ var init_memory2 = __esm({
|
|
|
19330
19448
|
"ids is required (non-empty array)",
|
|
19331
19449
|
startTime
|
|
19332
19450
|
);
|
|
19333
|
-
|
|
19334
|
-
|
|
19335
|
-
|
|
19451
|
+
return wrapResult(
|
|
19452
|
+
await memoryFetch({ ids }, projectRoot),
|
|
19453
|
+
"query",
|
|
19454
|
+
"memory",
|
|
19455
|
+
operation,
|
|
19456
|
+
startTime
|
|
19457
|
+
);
|
|
19336
19458
|
}
|
|
19337
19459
|
case "decision.find": {
|
|
19338
19460
|
const result = await memoryDecisionFind(
|
|
@@ -20786,6 +20908,10 @@ var init_memory2 = __esm({
|
|
|
20786
20908
|
return handleErrorResult("mutate", "memory", operation, rollbackErr, startTime);
|
|
20787
20909
|
}
|
|
20788
20910
|
}
|
|
20911
|
+
// T1147 W7 — sweep mutate operations (approve, rollback) delegate to query handler
|
|
20912
|
+
// which already handles all sweep sub-commands via a unified case block.
|
|
20913
|
+
case "sweep":
|
|
20914
|
+
return this.query(operation, params);
|
|
20789
20915
|
default:
|
|
20790
20916
|
return unsupportedOp("mutate", "memory", operation, startTime);
|
|
20791
20917
|
}
|
|
@@ -20862,6 +20988,8 @@ var init_memory2 = __esm({
|
|
|
20862
20988
|
"precompact-flush",
|
|
20863
20989
|
// T1006 — write a diary-typed observation
|
|
20864
20990
|
"diary.write",
|
|
20991
|
+
// T1147 W7 — sweep mutate operations (approve, rollback)
|
|
20992
|
+
"sweep",
|
|
20865
20993
|
// T1003 — staged backfill operations
|
|
20866
20994
|
"backfill.run",
|
|
20867
20995
|
"backfill.approve",
|
|
@@ -21692,6 +21820,45 @@ import {
|
|
|
21692
21820
|
getNexusNativeDb as getNexusNativeDb2,
|
|
21693
21821
|
getProjectRoot as getProjectRoot7
|
|
21694
21822
|
} from "@cleocode/core/internal";
|
|
21823
|
+
function nexusQueryEnvelopeToResponse(envelope, operation, startTime) {
|
|
21824
|
+
const env = envelope;
|
|
21825
|
+
let pageMetadata = env.page;
|
|
21826
|
+
let resultData = env.data;
|
|
21827
|
+
if (!pageMetadata && env.success && resultData && typeof resultData === "object") {
|
|
21828
|
+
const dataObj = resultData;
|
|
21829
|
+
if ("page" in dataObj && dataObj.page) {
|
|
21830
|
+
pageMetadata = dataObj.page;
|
|
21831
|
+
const { page: _removed, ...cleanData } = dataObj;
|
|
21832
|
+
resultData = cleanData;
|
|
21833
|
+
}
|
|
21834
|
+
}
|
|
21835
|
+
return wrapResult(
|
|
21836
|
+
{
|
|
21837
|
+
success: env.success,
|
|
21838
|
+
data: resultData,
|
|
21839
|
+
page: pageMetadata,
|
|
21840
|
+
error: env.error ? { code: String(env.error.code), message: env.error.message } : void 0
|
|
21841
|
+
},
|
|
21842
|
+
"query",
|
|
21843
|
+
"nexus",
|
|
21844
|
+
operation,
|
|
21845
|
+
startTime
|
|
21846
|
+
);
|
|
21847
|
+
}
|
|
21848
|
+
function nexusMutateEnvelopeToResponse(envelope, operation, startTime) {
|
|
21849
|
+
const env = envelope;
|
|
21850
|
+
return wrapResult(
|
|
21851
|
+
{
|
|
21852
|
+
success: env.success,
|
|
21853
|
+
data: env.data,
|
|
21854
|
+
error: env.error ? { code: String(env.error.code), message: env.error.message } : void 0
|
|
21855
|
+
},
|
|
21856
|
+
"mutate",
|
|
21857
|
+
"nexus",
|
|
21858
|
+
operation,
|
|
21859
|
+
startTime
|
|
21860
|
+
);
|
|
21861
|
+
}
|
|
21695
21862
|
async function handleTopEntries(operation, params, startTime) {
|
|
21696
21863
|
const rawLimit = params?.limit;
|
|
21697
21864
|
const limit = typeof rawLimit === "number" && Number.isFinite(rawLimit) && rawLimit > 0 ? Math.floor(rawLimit) : 20;
|
|
@@ -22430,29 +22597,7 @@ var init_nexus2 = __esm({
|
|
|
22430
22597
|
operation,
|
|
22431
22598
|
params ?? {}
|
|
22432
22599
|
);
|
|
22433
|
-
|
|
22434
|
-
let pageMetadata = env.page;
|
|
22435
|
-
let resultData = env.data;
|
|
22436
|
-
if (!pageMetadata && env.success && resultData && typeof resultData === "object") {
|
|
22437
|
-
const dataObj = resultData;
|
|
22438
|
-
if ("page" in dataObj && dataObj.page) {
|
|
22439
|
-
pageMetadata = dataObj.page;
|
|
22440
|
-
const { page: _removed, ...cleanData } = dataObj;
|
|
22441
|
-
resultData = cleanData;
|
|
22442
|
-
}
|
|
22443
|
-
}
|
|
22444
|
-
return wrapResult(
|
|
22445
|
-
{
|
|
22446
|
-
success: env.success,
|
|
22447
|
-
data: resultData,
|
|
22448
|
-
page: pageMetadata,
|
|
22449
|
-
error: env.error ? { code: String(env.error.code), message: env.error.message } : void 0
|
|
22450
|
-
},
|
|
22451
|
-
"query",
|
|
22452
|
-
"nexus",
|
|
22453
|
-
operation,
|
|
22454
|
-
startTime
|
|
22455
|
-
);
|
|
22600
|
+
return nexusQueryEnvelopeToResponse(envelope, operation, startTime);
|
|
22456
22601
|
} catch (error) {
|
|
22457
22602
|
getLogger9("domain:nexus").error(
|
|
22458
22603
|
{ gateway: "query", domain: "nexus", operation, err: error },
|
|
@@ -22478,18 +22623,7 @@ var init_nexus2 = __esm({
|
|
|
22478
22623
|
operation,
|
|
22479
22624
|
params ?? {}
|
|
22480
22625
|
);
|
|
22481
|
-
|
|
22482
|
-
return wrapResult(
|
|
22483
|
-
{
|
|
22484
|
-
success: env.success,
|
|
22485
|
-
data: env.data,
|
|
22486
|
-
error: env.error ? { code: String(env.error.code), message: env.error.message } : void 0
|
|
22487
|
-
},
|
|
22488
|
-
"mutate",
|
|
22489
|
-
"nexus",
|
|
22490
|
-
operation,
|
|
22491
|
-
startTime
|
|
22492
|
-
);
|
|
22626
|
+
return nexusMutateEnvelopeToResponse(envelope, operation, startTime);
|
|
22493
22627
|
} catch (error) {
|
|
22494
22628
|
getLogger9("domain:nexus").error(
|
|
22495
22629
|
{ gateway: "mutate", domain: "nexus", operation, err: error },
|
|
@@ -28220,6 +28354,31 @@ async function handleWorktreeCleanup(projectRoot, taskIds, startTime) {
|
|
|
28220
28354
|
return handleErrorResult("mutate", "orchestrate", "worktree.cleanup", error, startTime);
|
|
28221
28355
|
}
|
|
28222
28356
|
}
|
|
28357
|
+
async function handleWorktreePrune(projectRoot, taskId, startTime) {
|
|
28358
|
+
try {
|
|
28359
|
+
const { pruneWorktree, pruneOrphanedWorktrees } = await import("@cleocode/core/internal");
|
|
28360
|
+
if (taskId) {
|
|
28361
|
+
const result2 = pruneWorktree(taskId, projectRoot);
|
|
28362
|
+
return {
|
|
28363
|
+
meta: dispatchMeta("mutate", "orchestrate", "worktree.prune", startTime),
|
|
28364
|
+
success: true,
|
|
28365
|
+
data: result2
|
|
28366
|
+
};
|
|
28367
|
+
}
|
|
28368
|
+
const result = pruneOrphanedWorktrees(projectRoot, void 0);
|
|
28369
|
+
return {
|
|
28370
|
+
meta: dispatchMeta("mutate", "orchestrate", "worktree.prune", startTime),
|
|
28371
|
+
success: true,
|
|
28372
|
+
data: { ...result, mode: "bulk" }
|
|
28373
|
+
};
|
|
28374
|
+
} catch (error) {
|
|
28375
|
+
getLogger11("domain:orchestrate").error(
|
|
28376
|
+
{ operation: "worktree.prune", taskId, err: error },
|
|
28377
|
+
error instanceof Error ? error.message : String(error)
|
|
28378
|
+
);
|
|
28379
|
+
return handleErrorResult("mutate", "orchestrate", "worktree.prune", error, startTime);
|
|
28380
|
+
}
|
|
28381
|
+
}
|
|
28223
28382
|
var ivtrHandler, OrchestrateHandler, FANOUT_MANIFEST_MAX_SIZE, fanoutManifestStore;
|
|
28224
28383
|
var init_orchestrate2 = __esm({
|
|
28225
28384
|
"packages/cleo/src/dispatch/domains/orchestrate.ts"() {
|
|
@@ -28287,9 +28446,10 @@ var init_orchestrate2 = __esm({
|
|
|
28287
28446
|
const result = await orchestrateAnalyze(epicId, projectRoot, mode);
|
|
28288
28447
|
return wrapResult(result, "query", "orchestrate", "analyze", startTime);
|
|
28289
28448
|
}
|
|
28449
|
+
// T408: prompt-based CANT team routing (ADR-030 §5: query, idempotent, advisory)
|
|
28290
28450
|
case "classify": {
|
|
28291
28451
|
const request = params?.request;
|
|
28292
|
-
if (!request)
|
|
28452
|
+
if (!request)
|
|
28293
28453
|
return errorResult(
|
|
28294
28454
|
"query",
|
|
28295
28455
|
"orchestrate",
|
|
@@ -28298,10 +28458,13 @@ var init_orchestrate2 = __esm({
|
|
|
28298
28458
|
"request is required",
|
|
28299
28459
|
startTime
|
|
28300
28460
|
);
|
|
28301
|
-
|
|
28302
|
-
|
|
28303
|
-
|
|
28304
|
-
|
|
28461
|
+
return wrapResult(
|
|
28462
|
+
await orchestrateClassify(request, params?.context, projectRoot),
|
|
28463
|
+
"query",
|
|
28464
|
+
"orchestrate",
|
|
28465
|
+
operation,
|
|
28466
|
+
startTime
|
|
28467
|
+
);
|
|
28305
28468
|
}
|
|
28306
28469
|
case "fanout.status": {
|
|
28307
28470
|
const manifestEntryId = params?.manifestEntryId;
|
|
@@ -28594,6 +28757,11 @@ var init_orchestrate2 = __esm({
|
|
|
28594
28757
|
const taskIds = params?.taskIds;
|
|
28595
28758
|
return handleWorktreeCleanup(projectRoot, taskIds, startTime);
|
|
28596
28759
|
}
|
|
28760
|
+
// T1462 — Single-task worktree prune (used by `cleo orchestrate prune`)
|
|
28761
|
+
case "worktree.prune": {
|
|
28762
|
+
const taskId = params?.taskId;
|
|
28763
|
+
return handleWorktreePrune(projectRoot, taskId, startTime);
|
|
28764
|
+
}
|
|
28597
28765
|
case "parallel": {
|
|
28598
28766
|
return routeByParam(params, "action", {
|
|
28599
28767
|
start: async () => {
|
|
@@ -28650,9 +28818,10 @@ var init_orchestrate2 = __esm({
|
|
|
28650
28818
|
}
|
|
28651
28819
|
});
|
|
28652
28820
|
}
|
|
28821
|
+
// T409: Promise.allSettled fanout wrapper (ADR-030 §5: not idempotent, concurrent)
|
|
28653
28822
|
case "fanout": {
|
|
28654
28823
|
const items = params?.items;
|
|
28655
|
-
if (!items || !Array.isArray(items) || items.length === 0)
|
|
28824
|
+
if (!items || !Array.isArray(items) || items.length === 0)
|
|
28656
28825
|
return errorResult(
|
|
28657
28826
|
"mutate",
|
|
28658
28827
|
"orchestrate",
|
|
@@ -28661,9 +28830,13 @@ var init_orchestrate2 = __esm({
|
|
|
28661
28830
|
"items array is required and must be non-empty",
|
|
28662
28831
|
startTime
|
|
28663
28832
|
);
|
|
28664
|
-
|
|
28665
|
-
|
|
28666
|
-
|
|
28833
|
+
return wrapResult(
|
|
28834
|
+
await orchestrateFanout(items, projectRoot),
|
|
28835
|
+
"mutate",
|
|
28836
|
+
"orchestrate",
|
|
28837
|
+
operation,
|
|
28838
|
+
startTime
|
|
28839
|
+
);
|
|
28667
28840
|
}
|
|
28668
28841
|
case "tessera.instantiate": {
|
|
28669
28842
|
const templateId = params?.templateId;
|
|
@@ -28785,7 +28958,9 @@ var init_orchestrate2 = __esm({
|
|
|
28785
28958
|
"reject",
|
|
28786
28959
|
// T1118 L1 — Worktree lifecycle
|
|
28787
28960
|
"worktree.complete",
|
|
28788
|
-
"worktree.cleanup"
|
|
28961
|
+
"worktree.cleanup",
|
|
28962
|
+
// T1462 — Single-task worktree prune
|
|
28963
|
+
"worktree.prune"
|
|
28789
28964
|
]
|
|
28790
28965
|
};
|
|
28791
28966
|
}
|
|
@@ -29003,6 +29178,44 @@ async function chainAdvanceOp(params) {
|
|
|
29003
29178
|
getProjectRoot10()
|
|
29004
29179
|
);
|
|
29005
29180
|
}
|
|
29181
|
+
function pipelinePhaseListResponse(envelope, params, operation, startTime) {
|
|
29182
|
+
const listData = envelope.data ?? {};
|
|
29183
|
+
const phases = listData?.phases ?? [];
|
|
29184
|
+
const total = listData?.summary?.total ?? phases.length;
|
|
29185
|
+
const { limit, offset } = getListParams(params);
|
|
29186
|
+
const page = paginate5(phases, limit, offset);
|
|
29187
|
+
return {
|
|
29188
|
+
meta: dispatchMeta("query", "pipeline", operation, startTime),
|
|
29189
|
+
success: true,
|
|
29190
|
+
data: { ...listData, phases: page.items, total, filtered: total },
|
|
29191
|
+
page: page.page
|
|
29192
|
+
};
|
|
29193
|
+
}
|
|
29194
|
+
function pipelineChainListResponse(envelope, params, operation, startTime) {
|
|
29195
|
+
const rawData = envelope.data ?? { _chains: [] };
|
|
29196
|
+
const chains = rawData._chains ?? [];
|
|
29197
|
+
const { limit, offset } = getListParams(params);
|
|
29198
|
+
const page = paginate5(chains, limit, offset);
|
|
29199
|
+
return {
|
|
29200
|
+
meta: dispatchMeta("query", "pipeline", operation, startTime),
|
|
29201
|
+
success: true,
|
|
29202
|
+
data: { chains: page.items, total: chains.length, filtered: chains.length },
|
|
29203
|
+
page: page.page
|
|
29204
|
+
};
|
|
29205
|
+
}
|
|
29206
|
+
function pipelineEnvelopeResponse(envelope, operation, startTime) {
|
|
29207
|
+
const envelopeData = envelope.data;
|
|
29208
|
+
const enginePage = envelopeData?._enginePage;
|
|
29209
|
+
const responseData = envelopeData?._enginePage !== void 0 ? (({ _enginePage: _p, ...rest }) => rest)(
|
|
29210
|
+
envelopeData
|
|
29211
|
+
) : envelopeData;
|
|
29212
|
+
return {
|
|
29213
|
+
meta: dispatchMeta("query", "pipeline", operation, startTime),
|
|
29214
|
+
success: true,
|
|
29215
|
+
data: responseData,
|
|
29216
|
+
...enginePage ? { page: enginePage } : {}
|
|
29217
|
+
};
|
|
29218
|
+
}
|
|
29006
29219
|
var coreOps, _pipelineTypedHandler, PipelineHandler;
|
|
29007
29220
|
var init_pipeline3 = __esm({
|
|
29008
29221
|
"packages/cleo/src/dispatch/domains/pipeline.ts"() {
|
|
@@ -29369,52 +29582,11 @@ var init_pipeline3 = __esm({
|
|
|
29369
29582
|
}
|
|
29370
29583
|
};
|
|
29371
29584
|
}
|
|
29372
|
-
if (operation === "phase.list")
|
|
29373
|
-
|
|
29374
|
-
|
|
29375
|
-
|
|
29376
|
-
|
|
29377
|
-
const { limit, offset } = getListParams(params);
|
|
29378
|
-
const page = paginate5(phases, limit, offset);
|
|
29379
|
-
return {
|
|
29380
|
-
meta: dispatchMeta("query", "pipeline", operation, startTime),
|
|
29381
|
-
success: true,
|
|
29382
|
-
data: {
|
|
29383
|
-
...listData,
|
|
29384
|
-
phases: page.items,
|
|
29385
|
-
total,
|
|
29386
|
-
filtered: total
|
|
29387
|
-
},
|
|
29388
|
-
page: page.page
|
|
29389
|
-
};
|
|
29390
|
-
}
|
|
29391
|
-
if (operation === "chain.list") {
|
|
29392
|
-
const rawData = envelope.data;
|
|
29393
|
-
const chains = rawData._chains ?? [];
|
|
29394
|
-
const { limit, offset } = getListParams(params);
|
|
29395
|
-
const page = paginate5(chains, limit, offset);
|
|
29396
|
-
return {
|
|
29397
|
-
meta: dispatchMeta("query", "pipeline", operation, startTime),
|
|
29398
|
-
success: true,
|
|
29399
|
-
data: {
|
|
29400
|
-
chains: page.items,
|
|
29401
|
-
total: chains.length,
|
|
29402
|
-
filtered: chains.length
|
|
29403
|
-
},
|
|
29404
|
-
page: page.page
|
|
29405
|
-
};
|
|
29406
|
-
}
|
|
29407
|
-
const envelopeData = envelope.data;
|
|
29408
|
-
const enginePage = envelopeData?._enginePage;
|
|
29409
|
-
const responseData = envelopeData?._enginePage !== void 0 ? (({ _enginePage: _p, ...rest }) => rest)(
|
|
29410
|
-
envelopeData
|
|
29411
|
-
) : envelopeData;
|
|
29412
|
-
return {
|
|
29413
|
-
meta: dispatchMeta("query", "pipeline", operation, startTime),
|
|
29414
|
-
success: true,
|
|
29415
|
-
data: responseData,
|
|
29416
|
-
...enginePage ? { page: enginePage } : {}
|
|
29417
|
-
};
|
|
29585
|
+
if (operation === "phase.list")
|
|
29586
|
+
return pipelinePhaseListResponse(envelope, params, operation, startTime);
|
|
29587
|
+
if (operation === "chain.list")
|
|
29588
|
+
return pipelineChainListResponse(envelope, params, operation, startTime);
|
|
29589
|
+
return pipelineEnvelopeResponse(envelope, operation, startTime);
|
|
29418
29590
|
} catch (error) {
|
|
29419
29591
|
getLogger12("domain:pipeline").error(
|
|
29420
29592
|
{ gateway: "query", domain: "pipeline", operation, err: error },
|
|
@@ -29549,12 +29721,10 @@ var init_release2 = __esm({
|
|
|
29549
29721
|
const startTime = Date.now();
|
|
29550
29722
|
try {
|
|
29551
29723
|
switch (operation) {
|
|
29552
|
-
// ------------------------------------------------------------------
|
|
29553
29724
|
// release.gate — IVTR gate check (RELEASE-03)
|
|
29554
|
-
// ------------------------------------------------------------------
|
|
29555
29725
|
case "gate": {
|
|
29556
29726
|
const epicId = params?.["epicId"];
|
|
29557
|
-
if (!epicId)
|
|
29727
|
+
if (!epicId)
|
|
29558
29728
|
return errorResult(
|
|
29559
29729
|
"query",
|
|
29560
29730
|
"release",
|
|
@@ -29563,18 +29733,18 @@ var init_release2 = __esm({
|
|
|
29563
29733
|
"epicId is required",
|
|
29564
29734
|
startTime
|
|
29565
29735
|
);
|
|
29566
|
-
|
|
29567
|
-
|
|
29568
|
-
|
|
29569
|
-
|
|
29570
|
-
|
|
29736
|
+
return wrapResult(
|
|
29737
|
+
await releaseGateCheck(epicId, params?.["force"] === true, getProjectRoot11()),
|
|
29738
|
+
"query",
|
|
29739
|
+
"release",
|
|
29740
|
+
operation,
|
|
29741
|
+
startTime
|
|
29742
|
+
);
|
|
29571
29743
|
}
|
|
29572
|
-
// ------------------------------------------------------------------
|
|
29573
29744
|
// release.ivtr-suggest — IVTR auto-suggest (RELEASE-07)
|
|
29574
|
-
// ------------------------------------------------------------------
|
|
29575
29745
|
case "ivtr-suggest": {
|
|
29576
29746
|
const taskId = params?.["taskId"];
|
|
29577
|
-
if (!taskId)
|
|
29747
|
+
if (!taskId)
|
|
29578
29748
|
return errorResult(
|
|
29579
29749
|
"query",
|
|
29580
29750
|
"release",
|
|
@@ -29583,10 +29753,13 @@ var init_release2 = __esm({
|
|
|
29583
29753
|
"taskId is required",
|
|
29584
29754
|
startTime
|
|
29585
29755
|
);
|
|
29586
|
-
|
|
29587
|
-
|
|
29588
|
-
|
|
29589
|
-
|
|
29756
|
+
return wrapResult(
|
|
29757
|
+
await releaseIvtrAutoSuggest(taskId, getProjectRoot11()),
|
|
29758
|
+
"query",
|
|
29759
|
+
"release",
|
|
29760
|
+
operation,
|
|
29761
|
+
startTime
|
|
29762
|
+
);
|
|
29590
29763
|
}
|
|
29591
29764
|
default:
|
|
29592
29765
|
return errorResult(
|
|
@@ -29622,13 +29795,10 @@ var init_release2 = __esm({
|
|
|
29622
29795
|
const startTime = Date.now();
|
|
29623
29796
|
try {
|
|
29624
29797
|
switch (operation) {
|
|
29625
|
-
//
|
|
29626
|
-
// release.gate — IVTR gate check (RELEASE-03)
|
|
29627
|
-
// Pre-ship guard: blocks release.ship when tasks are not IVTR released.
|
|
29628
|
-
// ------------------------------------------------------------------
|
|
29798
|
+
// release.gate — IVTR gate check (RELEASE-03, no DB writes)
|
|
29629
29799
|
case "gate": {
|
|
29630
29800
|
const epicId = params?.["epicId"];
|
|
29631
|
-
if (!epicId)
|
|
29801
|
+
if (!epicId)
|
|
29632
29802
|
return errorResult(
|
|
29633
29803
|
"mutate",
|
|
29634
29804
|
"release",
|
|
@@ -29637,19 +29807,18 @@ var init_release2 = __esm({
|
|
|
29637
29807
|
"epicId is required",
|
|
29638
29808
|
startTime
|
|
29639
29809
|
);
|
|
29640
|
-
|
|
29641
|
-
|
|
29642
|
-
|
|
29643
|
-
|
|
29644
|
-
|
|
29810
|
+
return wrapResult(
|
|
29811
|
+
await releaseGateCheck(epicId, params?.["force"] === true, getProjectRoot11()),
|
|
29812
|
+
"mutate",
|
|
29813
|
+
"release",
|
|
29814
|
+
operation,
|
|
29815
|
+
startTime
|
|
29816
|
+
);
|
|
29645
29817
|
}
|
|
29646
|
-
//
|
|
29647
|
-
// release.ivtr-suggest — IVTR auto-suggest (RELEASE-07)
|
|
29648
|
-
// Triggered after ivtr.release succeeds; checks if all siblings are done.
|
|
29649
|
-
// ------------------------------------------------------------------
|
|
29818
|
+
// release.ivtr-suggest — IVTR auto-suggest (RELEASE-07, no DB writes)
|
|
29650
29819
|
case "ivtr-suggest": {
|
|
29651
29820
|
const taskId = params?.["taskId"];
|
|
29652
|
-
if (!taskId)
|
|
29821
|
+
if (!taskId)
|
|
29653
29822
|
return errorResult(
|
|
29654
29823
|
"mutate",
|
|
29655
29824
|
"release",
|
|
@@ -29658,10 +29827,13 @@ var init_release2 = __esm({
|
|
|
29658
29827
|
"taskId is required",
|
|
29659
29828
|
startTime
|
|
29660
29829
|
);
|
|
29661
|
-
|
|
29662
|
-
|
|
29663
|
-
|
|
29664
|
-
|
|
29830
|
+
return wrapResult(
|
|
29831
|
+
await releaseIvtrAutoSuggest(taskId, getProjectRoot11()),
|
|
29832
|
+
"mutate",
|
|
29833
|
+
"release",
|
|
29834
|
+
operation,
|
|
29835
|
+
startTime
|
|
29836
|
+
);
|
|
29665
29837
|
}
|
|
29666
29838
|
default:
|
|
29667
29839
|
return errorResult(
|
|
@@ -30070,10 +30242,12 @@ var init_session3 = __esm({
|
|
|
30070
30242
|
// Query ops
|
|
30071
30243
|
// -------------------------------------------------------------------------
|
|
30072
30244
|
// Engine guarantees data on success; fallback mirrors empty-state shape.
|
|
30245
|
+
// overrideCount included per T1501 / P0-5.
|
|
30073
30246
|
status: async (_params) => wrapCoreResult(await coreOps3.status(), "status", {
|
|
30074
30247
|
hasActiveSession: false,
|
|
30075
30248
|
session: null,
|
|
30076
|
-
taskWork: null
|
|
30249
|
+
taskWork: null,
|
|
30250
|
+
overrideCount: 0
|
|
30077
30251
|
}),
|
|
30078
30252
|
list: async (params) => wrapCoreResult(await coreOps3.list(params), "list"),
|
|
30079
30253
|
// session.show absorbs debrief.show via include param (T5615)
|
|
@@ -30362,6 +30536,7 @@ var init_session3 = __esm({
|
|
|
30362
30536
|
});
|
|
30363
30537
|
|
|
30364
30538
|
// packages/cleo/src/dispatch/engines/sticky-engine.ts
|
|
30539
|
+
import { paginate as paginate6 } from "@cleocode/core";
|
|
30365
30540
|
import {
|
|
30366
30541
|
addSticky,
|
|
30367
30542
|
archiveSticky,
|
|
@@ -30381,10 +30556,17 @@ async function stickyAdd(projectRoot, params) {
|
|
|
30381
30556
|
return engineError("E_INTERNAL", String(error));
|
|
30382
30557
|
}
|
|
30383
30558
|
}
|
|
30384
|
-
async function
|
|
30559
|
+
async function stickyListFiltered(projectRoot, filters, limit, offset) {
|
|
30385
30560
|
try {
|
|
30386
|
-
const
|
|
30387
|
-
|
|
30561
|
+
const filteredStickies = await listStickies(filters, projectRoot);
|
|
30562
|
+
const hasFilter = filters.status !== void 0 || filters.color !== void 0 || filters.priority !== void 0 || filters.tags !== void 0 && filters.tags.length > 0;
|
|
30563
|
+
const total = hasFilter ? (await listStickies({}, projectRoot)).length : filteredStickies.length;
|
|
30564
|
+
const page = paginate6(filteredStickies, limit, offset);
|
|
30565
|
+
return {
|
|
30566
|
+
success: true,
|
|
30567
|
+
data: { stickies: page.items, total, filtered: filteredStickies.length },
|
|
30568
|
+
page: page.page
|
|
30569
|
+
};
|
|
30388
30570
|
} catch (error) {
|
|
30389
30571
|
return engineError("E_INTERNAL", String(error));
|
|
30390
30572
|
}
|
|
@@ -30474,14 +30656,13 @@ var init_sticky_engine = __esm({
|
|
|
30474
30656
|
});
|
|
30475
30657
|
|
|
30476
30658
|
// packages/cleo/src/dispatch/domains/sticky.ts
|
|
30477
|
-
import { getLogger as getLogger15, getProjectRoot as getProjectRoot14
|
|
30659
|
+
import { getLogger as getLogger15, getProjectRoot as getProjectRoot14 } from "@cleocode/core";
|
|
30478
30660
|
var StickyHandler;
|
|
30479
30661
|
var init_sticky = __esm({
|
|
30480
30662
|
"packages/cleo/src/dispatch/domains/sticky.ts"() {
|
|
30481
30663
|
"use strict";
|
|
30482
30664
|
init_sticky_engine();
|
|
30483
30665
|
init_base();
|
|
30484
|
-
init_meta2();
|
|
30485
30666
|
StickyHandler = class {
|
|
30486
30667
|
// -----------------------------------------------------------------------
|
|
30487
30668
|
// Query
|
|
@@ -30492,36 +30673,18 @@ var init_sticky = __esm({
|
|
|
30492
30673
|
try {
|
|
30493
30674
|
switch (operation) {
|
|
30494
30675
|
case "list": {
|
|
30495
|
-
const
|
|
30496
|
-
|
|
30497
|
-
|
|
30498
|
-
|
|
30499
|
-
|
|
30500
|
-
|
|
30501
|
-
|
|
30502
|
-
const result = await stickyList(projectRoot, filters);
|
|
30503
|
-
if (!result.success) {
|
|
30504
|
-
return wrapResult(result, "query", "sticky", operation, startTime);
|
|
30505
|
-
}
|
|
30506
|
-
const filteredStickies = result.data?.stickies ?? [];
|
|
30507
|
-
const hasFilter = filters.status !== void 0 || filters.color !== void 0 || filters.priority !== void 0 || tags !== void 0 && tags.length > 0;
|
|
30508
|
-
const totalResult = hasFilter ? await stickyList(projectRoot, {}) : result;
|
|
30509
|
-
if (!totalResult.success) {
|
|
30510
|
-
return wrapResult(totalResult, "query", "sticky", operation, startTime);
|
|
30511
|
-
}
|
|
30512
|
-
const limit = params?.limit;
|
|
30513
|
-
const offset = params?.offset;
|
|
30514
|
-
const page = paginate6(filteredStickies, limit, offset);
|
|
30515
|
-
return {
|
|
30516
|
-
meta: dispatchMeta("query", "sticky", operation, startTime),
|
|
30517
|
-
success: true,
|
|
30518
|
-
data: {
|
|
30519
|
-
stickies: page.items,
|
|
30520
|
-
total: totalResult.data?.total ?? filteredStickies.length,
|
|
30521
|
-
filtered: filteredStickies.length
|
|
30676
|
+
const result = await stickyListFiltered(
|
|
30677
|
+
projectRoot,
|
|
30678
|
+
{
|
|
30679
|
+
status: params?.status,
|
|
30680
|
+
color: params?.color,
|
|
30681
|
+
priority: params?.priority,
|
|
30682
|
+
tags: params?.tags
|
|
30522
30683
|
},
|
|
30523
|
-
|
|
30524
|
-
|
|
30684
|
+
params?.limit,
|
|
30685
|
+
params?.offset
|
|
30686
|
+
);
|
|
30687
|
+
return wrapResult(result, "query", "sticky", operation, startTime);
|
|
30525
30688
|
}
|
|
30526
30689
|
case "show": {
|
|
30527
30690
|
const stickyId = params?.stickyId;
|
|
@@ -52305,6 +52468,29 @@ var fanoutCommand = defineCommand({
|
|
|
52305
52468
|
);
|
|
52306
52469
|
}
|
|
52307
52470
|
});
|
|
52471
|
+
var pruneCommand = defineCommand({
|
|
52472
|
+
meta: {
|
|
52473
|
+
name: "prune",
|
|
52474
|
+
description: "Remove stale agent worktrees (after task completion or crash)"
|
|
52475
|
+
},
|
|
52476
|
+
args: {
|
|
52477
|
+
taskId: {
|
|
52478
|
+
type: "positional",
|
|
52479
|
+
description: "Task ID whose worktree should be pruned (omit for bulk prune)",
|
|
52480
|
+
required: false
|
|
52481
|
+
}
|
|
52482
|
+
},
|
|
52483
|
+
async run({ args }) {
|
|
52484
|
+
const taskId = typeof args.taskId === "string" && args.taskId.length > 0 ? args.taskId : void 0;
|
|
52485
|
+
await dispatchFromCli(
|
|
52486
|
+
"mutate",
|
|
52487
|
+
"orchestrate",
|
|
52488
|
+
"worktree.prune",
|
|
52489
|
+
{ taskId },
|
|
52490
|
+
{ command: "orchestrate" }
|
|
52491
|
+
);
|
|
52492
|
+
}
|
|
52493
|
+
});
|
|
52308
52494
|
var conduitStatusCommand = defineCommand({
|
|
52309
52495
|
meta: { name: "conduit-status", description: "Get conduit messaging status" },
|
|
52310
52496
|
async run() {
|
|
@@ -52486,6 +52672,7 @@ var orchestrateCommand = defineCommand({
|
|
|
52486
52672
|
handoff: handoffCommand,
|
|
52487
52673
|
"spawn-execute": spawnExecuteCommand,
|
|
52488
52674
|
fanout: fanoutCommand,
|
|
52675
|
+
prune: pruneCommand,
|
|
52489
52676
|
"conduit-status": conduitStatusCommand,
|
|
52490
52677
|
"conduit-peek": conduitPeekCommand,
|
|
52491
52678
|
"conduit-start": conduitStartCommand,
|
|
@@ -58622,7 +58809,7 @@ var migrateCommand2 = defineCommand({
|
|
|
58622
58809
|
}
|
|
58623
58810
|
}
|
|
58624
58811
|
});
|
|
58625
|
-
var
|
|
58812
|
+
var pruneCommand2 = defineCommand({
|
|
58626
58813
|
meta: {
|
|
58627
58814
|
name: "prune",
|
|
58628
58815
|
description: "Prune session transcripts older than the specified duration. Dry-run by default."
|
|
@@ -58749,7 +58936,7 @@ var transcriptCommand = defineCommand({
|
|
|
58749
58936
|
scan: scanCommand,
|
|
58750
58937
|
extract: extractCommand,
|
|
58751
58938
|
migrate: migrateCommand2,
|
|
58752
|
-
prune:
|
|
58939
|
+
prune: pruneCommand2
|
|
58753
58940
|
},
|
|
58754
58941
|
async run({ cmd, rawArgs }) {
|
|
58755
58942
|
const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
|
|
@@ -59095,6 +59282,10 @@ var verifyCommand2 = defineCommand({
|
|
|
59095
59282
|
explain: {
|
|
59096
59283
|
type: "boolean",
|
|
59097
59284
|
description: "Enrich read-only view with per-gate evidence breakdown, re-validation status, and blockers[] preventing `cleo complete` (T1013 / ADR-051)."
|
|
59285
|
+
},
|
|
59286
|
+
"shared-evidence": {
|
|
59287
|
+
type: "boolean",
|
|
59288
|
+
description: "Acknowledge that the same evidence atom is applied to >3 distinct tasks in this session (T1502 / ADR-059). Without this flag, such reuse triggers a warning; in strict mode (CLEO_STRICT_EVIDENCE=1) it is a hard reject."
|
|
59098
59289
|
}
|
|
59099
59290
|
},
|
|
59100
59291
|
async run({ args, cmd }) {
|
|
@@ -59116,7 +59307,8 @@ var verifyCommand2 = defineCommand({
|
|
|
59116
59307
|
agent: args.agent,
|
|
59117
59308
|
all: args.all,
|
|
59118
59309
|
reset: args.reset,
|
|
59119
|
-
evidence: args.evidence
|
|
59310
|
+
evidence: args.evidence,
|
|
59311
|
+
sharedEvidence: args["shared-evidence"] ?? false
|
|
59120
59312
|
},
|
|
59121
59313
|
{ command: "verify" }
|
|
59122
59314
|
);
|