@claudexor/schema 3.5.0 → 3.8.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 (106) hide show
  1. package/dist/accounts-migration.d.ts +112 -0
  2. package/dist/accounts-migration.d.ts.map +1 -0
  3. package/dist/accounts-migration.js +74 -0
  4. package/dist/accounts-migration.js.map +1 -0
  5. package/dist/agent-capabilities.d.ts +32 -0
  6. package/dist/agent-capabilities.d.ts.map +1 -1
  7. package/dist/agent-capabilities.js +4 -0
  8. package/dist/agent-capabilities.js.map +1 -1
  9. package/dist/config.d.ts +48 -30
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +32 -11
  12. package/dist/config.js.map +1 -1
  13. package/dist/control-harness-list.d.ts +197 -1
  14. package/dist/control-harness-list.d.ts.map +1 -1
  15. package/dist/control-operation-responses.d.ts +7 -7
  16. package/dist/control-run-detail.d.ts +19 -19
  17. package/dist/control-run-failure.d.ts +4 -4
  18. package/dist/control-run-failure.d.ts.map +1 -1
  19. package/dist/control-run-failure.js +7 -1
  20. package/dist/control-run-failure.js.map +1 -1
  21. package/dist/control.d.ts +23 -23
  22. package/dist/control.d.ts.map +1 -1
  23. package/dist/control.js +8 -8
  24. package/dist/control.js.map +1 -1
  25. package/dist/credential-profile-snapshot.d.ts +644 -30
  26. package/dist/credential-profile-snapshot.d.ts.map +1 -1
  27. package/dist/credential-profile.d.ts +365 -38
  28. package/dist/credential-profile.d.ts.map +1 -1
  29. package/dist/credential-profile.js +140 -28
  30. package/dist/credential-profile.js.map +1 -1
  31. package/dist/credential-store.d.ts +19 -6
  32. package/dist/credential-store.d.ts.map +1 -1
  33. package/dist/credential-store.js +21 -6
  34. package/dist/credential-store.js.map +1 -1
  35. package/dist/events.d.ts +44 -4
  36. package/dist/events.d.ts.map +1 -1
  37. package/dist/events.js +34 -0
  38. package/dist/events.js.map +1 -1
  39. package/dist/harness.d.ts +252 -59
  40. package/dist/harness.d.ts.map +1 -1
  41. package/dist/harness.js +2 -32
  42. package/dist/harness.js.map +1 -1
  43. package/dist/index.d.ts +1 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/mcp-run-result.d.ts +10 -10
  48. package/dist/platform-auth.d.ts +196 -0
  49. package/dist/platform-auth.d.ts.map +1 -0
  50. package/dist/platform-auth.js +142 -0
  51. package/dist/platform-auth.js.map +1 -0
  52. package/dist/quota.d.ts +42 -21
  53. package/dist/quota.d.ts.map +1 -1
  54. package/dist/quota.js +35 -0
  55. package/dist/quota.js.map +1 -1
  56. package/dist/rate-limit.d.ts +9 -0
  57. package/dist/rate-limit.d.ts.map +1 -1
  58. package/dist/rate-limit.js +21 -0
  59. package/dist/rate-limit.js.map +1 -1
  60. package/dist/readiness.d.ts +178 -1
  61. package/dist/readiness.d.ts.map +1 -1
  62. package/dist/readiness.js +12 -0
  63. package/dist/readiness.js.map +1 -1
  64. package/dist/setup-login.d.ts +5 -5
  65. package/dist/setup.d.ts +102 -95
  66. package/dist/setup.d.ts.map +1 -1
  67. package/dist/setup.js +29 -5
  68. package/dist/setup.js.map +1 -1
  69. package/generated/AccountsUnifiedMigrationFile.schema.json +61 -0
  70. package/generated/AgentCapabilityCatalog.schema.json +26 -0
  71. package/generated/ControlAccountPoolsResponse.schema.json +93 -0
  72. package/generated/ControlAccountsMigrationRollbackRequest.schema.json +18 -0
  73. package/generated/ControlAccountsMigrationRollbackResponse.schema.json +63 -0
  74. package/generated/ControlCredentialProfileCreateRequest.schema.json +1 -1
  75. package/generated/ControlCredentialProfileCreateResponse.schema.json +4 -4
  76. package/generated/ControlCredentialProfileDeleteResponse.schema.json +28 -4
  77. package/generated/ControlCredentialProfileUpdateResponse.schema.json +4 -4
  78. package/generated/ControlCredentialProfilesQueryResponse.schema.json +212 -7
  79. package/generated/ControlCredentialProfilesResponse.schema.json +81 -5
  80. package/generated/ControlCredentialProfilesSnapshotResponse.schema.json +209 -7
  81. package/generated/ControlHarnessAccountPool.schema.json +79 -0
  82. package/generated/ControlHarnessListResponse.schema.json +124 -0
  83. package/generated/ControlHarnessSettingsPatch.schema.json +2 -1
  84. package/generated/ControlPoolNextUp.schema.json +63 -0
  85. package/generated/ControlQuotaResponse.schema.json +4 -2
  86. package/generated/ControlRunDetail.schema.json +2 -1
  87. package/generated/ControlRunListResponse.schema.json +2 -1
  88. package/generated/ControlRunSummary.schema.json +2 -1
  89. package/generated/ControlSettingsSnapshot.schema.json +3 -2
  90. package/generated/ControlSettingsUpdateRequest.schema.json +2 -1
  91. package/generated/ControlSetupJob.schema.json +5 -1
  92. package/generated/ControlSetupJobCreateRequest.schema.json +1 -1
  93. package/generated/ControlSetupJobEvent.schema.json +5 -1
  94. package/generated/ControlSetupJobListResponse.schema.json +5 -1
  95. package/generated/ControlSetupJobSnapshot.schema.json +5 -1
  96. package/generated/CredentialProfile.schema.json +3 -3
  97. package/generated/CredentialProfileStatus.schema.json +1 -1
  98. package/generated/GlobalConfig.schema.json +7 -6
  99. package/generated/HarnessEvent.schema.json +2 -1
  100. package/generated/HarnessManifest.schema.json +98 -0
  101. package/generated/HarnessStatusDto.schema.json +124 -0
  102. package/generated/McpRunHandleResult.schema.json +2 -1
  103. package/generated/McpRunToolResult.schema.json +2 -1
  104. package/generated/RunEvent.schema.json +4 -0
  105. package/generated/RunFailure.schema.json +2 -1
  106. package/package.json +2 -2
@@ -34,7 +34,7 @@
34
34
  "oauth_token",
35
35
  "api_key"
36
36
  ],
37
- "description": "Credential transport a profile isolates: a scoped vendor config-dir login, a stored OAuth token, or a stored API key."
37
+ "description": "Binding kind for a profile: Claudexor-owned scoped vendor state, a managed OAuth secret, or a managed API-key secret; a vendor OS-user credential may remain outside that state."
38
38
  },
39
39
  "isolation_locator": {
40
40
  "type": [
@@ -42,7 +42,7 @@
42
42
  "null"
43
43
  ],
44
44
  "default": null,
45
- "description": "Canonical absolute config-dir path for config_dir_login profiles; null for secret-ref kinds."
45
+ "description": "Canonical absolute path to Claudexor-owned scoped vendor state for config_dir_login bindings; null for secret-ref kinds."
46
46
  },
47
47
  "secret_ref": {
48
48
  "type": [
@@ -79,7 +79,7 @@
79
79
  "credential_kind"
80
80
  ],
81
81
  "additionalProperties": false,
82
- "description": "Durable non-secret registry entry for one credential identity of one harness; secret material lives in the vendor dir or the secret store, never here."
82
+ "description": "Durable non-secret named binding for one harness; credential material may live in Claudexor-owned scoped state, a managed secret store, or a platform-declared vendor/OS-user store, never in this row."
83
83
  },
84
84
  "status": {
85
85
  "type": "object",
@@ -115,7 +115,7 @@
115
115
  "vendor"
116
116
  ],
117
117
  "default": "local_store",
118
- "description": "How the verification verdict was reached: local_store = the profile's credential material is present locally (says nothing about the token being live); vendor = the vendor answered a request made with this profile's own credential."
118
+ "description": "How the verification verdict was reached: local_store = the binding's required local state or managed secret is present (says nothing about a token being live); vendor = the vendor answered under the exact binding environment and effective platform credential policy."
119
119
  },
120
120
  "detail": {
121
121
  "type": "string",
@@ -282,7 +282,83 @@
282
282
  "description": "Per-harness accounts authority: native CLI-login state + the informational next-up identity."
283
283
  },
284
284
  "default": [],
285
- "description": "Per-harness accounts authority (INV-135): the native CLI-login pseudo-row state and the server-computed Active identity, so no surface re-derives the accounts symmetry."
285
+ "description": "Per-harness accounts authority (INV-135): the native CLI-login pseudo-row state and the server-computed Active identity, so no surface re-derives the accounts symmetry. A unified-model engine emits [] here (the key must stay present for legacy strict clients) and carries routing facts in accountPools instead."
286
+ },
287
+ "accountPools": {
288
+ "type": "array",
289
+ "items": {
290
+ "type": "object",
291
+ "properties": {
292
+ "harness_id": {
293
+ "type": "string",
294
+ "minLength": 1,
295
+ "description": "Harness family this pool verdict belongs to."
296
+ },
297
+ "next_up": {
298
+ "anyOf": [
299
+ {
300
+ "type": "object",
301
+ "properties": {
302
+ "kind": {
303
+ "type": "string",
304
+ "const": "profile"
305
+ },
306
+ "profileId": {
307
+ "$ref": "#/definitions/ControlCredentialProfilesSnapshotResponse/properties/profiles/items/properties/status/properties/profile_id"
308
+ }
309
+ },
310
+ "required": [
311
+ "kind",
312
+ "profileId"
313
+ ],
314
+ "additionalProperties": false,
315
+ "description": "An enabled account row is who an unpinned run routes to next."
316
+ },
317
+ {
318
+ "type": "object",
319
+ "properties": {
320
+ "kind": {
321
+ "type": "string",
322
+ "const": "api_key_route"
323
+ }
324
+ },
325
+ "required": [
326
+ "kind"
327
+ ],
328
+ "additionalProperties": false,
329
+ "description": "The account pool is empty or exhausted; the unpinned route is the policy-governed API key (INV-061) — a route, never an account row."
330
+ },
331
+ {
332
+ "type": "object",
333
+ "properties": {
334
+ "kind": {
335
+ "type": "string",
336
+ "const": "none"
337
+ },
338
+ "reason": {
339
+ "type": "string"
340
+ }
341
+ },
342
+ "required": [
343
+ "kind",
344
+ "reason"
345
+ ],
346
+ "additionalProperties": false,
347
+ "description": "An unpinned run has nothing routable, with a human reason."
348
+ }
349
+ ],
350
+ "description": "Server-computed pool routing verdict for one harness's unpinned runs (unified account model)."
351
+ }
352
+ },
353
+ "required": [
354
+ "harness_id",
355
+ "next_up"
356
+ ],
357
+ "additionalProperties": false,
358
+ "description": "Per-harness pool authority (unified account model): who an unpinned run routes to next."
359
+ },
360
+ "default": [],
361
+ "description": "Additive per-harness pool authority of the unified account model: routing facts (next_up incl. the api_key_route kind) live here so legacy strict next_up decoders never see unknown kinds. Old clients ignore this key."
286
362
  },
287
363
  "harnesses": {
288
364
  "type": "array",
@@ -417,6 +493,20 @@
417
493
  },
418
494
  "default": [],
419
495
  "description": "Relocation levers that can move this transport into a scoped environment."
496
+ },
497
+ "platforms": {
498
+ "type": "array",
499
+ "items": {
500
+ "type": "string",
501
+ "enum": [
502
+ "darwin",
503
+ "linux",
504
+ "win32"
505
+ ],
506
+ "description": "Host platform used to resolve credential and managed-login policy."
507
+ },
508
+ "minItems": 1,
509
+ "description": "Host platforms on which this physical credential transport applies; absent means every supported platform for backward compatibility."
420
510
  }
421
511
  },
422
512
  "required": [
@@ -428,6 +518,90 @@
428
518
  },
429
519
  "default": [],
430
520
  "description": "Declared credential transports per auth source."
521
+ },
522
+ "credential_profile_policies": {
523
+ "type": "array",
524
+ "items": {
525
+ "type": "object",
526
+ "properties": {
527
+ "source": {
528
+ "$ref": "#/definitions/ControlCredentialProfilesSnapshotResponse/properties/harnesses/items/properties/manifest/anyOf/0/properties/capability_profile/properties/auth/properties/supported_sources/items"
529
+ },
530
+ "platforms": {
531
+ "type": "array",
532
+ "items": {
533
+ "$ref": "#/definitions/ControlCredentialProfilesSnapshotResponse/properties/harnesses/items/properties/manifest/anyOf/0/properties/capability_profile/properties/auth/properties/credential_transports/items/properties/platforms/items"
534
+ },
535
+ "minItems": 1,
536
+ "description": "Nonempty host-platform set governed by this policy row."
537
+ },
538
+ "identity_scope": {
539
+ "type": "string",
540
+ "enum": [
541
+ "profile",
542
+ "os_user"
543
+ ],
544
+ "description": "Identity boundary selected by a credential profile: the named profile itself or the host OS user/login vault."
545
+ },
546
+ "max_enabled_profiles": {
547
+ "anyOf": [
548
+ {
549
+ "type": "integer",
550
+ "exclusiveMinimum": 0
551
+ },
552
+ {
553
+ "type": "null"
554
+ }
555
+ ],
556
+ "description": "Maximum enabled profile bindings on these platforms; null means unbounded."
557
+ },
558
+ "cleanup_owner": {
559
+ "type": "string",
560
+ "enum": [
561
+ "claudexor",
562
+ "vendor"
563
+ ],
564
+ "description": "Who owns cleanup of the credential when its Claudexor profile binding is removed."
565
+ }
566
+ },
567
+ "required": [
568
+ "source",
569
+ "platforms",
570
+ "identity_scope",
571
+ "max_enabled_profiles",
572
+ "cleanup_owner"
573
+ ],
574
+ "additionalProperties": false,
575
+ "description": "Platform-specific identity scope, enabled-profile cardinality, and credential cleanup ownership for one auth source."
576
+ },
577
+ "description": "Platform-specific profile identity/cardinality/cleanup policy; absent uses the backward-compatible profile-scoped, unbounded, Claudexor-owned defaults."
578
+ },
579
+ "managed_login": {
580
+ "anyOf": [
581
+ {
582
+ "type": "object",
583
+ "properties": {
584
+ "stdin": {
585
+ "type": "string",
586
+ "enum": [
587
+ "none",
588
+ "pipe",
589
+ "terminal"
590
+ ],
591
+ "description": "Input transport the vendor login command requires."
592
+ }
593
+ },
594
+ "required": [
595
+ "stdin"
596
+ ],
597
+ "additionalProperties": false,
598
+ "description": "Managed-login input requirement; command, argv, flow, and time window remain owned by the native-login registry."
599
+ },
600
+ {
601
+ "type": "null"
602
+ }
603
+ ],
604
+ "description": "Managed subscription-login input requirement; null means this harness defines no managed login, absent is a legacy manifest."
431
605
  }
432
606
  },
433
607
  "additionalProperties": false,
@@ -1037,6 +1211,32 @@
1037
1211
  ],
1038
1212
  "description": "Engine-owned Delegate capability for this harness and installed runtime; null on legacy status rows.",
1039
1213
  "default": null
1214
+ },
1215
+ "setupLogin": {
1216
+ "anyOf": [
1217
+ {
1218
+ "type": "object",
1219
+ "properties": {
1220
+ "mode": {
1221
+ "type": "string",
1222
+ "enum": [
1223
+ "in_app",
1224
+ "external_terminal"
1225
+ ],
1226
+ "description": "in_app requests the daemon-hosted login flow; external_terminal requests the existing client PTY flow."
1227
+ }
1228
+ },
1229
+ "required": [
1230
+ "mode"
1231
+ ],
1232
+ "additionalProperties": false,
1233
+ "description": "Effective setup-login flow for this harness on the current host."
1234
+ },
1235
+ {
1236
+ "type": "null"
1237
+ }
1238
+ ],
1239
+ "description": "Effective setup-login flow for this harness on the current host; current producers emit null or an object, while omission identifies a legacy row."
1040
1240
  }
1041
1241
  },
1042
1242
  "required": [
@@ -1226,7 +1426,8 @@
1226
1426
  "claude_statusline",
1227
1427
  "claude_api_retry",
1228
1428
  "claude_oauth_usage",
1229
- "agy_command_usage"
1429
+ "agy_command_usage",
1430
+ "cursor_rate_limit"
1230
1431
  ],
1231
1432
  "description": "Machine-readable source of quota evidence, classified by schema-owned traits."
1232
1433
  },
@@ -1349,7 +1550,8 @@
1349
1550
  "platform_unsupported",
1350
1551
  "refresh_failed",
1351
1552
  "no_source",
1352
- "auth_revoked"
1553
+ "auth_revoked",
1554
+ "credential_profile_ambiguous"
1353
1555
  ],
1354
1556
  "description": "Why a registered subject has no quota snapshot, in the source's own vocabulary."
1355
1557
  },
@@ -0,0 +1,79 @@
1
+ {
2
+ "$ref": "#/definitions/ControlHarnessAccountPool",
3
+ "definitions": {
4
+ "ControlHarnessAccountPool": {
5
+ "type": "object",
6
+ "properties": {
7
+ "harness_id": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "description": "Harness family this pool verdict belongs to."
11
+ },
12
+ "next_up": {
13
+ "anyOf": [
14
+ {
15
+ "type": "object",
16
+ "properties": {
17
+ "kind": {
18
+ "type": "string",
19
+ "const": "profile"
20
+ },
21
+ "profileId": {
22
+ "type": "string",
23
+ "minLength": 1,
24
+ "description": "Non-empty identifier string."
25
+ }
26
+ },
27
+ "required": [
28
+ "kind",
29
+ "profileId"
30
+ ],
31
+ "additionalProperties": false,
32
+ "description": "An enabled account row is who an unpinned run routes to next."
33
+ },
34
+ {
35
+ "type": "object",
36
+ "properties": {
37
+ "kind": {
38
+ "type": "string",
39
+ "const": "api_key_route"
40
+ }
41
+ },
42
+ "required": [
43
+ "kind"
44
+ ],
45
+ "additionalProperties": false,
46
+ "description": "The account pool is empty or exhausted; the unpinned route is the policy-governed API key (INV-061) — a route, never an account row."
47
+ },
48
+ {
49
+ "type": "object",
50
+ "properties": {
51
+ "kind": {
52
+ "type": "string",
53
+ "const": "none"
54
+ },
55
+ "reason": {
56
+ "type": "string"
57
+ }
58
+ },
59
+ "required": [
60
+ "kind",
61
+ "reason"
62
+ ],
63
+ "additionalProperties": false,
64
+ "description": "An unpinned run has nothing routable, with a human reason."
65
+ }
66
+ ],
67
+ "description": "Server-computed pool routing verdict for one harness's unpinned runs (unified account model)."
68
+ }
69
+ },
70
+ "required": [
71
+ "harness_id",
72
+ "next_up"
73
+ ],
74
+ "additionalProperties": false,
75
+ "description": "Per-harness pool authority (unified account model): who an unpinned run routes to next."
76
+ }
77
+ },
78
+ "$schema": "http://json-schema.org/draft-07/schema#"
79
+ }
@@ -137,6 +137,20 @@
137
137
  },
138
138
  "default": [],
139
139
  "description": "Relocation levers that can move this transport into a scoped environment."
140
+ },
141
+ "platforms": {
142
+ "type": "array",
143
+ "items": {
144
+ "type": "string",
145
+ "enum": [
146
+ "darwin",
147
+ "linux",
148
+ "win32"
149
+ ],
150
+ "description": "Host platform used to resolve credential and managed-login policy."
151
+ },
152
+ "minItems": 1,
153
+ "description": "Host platforms on which this physical credential transport applies; absent means every supported platform for backward compatibility."
140
154
  }
141
155
  },
142
156
  "required": [
@@ -148,6 +162,90 @@
148
162
  },
149
163
  "default": [],
150
164
  "description": "Declared credential transports per auth source."
165
+ },
166
+ "credential_profile_policies": {
167
+ "type": "array",
168
+ "items": {
169
+ "type": "object",
170
+ "properties": {
171
+ "source": {
172
+ "$ref": "#/definitions/ControlHarnessListResponse/properties/harnesses/items/properties/manifest/anyOf/0/properties/capability_profile/properties/auth/properties/supported_sources/items"
173
+ },
174
+ "platforms": {
175
+ "type": "array",
176
+ "items": {
177
+ "$ref": "#/definitions/ControlHarnessListResponse/properties/harnesses/items/properties/manifest/anyOf/0/properties/capability_profile/properties/auth/properties/credential_transports/items/properties/platforms/items"
178
+ },
179
+ "minItems": 1,
180
+ "description": "Nonempty host-platform set governed by this policy row."
181
+ },
182
+ "identity_scope": {
183
+ "type": "string",
184
+ "enum": [
185
+ "profile",
186
+ "os_user"
187
+ ],
188
+ "description": "Identity boundary selected by a credential profile: the named profile itself or the host OS user/login vault."
189
+ },
190
+ "max_enabled_profiles": {
191
+ "anyOf": [
192
+ {
193
+ "type": "integer",
194
+ "exclusiveMinimum": 0
195
+ },
196
+ {
197
+ "type": "null"
198
+ }
199
+ ],
200
+ "description": "Maximum enabled profile bindings on these platforms; null means unbounded."
201
+ },
202
+ "cleanup_owner": {
203
+ "type": "string",
204
+ "enum": [
205
+ "claudexor",
206
+ "vendor"
207
+ ],
208
+ "description": "Who owns cleanup of the credential when its Claudexor profile binding is removed."
209
+ }
210
+ },
211
+ "required": [
212
+ "source",
213
+ "platforms",
214
+ "identity_scope",
215
+ "max_enabled_profiles",
216
+ "cleanup_owner"
217
+ ],
218
+ "additionalProperties": false,
219
+ "description": "Platform-specific identity scope, enabled-profile cardinality, and credential cleanup ownership for one auth source."
220
+ },
221
+ "description": "Platform-specific profile identity/cardinality/cleanup policy; absent uses the backward-compatible profile-scoped, unbounded, Claudexor-owned defaults."
222
+ },
223
+ "managed_login": {
224
+ "anyOf": [
225
+ {
226
+ "type": "object",
227
+ "properties": {
228
+ "stdin": {
229
+ "type": "string",
230
+ "enum": [
231
+ "none",
232
+ "pipe",
233
+ "terminal"
234
+ ],
235
+ "description": "Input transport the vendor login command requires."
236
+ }
237
+ },
238
+ "required": [
239
+ "stdin"
240
+ ],
241
+ "additionalProperties": false,
242
+ "description": "Managed-login input requirement; command, argv, flow, and time window remain owned by the native-login registry."
243
+ },
244
+ {
245
+ "type": "null"
246
+ }
247
+ ],
248
+ "description": "Managed subscription-login input requirement; null means this harness defines no managed login, absent is a legacy manifest."
151
249
  }
152
250
  },
153
251
  "additionalProperties": false,
@@ -767,6 +865,32 @@
767
865
  ],
768
866
  "description": "Engine-owned Delegate capability for this harness and installed runtime; null on legacy status rows.",
769
867
  "default": null
868
+ },
869
+ "setupLogin": {
870
+ "anyOf": [
871
+ {
872
+ "type": "object",
873
+ "properties": {
874
+ "mode": {
875
+ "type": "string",
876
+ "enum": [
877
+ "in_app",
878
+ "external_terminal"
879
+ ],
880
+ "description": "in_app requests the daemon-hosted login flow; external_terminal requests the existing client PTY flow."
881
+ }
882
+ },
883
+ "required": [
884
+ "mode"
885
+ ],
886
+ "additionalProperties": false,
887
+ "description": "Effective setup-login flow for this harness on the current host."
888
+ },
889
+ {
890
+ "type": "null"
891
+ }
892
+ ],
893
+ "description": "Effective setup-login flow for this harness on the current host; current producers emit null or an object, while omission identifies a legacy row."
770
894
  }
771
895
  },
772
896
  "required": [
@@ -112,11 +112,12 @@
112
112
  "profileLimitAction": {
113
113
  "type": "string",
114
114
  "enum": [
115
+ "auto",
115
116
  "fail",
116
117
  "ask",
117
118
  "rotate"
118
119
  ],
119
- "description": "New profile-selection limit action (fail | ask | rotate)."
120
+ "description": "New profile-selection limit action (auto | fail | ask | rotate)."
120
121
  }
121
122
  },
122
123
  "additionalProperties": false,
@@ -0,0 +1,63 @@
1
+ {
2
+ "$ref": "#/definitions/ControlPoolNextUp",
3
+ "definitions": {
4
+ "ControlPoolNextUp": {
5
+ "anyOf": [
6
+ {
7
+ "type": "object",
8
+ "properties": {
9
+ "kind": {
10
+ "type": "string",
11
+ "const": "profile"
12
+ },
13
+ "profileId": {
14
+ "type": "string",
15
+ "minLength": 1,
16
+ "description": "Non-empty identifier string."
17
+ }
18
+ },
19
+ "required": [
20
+ "kind",
21
+ "profileId"
22
+ ],
23
+ "additionalProperties": false,
24
+ "description": "An enabled account row is who an unpinned run routes to next."
25
+ },
26
+ {
27
+ "type": "object",
28
+ "properties": {
29
+ "kind": {
30
+ "type": "string",
31
+ "const": "api_key_route"
32
+ }
33
+ },
34
+ "required": [
35
+ "kind"
36
+ ],
37
+ "additionalProperties": false,
38
+ "description": "The account pool is empty or exhausted; the unpinned route is the policy-governed API key (INV-061) — a route, never an account row."
39
+ },
40
+ {
41
+ "type": "object",
42
+ "properties": {
43
+ "kind": {
44
+ "type": "string",
45
+ "const": "none"
46
+ },
47
+ "reason": {
48
+ "type": "string"
49
+ }
50
+ },
51
+ "required": [
52
+ "kind",
53
+ "reason"
54
+ ],
55
+ "additionalProperties": false,
56
+ "description": "An unpinned run has nothing routable, with a human reason."
57
+ }
58
+ ],
59
+ "description": "Server-computed pool routing verdict for one harness's unpinned runs (unified account model)."
60
+ }
61
+ },
62
+ "$schema": "http://json-schema.org/draft-07/schema#"
63
+ }
@@ -141,7 +141,8 @@
141
141
  "claude_statusline",
142
142
  "claude_api_retry",
143
143
  "claude_oauth_usage",
144
- "agy_command_usage"
144
+ "agy_command_usage",
145
+ "cursor_rate_limit"
145
146
  ],
146
147
  "description": "Machine-readable source of quota evidence, classified by schema-owned traits."
147
148
  },
@@ -264,7 +265,8 @@
264
265
  "platform_unsupported",
265
266
  "refresh_failed",
266
267
  "no_source",
267
- "auth_revoked"
268
+ "auth_revoked",
269
+ "credential_profile_ambiguous"
268
270
  ],
269
271
  "description": "Why a registered subject has no quota snapshot, in the source's own vocabulary."
270
272
  },
@@ -161,11 +161,12 @@
161
161
  "cost_unverifiable",
162
162
  "delegation_child_drain_timeout",
163
163
  "subscription_window_exhausted",
164
+ "credential_pool_exhausted",
164
165
  "delegated_home_unavailable",
165
166
  "delegated_confinement_unavailable",
166
167
  "delegated_evidence_incomplete"
167
168
  ],
168
- "description": "Machine-readable failure sub-code within a RunFailure category (budget-denial reasons, Delegate child-drain timeout, a spent subscription quota window whose reopen time is RunFailure.resetsAt, and the delegated-run confinement refusals: missing scoped home, no OS-enforced boundary on this host, incomplete applied evidence)."
169
+ "description": "Machine-readable failure sub-code within a RunFailure category (budget-denial reasons, Delegate child-drain timeout, a spent subscription quota window whose reopen time is RunFailure.resetsAt, an exhausted credential rotation pool whose EARLIEST known member reset is RunFailure.resetsAt, and the delegated-run confinement refusals: missing scoped home, no OS-enforced boundary on this host, incomplete applied evidence)."
169
170
  },
170
171
  {
171
172
  "type": "null"
@@ -163,11 +163,12 @@
163
163
  "cost_unverifiable",
164
164
  "delegation_child_drain_timeout",
165
165
  "subscription_window_exhausted",
166
+ "credential_pool_exhausted",
166
167
  "delegated_home_unavailable",
167
168
  "delegated_confinement_unavailable",
168
169
  "delegated_evidence_incomplete"
169
170
  ],
170
- "description": "Machine-readable failure sub-code within a RunFailure category (budget-denial reasons, Delegate child-drain timeout, a spent subscription quota window whose reopen time is RunFailure.resetsAt, and the delegated-run confinement refusals: missing scoped home, no OS-enforced boundary on this host, incomplete applied evidence)."
171
+ "description": "Machine-readable failure sub-code within a RunFailure category (budget-denial reasons, Delegate child-drain timeout, a spent subscription quota window whose reopen time is RunFailure.resetsAt, an exhausted credential rotation pool whose EARLIEST known member reset is RunFailure.resetsAt, and the delegated-run confinement refusals: missing scoped home, no OS-enforced boundary on this host, incomplete applied evidence)."
171
172
  },
172
173
  {
173
174
  "type": "null"
@@ -158,11 +158,12 @@
158
158
  "cost_unverifiable",
159
159
  "delegation_child_drain_timeout",
160
160
  "subscription_window_exhausted",
161
+ "credential_pool_exhausted",
161
162
  "delegated_home_unavailable",
162
163
  "delegated_confinement_unavailable",
163
164
  "delegated_evidence_incomplete"
164
165
  ],
165
- "description": "Machine-readable failure sub-code within a RunFailure category (budget-denial reasons, Delegate child-drain timeout, a spent subscription quota window whose reopen time is RunFailure.resetsAt, and the delegated-run confinement refusals: missing scoped home, no OS-enforced boundary on this host, incomplete applied evidence)."
166
+ "description": "Machine-readable failure sub-code within a RunFailure category (budget-denial reasons, Delegate child-drain timeout, a spent subscription quota window whose reopen time is RunFailure.resetsAt, an exhausted credential rotation pool whose EARLIEST known member reset is RunFailure.resetsAt, and the delegated-run confinement refusals: missing scoped home, no OS-enforced boundary on this host, incomplete applied evidence)."
166
167
  },
167
168
  {
168
169
  "type": "null"