@claudexor/schema 3.1.2 → 3.3.7-rc.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 (291) hide show
  1. package/dist/agent-capabilities.d.ts +157 -129
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +3 -1
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/apply-eligibility.d.ts +472 -273
  6. package/dist/apply-eligibility.d.ts.map +1 -1
  7. package/dist/apply-eligibility.js +25 -1
  8. package/dist/apply-eligibility.js.map +1 -1
  9. package/dist/attachment.d.ts +17 -17
  10. package/dist/attachment.d.ts.map +1 -1
  11. package/dist/attachment.js +1 -1
  12. package/dist/attachment.js.map +1 -1
  13. package/dist/auth.d.ts +475 -475
  14. package/dist/auth.d.ts.map +1 -1
  15. package/dist/auth.js +1 -1
  16. package/dist/auth.js.map +1 -1
  17. package/dist/budget.d.ts +59 -59
  18. package/dist/budget.d.ts.map +1 -1
  19. package/dist/budget.js +1 -1
  20. package/dist/budget.js.map +1 -1
  21. package/dist/config.d.ts +320 -316
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/config.js +26 -19
  24. package/dist/config.js.map +1 -1
  25. package/dist/context.d.ts +38 -38
  26. package/dist/context.d.ts.map +1 -1
  27. package/dist/context.js +1 -1
  28. package/dist/context.js.map +1 -1
  29. package/dist/control-auth-route.d.ts +46 -0
  30. package/dist/control-auth-route.d.ts.map +1 -0
  31. package/dist/control-auth-route.js +24 -0
  32. package/dist/control-auth-route.js.map +1 -0
  33. package/dist/control-gc.d.ts +15 -15
  34. package/dist/control-gc.d.ts.map +1 -1
  35. package/dist/control-gc.js +1 -1
  36. package/dist/control-gc.js.map +1 -1
  37. package/dist/control-harness-list.d.ts +896 -0
  38. package/dist/control-harness-list.d.ts.map +1 -0
  39. package/dist/control-harness-list.js +13 -0
  40. package/dist/control-harness-list.js.map +1 -0
  41. package/dist/control-operation-responses.d.ts +644 -629
  42. package/dist/control-operation-responses.d.ts.map +1 -1
  43. package/dist/control-operation-responses.js +5 -1
  44. package/dist/control-operation-responses.js.map +1 -1
  45. package/dist/control-run-detail.d.ts +2229 -1569
  46. package/dist/control-run-detail.d.ts.map +1 -1
  47. package/dist/control-run-detail.js +46 -2
  48. package/dist/control-run-detail.js.map +1 -1
  49. package/dist/control-run-failure.d.ts +57 -0
  50. package/dist/control-run-failure.d.ts.map +1 -0
  51. package/dist/control-run-failure.js +89 -0
  52. package/dist/control-run-failure.js.map +1 -0
  53. package/dist/control-run-retry.d.ts +16 -16
  54. package/dist/control-run-retry.d.ts.map +1 -1
  55. package/dist/control-run-retry.js +1 -1
  56. package/dist/control-run-retry.js.map +1 -1
  57. package/dist/control-run-scope.d.ts +19 -2
  58. package/dist/control-run-scope.d.ts.map +1 -1
  59. package/dist/control-run-scope.js +22 -1
  60. package/dist/control-run-scope.js.map +1 -1
  61. package/dist/control-secret.d.ts +7 -7
  62. package/dist/control-secret.d.ts.map +1 -1
  63. package/dist/control-secret.js +1 -1
  64. package/dist/control-secret.js.map +1 -1
  65. package/dist/control-thread-apply.d.ts +65 -65
  66. package/dist/control-thread-apply.d.ts.map +1 -1
  67. package/dist/control-thread-apply.js +1 -1
  68. package/dist/control-thread-apply.js.map +1 -1
  69. package/dist/control-trust.d.ts +23 -23
  70. package/dist/control-trust.d.ts.map +1 -1
  71. package/dist/control-trust.js +1 -1
  72. package/dist/control-trust.js.map +1 -1
  73. package/dist/control.d.ts +1551 -2385
  74. package/dist/control.d.ts.map +1 -1
  75. package/dist/control.js +29 -107
  76. package/dist/control.js.map +1 -1
  77. package/dist/credential-profile-snapshot.d.ts +3206 -0
  78. package/dist/credential-profile-snapshot.d.ts.map +1 -0
  79. package/dist/credential-profile-snapshot.js +28 -0
  80. package/dist/credential-profile-snapshot.js.map +1 -0
  81. package/dist/credential-profile.d.ts +170 -107
  82. package/dist/credential-profile.d.ts.map +1 -1
  83. package/dist/credential-profile.js +24 -7
  84. package/dist/credential-profile.js.map +1 -1
  85. package/dist/decision.d.ts +121 -121
  86. package/dist/decision.d.ts.map +1 -1
  87. package/dist/decision.js +2 -1
  88. package/dist/decision.js.map +1 -1
  89. package/dist/deep-scan.d.ts +5 -5
  90. package/dist/deep-scan.d.ts.map +1 -1
  91. package/dist/deep-scan.js +1 -1
  92. package/dist/deep-scan.js.map +1 -1
  93. package/dist/delegation.d.ts +13 -13
  94. package/dist/delegation.d.ts.map +1 -1
  95. package/dist/delegation.js +1 -1
  96. package/dist/delegation.js.map +1 -1
  97. package/dist/delivery.d.ts +32 -32
  98. package/dist/delivery.d.ts.map +1 -1
  99. package/dist/delivery.js +1 -1
  100. package/dist/delivery.js.map +1 -1
  101. package/dist/effort.d.ts +1 -1
  102. package/dist/effort.d.ts.map +1 -1
  103. package/dist/effort.js +1 -1
  104. package/dist/effort.js.map +1 -1
  105. package/dist/events.d.ts +55 -35
  106. package/dist/events.d.ts.map +1 -1
  107. package/dist/events.js +20 -1
  108. package/dist/events.js.map +1 -1
  109. package/dist/gate.d.ts +7 -7
  110. package/dist/gate.d.ts.map +1 -1
  111. package/dist/gate.js +1 -1
  112. package/dist/gate.js.map +1 -1
  113. package/dist/git-capability.d.ts +23 -0
  114. package/dist/git-capability.d.ts.map +1 -0
  115. package/dist/git-capability.js +15 -0
  116. package/dist/git-capability.js.map +1 -0
  117. package/dist/harness-confinement.d.ts +64 -0
  118. package/dist/harness-confinement.d.ts.map +1 -0
  119. package/dist/harness-confinement.js +64 -0
  120. package/dist/harness-confinement.js.map +1 -0
  121. package/dist/harness.d.ts +428 -408
  122. package/dist/harness.d.ts.map +1 -1
  123. package/dist/harness.js +15 -26
  124. package/dist/harness.js.map +1 -1
  125. package/dist/index.d.ts +8 -0
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +8 -0
  128. package/dist/index.js.map +1 -1
  129. package/dist/interaction.d.ts +10 -0
  130. package/dist/interaction.d.ts.map +1 -0
  131. package/dist/interaction.js +2 -0
  132. package/dist/interaction.js.map +1 -0
  133. package/dist/operation.d.ts +113 -113
  134. package/dist/operation.d.ts.map +1 -1
  135. package/dist/operation.js +1 -1
  136. package/dist/operation.js.map +1 -1
  137. package/dist/output-schema-dialect.d.ts +1 -1
  138. package/dist/output-schema-dialect.d.ts.map +1 -1
  139. package/dist/output-schema-dialect.js +1 -1
  140. package/dist/output-schema-dialect.js.map +1 -1
  141. package/dist/output-schema.d.ts +2 -2
  142. package/dist/output-schema.js +2 -2
  143. package/dist/plan.d.ts +29 -29
  144. package/dist/plan.d.ts.map +1 -1
  145. package/dist/plan.js +2 -2
  146. package/dist/plan.js.map +1 -1
  147. package/dist/primitives.d.ts +1 -1
  148. package/dist/primitives.d.ts.map +1 -1
  149. package/dist/primitives.js +1 -1
  150. package/dist/primitives.js.map +1 -1
  151. package/dist/problem.d.ts +6 -6
  152. package/dist/problem.d.ts.map +1 -1
  153. package/dist/problem.js +1 -1
  154. package/dist/problem.js.map +1 -1
  155. package/dist/project.d.ts +87 -25
  156. package/dist/project.d.ts.map +1 -1
  157. package/dist/project.js +21 -1
  158. package/dist/project.js.map +1 -1
  159. package/dist/quota.d.ts +51 -51
  160. package/dist/quota.d.ts.map +1 -1
  161. package/dist/quota.js +6 -1
  162. package/dist/quota.js.map +1 -1
  163. package/dist/raw.d.ts +16 -16
  164. package/dist/raw.d.ts.map +1 -1
  165. package/dist/raw.js +1 -1
  166. package/dist/raw.js.map +1 -1
  167. package/dist/readiness.d.ts +242 -242
  168. package/dist/readiness.d.ts.map +1 -1
  169. package/dist/readiness.js +1 -1
  170. package/dist/readiness.js.map +1 -1
  171. package/dist/recovery.d.ts +106 -106
  172. package/dist/recovery.d.ts.map +1 -1
  173. package/dist/recovery.js +1 -1
  174. package/dist/recovery.js.map +1 -1
  175. package/dist/request-requirements.d.ts +9 -9
  176. package/dist/request-requirements.d.ts.map +1 -1
  177. package/dist/request-requirements.js +1 -1
  178. package/dist/request-requirements.js.map +1 -1
  179. package/dist/review.d.ts +29 -29
  180. package/dist/review.d.ts.map +1 -1
  181. package/dist/review.js +1 -1
  182. package/dist/review.js.map +1 -1
  183. package/dist/route.d.ts +11 -11
  184. package/dist/route.d.ts.map +1 -1
  185. package/dist/route.js +1 -1
  186. package/dist/route.js.map +1 -1
  187. package/dist/run-applicability.d.ts +764 -0
  188. package/dist/run-applicability.d.ts.map +1 -0
  189. package/dist/run-applicability.js +56 -0
  190. package/dist/run-applicability.js.map +1 -0
  191. package/dist/run-facts.d.ts +628 -0
  192. package/dist/run-facts.d.ts.map +1 -0
  193. package/dist/run-facts.js +429 -0
  194. package/dist/run-facts.js.map +1 -0
  195. package/dist/run-strategy.d.ts +40 -0
  196. package/dist/run-strategy.d.ts.map +1 -1
  197. package/dist/run-strategy.js +68 -1
  198. package/dist/run-strategy.js.map +1 -1
  199. package/dist/setup-device-code-envelope.d.ts +67 -0
  200. package/dist/setup-device-code-envelope.d.ts.map +1 -0
  201. package/dist/setup-device-code-envelope.js +25 -0
  202. package/dist/setup-device-code-envelope.js.map +1 -0
  203. package/dist/setup-login-protocol.d.ts +6 -0
  204. package/dist/setup-login-protocol.d.ts.map +1 -0
  205. package/dist/setup-login-protocol.js +12 -0
  206. package/dist/setup-login-protocol.js.map +1 -0
  207. package/dist/setup-transport.d.ts +12 -0
  208. package/dist/setup-transport.d.ts.map +1 -0
  209. package/dist/setup-transport.js +22 -0
  210. package/dist/setup-transport.js.map +1 -0
  211. package/dist/setup.d.ts +12572 -3749
  212. package/dist/setup.d.ts.map +1 -1
  213. package/dist/setup.js +34 -38
  214. package/dist/setup.js.map +1 -1
  215. package/dist/status-projection.d.ts +7 -5
  216. package/dist/status-projection.d.ts.map +1 -1
  217. package/dist/status-projection.js +11 -6
  218. package/dist/status-projection.js.map +1 -1
  219. package/dist/surface-run-controls.d.ts.map +1 -1
  220. package/dist/surface-run-controls.js +10 -1
  221. package/dist/surface-run-controls.js.map +1 -1
  222. package/dist/task.d.ts +303 -303
  223. package/dist/task.d.ts.map +1 -1
  224. package/dist/task.js +1 -1
  225. package/dist/task.js.map +1 -1
  226. package/dist/telemetry.d.ts +1157 -633
  227. package/dist/telemetry.d.ts.map +1 -1
  228. package/dist/telemetry.js +7 -4
  229. package/dist/telemetry.js.map +1 -1
  230. package/dist/thread.d.ts +133 -84
  231. package/dist/thread.d.ts.map +1 -1
  232. package/dist/thread.js +21 -2
  233. package/dist/thread.js.map +1 -1
  234. package/dist/tool-ref.d.ts +7 -7
  235. package/dist/tool-ref.d.ts.map +1 -1
  236. package/dist/tool-ref.js +1 -1
  237. package/dist/tool-ref.js.map +1 -1
  238. package/dist/work-report.d.ts +28 -28
  239. package/dist/work-report.d.ts.map +1 -1
  240. package/dist/work-report.js +3 -3
  241. package/dist/work-report.js.map +1 -1
  242. package/dist/workproduct.d.ts +6 -9
  243. package/dist/workproduct.d.ts.map +1 -1
  244. package/dist/workproduct.js +1 -2
  245. package/dist/workproduct.js.map +1 -1
  246. package/dist/workspace.d.ts +13 -13
  247. package/dist/workspace.d.ts.map +1 -1
  248. package/dist/workspace.js +1 -1
  249. package/dist/workspace.js.map +1 -1
  250. package/generated/AgentCapabilityCatalog.schema.json +41 -0
  251. package/generated/ControlCredentialProfileCreateResponse.schema.json +10 -1
  252. package/generated/ControlCredentialProfileUpdateResponse.schema.json +10 -1
  253. package/generated/ControlCredentialProfilesQueryResponse.schema.json +1343 -0
  254. package/generated/ControlCredentialProfilesResponse.schema.json +20 -3
  255. package/generated/ControlCredentialProfilesSnapshotResponse.schema.json +1322 -0
  256. package/generated/ControlDirectoryEntry.schema.json +36 -0
  257. package/generated/ControlDirectoryListing.schema.json +77 -0
  258. package/generated/ControlHarnessListResponse.schema.json +41 -1
  259. package/generated/ControlQuotaResponse.schema.json +2 -1
  260. package/generated/ControlRunAgainDraft.schema.json +12 -2
  261. package/generated/ControlRunApplicabilityResponse.schema.json +217 -0
  262. package/generated/ControlRunDetail.schema.json +494 -69
  263. package/generated/ControlRunListResponse.schema.json +30 -4
  264. package/generated/ControlRunStartRequest.schema.json +12 -2
  265. package/generated/ControlRunSummary.schema.json +30 -4
  266. package/generated/ControlSettingsSnapshot.schema.json +12 -3
  267. package/generated/ControlSettingsUpdateRequest.schema.json +12 -3
  268. package/generated/ControlSetupJob.schema.json +9 -0
  269. package/generated/ControlSetupJobCreateRequest.schema.json +9 -0
  270. package/generated/ControlSetupJobEvent.schema.json +858 -758
  271. package/generated/ControlSetupJobListResponse.schema.json +9 -0
  272. package/generated/ControlSetupJobSnapshot.schema.json +811 -736
  273. package/generated/ControlThreadCreateRequest.schema.json +5 -0
  274. package/generated/ControlThreadDetail.schema.json +31 -1
  275. package/generated/ControlThreadTurnRequest.schema.json +5 -24
  276. package/generated/CredentialProfileStatus.schema.json +10 -1
  277. package/generated/DecisionRecord.schema.json +2 -1
  278. package/generated/GitCapability.schema.json +46 -0
  279. package/generated/GlobalConfig.schema.json +13 -4
  280. package/generated/HarnessEvent.schema.json +2 -1
  281. package/generated/HarnessManifest.schema.json +1 -1
  282. package/generated/HarnessStatusDto.schema.json +1 -1
  283. package/generated/McpRunHandleResult.schema.json +182 -1
  284. package/generated/McpRunToolResult.schema.json +182 -1
  285. package/generated/OutputReadyPayload.schema.json +44 -0
  286. package/generated/RunFacts.schema.json +569 -0
  287. package/generated/RunFailure.schema.json +19 -2
  288. package/generated/RunTelemetry.schema.json +492 -2
  289. package/generated/ThreadTurn.schema.json +29 -0
  290. package/generated/WorkProduct.schema.json +0 -4
  291. package/package.json +3 -3
@@ -2,904 +2,979 @@
2
2
  "$ref": "#/definitions/ControlSetupJobSnapshot",
3
3
  "definitions": {
4
4
  "ControlSetupJobSnapshot": {
5
- "type": "object",
6
- "properties": {
7
- "job": {
5
+ "anyOf": [
6
+ {
8
7
  "type": "object",
9
8
  "properties": {
10
- "jobId": {
11
- "type": "string",
12
- "minLength": 1,
13
- "description": "Setup job id."
14
- },
15
- "harness": {
16
- "type": "string",
17
- "enum": [
18
- "codex",
19
- "claude",
20
- "cursor"
21
- ],
22
- "description": "Harness ids with a managed native-login flow."
23
- },
24
- "action": {
25
- "type": "string",
26
- "const": "login",
27
- "description": "The daemon-managed native-login action."
28
- },
29
- "profileId": {
30
- "type": [
31
- "string",
32
- "null"
33
- ],
34
- "default": null,
35
- "description": "Registered profile this login targets; null = the default session."
36
- },
37
- "state": {
38
- "type": "string",
39
- "enum": [
40
- "queued",
41
- "running",
42
- "waiting_for_input",
43
- "succeeded",
44
- "failed",
45
- "cancelled",
46
- "timed_out",
47
- "interrupted_unknown",
48
- "not_supported"
49
- ],
50
- "description": "Lifecycle state of a setup job, including waiting_for_input (needs user confirmation/input) and not_supported."
51
- },
52
- "phase": {
53
- "type": "string",
54
- "enum": [
55
- "preparing",
56
- "launching",
57
- "awaiting_user",
58
- "verifying",
59
- "cancelling",
60
- "completed"
61
- ],
62
- "description": "Fine-grained setup phase; cancellation remains a phase until the underlying process has actually stopped."
63
- },
64
- "deadlineAt": {
65
- "type": "string",
66
- "format": "date-time",
67
- "description": "Current native-login deadline when the job has one."
68
- },
69
- "outcome": {
9
+ "job": {
70
10
  "type": "object",
71
11
  "properties": {
72
- "reason": {
12
+ "jobId": {
13
+ "type": "string",
14
+ "minLength": 1,
15
+ "description": "Setup job id."
16
+ },
17
+ "harness": {
73
18
  "type": "string",
74
19
  "enum": [
75
- "completed",
76
- "not_supported",
77
- "launch_failed",
78
- "command_failed",
79
- "auth_not_ready",
80
- "capability_verification_failed",
81
- "credential_route_mismatch",
82
- "timed_out",
83
- "cancelled_by_user",
84
- "cancelled_on_restart",
85
- "interrupted",
86
- "interrupted_unknown",
87
- "termination_unconfirmed"
88
- ]
20
+ "codex",
21
+ "claude",
22
+ "cursor"
23
+ ],
24
+ "description": "Harness ids with a managed native-login flow."
89
25
  },
90
- "exitCode": {
91
- "anyOf": [
92
- {
93
- "type": "integer"
94
- },
95
- {
96
- "type": "null"
97
- }
98
- ]
26
+ "action": {
27
+ "type": "string",
28
+ "const": "login",
29
+ "description": "The daemon-managed native-login action."
30
+ },
31
+ "transport": {
32
+ "type": "string",
33
+ "enum": [
34
+ "daemon",
35
+ "client_pty"
36
+ ],
37
+ "description": "Who owns the interactive terminal: daemon opens a local Terminal, or the client attaches its PTY.",
38
+ "default": "daemon"
99
39
  },
100
- "signal": {
40
+ "profileId": {
101
41
  "type": [
102
42
  "string",
103
43
  "null"
104
- ]
105
- }
106
- },
107
- "required": [
108
- "reason"
109
- ],
110
- "additionalProperties": false,
111
- "description": "Typed terminal setup outcome with native command evidence when available."
112
- },
113
- "command": {
114
- "type": [
115
- "string",
116
- "null"
117
- ],
118
- "description": "Display-only native-login command description, when available."
119
- },
120
- "guideUrl": {
121
- "anyOf": [
122
- {
44
+ ],
45
+ "default": null,
46
+ "description": "Registered profile this login targets; null = the default session."
47
+ },
48
+ "state": {
123
49
  "type": "string",
124
- "format": "uri"
50
+ "enum": [
51
+ "queued",
52
+ "running",
53
+ "waiting_for_input",
54
+ "succeeded",
55
+ "failed",
56
+ "cancelled",
57
+ "timed_out",
58
+ "interrupted_unknown",
59
+ "not_supported"
60
+ ],
61
+ "description": "Lifecycle state of a setup job, including waiting_for_input (needs user confirmation/input) and not_supported."
125
62
  },
126
- {
127
- "type": "null"
128
- }
129
- ],
130
- "description": "Official vendor login guide URL."
131
- },
132
- "message": {
133
- "type": "string",
134
- "description": "Human-readable status message."
135
- },
136
- "createdAt": {
137
- "type": "string",
138
- "format": "date-time",
139
- "description": "When the job was created."
140
- },
141
- "startedAt": {
142
- "anyOf": [
143
- {
144
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/deadlineAt"
63
+ "phase": {
64
+ "type": "string",
65
+ "enum": [
66
+ "preparing",
67
+ "launching",
68
+ "awaiting_user",
69
+ "verifying",
70
+ "cancelling",
71
+ "completed"
72
+ ],
73
+ "description": "Fine-grained setup phase; cancellation remains a phase until the underlying process has actually stopped."
145
74
  },
146
- {
147
- "type": "null"
148
- }
149
- ],
150
- "description": "When the job started running."
151
- },
152
- "finishedAt": {
153
- "anyOf": [
154
- {
155
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/deadlineAt"
75
+ "deadlineAt": {
76
+ "type": "string",
77
+ "format": "date-time",
78
+ "description": "Current native-login deadline when the job has one."
156
79
  },
157
- {
158
- "type": "null"
159
- }
160
- ],
161
- "description": "When the job finished."
162
- },
163
- "authCapability": {
164
- "anyOf": [
165
- {
80
+ "outcome": {
166
81
  "type": "object",
167
82
  "properties": {
168
- "attemptId": {
169
- "type": "string",
170
- "minLength": 1,
171
- "description": "Non-empty identifier string."
172
- },
173
- "challengeDigest": {
83
+ "reason": {
174
84
  "type": "string",
175
- "pattern": "^[a-f0-9]{64}$"
176
- },
177
- "requestDigest": {
178
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
179
- },
180
- "disclosure": {
181
- "type": "object",
182
- "properties": {
183
- "schemaVersion": {
184
- "type": "number",
185
- "const": 1
186
- },
187
- "protocolVersion": {
188
- "type": "number",
189
- "const": 1
190
- },
191
- "harness": {
192
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
193
- },
194
- "requested": {
195
- "type": "string",
196
- "enum": [
197
- "subscription",
198
- "api_key",
199
- "auto"
200
- ],
201
- "description": "Requested credential behavior: exact subscription, exact managed API key, or policy-governed auto selection."
202
- },
203
- "requiredRoute": {
204
- "type": "string",
205
- "enum": [
206
- "vendor_native",
207
- "managed_api_key",
208
- "local"
209
- ],
210
- "description": "Effective credential route: vendor-owned native session, Claudexor-managed API key, or credential-free local execution."
211
- },
212
- "requiredSource": {
213
- "type": "string",
214
- "enum": [
215
- "native_session",
216
- "oauth_token_env",
217
- "api_key_env",
218
- "api_key_flag",
219
- "provider_auth_file",
220
- "none"
221
- ],
222
- "description": "Concrete credential source used or probed by a harness."
223
- },
224
- "networkScope": {
225
- "type": "string",
226
- "const": "selected_harness_only"
227
- },
228
- "billingKnowledge": {
229
- "type": "string",
230
- "enum": [
231
- "proven_zero",
232
- "subscription_entitlement",
233
- "metered",
234
- "unknown"
235
- ],
236
- "description": "What is actually known about incremental billing; a native credential route alone never proves entitlement or zero cost."
237
- },
238
- "incrementalCostKnowledge": {
239
- "type": "string",
240
- "enum": [
241
- "exact",
242
- "estimated",
243
- "unknown"
244
- ],
245
- "description": "Quality of incremental-cash cost evidence for an operation."
246
- },
247
- "mayConsumeQuota": {
248
- "type": "boolean"
249
- },
250
- "generatedAt": {
251
- "type": "string",
252
- "format": "date-time"
85
+ "enum": [
86
+ "completed",
87
+ "not_supported",
88
+ "launch_failed",
89
+ "command_failed",
90
+ "auth_not_ready",
91
+ "capability_verification_failed",
92
+ "credential_route_mismatch",
93
+ "timed_out",
94
+ "cancelled_by_user",
95
+ "cancelled_on_restart",
96
+ "interrupted",
97
+ "interrupted_unknown",
98
+ "termination_unconfirmed"
99
+ ]
100
+ },
101
+ "exitCode": {
102
+ "anyOf": [
103
+ {
104
+ "type": "integer"
105
+ },
106
+ {
107
+ "type": "null"
253
108
  }
254
- },
255
- "required": [
256
- "schemaVersion",
257
- "protocolVersion",
258
- "harness",
259
- "requested",
260
- "requiredRoute",
261
- "requiredSource",
262
- "networkScope",
263
- "billingKnowledge",
264
- "incrementalCostKnowledge",
265
- "mayConsumeQuota",
266
- "generatedAt"
267
- ],
268
- "additionalProperties": false,
269
- "description": "Pre-execution disclosure for the exact same-harness capability smoke required by auth setup."
109
+ ]
270
110
  },
271
- "state": {
272
- "type": "string",
273
- "const": "disclosed"
111
+ "signal": {
112
+ "type": [
113
+ "string",
114
+ "null"
115
+ ]
274
116
  }
275
117
  },
276
118
  "required": [
277
- "attemptId",
278
- "challengeDigest",
279
- "requestDigest",
280
- "disclosure",
281
- "state"
119
+ "reason"
282
120
  ],
283
- "additionalProperties": false
121
+ "additionalProperties": false,
122
+ "description": "Typed terminal setup outcome with native command evidence when available."
284
123
  },
285
- {
286
- "type": "object",
287
- "properties": {
288
- "attemptId": {
289
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
290
- },
291
- "challengeDigest": {
292
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
293
- },
294
- "requestDigest": {
295
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
296
- },
297
- "disclosure": {
298
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure"
299
- },
300
- "state": {
124
+ "command": {
125
+ "type": [
126
+ "string",
127
+ "null"
128
+ ],
129
+ "description": "Display-only native-login command description, when available."
130
+ },
131
+ "guideUrl": {
132
+ "anyOf": [
133
+ {
301
134
  "type": "string",
302
- "const": "running"
135
+ "format": "uri"
303
136
  },
304
- "startedAt": {
305
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
137
+ {
138
+ "type": "null"
306
139
  }
307
- },
308
- "required": [
309
- "attemptId",
310
- "challengeDigest",
311
- "requestDigest",
312
- "disclosure",
313
- "state",
314
- "startedAt"
315
140
  ],
316
- "additionalProperties": false
141
+ "description": "Official vendor login guide URL."
317
142
  },
318
- {
319
- "type": "object",
320
- "properties": {
321
- "attemptId": {
322
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
323
- },
324
- "challengeDigest": {
325
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
326
- },
327
- "requestDigest": {
328
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
329
- },
330
- "disclosure": {
331
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure"
332
- },
333
- "state": {
334
- "type": "string",
335
- "const": "completed"
336
- },
337
- "startedAt": {
338
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
143
+ "message": {
144
+ "type": "string",
145
+ "description": "Human-readable status message."
146
+ },
147
+ "createdAt": {
148
+ "type": "string",
149
+ "format": "date-time",
150
+ "description": "When the job was created."
151
+ },
152
+ "startedAt": {
153
+ "anyOf": [
154
+ {
155
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/deadlineAt"
339
156
  },
340
- "completedAt": {
341
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
157
+ {
158
+ "type": "null"
159
+ }
160
+ ],
161
+ "description": "When the job started running."
162
+ },
163
+ "finishedAt": {
164
+ "anyOf": [
165
+ {
166
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/deadlineAt"
342
167
  },
343
- "receipt": {
168
+ {
169
+ "type": "null"
170
+ }
171
+ ],
172
+ "description": "When the job finished."
173
+ },
174
+ "authCapability": {
175
+ "anyOf": [
176
+ {
344
177
  "type": "object",
345
178
  "properties": {
346
- "receiptId": {
347
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
348
- },
349
179
  "attemptId": {
350
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
351
- },
352
- "harness": {
353
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
354
- },
355
- "requested": {
356
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requested"
180
+ "type": "string",
181
+ "minLength": 1,
182
+ "description": "Non-empty identifier string."
357
183
  },
358
- "requiredRoute": {
359
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredRoute"
184
+ "challengeDigest": {
185
+ "type": "string",
186
+ "pattern": "^[a-f0-9]{64}$"
360
187
  },
361
- "requiredSource": {
362
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredSource"
188
+ "requestDigest": {
189
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
363
190
  },
364
- "effective": {
365
- "anyOf": [
366
- {
367
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredRoute"
191
+ "disclosure": {
192
+ "type": "object",
193
+ "properties": {
194
+ "schemaVersion": {
195
+ "type": "number",
196
+ "const": 1
368
197
  },
369
- {
370
- "type": "null"
371
- }
372
- ],
373
- "description": "Effective credential route: vendor-owned native session, Claudexor-managed API key, or credential-free local execution."
374
- },
375
- "effectiveSource": {
376
- "anyOf": [
377
- {
378
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredSource"
198
+ "protocolVersion": {
199
+ "type": "number",
200
+ "const": 1
201
+ },
202
+ "harness": {
203
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
204
+ },
205
+ "requested": {
206
+ "type": "string",
207
+ "enum": [
208
+ "subscription",
209
+ "api_key",
210
+ "auto"
211
+ ],
212
+ "description": "Requested credential behavior: exact subscription, exact managed API key, or policy-governed auto selection."
213
+ },
214
+ "requiredRoute": {
215
+ "type": "string",
216
+ "enum": [
217
+ "vendor_native",
218
+ "managed_api_key",
219
+ "local"
220
+ ],
221
+ "description": "Effective credential route: vendor-owned native session, Claudexor-managed API key, or credential-free local execution."
222
+ },
223
+ "requiredSource": {
224
+ "type": "string",
225
+ "enum": [
226
+ "native_session",
227
+ "oauth_token_env",
228
+ "api_key_env",
229
+ "api_key_flag",
230
+ "provider_auth_file",
231
+ "none"
232
+ ],
233
+ "description": "Concrete credential source used or probed by a harness."
234
+ },
235
+ "networkScope": {
236
+ "type": "string",
237
+ "const": "selected_harness_only"
238
+ },
239
+ "billingKnowledge": {
240
+ "type": "string",
241
+ "enum": [
242
+ "proven_zero",
243
+ "subscription_entitlement",
244
+ "metered",
245
+ "unknown"
246
+ ],
247
+ "description": "What is actually known about incremental billing; a native credential route alone never proves entitlement or zero cost."
248
+ },
249
+ "incrementalCostKnowledge": {
250
+ "type": "string",
251
+ "enum": [
252
+ "exact",
253
+ "estimated",
254
+ "unknown"
255
+ ],
256
+ "description": "Quality of incremental-cash cost evidence for an operation."
257
+ },
258
+ "mayConsumeQuota": {
259
+ "type": "boolean"
379
260
  },
380
- {
381
- "type": "null"
261
+ "generatedAt": {
262
+ "type": "string",
263
+ "format": "date-time"
382
264
  }
265
+ },
266
+ "required": [
267
+ "schemaVersion",
268
+ "protocolVersion",
269
+ "harness",
270
+ "requested",
271
+ "requiredRoute",
272
+ "requiredSource",
273
+ "networkScope",
274
+ "billingKnowledge",
275
+ "incrementalCostKnowledge",
276
+ "mayConsumeQuota",
277
+ "generatedAt"
383
278
  ],
384
- "description": "Concrete credential source used or probed by a harness."
279
+ "additionalProperties": false,
280
+ "description": "Pre-execution disclosure for the exact same-harness capability smoke required by auth setup."
385
281
  },
386
- "selectionReason": {
282
+ "state": {
387
283
  "type": "string",
388
- "enum": [
389
- "exact_requested_route",
390
- "adapter_unavailable",
391
- "request_mismatch",
392
- "route_missing",
393
- "route_mismatch",
394
- "source_missing",
395
- "source_mismatch",
396
- "harness_error",
397
- "adapter_error",
398
- "missing_completion",
399
- "response_mismatch",
400
- "scratch_mutated",
401
- "protocol_violation",
402
- "adapter_identity_mismatch",
403
- "cancelled"
404
- ]
405
- },
406
- "availability": {
407
- "type": "string",
408
- "enum": [
409
- "available",
410
- "unavailable",
411
- "unknown"
412
- ]
284
+ "const": "disclosed"
285
+ }
286
+ },
287
+ "required": [
288
+ "attemptId",
289
+ "challengeDigest",
290
+ "requestDigest",
291
+ "disclosure",
292
+ "state"
293
+ ],
294
+ "additionalProperties": false
295
+ },
296
+ {
297
+ "type": "object",
298
+ "properties": {
299
+ "attemptId": {
300
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
413
301
  },
414
- "verification": {
415
- "type": "string",
416
- "enum": [
417
- "passed",
418
- "failed",
419
- "not_run"
420
- ]
302
+ "challengeDigest": {
303
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
421
304
  },
422
- "billingKnowledge": {
423
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/billingKnowledge"
305
+ "requestDigest": {
306
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
424
307
  },
425
- "costKnowledge": {
426
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/incrementalCostKnowledge"
308
+ "disclosure": {
309
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure"
427
310
  },
428
- "costUsd": {
429
- "type": "number",
430
- "minimum": 0
311
+ "state": {
312
+ "type": "string",
313
+ "const": "running"
431
314
  },
432
315
  "startedAt": {
433
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
434
- },
435
- "completedAt": {
436
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
316
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
317
+ }
318
+ },
319
+ "required": [
320
+ "attemptId",
321
+ "challengeDigest",
322
+ "requestDigest",
323
+ "disclosure",
324
+ "state",
325
+ "startedAt"
326
+ ],
327
+ "additionalProperties": false
328
+ },
329
+ {
330
+ "type": "object",
331
+ "properties": {
332
+ "attemptId": {
333
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
437
334
  },
438
335
  "challengeDigest": {
439
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
336
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
440
337
  },
441
338
  "requestDigest": {
442
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
339
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
443
340
  },
444
- "responseDigest": {
445
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
341
+ "disclosure": {
342
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure"
446
343
  },
447
- "streamDigest": {
448
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
344
+ "state": {
345
+ "type": "string",
346
+ "const": "completed"
449
347
  },
450
- "scratchBeforeDigest": {
451
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
348
+ "startedAt": {
349
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
452
350
  },
453
- "scratchAfterDigest": {
454
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
351
+ "completedAt": {
352
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
455
353
  },
456
- "stream": {
354
+ "receipt": {
457
355
  "type": "object",
458
356
  "properties": {
459
- "startedEvents": {
460
- "type": "integer",
461
- "minimum": 0
357
+ "receiptId": {
358
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
462
359
  },
463
- "completedEvents": {
464
- "type": "integer",
465
- "minimum": 0
360
+ "attemptId": {
361
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
466
362
  },
467
- "errorEvents": {
468
- "type": "integer",
469
- "minimum": 0
363
+ "harness": {
364
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
470
365
  },
471
- "unexpectedToolEvents": {
472
- "type": "integer",
473
- "minimum": 0
366
+ "requested": {
367
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requested"
474
368
  },
475
- "interactionEvents": {
476
- "type": "integer",
477
- "minimum": 0
369
+ "requiredRoute": {
370
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredRoute"
478
371
  },
479
- "sessionMismatchEvents": {
480
- "type": "integer",
481
- "minimum": 0
372
+ "requiredSource": {
373
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredSource"
482
374
  },
483
- "eventsAfterCompleted": {
484
- "type": "integer",
375
+ "effective": {
376
+ "anyOf": [
377
+ {
378
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredRoute"
379
+ },
380
+ {
381
+ "type": "null"
382
+ }
383
+ ],
384
+ "description": "Effective credential route: vendor-owned native session, Claudexor-managed API key, or credential-free local execution."
385
+ },
386
+ "effectiveSource": {
387
+ "anyOf": [
388
+ {
389
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/requiredSource"
390
+ },
391
+ {
392
+ "type": "null"
393
+ }
394
+ ],
395
+ "description": "Concrete credential source used or probed by a harness."
396
+ },
397
+ "selectionReason": {
398
+ "type": "string",
399
+ "enum": [
400
+ "exact_requested_route",
401
+ "adapter_unavailable",
402
+ "request_mismatch",
403
+ "route_missing",
404
+ "route_mismatch",
405
+ "source_missing",
406
+ "source_mismatch",
407
+ "harness_error",
408
+ "adapter_error",
409
+ "missing_completion",
410
+ "response_mismatch",
411
+ "scratch_mutated",
412
+ "protocol_violation",
413
+ "adapter_identity_mismatch",
414
+ "cancelled"
415
+ ]
416
+ },
417
+ "availability": {
418
+ "type": "string",
419
+ "enum": [
420
+ "available",
421
+ "unavailable",
422
+ "unknown"
423
+ ]
424
+ },
425
+ "verification": {
426
+ "type": "string",
427
+ "enum": [
428
+ "passed",
429
+ "failed",
430
+ "not_run"
431
+ ]
432
+ },
433
+ "billingKnowledge": {
434
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/billingKnowledge"
435
+ },
436
+ "costKnowledge": {
437
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/incrementalCostKnowledge"
438
+ },
439
+ "costUsd": {
440
+ "type": "number",
485
441
  "minimum": 0
486
442
  },
487
- "aborted": {
488
- "type": "boolean"
443
+ "startedAt": {
444
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
445
+ },
446
+ "completedAt": {
447
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
448
+ },
449
+ "challengeDigest": {
450
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
451
+ },
452
+ "requestDigest": {
453
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
454
+ },
455
+ "responseDigest": {
456
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
457
+ },
458
+ "streamDigest": {
459
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
460
+ },
461
+ "scratchBeforeDigest": {
462
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
463
+ },
464
+ "scratchAfterDigest": {
465
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
466
+ },
467
+ "stream": {
468
+ "type": "object",
469
+ "properties": {
470
+ "startedEvents": {
471
+ "type": "integer",
472
+ "minimum": 0
473
+ },
474
+ "completedEvents": {
475
+ "type": "integer",
476
+ "minimum": 0
477
+ },
478
+ "errorEvents": {
479
+ "type": "integer",
480
+ "minimum": 0
481
+ },
482
+ "unexpectedToolEvents": {
483
+ "type": "integer",
484
+ "minimum": 0
485
+ },
486
+ "interactionEvents": {
487
+ "type": "integer",
488
+ "minimum": 0
489
+ },
490
+ "sessionMismatchEvents": {
491
+ "type": "integer",
492
+ "minimum": 0
493
+ },
494
+ "eventsAfterCompleted": {
495
+ "type": "integer",
496
+ "minimum": 0
497
+ },
498
+ "aborted": {
499
+ "type": "boolean"
500
+ }
501
+ },
502
+ "required": [
503
+ "startedEvents",
504
+ "completedEvents",
505
+ "errorEvents",
506
+ "unexpectedToolEvents",
507
+ "interactionEvents",
508
+ "sessionMismatchEvents",
509
+ "eventsAfterCompleted",
510
+ "aborted"
511
+ ],
512
+ "additionalProperties": false
513
+ },
514
+ "evidenceRefs": {
515
+ "type": "array",
516
+ "items": {
517
+ "type": "string",
518
+ "minLength": 1
519
+ }
489
520
  }
490
521
  },
491
522
  "required": [
492
- "startedEvents",
493
- "completedEvents",
494
- "errorEvents",
495
- "unexpectedToolEvents",
496
- "interactionEvents",
497
- "sessionMismatchEvents",
498
- "eventsAfterCompleted",
499
- "aborted"
523
+ "receiptId",
524
+ "attemptId",
525
+ "harness",
526
+ "requested",
527
+ "requiredRoute",
528
+ "requiredSource",
529
+ "effective",
530
+ "effectiveSource",
531
+ "selectionReason",
532
+ "availability",
533
+ "verification",
534
+ "billingKnowledge",
535
+ "costKnowledge",
536
+ "startedAt",
537
+ "completedAt",
538
+ "challengeDigest",
539
+ "requestDigest",
540
+ "responseDigest",
541
+ "streamDigest",
542
+ "scratchBeforeDigest",
543
+ "scratchAfterDigest",
544
+ "stream",
545
+ "evidenceRefs"
500
546
  ],
501
- "additionalProperties": false
502
- },
503
- "evidenceRefs": {
504
- "type": "array",
505
- "items": {
506
- "type": "string",
507
- "minLength": 1
508
- }
547
+ "additionalProperties": false,
548
+ "description": "Immutable result of one exact-route same-harness capability smoke."
509
549
  }
510
550
  },
511
551
  "required": [
512
- "receiptId",
513
552
  "attemptId",
514
- "harness",
515
- "requested",
516
- "requiredRoute",
517
- "requiredSource",
518
- "effective",
519
- "effectiveSource",
520
- "selectionReason",
521
- "availability",
522
- "verification",
523
- "billingKnowledge",
524
- "costKnowledge",
553
+ "challengeDigest",
554
+ "requestDigest",
555
+ "disclosure",
556
+ "state",
525
557
  "startedAt",
526
558
  "completedAt",
559
+ "receipt"
560
+ ],
561
+ "additionalProperties": false
562
+ },
563
+ {
564
+ "type": "object",
565
+ "properties": {
566
+ "attemptId": {
567
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
568
+ },
569
+ "challengeDigest": {
570
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
571
+ },
572
+ "requestDigest": {
573
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
574
+ },
575
+ "disclosure": {
576
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure"
577
+ },
578
+ "state": {
579
+ "type": "string",
580
+ "const": "interrupted_unknown"
581
+ },
582
+ "startedAt": {
583
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
584
+ },
585
+ "interruptedAt": {
586
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
587
+ }
588
+ },
589
+ "required": [
590
+ "attemptId",
527
591
  "challengeDigest",
528
592
  "requestDigest",
529
- "responseDigest",
530
- "streamDigest",
531
- "scratchBeforeDigest",
532
- "scratchAfterDigest",
533
- "stream",
534
- "evidenceRefs"
593
+ "disclosure",
594
+ "state",
595
+ "startedAt",
596
+ "interruptedAt"
535
597
  ],
536
- "additionalProperties": false,
537
- "description": "Immutable result of one exact-route same-harness capability smoke."
598
+ "additionalProperties": false
538
599
  }
539
- },
540
- "required": [
541
- "attemptId",
542
- "challengeDigest",
543
- "requestDigest",
544
- "disclosure",
545
- "state",
546
- "startedAt",
547
- "completedAt",
548
- "receipt"
549
600
  ],
550
- "additionalProperties": false
601
+ "description": "Single durable lifecycle for the exact-route same-harness capability proof."
551
602
  },
552
- {
603
+ "execution": {
553
604
  "type": "object",
554
605
  "properties": {
555
- "attemptId": {
556
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/attemptId"
557
- },
558
- "challengeDigest": {
559
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
606
+ "executionId": {
607
+ "type": "string",
608
+ "pattern": "^[A-Za-z0-9-]+$"
560
609
  },
561
- "requestDigest": {
562
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/challengeDigest"
610
+ "commandDigest": {
611
+ "type": "string",
612
+ "pattern": "^[a-f0-9]{64}$"
563
613
  },
564
- "disclosure": {
565
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure"
614
+ "manifestDigest": {
615
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/execution/properties/commandDigest"
566
616
  },
567
- "state": {
568
- "type": "string",
569
- "const": "interrupted_unknown"
617
+ "processGroup": {
618
+ "type": "object",
619
+ "properties": {
620
+ "schemaVersion": {
621
+ "type": "number",
622
+ "const": 1
623
+ },
624
+ "pgid": {
625
+ "type": "integer",
626
+ "exclusiveMinimum": 0
627
+ },
628
+ "leader": {
629
+ "type": "object",
630
+ "properties": {
631
+ "status": {
632
+ "type": "string",
633
+ "const": "known"
634
+ },
635
+ "pid": {
636
+ "type": "integer",
637
+ "exclusiveMinimum": 0
638
+ },
639
+ "platform": {
640
+ "type": "string",
641
+ "enum": [
642
+ "linux",
643
+ "darwin"
644
+ ]
645
+ },
646
+ "source": {
647
+ "type": "string",
648
+ "enum": [
649
+ "procfs_stat",
650
+ "proc_pidinfo"
651
+ ]
652
+ },
653
+ "startToken": {
654
+ "type": "string",
655
+ "minLength": 1
656
+ },
657
+ "processGroupId": {
658
+ "type": "integer",
659
+ "exclusiveMinimum": 0
660
+ }
661
+ },
662
+ "required": [
663
+ "status",
664
+ "pid",
665
+ "platform",
666
+ "source",
667
+ "startToken",
668
+ "processGroupId"
669
+ ],
670
+ "additionalProperties": false
671
+ }
672
+ },
673
+ "required": [
674
+ "schemaVersion",
675
+ "pgid",
676
+ "leader"
677
+ ],
678
+ "additionalProperties": false
570
679
  },
571
- "startedAt": {
572
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
680
+ "observedAt": {
681
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/deadlineAt"
573
682
  },
574
- "interruptedAt": {
575
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/authCapability/anyOf/0/properties/disclosure/properties/generatedAt"
683
+ "permitIssuedAt": {
684
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/deadlineAt"
576
685
  }
577
686
  },
578
687
  "required": [
579
- "attemptId",
580
- "challengeDigest",
581
- "requestDigest",
582
- "disclosure",
583
- "state",
584
- "startedAt",
585
- "interruptedAt"
688
+ "executionId",
689
+ "commandDigest",
690
+ "manifestDigest",
691
+ "processGroup",
692
+ "observedAt"
586
693
  ],
587
- "additionalProperties": false
588
- }
589
- ],
590
- "description": "Single durable lifecycle for the exact-route same-harness capability proof."
591
- },
592
- "execution": {
593
- "type": "object",
594
- "properties": {
595
- "executionId": {
596
- "type": "string",
597
- "pattern": "^[A-Za-z0-9-]+$"
694
+ "additionalProperties": false,
695
+ "description": "Durable process-group and pre-execution permit evidence."
598
696
  },
599
- "commandDigest": {
600
- "type": "string",
601
- "pattern": "^[a-f0-9]{64}$"
602
- },
603
- "manifestDigest": {
604
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/execution/properties/commandDigest"
605
- },
606
- "processGroup": {
697
+ "authorization": {
607
698
  "type": "object",
608
699
  "properties": {
609
- "schemaVersion": {
610
- "type": "number",
611
- "const": 1
612
- },
613
- "pgid": {
614
- "type": "integer",
615
- "exclusiveMinimum": 0
700
+ "executionId": {
701
+ "type": "string",
702
+ "pattern": "^[A-Za-z0-9-]+$"
616
703
  },
617
- "leader": {
704
+ "executable": {
618
705
  "type": "object",
619
706
  "properties": {
620
- "status": {
707
+ "realpath": {
621
708
  "type": "string",
622
- "const": "known"
709
+ "pattern": "^\\/"
710
+ },
711
+ "sha256": {
712
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/execution/properties/commandDigest"
623
713
  },
624
- "pid": {
714
+ "size": {
625
715
  "type": "integer",
626
- "exclusiveMinimum": 0
716
+ "minimum": 0
627
717
  },
628
- "platform": {
629
- "type": "string",
630
- "enum": [
631
- "linux",
632
- "darwin"
633
- ]
718
+ "mode": {
719
+ "type": "integer",
720
+ "minimum": 0
634
721
  },
635
- "source": {
722
+ "device": {
636
723
  "type": "string",
637
- "enum": [
638
- "procfs_stat",
639
- "proc_pidinfo"
640
- ]
724
+ "pattern": "^[0-9]+$"
641
725
  },
642
- "startToken": {
726
+ "inode": {
643
727
  "type": "string",
644
- "minLength": 1
645
- },
646
- "processGroupId": {
647
- "type": "integer",
648
- "exclusiveMinimum": 0
728
+ "pattern": "^[0-9]+$"
649
729
  }
650
730
  },
651
731
  "required": [
652
- "status",
653
- "pid",
654
- "platform",
655
- "source",
656
- "startToken",
657
- "processGroupId"
732
+ "realpath",
733
+ "sha256",
734
+ "size",
735
+ "mode",
736
+ "device",
737
+ "inode"
658
738
  ],
659
739
  "additionalProperties": false
740
+ },
741
+ "args": {
742
+ "type": "array",
743
+ "items": {
744
+ "type": "string"
745
+ }
746
+ },
747
+ "commandDigest": {
748
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/execution/properties/commandDigest"
749
+ },
750
+ "manifestDigest": {
751
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/execution/properties/commandDigest"
660
752
  }
661
753
  },
662
754
  "required": [
663
- "schemaVersion",
664
- "pgid",
665
- "leader"
755
+ "executionId",
756
+ "executable",
757
+ "args",
758
+ "commandDigest",
759
+ "manifestDigest"
666
760
  ],
667
- "additionalProperties": false
668
- },
669
- "observedAt": {
670
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/deadlineAt"
761
+ "additionalProperties": false,
762
+ "description": "Immutable hash-bound command authorized before external handoff."
671
763
  },
672
- "permitIssuedAt": {
673
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/deadlineAt"
674
- }
675
- },
676
- "required": [
677
- "executionId",
678
- "commandDigest",
679
- "manifestDigest",
680
- "processGroup",
681
- "observedAt"
682
- ],
683
- "additionalProperties": false,
684
- "description": "Durable process-group and pre-execution permit evidence."
685
- },
686
- "authorization": {
687
- "type": "object",
688
- "properties": {
689
- "executionId": {
690
- "type": "string",
691
- "pattern": "^[A-Za-z0-9-]+$"
692
- },
693
- "executable": {
764
+ "nativeCommand": {
694
765
  "type": "object",
695
766
  "properties": {
696
- "realpath": {
767
+ "executionId": {
697
768
  "type": "string",
698
- "pattern": "^\\/"
769
+ "pattern": "^[A-Za-z0-9-]+$"
699
770
  },
700
- "sha256": {
701
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/execution/properties/commandDigest"
771
+ "commandDigest": {
772
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/execution/properties/commandDigest"
702
773
  },
703
- "size": {
704
- "type": "integer",
705
- "minimum": 0
774
+ "manifestDigest": {
775
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/execution/properties/commandDigest"
706
776
  },
707
- "mode": {
708
- "type": "integer",
709
- "minimum": 0
777
+ "permitIssuedAt": {
778
+ "anyOf": [
779
+ {
780
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/deadlineAt"
781
+ },
782
+ {
783
+ "type": "null"
784
+ }
785
+ ]
710
786
  },
711
- "device": {
712
- "type": "string",
713
- "pattern": "^[0-9]+$"
787
+ "commandStarted": {
788
+ "type": "boolean"
789
+ },
790
+ "exitCode": {
791
+ "anyOf": [
792
+ {
793
+ "type": "integer",
794
+ "minimum": 0
795
+ },
796
+ {
797
+ "type": "null"
798
+ }
799
+ ]
714
800
  },
715
- "inode": {
801
+ "signal": {
802
+ "type": [
803
+ "string",
804
+ "null"
805
+ ]
806
+ },
807
+ "errorCode": {
716
808
  "type": "string",
717
- "pattern": "^[0-9]+$"
809
+ "enum": [
810
+ "permit_timeout",
811
+ "spawn_failed",
812
+ "device_auth_unsupported"
813
+ ]
814
+ },
815
+ "finishedAt": {
816
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/deadlineAt"
718
817
  }
719
818
  },
720
819
  "required": [
721
- "realpath",
722
- "sha256",
723
- "size",
724
- "mode",
725
- "device",
726
- "inode"
820
+ "executionId",
821
+ "commandDigest",
822
+ "manifestDigest",
823
+ "permitIssuedAt",
824
+ "commandStarted",
825
+ "exitCode",
826
+ "signal",
827
+ "finishedAt"
727
828
  ],
728
- "additionalProperties": false
729
- },
730
- "args": {
731
- "type": "array",
732
- "items": {
733
- "type": "string"
734
- }
829
+ "additionalProperties": false,
830
+ "description": "Durable result of the hash-bound native login command, persisted before capability verification."
735
831
  },
736
- "commandDigest": {
737
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/execution/properties/commandDigest"
738
- },
739
- "manifestDigest": {
740
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/execution/properties/commandDigest"
832
+ "terminationReconciliation": {
833
+ "type": "object",
834
+ "properties": {
835
+ "status": {
836
+ "type": "string",
837
+ "const": "empty"
838
+ },
839
+ "observedAt": {
840
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job/properties/deadlineAt"
841
+ }
842
+ },
843
+ "required": [
844
+ "status",
845
+ "observedAt"
846
+ ],
847
+ "additionalProperties": false,
848
+ "description": "Server-owned proof that a previously unconfirmed setup process group is empty."
741
849
  }
742
850
  },
743
851
  "required": [
744
- "executionId",
745
- "executable",
746
- "args",
747
- "commandDigest",
748
- "manifestDigest"
852
+ "jobId",
853
+ "harness",
854
+ "action",
855
+ "state",
856
+ "phase",
857
+ "command",
858
+ "guideUrl",
859
+ "message",
860
+ "createdAt",
861
+ "startedAt",
862
+ "finishedAt"
749
863
  ],
750
864
  "additionalProperties": false,
751
- "description": "Immutable hash-bound command authorized before external handoff."
865
+ "description": "One daemon-managed exact-subscription native-login job."
752
866
  },
753
- "nativeCommand": {
754
- "type": "object",
755
- "properties": {
756
- "executionId": {
757
- "type": "string",
758
- "pattern": "^[A-Za-z0-9-]+$"
759
- },
760
- "commandDigest": {
761
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/execution/properties/commandDigest"
762
- },
763
- "manifestDigest": {
764
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/execution/properties/commandDigest"
867
+ "cursor": {
868
+ "type": "string",
869
+ "minLength": 1,
870
+ "maxLength": 4096,
871
+ "description": "Opaque durable cursor fencing the returned snapshot."
872
+ },
873
+ "sequence": {
874
+ "type": "integer",
875
+ "minimum": -9007199254740991,
876
+ "maximum": 9007199254740991,
877
+ "description": "Global partition sequence fenced by the snapshot."
878
+ },
879
+ "deviceCode": {
880
+ "not": {}
881
+ }
882
+ },
883
+ "required": [
884
+ "job",
885
+ "cursor",
886
+ "sequence"
887
+ ],
888
+ "additionalProperties": false
889
+ },
890
+ {
891
+ "type": "object",
892
+ "properties": {
893
+ "job": {
894
+ "allOf": [
895
+ {
896
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/job"
765
897
  },
766
- "permitIssuedAt": {
767
- "anyOf": [
768
- {
769
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/deadlineAt"
898
+ {
899
+ "type": "object",
900
+ "properties": {
901
+ "harness": {
902
+ "type": "string",
903
+ "const": "codex"
770
904
  },
771
- {
772
- "type": "null"
773
- }
774
- ]
775
- },
776
- "commandStarted": {
777
- "type": "boolean"
778
- },
779
- "exitCode": {
780
- "anyOf": [
781
- {
782
- "type": "integer",
783
- "minimum": 0
905
+ "action": {
906
+ "type": "string",
907
+ "const": "login"
784
908
  },
785
- {
786
- "type": "null"
909
+ "state": {
910
+ "type": "string",
911
+ "enum": [
912
+ "queued",
913
+ "running",
914
+ "waiting_for_input"
915
+ ],
916
+ "description": "Lifecycle state of a setup job, including waiting_for_input (needs user confirmation/input) and not_supported."
917
+ },
918
+ "phase": {
919
+ "type": "string",
920
+ "const": "awaiting_user"
787
921
  }
788
- ]
789
- },
790
- "signal": {
791
- "type": [
792
- "string",
793
- "null"
794
- ]
795
- },
796
- "errorCode": {
797
- "type": "string",
798
- "enum": [
799
- "permit_timeout",
800
- "spawn_failed",
801
- "device_auth_unsupported"
802
- ]
803
- },
804
- "finishedAt": {
805
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/deadlineAt"
922
+ },
923
+ "required": [
924
+ "harness",
925
+ "action",
926
+ "state",
927
+ "phase"
928
+ ],
929
+ "additionalProperties": true
806
930
  }
807
- },
808
- "required": [
809
- "executionId",
810
- "commandDigest",
811
- "manifestDigest",
812
- "permitIssuedAt",
813
- "commandStarted",
814
- "exitCode",
815
- "signal",
816
- "finishedAt"
817
931
  ],
818
- "additionalProperties": false,
819
- "description": "Durable result of the hash-bound native login command, persisted before capability verification."
932
+ "description": "One daemon-managed exact-subscription native-login job."
820
933
  },
821
- "terminationReconciliation": {
934
+ "cursor": {
935
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/cursor"
936
+ },
937
+ "sequence": {
938
+ "$ref": "#/definitions/ControlSetupJobSnapshot/anyOf/0/properties/sequence"
939
+ },
940
+ "deviceCode": {
822
941
  "type": "object",
823
942
  "properties": {
824
- "status": {
943
+ "flow": {
825
944
  "type": "string",
826
- "const": "empty"
945
+ "enum": [
946
+ "chatgptDeviceCode",
947
+ "chatgpt"
948
+ ]
827
949
  },
828
- "observedAt": {
829
- "$ref": "#/definitions/ControlSetupJobSnapshot/properties/job/properties/deadlineAt"
950
+ "verificationUrl": {
951
+ "type": "string",
952
+ "format": "uri",
953
+ "description": "Where the operator completes the sign-in."
954
+ },
955
+ "userCode": {
956
+ "type": "string",
957
+ "description": "Transient one-time code (empty for the browser-callback flow); never journaled."
830
958
  }
831
959
  },
832
960
  "required": [
833
- "status",
834
- "observedAt"
961
+ "flow",
962
+ "verificationUrl",
963
+ "userCode"
835
964
  ],
836
965
  "additionalProperties": false,
837
- "description": "Server-owned proof that a previously unconfirmed setup process group is empty."
838
- }
839
- },
840
- "required": [
841
- "jobId",
842
- "harness",
843
- "action",
844
- "state",
845
- "phase",
846
- "command",
847
- "guideUrl",
848
- "message",
849
- "createdAt",
850
- "startedAt",
851
- "finishedAt"
852
- ],
853
- "additionalProperties": false,
854
- "description": "One daemon-managed exact-subscription native-login job."
855
- },
856
- "cursor": {
857
- "type": "string",
858
- "minLength": 1,
859
- "maxLength": 4096,
860
- "description": "Opaque durable cursor fencing the returned snapshot."
861
- },
862
- "sequence": {
863
- "type": "integer",
864
- "minimum": -9007199254740991,
865
- "maximum": 9007199254740991,
866
- "description": "Global partition sequence fenced by the snapshot."
867
- },
868
- "deviceCode": {
869
- "type": "object",
870
- "properties": {
871
- "flow": {
872
- "type": "string",
873
- "enum": [
874
- "chatgptDeviceCode",
875
- "chatgpt"
876
- ]
877
- },
878
- "verificationUrl": {
879
- "type": "string",
880
- "format": "uri",
881
- "description": "Where the operator completes the sign-in."
882
- },
883
- "userCode": {
884
- "type": "string",
885
- "description": "Transient one-time code (empty for the browser-callback flow); never journaled."
966
+ "description": "Transient device-code disclosure overlaid at read time from the runner sidecar; never part of the journaled job."
886
967
  }
887
968
  },
888
969
  "required": [
889
- "flow",
890
- "verificationUrl",
891
- "userCode"
970
+ "job",
971
+ "cursor",
972
+ "sequence",
973
+ "deviceCode"
892
974
  ],
893
- "additionalProperties": false,
894
- "description": "Transient device-code disclosure overlaid at read time from the runner sidecar; never part of the journaled job."
975
+ "additionalProperties": false
895
976
  }
896
- },
897
- "required": [
898
- "job",
899
- "cursor",
900
- "sequence"
901
977
  ],
902
- "additionalProperties": false,
903
978
  "description": "Atomically fenced setup-job snapshot used before attaching or reattaching SSE."
904
979
  }
905
980
  },