@cleocode/cleo 2026.5.28 → 2026.5.29
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 +183 -14
- package/dist/cli/index.js.map +4 -4
- package/package.json +9 -9
package/dist/cli/index.js
CHANGED
|
@@ -468,6 +468,7 @@ var init_exit_codes = __esm({
|
|
|
468
468
|
ExitCode2[ExitCode2["TESTS_SKIPPED"] = 103] = "TESTS_SKIPPED";
|
|
469
469
|
ExitCode2[ExitCode2["DUPLICATE_TASK_LIKELY"] = 105] = "DUPLICATE_TASK_LIKELY";
|
|
470
470
|
ExitCode2[ExitCode2["LAFS_VIOLATION"] = 104] = "LAFS_VIOLATION";
|
|
471
|
+
ExitCode2[ExitCode2["DECISION_VALIDATOR_FAILED"] = 106] = "DECISION_VALIDATOR_FAILED";
|
|
471
472
|
return ExitCode2;
|
|
472
473
|
})(ExitCode || {});
|
|
473
474
|
}
|
|
@@ -562,6 +563,13 @@ var init_facade = __esm({
|
|
|
562
563
|
}
|
|
563
564
|
});
|
|
564
565
|
|
|
566
|
+
// packages/contracts/src/graph.ts
|
|
567
|
+
var init_graph = __esm({
|
|
568
|
+
"packages/contracts/src/graph.ts"() {
|
|
569
|
+
"use strict";
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
|
|
565
573
|
// packages/contracts/src/lafs.ts
|
|
566
574
|
var init_lafs = __esm({
|
|
567
575
|
"packages/contracts/src/lafs.ts"() {
|
|
@@ -1010,6 +1018,7 @@ var init_src = __esm({
|
|
|
1010
1018
|
init_evidence_record_schema();
|
|
1011
1019
|
init_exit_codes();
|
|
1012
1020
|
init_facade();
|
|
1021
|
+
init_graph();
|
|
1013
1022
|
init_lafs();
|
|
1014
1023
|
init_operations();
|
|
1015
1024
|
init_params();
|
|
@@ -3538,6 +3547,54 @@ var init_registry = __esm({
|
|
|
3538
3547
|
requiredParams: [],
|
|
3539
3548
|
params: []
|
|
3540
3549
|
},
|
|
3550
|
+
{
|
|
3551
|
+
gateway: "query",
|
|
3552
|
+
domain: "tasks",
|
|
3553
|
+
operation: "deps.validate",
|
|
3554
|
+
description: "tasks.deps.validate (query) \u2014 validate dependency graph integrity for an epic or all tasks",
|
|
3555
|
+
tier: 1,
|
|
3556
|
+
idempotent: true,
|
|
3557
|
+
sessionRequired: false,
|
|
3558
|
+
requiredParams: [],
|
|
3559
|
+
params: [
|
|
3560
|
+
{
|
|
3561
|
+
name: "epicId",
|
|
3562
|
+
type: "string",
|
|
3563
|
+
required: false,
|
|
3564
|
+
description: "Scope validation to direct children of this epic (optional)"
|
|
3565
|
+
},
|
|
3566
|
+
{
|
|
3567
|
+
name: "scope",
|
|
3568
|
+
type: "string",
|
|
3569
|
+
required: false,
|
|
3570
|
+
description: "Which tasks to include: 'all', 'open', or 'critical' (default: 'all')"
|
|
3571
|
+
}
|
|
3572
|
+
]
|
|
3573
|
+
},
|
|
3574
|
+
{
|
|
3575
|
+
gateway: "query",
|
|
3576
|
+
domain: "tasks",
|
|
3577
|
+
operation: "deps.tree",
|
|
3578
|
+
description: "tasks.deps.tree (query) \u2014 render dependency tree for an epic in text, mermaid, or json format",
|
|
3579
|
+
tier: 1,
|
|
3580
|
+
idempotent: true,
|
|
3581
|
+
sessionRequired: false,
|
|
3582
|
+
requiredParams: ["epicId"],
|
|
3583
|
+
params: [
|
|
3584
|
+
{
|
|
3585
|
+
name: "epicId",
|
|
3586
|
+
type: "string",
|
|
3587
|
+
required: true,
|
|
3588
|
+
description: "Epic ID to visualize (required)"
|
|
3589
|
+
},
|
|
3590
|
+
{
|
|
3591
|
+
name: "format",
|
|
3592
|
+
type: "string",
|
|
3593
|
+
required: false,
|
|
3594
|
+
description: "Output format: 'text', 'mermaid', or 'json' (default: 'text')"
|
|
3595
|
+
}
|
|
3596
|
+
]
|
|
3597
|
+
},
|
|
3541
3598
|
{
|
|
3542
3599
|
gateway: "query",
|
|
3543
3600
|
domain: "tasks",
|
|
@@ -10581,6 +10638,8 @@ __export(engine_exports, {
|
|
|
10581
10638
|
taskDeps: () => taskDeps,
|
|
10582
10639
|
taskDepsCycles: () => taskDepsCycles,
|
|
10583
10640
|
taskDepsOverview: () => taskDepsOverview,
|
|
10641
|
+
taskDepsTree: () => taskDepsTree,
|
|
10642
|
+
taskDepsValidate: () => taskDepsValidate,
|
|
10584
10643
|
taskExists: () => taskExists,
|
|
10585
10644
|
taskExport: () => taskExport,
|
|
10586
10645
|
taskFind: () => taskFind,
|
|
@@ -10763,6 +10822,8 @@ import {
|
|
|
10763
10822
|
taskDeps,
|
|
10764
10823
|
taskDepsCycles,
|
|
10765
10824
|
taskDepsOverview,
|
|
10825
|
+
taskDepsTree,
|
|
10826
|
+
taskDepsValidate,
|
|
10766
10827
|
taskExists,
|
|
10767
10828
|
taskExport,
|
|
10768
10829
|
taskFind,
|
|
@@ -14720,7 +14781,9 @@ var init_memory2 = __esm({
|
|
|
14720
14781
|
{
|
|
14721
14782
|
query: paramString(params, "query"),
|
|
14722
14783
|
taskId: paramString(params, "taskId"),
|
|
14723
|
-
limit: paramNumber(params, "limit")
|
|
14784
|
+
limit: paramNumber(params, "limit"),
|
|
14785
|
+
// T1830: opt-in to AGT-* dispatch rows; excluded by default
|
|
14786
|
+
includeAgentDispatch: paramBool(params, "includeAgentDispatch") ?? false
|
|
14724
14787
|
},
|
|
14725
14788
|
projectRoot
|
|
14726
14789
|
);
|
|
@@ -22481,7 +22544,9 @@ async function orchestrateNextOp(params) {
|
|
|
22481
22544
|
return orchestrateNext(params.epicId, getProjectRoot9());
|
|
22482
22545
|
}
|
|
22483
22546
|
async function orchestrateReadyOp(params) {
|
|
22484
|
-
return orchestrateReady(params.epicId, getProjectRoot9()
|
|
22547
|
+
return orchestrateReady(params.epicId, getProjectRoot9(), {
|
|
22548
|
+
ignoreDepsValidate: params.ignoreDepsValidate
|
|
22549
|
+
});
|
|
22485
22550
|
}
|
|
22486
22551
|
async function orchestrateAnalyzeOp(params) {
|
|
22487
22552
|
if (params.mode === "parallel-safety") {
|
|
@@ -23179,7 +23244,10 @@ var init_orchestrate2 = __esm({
|
|
|
23179
23244
|
"epicId is required",
|
|
23180
23245
|
startTime
|
|
23181
23246
|
);
|
|
23182
|
-
const p = {
|
|
23247
|
+
const p = {
|
|
23248
|
+
epicId: params.epicId,
|
|
23249
|
+
ignoreDepsValidate: params.ignoreDepsValidate
|
|
23250
|
+
};
|
|
23183
23251
|
return wrapResult(await coreOps.ready(p), "query", "orchestrate", operation, startTime);
|
|
23184
23252
|
}
|
|
23185
23253
|
case "analyze": {
|
|
@@ -25683,6 +25751,23 @@ var init_tasks3 = __esm({
|
|
|
25683
25751
|
"depends"
|
|
25684
25752
|
);
|
|
25685
25753
|
},
|
|
25754
|
+
"deps.validate": async (params) => {
|
|
25755
|
+
const projectRoot = getProjectRoot15();
|
|
25756
|
+
return wrapCoreResult(
|
|
25757
|
+
await taskDepsValidate(projectRoot, params.epicId, params.scope),
|
|
25758
|
+
"deps.validate"
|
|
25759
|
+
);
|
|
25760
|
+
},
|
|
25761
|
+
"deps.tree": async (params) => {
|
|
25762
|
+
const projectRoot = getProjectRoot15();
|
|
25763
|
+
if (!params.epicId) {
|
|
25764
|
+
return lafsError("E_INVALID_INPUT", "epicId is required for deps.tree", "deps.tree");
|
|
25765
|
+
}
|
|
25766
|
+
return wrapCoreResult(
|
|
25767
|
+
await taskDepsTree(projectRoot, params.epicId, params.format),
|
|
25768
|
+
"deps.tree"
|
|
25769
|
+
);
|
|
25770
|
+
},
|
|
25686
25771
|
analyze: async (params) => {
|
|
25687
25772
|
const projectRoot = getProjectRoot15();
|
|
25688
25773
|
return wrapCoreResult(
|
|
@@ -25943,6 +26028,8 @@ var init_tasks3 = __esm({
|
|
|
25943
26028
|
"tree",
|
|
25944
26029
|
"blockers",
|
|
25945
26030
|
"depends",
|
|
26031
|
+
"deps.validate",
|
|
26032
|
+
"deps.tree",
|
|
25946
26033
|
"analyze",
|
|
25947
26034
|
"impact",
|
|
25948
26035
|
"next",
|
|
@@ -26054,6 +26141,8 @@ var init_tasks3 = __esm({
|
|
|
26054
26141
|
"tree",
|
|
26055
26142
|
"blockers",
|
|
26056
26143
|
"depends",
|
|
26144
|
+
"deps.validate",
|
|
26145
|
+
"deps.tree",
|
|
26057
26146
|
"analyze",
|
|
26058
26147
|
"impact",
|
|
26059
26148
|
"next",
|
|
@@ -36105,6 +36194,71 @@ var cyclesCommand = defineCommand({
|
|
|
36105
36194
|
);
|
|
36106
36195
|
}
|
|
36107
36196
|
});
|
|
36197
|
+
var validateCommand5 = defineCommand({
|
|
36198
|
+
meta: {
|
|
36199
|
+
name: "validate",
|
|
36200
|
+
description: "Validate dep graph \u2014 orphan, circular, cross-epic gap, stale-dep detection"
|
|
36201
|
+
},
|
|
36202
|
+
args: {
|
|
36203
|
+
epic: {
|
|
36204
|
+
type: "string",
|
|
36205
|
+
description: "Scope validation to direct children of this epic ID"
|
|
36206
|
+
},
|
|
36207
|
+
scope: {
|
|
36208
|
+
type: "string",
|
|
36209
|
+
description: "Which tasks to include: all (default), open, or critical",
|
|
36210
|
+
default: "all"
|
|
36211
|
+
}
|
|
36212
|
+
},
|
|
36213
|
+
async run({ args }) {
|
|
36214
|
+
await dispatchFromCli(
|
|
36215
|
+
"query",
|
|
36216
|
+
"tasks",
|
|
36217
|
+
"deps.validate",
|
|
36218
|
+
{
|
|
36219
|
+
epicId: args.epic,
|
|
36220
|
+
scope: args.scope
|
|
36221
|
+
},
|
|
36222
|
+
{ command: "deps", operation: "tasks.deps.validate" }
|
|
36223
|
+
);
|
|
36224
|
+
}
|
|
36225
|
+
});
|
|
36226
|
+
var depsTreeCommand = defineCommand({
|
|
36227
|
+
meta: {
|
|
36228
|
+
name: "tree",
|
|
36229
|
+
description: "Render the dep-graph tree for an epic (text/mermaid/json)"
|
|
36230
|
+
},
|
|
36231
|
+
args: {
|
|
36232
|
+
epic: {
|
|
36233
|
+
type: "string",
|
|
36234
|
+
description: "Epic ID to visualize",
|
|
36235
|
+
required: true
|
|
36236
|
+
},
|
|
36237
|
+
json: {
|
|
36238
|
+
type: "boolean",
|
|
36239
|
+
description: "Emit machine-readable JSON tree",
|
|
36240
|
+
default: false
|
|
36241
|
+
},
|
|
36242
|
+
mermaid: {
|
|
36243
|
+
type: "boolean",
|
|
36244
|
+
description: "Emit Mermaid graph TD block",
|
|
36245
|
+
default: false
|
|
36246
|
+
}
|
|
36247
|
+
},
|
|
36248
|
+
async run({ args }) {
|
|
36249
|
+
const format = args.json ? "json" : args.mermaid ? "mermaid" : "text";
|
|
36250
|
+
await dispatchFromCli(
|
|
36251
|
+
"query",
|
|
36252
|
+
"tasks",
|
|
36253
|
+
"deps.tree",
|
|
36254
|
+
{
|
|
36255
|
+
epicId: args.epic,
|
|
36256
|
+
format
|
|
36257
|
+
},
|
|
36258
|
+
{ command: "deps", operation: "tasks.deps.tree" }
|
|
36259
|
+
);
|
|
36260
|
+
}
|
|
36261
|
+
});
|
|
36108
36262
|
var depsCommand = defineCommand({
|
|
36109
36263
|
meta: { name: "deps", description: "Dependency visualization and analysis" },
|
|
36110
36264
|
subCommands: {
|
|
@@ -36113,7 +36267,9 @@ var depsCommand = defineCommand({
|
|
|
36113
36267
|
waves: wavesCommand,
|
|
36114
36268
|
"critical-path": criticalPathCommand,
|
|
36115
36269
|
impact: impactCommand,
|
|
36116
|
-
cycles: cyclesCommand
|
|
36270
|
+
cycles: cyclesCommand,
|
|
36271
|
+
validate: validateCommand5,
|
|
36272
|
+
tree: depsTreeCommand
|
|
36117
36273
|
},
|
|
36118
36274
|
async run({ cmd, rawArgs }) {
|
|
36119
36275
|
const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
|
|
@@ -40306,6 +40462,10 @@ var decisionFindCommand = defineCommand({
|
|
|
40306
40462
|
type: "string",
|
|
40307
40463
|
description: "Maximum results"
|
|
40308
40464
|
},
|
|
40465
|
+
"include-agent-dispatch": {
|
|
40466
|
+
type: "boolean",
|
|
40467
|
+
description: "Include AGT-* agent dispatch rows (excluded by default \u2014 use to surface execution history)"
|
|
40468
|
+
},
|
|
40309
40469
|
json: {
|
|
40310
40470
|
type: "boolean",
|
|
40311
40471
|
description: "Output as JSON"
|
|
@@ -40318,7 +40478,9 @@ var decisionFindCommand = defineCommand({
|
|
|
40318
40478
|
"decision.find",
|
|
40319
40479
|
{
|
|
40320
40480
|
query: args.query ?? "",
|
|
40321
|
-
limit: args.limit !== void 0 ? parseInt(args.limit, 10) : void 0
|
|
40481
|
+
limit: args.limit !== void 0 ? parseInt(args.limit, 10) : void 0,
|
|
40482
|
+
// T1830: pass flag so the engine can filter by decision_category
|
|
40483
|
+
includeAgentDispatch: args["include-agent-dispatch"] === true
|
|
40322
40484
|
},
|
|
40323
40485
|
{ command: "memory", operation: "memory.decision.find" }
|
|
40324
40486
|
);
|
|
@@ -44777,6 +44939,10 @@ var readyCommand = defineCommand({
|
|
|
44777
44939
|
type: "positional",
|
|
44778
44940
|
description: "Epic ID to query",
|
|
44779
44941
|
required: true
|
|
44942
|
+
},
|
|
44943
|
+
"ignore-deps-validate": {
|
|
44944
|
+
type: "boolean",
|
|
44945
|
+
description: "Skip dep-graph validation and proceed even if issues exist (audit-logged bypass). CLI-only \u2014 sentient mode does not support this flag."
|
|
44780
44946
|
}
|
|
44781
44947
|
},
|
|
44782
44948
|
async run({ args }) {
|
|
@@ -44784,7 +44950,10 @@ var readyCommand = defineCommand({
|
|
|
44784
44950
|
"query",
|
|
44785
44951
|
"orchestrate",
|
|
44786
44952
|
"ready",
|
|
44787
|
-
{
|
|
44953
|
+
{
|
|
44954
|
+
epicId: args.epicId,
|
|
44955
|
+
ignoreDepsValidate: args["ignore-deps-validate"] === true
|
|
44956
|
+
},
|
|
44788
44957
|
{ command: "orchestrate" }
|
|
44789
44958
|
);
|
|
44790
44959
|
}
|
|
@@ -44897,7 +45066,7 @@ var spawnCommand2 = defineCommand({
|
|
|
44897
45066
|
);
|
|
44898
45067
|
}
|
|
44899
45068
|
});
|
|
44900
|
-
var
|
|
45069
|
+
var validateCommand6 = defineCommand({
|
|
44901
45070
|
meta: { name: "validate", description: "Validate subagent output" },
|
|
44902
45071
|
args: {
|
|
44903
45072
|
taskId: {
|
|
@@ -45462,7 +45631,7 @@ var orchestrateCommand = defineCommand({
|
|
|
45462
45631
|
waves: wavesCommand2,
|
|
45463
45632
|
plan: planCommand,
|
|
45464
45633
|
spawn: spawnCommand2,
|
|
45465
|
-
validate:
|
|
45634
|
+
validate: validateCommand6,
|
|
45466
45635
|
context: contextCommand4,
|
|
45467
45636
|
ivtr: ivtrCommand,
|
|
45468
45637
|
parallel: parallelCommand,
|
|
@@ -46060,7 +46229,7 @@ var listCommand13 = defineCommand({
|
|
|
46060
46229
|
);
|
|
46061
46230
|
}
|
|
46062
46231
|
});
|
|
46063
|
-
var
|
|
46232
|
+
var validateCommand7 = defineCommand({
|
|
46064
46233
|
meta: {
|
|
46065
46234
|
name: "validate",
|
|
46066
46235
|
description: "Parse and validate a .cantbook file \u2014 exit 0 on success, exit 70 on parse error (T1261)"
|
|
@@ -46094,7 +46263,7 @@ var playbookCommand = defineCommand({
|
|
|
46094
46263
|
resume: resumeCommand,
|
|
46095
46264
|
list: listCommand13,
|
|
46096
46265
|
create: createCommand2,
|
|
46097
|
-
validate:
|
|
46266
|
+
validate: validateCommand7
|
|
46098
46267
|
},
|
|
46099
46268
|
async run({ cmd, rawArgs }) {
|
|
46100
46269
|
const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
|
|
@@ -50115,7 +50284,7 @@ var searchCommand3 = defineCommand({
|
|
|
50115
50284
|
);
|
|
50116
50285
|
}
|
|
50117
50286
|
});
|
|
50118
|
-
var
|
|
50287
|
+
var validateCommand8 = defineCommand({
|
|
50119
50288
|
meta: { name: "validate", description: "Validate skill against protocol" },
|
|
50120
50289
|
args: {
|
|
50121
50290
|
"skill-name": {
|
|
@@ -50382,7 +50551,7 @@ var skillsCommand2 = defineCommand({
|
|
|
50382
50551
|
subCommands: {
|
|
50383
50552
|
list: listCommand20,
|
|
50384
50553
|
search: searchCommand3,
|
|
50385
|
-
validate:
|
|
50554
|
+
validate: validateCommand8,
|
|
50386
50555
|
info: infoCommand,
|
|
50387
50556
|
install: installCommand3,
|
|
50388
50557
|
uninstall: uninstallCommand2,
|
|
@@ -51004,7 +51173,7 @@ var syncCommand5 = defineCommand({
|
|
|
51004
51173
|
|
|
51005
51174
|
// packages/cleo/src/cli/commands/testing.ts
|
|
51006
51175
|
init_cli();
|
|
51007
|
-
var
|
|
51176
|
+
var validateCommand9 = defineCommand({
|
|
51008
51177
|
meta: { name: "validate", description: "Validate testing protocol compliance for a task" },
|
|
51009
51178
|
args: {
|
|
51010
51179
|
taskId: {
|
|
@@ -51104,7 +51273,7 @@ var runCommand4 = defineCommand({
|
|
|
51104
51273
|
var testingCommand = defineCommand({
|
|
51105
51274
|
meta: { name: "testing", description: "Validate testing protocol compliance" },
|
|
51106
51275
|
subCommands: {
|
|
51107
|
-
validate:
|
|
51276
|
+
validate: validateCommand9,
|
|
51108
51277
|
check: checkCommand7,
|
|
51109
51278
|
status: statusCommand12,
|
|
51110
51279
|
coverage: coverageCommand,
|