@tea-agent/loop-agent 0.26.5-beta.2 → 0.27.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/AGENTS.md +2 -2
- package/CHANGELOG.md +29 -0
- package/README.md +13 -23
- package/dist/application/dag/args.js +7 -7
- package/dist/application/dag/generate-task-dag.js +2 -2
- package/dist/application/dag/run-dag.js +3 -4
- package/dist/application/dag/validate-dag.js +1 -1
- package/dist/application/task-lifecycle/advance.js +845 -0
- package/dist/application/task-lifecycle/gates.js +80 -0
- package/dist/application/task-lifecycle/index.js +7 -0
- package/dist/application/task-lifecycle/observe.js +395 -0
- package/dist/application/task-lifecycle/plan-transitions.js +224 -0
- package/dist/application/task-lifecycle/recommendations.js +180 -0
- package/dist/application/task-lifecycle/record.js +73 -0
- package/dist/application/task-lifecycle/types.js +1 -0
- package/dist/cli/command-definitions.js +14 -111
- package/dist/cli/help.js +6 -7
- package/dist/cli/program.js +26 -90
- package/dist/cli/update/policy.js +0 -1
- package/dist/commands/dag-final-verification.js +1 -1
- package/dist/commands/dag-init-hybrid.js +1 -1
- package/dist/commands/delegate.js +2 -2
- package/dist/commands/init.js +21 -19
- package/dist/commands/run-dag-progress.js +1 -1
- package/dist/commands/status.js +18 -17
- package/dist/commands/study-init.js +2 -2
- package/dist/commands/task-advance.js +335 -0
- package/dist/commands/task-contract.js +3 -5
- package/dist/commands/task-source-prepare.js +9 -4
- package/dist/commands/task-status.js +133 -0
- package/dist/governance/manifest-types.js +2 -2
- package/dist/shared/operator/capabilities.js +1358 -243
- package/dist/task/contract/adopt.js +1 -1
- package/dist/task/contract/apply.js +1 -1
- package/dist/task/contract/import-revision.js +1 -1
- package/dist/task/contract/recover.js +2 -2
- package/dist/task/read-model.js +18 -23
- package/dist/task/runtime.js +1 -1
- package/dist/task/source-prepare/completeness.js +1 -1
- package/dist/task/source-prepare/parse-intent.js +6 -1
- package/dist/task/source-prepare/prepare.js +23 -20
- package/dist/worker/console/operator-actions.js +288 -95
- package/dist/worker/console/recovery-cta.js +4 -4
- package/dist/worker/console/static/assets/{index-CSRIhuzh.js → index-CNO7n6qB.js} +1 -1
- package/dist/worker/console/static/index.html +1 -1
- package/dist/worker/materialize/harness-task-materializer.js +6 -5
- package/dist/worker/run-task/run-task.js +204 -112
- package/dist/worker/runner/run-ready.js +1 -1
- package/dist/workflows/dag/frontend-implementation-contract.js +6 -72
- package/dist/workflows/dag/frontend-prewrite-gate.js +4 -17
- package/dist/workflows/dag/init-hybrid.js +11 -66
- package/docs/templates/evaluation/agents-map-slim-v1.md +1 -1
- package/docs/templates/evaluation/agents-map-verbose-v0.md +3 -3
- package/docs/templates/harness.schema.json +2 -2
- package/docs/templates/init-managed-agents.md +13 -16
- package/docs/templates/production-readiness-checklist.md +3 -3
- package/harness.json +4 -4
- package/package.json +1 -1
- package/scripts/kb-bootstrap-init-skeleton.sh +2 -1
- package/scripts/kb-graph-incremental-prepare.mjs +2 -2
- package/skills/loop-agent/SKILL.md +18 -13
- package/skills/loop-agent/references/README.md +1 -1
- package/skills/loop-agent/references/command-reference.md +55 -84
- package/skills/loop-agent/references/harness-policy.md +19 -23
- package/skills/loop-agent/references/hybrid-dag.md +31 -33
- package/skills/loop-agent/references/long-running-loop.md +2 -2
- package/skills/loop-agent/references/one-shot-runs.md +4 -5
- package/skills/loop-agent/references/orchestrator-and-interventions.md +3 -3
- package/skills/loop-agent/references/post-implementation-and-patterns.md +4 -4
- package/skills/loop-agent/references/source-and-plan-practice.md +45 -51
- package/skills/loop-agent/references/task-workflow.md +14 -15
|
@@ -8,11 +8,34 @@ const officialAction = (action, cli, kind, coverage) => ({
|
|
|
8
8
|
envelopeSchemaVersion: 1,
|
|
9
9
|
requiredErrorCodes: kind === "read"
|
|
10
10
|
? ["INVALID_INPUT", "NOT_FOUND"]
|
|
11
|
-
: [
|
|
11
|
+
: [
|
|
12
|
+
"INVALID_INPUT",
|
|
13
|
+
"REQUEST_ID_REUSE_CONFLICT",
|
|
14
|
+
"REVISION_CONFLICT",
|
|
15
|
+
"OBSERVED_HASH_CONFLICT",
|
|
16
|
+
"LEASE_HELD",
|
|
17
|
+
"TRANSACTION_INCOMPLETE",
|
|
18
|
+
"NOT_FOUND",
|
|
19
|
+
],
|
|
12
20
|
description: `Official CLI action coverage for ${cli}.`,
|
|
13
21
|
inputParams: [
|
|
14
|
-
{
|
|
15
|
-
|
|
22
|
+
{
|
|
23
|
+
name: "args",
|
|
24
|
+
type: "array",
|
|
25
|
+
itemsType: "string",
|
|
26
|
+
required: false,
|
|
27
|
+
description: "validated trailing CLI arguments",
|
|
28
|
+
},
|
|
29
|
+
...(coverage === "human-gated-required"
|
|
30
|
+
? [
|
|
31
|
+
{
|
|
32
|
+
name: "confirmationId",
|
|
33
|
+
type: "string",
|
|
34
|
+
required: true,
|
|
35
|
+
description: "human confirmation receipt id",
|
|
36
|
+
},
|
|
37
|
+
]
|
|
38
|
+
: []),
|
|
16
39
|
],
|
|
17
40
|
modelCallable: coverage === "human-gated-required"
|
|
18
41
|
? "prepare-only"
|
|
@@ -25,19 +48,69 @@ const OFFICIAL_ACTIONS = [
|
|
|
25
48
|
...[
|
|
26
49
|
["dagDoctor", "loop-agent dag doctor", "read", "model-callable"],
|
|
27
50
|
["dagStatus", "loop-agent dag status", "read", "model-callable"],
|
|
28
|
-
[
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
51
|
+
[
|
|
52
|
+
"dagDecisionInspect",
|
|
53
|
+
"loop-agent dag decision inspect",
|
|
54
|
+
"read",
|
|
55
|
+
"model-callable",
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
"dagDecisionValidate",
|
|
59
|
+
"loop-agent dag decision validate",
|
|
60
|
+
"read",
|
|
61
|
+
"model-callable",
|
|
62
|
+
],
|
|
63
|
+
[
|
|
64
|
+
"dagCloseoutDraft",
|
|
65
|
+
"loop-agent dag closeout-draft",
|
|
66
|
+
"read",
|
|
67
|
+
"model-callable",
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
"dagApprove",
|
|
71
|
+
"loop-agent dag approve",
|
|
72
|
+
"mutation",
|
|
73
|
+
"human-gated-required",
|
|
74
|
+
],
|
|
32
75
|
["dagReject", "loop-agent dag reject", "mutation", "human-gated-required"],
|
|
33
|
-
[
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
76
|
+
[
|
|
77
|
+
"dagResume",
|
|
78
|
+
"loop-agent dag resume",
|
|
79
|
+
"long-running",
|
|
80
|
+
"human-gated-required",
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
"dagReconcileRun",
|
|
84
|
+
"loop-agent dag reconcile-run",
|
|
85
|
+
"mutation",
|
|
86
|
+
"human-gated-required",
|
|
87
|
+
],
|
|
88
|
+
[
|
|
89
|
+
"dagReconcileTasks",
|
|
90
|
+
"loop-agent dag reconcile-tasks",
|
|
91
|
+
"mutation",
|
|
92
|
+
"human-gated-required",
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
"dagFinalVerification",
|
|
96
|
+
"loop-agent dag final-verification",
|
|
97
|
+
"long-running",
|
|
98
|
+
"human-gated-required",
|
|
99
|
+
],
|
|
37
100
|
["dagInitHybrid", "loop-agent dag init-hybrid", "mutation", "advanced"],
|
|
38
101
|
["dagWorkflowPlan", "loop-agent dag workflow-plan", "read", "advanced"],
|
|
39
|
-
[
|
|
40
|
-
|
|
102
|
+
[
|
|
103
|
+
"dagWorkflowValidate",
|
|
104
|
+
"loop-agent dag workflow-validate",
|
|
105
|
+
"read",
|
|
106
|
+
"advanced",
|
|
107
|
+
],
|
|
108
|
+
[
|
|
109
|
+
"dagWorkflowCompile",
|
|
110
|
+
"loop-agent dag workflow-compile",
|
|
111
|
+
"mutation",
|
|
112
|
+
"advanced",
|
|
113
|
+
],
|
|
41
114
|
["planList", "loop-agent plan list", "read", "model-callable"],
|
|
42
115
|
["planCreate", "loop-agent plan create", "mutation", "model-callable"],
|
|
43
116
|
["planComplete", "loop-agent plan complete", "mutation", "model-callable"],
|
|
@@ -45,40 +118,175 @@ const OFFICIAL_ACTIONS = [
|
|
|
45
118
|
["docsAudit", "loop-agent docs audit", "read", "model-callable"],
|
|
46
119
|
["docsArchive", "loop-agent docs archive", "mutation", "advanced"],
|
|
47
120
|
["handoffCheck", "loop-agent handoff check", "read", "model-callable"],
|
|
48
|
-
[
|
|
121
|
+
[
|
|
122
|
+
"handoffCoverage",
|
|
123
|
+
"loop-agent handoff coverage",
|
|
124
|
+
"read",
|
|
125
|
+
"model-callable",
|
|
126
|
+
],
|
|
49
127
|
["coverageReport", "loop-agent coverage report", "read", "model-callable"],
|
|
50
128
|
["stats", "loop-agent stats", "read", "model-callable"],
|
|
51
|
-
[
|
|
52
|
-
|
|
129
|
+
[
|
|
130
|
+
"promoteRun",
|
|
131
|
+
"loop-agent task advance <id> --json",
|
|
132
|
+
"mutation",
|
|
133
|
+
"model-callable",
|
|
134
|
+
],
|
|
135
|
+
[
|
|
136
|
+
"closeoutTask",
|
|
137
|
+
"loop-agent task advance <id> --json",
|
|
138
|
+
"mutation",
|
|
139
|
+
"model-callable",
|
|
140
|
+
],
|
|
53
141
|
["piReuseBenchmark", "loop-agent pi-reuse-benchmark", "read", "advanced"],
|
|
54
142
|
["loopBenchmark", "loop-agent loop-benchmark", "read", "advanced"],
|
|
55
|
-
[
|
|
143
|
+
[
|
|
144
|
+
"knowledgeCurate",
|
|
145
|
+
"loop-agent knowledge curate",
|
|
146
|
+
"read",
|
|
147
|
+
"model-callable",
|
|
148
|
+
],
|
|
56
149
|
["knowledgeQuery", "loop-agent knowledge query", "read", "model-callable"],
|
|
57
|
-
[
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
[
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
[
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
[
|
|
76
|
-
|
|
150
|
+
[
|
|
151
|
+
"knowledgeGraphInit",
|
|
152
|
+
"loop-agent knowledge graph-init",
|
|
153
|
+
"mutation",
|
|
154
|
+
"advanced",
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
"knowledgeGraphMaterialize",
|
|
158
|
+
"loop-agent knowledge graph-materialize",
|
|
159
|
+
"mutation",
|
|
160
|
+
"advanced",
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
"knowledgeGraphPromote",
|
|
164
|
+
"loop-agent knowledge graph-promote",
|
|
165
|
+
"mutation",
|
|
166
|
+
"advanced",
|
|
167
|
+
],
|
|
168
|
+
[
|
|
169
|
+
"knowledgeGraphIncrementalPrepare",
|
|
170
|
+
"loop-agent knowledge graph-incremental-prepare",
|
|
171
|
+
"mutation",
|
|
172
|
+
"advanced",
|
|
173
|
+
],
|
|
174
|
+
...["init", "status", "run", "record-round", "add-signal", "closeout"].map((leaf) => [
|
|
175
|
+
`loop${leaf.replace(/(^|-)(.)/g, (_m, _d, c) => c.toUpperCase())}`,
|
|
176
|
+
`loop-agent loop ${leaf}`,
|
|
177
|
+
leaf === "status" ? "read" : "mutation",
|
|
178
|
+
"advanced",
|
|
179
|
+
]),
|
|
180
|
+
...["list", "inspect", "save", "run", "diff", "replay"].map((leaf) => [
|
|
181
|
+
`workflow${leaf[0].toUpperCase()}${leaf.slice(1)}`,
|
|
182
|
+
`loop-agent workflow ${leaf}`,
|
|
183
|
+
["list", "inspect", "diff"].includes(leaf) ? "read" : "mutation",
|
|
184
|
+
"advanced",
|
|
185
|
+
]),
|
|
186
|
+
[
|
|
187
|
+
"workerFeatureReview",
|
|
188
|
+
"agent-worker feature review",
|
|
189
|
+
"read",
|
|
190
|
+
"model-callable",
|
|
191
|
+
],
|
|
192
|
+
[
|
|
193
|
+
"workerFeatureScaffold",
|
|
194
|
+
"agent-worker feature scaffold",
|
|
195
|
+
"mutation",
|
|
196
|
+
"advanced",
|
|
197
|
+
],
|
|
198
|
+
[
|
|
199
|
+
"workerFeatureRun",
|
|
200
|
+
"agent-worker feature run",
|
|
201
|
+
"long-running",
|
|
202
|
+
"human-gated-required",
|
|
203
|
+
],
|
|
204
|
+
[
|
|
205
|
+
"workerFeatureAdvance",
|
|
206
|
+
"agent-worker feature advance",
|
|
207
|
+
"long-running",
|
|
208
|
+
"human-gated-required",
|
|
209
|
+
],
|
|
210
|
+
[
|
|
211
|
+
"workerFeatureDoctor",
|
|
212
|
+
"agent-worker feature doctor",
|
|
213
|
+
"read",
|
|
214
|
+
"model-callable",
|
|
215
|
+
],
|
|
216
|
+
[
|
|
217
|
+
"workerFeatureVerifyFinal",
|
|
218
|
+
"agent-worker feature verify-final",
|
|
219
|
+
"long-running",
|
|
220
|
+
"human-gated-required",
|
|
221
|
+
],
|
|
222
|
+
[
|
|
223
|
+
"workerFeatureDelivery",
|
|
224
|
+
"agent-worker feature delivery",
|
|
225
|
+
"mutation",
|
|
226
|
+
"human-gated-required",
|
|
227
|
+
],
|
|
228
|
+
[
|
|
229
|
+
"workerFeatureCloseout",
|
|
230
|
+
"agent-worker feature closeout",
|
|
231
|
+
"mutation",
|
|
232
|
+
"human-gated-required",
|
|
233
|
+
],
|
|
234
|
+
[
|
|
235
|
+
"workerTaskValidate",
|
|
236
|
+
"agent-worker task validate",
|
|
237
|
+
"read",
|
|
238
|
+
"model-callable",
|
|
239
|
+
],
|
|
240
|
+
[
|
|
241
|
+
"workerTaskReconcile",
|
|
242
|
+
"agent-worker task reconcile",
|
|
243
|
+
"mutation",
|
|
244
|
+
"human-gated-required",
|
|
245
|
+
],
|
|
246
|
+
[
|
|
247
|
+
"workerTaskDraftFollowup",
|
|
248
|
+
"agent-worker task draft-followup",
|
|
249
|
+
"mutation",
|
|
250
|
+
"advanced",
|
|
251
|
+
],
|
|
252
|
+
[
|
|
253
|
+
"workerFeatureApproveFollowup",
|
|
254
|
+
"agent-worker feature approve-followup",
|
|
255
|
+
"mutation",
|
|
256
|
+
"advanced",
|
|
257
|
+
],
|
|
258
|
+
[
|
|
259
|
+
"workerBatchPlanReady",
|
|
260
|
+
"agent-worker batch plan-ready",
|
|
261
|
+
"read",
|
|
262
|
+
"model-callable",
|
|
263
|
+
],
|
|
264
|
+
[
|
|
265
|
+
"workerBatchRunReady",
|
|
266
|
+
"agent-worker batch run-ready",
|
|
267
|
+
"long-running",
|
|
268
|
+
"advanced",
|
|
269
|
+
],
|
|
77
270
|
["workerPoolDoctor", "agent-worker pool doctor", "read", "model-callable"],
|
|
78
|
-
[
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
271
|
+
[
|
|
272
|
+
"workerPoolMarkFailed",
|
|
273
|
+
"agent-worker pool mark-failed",
|
|
274
|
+
"mutation",
|
|
275
|
+
"human-gated-required",
|
|
276
|
+
],
|
|
277
|
+
[
|
|
278
|
+
"workerReportMorning",
|
|
279
|
+
"agent-worker report morning",
|
|
280
|
+
"read",
|
|
281
|
+
"model-callable",
|
|
282
|
+
],
|
|
283
|
+
[
|
|
284
|
+
"workerReportMetrics",
|
|
285
|
+
"agent-worker report metrics",
|
|
286
|
+
"read",
|
|
287
|
+
"model-callable",
|
|
288
|
+
],
|
|
289
|
+
],
|
|
82
290
|
].map(([action, cli, kind, coverage]) => officialAction(action, cli, kind, coverage));
|
|
83
291
|
/** Shared constants so dag + dagSpecVersions cannot diverge. */
|
|
84
292
|
const DAG_SPEC_SUPPORTED_PARSE = [1, 2, 3, 4];
|
|
@@ -121,7 +329,12 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
121
329
|
requiredErrorCodes: ["NOT_FOUND", "INVALID_INPUT"],
|
|
122
330
|
description: "Read one canonical Console operation as a bounded redacted projection.",
|
|
123
331
|
inputParams: [
|
|
124
|
-
{
|
|
332
|
+
{
|
|
333
|
+
name: "operationId",
|
|
334
|
+
type: "string",
|
|
335
|
+
required: true,
|
|
336
|
+
description: "canonical operation id",
|
|
337
|
+
},
|
|
125
338
|
],
|
|
126
339
|
modelCallable: "always",
|
|
127
340
|
humanConfirmation: "none",
|
|
@@ -137,9 +350,24 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
137
350
|
requiredErrorCodes: ["INVALID_INPUT"],
|
|
138
351
|
description: "List canonical Console operations using bounded read-only filters.",
|
|
139
352
|
inputParams: [
|
|
140
|
-
{
|
|
141
|
-
|
|
142
|
-
|
|
353
|
+
{
|
|
354
|
+
name: "limit",
|
|
355
|
+
type: "number",
|
|
356
|
+
required: false,
|
|
357
|
+
description: "maximum results (1-50, default 20)",
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
name: "state",
|
|
361
|
+
type: "string",
|
|
362
|
+
required: false,
|
|
363
|
+
description: "optional operation state filter",
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
name: "action",
|
|
367
|
+
type: "string",
|
|
368
|
+
required: false,
|
|
369
|
+
description: "optional exact action filter",
|
|
370
|
+
},
|
|
143
371
|
],
|
|
144
372
|
modelCallable: "always",
|
|
145
373
|
humanConfirmation: "none",
|
|
@@ -155,15 +383,25 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
155
383
|
requiredErrorCodes: ["NOT_FOUND", "INVALID_INPUT"],
|
|
156
384
|
description: "Read a bounded redacted summary from the canonical operation event ring.",
|
|
157
385
|
inputParams: [
|
|
158
|
-
{
|
|
159
|
-
|
|
386
|
+
{
|
|
387
|
+
name: "operationId",
|
|
388
|
+
type: "string",
|
|
389
|
+
required: true,
|
|
390
|
+
description: "canonical operation id",
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
name: "limit",
|
|
394
|
+
type: "number",
|
|
395
|
+
required: false,
|
|
396
|
+
description: "maximum newest events (1-100, default 20)",
|
|
397
|
+
},
|
|
160
398
|
],
|
|
161
399
|
modelCallable: "always",
|
|
162
400
|
humanConfirmation: "none",
|
|
163
401
|
},
|
|
164
402
|
{
|
|
165
403
|
action: "contractShow",
|
|
166
|
-
cli: "loop-agent task
|
|
404
|
+
cli: "loop-agent task status <taskId> --json",
|
|
167
405
|
kind: "read",
|
|
168
406
|
inputSchemaVersion: 1,
|
|
169
407
|
resultSchemaVersion: 1,
|
|
@@ -171,14 +409,19 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
171
409
|
requiredErrorCodes: ["NOT_FOUND", "INVALID_INPUT"],
|
|
172
410
|
description: "Return TaskContractStateV1 + observed hashes.",
|
|
173
411
|
inputParams: [
|
|
174
|
-
{
|
|
412
|
+
{
|
|
413
|
+
name: "taskId",
|
|
414
|
+
type: "string",
|
|
415
|
+
required: true,
|
|
416
|
+
description: "task id",
|
|
417
|
+
},
|
|
175
418
|
],
|
|
176
419
|
modelCallable: "always",
|
|
177
420
|
humanConfirmation: "none",
|
|
178
421
|
},
|
|
179
422
|
{
|
|
180
423
|
action: "contractValidate",
|
|
181
|
-
cli: "loop-agent task
|
|
424
|
+
cli: "loop-agent task status --task <id> --input <path> --json",
|
|
182
425
|
kind: "read",
|
|
183
426
|
inputSchemaVersion: 1,
|
|
184
427
|
resultSchemaVersion: 1,
|
|
@@ -189,7 +432,12 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
189
432
|
// NOT a `draft` object. draftJson is optional — dispatcher falls back to
|
|
190
433
|
// the saved draft.
|
|
191
434
|
inputParams: [
|
|
192
|
-
{
|
|
435
|
+
{
|
|
436
|
+
name: "taskId",
|
|
437
|
+
type: "string",
|
|
438
|
+
required: true,
|
|
439
|
+
description: "task id",
|
|
440
|
+
},
|
|
193
441
|
{
|
|
194
442
|
name: "draftJson",
|
|
195
443
|
type: "string",
|
|
@@ -202,7 +450,7 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
202
450
|
},
|
|
203
451
|
{
|
|
204
452
|
action: "contractDiff",
|
|
205
|
-
cli: "loop-agent task
|
|
453
|
+
cli: "loop-agent task status --task <id> --input <path> --json",
|
|
206
454
|
kind: "read",
|
|
207
455
|
inputSchemaVersion: 1,
|
|
208
456
|
resultSchemaVersion: 1,
|
|
@@ -210,7 +458,12 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
210
458
|
requiredErrorCodes: ["INVALID_INPUT", "NOT_FOUND", "PATH_OUTSIDE_REPO"],
|
|
211
459
|
description: "Risk-classified diff against current managed/legacy state.",
|
|
212
460
|
inputParams: [
|
|
213
|
-
{
|
|
461
|
+
{
|
|
462
|
+
name: "taskId",
|
|
463
|
+
type: "string",
|
|
464
|
+
required: true,
|
|
465
|
+
description: "task id",
|
|
466
|
+
},
|
|
214
467
|
{
|
|
215
468
|
name: "draftJson",
|
|
216
469
|
type: "string",
|
|
@@ -223,7 +476,7 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
223
476
|
},
|
|
224
477
|
{
|
|
225
478
|
action: "contractApply",
|
|
226
|
-
cli: "loop-agent task
|
|
479
|
+
cli: "loop-agent task advance <id> --from-draft <path> --json",
|
|
227
480
|
kind: "mutation",
|
|
228
481
|
inputSchemaVersion: 1,
|
|
229
482
|
resultSchemaVersion: 1,
|
|
@@ -231,42 +484,82 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
231
484
|
requiredErrorCodes: [...COMMON_MUTATION_ERRORS, "EXTERNALLY_MODIFIED"],
|
|
232
485
|
description: "Journaled apply of Draft to canonical task facts.",
|
|
233
486
|
inputParams: [
|
|
234
|
-
{
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
487
|
+
{
|
|
488
|
+
name: "taskId",
|
|
489
|
+
type: "string",
|
|
490
|
+
required: true,
|
|
491
|
+
description: "task id",
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
name: "assessmentId",
|
|
495
|
+
type: "string",
|
|
496
|
+
required: false,
|
|
497
|
+
description: "assessment id binding (defaults to the draft's bound assessment)",
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
name: "expectedRevision",
|
|
501
|
+
type: "string",
|
|
502
|
+
required: false,
|
|
503
|
+
description: "expected contract revision (defaults to live observed)",
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
name: "expectedObservedHash",
|
|
507
|
+
type: "string",
|
|
508
|
+
required: false,
|
|
509
|
+
description: "expected observed hash (defaults to live observed)",
|
|
510
|
+
},
|
|
238
511
|
],
|
|
239
512
|
modelCallable: "always",
|
|
240
513
|
humanConfirmation: "conditional",
|
|
241
514
|
},
|
|
242
515
|
{
|
|
243
516
|
action: "newTask",
|
|
244
|
-
cli: "loop-agent
|
|
517
|
+
cli: "loop-agent task advance <id> <title> --json",
|
|
245
518
|
kind: "mutation",
|
|
246
519
|
inputSchemaVersion: 1,
|
|
247
520
|
resultSchemaVersion: 1,
|
|
248
521
|
envelopeSchemaVersion: 1,
|
|
249
522
|
requiredErrorCodes: [...COMMON_MUTATION_ERRORS],
|
|
250
|
-
description: "Create a
|
|
523
|
+
description: "Create or advance a task via the single lifecycle mutation entry.",
|
|
251
524
|
inputParams: [
|
|
252
|
-
{
|
|
253
|
-
|
|
525
|
+
{
|
|
526
|
+
name: "taskId",
|
|
527
|
+
type: "string",
|
|
528
|
+
required: true,
|
|
529
|
+
description: "task id",
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
name: "title",
|
|
533
|
+
type: "string",
|
|
534
|
+
required: false,
|
|
535
|
+
description: "task title (defaults to taskId)",
|
|
536
|
+
},
|
|
254
537
|
],
|
|
255
538
|
modelCallable: "always",
|
|
256
539
|
humanConfirmation: "none",
|
|
257
540
|
},
|
|
258
541
|
{
|
|
259
542
|
action: "importPrd",
|
|
260
|
-
cli: "loop-agent
|
|
543
|
+
cli: "loop-agent task advance <id> --prd <server-staged-path> --json",
|
|
261
544
|
kind: "mutation",
|
|
262
545
|
inputSchemaVersion: 1,
|
|
263
546
|
resultSchemaVersion: 1,
|
|
264
547
|
envelopeSchemaVersion: 1,
|
|
265
548
|
requiredErrorCodes: [...COMMON_MUTATION_ERRORS, "PATH_OUTSIDE_REPO"],
|
|
266
|
-
description: "
|
|
549
|
+
description: "Archive immutable PRD via task advance (server-staged file).",
|
|
267
550
|
inputParams: [
|
|
268
|
-
{
|
|
269
|
-
|
|
551
|
+
{
|
|
552
|
+
name: "taskId",
|
|
553
|
+
type: "string",
|
|
554
|
+
required: true,
|
|
555
|
+
description: "task id",
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
name: "content",
|
|
559
|
+
type: "string",
|
|
560
|
+
required: true,
|
|
561
|
+
description: "PRD markdown content",
|
|
562
|
+
},
|
|
270
563
|
],
|
|
271
564
|
modelCallable: "always",
|
|
272
565
|
humanConfirmation: "none",
|
|
@@ -281,7 +574,12 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
281
574
|
requiredErrorCodes: ["NOT_FOUND", "INVALID_INPUT"],
|
|
282
575
|
description: "Read source instruction contract for a task.",
|
|
283
576
|
inputParams: [
|
|
284
|
-
{
|
|
577
|
+
{
|
|
578
|
+
name: "taskId",
|
|
579
|
+
type: "string",
|
|
580
|
+
required: true,
|
|
581
|
+
description: "task id",
|
|
582
|
+
},
|
|
285
583
|
],
|
|
286
584
|
modelCallable: "always",
|
|
287
585
|
humanConfirmation: "none",
|
|
@@ -296,7 +594,12 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
296
594
|
requiredErrorCodes: ["INVALID_INPUT"],
|
|
297
595
|
description: "Save TaskContractDraftV1 to Console application data only (not repo .harness).",
|
|
298
596
|
inputParams: [
|
|
299
|
-
{
|
|
597
|
+
{
|
|
598
|
+
name: "taskId",
|
|
599
|
+
type: "string",
|
|
600
|
+
required: false,
|
|
601
|
+
description: "task id (defaults to draft.taskId)",
|
|
602
|
+
},
|
|
300
603
|
{
|
|
301
604
|
name: "draft",
|
|
302
605
|
type: "object",
|
|
@@ -321,10 +624,31 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
321
624
|
],
|
|
322
625
|
description: "Prepare server-side DagConfirmationV1 receipt for human challenge.",
|
|
323
626
|
inputParams: [
|
|
324
|
-
{
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
627
|
+
{
|
|
628
|
+
name: "taskId",
|
|
629
|
+
type: "string",
|
|
630
|
+
required: true,
|
|
631
|
+
description: "task id",
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
name: "dagPath",
|
|
635
|
+
type: "string",
|
|
636
|
+
required: false,
|
|
637
|
+
description: "staged DAG path (optional; resolved from the last dagRunTask result)",
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
name: "operatorAction",
|
|
641
|
+
type: "string",
|
|
642
|
+
required: false,
|
|
643
|
+
description: "required official action to bind to this single-use human confirmation receipt",
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
name: "operatorActionArgs",
|
|
647
|
+
type: "array",
|
|
648
|
+
itemsType: "string",
|
|
649
|
+
required: false,
|
|
650
|
+
description: "exact trailing CLI arguments bound to the official action receipt",
|
|
651
|
+
},
|
|
328
652
|
],
|
|
329
653
|
modelCallable: "always",
|
|
330
654
|
humanConfirmation: "none",
|
|
@@ -350,7 +674,12 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
350
674
|
// only prepares via prepareDagConfirmation; the browser mutation gate
|
|
351
675
|
// executes the confirm with a server-signed confirmationToken.
|
|
352
676
|
inputParams: [
|
|
353
|
-
{
|
|
677
|
+
{
|
|
678
|
+
name: "confirmationId",
|
|
679
|
+
type: "string",
|
|
680
|
+
required: true,
|
|
681
|
+
description: "confirmation id from prepareDagConfirmation",
|
|
682
|
+
},
|
|
354
683
|
],
|
|
355
684
|
modelCallable: "never",
|
|
356
685
|
humanConfirmation: "required",
|
|
@@ -417,22 +746,32 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
417
746
|
requiredErrorCodes: ["NOT_FOUND", "INVALID_INPUT"],
|
|
418
747
|
description: "DAG run handoff report by run id.",
|
|
419
748
|
inputParams: [
|
|
420
|
-
{
|
|
749
|
+
{
|
|
750
|
+
name: "runId",
|
|
751
|
+
type: "string",
|
|
752
|
+
required: true,
|
|
753
|
+
description: "dag run id",
|
|
754
|
+
},
|
|
421
755
|
],
|
|
422
756
|
modelCallable: "always",
|
|
423
757
|
humanConfirmation: "none",
|
|
424
758
|
},
|
|
425
759
|
{
|
|
426
760
|
action: "status",
|
|
427
|
-
cli: "loop-agent status <taskId> --json",
|
|
761
|
+
cli: "loop-agent task status <taskId> --json",
|
|
428
762
|
kind: "read",
|
|
429
763
|
inputSchemaVersion: 1,
|
|
430
764
|
resultSchemaVersion: 1,
|
|
431
765
|
envelopeSchemaVersion: 1,
|
|
432
766
|
requiredErrorCodes: ["NOT_FOUND", "INVALID_INPUT"],
|
|
433
|
-
description: "Task status (
|
|
767
|
+
description: "Task lifecycle status (read-only).",
|
|
434
768
|
inputParams: [
|
|
435
|
-
{
|
|
769
|
+
{
|
|
770
|
+
name: "taskId",
|
|
771
|
+
type: "string",
|
|
772
|
+
required: true,
|
|
773
|
+
description: "task id",
|
|
774
|
+
},
|
|
436
775
|
],
|
|
437
776
|
modelCallable: "always",
|
|
438
777
|
humanConfirmation: "none",
|
|
@@ -447,14 +786,19 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
447
786
|
requiredErrorCodes: ["NOT_FOUND", "INVALID_INPUT"],
|
|
448
787
|
description: "Spine audit (registry entry).",
|
|
449
788
|
inputParams: [
|
|
450
|
-
{
|
|
789
|
+
{
|
|
790
|
+
name: "taskId",
|
|
791
|
+
type: "string",
|
|
792
|
+
required: true,
|
|
793
|
+
description: "task id",
|
|
794
|
+
},
|
|
451
795
|
],
|
|
452
796
|
modelCallable: "always",
|
|
453
797
|
humanConfirmation: "none",
|
|
454
798
|
},
|
|
455
799
|
{
|
|
456
800
|
action: "dagRunTask",
|
|
457
|
-
cli: "loop-agent
|
|
801
|
+
cli: "loop-agent task advance <taskId> --profile auto --dag-output <path> --json",
|
|
458
802
|
kind: "long-running",
|
|
459
803
|
inputSchemaVersion: 1,
|
|
460
804
|
resultSchemaVersion: 1,
|
|
@@ -465,10 +809,20 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
465
809
|
"EXTERNALLY_MODIFIED",
|
|
466
810
|
"INVALID_INPUT",
|
|
467
811
|
],
|
|
468
|
-
description: "Generate
|
|
812
|
+
description: "Generate + strict-validate DAG via task advance (stops at writeSet gate).",
|
|
469
813
|
inputParams: [
|
|
470
|
-
{
|
|
471
|
-
|
|
814
|
+
{
|
|
815
|
+
name: "taskId",
|
|
816
|
+
type: "string",
|
|
817
|
+
required: true,
|
|
818
|
+
description: "task id to run as a DAG",
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
name: "profile",
|
|
822
|
+
type: "string",
|
|
823
|
+
required: false,
|
|
824
|
+
description: "DAG profile (defaults to auto)",
|
|
825
|
+
},
|
|
472
826
|
],
|
|
473
827
|
modelCallable: "always",
|
|
474
828
|
humanConfirmation: "none",
|
|
@@ -483,15 +837,25 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
483
837
|
requiredErrorCodes: ["INVALID_INPUT", "BINDING_DRIFT"],
|
|
484
838
|
description: "Validate DAG including taskContractBinding drift checks.",
|
|
485
839
|
inputParams: [
|
|
486
|
-
{
|
|
487
|
-
|
|
840
|
+
{
|
|
841
|
+
name: "dagPath",
|
|
842
|
+
type: "string",
|
|
843
|
+
required: true,
|
|
844
|
+
description: "DAG file path to validate",
|
|
845
|
+
},
|
|
846
|
+
{
|
|
847
|
+
name: "taskId",
|
|
848
|
+
type: "string",
|
|
849
|
+
required: false,
|
|
850
|
+
description: "spine task id (optional, for strict-governance spine check)",
|
|
851
|
+
},
|
|
488
852
|
],
|
|
489
853
|
modelCallable: "always",
|
|
490
854
|
humanConfirmation: "none",
|
|
491
855
|
},
|
|
492
856
|
{
|
|
493
857
|
action: "runDag",
|
|
494
|
-
cli: "loop-agent
|
|
858
|
+
cli: "loop-agent task advance <taskId> --approve-gate <id:digest> --json | dag execute --dag <path>",
|
|
495
859
|
kind: "long-running",
|
|
496
860
|
inputSchemaVersion: 1,
|
|
497
861
|
resultSchemaVersion: 1,
|
|
@@ -501,9 +865,14 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
501
865
|
"CONTROLLER_MISMATCH",
|
|
502
866
|
"INVALID_INPUT",
|
|
503
867
|
],
|
|
504
|
-
description: "Execute reviewed DAG
|
|
868
|
+
description: "Execute reviewed DAG after human confirmation (prefer task advance --approve-gate when gate token present).",
|
|
505
869
|
inputParams: [
|
|
506
|
-
{
|
|
870
|
+
{
|
|
871
|
+
name: "confirmationId",
|
|
872
|
+
type: "string",
|
|
873
|
+
required: true,
|
|
874
|
+
description: "confirmation id (from prepareDagConfirmation) — raw dag path is never accepted from the model",
|
|
875
|
+
},
|
|
507
876
|
],
|
|
508
877
|
// prepare-only: the model can invoke runDag but it MUST carry a
|
|
509
878
|
// confirmationId that was consumed by a human-origin confirm (M0-B).
|
|
@@ -520,8 +889,18 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
520
889
|
requiredErrorCodes: ["INVALID_INPUT", "NOT_FOUND"],
|
|
521
890
|
description: "Read-only subgraph rerun plan for confirmation (no mutation).",
|
|
522
891
|
inputParams: [
|
|
523
|
-
{
|
|
524
|
-
|
|
892
|
+
{
|
|
893
|
+
name: "runId",
|
|
894
|
+
type: "string",
|
|
895
|
+
required: true,
|
|
896
|
+
description: "dag run id",
|
|
897
|
+
},
|
|
898
|
+
{
|
|
899
|
+
name: "fromNode",
|
|
900
|
+
type: "string",
|
|
901
|
+
required: true,
|
|
902
|
+
description: "node id to rerun from",
|
|
903
|
+
},
|
|
525
904
|
],
|
|
526
905
|
modelCallable: "always",
|
|
527
906
|
humanConfirmation: "none",
|
|
@@ -540,10 +919,30 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
540
919
|
],
|
|
541
920
|
description: "Execute continuation run from effective node with confirmed plan hash.",
|
|
542
921
|
inputParams: [
|
|
543
|
-
{
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
922
|
+
{
|
|
923
|
+
name: "runId",
|
|
924
|
+
type: "string",
|
|
925
|
+
required: true,
|
|
926
|
+
description: "dag run id",
|
|
927
|
+
},
|
|
928
|
+
{
|
|
929
|
+
name: "fromNode",
|
|
930
|
+
type: "string",
|
|
931
|
+
required: true,
|
|
932
|
+
description: "node id to rerun from",
|
|
933
|
+
},
|
|
934
|
+
{
|
|
935
|
+
name: "planHash",
|
|
936
|
+
type: "string",
|
|
937
|
+
required: true,
|
|
938
|
+
description: "rerun plan hash",
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
name: "reason",
|
|
942
|
+
type: "string",
|
|
943
|
+
required: true,
|
|
944
|
+
description: "rerun reason",
|
|
945
|
+
},
|
|
547
946
|
],
|
|
548
947
|
modelCallable: "prepare-only",
|
|
549
948
|
humanConfirmation: "required",
|
|
@@ -558,8 +957,18 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
558
957
|
requiredErrorCodes: ["INVALID_INPUT", "NOT_FOUND"],
|
|
559
958
|
description: "Prepare a one-shot Human Gate receipt for standaloneTaskRerun / workerTaskRetry. Model may prepare; only the browser mutation gate may consume.",
|
|
560
959
|
inputParams: [
|
|
561
|
-
{
|
|
562
|
-
|
|
960
|
+
{
|
|
961
|
+
name: "action",
|
|
962
|
+
type: "string",
|
|
963
|
+
required: true,
|
|
964
|
+
description: "target action: standaloneTaskRerun | workerTaskRetry",
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
name: "actionParams",
|
|
968
|
+
type: "object",
|
|
969
|
+
required: true,
|
|
970
|
+
description: "params that will be bound into the receipt hash",
|
|
971
|
+
},
|
|
563
972
|
],
|
|
564
973
|
modelCallable: "always",
|
|
565
974
|
humanConfirmation: "none",
|
|
@@ -571,13 +980,37 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
571
980
|
inputSchemaVersion: 1,
|
|
572
981
|
resultSchemaVersion: 1,
|
|
573
982
|
envelopeSchemaVersion: 1,
|
|
574
|
-
requiredErrorCodes: [
|
|
983
|
+
requiredErrorCodes: [
|
|
984
|
+
...COMMON_MUTATION_ERRORS,
|
|
985
|
+
"INVALID_INPUT",
|
|
986
|
+
"HUMAN_CONFIRMATION_REQUIRED",
|
|
987
|
+
],
|
|
575
988
|
description: "Full standalone task regenerate → validate → execute with parent lineage.",
|
|
576
989
|
inputParams: [
|
|
577
|
-
{
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
990
|
+
{
|
|
991
|
+
name: "runId",
|
|
992
|
+
type: "string",
|
|
993
|
+
required: true,
|
|
994
|
+
description: "dag run id",
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
name: "reason",
|
|
998
|
+
type: "string",
|
|
999
|
+
required: true,
|
|
1000
|
+
description: "rerun reason",
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
name: "confirmationId",
|
|
1004
|
+
type: "string",
|
|
1005
|
+
required: true,
|
|
1006
|
+
description: "mutation-gate receipt id from prepareMutationGate",
|
|
1007
|
+
},
|
|
1008
|
+
{
|
|
1009
|
+
name: "humanGateToken",
|
|
1010
|
+
type: "object",
|
|
1011
|
+
required: true,
|
|
1012
|
+
description: "server-signed human-gate token from prepareMutationGate",
|
|
1013
|
+
},
|
|
581
1014
|
],
|
|
582
1015
|
modelCallable: "prepare-only",
|
|
583
1016
|
humanConfirmation: "required",
|
|
@@ -589,14 +1022,43 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
589
1022
|
inputSchemaVersion: 1,
|
|
590
1023
|
resultSchemaVersion: 1,
|
|
591
1024
|
envelopeSchemaVersion: 1,
|
|
592
|
-
requiredErrorCodes: [
|
|
1025
|
+
requiredErrorCodes: [
|
|
1026
|
+
...COMMON_MUTATION_ERRORS,
|
|
1027
|
+
"INVALID_INPUT",
|
|
1028
|
+
"HUMAN_CONFIRMATION_REQUIRED",
|
|
1029
|
+
],
|
|
593
1030
|
description: "Requeue failed Task Pool task (Failed → Ready) via in-package pool store.",
|
|
594
1031
|
inputParams: [
|
|
595
|
-
{
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
1032
|
+
{
|
|
1033
|
+
name: "taskId",
|
|
1034
|
+
type: "string",
|
|
1035
|
+
required: true,
|
|
1036
|
+
description: "task id",
|
|
1037
|
+
},
|
|
1038
|
+
{
|
|
1039
|
+
name: "featureId",
|
|
1040
|
+
type: "string",
|
|
1041
|
+
required: false,
|
|
1042
|
+
description: "feature id (canonical retry carries Feature identity; passed to the CLI as --feature-id when present)",
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
name: "reason",
|
|
1046
|
+
type: "string",
|
|
1047
|
+
required: true,
|
|
1048
|
+
description: "retry reason",
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
name: "confirmationId",
|
|
1052
|
+
type: "string",
|
|
1053
|
+
required: true,
|
|
1054
|
+
description: "mutation-gate receipt id from prepareMutationGate",
|
|
1055
|
+
},
|
|
1056
|
+
{
|
|
1057
|
+
name: "humanGateToken",
|
|
1058
|
+
type: "object",
|
|
1059
|
+
required: true,
|
|
1060
|
+
description: "server-signed human-gate token from prepareMutationGate",
|
|
1061
|
+
},
|
|
600
1062
|
],
|
|
601
1063
|
modelCallable: "prepare-only",
|
|
602
1064
|
humanConfirmation: "required",
|
|
@@ -630,142 +1092,789 @@ export function buildOperatorCapabilitiesDocument() {
|
|
|
630
1092
|
};
|
|
631
1093
|
}
|
|
632
1094
|
export const OPERATOR_COMMAND_COVERAGE = Object.freeze([
|
|
633
|
-
{
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
{
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
{
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
{
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
{
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
{
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
{
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
{
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
{
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
{
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
{
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
{
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
{
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
{
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
{
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
{
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
{
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
{
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
{
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
{
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
{
|
|
765
|
-
|
|
1095
|
+
{
|
|
1096
|
+
command: "loop-agent inspect",
|
|
1097
|
+
coverage: "model-callable",
|
|
1098
|
+
action: "inspect",
|
|
1099
|
+
source: "loop-agent",
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
command: "loop-agent doctor",
|
|
1103
|
+
coverage: "model-callable",
|
|
1104
|
+
action: "doctor",
|
|
1105
|
+
source: "loop-agent",
|
|
1106
|
+
},
|
|
1107
|
+
{
|
|
1108
|
+
command: "loop-agent task advance",
|
|
1109
|
+
coverage: "model-callable",
|
|
1110
|
+
action: "newTask",
|
|
1111
|
+
source: "loop-agent",
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
command: "loop-agent task status",
|
|
1115
|
+
coverage: "model-callable",
|
|
1116
|
+
action: "status",
|
|
1117
|
+
source: "loop-agent",
|
|
1118
|
+
},
|
|
1119
|
+
{
|
|
1120
|
+
command: "loop-agent pi-reuse-benchmark",
|
|
1121
|
+
coverage: "advanced",
|
|
1122
|
+
action: "piReuseBenchmark",
|
|
1123
|
+
source: "loop-agent",
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
command: "loop-agent loop-benchmark",
|
|
1127
|
+
coverage: "advanced",
|
|
1128
|
+
action: "loopBenchmark",
|
|
1129
|
+
source: "loop-agent",
|
|
1130
|
+
},
|
|
1131
|
+
{
|
|
1132
|
+
command: "loop-agent dag execute",
|
|
1133
|
+
coverage: "human-gated-required",
|
|
1134
|
+
action: "runDag",
|
|
1135
|
+
source: "loop-agent",
|
|
1136
|
+
},
|
|
1137
|
+
{
|
|
1138
|
+
command: "loop-agent cursor-prompt",
|
|
1139
|
+
coverage: "excluded",
|
|
1140
|
+
action: null,
|
|
1141
|
+
source: "loop-agent",
|
|
1142
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1143
|
+
},
|
|
1144
|
+
{
|
|
1145
|
+
command: "loop-agent pi-prompt",
|
|
1146
|
+
coverage: "excluded",
|
|
1147
|
+
action: null,
|
|
1148
|
+
source: "loop-agent",
|
|
1149
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1150
|
+
},
|
|
1151
|
+
{
|
|
1152
|
+
command: "loop-agent delegate",
|
|
1153
|
+
coverage: "excluded",
|
|
1154
|
+
action: null,
|
|
1155
|
+
source: "loop-agent",
|
|
1156
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1157
|
+
},
|
|
1158
|
+
{
|
|
1159
|
+
command: "loop-agent harvest",
|
|
1160
|
+
coverage: "excluded",
|
|
1161
|
+
action: null,
|
|
1162
|
+
source: "loop-agent",
|
|
1163
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
command: "loop-agent goal",
|
|
1167
|
+
coverage: "excluded",
|
|
1168
|
+
action: null,
|
|
1169
|
+
source: "loop-agent",
|
|
1170
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
command: "loop-agent docs audit",
|
|
1174
|
+
coverage: "model-callable",
|
|
1175
|
+
action: "docsAudit",
|
|
1176
|
+
source: "loop-agent",
|
|
1177
|
+
},
|
|
1178
|
+
{
|
|
1179
|
+
command: "loop-agent docs archive",
|
|
1180
|
+
coverage: "advanced",
|
|
1181
|
+
action: "docsArchive",
|
|
1182
|
+
source: "loop-agent",
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
command: "loop-agent init instructions",
|
|
1186
|
+
coverage: "excluded",
|
|
1187
|
+
action: null,
|
|
1188
|
+
source: "loop-agent",
|
|
1189
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
command: "loop-agent init doctor",
|
|
1193
|
+
coverage: "excluded",
|
|
1194
|
+
action: null,
|
|
1195
|
+
source: "loop-agent",
|
|
1196
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1197
|
+
},
|
|
1198
|
+
{
|
|
1199
|
+
command: "loop-agent init check-update",
|
|
1200
|
+
coverage: "excluded",
|
|
1201
|
+
action: null,
|
|
1202
|
+
source: "loop-agent",
|
|
1203
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1204
|
+
},
|
|
1205
|
+
{
|
|
1206
|
+
command: "loop-agent init update",
|
|
1207
|
+
coverage: "excluded",
|
|
1208
|
+
action: null,
|
|
1209
|
+
source: "loop-agent",
|
|
1210
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1211
|
+
},
|
|
1212
|
+
{
|
|
1213
|
+
command: "loop-agent init reconcile",
|
|
1214
|
+
coverage: "excluded",
|
|
1215
|
+
action: null,
|
|
1216
|
+
source: "loop-agent",
|
|
1217
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1218
|
+
},
|
|
1219
|
+
{
|
|
1220
|
+
command: "loop-agent examples list",
|
|
1221
|
+
coverage: "excluded",
|
|
1222
|
+
action: null,
|
|
1223
|
+
source: "loop-agent",
|
|
1224
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1225
|
+
},
|
|
1226
|
+
{
|
|
1227
|
+
command: "loop-agent examples show",
|
|
1228
|
+
coverage: "excluded",
|
|
1229
|
+
action: null,
|
|
1230
|
+
source: "loop-agent",
|
|
1231
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
command: "loop-agent examples copy",
|
|
1235
|
+
coverage: "excluded",
|
|
1236
|
+
action: null,
|
|
1237
|
+
source: "loop-agent",
|
|
1238
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1239
|
+
},
|
|
1240
|
+
{
|
|
1241
|
+
command: "loop-agent eval replay",
|
|
1242
|
+
coverage: "excluded",
|
|
1243
|
+
action: null,
|
|
1244
|
+
source: "loop-agent",
|
|
1245
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
command: "loop-agent eval report",
|
|
1249
|
+
coverage: "excluded",
|
|
1250
|
+
action: null,
|
|
1251
|
+
source: "loop-agent",
|
|
1252
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1253
|
+
},
|
|
1254
|
+
{
|
|
1255
|
+
command: "loop-agent eval candidate",
|
|
1256
|
+
coverage: "excluded",
|
|
1257
|
+
action: null,
|
|
1258
|
+
source: "loop-agent",
|
|
1259
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
command: "loop-agent eval alias",
|
|
1263
|
+
coverage: "excluded",
|
|
1264
|
+
action: null,
|
|
1265
|
+
source: "loop-agent",
|
|
1266
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1267
|
+
},
|
|
1268
|
+
{
|
|
1269
|
+
command: "loop-agent eval promote",
|
|
1270
|
+
coverage: "excluded",
|
|
1271
|
+
action: null,
|
|
1272
|
+
source: "loop-agent",
|
|
1273
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1274
|
+
},
|
|
1275
|
+
{
|
|
1276
|
+
command: "loop-agent eval rollback",
|
|
1277
|
+
coverage: "excluded",
|
|
1278
|
+
action: null,
|
|
1279
|
+
source: "loop-agent",
|
|
1280
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1281
|
+
},
|
|
1282
|
+
{
|
|
1283
|
+
command: "loop-agent eval corpus",
|
|
1284
|
+
coverage: "excluded",
|
|
1285
|
+
action: null,
|
|
1286
|
+
source: "loop-agent",
|
|
1287
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
command: "loop-agent eval context-policy",
|
|
1291
|
+
coverage: "excluded",
|
|
1292
|
+
action: null,
|
|
1293
|
+
source: "loop-agent",
|
|
1294
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1295
|
+
},
|
|
1296
|
+
{
|
|
1297
|
+
command: "loop-agent eval budget",
|
|
1298
|
+
coverage: "excluded",
|
|
1299
|
+
action: null,
|
|
1300
|
+
source: "loop-agent",
|
|
1301
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1302
|
+
},
|
|
1303
|
+
{
|
|
1304
|
+
command: "loop-agent eval private-verifier",
|
|
1305
|
+
coverage: "excluded",
|
|
1306
|
+
action: null,
|
|
1307
|
+
source: "loop-agent",
|
|
1308
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1309
|
+
},
|
|
1310
|
+
{
|
|
1311
|
+
command: "loop-agent eval campaign",
|
|
1312
|
+
coverage: "excluded",
|
|
1313
|
+
action: null,
|
|
1314
|
+
source: "loop-agent",
|
|
1315
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1316
|
+
},
|
|
1317
|
+
{
|
|
1318
|
+
command: "loop-agent eval experiment",
|
|
1319
|
+
coverage: "excluded",
|
|
1320
|
+
action: null,
|
|
1321
|
+
source: "loop-agent",
|
|
1322
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1323
|
+
},
|
|
1324
|
+
{
|
|
1325
|
+
command: "loop-agent eval propose",
|
|
1326
|
+
coverage: "excluded",
|
|
1327
|
+
action: null,
|
|
1328
|
+
source: "loop-agent",
|
|
1329
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
command: "loop-agent eval outer-loop",
|
|
1333
|
+
coverage: "excluded",
|
|
1334
|
+
action: null,
|
|
1335
|
+
source: "loop-agent",
|
|
1336
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1337
|
+
},
|
|
1338
|
+
{
|
|
1339
|
+
command: "loop-agent eval ignition",
|
|
1340
|
+
coverage: "excluded",
|
|
1341
|
+
action: null,
|
|
1342
|
+
source: "loop-agent",
|
|
1343
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1344
|
+
},
|
|
1345
|
+
{
|
|
1346
|
+
command: "loop-agent plan list",
|
|
1347
|
+
coverage: "model-callable",
|
|
1348
|
+
action: "planList",
|
|
1349
|
+
source: "loop-agent",
|
|
1350
|
+
},
|
|
1351
|
+
{
|
|
1352
|
+
command: "loop-agent plan create",
|
|
1353
|
+
coverage: "model-callable",
|
|
1354
|
+
action: "planCreate",
|
|
1355
|
+
source: "loop-agent",
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
command: "loop-agent plan complete",
|
|
1359
|
+
coverage: "model-callable",
|
|
1360
|
+
action: "planComplete",
|
|
1361
|
+
source: "loop-agent",
|
|
1362
|
+
},
|
|
1363
|
+
{
|
|
1364
|
+
command: "loop-agent plan check",
|
|
1365
|
+
coverage: "model-callable",
|
|
1366
|
+
action: "planCheck",
|
|
1367
|
+
source: "loop-agent",
|
|
1368
|
+
},
|
|
1369
|
+
{
|
|
1370
|
+
command: "loop-agent spine audit",
|
|
1371
|
+
coverage: "model-callable",
|
|
1372
|
+
action: "spineCheck",
|
|
1373
|
+
source: "loop-agent",
|
|
1374
|
+
},
|
|
1375
|
+
{
|
|
1376
|
+
command: "loop-agent handoff check",
|
|
1377
|
+
coverage: "model-callable",
|
|
1378
|
+
action: "handoffCheck",
|
|
1379
|
+
source: "loop-agent",
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
command: "loop-agent handoff coverage",
|
|
1383
|
+
coverage: "model-callable",
|
|
1384
|
+
action: "handoffCoverage",
|
|
1385
|
+
source: "loop-agent",
|
|
1386
|
+
},
|
|
1387
|
+
{
|
|
1388
|
+
command: "loop-agent coverage report",
|
|
1389
|
+
coverage: "model-callable",
|
|
1390
|
+
action: "coverageReport",
|
|
1391
|
+
source: "loop-agent",
|
|
1392
|
+
},
|
|
1393
|
+
{
|
|
1394
|
+
command: "loop-agent reference index",
|
|
1395
|
+
coverage: "excluded",
|
|
1396
|
+
action: null,
|
|
1397
|
+
source: "loop-agent",
|
|
1398
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1399
|
+
},
|
|
1400
|
+
{
|
|
1401
|
+
command: "loop-agent study init",
|
|
1402
|
+
coverage: "excluded",
|
|
1403
|
+
action: null,
|
|
1404
|
+
source: "loop-agent",
|
|
1405
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1406
|
+
},
|
|
1407
|
+
{
|
|
1408
|
+
command: "loop-agent worktree create",
|
|
1409
|
+
coverage: "excluded",
|
|
1410
|
+
action: null,
|
|
1411
|
+
source: "loop-agent",
|
|
1412
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1413
|
+
},
|
|
1414
|
+
{
|
|
1415
|
+
command: "loop-agent worktree list",
|
|
1416
|
+
coverage: "excluded",
|
|
1417
|
+
action: null,
|
|
1418
|
+
source: "loop-agent",
|
|
1419
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1420
|
+
},
|
|
1421
|
+
{
|
|
1422
|
+
command: "loop-agent worktree remove",
|
|
1423
|
+
coverage: "excluded",
|
|
1424
|
+
action: null,
|
|
1425
|
+
source: "loop-agent",
|
|
1426
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1427
|
+
},
|
|
1428
|
+
{
|
|
1429
|
+
command: "loop-agent knowledge curate",
|
|
1430
|
+
coverage: "model-callable",
|
|
1431
|
+
action: "knowledgeCurate",
|
|
1432
|
+
source: "loop-agent",
|
|
1433
|
+
},
|
|
1434
|
+
{
|
|
1435
|
+
command: "loop-agent knowledge query",
|
|
1436
|
+
coverage: "model-callable",
|
|
1437
|
+
action: "knowledgeQuery",
|
|
1438
|
+
source: "loop-agent",
|
|
1439
|
+
},
|
|
1440
|
+
{
|
|
1441
|
+
command: "loop-agent knowledge graph-init",
|
|
1442
|
+
coverage: "advanced",
|
|
1443
|
+
action: "knowledgeGraphInit",
|
|
1444
|
+
source: "loop-agent",
|
|
1445
|
+
},
|
|
1446
|
+
{
|
|
1447
|
+
command: "loop-agent knowledge graph-materialize",
|
|
1448
|
+
coverage: "advanced",
|
|
1449
|
+
action: "knowledgeGraphMaterialize",
|
|
1450
|
+
source: "loop-agent",
|
|
1451
|
+
},
|
|
1452
|
+
{
|
|
1453
|
+
command: "loop-agent knowledge graph-promote",
|
|
1454
|
+
coverage: "advanced",
|
|
1455
|
+
action: "knowledgeGraphPromote",
|
|
1456
|
+
source: "loop-agent",
|
|
1457
|
+
},
|
|
1458
|
+
{
|
|
1459
|
+
command: "loop-agent knowledge graph-incremental-prepare",
|
|
1460
|
+
coverage: "advanced",
|
|
1461
|
+
action: "knowledgeGraphIncrementalPrepare",
|
|
1462
|
+
source: "loop-agent",
|
|
1463
|
+
},
|
|
1464
|
+
{
|
|
1465
|
+
command: "loop-agent dag init-hybrid",
|
|
1466
|
+
coverage: "advanced",
|
|
1467
|
+
action: "dagInitHybrid",
|
|
1468
|
+
source: "loop-agent",
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
command: "loop-agent dag validate",
|
|
1472
|
+
coverage: "model-callable",
|
|
1473
|
+
action: "dagValidate",
|
|
1474
|
+
source: "loop-agent",
|
|
1475
|
+
},
|
|
1476
|
+
{
|
|
1477
|
+
command: "loop-agent dag workflow-plan",
|
|
1478
|
+
coverage: "advanced",
|
|
1479
|
+
action: "dagWorkflowPlan",
|
|
1480
|
+
source: "loop-agent",
|
|
1481
|
+
},
|
|
1482
|
+
{
|
|
1483
|
+
command: "loop-agent dag workflow-validate",
|
|
1484
|
+
coverage: "advanced",
|
|
1485
|
+
action: "dagWorkflowValidate",
|
|
1486
|
+
source: "loop-agent",
|
|
1487
|
+
},
|
|
1488
|
+
{
|
|
1489
|
+
command: "loop-agent dag workflow-compile",
|
|
1490
|
+
coverage: "advanced",
|
|
1491
|
+
action: "dagWorkflowCompile",
|
|
1492
|
+
source: "loop-agent",
|
|
1493
|
+
},
|
|
1494
|
+
{
|
|
1495
|
+
command: "loop-agent dag approve",
|
|
1496
|
+
coverage: "human-gated-required",
|
|
1497
|
+
action: "dagApprove",
|
|
1498
|
+
source: "loop-agent",
|
|
1499
|
+
},
|
|
1500
|
+
{
|
|
1501
|
+
command: "loop-agent dag reject",
|
|
1502
|
+
coverage: "human-gated-required",
|
|
1503
|
+
action: "dagReject",
|
|
1504
|
+
source: "loop-agent",
|
|
1505
|
+
},
|
|
1506
|
+
{
|
|
1507
|
+
command: "loop-agent dag resume",
|
|
1508
|
+
coverage: "human-gated-required",
|
|
1509
|
+
action: "dagResume",
|
|
1510
|
+
source: "loop-agent",
|
|
1511
|
+
},
|
|
1512
|
+
{
|
|
1513
|
+
command: "loop-agent dag status",
|
|
1514
|
+
coverage: "model-callable",
|
|
1515
|
+
action: "dagStatus",
|
|
1516
|
+
source: "loop-agent",
|
|
1517
|
+
},
|
|
1518
|
+
{
|
|
1519
|
+
command: "loop-agent dag doctor",
|
|
1520
|
+
coverage: "model-callable",
|
|
1521
|
+
action: "dagDoctor",
|
|
1522
|
+
source: "loop-agent",
|
|
1523
|
+
},
|
|
1524
|
+
{
|
|
1525
|
+
command: "loop-agent dag report",
|
|
1526
|
+
coverage: "model-callable",
|
|
1527
|
+
action: "dagReport",
|
|
1528
|
+
source: "loop-agent",
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
command: "loop-agent dag closeout-draft",
|
|
1532
|
+
coverage: "model-callable",
|
|
1533
|
+
action: "dagCloseoutDraft",
|
|
1534
|
+
source: "loop-agent",
|
|
1535
|
+
},
|
|
1536
|
+
{
|
|
1537
|
+
command: "loop-agent dag reconcile-run",
|
|
1538
|
+
coverage: "human-gated-required",
|
|
1539
|
+
action: "dagReconcileRun",
|
|
1540
|
+
source: "loop-agent",
|
|
1541
|
+
},
|
|
1542
|
+
{
|
|
1543
|
+
command: "loop-agent dag rerun",
|
|
1544
|
+
coverage: "human-gated-required",
|
|
1545
|
+
action: "dagRerun",
|
|
1546
|
+
source: "loop-agent",
|
|
1547
|
+
},
|
|
1548
|
+
{
|
|
1549
|
+
command: "loop-agent dag rerun-task",
|
|
1550
|
+
coverage: "human-gated-required",
|
|
1551
|
+
action: "standaloneTaskRerun",
|
|
1552
|
+
source: "loop-agent",
|
|
1553
|
+
},
|
|
1554
|
+
{
|
|
1555
|
+
command: "loop-agent dag reconcile-tasks",
|
|
1556
|
+
coverage: "human-gated-required",
|
|
1557
|
+
action: "dagReconcileTasks",
|
|
1558
|
+
source: "loop-agent",
|
|
1559
|
+
},
|
|
1560
|
+
{
|
|
1561
|
+
command: "loop-agent dag final-verification",
|
|
1562
|
+
coverage: "human-gated-required",
|
|
1563
|
+
action: "dagFinalVerification",
|
|
1564
|
+
source: "loop-agent",
|
|
1565
|
+
},
|
|
1566
|
+
{
|
|
1567
|
+
command: "loop-agent workflow list",
|
|
1568
|
+
coverage: "advanced",
|
|
1569
|
+
action: "workflowList",
|
|
1570
|
+
source: "loop-agent",
|
|
1571
|
+
},
|
|
1572
|
+
{
|
|
1573
|
+
command: "loop-agent workflow inspect",
|
|
1574
|
+
coverage: "advanced",
|
|
1575
|
+
action: "workflowInspect",
|
|
1576
|
+
source: "loop-agent",
|
|
1577
|
+
},
|
|
1578
|
+
{
|
|
1579
|
+
command: "loop-agent workflow save",
|
|
1580
|
+
coverage: "advanced",
|
|
1581
|
+
action: "workflowSave",
|
|
1582
|
+
source: "loop-agent",
|
|
1583
|
+
},
|
|
1584
|
+
{
|
|
1585
|
+
command: "loop-agent workflow run",
|
|
1586
|
+
coverage: "advanced",
|
|
1587
|
+
action: "workflowRun",
|
|
1588
|
+
source: "loop-agent",
|
|
1589
|
+
},
|
|
1590
|
+
{
|
|
1591
|
+
command: "loop-agent workflow diff",
|
|
1592
|
+
coverage: "advanced",
|
|
1593
|
+
action: "workflowDiff",
|
|
1594
|
+
source: "loop-agent",
|
|
1595
|
+
},
|
|
1596
|
+
{
|
|
1597
|
+
command: "loop-agent workflow replay",
|
|
1598
|
+
coverage: "advanced",
|
|
1599
|
+
action: "workflowReplay",
|
|
1600
|
+
source: "loop-agent",
|
|
1601
|
+
},
|
|
1602
|
+
{
|
|
1603
|
+
command: "loop-agent loop init",
|
|
1604
|
+
coverage: "advanced",
|
|
1605
|
+
action: "loopInit",
|
|
1606
|
+
source: "loop-agent",
|
|
1607
|
+
},
|
|
1608
|
+
{
|
|
1609
|
+
command: "loop-agent loop status",
|
|
1610
|
+
coverage: "advanced",
|
|
1611
|
+
action: "loopStatus",
|
|
1612
|
+
source: "loop-agent",
|
|
1613
|
+
},
|
|
1614
|
+
{
|
|
1615
|
+
command: "loop-agent loop run",
|
|
1616
|
+
coverage: "advanced",
|
|
1617
|
+
action: "loopRun",
|
|
1618
|
+
source: "loop-agent",
|
|
1619
|
+
},
|
|
1620
|
+
{
|
|
1621
|
+
command: "loop-agent loop record-round",
|
|
1622
|
+
coverage: "advanced",
|
|
1623
|
+
action: "loopRecordRound",
|
|
1624
|
+
source: "loop-agent",
|
|
1625
|
+
},
|
|
1626
|
+
{
|
|
1627
|
+
command: "loop-agent loop add-signal",
|
|
1628
|
+
coverage: "advanced",
|
|
1629
|
+
action: "loopAddSignal",
|
|
1630
|
+
source: "loop-agent",
|
|
1631
|
+
},
|
|
1632
|
+
{
|
|
1633
|
+
command: "loop-agent loop closeout",
|
|
1634
|
+
coverage: "advanced",
|
|
1635
|
+
action: "loopCloseout",
|
|
1636
|
+
source: "loop-agent",
|
|
1637
|
+
},
|
|
1638
|
+
{
|
|
1639
|
+
command: "loop-agent dag decision inspect",
|
|
1640
|
+
coverage: "model-callable",
|
|
1641
|
+
action: "dagDecisionInspect",
|
|
1642
|
+
source: "loop-agent",
|
|
1643
|
+
},
|
|
1644
|
+
{
|
|
1645
|
+
command: "loop-agent dag decision validate",
|
|
1646
|
+
coverage: "model-callable",
|
|
1647
|
+
action: "dagDecisionValidate",
|
|
1648
|
+
source: "loop-agent",
|
|
1649
|
+
},
|
|
1650
|
+
{
|
|
1651
|
+
command: "loop-agent operator capabilities",
|
|
1652
|
+
coverage: "model-callable",
|
|
1653
|
+
action: "operatorCapabilities",
|
|
1654
|
+
source: "loop-agent",
|
|
1655
|
+
},
|
|
1656
|
+
{
|
|
1657
|
+
command: "loop-agent instructions source",
|
|
1658
|
+
coverage: "model-callable",
|
|
1659
|
+
action: "sourceInstructions",
|
|
1660
|
+
source: "loop-agent",
|
|
1661
|
+
},
|
|
1662
|
+
{
|
|
1663
|
+
command: "loop-agent instructions dag-draft",
|
|
1664
|
+
coverage: "excluded",
|
|
1665
|
+
action: null,
|
|
1666
|
+
source: "loop-agent",
|
|
1667
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1668
|
+
},
|
|
1669
|
+
{
|
|
1670
|
+
command: "loop-agent instructions task-artifacts",
|
|
1671
|
+
coverage: "excluded",
|
|
1672
|
+
action: null,
|
|
1673
|
+
source: "loop-agent",
|
|
1674
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1675
|
+
},
|
|
1676
|
+
{
|
|
1677
|
+
command: "loop-agent instructions promotion",
|
|
1678
|
+
coverage: "excluded",
|
|
1679
|
+
action: null,
|
|
1680
|
+
source: "loop-agent",
|
|
1681
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1682
|
+
},
|
|
1683
|
+
{
|
|
1684
|
+
command: "loop-agent instructions closeout",
|
|
1685
|
+
coverage: "excluded",
|
|
1686
|
+
action: null,
|
|
1687
|
+
source: "loop-agent",
|
|
1688
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1689
|
+
},
|
|
1690
|
+
{
|
|
1691
|
+
command: "loop-agent stats",
|
|
1692
|
+
coverage: "model-callable",
|
|
1693
|
+
action: "stats",
|
|
1694
|
+
source: "loop-agent",
|
|
1695
|
+
},
|
|
1696
|
+
{
|
|
1697
|
+
command: "loop-agent stats context",
|
|
1698
|
+
coverage: "model-callable",
|
|
1699
|
+
action: "statsContext",
|
|
1700
|
+
source: "loop-agent",
|
|
1701
|
+
},
|
|
1702
|
+
{
|
|
1703
|
+
command: "agent-worker feature review",
|
|
1704
|
+
coverage: "model-callable",
|
|
1705
|
+
action: "workerFeatureReview",
|
|
1706
|
+
source: "agent-worker",
|
|
1707
|
+
},
|
|
1708
|
+
{
|
|
1709
|
+
command: "agent-worker feature scaffold",
|
|
1710
|
+
coverage: "advanced",
|
|
1711
|
+
action: "workerFeatureScaffold",
|
|
1712
|
+
source: "agent-worker",
|
|
1713
|
+
},
|
|
1714
|
+
{
|
|
1715
|
+
command: "agent-worker feature run",
|
|
1716
|
+
coverage: "human-gated-required",
|
|
1717
|
+
action: "workerFeatureRun",
|
|
1718
|
+
source: "agent-worker",
|
|
1719
|
+
},
|
|
1720
|
+
{
|
|
1721
|
+
command: "agent-worker feature advance",
|
|
1722
|
+
coverage: "human-gated-required",
|
|
1723
|
+
action: "workerFeatureAdvance",
|
|
1724
|
+
source: "agent-worker",
|
|
1725
|
+
},
|
|
1726
|
+
{
|
|
1727
|
+
command: "agent-worker feature doctor",
|
|
1728
|
+
coverage: "model-callable",
|
|
1729
|
+
action: "workerFeatureDoctor",
|
|
1730
|
+
source: "agent-worker",
|
|
1731
|
+
},
|
|
1732
|
+
{
|
|
1733
|
+
command: "agent-worker feature verify-final",
|
|
1734
|
+
coverage: "human-gated-required",
|
|
1735
|
+
action: "workerFeatureVerifyFinal",
|
|
1736
|
+
source: "agent-worker",
|
|
1737
|
+
},
|
|
1738
|
+
{
|
|
1739
|
+
command: "agent-worker feature delivery",
|
|
1740
|
+
coverage: "human-gated-required",
|
|
1741
|
+
action: "workerFeatureDelivery",
|
|
1742
|
+
source: "agent-worker",
|
|
1743
|
+
},
|
|
1744
|
+
{
|
|
1745
|
+
command: "agent-worker feature closeout",
|
|
1746
|
+
coverage: "human-gated-required",
|
|
1747
|
+
action: "workerFeatureCloseout",
|
|
1748
|
+
source: "agent-worker",
|
|
1749
|
+
},
|
|
1750
|
+
{
|
|
1751
|
+
command: "agent-worker feature approve-followup",
|
|
1752
|
+
coverage: "advanced",
|
|
1753
|
+
action: "workerFeatureApproveFollowup",
|
|
1754
|
+
source: "agent-worker",
|
|
1755
|
+
},
|
|
1756
|
+
{
|
|
1757
|
+
command: "agent-worker task validate",
|
|
1758
|
+
coverage: "model-callable",
|
|
1759
|
+
action: "workerTaskValidate",
|
|
1760
|
+
source: "agent-worker",
|
|
1761
|
+
},
|
|
1762
|
+
{
|
|
1763
|
+
command: "agent-worker task explain-profile",
|
|
1764
|
+
coverage: "excluded",
|
|
1765
|
+
action: null,
|
|
1766
|
+
source: "agent-worker",
|
|
1767
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1768
|
+
},
|
|
1769
|
+
{
|
|
1770
|
+
command: "agent-worker task validate-feature",
|
|
1771
|
+
coverage: "excluded",
|
|
1772
|
+
action: null,
|
|
1773
|
+
source: "agent-worker",
|
|
1774
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
command: "agent-worker task reconcile",
|
|
1778
|
+
coverage: "human-gated-required",
|
|
1779
|
+
action: "workerTaskReconcile",
|
|
1780
|
+
source: "agent-worker",
|
|
1781
|
+
},
|
|
1782
|
+
{
|
|
1783
|
+
command: "agent-worker task retry",
|
|
1784
|
+
coverage: "human-gated-required",
|
|
1785
|
+
action: "workerTaskRetry",
|
|
1786
|
+
source: "agent-worker",
|
|
1787
|
+
},
|
|
1788
|
+
{
|
|
1789
|
+
command: "agent-worker task draft-followup",
|
|
1790
|
+
coverage: "advanced",
|
|
1791
|
+
action: "workerTaskDraftFollowup",
|
|
1792
|
+
source: "agent-worker",
|
|
1793
|
+
},
|
|
1794
|
+
{
|
|
1795
|
+
command: "agent-worker batch plan-ready",
|
|
1796
|
+
coverage: "model-callable",
|
|
1797
|
+
action: "workerBatchPlanReady",
|
|
1798
|
+
source: "agent-worker",
|
|
1799
|
+
},
|
|
1800
|
+
{
|
|
1801
|
+
command: "agent-worker batch run-ready",
|
|
1802
|
+
coverage: "advanced",
|
|
1803
|
+
action: "workerBatchRunReady",
|
|
1804
|
+
source: "agent-worker",
|
|
1805
|
+
},
|
|
1806
|
+
{
|
|
1807
|
+
command: "agent-worker pool mark-failed",
|
|
1808
|
+
coverage: "human-gated-required",
|
|
1809
|
+
action: "workerPoolMarkFailed",
|
|
1810
|
+
source: "agent-worker",
|
|
1811
|
+
},
|
|
1812
|
+
{
|
|
1813
|
+
command: "agent-worker pool doctor",
|
|
1814
|
+
coverage: "model-callable",
|
|
1815
|
+
action: "workerPoolDoctor",
|
|
1816
|
+
source: "agent-worker",
|
|
1817
|
+
},
|
|
1818
|
+
{
|
|
1819
|
+
command: "agent-worker pool migrate-state",
|
|
1820
|
+
coverage: "excluded",
|
|
1821
|
+
action: null,
|
|
1822
|
+
source: "agent-worker",
|
|
1823
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1824
|
+
},
|
|
1825
|
+
{
|
|
1826
|
+
command: "agent-worker feature git advance-checkpoint",
|
|
1827
|
+
coverage: "excluded",
|
|
1828
|
+
action: null,
|
|
1829
|
+
source: "agent-worker",
|
|
1830
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1831
|
+
},
|
|
1832
|
+
{
|
|
1833
|
+
command: "agent-worker report morning",
|
|
1834
|
+
coverage: "model-callable",
|
|
1835
|
+
action: "workerReportMorning",
|
|
1836
|
+
source: "agent-worker",
|
|
1837
|
+
},
|
|
1838
|
+
{
|
|
1839
|
+
command: "agent-worker report metrics",
|
|
1840
|
+
coverage: "model-callable",
|
|
1841
|
+
action: "workerReportMetrics",
|
|
1842
|
+
source: "agent-worker",
|
|
1843
|
+
},
|
|
1844
|
+
{
|
|
1845
|
+
command: "agent-worker observe serve",
|
|
1846
|
+
coverage: "excluded",
|
|
1847
|
+
action: null,
|
|
1848
|
+
source: "agent-worker",
|
|
1849
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1850
|
+
},
|
|
1851
|
+
{
|
|
1852
|
+
command: "agent-worker observe snapshot",
|
|
1853
|
+
coverage: "excluded",
|
|
1854
|
+
action: null,
|
|
1855
|
+
source: "agent-worker",
|
|
1856
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1857
|
+
},
|
|
1858
|
+
{
|
|
1859
|
+
command: "agent-worker console serve",
|
|
1860
|
+
coverage: "excluded",
|
|
1861
|
+
action: null,
|
|
1862
|
+
source: "agent-worker",
|
|
1863
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1864
|
+
},
|
|
1865
|
+
{
|
|
1866
|
+
command: "agent-worker console doctor",
|
|
1867
|
+
coverage: "excluded",
|
|
1868
|
+
action: null,
|
|
1869
|
+
source: "agent-worker",
|
|
1870
|
+
exclusionReason: "Not exposed to Operator Chat in M5.",
|
|
1871
|
+
},
|
|
766
1872
|
]);
|
|
767
1873
|
export function assertCoverageManifestConsistent() {
|
|
768
|
-
const actions = new Map(buildOperatorCapabilitiesDocument().actions.map((entry) => [
|
|
1874
|
+
const actions = new Map(buildOperatorCapabilitiesDocument().actions.map((entry) => [
|
|
1875
|
+
entry.action,
|
|
1876
|
+
entry,
|
|
1877
|
+
]));
|
|
769
1878
|
const seen = new Set();
|
|
770
1879
|
for (const entry of OPERATOR_COMMAND_COVERAGE) {
|
|
771
1880
|
if (seen.has(entry.command))
|
|
@@ -781,11 +1890,17 @@ export function assertCoverageManifestConsistent() {
|
|
|
781
1890
|
throw new Error(`coverage references unknown action: ${entry.action}`);
|
|
782
1891
|
if (entry.coverage === "excluded" && capability.modelCallable !== "never")
|
|
783
1892
|
throw new Error(`excluded action is model-callable: ${entry.action}`);
|
|
784
|
-
if (entry.coverage === "model-callable" &&
|
|
1893
|
+
if (entry.coverage === "model-callable" &&
|
|
1894
|
+
(capability.modelCallable !== "always" ||
|
|
1895
|
+
capability.humanConfirmation !== "none"))
|
|
785
1896
|
throw new Error(`invalid model-callable classification: ${entry.action}`);
|
|
786
|
-
if (entry.coverage === "human-gated-conditional" &&
|
|
1897
|
+
if (entry.coverage === "human-gated-conditional" &&
|
|
1898
|
+
(capability.modelCallable !== "always" ||
|
|
1899
|
+
capability.humanConfirmation !== "conditional"))
|
|
787
1900
|
throw new Error(`invalid conditional gate classification: ${entry.action}`);
|
|
788
|
-
if (entry.coverage === "human-gated-required" &&
|
|
1901
|
+
if (entry.coverage === "human-gated-required" &&
|
|
1902
|
+
(capability.modelCallable !== "prepare-only" ||
|
|
1903
|
+
capability.humanConfirmation !== "required"))
|
|
789
1904
|
throw new Error(`invalid required gate classification: ${entry.action}`);
|
|
790
1905
|
if (entry.coverage === "advanced") {
|
|
791
1906
|
const expected = capability.kind === "read" ? "always" : "never";
|