@claudexor/schema 5.1.0 → 6.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 (130) hide show
  1. package/dist/account-routing-evidence.d.ts +68 -0
  2. package/dist/account-routing-evidence.d.ts.map +1 -1
  3. package/dist/attempt-execution.d.ts +23 -0
  4. package/dist/attempt-execution.d.ts.map +1 -1
  5. package/dist/attempt-execution.js +2 -0
  6. package/dist/attempt-execution.js.map +1 -1
  7. package/dist/control-harness-list.d.ts +34 -0
  8. package/dist/control-harness-list.d.ts.map +1 -1
  9. package/dist/control-harness-models.d.ts +122 -0
  10. package/dist/control-harness-models.d.ts.map +1 -1
  11. package/dist/control-harness-models.js +2 -0
  12. package/dist/control-harness-models.js.map +1 -1
  13. package/dist/control-operation-responses.d.ts +21 -0
  14. package/dist/control-operation-responses.d.ts.map +1 -1
  15. package/dist/control-pending-interaction.d.ts +96 -0
  16. package/dist/control-pending-interaction.d.ts.map +1 -0
  17. package/dist/control-pending-interaction.js +42 -0
  18. package/dist/control-pending-interaction.js.map +1 -0
  19. package/dist/control-run-detail.d.ts +92 -0
  20. package/dist/control-run-detail.d.ts.map +1 -1
  21. package/dist/control-run-detail.js +2 -1
  22. package/dist/control-run-detail.js.map +1 -1
  23. package/dist/control-run-failure.d.ts +11 -0
  24. package/dist/control-run-failure.d.ts.map +1 -1
  25. package/dist/control-run-failure.js +6 -0
  26. package/dist/control-run-failure.js.map +1 -1
  27. package/dist/control-run-message.js +1 -1
  28. package/dist/control-run-message.js.map +1 -1
  29. package/dist/control.d.ts +30 -81
  30. package/dist/control.d.ts.map +1 -1
  31. package/dist/control.js +9 -26
  32. package/dist/control.js.map +1 -1
  33. package/dist/credential-profile-snapshot.d.ts +136 -0
  34. package/dist/credential-profile-snapshot.d.ts.map +1 -1
  35. package/dist/events.d.ts.map +1 -1
  36. package/dist/events.js +4 -6
  37. package/dist/events.js.map +1 -1
  38. package/dist/harness-interaction.d.ts +12 -0
  39. package/dist/harness-interaction.d.ts.map +1 -1
  40. package/dist/harness-interaction.js +11 -0
  41. package/dist/harness-interaction.js.map +1 -1
  42. package/dist/harness-maintenance.d.ts +3561 -717
  43. package/dist/harness-maintenance.d.ts.map +1 -1
  44. package/dist/harness-maintenance.js +107 -111
  45. package/dist/harness-maintenance.js.map +1 -1
  46. package/dist/harness-program.d.ts +2164 -0
  47. package/dist/harness-program.d.ts.map +1 -0
  48. package/dist/harness-program.js +110 -0
  49. package/dist/harness-program.js.map +1 -0
  50. package/dist/harness.d.ts +67 -0
  51. package/dist/harness.d.ts.map +1 -1
  52. package/dist/harness.js +9 -0
  53. package/dist/harness.js.map +1 -1
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +3 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp-run-result.d.ts +90 -0
  59. package/dist/mcp-run-result.d.ts.map +1 -1
  60. package/dist/mcp-run-wait.d.ts +5 -0
  61. package/dist/mcp-run-wait.d.ts.map +1 -1
  62. package/dist/mcp-run-wait.js +3 -2
  63. package/dist/mcp-run-wait.js.map +1 -1
  64. package/dist/model-operation.d.ts +1590 -0
  65. package/dist/model-operation.d.ts.map +1 -1
  66. package/dist/model-operation.js +41 -0
  67. package/dist/model-operation.js.map +1 -1
  68. package/dist/quota.d.ts +3 -2
  69. package/dist/quota.d.ts.map +1 -1
  70. package/dist/quota.js +3 -2
  71. package/dist/quota.js.map +1 -1
  72. package/dist/rate-limit.js +1 -1
  73. package/dist/rate-limit.js.map +1 -1
  74. package/dist/readiness.d.ts +26 -0
  75. package/dist/readiness.d.ts.map +1 -1
  76. package/dist/run-observation.d.ts +70 -0
  77. package/dist/run-observation.d.ts.map +1 -1
  78. package/dist/run-observation.js +31 -12
  79. package/dist/run-observation.js.map +1 -1
  80. package/dist/start-lookup.d.ts +268 -0
  81. package/dist/start-lookup.d.ts.map +1 -0
  82. package/dist/start-lookup.js +86 -0
  83. package/dist/start-lookup.js.map +1 -0
  84. package/dist/telemetry.d.ts +56 -0
  85. package/dist/telemetry.d.ts.map +1 -1
  86. package/dist/telemetry.js +2 -0
  87. package/dist/telemetry.js.map +1 -1
  88. package/dist/thread-history.d.ts +108 -0
  89. package/dist/thread-history.d.ts.map +1 -1
  90. package/generated/AttemptExecutionEvidence.schema.json +35 -0
  91. package/generated/ConformanceReport.schema.json +26 -0
  92. package/generated/ControlCredentialProfilesQueryResponse.schema.json +26 -0
  93. package/generated/ControlCredentialProfilesResourcesResponse.schema.json +26 -0
  94. package/generated/ControlCredentialProfilesSnapshotResponse.schema.json +26 -0
  95. package/generated/ControlHarnessAccountCatalog.schema.json +27 -0
  96. package/generated/ControlHarnessAccountModelsResponse.schema.json +27 -0
  97. package/generated/ControlHarnessListResponse.schema.json +26 -0
  98. package/generated/ControlHarnessMaintenanceCreateRequest.schema.json +2 -28
  99. package/generated/ControlHarnessMaintenanceInventory.schema.json +547 -184
  100. package/generated/ControlHarnessMaintenanceOperation.schema.json +211 -63
  101. package/generated/ControlHarnessModelsQueryResponse.schema.json +30 -0
  102. package/generated/ControlHarnessModelsResponse.schema.json +27 -0
  103. package/generated/ControlModelAccountCatalogResponse.schema.json +27 -0
  104. package/generated/ControlModelCatalogQueryResponse.schema.json +27 -0
  105. package/generated/ControlModelCatalogResponse.schema.json +27 -0
  106. package/generated/ControlModelOperationDetail.schema.json +103 -0
  107. package/generated/ControlPendingInteraction.schema.json +10 -1
  108. package/generated/ControlRunDetail.schema.json +66 -1
  109. package/generated/ControlRunListResponse.schema.json +21 -0
  110. package/generated/ControlRunMessageResponse.schema.json +1 -1
  111. package/generated/ControlRunSummary.schema.json +21 -0
  112. package/generated/ControlStartLookupResponse.schema.json +278 -0
  113. package/generated/ControlThreadDetail.schema.json +5 -0
  114. package/generated/HarnessEvent.schema.json +42 -1
  115. package/generated/HarnessManifest.schema.json +26 -0
  116. package/generated/HarnessProgram.schema.json +278 -0
  117. package/generated/HarnessProgramIdentity.schema.json +25 -0
  118. package/generated/HarnessStatusDto.schema.json +26 -0
  119. package/generated/McpAccountsToolResult.schema.json +26 -0
  120. package/generated/McpRunHandleResult.schema.json +51 -0
  121. package/generated/McpRunToolResult.schema.json +51 -0
  122. package/generated/McpRunWaitResult.schema.json +11 -2
  123. package/generated/NativeProgramEvidence.schema.json +38 -0
  124. package/generated/RunFailure.schema.json +16 -0
  125. package/generated/RunTelemetry.schema.json +35 -0
  126. package/generated/RunWaitManyInput.schema.json +4 -0
  127. package/generated/RunWaitManyResult.schema.json +30 -0
  128. package/generated/SelectedHarnessProgram.schema.json +56 -0
  129. package/generated/ThreadHistoryPage.schema.json +24 -0
  130. package/package.json +3 -3
@@ -9,6 +9,41 @@
9
9
  "items": {
10
10
  "type": "object",
11
11
  "properties": {
12
+ "programs": {
13
+ "type": "array",
14
+ "items": {
15
+ "type": "object",
16
+ "properties": {
17
+ "path": {
18
+ "type": [
19
+ "string",
20
+ "null"
21
+ ]
22
+ },
23
+ "version": {
24
+ "type": [
25
+ "string",
26
+ "null"
27
+ ]
28
+ },
29
+ "versionSource": {
30
+ "type": "string",
31
+ "enum": [
32
+ "vendor_stream",
33
+ "version_probe",
34
+ "remembered",
35
+ "unknown"
36
+ ]
37
+ }
38
+ },
39
+ "required": [
40
+ "path",
41
+ "version",
42
+ "versionSource"
43
+ ],
44
+ "additionalProperties": false
45
+ }
46
+ },
12
47
  "attemptId": {
13
48
  "type": "string",
14
49
  "minLength": 1,
@@ -706,6 +741,17 @@
706
741
  {
707
742
  "type": "object",
708
743
  "properties": {
744
+ "lastVendorError": {
745
+ "anyOf": [
746
+ {
747
+ "type": "string",
748
+ "maxLength": 1000
749
+ },
750
+ {
751
+ "type": "null"
752
+ }
753
+ ]
754
+ },
709
755
  "requestRefusal": {
710
756
  "anyOf": [
711
757
  {
@@ -1330,6 +1376,11 @@
1330
1376
  "items": {
1331
1377
  "type": "object",
1332
1378
  "properties": {
1379
+ "lastVendorError": {
1380
+ "type": "string",
1381
+ "maxLength": 1000,
1382
+ "description": "Last vendor diagnostic line, bounded and redacted; never classified."
1383
+ },
1333
1384
  "harnessId": {
1334
1385
  "type": "string",
1335
1386
  "minLength": 1,
@@ -2587,6 +2638,11 @@
2587
2638
  "default": false,
2588
2639
  "description": "True while at least one interactive question awaits answer, timeout, run-terminal, or interruption release."
2589
2640
  },
2641
+ "asyncQuestionsOnly": {
2642
+ "type": "boolean",
2643
+ "default": false,
2644
+ "description": "True while questions are pending and every one is async: the agent keeps working and the questions are attention only. False when none is pending or any pending question is blocking."
2645
+ },
2590
2646
  "processScope": {
2591
2647
  "anyOf": [
2592
2648
  {
@@ -5030,7 +5086,16 @@
5030
5086
  "null"
5031
5087
  ],
5032
5088
  "default": null,
5033
- "description": "When the interaction times out into a benign decline; null = no timeout."
5089
+ "description": "When the interaction expires unanswered; null = no automatic expiry. A blocking question then declines benignly; an async one closes and nothing is sent."
5090
+ },
5091
+ "delivery": {
5092
+ "type": "string",
5093
+ "enum": [
5094
+ "blocking",
5095
+ "async"
5096
+ ],
5097
+ "description": "How the asking agent waits for the answer: blocking (its native tool call waits until the question is answered, declined, expired or released) or async (the agent keeps working and an answer reaches it later as its next user message). Silence, expiry and the run's end never answer either kind.",
5098
+ "default": "blocking"
5034
5099
  }
5035
5100
  },
5036
5101
  "required": [
@@ -521,6 +521,17 @@
521
521
  {
522
522
  "type": "object",
523
523
  "properties": {
524
+ "lastVendorError": {
525
+ "anyOf": [
526
+ {
527
+ "type": "string",
528
+ "maxLength": 1000
529
+ },
530
+ {
531
+ "type": "null"
532
+ }
533
+ ]
534
+ },
524
535
  "requestRefusal": {
525
536
  "anyOf": [
526
537
  {
@@ -1145,6 +1156,11 @@
1145
1156
  "items": {
1146
1157
  "type": "object",
1147
1158
  "properties": {
1159
+ "lastVendorError": {
1160
+ "type": "string",
1161
+ "maxLength": 1000,
1162
+ "description": "Last vendor diagnostic line, bounded and redacted; never classified."
1163
+ },
1148
1164
  "harnessId": {
1149
1165
  "type": "string",
1150
1166
  "minLength": 1,
@@ -2409,6 +2425,11 @@
2409
2425
  "default": false,
2410
2426
  "description": "True while at least one interactive question awaits answer, timeout, run-terminal, or interruption release."
2411
2427
  },
2428
+ "asyncQuestionsOnly": {
2429
+ "type": "boolean",
2430
+ "default": false,
2431
+ "description": "True while questions are pending and every one is async: the agent keeps working and the questions are attention only. False when none is pending or any pending question is blocking."
2432
+ },
2412
2433
  "processScope": {
2413
2434
  "anyOf": [
2414
2435
  {
@@ -35,7 +35,7 @@
35
35
  "transport_lost",
36
36
  "response_timeout"
37
37
  ],
38
- "description": "Why the outcome is not delivered: no_active_turn (the harness has no active native turn), run_terminal, attempt_mismatch (expectedAttemptId is not the live attempt), no_live_session (no registered live attempt, no adapter channel, or no native session yet), multi_attempt (several live attempts and no expectedAttemptId), thread_bound (thread turns are not steerable in v1), interaction_pending (a question is open; the message was not sent), rpc_refused (the vendor refused the steer on a still-active turn), admission_persist_failed (the daemon could not journal admission; nothing was sent), transport_lost, response_timeout."
38
+ "description": "Why the outcome is not delivered: no_active_turn (the harness has no active native turn), run_terminal, attempt_mismatch (expectedAttemptId is not the live attempt), no_live_session (no registered live attempt, no adapter channel, or no native session yet), multi_attempt (several live attempts and no expectedAttemptId), thread_bound (thread turns are not steerable in v1), interaction_pending (a blocking question is open; the message was not sent), rpc_refused (the vendor refused the steer on a still-active turn), admission_persist_failed (the daemon could not journal admission; nothing was sent), transport_lost, response_timeout."
39
39
  },
40
40
  "runId": {
41
41
  "type": "string",
@@ -516,6 +516,17 @@
516
516
  {
517
517
  "type": "object",
518
518
  "properties": {
519
+ "lastVendorError": {
520
+ "anyOf": [
521
+ {
522
+ "type": "string",
523
+ "maxLength": 1000
524
+ },
525
+ {
526
+ "type": "null"
527
+ }
528
+ ]
529
+ },
519
530
  "requestRefusal": {
520
531
  "anyOf": [
521
532
  {
@@ -1140,6 +1151,11 @@
1140
1151
  "items": {
1141
1152
  "type": "object",
1142
1153
  "properties": {
1154
+ "lastVendorError": {
1155
+ "type": "string",
1156
+ "maxLength": 1000,
1157
+ "description": "Last vendor diagnostic line, bounded and redacted; never classified."
1158
+ },
1143
1159
  "harnessId": {
1144
1160
  "type": "string",
1145
1161
  "minLength": 1,
@@ -2404,6 +2420,11 @@
2404
2420
  "default": false,
2405
2421
  "description": "True while at least one interactive question awaits answer, timeout, run-terminal, or interruption release."
2406
2422
  },
2423
+ "asyncQuestionsOnly": {
2424
+ "type": "boolean",
2425
+ "default": false,
2426
+ "description": "True while questions are pending and every one is async: the agent keeps working and the questions are attention only. False when none is pending or any pending question is blocking."
2427
+ },
2407
2428
  "processScope": {
2408
2429
  "anyOf": [
2409
2430
  {
@@ -0,0 +1,278 @@
1
+ {
2
+ "$ref": "#/definitions/ControlStartLookupResponse",
3
+ "definitions": {
4
+ "ControlStartLookupResponse": {
5
+ "anyOf": [
6
+ {
7
+ "type": "object",
8
+ "properties": {
9
+ "status": {
10
+ "type": "string",
11
+ "const": "found"
12
+ },
13
+ "storeId": {
14
+ "type": "string",
15
+ "minLength": 1,
16
+ "description": "Identity of the durable engine store this read answered from, stable across restarts. A lookup without a store identity is refused as unavailable instead of answering."
17
+ },
18
+ "handle": {
19
+ "type": "object",
20
+ "properties": {
21
+ "jobId": {
22
+ "type": "string",
23
+ "minLength": 1,
24
+ "description": "The accepted daemon job."
25
+ },
26
+ "runId": {
27
+ "anyOf": [
28
+ {
29
+ "type": "string",
30
+ "minLength": 1,
31
+ "description": "Non-empty identifier string."
32
+ },
33
+ {
34
+ "type": "null"
35
+ }
36
+ ],
37
+ "description": "Run bound to the job at this read; null while none is bound, or for a job that ended before a run."
38
+ },
39
+ "state": {
40
+ "type": "string",
41
+ "enum": [
42
+ "queued",
43
+ "running",
44
+ "succeeded",
45
+ "failed",
46
+ "cancelled",
47
+ "interrupted"
48
+ ],
49
+ "description": "The job's lifecycle state at this read."
50
+ },
51
+ "runDir": {
52
+ "type": [
53
+ "string",
54
+ "null"
55
+ ],
56
+ "description": "Run artifact directory; null before a run."
57
+ },
58
+ "taskId": {
59
+ "type": [
60
+ "string",
61
+ "null"
62
+ ],
63
+ "description": "Task id; null before it is allocated."
64
+ },
65
+ "threadId": {
66
+ "$ref": "#/definitions/ControlStartLookupResponse/anyOf/0/properties/handle/properties/runId/anyOf/0",
67
+ "description": "Thread of an accepted turn."
68
+ },
69
+ "turnId": {
70
+ "$ref": "#/definitions/ControlStartLookupResponse/anyOf/0/properties/handle/properties/runId/anyOf/0",
71
+ "description": "The accepted turn."
72
+ },
73
+ "problem": {
74
+ "type": "object",
75
+ "properties": {
76
+ "message": {
77
+ "type": [
78
+ "string",
79
+ "null"
80
+ ],
81
+ "description": "Recorded failure message; null when none was kept."
82
+ },
83
+ "code": {
84
+ "anyOf": [
85
+ {
86
+ "type": "string",
87
+ "minLength": 1
88
+ },
89
+ {
90
+ "type": "null"
91
+ }
92
+ ],
93
+ "description": "Recorded machine code; null for an untyped failure."
94
+ },
95
+ "status": {
96
+ "anyOf": [
97
+ {
98
+ "type": "integer",
99
+ "minimum": 400,
100
+ "maximum": 599
101
+ },
102
+ {
103
+ "type": "null"
104
+ }
105
+ ],
106
+ "description": "HTTP status the start route answers for this failure; null when none is recorded."
107
+ },
108
+ "retryable": {
109
+ "type": [
110
+ "boolean",
111
+ "null"
112
+ ],
113
+ "description": "The recorded retryability; null when the producer made no claim."
114
+ },
115
+ "requiredActions": {
116
+ "type": "array",
117
+ "items": {
118
+ "type": "string",
119
+ "minLength": 1
120
+ },
121
+ "description": "Bounded actions recorded with the failure."
122
+ },
123
+ "context": {
124
+ "type": "object",
125
+ "additionalProperties": {},
126
+ "description": "Bounded recorded context; store and task-group identity are not repeated here."
127
+ }
128
+ },
129
+ "required": [
130
+ "message",
131
+ "code",
132
+ "status",
133
+ "retryable",
134
+ "requiredActions",
135
+ "context"
136
+ ],
137
+ "additionalProperties": false,
138
+ "description": "The refusal or failure an accepted job records. A lookup returns it with HTTP 200; it is the job's outcome, not a failure of the read."
139
+ }
140
+ },
141
+ "required": [
142
+ "jobId",
143
+ "runId",
144
+ "state"
145
+ ],
146
+ "additionalProperties": false,
147
+ "description": "Durable handle of the job a start request created, read without waiting for it."
148
+ }
149
+ },
150
+ "required": [
151
+ "status",
152
+ "storeId",
153
+ "handle"
154
+ ],
155
+ "additionalProperties": false,
156
+ "description": "The store retains the job this exact key and request created."
157
+ },
158
+ {
159
+ "type": "object",
160
+ "properties": {
161
+ "status": {
162
+ "type": "string",
163
+ "const": "turn_only"
164
+ },
165
+ "storeId": {
166
+ "$ref": "#/definitions/ControlStartLookupResponse/anyOf/0/properties/storeId"
167
+ },
168
+ "threadId": {
169
+ "$ref": "#/definitions/ControlStartLookupResponse/anyOf/0/properties/handle/properties/runId/anyOf/0"
170
+ },
171
+ "turnId": {
172
+ "type": "string",
173
+ "minLength": 1,
174
+ "description": "The turn this exact key and request recorded."
175
+ },
176
+ "runId": {
177
+ "anyOf": [
178
+ {
179
+ "$ref": "#/definitions/ControlStartLookupResponse/anyOf/0/properties/handle/properties/runId/anyOf/0"
180
+ },
181
+ {
182
+ "type": "null"
183
+ }
184
+ ],
185
+ "description": "Run bound to the turn; observe exactly this run. Null when no run is bound."
186
+ },
187
+ "enqueueError": {
188
+ "anyOf": [
189
+ {
190
+ "type": "object",
191
+ "properties": {
192
+ "message": {
193
+ "type": "string",
194
+ "description": "Human-readable refusal message."
195
+ },
196
+ "code": {
197
+ "type": [
198
+ "string",
199
+ "null"
200
+ ],
201
+ "default": null,
202
+ "description": "Machine-readable refusal code; remedies key on it, never on the message text."
203
+ },
204
+ "retryable": {
205
+ "type": "boolean",
206
+ "default": true,
207
+ "description": "False when no recorded job exists to replay — surfaces offer a new message instead of a doomed retry."
208
+ },
209
+ "requiredActions": {
210
+ "type": "array",
211
+ "items": {
212
+ "type": "string",
213
+ "minLength": 1,
214
+ "maxLength": 512
215
+ },
216
+ "maxItems": 16,
217
+ "default": [],
218
+ "description": "Bounded user actions that may make an exact retry succeed."
219
+ },
220
+ "context": {
221
+ "type": "object",
222
+ "additionalProperties": {},
223
+ "default": {},
224
+ "description": "Bounded typed recovery context for exact retry."
225
+ },
226
+ "failedAt": {
227
+ "type": "string",
228
+ "description": "When the enqueue failed."
229
+ }
230
+ },
231
+ "required": [
232
+ "message",
233
+ "failedAt"
234
+ ],
235
+ "additionalProperties": false
236
+ },
237
+ {
238
+ "type": "null"
239
+ }
240
+ ],
241
+ "default": null,
242
+ "description": "Why this turn has no run (enqueue/preflight refusal); null once a run binds."
243
+ }
244
+ },
245
+ "required": [
246
+ "status",
247
+ "storeId",
248
+ "threadId",
249
+ "turnId",
250
+ "runId"
251
+ ],
252
+ "additionalProperties": false,
253
+ "description": "The store retains the turn this exact key and request recorded, but no command bound to them: the enqueue failed or never happened, or retention removed the command. Nothing is enqueued for it."
254
+ },
255
+ {
256
+ "type": "object",
257
+ "properties": {
258
+ "status": {
259
+ "type": "string",
260
+ "const": "not_found"
261
+ },
262
+ "storeId": {
263
+ "$ref": "#/definitions/ControlStartLookupResponse/anyOf/0/properties/storeId"
264
+ }
265
+ },
266
+ "required": [
267
+ "status",
268
+ "storeId"
269
+ ],
270
+ "additionalProperties": false,
271
+ "description": "This store's current partition retains no binding for this key and request. It never proves that the original request was not accepted and never authorizes a new start."
272
+ }
273
+ ],
274
+ "description": "Read-only lookup of an accepted run or thread-turn start by its original request and Idempotency-Key."
275
+ }
276
+ },
277
+ "$schema": "http://json-schema.org/draft-07/schema#"
278
+ }
@@ -723,6 +723,11 @@
723
723
  "default": false,
724
724
  "description": "True while an interactive question is awaiting the user's answer."
725
725
  },
726
+ "asyncQuestionsOnly": {
727
+ "type": "boolean",
728
+ "default": false,
729
+ "description": "True while questions are pending and every one is async (the agent keeps working); false when none is pending or any is blocking."
730
+ },
726
731
  "finishedAt": {
727
732
  "type": [
728
733
  "string",
@@ -4,6 +4,38 @@
4
4
  "HarnessEvent": {
5
5
  "type": "object",
6
6
  "properties": {
7
+ "program": {
8
+ "type": "object",
9
+ "properties": {
10
+ "path": {
11
+ "type": [
12
+ "string",
13
+ "null"
14
+ ]
15
+ },
16
+ "version": {
17
+ "type": [
18
+ "string",
19
+ "null"
20
+ ]
21
+ },
22
+ "versionSource": {
23
+ "type": "string",
24
+ "enum": [
25
+ "vendor_stream",
26
+ "version_probe",
27
+ "remembered",
28
+ "unknown"
29
+ ]
30
+ }
31
+ },
32
+ "required": [
33
+ "path",
34
+ "version",
35
+ "versionSource"
36
+ ],
37
+ "additionalProperties": false
38
+ },
7
39
  "request_refusal": {
8
40
  "anyOf": [
9
41
  {
@@ -821,6 +853,15 @@
821
853
  ],
822
854
  "default": null,
823
855
  "description": "Native tool that raised the request (e.g. \"AskUserQuestion\")."
856
+ },
857
+ "delivery": {
858
+ "type": "string",
859
+ "enum": [
860
+ "blocking",
861
+ "async"
862
+ ],
863
+ "description": "How the asking agent waits for the answer: blocking (its native tool call waits until the question is answered, declined, expired or released) or async (the agent keeps working and an answer reaches it later as its next user message). Silence, expiry and the run's end never answer either kind.",
864
+ "default": "blocking"
824
865
  }
825
866
  },
826
867
  "required": [
@@ -1492,7 +1533,7 @@
1492
1533
  "enum": [
1493
1534
  "unknown"
1494
1535
  ],
1495
- "description": "unknown: the vendor's own typed code refused further usage on this account and named no reopening time, and the refusal is not known to be a timed window (Codex usage_limit_exceeded also covers a workspace out of credits). No reset is derived from it and the same account is never retried for it. Absent: resets_at, retry_delay_ms and the vendor's window say when to come back, as before."
1536
+ "description": "unknown: the vendor's own typed code refused further usage on this account and named no reopening time, and the refusal is not known to be a timed window (Codex usage_limit_exceeded and AGY's structured `Individual quota reached` also cover refusals whose scope is not a timed window). No reset is derived from it; the vendor's original failure evidence remains alongside the signal. Admission/continuation consumers decide whether the account is retried, and a typed refusal must not be mistaken for a transport failure. Absent: resets_at, retry_delay_ms and the vendor's window say when to come back, as before."
1496
1537
  }
1497
1538
  },
1498
1539
  "additionalProperties": false,
@@ -4,6 +4,32 @@
4
4
  "HarnessManifest": {
5
5
  "type": "object",
6
6
  "properties": {
7
+ "sourceProgram": {
8
+ "anyOf": [
9
+ {
10
+ "type": "object",
11
+ "properties": {
12
+ "path": {
13
+ "type": "string"
14
+ },
15
+ "version": {
16
+ "type": [
17
+ "string",
18
+ "null"
19
+ ]
20
+ }
21
+ },
22
+ "required": [
23
+ "path",
24
+ "version"
25
+ ],
26
+ "additionalProperties": false
27
+ },
28
+ {
29
+ "type": "null"
30
+ }
31
+ ]
32
+ },
7
33
  "id": {
8
34
  "type": "string",
9
35
  "minLength": 1,