@claudexor/schema 1.0.1 → 2.1.1

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 (278) hide show
  1. package/dist/agent-capabilities.d.ts +102 -30
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +49 -18
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/apply-eligibility.d.ts.map +1 -1
  6. package/dist/apply-eligibility.js +22 -6
  7. package/dist/apply-eligibility.js.map +1 -1
  8. package/dist/attachment.d.ts +117 -52
  9. package/dist/attachment.d.ts.map +1 -1
  10. package/dist/attachment.js +60 -45
  11. package/dist/attachment.js.map +1 -1
  12. package/dist/auth.d.ts +1444 -0
  13. package/dist/auth.d.ts.map +1 -0
  14. package/dist/auth.js +371 -0
  15. package/dist/auth.js.map +1 -0
  16. package/dist/budget.d.ts +147 -18
  17. package/dist/budget.d.ts.map +1 -1
  18. package/dist/budget.js +80 -22
  19. package/dist/budget.js.map +1 -1
  20. package/dist/config.d.ts +829 -135
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +195 -41
  23. package/dist/config.js.map +1 -1
  24. package/dist/context.d.ts +6 -6
  25. package/dist/context.d.ts.map +1 -1
  26. package/dist/context.js +31 -7
  27. package/dist/context.js.map +1 -1
  28. package/dist/control-gc.d.ts +185 -0
  29. package/dist/control-gc.d.ts.map +1 -0
  30. package/dist/control-gc.js +81 -0
  31. package/dist/control-gc.js.map +1 -0
  32. package/dist/control-operation-responses.d.ts +1298 -0
  33. package/dist/control-operation-responses.d.ts.map +1 -0
  34. package/dist/control-operation-responses.js +35 -0
  35. package/dist/control-operation-responses.js.map +1 -0
  36. package/dist/control-run-detail.d.ts +556 -247
  37. package/dist/control-run-detail.d.ts.map +1 -1
  38. package/dist/control-run-detail.js +72 -17
  39. package/dist/control-run-detail.js.map +1 -1
  40. package/dist/control-run-retry.d.ts +88 -0
  41. package/dist/control-run-retry.d.ts.map +1 -0
  42. package/dist/control-run-retry.js +40 -0
  43. package/dist/control-run-retry.js.map +1 -0
  44. package/dist/control-run-scope.d.ts +25 -0
  45. package/dist/control-run-scope.d.ts.map +1 -0
  46. package/dist/control-run-scope.js +22 -0
  47. package/dist/control-run-scope.js.map +1 -0
  48. package/dist/control-secret.d.ts +90 -0
  49. package/dist/control-secret.d.ts.map +1 -0
  50. package/dist/control-secret.js +35 -0
  51. package/dist/control-secret.js.map +1 -0
  52. package/dist/control-spec.d.ts +592 -0
  53. package/dist/control-spec.d.ts.map +1 -0
  54. package/dist/control-spec.js +85 -0
  55. package/dist/control-spec.js.map +1 -0
  56. package/dist/control-thread-apply.d.ts +175 -0
  57. package/dist/control-thread-apply.d.ts.map +1 -0
  58. package/dist/control-thread-apply.js +31 -0
  59. package/dist/control-thread-apply.js.map +1 -0
  60. package/dist/control-trust.d.ts +74 -10
  61. package/dist/control-trust.d.ts.map +1 -1
  62. package/dist/control-trust.js +31 -11
  63. package/dist/control-trust.js.map +1 -1
  64. package/dist/control.d.ts +1688 -1334
  65. package/dist/control.d.ts.map +1 -1
  66. package/dist/control.js +592 -333
  67. package/dist/control.js.map +1 -1
  68. package/dist/credential-profile.d.ts +454 -0
  69. package/dist/credential-profile.d.ts.map +1 -0
  70. package/dist/credential-profile.js +140 -0
  71. package/dist/credential-profile.js.map +1 -0
  72. package/dist/decision.d.ts +10 -10
  73. package/dist/decision.d.ts.map +1 -1
  74. package/dist/decision.js +62 -15
  75. package/dist/decision.js.map +1 -1
  76. package/dist/delivery.d.ts +99 -0
  77. package/dist/delivery.d.ts.map +1 -0
  78. package/dist/delivery.js +19 -0
  79. package/dist/delivery.js.map +1 -0
  80. package/dist/events.d.ts +41 -4
  81. package/dist/events.d.ts.map +1 -1
  82. package/dist/events.js +47 -4
  83. package/dist/events.js.map +1 -1
  84. package/dist/gate.d.ts +5 -5
  85. package/dist/gate.d.ts.map +1 -1
  86. package/dist/gate.js +25 -5
  87. package/dist/gate.js.map +1 -1
  88. package/dist/harness.d.ts +775 -237
  89. package/dist/harness.d.ts.map +1 -1
  90. package/dist/harness.js +314 -111
  91. package/dist/harness.js.map +1 -1
  92. package/dist/index.d.ts +19 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +19 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/operation.d.ts +185 -0
  97. package/dist/operation.d.ts.map +1 -0
  98. package/dist/operation.js +50 -0
  99. package/dist/operation.js.map +1 -0
  100. package/dist/orchestrate.d.ts +150 -22
  101. package/dist/orchestrate.d.ts.map +1 -1
  102. package/dist/orchestrate.js +117 -7
  103. package/dist/orchestrate.js.map +1 -1
  104. package/dist/primitives.d.ts.map +1 -1
  105. package/dist/primitives.js +4 -1
  106. package/dist/primitives.js.map +1 -1
  107. package/dist/problem.d.ts +29 -0
  108. package/dist/problem.d.ts.map +1 -0
  109. package/dist/problem.js +17 -0
  110. package/dist/problem.js.map +1 -0
  111. package/dist/project.d.ts +97 -0
  112. package/dist/project.d.ts.map +1 -0
  113. package/dist/project.js +27 -0
  114. package/dist/project.js.map +1 -0
  115. package/dist/quota.d.ts +269 -0
  116. package/dist/quota.d.ts.map +1 -0
  117. package/dist/quota.js +58 -0
  118. package/dist/quota.js.map +1 -0
  119. package/dist/raw.d.ts +195 -0
  120. package/dist/raw.d.ts.map +1 -0
  121. package/dist/raw.js +58 -0
  122. package/dist/raw.js.map +1 -0
  123. package/dist/readiness.d.ts +596 -0
  124. package/dist/readiness.d.ts.map +1 -0
  125. package/dist/readiness.js +87 -0
  126. package/dist/readiness.js.map +1 -0
  127. package/dist/recovery.d.ts +515 -0
  128. package/dist/recovery.d.ts.map +1 -0
  129. package/dist/recovery.js +93 -0
  130. package/dist/recovery.js.map +1 -0
  131. package/dist/request-requirements.d.ts +36 -0
  132. package/dist/request-requirements.d.ts.map +1 -0
  133. package/dist/request-requirements.js +29 -0
  134. package/dist/request-requirements.js.map +1 -0
  135. package/dist/review.d.ts +26 -26
  136. package/dist/review.d.ts.map +1 -1
  137. package/dist/review.js +50 -10
  138. package/dist/review.js.map +1 -1
  139. package/dist/route.d.ts +13 -13
  140. package/dist/route.d.ts.map +1 -1
  141. package/dist/route.js +19 -4
  142. package/dist/route.js.map +1 -1
  143. package/dist/setup.d.ts +9811 -0
  144. package/dist/setup.d.ts.map +1 -0
  145. package/dist/setup.js +475 -0
  146. package/dist/setup.js.map +1 -0
  147. package/dist/spec.d.ts +178 -61
  148. package/dist/spec.d.ts.map +1 -1
  149. package/dist/spec.js +69 -16
  150. package/dist/spec.js.map +1 -1
  151. package/dist/surface-run-controls.d.ts.map +1 -1
  152. package/dist/surface-run-controls.js +25 -21
  153. package/dist/surface-run-controls.js.map +1 -1
  154. package/dist/task.d.ts +1657 -60
  155. package/dist/task.d.ts.map +1 -1
  156. package/dist/task.js +144 -18
  157. package/dist/task.js.map +1 -1
  158. package/dist/telemetry.d.ts +487 -72
  159. package/dist/telemetry.d.ts.map +1 -1
  160. package/dist/telemetry.js +194 -16
  161. package/dist/telemetry.js.map +1 -1
  162. package/dist/thread.d.ts +89 -51
  163. package/dist/thread.d.ts.map +1 -1
  164. package/dist/thread.js +56 -11
  165. package/dist/thread.js.map +1 -1
  166. package/dist/tool-ref.d.ts +45 -0
  167. package/dist/tool-ref.d.ts.map +1 -0
  168. package/dist/tool-ref.js +45 -0
  169. package/dist/tool-ref.js.map +1 -0
  170. package/dist/workproduct.d.ts +3 -3
  171. package/dist/workproduct.d.ts.map +1 -1
  172. package/dist/workproduct.js.map +1 -1
  173. package/dist/workspace.d.ts +3 -3
  174. package/dist/workspace.d.ts.map +1 -1
  175. package/dist/workspace.js +12 -3
  176. package/dist/workspace.js.map +1 -1
  177. package/generated/AgentCapabilityCatalog.schema.json +53 -11
  178. package/generated/BudgetLease.schema.json +55 -6
  179. package/generated/BudgetObservation.schema.json +44 -7
  180. package/generated/ConformanceReport.schema.json +49 -0
  181. package/generated/ControlApplyCheckResponse.schema.json +34 -0
  182. package/generated/ControlArtifactListResponse.schema.json +57 -0
  183. package/generated/ControlAuthReadinessRefreshRequest.schema.json +38 -0
  184. package/generated/ControlAuthReadinessRefreshResponse.schema.json +85 -0
  185. package/generated/ControlCredentialProfileCreateRequest.schema.json +32 -0
  186. package/generated/ControlCredentialProfileCreateResponse.schema.json +142 -0
  187. package/generated/ControlCredentialProfileDeleteResponse.schema.json +107 -0
  188. package/generated/ControlCredentialProfilesResponse.schema.json +155 -0
  189. package/generated/ControlDeliveryResponse.schema.json +136 -0
  190. package/generated/ControlGcReceipt.schema.json +170 -0
  191. package/generated/ControlGcRequest.schema.json +18 -0
  192. package/generated/ControlHandshakeRequest.schema.json +26 -0
  193. package/generated/ControlHandshakeResponse.schema.json +30 -0
  194. package/generated/ControlHarnessListResponse.schema.json +198 -14
  195. package/generated/ControlHarnessModelsResponse.schema.json +19 -0
  196. package/generated/ControlHarnessSettingsPatch.schema.json +9 -12
  197. package/generated/ControlJournalEvent.schema.json +42 -0
  198. package/generated/ControlJournalExportReceipt.schema.json +49 -0
  199. package/generated/ControlJournalInspection.schema.json +149 -0
  200. package/generated/ControlJournalQuarantineReceipt.schema.json +55 -0
  201. package/generated/ControlJournalQuarantineRequest.schema.json +24 -0
  202. package/generated/ControlJournalValidation.schema.json +181 -0
  203. package/generated/ControlOperationCatalog.schema.json +128 -0
  204. package/generated/ControlOperationDescriptor.schema.json +110 -0
  205. package/generated/ControlProblem.schema.json +59 -0
  206. package/generated/ControlProject.schema.json +42 -0
  207. package/generated/ControlProjectListResponse.schema.json +54 -0
  208. package/generated/ControlProjectRegisterRequest.schema.json +19 -0
  209. package/generated/ControlProjectRelinkRequest.schema.json +19 -0
  210. package/generated/ControlQueuedRunInfo.schema.json +4 -2
  211. package/generated/ControlQuotaResponse.schema.json +177 -0
  212. package/generated/ControlResource.schema.json +59 -0
  213. package/generated/ControlRunAgainDraft.schema.json +539 -0
  214. package/generated/ControlRunDetail.schema.json +373 -34
  215. package/generated/ControlRunListResponse.schema.json +968 -0
  216. package/generated/ControlRunRetryResponse.schema.json +54 -0
  217. package/generated/ControlRunStartRequest.schema.json +123 -55
  218. package/generated/ControlRunStartResponse.schema.json +78 -0
  219. package/generated/ControlRunSummary.schema.json +312 -21
  220. package/generated/ControlSecretListResponse.schema.json +8 -14
  221. package/generated/ControlSecretMutationResponse.schema.json +32 -0
  222. package/generated/ControlSecretSetRequest.schema.json +27 -0
  223. package/generated/ControlSettingsSnapshot.schema.json +128 -44
  224. package/generated/ControlSettingsUpdateRequest.schema.json +119 -40
  225. package/generated/ControlSetupJob.schema.json +770 -64
  226. package/generated/ControlSetupJobCreateRequest.schema.json +16 -13
  227. package/generated/ControlSetupJobEvent.schema.json +869 -5
  228. package/generated/ControlSetupJobListFilter.schema.json +35 -0
  229. package/generated/ControlSetupJobListResponse.schema.json +770 -64
  230. package/generated/ControlSetupJobSnapshot.schema.json +878 -0
  231. package/generated/ControlSpecAnswersRequest.schema.json +74 -0
  232. package/generated/ControlSpecQuestionsRequest.schema.json +128 -2
  233. package/generated/ControlSpecSession.schema.json +249 -0
  234. package/generated/ControlSpecSessionListResponse.schema.json +261 -0
  235. package/generated/ControlThread.schema.json +36 -6
  236. package/generated/ControlThreadApplyResponse.schema.json +139 -0
  237. package/generated/ControlThreadCreateRequest.schema.json +6 -2
  238. package/generated/ControlThreadDetail.schema.json +64 -12
  239. package/generated/ControlThreadListResponse.schema.json +36 -6
  240. package/generated/ControlThreadTurnRequest.schema.json +413 -0
  241. package/generated/ControlThreadTurnResponse.schema.json +73 -0
  242. package/generated/ControlThreadUpdateRequest.schema.json +12 -1
  243. package/generated/ControlTrustListResponse.schema.json +6 -0
  244. package/generated/ControlTrustState.schema.json +6 -0
  245. package/generated/ControlTrustUpdateRequest.schema.json +65 -3
  246. package/generated/ControlUploadCreateRequest.schema.json +37 -0
  247. package/generated/ControlUploadFinalizeRequest.schema.json +17 -0
  248. package/generated/ControlUploadStatus.schema.json +40 -0
  249. package/generated/CredentialProfile.schema.json +78 -0
  250. package/generated/CredentialProfileStatus.schema.json +61 -0
  251. package/generated/DecisionRecord.schema.json +6 -3
  252. package/generated/GlobalConfig.schema.json +238 -55
  253. package/generated/HarnessEvent.schema.json +259 -11
  254. package/generated/HarnessManifest.schema.json +96 -14
  255. package/generated/HarnessModel.schema.json +19 -0
  256. package/generated/HarnessStatusDto.schema.json +198 -14
  257. package/generated/OrchestrateContract.schema.json +32 -6
  258. package/generated/OrchestratePlan.schema.json +20 -0
  259. package/generated/OrchestratePlanProgress.schema.json +61 -0
  260. package/generated/PaidBudget.schema.json +42 -0
  261. package/generated/Project.schema.json +45 -0
  262. package/generated/ProjectConfig.schema.json +45 -18
  263. package/generated/RawContextPacket.schema.json +184 -0
  264. package/generated/RawGitPatchEnvelope.schema.json +70 -0
  265. package/generated/RunEvent.schema.json +3 -0
  266. package/generated/RunTelemetry.schema.json +280 -0
  267. package/generated/SecretMetadata.schema.json +4 -7
  268. package/generated/Session.schema.json +14 -0
  269. package/generated/SpecPack.schema.json +118 -7
  270. package/generated/TaskContract.schema.json +224 -30
  271. package/generated/TestCommandInvocation.schema.json +45 -0
  272. package/generated/Thread.schema.json +74 -6
  273. package/generated/ThreadHeadPing.schema.json +40 -0
  274. package/generated/ThreadTurn.schema.json +24 -11
  275. package/generated/TrustConfig.schema.json +77 -0
  276. package/package.json +3 -2
  277. package/generated/ControlSetupJobConfirmRequest.schema.json +0 -18
  278. package/generated/ControlSpecFreezeRequest.schema.json +0 -83
@@ -90,12 +90,65 @@
90
90
  "additionalProperties": false,
91
91
  "description": "The user's request this run is held to."
92
92
  },
93
+ "instructions": {
94
+ "type": "string",
95
+ "description": "Caller-supplied per-run system-level instructions for task-producing lanes."
96
+ },
97
+ "output_schema": {
98
+ "anyOf": [
99
+ {
100
+ "type": "object",
101
+ "additionalProperties": {}
102
+ },
103
+ {
104
+ "type": "null"
105
+ }
106
+ ],
107
+ "default": null,
108
+ "description": "Normalized caller-supplied JSON Schema for the final answer; null when the run has no structured-output contract."
109
+ },
110
+ "auth_preference": {
111
+ "type": "string",
112
+ "enum": [
113
+ "subscription",
114
+ "api_key",
115
+ "auto"
116
+ ],
117
+ "description": "Requested auth route for the run (subscription/api_key/auto); the telemetry auth_route receipt carries the effective truth.",
118
+ "default": "auto"
119
+ },
120
+ "credential_profile_id": {
121
+ "anyOf": [
122
+ {
123
+ "type": "string",
124
+ "minLength": 1,
125
+ "description": "Non-empty identifier string."
126
+ },
127
+ {
128
+ "type": "null"
129
+ }
130
+ ],
131
+ "description": "Requested credential profile for the run; null = engine-default credentials (INV-135 route evidence).",
132
+ "default": null
133
+ },
134
+ "max_turns": {
135
+ "anyOf": [
136
+ {
137
+ "type": "integer",
138
+ "exclusiveMinimum": 0
139
+ },
140
+ {
141
+ "type": "null"
142
+ }
143
+ ],
144
+ "default": null,
145
+ "description": "Per-run turn cap (beats per-harness settings); null when the caller set none."
146
+ },
93
147
  "spec": {
94
148
  "type": "object",
95
149
  "properties": {
96
150
  "id": {
97
- "type": "string",
98
- "minLength": 1,
151
+ "$ref": "#/definitions/TaskContract/properties/credential_profile_id/anyOf/0",
99
152
  "description": "SpecPack id."
100
153
  },
101
154
  "hash": {
@@ -187,7 +240,7 @@
187
240
  "depends_on": {
188
241
  "type": "array",
189
242
  "items": {
190
- "$ref": "#/definitions/TaskContract/properties/spec/properties/id"
243
+ "$ref": "#/definitions/TaskContract/properties/credential_profile_id/anyOf/0"
191
244
  },
192
245
  "default": [],
193
246
  "description": "Ids of tasks this node depends on (graph edges)."
@@ -205,7 +258,7 @@
205
258
  "order": {
206
259
  "type": "array",
207
260
  "items": {
208
- "$ref": "#/definitions/TaskContract/properties/spec/properties/id"
261
+ "$ref": "#/definitions/TaskContract/properties/credential_profile_id/anyOf/0"
209
262
  },
210
263
  "default": [],
211
264
  "description": "Topological execution order (node ids); empty when there are no tasks."
@@ -232,6 +285,14 @@
232
285
  "default": [],
233
286
  "description": "Spec/config-owned globs whose changes escalate risk to a human-approval gate; cannot be suppressed by per-run protected-path approvals."
234
287
  },
288
+ "deny_paths": {
289
+ "type": "array",
290
+ "items": {
291
+ "type": "string"
292
+ },
293
+ "default": [],
294
+ "description": "Per-run globs no candidate may touch at all; enforced by the engine post-diff gate on envelope runs (in-place runs with deny_paths are refused). accept_risk may still deliver (INV-111)."
295
+ },
235
296
  "auto_protected_paths": {
236
297
  "type": "array",
237
298
  "items": {
@@ -280,27 +341,135 @@
280
341
  "items": {
281
342
  "type": "object",
282
343
  "properties": {
283
- "id": {
344
+ "program": {
284
345
  "type": "string",
285
346
  "minLength": 1,
286
- "description": "Test command id."
347
+ "pattern": "\\S",
348
+ "description": "Executable invoked directly without an implicit shell."
349
+ },
350
+ "args": {
351
+ "type": "array",
352
+ "items": {
353
+ "type": "string"
354
+ },
355
+ "default": [],
356
+ "description": "Exact argv passed to the executable."
357
+ },
358
+ "cwd": {
359
+ "type": "string",
360
+ "description": "Optional project-relative working directory for the command."
361
+ },
362
+ "envAllowlist": {
363
+ "type": "array",
364
+ "items": {
365
+ "$ref": "#/definitions/TaskContract/properties/constraints/properties/protected_path_approvals/items/properties/reason"
366
+ },
367
+ "default": [],
368
+ "description": "Non-secret parent environment names explicitly forwarded to the command."
287
369
  },
288
- "command": {
370
+ "id": {
289
371
  "type": "string",
290
- "description": "Shell command executed as a deterministic gate."
372
+ "minLength": 1,
373
+ "description": "Test command id."
291
374
  },
292
375
  "required": {
293
376
  "type": "boolean",
294
377
  "default": true,
295
378
  "description": "Whether this test must pass (vs advisory)."
379
+ },
380
+ "trust_required": {
381
+ "type": "boolean",
382
+ "default": false,
383
+ "description": "Whether this command originated in versioned project config."
384
+ },
385
+ "trust_grant": {
386
+ "anyOf": [
387
+ {
388
+ "type": "object",
389
+ "properties": {
390
+ "projectDigest": {
391
+ "type": "string",
392
+ "minLength": 1,
393
+ "description": "Digest of the canonical project identity."
394
+ },
395
+ "configDigest": {
396
+ "type": "string",
397
+ "minLength": 1,
398
+ "description": "Digest of the parsed versioned project config blob."
399
+ },
400
+ "commandDigest": {
401
+ "type": "string",
402
+ "minLength": 1,
403
+ "description": "Digest of the canonical command invocation."
404
+ },
405
+ "executablePath": {
406
+ "type": "string",
407
+ "description": "Resolved executable path approved by the operator."
408
+ },
409
+ "executableDigest": {
410
+ "type": "string",
411
+ "minLength": 1,
412
+ "description": "Digest of the resolved executable bytes."
413
+ },
414
+ "scriptPath": {
415
+ "type": [
416
+ "string",
417
+ "null"
418
+ ],
419
+ "default": null,
420
+ "description": "Resolved script path, when any."
421
+ },
422
+ "scriptDigest": {
423
+ "anyOf": [
424
+ {
425
+ "type": "string",
426
+ "minLength": 1,
427
+ "description": "Content hash in algo:hex form, e.g. \"sha256:abcd...\"."
428
+ },
429
+ {
430
+ "type": "null"
431
+ }
432
+ ],
433
+ "description": "Digest of the script bytes.",
434
+ "default": null
435
+ },
436
+ "accessProfile": {
437
+ "type": "string",
438
+ "enum": [
439
+ "readonly",
440
+ "workspace_write",
441
+ "full",
442
+ "external_sandbox_full",
443
+ "inherit_native"
444
+ ],
445
+ "description": "Effective access profile covered by this grant."
446
+ }
447
+ },
448
+ "required": [
449
+ "projectDigest",
450
+ "configDigest",
451
+ "commandDigest",
452
+ "executablePath",
453
+ "executableDigest",
454
+ "accessProfile"
455
+ ],
456
+ "additionalProperties": false,
457
+ "description": "External exact grant for one versioned project test command."
458
+ },
459
+ {
460
+ "type": "null"
461
+ }
462
+ ],
463
+ "description": "Matching external grant; null when none was found.",
464
+ "default": null
296
465
  }
297
466
  },
298
467
  "required": [
299
- "id",
300
- "command"
468
+ "program",
469
+ "id"
301
470
  ],
302
471
  "additionalProperties": false,
303
- "description": "A deterministic test command used as a verification gate."
472
+ "description": "A deterministic typed-argv test command used as a verification gate."
304
473
  },
305
474
  "default": [],
306
475
  "description": "Deterministic test commands configured as gates."
@@ -409,34 +578,59 @@
409
578
  "budget": {
410
579
  "type": "object",
411
580
  "properties": {
412
- "portfolio": {
581
+ "routing_goal": {
413
582
  "type": "string",
414
583
  "enum": [
415
- "daily-rich",
416
- "balanced",
417
- "cheapest",
418
- "strongest",
419
- "burn",
420
- "subscription-first",
421
- "api-overflow",
422
- "conserve-claude",
423
- "conserve-codex"
584
+ "auto",
585
+ "quality",
586
+ "economy"
424
587
  ],
425
- "description": "Budget portfolio weighting the harness router's quality/cost/latency and subscription-vs-API preferences (e.g. cheapest minimizes spend, burn maximizes quality, conserve-* deprioritizes one vendor).",
426
- "default": "subscription-first"
588
+ "description": "Routing objective: pace expiring quota, choose the highest declared quality tier, or minimize incremental paid spend.",
589
+ "default": "auto"
427
590
  },
428
- "max_usd": {
429
- "type": [
430
- "number",
431
- "null"
591
+ "paid_budget": {
592
+ "anyOf": [
593
+ {
594
+ "type": "object",
595
+ "properties": {
596
+ "kind": {
597
+ "type": "string",
598
+ "const": "unlimited"
599
+ }
600
+ },
601
+ "required": [
602
+ "kind"
603
+ ],
604
+ "additionalProperties": false
605
+ },
606
+ {
607
+ "type": "object",
608
+ "properties": {
609
+ "kind": {
610
+ "type": "string",
611
+ "const": "finite"
612
+ },
613
+ "maxUsd": {
614
+ "type": "number",
615
+ "minimum": 0
616
+ }
617
+ },
618
+ "required": [
619
+ "kind",
620
+ "maxUsd"
621
+ ],
622
+ "additionalProperties": false
623
+ }
432
624
  ],
433
- "default": null,
434
- "description": "Hard USD cap for the run; null = no cap."
625
+ "description": "Incremental-cash budget: explicitly unlimited or a finite non-negative USD cap.",
626
+ "default": {
627
+ "kind": "unlimited"
628
+ }
435
629
  }
436
630
  },
437
631
  "additionalProperties": false,
438
632
  "default": {},
439
- "description": "Budget portfolio and spend cap for the run."
633
+ "description": "Routing goal and explicit incremental-cash budget for the run."
440
634
  },
441
635
  "routing_models": {
442
636
  "type": "object",
@@ -0,0 +1,45 @@
1
+ {
2
+ "$ref": "#/definitions/TestCommandInvocation",
3
+ "definitions": {
4
+ "TestCommandInvocation": {
5
+ "type": "object",
6
+ "properties": {
7
+ "program": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "pattern": "\\S",
11
+ "description": "Executable invoked directly without an implicit shell."
12
+ },
13
+ "args": {
14
+ "type": "array",
15
+ "items": {
16
+ "type": "string"
17
+ },
18
+ "default": [],
19
+ "description": "Exact argv passed to the executable."
20
+ },
21
+ "cwd": {
22
+ "type": "string",
23
+ "description": "Optional project-relative working directory for the command."
24
+ },
25
+ "envAllowlist": {
26
+ "type": "array",
27
+ "items": {
28
+ "type": "string",
29
+ "minLength": 1,
30
+ "pattern": "\\S",
31
+ "description": "User-supplied string that must contain visible content, not just whitespace."
32
+ },
33
+ "default": [],
34
+ "description": "Non-secret parent environment names explicitly forwarded to the command."
35
+ }
36
+ },
37
+ "required": [
38
+ "program"
39
+ ],
40
+ "additionalProperties": false,
41
+ "description": "Canonical deterministic command invocation; no implicit shell parsing."
42
+ }
43
+ },
44
+ "$schema": "http://json-schema.org/draft-07/schema#"
45
+ }
@@ -81,6 +81,20 @@
81
81
  "description": "Preferred auth route: subscription (native/OAuth session), api_key (a stored API key), or auto (engine picks subscription-first with policy fallback). A preference, not a secret.",
82
82
  "default": "auto"
83
83
  },
84
+ "credential_profile_id": {
85
+ "anyOf": [
86
+ {
87
+ "type": "string",
88
+ "minLength": 1,
89
+ "description": "Non-empty identifier string."
90
+ },
91
+ {
92
+ "type": "null"
93
+ }
94
+ ],
95
+ "description": "Sticky credential profile for the thread; per-turn selection wins, null = engine-default credentials.",
96
+ "default": null
97
+ },
84
98
  "primary_harness": {
85
99
  "type": [
86
100
  "string",
@@ -124,6 +138,18 @@
124
138
  ],
125
139
  "default": null,
126
140
  "description": "Snapshot SHA the isolated worktree (or last apply) is based on."
141
+ },
142
+ "delivered_through_run_id": {
143
+ "anyOf": [
144
+ {
145
+ "$ref": "#/definitions/Thread/properties/credential_profile_id/anyOf/0"
146
+ },
147
+ {
148
+ "type": "null"
149
+ }
150
+ ],
151
+ "description": "Last run in the lineage prefix already delivered from this isolated thread.",
152
+ "default": null
127
153
  }
128
154
  },
129
155
  "additionalProperties": false,
@@ -133,9 +159,7 @@
133
159
  "run_ids": {
134
160
  "type": "array",
135
161
  "items": {
136
- "type": "string",
137
- "minLength": 1,
138
- "description": "Non-empty identifier string."
162
+ "$ref": "#/definitions/Thread/properties/credential_profile_id/anyOf/0"
139
163
  },
140
164
  "default": [],
141
165
  "description": "Ordered run lineage (each run is a turn move)."
@@ -143,7 +167,7 @@
143
167
  "head_run_id": {
144
168
  "anyOf": [
145
169
  {
146
- "$ref": "#/definitions/Thread/properties/run_ids/items"
170
+ "$ref": "#/definitions/Thread/properties/credential_profile_id/anyOf/0"
147
171
  },
148
172
  {
149
173
  "type": "null"
@@ -156,10 +180,54 @@
156
180
  "type": "string",
157
181
  "enum": [
158
182
  "active",
159
- "closed"
183
+ "closed",
184
+ "trashed",
185
+ "purged"
160
186
  ],
161
- "description": "Thread lifecycle state: active or explicitly closed (archived). Blocked is a live projection, not a thread state.",
187
+ "description": "Thread lifecycle state: active, closed, trashed for recovery, or terminally purged.",
162
188
  "default": "active"
189
+ },
190
+ "trashed_at": {
191
+ "anyOf": [
192
+ {
193
+ "type": "string",
194
+ "minLength": 1,
195
+ "description": "ISO-8601 timestamp string."
196
+ },
197
+ {
198
+ "type": "null"
199
+ }
200
+ ],
201
+ "description": "When the thread entered recoverable trash.",
202
+ "default": null
203
+ },
204
+ "purge_after": {
205
+ "anyOf": [
206
+ {
207
+ "$ref": "#/definitions/Thread/properties/trashed_at/anyOf/0"
208
+ },
209
+ {
210
+ "type": "null"
211
+ }
212
+ ],
213
+ "description": "Earliest automatic purge time; 30 days after trash.",
214
+ "default": null
215
+ },
216
+ "pre_trash_state": {
217
+ "anyOf": [
218
+ {
219
+ "type": "string",
220
+ "enum": [
221
+ "active",
222
+ "closed"
223
+ ]
224
+ },
225
+ {
226
+ "type": "null"
227
+ }
228
+ ],
229
+ "default": null,
230
+ "description": "Lifecycle state restored while the trash retention window remains open."
163
231
  }
164
232
  },
165
233
  "required": [
@@ -0,0 +1,40 @@
1
+ {
2
+ "$ref": "#/definitions/ThreadHeadPing",
3
+ "definitions": {
4
+ "ThreadHeadPing": {
5
+ "type": "object",
6
+ "properties": {
7
+ "thread_id": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "description": "Non-empty identifier string."
11
+ },
12
+ "project_id": {
13
+ "anyOf": [
14
+ {
15
+ "type": "string",
16
+ "minLength": 1
17
+ },
18
+ {
19
+ "type": "null"
20
+ }
21
+ ],
22
+ "description": "Owning project id, or null for a no-project (global-partition) thread."
23
+ },
24
+ "revision": {
25
+ "type": "integer",
26
+ "exclusiveMinimum": 0,
27
+ "description": "Monotonic per-thread mutation counter; consumers drop stale/duplicate pings."
28
+ }
29
+ },
30
+ "required": [
31
+ "thread_id",
32
+ "project_id",
33
+ "revision"
34
+ ],
35
+ "additionalProperties": false,
36
+ "description": "Payload of the `thread.head.updated` GLOBAL-partition journal event: a content-free sidebar invalidation ping emitted on every thread mutation (create / rename / archive / turn-add / run-terminal, from any surface). It carries identity only — consumers refetch the authoritative thread summary instead of trusting event content."
37
+ }
38
+ },
39
+ "$schema": "http://json-schema.org/draft-07/schema#"
40
+ }
@@ -72,10 +72,10 @@
72
72
  "items": {
73
73
  "type": "object",
74
74
  "properties": {
75
- "id": {
75
+ "resource_id": {
76
76
  "type": "string",
77
77
  "minLength": 1,
78
- "description": "Attachment id."
78
+ "description": "Immutable daemon resource id."
79
79
  },
80
80
  "kind": {
81
81
  "type": "string",
@@ -83,30 +83,43 @@
83
83
  "image",
84
84
  "file"
85
85
  ],
86
- "description": "Kind of attachment: image (vision input) or file (generic bytes).",
87
- "default": "file"
86
+ "description": "Kind of attached resource: image input or generic file bytes."
88
87
  },
89
88
  "mime": {
90
89
  "type": "string",
91
- "default": "application/octet-stream",
92
- "description": "MIME type of the attachment content."
90
+ "minLength": 1,
91
+ "description": "Declared MIME type validated against adapter limits."
93
92
  },
94
93
  "name": {
95
94
  "type": "string",
96
- "default": "",
97
- "description": "Original file name as provided by the user or agent."
95
+ "description": "Original display name."
96
+ },
97
+ "sha256": {
98
+ "type": "string",
99
+ "minLength": 1,
100
+ "description": "Exact sha256 digest of the immutable bytes."
101
+ },
102
+ "size_bytes": {
103
+ "type": "integer",
104
+ "minimum": 0,
105
+ "description": "Exact byte length."
98
106
  },
99
107
  "path": {
100
108
  "type": "string",
101
- "description": "Resolved local path in the scoped attachment store (kept outside any worktree)."
109
+ "description": "Daemon-owned immutable blob path; internal adapter input only."
102
110
  }
103
111
  },
104
112
  "required": [
105
- "id",
113
+ "resource_id",
114
+ "kind",
115
+ "mime",
116
+ "name",
117
+ "sha256",
118
+ "size_bytes",
106
119
  "path"
107
120
  ],
108
121
  "additionalProperties": false,
109
- "description": "A user- or agent-provided file/image attached to a turn, stored in the scoped attachment store and forwarded to harnesses in their native shape."
122
+ "description": "Daemon-resolved immutable resource supplied to a harness adapter."
110
123
  },
111
124
  "default": [],
112
125
  "description": "Files/images the user attached to this turn (resolved scoped paths)."
@@ -34,6 +34,83 @@
34
34
  ],
35
35
  "default": null,
36
36
  "description": "Provenance only: repo root this trust file was written for; never gates anything. Null on legacy files written before this field."
37
+ },
38
+ "test_command_grants": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "object",
42
+ "properties": {
43
+ "projectDigest": {
44
+ "type": "string",
45
+ "minLength": 1,
46
+ "description": "Digest of the canonical project identity."
47
+ },
48
+ "configDigest": {
49
+ "type": "string",
50
+ "minLength": 1,
51
+ "description": "Digest of the parsed versioned project config blob."
52
+ },
53
+ "commandDigest": {
54
+ "type": "string",
55
+ "minLength": 1,
56
+ "description": "Digest of the canonical command invocation."
57
+ },
58
+ "executablePath": {
59
+ "type": "string",
60
+ "description": "Resolved executable path approved by the operator."
61
+ },
62
+ "executableDigest": {
63
+ "type": "string",
64
+ "minLength": 1,
65
+ "description": "Digest of the resolved executable bytes."
66
+ },
67
+ "scriptPath": {
68
+ "type": [
69
+ "string",
70
+ "null"
71
+ ],
72
+ "default": null,
73
+ "description": "Resolved script path, when any."
74
+ },
75
+ "scriptDigest": {
76
+ "anyOf": [
77
+ {
78
+ "type": "string",
79
+ "minLength": 1,
80
+ "description": "Content hash in algo:hex form, e.g. \"sha256:abcd...\"."
81
+ },
82
+ {
83
+ "type": "null"
84
+ }
85
+ ],
86
+ "description": "Digest of the script bytes.",
87
+ "default": null
88
+ },
89
+ "accessProfile": {
90
+ "type": "string",
91
+ "enum": [
92
+ "readonly",
93
+ "workspace_write",
94
+ "full",
95
+ "external_sandbox_full",
96
+ "inherit_native"
97
+ ],
98
+ "description": "Effective access profile covered by this grant."
99
+ }
100
+ },
101
+ "required": [
102
+ "projectDigest",
103
+ "configDigest",
104
+ "commandDigest",
105
+ "executablePath",
106
+ "executableDigest",
107
+ "accessProfile"
108
+ ],
109
+ "additionalProperties": false,
110
+ "description": "External exact grant for one versioned project test command."
111
+ },
112
+ "default": [],
113
+ "description": "External exact grants for versioned project test commands."
37
114
  }
38
115
  },
39
116
  "additionalProperties": false,