@kylecheng3146/agent-ops 0.5.3 → 0.6.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.
Files changed (93) hide show
  1. package/README.md +48 -0
  2. package/dist/packages/cli/src/args.js +165 -2
  3. package/dist/packages/cli/src/bin.js +64 -17
  4. package/dist/packages/cli/src/cli.js +33 -6
  5. package/dist/packages/cli/src/commands/advance.js +23 -3
  6. package/dist/packages/cli/src/commands/review-show.js +1 -1
  7. package/dist/packages/cli/src/commands/review.js +100 -9
  8. package/dist/packages/cli/src/commands/run.js +111 -0
  9. package/dist/packages/cli/src/commands/task.js +61 -17
  10. package/dist/packages/cli/src/commands/verify.js +1 -0
  11. package/dist/packages/cli/src/context.js +63 -1
  12. package/dist/packages/cli/src/hook-process.js +31 -1
  13. package/dist/packages/cli/src/owned-run-step.js +65 -0
  14. package/dist/packages/cli/src/parallel-deps.js +18 -5
  15. package/dist/packages/cli/src/run-deps.js +314 -0
  16. package/dist/packages/cli/src/run-entry.js +943 -0
  17. package/dist/packages/cli/src/run-setup-entry.js +32 -0
  18. package/dist/packages/cli/src/run-step-entry.js +58 -0
  19. package/dist/runtime/src/config/explain.js +6 -0
  20. package/dist/runtime/src/config/hash.js +1 -1
  21. package/dist/runtime/src/config/merge.js +9 -1
  22. package/dist/runtime/src/contracts.js +2 -2
  23. package/dist/runtime/src/hooks/completion-gate.js +8 -2
  24. package/dist/runtime/src/install/doctor.js +2 -0
  25. package/dist/runtime/src/parallel/finish.js +85 -22
  26. package/dist/runtime/src/parallel/guard.js +5 -1
  27. package/dist/runtime/src/parallel/integrate.js +288 -10
  28. package/dist/runtime/src/parallel/manage.js +4 -1
  29. package/dist/runtime/src/parallel/receipt.js +71 -5
  30. package/dist/runtime/src/parallel/service.js +41 -1
  31. package/dist/runtime/src/review/attestation.js +36 -11
  32. package/dist/runtime/src/review/execute.js +24 -1
  33. package/dist/runtime/src/review/packet.js +35 -1
  34. package/dist/runtime/src/review/runner.js +12 -1
  35. package/dist/runtime/src/review/scope.js +18 -1
  36. package/dist/runtime/src/review/slots.js +35 -10
  37. package/dist/runtime/src/run/authorization.js +60 -0
  38. package/dist/runtime/src/run/budget.js +30 -0
  39. package/dist/runtime/src/run/controls.js +139 -0
  40. package/dist/runtime/src/run/convergence.js +177 -0
  41. package/dist/runtime/src/run/hosts/claude.js +180 -0
  42. package/dist/runtime/src/run/hosts/codex.js +279 -0
  43. package/dist/runtime/src/run/hosts/index.js +4 -0
  44. package/dist/runtime/src/run/hosts/protocol.js +254 -0
  45. package/dist/runtime/src/run/hosts/types.js +1 -0
  46. package/dist/runtime/src/run/hosts/util.js +136 -0
  47. package/dist/runtime/src/run/integration.js +204 -0
  48. package/dist/runtime/src/run/macOS.js +189 -0
  49. package/dist/runtime/src/run/ownership.js +22 -0
  50. package/dist/runtime/src/run/planning.js +25 -0
  51. package/dist/runtime/src/run/policy-transition.js +1076 -0
  52. package/dist/runtime/src/run/policy.js +176 -0
  53. package/dist/runtime/src/run/ratchet.js +71 -0
  54. package/dist/runtime/src/run/scheduler.js +260 -0
  55. package/dist/runtime/src/run/service.js +425 -0
  56. package/dist/runtime/src/run/supervisor.js +635 -0
  57. package/dist/runtime/src/run/transport.js +159 -0
  58. package/dist/runtime/src/run/types.js +1 -0
  59. package/dist/runtime/src/run/usage.js +81 -0
  60. package/dist/runtime/src/run/verification.js +64 -0
  61. package/dist/runtime/src/run/worker-gate.js +48 -0
  62. package/dist/runtime/src/schema/acceptance.js +91 -0
  63. package/dist/runtime/src/schema/validate.js +67 -7
  64. package/dist/runtime/src/task/completion.js +14 -2
  65. package/dist/runtime/src/task/contract.js +17 -0
  66. package/dist/runtime/src/task/pin-finding.js +81 -0
  67. package/dist/runtime/src/task/service.js +316 -13
  68. package/dist/runtime/src/task/store.js +57 -7
  69. package/dist/runtime/src/verify/acceptance-coverage.js +85 -0
  70. package/dist/runtime/src/verify/acceptance-protocol.js +252 -0
  71. package/dist/runtime/src/verify/acceptance-replay.js +239 -0
  72. package/dist/runtime/src/verify/adapters/index.js +5 -0
  73. package/dist/runtime/src/verify/adapters/jest.js +142 -0
  74. package/dist/runtime/src/verify/adapters/node-reporter.js +20 -0
  75. package/dist/runtime/src/verify/adapters/node.js +254 -0
  76. package/dist/runtime/src/verify/adapters/pytest.js +188 -0
  77. package/dist/runtime/src/verify/adapters/rust.js +84 -0
  78. package/dist/runtime/src/verify/adapters/shared.js +82 -0
  79. package/dist/runtime/src/verify/adapters/vitest.js +218 -0
  80. package/dist/runtime/src/verify/evidence.js +5 -2
  81. package/dist/runtime/src/verify/service.js +24 -8
  82. package/dist/runtime/src/verify/source-fingerprint.js +1 -1
  83. package/dist/runtime/src/verify/spawn.js +13 -2
  84. package/docs/en/spec/acceptance-and-evidence.md +48 -0
  85. package/docs/en/spec/loop-engineering.md +49 -0
  86. package/docs/zh-TW/spec/acceptance-and-evidence.md +21 -1
  87. package/docs/zh-TW/spec/loop-engineering.md +22 -0
  88. package/package.json +1 -1
  89. package/schemas/config.schema.json +221 -19
  90. package/schemas/evidence.schema.json +129 -6
  91. package/schemas/task.schema.json +265 -6
  92. package/templates/acceptance/agent_ops_acceptance.rs +36 -0
  93. package/templates/acceptance/agent_ops_pytest.py +46 -0
@@ -20,7 +20,12 @@
20
20
  "type": "array",
21
21
  "uniqueItems": true,
22
22
  "items": {
23
- "enum": ["core", "advisory", "guardrails", "loop"]
23
+ "enum": [
24
+ "core",
25
+ "advisory",
26
+ "guardrails",
27
+ "loop"
28
+ ]
24
29
  }
25
30
  },
26
31
  "reviewRoles": {
@@ -28,7 +33,10 @@
28
33
  "items": {
29
34
  "type": "object",
30
35
  "additionalProperties": false,
31
- "required": ["role", "targets"],
36
+ "required": [
37
+ "role",
38
+ "targets"
39
+ ],
32
40
  "properties": {
33
41
  "role": {
34
42
  "enum": [
@@ -43,19 +51,34 @@
43
51
  "minItems": 1,
44
52
  "uniqueItems": true,
45
53
  "items": {
46
- "enum": ["codex", "agy", "claude"]
54
+ "enum": [
55
+ "codex",
56
+ "agy",
57
+ "claude"
58
+ ]
47
59
  }
48
60
  },
49
- "model": { "type": "string", "minLength": 1 },
50
- "effort": { "type": "string", "minLength": 1 },
51
- "timeoutMs": { "type": "integer", "minimum": 1 }
61
+ "model": {
62
+ "type": "string",
63
+ "minLength": 1
64
+ },
65
+ "effort": {
66
+ "type": "string",
67
+ "minLength": 1
68
+ },
69
+ "timeoutMs": {
70
+ "type": "integer",
71
+ "minimum": 1
72
+ }
52
73
  }
53
74
  }
54
75
  },
55
76
  "verification": {
56
77
  "type": "object",
57
78
  "additionalProperties": false,
58
- "required": ["commands"],
79
+ "required": [
80
+ "commands"
81
+ ],
59
82
  "properties": {
60
83
  "commands": {
61
84
  "type": "array",
@@ -69,18 +92,163 @@
69
92
  }
70
93
  ]
71
94
  }
95
+ },
96
+ "acceptanceRunners": {
97
+ "type": "array",
98
+ "maxItems": 128,
99
+ "items": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": [
103
+ "id",
104
+ "command",
105
+ "args",
106
+ "cwd",
107
+ "adapter"
108
+ ],
109
+ "properties": {
110
+ "id": {
111
+ "$ref": "#/$defs/id"
112
+ },
113
+ "command": {
114
+ "type": "string",
115
+ "minLength": 1
116
+ },
117
+ "args": {
118
+ "type": "array",
119
+ "maxItems": 512,
120
+ "items": {
121
+ "type": "string"
122
+ }
123
+ },
124
+ "cwd": {
125
+ "type": "string",
126
+ "minLength": 1
127
+ },
128
+ "adapter": {
129
+ "enum": [
130
+ "generic",
131
+ "node",
132
+ "jest",
133
+ "vitest",
134
+ "pytest",
135
+ "rust"
136
+ ]
137
+ },
138
+ "timeoutMs": {
139
+ "type": "integer",
140
+ "minimum": 1,
141
+ "maximum": 3600000
142
+ },
143
+ "setup": {
144
+ "type": "array",
145
+ "maxItems": 64,
146
+ "items": {
147
+ "type": "object",
148
+ "additionalProperties": false,
149
+ "required": [
150
+ "command",
151
+ "args"
152
+ ],
153
+ "properties": {
154
+ "command": {
155
+ "type": "string",
156
+ "minLength": 1
157
+ },
158
+ "args": {
159
+ "type": "array",
160
+ "maxItems": 512,
161
+ "items": {
162
+ "type": "string"
163
+ }
164
+ },
165
+ "timeoutMs": {
166
+ "type": "integer",
167
+ "minimum": 1,
168
+ "maximum": 3600000
169
+ }
170
+ }
171
+ }
172
+ },
173
+ "build": {
174
+ "type": "array",
175
+ "maxItems": 64,
176
+ "items": {
177
+ "type": "object",
178
+ "additionalProperties": false,
179
+ "required": [
180
+ "command",
181
+ "args"
182
+ ],
183
+ "properties": {
184
+ "command": {
185
+ "type": "string",
186
+ "minLength": 1
187
+ },
188
+ "args": {
189
+ "type": "array",
190
+ "maxItems": 512,
191
+ "items": {
192
+ "type": "string"
193
+ }
194
+ },
195
+ "timeoutMs": {
196
+ "type": "integer",
197
+ "minimum": 1,
198
+ "maximum": 3600000
199
+ }
200
+ }
201
+ }
202
+ },
203
+ "testBuild": {
204
+ "type": "array",
205
+ "maxItems": 64,
206
+ "items": {
207
+ "type": "object",
208
+ "additionalProperties": false,
209
+ "required": [
210
+ "command",
211
+ "args"
212
+ ],
213
+ "properties": {
214
+ "command": {
215
+ "type": "string",
216
+ "minLength": 1
217
+ },
218
+ "args": {
219
+ "type": "array",
220
+ "maxItems": 512,
221
+ "items": {
222
+ "type": "string"
223
+ }
224
+ },
225
+ "timeoutMs": {
226
+ "type": "integer",
227
+ "minimum": 1,
228
+ "maximum": 3600000
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
72
235
  }
73
236
  }
74
237
  },
75
238
  "features": {
76
239
  "type": "object",
77
240
  "additionalProperties": false,
78
- "required": ["completionGate", "stopVerification"],
241
+ "required": [
242
+ "completionGate",
243
+ "stopVerification"
244
+ ],
79
245
  "properties": {
80
246
  "completionGate": {
81
247
  "type": "object",
82
248
  "additionalProperties": false,
83
- "required": ["enabled"],
249
+ "required": [
250
+ "enabled"
251
+ ],
84
252
  "properties": {
85
253
  "enabled": {
86
254
  "type": "boolean"
@@ -90,7 +258,9 @@
90
258
  "stopVerification": {
91
259
  "type": "object",
92
260
  "additionalProperties": false,
93
- "required": ["enabled"],
261
+ "required": [
262
+ "enabled"
263
+ ],
94
264
  "properties": {
95
265
  "enabled": {
96
266
  "type": "boolean"
@@ -104,7 +274,10 @@
104
274
  "items": {
105
275
  "type": "object",
106
276
  "additionalProperties": false,
107
- "required": ["path", "verifierIds"],
277
+ "required": [
278
+ "path",
279
+ "verifierIds"
280
+ ],
108
281
  "properties": {
109
282
  "path": {
110
283
  "$ref": "#/$defs/relativePath"
@@ -122,17 +295,25 @@
122
295
  "worktree": {
123
296
  "type": "object",
124
297
  "additionalProperties": false,
125
- "required": ["mode"],
298
+ "required": [
299
+ "mode"
300
+ ],
126
301
  "properties": {
127
302
  "mode": {
128
- "enum": ["auto", "off"]
303
+ "enum": [
304
+ "auto",
305
+ "off"
306
+ ]
129
307
  },
130
308
  "setup": {
131
309
  "type": "array",
132
310
  "items": {
133
311
  "type": "object",
134
312
  "additionalProperties": false,
135
- "required": ["command", "args"],
313
+ "required": [
314
+ "command",
315
+ "args"
316
+ ],
136
317
  "properties": {
137
318
  "command": {
138
319
  "$ref": "#/$defs/nonEmptyString"
@@ -159,7 +340,12 @@
159
340
  "items": {
160
341
  "type": "object",
161
342
  "additionalProperties": false,
162
- "required": ["ruleId", "scope", "expiresAt", "reason"],
343
+ "required": [
344
+ "ruleId",
345
+ "scope",
346
+ "expiresAt",
347
+ "reason"
348
+ ],
163
349
  "properties": {
164
350
  "ruleId": {
165
351
  "$ref": "#/$defs/id"
@@ -259,10 +445,16 @@
259
445
  "evidence": {
260
446
  "type": "object",
261
447
  "additionalProperties": false,
262
- "required": ["kind"],
448
+ "required": [
449
+ "kind"
450
+ ],
263
451
  "properties": {
264
452
  "kind": {
265
- "enum": ["exit-code", "test-count", "file"]
453
+ "enum": [
454
+ "exit-code",
455
+ "test-count",
456
+ "file"
457
+ ]
266
458
  },
267
459
  "minimum": {
268
460
  "type": "integer",
@@ -273,7 +465,14 @@
273
465
  },
274
466
  "commandFields": {
275
467
  "type": "object",
276
- "required": ["id", "command", "args", "cwd", "required", "evidence"],
468
+ "required": [
469
+ "id",
470
+ "command",
471
+ "args",
472
+ "cwd",
473
+ "required",
474
+ "evidence"
475
+ ],
277
476
  "properties": {
278
477
  "id": {
279
478
  "$ref": "#/$defs/id"
@@ -335,7 +534,10 @@
335
534
  {
336
535
  "type": "object",
337
536
  "additionalProperties": false,
338
- "required": ["shell", "acknowledgeRisk"],
537
+ "required": [
538
+ "shell",
539
+ "acknowledgeRisk"
540
+ ],
339
541
  "properties": {
340
542
  "id": true,
341
543
  "command": true,
@@ -24,7 +24,11 @@
24
24
  ],
25
25
  "properties": {
26
26
  "schemaVersion": {
27
- "enum": [2, 3]
27
+ "enum": [
28
+ 2,
29
+ 3,
30
+ 4
31
+ ]
28
32
  },
29
33
  "taskId": {
30
34
  "$ref": "#/$defs/id"
@@ -47,7 +51,10 @@
47
51
  "$ref": "#/$defs/relativePath"
48
52
  },
49
53
  "scope": {
50
- "enum": ["project", "user"]
54
+ "enum": [
55
+ "project",
56
+ "user"
57
+ ]
51
58
  },
52
59
  "startedAt": {
53
60
  "$ref": "#/$defs/timestamp"
@@ -56,17 +63,27 @@
56
63
  "$ref": "#/$defs/timestamp"
57
64
  },
58
65
  "exitCode": {
59
- "type": ["integer", "null"],
66
+ "type": [
67
+ "integer",
68
+ "null"
69
+ ],
60
70
  "minimum": 0,
61
71
  "maximum": 4294967295
62
72
  },
63
73
  "testCount": {
64
- "type": ["integer", "null"],
74
+ "type": [
75
+ "integer",
76
+ "null"
77
+ ],
65
78
  "minimum": 0,
66
79
  "maximum": 9007199254740991
67
80
  },
68
81
  "status": {
69
- "enum": ["PASS", "FAIL", "UNKNOWN"]
82
+ "enum": [
83
+ "PASS",
84
+ "FAIL",
85
+ "UNKNOWN"
86
+ ]
70
87
  },
71
88
  "failureClass": {
72
89
  "type": "string",
@@ -85,6 +102,92 @@
85
102
  },
86
103
  "configHash": {
87
104
  "$ref": "#/$defs/hash"
105
+ },
106
+ "taskContractHash": {
107
+ "type": "string",
108
+ "pattern": "^[a-f0-9]{64}$"
109
+ },
110
+ "acceptance": {
111
+ "type": "object",
112
+ "additionalProperties": false,
113
+ "required": [
114
+ "criterionContractHash",
115
+ "phase",
116
+ "commit",
117
+ "pairedCommit",
118
+ "materialDigest",
119
+ "executionDigest",
120
+ "checks",
121
+ "bindingHash",
122
+ "executionArtifact"
123
+ ],
124
+ "properties": {
125
+ "criterionContractHash": {
126
+ "type": "string",
127
+ "pattern": "^[a-f0-9]{64}$"
128
+ },
129
+ "phase": {
130
+ "enum": [
131
+ "baseline",
132
+ "candidate"
133
+ ]
134
+ },
135
+ "commit": {
136
+ "type": "string",
137
+ "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
138
+ },
139
+ "pairedCommit": {
140
+ "type": "string",
141
+ "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
142
+ },
143
+ "materialDigest": {
144
+ "type": "string",
145
+ "pattern": "^[a-f0-9]{64}$"
146
+ },
147
+ "executionDigest": {
148
+ "type": "string",
149
+ "pattern": "^[a-f0-9]{64}$"
150
+ },
151
+ "checks": {
152
+ "type": "array",
153
+ "minItems": 1,
154
+ "maxItems": 512,
155
+ "items": {
156
+ "type": "object",
157
+ "additionalProperties": false,
158
+ "required": [
159
+ "checkId",
160
+ "status",
161
+ "failureClass"
162
+ ],
163
+ "properties": {
164
+ "checkId": {
165
+ "type": "string",
166
+ "minLength": 1
167
+ },
168
+ "status": {
169
+ "enum": [
170
+ "PASS",
171
+ "FAIL",
172
+ "UNKNOWN"
173
+ ]
174
+ },
175
+ "failureClass": {
176
+ "type": "string",
177
+ "minLength": 1
178
+ }
179
+ }
180
+ }
181
+ },
182
+ "bindingHash": {
183
+ "type": "string",
184
+ "pattern": "^[a-f0-9]{64}$"
185
+ },
186
+ "executionArtifact": {
187
+ "type": "string",
188
+ "pattern": "^\\.agent-ops/tasks/acceptance/[a-f0-9]{64}\\.json$"
189
+ }
190
+ }
88
191
  }
89
192
  },
90
193
  "$defs": {
@@ -126,5 +229,25 @@
126
229
  ]
127
230
  }
128
231
  },
129
- "$comment": "Timestamp ordering is a semantic constraint enforced by runtime validation."
232
+ "$comment": "Timestamp ordering is a semantic constraint enforced by runtime validation.",
233
+ "allOf": [
234
+ {
235
+ "if": {
236
+ "properties": {
237
+ "schemaVersion": {
238
+ "enum": [
239
+ 2,
240
+ 3
241
+ ]
242
+ }
243
+ }
244
+ },
245
+ "then": {
246
+ "properties": {
247
+ "taskContractHash": false,
248
+ "acceptance": false
249
+ }
250
+ }
251
+ }
252
+ ]
130
253
  }