@claudexor/schema 2.1.2 → 3.0.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 (174) hide show
  1. package/dist/agent-capabilities.d.ts +32 -24
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +20 -11
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/apply-eligibility.d.ts +166 -0
  6. package/dist/apply-eligibility.d.ts.map +1 -1
  7. package/dist/apply-eligibility.js +63 -2
  8. package/dist/apply-eligibility.js.map +1 -1
  9. package/dist/attachment.d.ts +5 -5
  10. package/dist/budget.d.ts +4 -4
  11. package/dist/config.d.ts +59 -41
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +16 -6
  14. package/dist/config.js.map +1 -1
  15. package/dist/context.d.ts +6 -6
  16. package/dist/control-operation-responses.d.ts +190 -97
  17. package/dist/control-operation-responses.d.ts.map +1 -1
  18. package/dist/control-operation-responses.js +14 -1
  19. package/dist/control-operation-responses.js.map +1 -1
  20. package/dist/control-run-detail.d.ts +380 -215
  21. package/dist/control-run-detail.d.ts.map +1 -1
  22. package/dist/control-run-detail.js +54 -8
  23. package/dist/control-run-detail.js.map +1 -1
  24. package/dist/control-thread-apply.d.ts +5 -5
  25. package/dist/control-trust.d.ts +6 -6
  26. package/dist/control.d.ts +769 -323
  27. package/dist/control.d.ts.map +1 -1
  28. package/dist/control.js +164 -71
  29. package/dist/control.js.map +1 -1
  30. package/dist/credential-profile.d.ts +400 -1
  31. package/dist/credential-profile.d.ts.map +1 -1
  32. package/dist/credential-profile.js +109 -4
  33. package/dist/credential-profile.js.map +1 -1
  34. package/dist/decision.d.ts +78 -14
  35. package/dist/decision.d.ts.map +1 -1
  36. package/dist/decision.js +53 -20
  37. package/dist/decision.js.map +1 -1
  38. package/dist/delivery.d.ts +3 -3
  39. package/dist/delivery.js +1 -1
  40. package/dist/delivery.js.map +1 -1
  41. package/dist/events.d.ts +32 -6
  42. package/dist/events.d.ts.map +1 -1
  43. package/dist/events.js +46 -11
  44. package/dist/events.js.map +1 -1
  45. package/dist/gate.d.ts +4 -4
  46. package/dist/gate.d.ts.map +1 -1
  47. package/dist/gate.js +2 -2
  48. package/dist/gate.js.map +1 -1
  49. package/dist/harness.d.ts +137 -47
  50. package/dist/harness.d.ts.map +1 -1
  51. package/dist/harness.js +65 -16
  52. package/dist/harness.js.map +1 -1
  53. package/dist/index.d.ts +4 -3
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +4 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/operation.d.ts +66 -7
  58. package/dist/operation.d.ts.map +1 -1
  59. package/dist/operation.js +29 -2
  60. package/dist/operation.js.map +1 -1
  61. package/dist/output-schema.d.ts +40 -0
  62. package/dist/output-schema.d.ts.map +1 -0
  63. package/dist/output-schema.js +109 -0
  64. package/dist/output-schema.js.map +1 -0
  65. package/dist/plan.d.ts +206 -0
  66. package/dist/plan.d.ts.map +1 -0
  67. package/dist/plan.js +107 -0
  68. package/dist/plan.js.map +1 -0
  69. package/dist/primitives.d.ts +14 -10
  70. package/dist/primitives.d.ts.map +1 -1
  71. package/dist/primitives.js +14 -11
  72. package/dist/primitives.js.map +1 -1
  73. package/dist/project.d.ts +75 -0
  74. package/dist/project.d.ts.map +1 -1
  75. package/dist/project.js +17 -0
  76. package/dist/project.js.map +1 -1
  77. package/dist/quota.d.ts +119 -0
  78. package/dist/quota.d.ts.map +1 -1
  79. package/dist/quota.js +22 -0
  80. package/dist/quota.js.map +1 -1
  81. package/dist/raw.d.ts +4 -4
  82. package/dist/readiness.d.ts +14 -7
  83. package/dist/readiness.d.ts.map +1 -1
  84. package/dist/run-strategy.d.ts +17 -0
  85. package/dist/run-strategy.d.ts.map +1 -0
  86. package/dist/run-strategy.js +47 -0
  87. package/dist/run-strategy.js.map +1 -0
  88. package/dist/setup.d.ts +160 -160
  89. package/dist/status-projection.d.ts +78 -0
  90. package/dist/status-projection.d.ts.map +1 -0
  91. package/dist/status-projection.js +171 -0
  92. package/dist/status-projection.js.map +1 -0
  93. package/dist/task.d.ts +48 -316
  94. package/dist/task.d.ts.map +1 -1
  95. package/dist/task.js +3 -60
  96. package/dist/task.js.map +1 -1
  97. package/dist/telemetry.d.ts +89 -89
  98. package/dist/thread.d.ts +167 -32
  99. package/dist/thread.d.ts.map +1 -1
  100. package/dist/thread.js +92 -28
  101. package/dist/thread.js.map +1 -1
  102. package/dist/tool-ref.d.ts +1 -1
  103. package/generated/AgentCapabilityCatalog.schema.json +4 -6
  104. package/generated/ApplyEligibility.schema.json +1 -1
  105. package/generated/BudgetLease.schema.json +1 -2
  106. package/generated/ConformanceReport.schema.json +1 -2
  107. package/generated/ContinuityDisclosure.schema.json +74 -0
  108. package/generated/ControlApplyRequest.schema.json +1 -2
  109. package/generated/ControlCredentialProfileUpdateRequest.schema.json +20 -0
  110. package/generated/ControlCredentialProfileUpdateResponse.schema.json +142 -0
  111. package/generated/ControlCredentialProfilesResponse.schema.json +126 -2
  112. package/generated/ControlDeliveryResponse.schema.json +0 -1
  113. package/generated/ControlHandshakeResponse.schema.json +31 -3
  114. package/generated/ControlHarnessListResponse.schema.json +11 -6
  115. package/generated/ControlHarnessSettingsPatch.schema.json +4 -0
  116. package/generated/ControlOperationCatalog.schema.json +16 -1
  117. package/generated/ControlOperationDescriptor.schema.json +15 -0
  118. package/generated/ControlProject.schema.json +35 -0
  119. package/generated/ControlProjectListResponse.schema.json +35 -0
  120. package/generated/ControlProjectOutputsResponse.schema.json +57 -0
  121. package/generated/ControlQueuedRunInfo.schema.json +2 -11
  122. package/generated/ControlQuotaResponse.schema.json +42 -0
  123. package/generated/ControlRunAgainDraft.schema.json +37 -35
  124. package/generated/ControlRunDecisionRequest.schema.json +0 -1
  125. package/generated/ControlRunDetail.schema.json +305 -213
  126. package/generated/ControlRunListResponse.schema.json +88 -27
  127. package/generated/ControlRunStartRequest.schema.json +37 -35
  128. package/generated/ControlRunStartResponse.schema.json +2 -11
  129. package/generated/ControlRunSummary.schema.json +88 -27
  130. package/generated/ControlSettingsSnapshot.schema.json +6 -11
  131. package/generated/ControlSettingsUpdateRequest.schema.json +5 -10
  132. package/generated/ControlThread.schema.json +21 -3
  133. package/generated/ControlThreadApplyResponse.schema.json +0 -1
  134. package/generated/ControlThreadCreateRequest.schema.json +12 -3
  135. package/generated/ControlThreadDetail.schema.json +174 -16
  136. package/generated/ControlThreadListResponse.schema.json +60 -3
  137. package/generated/ControlThreadTurnRequest.schema.json +40 -34
  138. package/generated/ControlThreadUpdateRequest.schema.json +19 -0
  139. package/generated/DecisionRecord.schema.json +73 -33
  140. package/generated/GateResult.schema.json +1 -2
  141. package/generated/GlobalConfig.schema.json +7 -12
  142. package/generated/HarnessManifest.schema.json +11 -6
  143. package/generated/HarnessStatusDto.schema.json +11 -6
  144. package/generated/LaneCheckpoint.schema.json +59 -0
  145. package/generated/McpRunHandleResult.schema.json +234 -0
  146. package/generated/McpRunToolResult.schema.json +124 -2
  147. package/generated/RoutePrimaryDivergedPayload.schema.json +56 -0
  148. package/generated/RunEvent.schema.json +10 -5
  149. package/generated/RunTelemetry.schema.json +2 -4
  150. package/generated/TaskContract.schema.json +3 -135
  151. package/generated/Thread.schema.json +21 -3
  152. package/generated/ThreadTurn.schema.json +88 -0
  153. package/package.json +2 -2
  154. package/dist/control-spec.d.ts +0 -592
  155. package/dist/control-spec.d.ts.map +0 -1
  156. package/dist/control-spec.js +0 -85
  157. package/dist/control-spec.js.map +0 -1
  158. package/dist/orchestrate.d.ts +0 -556
  159. package/dist/orchestrate.d.ts.map +0 -1
  160. package/dist/orchestrate.js +0 -356
  161. package/dist/orchestrate.js.map +0 -1
  162. package/dist/spec.d.ts +0 -678
  163. package/dist/spec.d.ts.map +0 -1
  164. package/dist/spec.js +0 -186
  165. package/dist/spec.js.map +0 -1
  166. package/generated/ControlSpecAnswersRequest.schema.json +0 -74
  167. package/generated/ControlSpecQuestionsRequest.schema.json +0 -206
  168. package/generated/ControlSpecSession.schema.json +0 -249
  169. package/generated/ControlSpecSessionListResponse.schema.json +0 -261
  170. package/generated/OrchestrateContract.schema.json +0 -119
  171. package/generated/OrchestratePlan.schema.json +0 -264
  172. package/generated/OrchestratePlanProgress.schema.json +0 -164
  173. package/generated/SessionReboundLineage.schema.json +0 -73
  174. package/generated/SpecPack.schema.json +0 -483
@@ -19,15 +19,6 @@
19
19
  "routing": {
20
20
  "type": "object",
21
21
  "properties": {
22
- "default_policy": {
23
- "type": "string",
24
- "enum": [
25
- "auto",
26
- "primary"
27
- ],
28
- "description": "Default routing policy: auto (engine picks) or primary (prefer the configured primary harness).",
29
- "default": "auto"
30
- },
31
22
  "primary_harness": {
32
23
  "type": [
33
24
  "string",
@@ -136,8 +127,7 @@
136
127
  "verify",
137
128
  "synthesize",
138
129
  "explain",
139
- "audit",
140
- "orchestrate"
130
+ "audit"
141
131
  ]
142
132
  },
143
133
  "default": {},
@@ -361,6 +351,11 @@
361
351
  "default": true,
362
352
  "description": "Whether the harness participates in routing."
363
353
  },
354
+ "native_credentials_enabled": {
355
+ "type": "boolean",
356
+ "default": true,
357
+ "description": "Whether the native/default vendor credential (the CLI login) participates in this harness's credential ladder."
358
+ },
364
359
  "default_model": {
365
360
  "type": [
366
361
  "string",
@@ -489,7 +484,7 @@
489
484
  }
490
485
  },
491
486
  "additionalProperties": false,
492
- "description": "Claudexor v2 global user config (~/.claudexor/v2/config.yaml): routing, budget, runtime, and per-harness settings."
487
+ "description": "Claudexor v3 global user config (~/.claudexor/v3/config.yaml): routing, budget, runtime, and per-harness settings."
493
488
  }
494
489
  },
495
490
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -227,11 +227,21 @@
227
227
  "description": "Finite MIME, size, count and transport limits declared by one adapter."
228
228
  },
229
229
  "default": []
230
+ },
231
+ "mcp_injection": {
232
+ "type": "boolean",
233
+ "default": false,
234
+ "description": "The adapter can inject engine-owned MCP servers into the harness sandbox (browser tool, delegation belt); false = extra_mcp_servers and the delegate toggle are refused."
235
+ },
236
+ "mcp_injection_requires_full_access": {
237
+ "type": "boolean",
238
+ "default": false,
239
+ "description": "An injected MCP server can only reach the daemon (belt) at full access; below it the harness sandbox cancels the call. true => --delegate below full access is refused for this harness."
230
240
  }
231
241
  },
232
242
  "additionalProperties": false,
233
243
  "default": {},
234
- "description": "Structured per-harness facts the engine consumes: auth routing, isolation containment, readonly mechanism, and finite attachment inputs."
244
+ "description": "Structured per-harness facts the engine consumes: auth routing, isolation containment, readonly mechanism, finite attachment inputs, and MCP injection."
235
245
  },
236
246
  "capabilities": {
237
247
  "type": "object",
@@ -311,11 +321,6 @@
311
321
  "default": false,
312
322
  "description": "The adapter can surface interactive user questions (interaction_requested events) and deliver typed answers back into the live session."
313
323
  },
314
- "orchestrate": {
315
- "type": "boolean",
316
- "default": false,
317
- "description": "The harness can play the autonomous orchestrate planner intent, planning multi-harness work over the typed tool belt; not a privileged role."
318
- },
319
324
  "json_schema_output": {
320
325
  "type": "boolean",
321
326
  "default": false,
@@ -245,11 +245,21 @@
245
245
  "description": "Finite MIME, size, count and transport limits declared by one adapter."
246
246
  },
247
247
  "default": []
248
+ },
249
+ "mcp_injection": {
250
+ "type": "boolean",
251
+ "default": false,
252
+ "description": "The adapter can inject engine-owned MCP servers into the harness sandbox (browser tool, delegation belt); false = extra_mcp_servers and the delegate toggle are refused."
253
+ },
254
+ "mcp_injection_requires_full_access": {
255
+ "type": "boolean",
256
+ "default": false,
257
+ "description": "An injected MCP server can only reach the daemon (belt) at full access; below it the harness sandbox cancels the call. true => --delegate below full access is refused for this harness."
248
258
  }
249
259
  },
250
260
  "additionalProperties": false,
251
261
  "default": {},
252
- "description": "Structured per-harness facts the engine consumes: auth routing, isolation containment, readonly mechanism, and finite attachment inputs."
262
+ "description": "Structured per-harness facts the engine consumes: auth routing, isolation containment, readonly mechanism, finite attachment inputs, and MCP injection."
253
263
  },
254
264
  "capabilities": {
255
265
  "type": "object",
@@ -329,11 +339,6 @@
329
339
  "default": false,
330
340
  "description": "The adapter can surface interactive user questions (interaction_requested events) and deliver typed answers back into the live session."
331
341
  },
332
- "orchestrate": {
333
- "type": "boolean",
334
- "default": false,
335
- "description": "The harness can play the autonomous orchestrate planner intent, planning multi-harness work over the typed tool belt; not a privileged role."
336
- },
337
342
  "json_schema_output": {
338
343
  "type": "boolean",
339
344
  "default": false,
@@ -0,0 +1,59 @@
1
+ {
2
+ "$ref": "#/definitions/LaneCheckpoint",
3
+ "definitions": {
4
+ "LaneCheckpoint": {
5
+ "type": "object",
6
+ "properties": {
7
+ "id": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "description": "Composite lane id (thread::harness::profileOrDefault)."
11
+ },
12
+ "thread_id": {
13
+ "type": "string",
14
+ "minLength": 1,
15
+ "description": "Thread the lane belongs to."
16
+ },
17
+ "harness_id": {
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "description": "Harness of the lane."
21
+ },
22
+ "profile_id": {
23
+ "anyOf": [
24
+ {
25
+ "type": "string",
26
+ "minLength": 1,
27
+ "description": "Non-empty identifier string."
28
+ },
29
+ {
30
+ "type": "null"
31
+ }
32
+ ],
33
+ "description": "Credential profile of the lane (null = engine default).",
34
+ "default": null
35
+ },
36
+ "turn_id": {
37
+ "type": "string",
38
+ "minLength": 1,
39
+ "description": "The last turn this lane has seen."
40
+ },
41
+ "updated_at": {
42
+ "type": "string",
43
+ "minLength": 1,
44
+ "description": "When the checkpoint last advanced."
45
+ }
46
+ },
47
+ "required": [
48
+ "id",
49
+ "thread_id",
50
+ "harness_id",
51
+ "turn_id",
52
+ "updated_at"
53
+ ],
54
+ "additionalProperties": false,
55
+ "description": "Per-lane checkpoint: the last turn a (thread, harness, profile) lane has seen; journaled in the thread store."
56
+ }
57
+ },
58
+ "$schema": "http://json-schema.org/draft-07/schema#"
59
+ }
@@ -0,0 +1,234 @@
1
+ {
2
+ "$ref": "#/definitions/McpRunHandleResult",
3
+ "definitions": {
4
+ "McpRunHandleResult": {
5
+ "type": "object",
6
+ "properties": {
7
+ "summary": {
8
+ "type": "string",
9
+ "description": "Human-readable outcome/status text (same as the tool's text content)."
10
+ },
11
+ "runId": {
12
+ "type": [
13
+ "string",
14
+ "null"
15
+ ],
16
+ "default": null,
17
+ "description": "The daemon run id, when known."
18
+ },
19
+ "runDir": {
20
+ "type": [
21
+ "string",
22
+ "null"
23
+ ],
24
+ "default": null,
25
+ "description": "Artifact directory; null when absent."
26
+ },
27
+ "status": {
28
+ "type": [
29
+ "string",
30
+ "null"
31
+ ],
32
+ "default": null,
33
+ "description": "The run's terminal or in-flight lifecycle state, when known."
34
+ },
35
+ "decisionStatus": {
36
+ "type": [
37
+ "string",
38
+ "null"
39
+ ],
40
+ "default": null,
41
+ "description": "The arbitration decision status, when the run reached arbitration."
42
+ },
43
+ "pendingInteractions": {
44
+ "anyOf": [
45
+ {
46
+ "type": "integer",
47
+ "minimum": 0
48
+ },
49
+ {
50
+ "type": "null"
51
+ }
52
+ ],
53
+ "default": null,
54
+ "description": "Count of questions still awaiting answers, when known."
55
+ },
56
+ "outcomeFacts": {
57
+ "anyOf": [
58
+ {
59
+ "type": "object",
60
+ "properties": {
61
+ "lifecycle": {
62
+ "type": "string",
63
+ "enum": [
64
+ "succeeded",
65
+ "failed",
66
+ "cancelled",
67
+ "interrupted"
68
+ ],
69
+ "description": "Terminal lifecycle of the run."
70
+ },
71
+ "noChanges": {
72
+ "type": "boolean",
73
+ "default": false,
74
+ "description": "True when the run finished without changing any files (the ex no_op fact)."
75
+ },
76
+ "checks": {
77
+ "type": "string",
78
+ "enum": [
79
+ "passed",
80
+ "failed",
81
+ "not_configured"
82
+ ],
83
+ "description": "Deterministic checks axis: configured project checks passed, failed, or none are configured (a named state, never a stand-in for review results).",
84
+ "default": "not_configured"
85
+ },
86
+ "review": {
87
+ "type": "string",
88
+ "enum": [
89
+ "approved",
90
+ "blocked",
91
+ "not_run"
92
+ ],
93
+ "description": "Review axis: approved (clean cross-family verified review), blocked (open accepted findings), or not_run.",
94
+ "default": "not_run"
95
+ },
96
+ "reason": {
97
+ "anyOf": [
98
+ {
99
+ "type": "string",
100
+ "enum": [
101
+ "harness_failed",
102
+ "no_changes",
103
+ "review_blocked",
104
+ "checks_failed",
105
+ "budget_exhausted",
106
+ "budget_overshoot",
107
+ "cost_unverifiable",
108
+ "not_converged",
109
+ "stuck_no_progress",
110
+ "wall_clock_exceeded",
111
+ "user_cancelled",
112
+ "crash_interrupted"
113
+ ],
114
+ "description": "Typed reason qualifying a non-clean terminal; null on a clean success."
115
+ },
116
+ {
117
+ "type": "null"
118
+ }
119
+ ],
120
+ "description": "Typed reason qualifying a non-clean terminal; null on a clean success.",
121
+ "default": null
122
+ }
123
+ },
124
+ "required": [
125
+ "lifecycle"
126
+ ],
127
+ "additionalProperties": false,
128
+ "description": "Independent terminal outcome axes of a run (D8/D18)."
129
+ },
130
+ {
131
+ "type": "null"
132
+ }
133
+ ],
134
+ "description": "The D8 terminal outcome axes (checks/review/reason/noChanges), when terminal.",
135
+ "default": null
136
+ },
137
+ "outcomeBanner": {
138
+ "type": [
139
+ "string",
140
+ "null"
141
+ ],
142
+ "default": null,
143
+ "description": "Server-owned outcome headline (D18); null while non-terminal."
144
+ },
145
+ "applyEligibility": {
146
+ "anyOf": [
147
+ {
148
+ "type": "object",
149
+ "properties": {
150
+ "eligible": {
151
+ "type": "boolean",
152
+ "description": "True when the apply gate would accept this run's patch right now."
153
+ },
154
+ "state": {
155
+ "type": [
156
+ "string",
157
+ "null"
158
+ ],
159
+ "description": "The gate's apply-eligibility classification (e.g. needs_review | not_verified | no_changes | ok) when known."
160
+ },
161
+ "reason": {
162
+ "type": [
163
+ "string",
164
+ "null"
165
+ ],
166
+ "description": "The gate's refusal text when not eligible (null when eligible)."
167
+ },
168
+ "requiredAction": {
169
+ "type": [
170
+ "string",
171
+ "null"
172
+ ],
173
+ "description": "Honest guidance for what actually unblocks apply (typed operator decision, add gates, re-run, or nothing to apply)."
174
+ }
175
+ },
176
+ "required": [
177
+ "eligible",
178
+ "state",
179
+ "reason",
180
+ "requiredAction"
181
+ ],
182
+ "additionalProperties": false,
183
+ "description": "Derived apply-gate verdict for a run's WorkProduct (single producer in the delivery gate)."
184
+ },
185
+ {
186
+ "type": "null"
187
+ }
188
+ ],
189
+ "description": "Derived apply-gate verdict; null for read-only runs or when no patch exists.",
190
+ "default": null
191
+ },
192
+ "planReadiness": {
193
+ "anyOf": [
194
+ {
195
+ "type": "object",
196
+ "properties": {
197
+ "state": {
198
+ "type": "string",
199
+ "enum": [
200
+ "ready",
201
+ "needs_answers",
202
+ "unverified"
203
+ ],
204
+ "description": "Derived plan readiness: ready (block parsed, zero open questions), needs_answers (open questions remain), unverified (no parseable block — the planner ignored the format)."
205
+ },
206
+ "questionCount": {
207
+ "type": "integer",
208
+ "minimum": 0,
209
+ "default": 0
210
+ }
211
+ },
212
+ "required": [
213
+ "state"
214
+ ],
215
+ "additionalProperties": false,
216
+ "description": "Server-derived readiness of a plan run (one derivation owner; D17)."
217
+ },
218
+ {
219
+ "type": "null"
220
+ }
221
+ ],
222
+ "description": "Derived plan readiness (plan runs only, D17); null otherwise.",
223
+ "default": null
224
+ }
225
+ },
226
+ "required": [
227
+ "summary"
228
+ ],
229
+ "additionalProperties": false,
230
+ "description": "Structured MCP result for Claudexor durable-run read tools (inspect/status/result)."
231
+ }
232
+ },
233
+ "$schema": "http://json-schema.org/draft-07/schema#"
234
+ }
@@ -27,7 +27,88 @@
27
27
  "string",
28
28
  "null"
29
29
  ],
30
- "description": "Terminal run status (success | blocked | failed | cancelled | ...)."
30
+ "description": "Terminal run LIFECYCLE (succeeded | failed | cancelled | interrupted)."
31
+ },
32
+ "outcomeFacts": {
33
+ "anyOf": [
34
+ {
35
+ "type": "object",
36
+ "properties": {
37
+ "lifecycle": {
38
+ "type": "string",
39
+ "enum": [
40
+ "succeeded",
41
+ "failed",
42
+ "cancelled",
43
+ "interrupted"
44
+ ],
45
+ "description": "Terminal lifecycle of the run."
46
+ },
47
+ "noChanges": {
48
+ "type": "boolean",
49
+ "default": false,
50
+ "description": "True when the run finished without changing any files (the ex no_op fact)."
51
+ },
52
+ "checks": {
53
+ "type": "string",
54
+ "enum": [
55
+ "passed",
56
+ "failed",
57
+ "not_configured"
58
+ ],
59
+ "description": "Deterministic checks axis: configured project checks passed, failed, or none are configured (a named state, never a stand-in for review results).",
60
+ "default": "not_configured"
61
+ },
62
+ "review": {
63
+ "type": "string",
64
+ "enum": [
65
+ "approved",
66
+ "blocked",
67
+ "not_run"
68
+ ],
69
+ "description": "Review axis: approved (clean cross-family verified review), blocked (open accepted findings), or not_run.",
70
+ "default": "not_run"
71
+ },
72
+ "reason": {
73
+ "anyOf": [
74
+ {
75
+ "type": "string",
76
+ "enum": [
77
+ "harness_failed",
78
+ "no_changes",
79
+ "review_blocked",
80
+ "checks_failed",
81
+ "budget_exhausted",
82
+ "budget_overshoot",
83
+ "cost_unverifiable",
84
+ "not_converged",
85
+ "stuck_no_progress",
86
+ "wall_clock_exceeded",
87
+ "user_cancelled",
88
+ "crash_interrupted"
89
+ ],
90
+ "description": "Typed reason qualifying a non-clean terminal; null on a clean success."
91
+ },
92
+ {
93
+ "type": "null"
94
+ }
95
+ ],
96
+ "description": "Typed reason qualifying a non-clean terminal; null on a clean success.",
97
+ "default": null
98
+ }
99
+ },
100
+ "required": [
101
+ "lifecycle"
102
+ ],
103
+ "additionalProperties": false,
104
+ "description": "Independent terminal outcome axes of a run (D8/D18)."
105
+ },
106
+ {
107
+ "type": "null"
108
+ }
109
+ ],
110
+ "description": "The D8 terminal outcome axes (checks/review/reason/noChanges); null for non-terminal or read-only routes.",
111
+ "default": null
31
112
  },
32
113
  "applyEligibility": {
33
114
  "anyOf": [
@@ -43,7 +124,7 @@
43
124
  "string",
44
125
  "null"
45
126
  ],
46
- "description": "The gate's state classification (e.g. blocked | ungated | review_not_run | no_op | ok) when known."
127
+ "description": "The gate's apply-eligibility classification (e.g. needs_review | not_verified | no_changes | ok) when known."
47
128
  },
48
129
  "reason": {
49
130
  "type": [
@@ -74,6 +155,47 @@
74
155
  }
75
156
  ],
76
157
  "description": "Apply-gate verdict for mutating runs; null for read-only routes or when no patch exists."
158
+ },
159
+ "outcomeBanner": {
160
+ "type": [
161
+ "string",
162
+ "null"
163
+ ],
164
+ "default": null,
165
+ "description": "Server-owned outcome headline (D18); the single honest one-line verdict, null while non-terminal or unavailable."
166
+ },
167
+ "planReadiness": {
168
+ "anyOf": [
169
+ {
170
+ "type": "object",
171
+ "properties": {
172
+ "state": {
173
+ "type": "string",
174
+ "enum": [
175
+ "ready",
176
+ "needs_answers",
177
+ "unverified"
178
+ ],
179
+ "description": "Derived plan readiness: ready (block parsed, zero open questions), needs_answers (open questions remain), unverified (no parseable block — the planner ignored the format)."
180
+ },
181
+ "questionCount": {
182
+ "type": "integer",
183
+ "minimum": 0,
184
+ "default": 0
185
+ }
186
+ },
187
+ "required": [
188
+ "state"
189
+ ],
190
+ "additionalProperties": false,
191
+ "description": "Server-derived readiness of a plan run (one derivation owner; D17)."
192
+ },
193
+ {
194
+ "type": "null"
195
+ }
196
+ ],
197
+ "description": "Derived plan readiness for plan tools (D17); null for non-plan tools.",
198
+ "default": null
77
199
  }
78
200
  },
79
201
  "required": [
@@ -0,0 +1,56 @@
1
+ {
2
+ "$ref": "#/definitions/RoutePrimaryDivergedPayload",
3
+ "definitions": {
4
+ "RoutePrimaryDivergedPayload": {
5
+ "type": "object",
6
+ "properties": {
7
+ "requested": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "description": "The requested/sticky primary harness the chip showed."
11
+ },
12
+ "effective": {
13
+ "type": [
14
+ "string",
15
+ "null"
16
+ ],
17
+ "default": null,
18
+ "description": "The harness that actually ran first, or null when nothing remained routable."
19
+ },
20
+ "reason": {
21
+ "type": "string",
22
+ "enum": [
23
+ "quota_exhausted",
24
+ "money_exhausted",
25
+ "subscription_exhausted",
26
+ "rate_limited",
27
+ "harness_error",
28
+ "stall",
29
+ "web_evidence_unsatisfied",
30
+ "fallback_model",
31
+ "not_portable",
32
+ "auth_unavailable",
33
+ "readiness_preferred",
34
+ "manual"
35
+ ],
36
+ "description": "Typed reason an auto-fallback (route/auth switch) or session re-host happened, driven by typed budget/quota signals and events, never by regex over prose.",
37
+ "default": "quota_exhausted"
38
+ },
39
+ "detail": {
40
+ "type": [
41
+ "string",
42
+ "null"
43
+ ],
44
+ "default": null,
45
+ "description": "Redacted human reason the primary was dropped (e.g. cooldown, unavailable)."
46
+ }
47
+ },
48
+ "required": [
49
+ "requested"
50
+ ],
51
+ "additionalProperties": false,
52
+ "description": "Typed payload for route.primary.diverged, validated before being stamped onto the RunEvent payload so a pre-attempt primary divergence is always evidence-backed."
53
+ }
54
+ },
55
+ "$schema": "http://json-schema.org/draft-07/schema#"
56
+ }
@@ -49,14 +49,22 @@
49
49
  "route.transient.retry_scheduled",
50
50
  "route.profile.headroom_exceeded",
51
51
  "route.profile.rotated",
52
+ "route.profile.rotation_exhausted",
52
53
  "route.transient.exhausted",
53
54
  "route.fallback.auth_switched",
54
- "session.rebound",
55
+ "route.primary.diverged",
56
+ "session.continuity",
55
57
  "interaction.requested",
56
58
  "interaction.answered",
57
59
  "interaction.timeout",
58
60
  "interaction.answer_discarded",
59
61
  "plan.progress",
62
+ "plan.questions",
63
+ "plan.brief.materialized",
64
+ "council.started",
65
+ "council.draft",
66
+ "council.member.failed",
67
+ "council.merged",
60
68
  "budget.quota_pressure",
61
69
  "output.ready",
62
70
  "gate.started",
@@ -73,9 +81,6 @@
73
81
  "arbitration.completed",
74
82
  "work_product.emitted",
75
83
  "work_product.adopted",
76
- "orchestrate.subrun.started",
77
- "orchestrate.step.done",
78
- "orchestrate.step.blocked",
79
84
  "control.requested",
80
85
  "control.applied",
81
86
  "control.rejected",
@@ -83,7 +88,7 @@
83
88
  "run.completed",
84
89
  "run.failed"
85
90
  ],
86
- "description": "Type of an append-only run event, covering run lifecycle, contract/context creation, budget, routing fallbacks, harness activity, interactions, gates, review, arbitration, work products, orchestrate steps, and control verbs."
91
+ "description": "Type of an append-only run event, covering run lifecycle, contract/context creation, budget, routing fallbacks, harness activity, interactions, gates, review, arbitration, work products, and control verbs."
87
92
  },
88
93
  "payload": {
89
94
  "type": "object",
@@ -24,11 +24,9 @@
24
24
  "enum": [
25
25
  "ask",
26
26
  "plan",
27
- "audit",
28
- "agent",
29
- "orchestrate"
27
+ "agent"
30
28
  ],
31
- "description": "Canonical run mode: ask, plan, and audit are read-only; agent writes; orchestrate is the autonomous coordinator intent. Engine strategies (race, attempts, swarm, create) are flags on a mode, not modes."
29
+ "description": "Canonical run mode: ask and plan are read-only, agent writes. Engine strategies (race width, attempts, deep_scan, create, delegate) are flags on a mode, not modes."
32
30
  },
33
31
  "requested_access": {
34
32
  "type": "string",