@claudexor/schema 3.1.0 → 3.1.2

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 (100) hide show
  1. package/dist/agent-capabilities.d.ts +97 -9
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +5 -0
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/apply-eligibility.d.ts +102 -0
  6. package/dist/apply-eligibility.d.ts.map +1 -1
  7. package/dist/apply-eligibility.js +17 -0
  8. package/dist/apply-eligibility.js.map +1 -1
  9. package/dist/budget.d.ts +13 -13
  10. package/dist/budget.d.ts.map +1 -1
  11. package/dist/budget.js +2 -0
  12. package/dist/budget.js.map +1 -1
  13. package/dist/config.d.ts +70 -38
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +12 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/control-operation-responses.d.ts +160 -56
  18. package/dist/control-operation-responses.d.ts.map +1 -1
  19. package/dist/control-operation-responses.js +25 -0
  20. package/dist/control-operation-responses.js.map +1 -1
  21. package/dist/control-run-detail.d.ts +1413 -205
  22. package/dist/control-run-detail.d.ts.map +1 -1
  23. package/dist/control-run-detail.js +6 -0
  24. package/dist/control-run-detail.js.map +1 -1
  25. package/dist/control-run-retry.d.ts +2 -2
  26. package/dist/control.d.ts +486 -163
  27. package/dist/control.d.ts.map +1 -1
  28. package/dist/control.js +23 -28
  29. package/dist/control.js.map +1 -1
  30. package/dist/decision.d.ts +5 -0
  31. package/dist/decision.d.ts.map +1 -1
  32. package/dist/decision.js +7 -3
  33. package/dist/decision.js.map +1 -1
  34. package/dist/delegation.d.ts +73 -0
  35. package/dist/delegation.d.ts.map +1 -0
  36. package/dist/delegation.js +120 -0
  37. package/dist/delegation.js.map +1 -0
  38. package/dist/effort.d.ts +132 -0
  39. package/dist/effort.d.ts.map +1 -0
  40. package/dist/effort.js +167 -0
  41. package/dist/effort.js.map +1 -0
  42. package/dist/events.d.ts +4 -4
  43. package/dist/events.d.ts.map +1 -1
  44. package/dist/events.js +9 -0
  45. package/dist/events.js.map +1 -1
  46. package/dist/gate.d.ts +2 -2
  47. package/dist/harness.d.ts +113 -40
  48. package/dist/harness.d.ts.map +1 -1
  49. package/dist/harness.js +40 -27
  50. package/dist/harness.js.map +1 -1
  51. package/dist/index.d.ts +2 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/operation.d.ts +16 -16
  56. package/dist/readiness.d.ts +86 -7
  57. package/dist/readiness.d.ts.map +1 -1
  58. package/dist/readiness.js +4 -0
  59. package/dist/readiness.js.map +1 -1
  60. package/dist/request-requirements.d.ts +7 -7
  61. package/dist/request-requirements.d.ts.map +1 -1
  62. package/dist/request-requirements.js +2 -1
  63. package/dist/request-requirements.js.map +1 -1
  64. package/dist/task.d.ts +104 -59
  65. package/dist/task.d.ts.map +1 -1
  66. package/dist/task.js +20 -8
  67. package/dist/task.js.map +1 -1
  68. package/dist/telemetry.d.ts +103 -65
  69. package/dist/telemetry.d.ts.map +1 -1
  70. package/dist/telemetry.js +6 -9
  71. package/dist/telemetry.js.map +1 -1
  72. package/dist/workspace.d.ts +1 -1
  73. package/dist/workspace.js +7 -7
  74. package/dist/workspace.js.map +1 -1
  75. package/generated/AgentCapabilityCatalog.schema.json +43 -9
  76. package/generated/ControlHarnessListResponse.schema.json +93 -11
  77. package/generated/ControlHarnessSettingsPatch.schema.json +4 -8
  78. package/generated/ControlRunAgainDraft.schema.json +9 -9
  79. package/generated/ControlRunControlResponse.schema.json +8 -0
  80. package/generated/ControlRunDetail.schema.json +119 -21
  81. package/generated/ControlRunListResponse.schema.json +96 -16
  82. package/generated/ControlRunStartRequest.schema.json +9 -9
  83. package/generated/ControlRunSummary.schema.json +96 -16
  84. package/generated/ControlSettingsSnapshot.schema.json +4 -8
  85. package/generated/ControlSettingsUpdateRequest.schema.json +4 -8
  86. package/generated/ControlThreadDetail.schema.json +64 -0
  87. package/generated/ControlThreadTurnRequest.schema.json +4 -8
  88. package/generated/DecisionRecord.schema.json +10 -1
  89. package/generated/GlobalConfig.schema.json +4 -8
  90. package/generated/HarnessManifest.schema.json +47 -11
  91. package/generated/HarnessStatusDto.schema.json +93 -11
  92. package/generated/McpRunHandleResult.schema.json +72 -1
  93. package/generated/McpRunToolResult.schema.json +69 -0
  94. package/generated/ProjectConfig.schema.json +26 -0
  95. package/generated/RunEvent.schema.json +2 -0
  96. package/generated/RunFailure.schema.json +4 -3
  97. package/generated/RunTelemetry.schema.json +61 -2
  98. package/generated/TaskContract.schema.json +48 -12
  99. package/generated/WorkspaceEnvelope.schema.json +6 -6
  100. package/package.json +2 -2
@@ -96,14 +96,10 @@
96
96
  },
97
97
  "effort": {
98
98
  "type": "string",
99
- "enum": [
100
- "low",
101
- "medium",
102
- "high",
103
- "xhigh",
104
- "max"
105
- ],
106
- "description": "Cross-harness reasoning-effort level, weakest to strongest; adapters declare the subset they support and a shared normalizer clamps requests onto the nearest supported level."
99
+ "minLength": 1,
100
+ "maxLength": 32,
101
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
102
+ "description": "Cross-harness reasoning-effort level as a lowercase slug (open vocabulary, mirroring the vendor contract); adapters advertise the levels they accept per model, ordered weakest to strongest by the vendor itself, and a shared normalizer passes advertised levels through, clamps inside the vendor order, and refuses levels the advertised ladder has never seen."
107
103
  }
108
104
  },
109
105
  "required": [
@@ -42,14 +42,10 @@
42
42
  },
43
43
  "effort": {
44
44
  "type": "string",
45
- "enum": [
46
- "low",
47
- "medium",
48
- "high",
49
- "xhigh",
50
- "max"
51
- ],
52
- "description": "Cross-harness reasoning-effort level, weakest to strongest; adapters declare the subset they support and a shared normalizer clamps requests onto the nearest supported level."
45
+ "minLength": 1,
46
+ "maxLength": 32,
47
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
48
+ "description": "Cross-harness reasoning-effort level as a lowercase slug (open vocabulary, mirroring the vendor contract); adapters advertise the levels they accept per model, ordered weakest to strongest by the vendor itself, and a shared normalizer passes advertised levels through, clamps inside the vendor order, and refuses levels the advertised ladder has never seen."
53
49
  }
54
50
  },
55
51
  "required": [
@@ -667,6 +667,70 @@
667
667
  ],
668
668
  "default": null,
669
669
  "description": "When the run finished; null while live."
670
+ },
671
+ "delegation": {
672
+ "anyOf": [
673
+ {
674
+ "type": "object",
675
+ "properties": {
676
+ "requested": {
677
+ "type": "boolean",
678
+ "default": false
679
+ },
680
+ "effective": {
681
+ "type": "boolean",
682
+ "default": false
683
+ },
684
+ "used": {
685
+ "type": "boolean",
686
+ "default": false
687
+ },
688
+ "reason": {
689
+ "type": "string",
690
+ "enum": [
691
+ "pending",
692
+ "not_requested",
693
+ "injected_unused",
694
+ "used",
695
+ "runtime_unavailable",
696
+ "manifest_unsupported",
697
+ "access_profile_incompatible",
698
+ "partially_degraded",
699
+ "startup_failed"
700
+ ],
701
+ "default": "not_requested"
702
+ },
703
+ "remediation": {
704
+ "anyOf": [
705
+ {
706
+ "type": "string",
707
+ "minLength": 1
708
+ },
709
+ {
710
+ "type": "null"
711
+ }
712
+ ],
713
+ "default": null
714
+ }
715
+ },
716
+ "additionalProperties": false,
717
+ "description": "Engine-owned Delegate requested/effective/used receipt; surfaces project it without parsing model output."
718
+ },
719
+ {
720
+ "type": "null"
721
+ }
722
+ ],
723
+ "description": "Durable Delegate outcome receipt; null for ordinary and legacy turns.",
724
+ "default": null
725
+ },
726
+ "delegatedChildRunIds": {
727
+ "type": "array",
728
+ "items": {
729
+ "$ref": "#/definitions/ControlThreadDetail/properties/thread/properties/credentialProfileId/anyOf/0"
730
+ },
731
+ "maxItems": 8,
732
+ "default": [],
733
+ "description": "At most eight server-owned direct Delegate child ids for whole-thread workspace aggregation."
670
734
  }
671
735
  },
672
736
  "required": [
@@ -82,13 +82,9 @@
82
82
  },
83
83
  "effort": {
84
84
  "type": "string",
85
- "enum": [
86
- "low",
87
- "medium",
88
- "high",
89
- "xhigh",
90
- "max"
91
- ],
85
+ "minLength": 1,
86
+ "maxLength": 32,
87
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
92
88
  "description": "Requested reasoning effort."
93
89
  },
94
90
  "efforts": {
@@ -391,7 +387,7 @@
391
387
  },
392
388
  "delegate": {
393
389
  "type": "boolean",
394
- "description": "Agent-only: inject the Claudexor delegation belt so the harness can spawn bounded isolated sub-runs; refused on non-agent modes or harnesses without mcp_injection."
390
+ "description": "Agent-only: inject the Claudexor delegation belt so the harness can spawn bounded isolated sub-runs; non-agent modes refuse, while known belt or harness unavailability degrades before start to ordinary Agent with a durable warning."
395
391
  },
396
392
  "maxSeconds": {
397
393
  "type": "integer",
@@ -298,7 +298,7 @@
298
298
  "estimated": {
299
299
  "type": "boolean",
300
300
  "default": false,
301
- "description": "True when any of the spend is token-derived rather than natively reported."
301
+ "description": "True when settled cash is estimated rather than exact."
302
302
  },
303
303
  "cash_usd": {
304
304
  "type": [
@@ -315,6 +315,15 @@
315
315
  ],
316
316
  "default": null,
317
317
  "description": "Settled subscription-equivalent valuation in USD (includes the reviewer panel); null when unknown."
318
+ },
319
+ "valuation_knowledge": {
320
+ "type": "string",
321
+ "enum": [
322
+ "exact",
323
+ "estimated",
324
+ "unknown"
325
+ ],
326
+ "description": "Certainty of valuation_usd, independent from the settled-cash estimated flag. Absent only on legacy decisions."
318
327
  }
319
328
  },
320
329
  "additionalProperties": false,
@@ -94,14 +94,10 @@
94
94
  },
95
95
  "effort": {
96
96
  "type": "string",
97
- "enum": [
98
- "low",
99
- "medium",
100
- "high",
101
- "xhigh",
102
- "max"
103
- ],
104
- "description": "Cross-harness reasoning-effort level, weakest to strongest; adapters declare the subset they support and a shared normalizer clamps requests onto the nearest supported level."
97
+ "minLength": 1,
98
+ "maxLength": 32,
99
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
100
+ "description": "Cross-harness reasoning-effort level as a lowercase slug (open vocabulary, mirroring the vendor contract); adapters advertise the levels they accept per model, ordered weakest to strongest by the vendor itself, and a shared normalizer passes advertised levels through, clamps inside the vendor order, and refuses levels the advertised ladder has never seen."
105
101
  }
106
102
  },
107
103
  "required": [
@@ -231,12 +231,12 @@
231
231
  "mcp_injection": {
232
232
  "type": "boolean",
233
233
  "default": false,
234
- "description": "The adapter can inject engine-owned MCP servers into the harness sandbox (browser tool, delegation belt); false = extra_mcp_servers and the delegate toggle are refused."
234
+ "description": "The adapter can inject engine-owned MCP servers into the harness sandbox (browser tool, delegation belt); false = browser MCP is refused and Delegate degrades to ordinary Agent with a durable typed receipt."
235
235
  },
236
236
  "mcp_injection_requires_full_access": {
237
237
  "type": "boolean",
238
238
  "default": false,
239
- "description": "An injected MCP server can only reach the daemon (belt) at full access; below it the harness sandbox cancels the call. true => --delegate below full access is refused for this harness."
239
+ "description": "An injected MCP server can only reach the daemon (belt) at full access; below it the harness sandbox cancels the call. true => Delegate below full access degrades to ordinary Agent with a durable typed receipt."
240
240
  }
241
241
  },
242
242
  "additionalProperties": false,
@@ -349,17 +349,53 @@
349
349
  "type": "array",
350
350
  "items": {
351
351
  "type": "string",
352
- "enum": [
353
- "low",
354
- "medium",
355
- "high",
356
- "xhigh",
357
- "max"
358
- ],
359
- "description": "Cross-harness reasoning-effort level, weakest to strongest; adapters declare the subset they support and a shared normalizer clamps requests onto the nearest supported level."
352
+ "minLength": 1,
353
+ "maxLength": 32,
354
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
355
+ "description": "Cross-harness reasoning-effort level as a lowercase slug (open vocabulary, mirroring the vendor contract); adapters advertise the levels they accept per model, ordered weakest to strongest by the vendor itself, and a shared normalizer passes advertised levels through, clamps inside the vendor order, and refuses levels the advertised ladder has never seen."
360
356
  },
361
357
  "default": [],
362
- "description": "Ordered (weakest to strongest) reasoning-effort levels this harness actually accepts; empty means effort is not a tunable surface."
358
+ "description": "Ordered (weakest to strongest) reasoning-effort levels this harness accepts across all its models; empty means effort is not a tunable surface."
359
+ },
360
+ "model_effort_levels": {
361
+ "type": "object",
362
+ "additionalProperties": {
363
+ "type": "object",
364
+ "properties": {
365
+ "levels": {
366
+ "type": "array",
367
+ "items": {
368
+ "$ref": "#/definitions/HarnessManifest/properties/capabilities/properties/effort_levels/items"
369
+ },
370
+ "default": [],
371
+ "description": "Ordered (weakest to strongest) reasoning-effort levels this model advertises, in the vendor's own order."
372
+ },
373
+ "default": {
374
+ "anyOf": [
375
+ {
376
+ "$ref": "#/definitions/HarnessManifest/properties/capabilities/properties/effort_levels/items"
377
+ },
378
+ {
379
+ "type": "null"
380
+ }
381
+ ],
382
+ "description": "The effort level the vendor uses for this model when none is requested.",
383
+ "default": null
384
+ }
385
+ },
386
+ "additionalProperties": false,
387
+ "description": "Reasoning-effort vocabulary a single model advertises."
388
+ },
389
+ "default": {},
390
+ "description": "Per-model advertised reasoning-effort vocabulary keyed by model id; a model absent here falls back to the harness-wide effort_levels union."
391
+ },
392
+ "effort_levels_verified_against": {
393
+ "type": [
394
+ "string",
395
+ "null"
396
+ ],
397
+ "default": null,
398
+ "description": "Vendor CLI version the effort ladders were last verified against; null = never verified / not applicable."
363
399
  },
364
400
  "known_models": {
365
401
  "type": "array",
@@ -249,12 +249,12 @@
249
249
  "mcp_injection": {
250
250
  "type": "boolean",
251
251
  "default": false,
252
- "description": "The adapter can inject engine-owned MCP servers into the harness sandbox (browser tool, delegation belt); false = extra_mcp_servers and the delegate toggle are refused."
252
+ "description": "The adapter can inject engine-owned MCP servers into the harness sandbox (browser tool, delegation belt); false = browser MCP is refused and Delegate degrades to ordinary Agent with a durable typed receipt."
253
253
  },
254
254
  "mcp_injection_requires_full_access": {
255
255
  "type": "boolean",
256
256
  "default": false,
257
- "description": "An injected MCP server can only reach the daemon (belt) at full access; below it the harness sandbox cancels the call. true => --delegate below full access is refused for this harness."
257
+ "description": "An injected MCP server can only reach the daemon (belt) at full access; below it the harness sandbox cancels the call. true => Delegate below full access degrades to ordinary Agent with a durable typed receipt."
258
258
  }
259
259
  },
260
260
  "additionalProperties": false,
@@ -367,17 +367,53 @@
367
367
  "type": "array",
368
368
  "items": {
369
369
  "type": "string",
370
- "enum": [
371
- "low",
372
- "medium",
373
- "high",
374
- "xhigh",
375
- "max"
376
- ],
377
- "description": "Cross-harness reasoning-effort level, weakest to strongest; adapters declare the subset they support and a shared normalizer clamps requests onto the nearest supported level."
370
+ "minLength": 1,
371
+ "maxLength": 32,
372
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
373
+ "description": "Cross-harness reasoning-effort level as a lowercase slug (open vocabulary, mirroring the vendor contract); adapters advertise the levels they accept per model, ordered weakest to strongest by the vendor itself, and a shared normalizer passes advertised levels through, clamps inside the vendor order, and refuses levels the advertised ladder has never seen."
378
374
  },
379
375
  "default": [],
380
- "description": "Ordered (weakest to strongest) reasoning-effort levels this harness actually accepts; empty means effort is not a tunable surface."
376
+ "description": "Ordered (weakest to strongest) reasoning-effort levels this harness accepts across all its models; empty means effort is not a tunable surface."
377
+ },
378
+ "model_effort_levels": {
379
+ "type": "object",
380
+ "additionalProperties": {
381
+ "type": "object",
382
+ "properties": {
383
+ "levels": {
384
+ "type": "array",
385
+ "items": {
386
+ "$ref": "#/definitions/HarnessStatusDto/properties/manifest/anyOf/0/properties/capabilities/properties/effort_levels/items"
387
+ },
388
+ "default": [],
389
+ "description": "Ordered (weakest to strongest) reasoning-effort levels this model advertises, in the vendor's own order."
390
+ },
391
+ "default": {
392
+ "anyOf": [
393
+ {
394
+ "$ref": "#/definitions/HarnessStatusDto/properties/manifest/anyOf/0/properties/capabilities/properties/effort_levels/items"
395
+ },
396
+ {
397
+ "type": "null"
398
+ }
399
+ ],
400
+ "description": "The effort level the vendor uses for this model when none is requested.",
401
+ "default": null
402
+ }
403
+ },
404
+ "additionalProperties": false,
405
+ "description": "Reasoning-effort vocabulary a single model advertises."
406
+ },
407
+ "default": {},
408
+ "description": "Per-model advertised reasoning-effort vocabulary keyed by model id; a model absent here falls back to the harness-wide effort_levels union."
409
+ },
410
+ "effort_levels_verified_against": {
411
+ "type": [
412
+ "string",
413
+ "null"
414
+ ],
415
+ "default": null,
416
+ "description": "Vendor CLI version the effort ladders were last verified against; null = never verified / not applicable."
381
417
  },
382
418
  "known_models": {
383
419
  "type": "array",
@@ -680,6 +716,52 @@
680
716
  ],
681
717
  "default": null,
682
718
  "description": "Strict truth-source check of configuredModel; null when no model is configured."
719
+ },
720
+ "delegation": {
721
+ "anyOf": [
722
+ {
723
+ "type": "object",
724
+ "properties": {
725
+ "available": {
726
+ "type": "boolean",
727
+ "description": "Whether this harness can receive the packaged delegation belt."
728
+ },
729
+ "reason": {
730
+ "type": "string",
731
+ "enum": [
732
+ "ready",
733
+ "runtime_unavailable",
734
+ "manifest_unsupported"
735
+ ],
736
+ "description": "Stable reason for the current delegation capability verdict."
737
+ },
738
+ "remediation": {
739
+ "type": [
740
+ "string",
741
+ "null"
742
+ ],
743
+ "default": null,
744
+ "description": "Concrete update/repair guidance when unavailable; null when ready."
745
+ },
746
+ "requiresFullAccess": {
747
+ "type": "boolean",
748
+ "default": false,
749
+ "description": "Whether this harness can reach the belt only under a full-access profile."
750
+ }
751
+ },
752
+ "required": [
753
+ "available",
754
+ "reason"
755
+ ],
756
+ "additionalProperties": false,
757
+ "description": "Engine-owned Delegate capability projection for one harness and installed runtime."
758
+ },
759
+ {
760
+ "type": "null"
761
+ }
762
+ ],
763
+ "description": "Engine-owned Delegate capability for this harness and installed runtime; null on legacy status rows.",
764
+ "default": null
683
765
  }
684
766
  },
685
767
  "required": [
@@ -473,7 +473,7 @@
473
473
  "estimated": {
474
474
  "type": "boolean",
475
475
  "default": false,
476
- "description": "True when spend is token-derived rather than natively reported."
476
+ "description": "True when settled cash is estimated rather than exact; subscription valuation confidence is reported separately."
477
477
  },
478
478
  "source": {
479
479
  "type": "string",
@@ -506,6 +506,77 @@
506
506
  ],
507
507
  "description": "Run budget snapshot (cash + subscription valuation, QA-023c); null when unavailable.",
508
508
  "default": null
509
+ },
510
+ "parentRunId": {
511
+ "type": [
512
+ "string",
513
+ "null"
514
+ ],
515
+ "default": null,
516
+ "description": "Server-owned ordinary parent/follow-up run id, when present."
517
+ },
518
+ "delegatedFromRunId": {
519
+ "type": [
520
+ "string",
521
+ "null"
522
+ ],
523
+ "default": null,
524
+ "description": "Claudexor Delegate parent id; null for ordinary runs and native subagents."
525
+ },
526
+ "delegation": {
527
+ "anyOf": [
528
+ {
529
+ "type": "object",
530
+ "properties": {
531
+ "requested": {
532
+ "type": "boolean",
533
+ "default": false
534
+ },
535
+ "effective": {
536
+ "type": "boolean",
537
+ "default": false
538
+ },
539
+ "used": {
540
+ "type": "boolean",
541
+ "default": false
542
+ },
543
+ "reason": {
544
+ "type": "string",
545
+ "enum": [
546
+ "pending",
547
+ "not_requested",
548
+ "injected_unused",
549
+ "used",
550
+ "runtime_unavailable",
551
+ "manifest_unsupported",
552
+ "access_profile_incompatible",
553
+ "partially_degraded",
554
+ "startup_failed"
555
+ ],
556
+ "default": "not_requested"
557
+ },
558
+ "remediation": {
559
+ "anyOf": [
560
+ {
561
+ "type": "string",
562
+ "minLength": 1
563
+ },
564
+ {
565
+ "type": "null"
566
+ }
567
+ ],
568
+ "default": null
569
+ }
570
+ },
571
+ "additionalProperties": false,
572
+ "description": "Engine-owned Delegate requested/effective/used receipt; surfaces project it without parsing model output."
573
+ },
574
+ {
575
+ "type": "null"
576
+ }
577
+ ],
578
+ "description": "Typed Delegate receipt; null when unavailable or legacy.",
579
+ "default": null
509
580
  }
510
581
  },
511
582
  "required": [
@@ -366,6 +366,75 @@
366
366
  ],
367
367
  "description": "Council membership + merge disclosure (QA-023b); null for solo/non-plan tools or deferred handles.",
368
368
  "default": null
369
+ },
370
+ "parentRunId": {
371
+ "type": [
372
+ "string",
373
+ "null"
374
+ ],
375
+ "default": null
376
+ },
377
+ "delegatedFromRunId": {
378
+ "type": [
379
+ "string",
380
+ "null"
381
+ ],
382
+ "default": null
383
+ },
384
+ "delegation": {
385
+ "anyOf": [
386
+ {
387
+ "type": "object",
388
+ "properties": {
389
+ "requested": {
390
+ "type": "boolean",
391
+ "default": false
392
+ },
393
+ "effective": {
394
+ "type": "boolean",
395
+ "default": false
396
+ },
397
+ "used": {
398
+ "type": "boolean",
399
+ "default": false
400
+ },
401
+ "reason": {
402
+ "type": "string",
403
+ "enum": [
404
+ "pending",
405
+ "not_requested",
406
+ "injected_unused",
407
+ "used",
408
+ "runtime_unavailable",
409
+ "manifest_unsupported",
410
+ "access_profile_incompatible",
411
+ "partially_degraded",
412
+ "startup_failed"
413
+ ],
414
+ "default": "not_requested"
415
+ },
416
+ "remediation": {
417
+ "anyOf": [
418
+ {
419
+ "type": "string",
420
+ "minLength": 1
421
+ },
422
+ {
423
+ "type": "null"
424
+ }
425
+ ],
426
+ "default": null
427
+ }
428
+ },
429
+ "additionalProperties": false,
430
+ "description": "Engine-owned Delegate requested/effective/used receipt; surfaces project it without parsing model output."
431
+ },
432
+ {
433
+ "type": "null"
434
+ }
435
+ ],
436
+ "description": "Engine-owned Delegate requested/effective/used receipt; surfaces project it without parsing model output.",
437
+ "default": null
369
438
  }
370
439
  },
371
440
  "required": [
@@ -112,6 +112,32 @@
112
112
  "additionalProperties": false,
113
113
  "default": {},
114
114
  "description": "Safe project routing preference; paid fallback remains user-global."
115
+ },
116
+ "constraints": {
117
+ "type": "object",
118
+ "properties": {
119
+ "protected_paths": {
120
+ "type": "array",
121
+ "items": {
122
+ "type": "string",
123
+ "minLength": 1,
124
+ "allOf": [
125
+ {
126
+ "pattern": "\\S"
127
+ },
128
+ {
129
+ "pattern": "^(?!\\/)(?![A-Za-z]:)(?!.*\\\\)(?!.*\\0)(?!.*\\/\\/)(?!.*\\/$)(?!.*(?:^|\\/)\\.\\.?(?:\\/|$))\\S(?:.*\\S)?$"
130
+ }
131
+ ],
132
+ "description": "Canonical repo-relative glob whose matching changes require human approval before apply."
133
+ },
134
+ "default": [],
135
+ "description": "Restriction-only repo-relative globs whose matching changes require a human decision before apply; empty by default."
136
+ }
137
+ },
138
+ "additionalProperties": false,
139
+ "default": {},
140
+ "description": "Safe project restrictions that can only narrow what an unattended run may apply."
115
141
  }
116
142
  },
117
143
  "additionalProperties": false,
@@ -69,9 +69,11 @@
69
69
  "council.merged",
70
70
  "budget.quota_pressure",
71
71
  "delegation.belt.unavailable",
72
+ "delegation.belt.degraded",
72
73
  "output.ready",
73
74
  "gate.started",
74
75
  "gate.completed",
76
+ "review.preflight",
75
77
  "review.started",
76
78
  "review.skipped",
77
79
  "reviewer.started",
@@ -37,15 +37,16 @@
37
37
  "estimate_headroom",
38
38
  "unknown_paid_in_flight",
39
39
  "budget_overshoot",
40
- "cost_unverifiable"
40
+ "cost_unverifiable",
41
+ "delegation_child_drain_timeout"
41
42
  ],
42
- "description": "Machine-readable failure sub-code within a RunFailure category (today the typed budget-denial reasons produced by the budget ledger)."
43
+ "description": "Machine-readable failure sub-code within a RunFailure category (budget-denial reasons and Delegate child-drain timeout)."
43
44
  },
44
45
  {
45
46
  "type": "null"
46
47
  }
47
48
  ],
48
- "description": "Machine-readable failure sub-code within the category (today the typed budget-denial reason from the ledger); null when the category alone is sufficient. Surfaces choose remediation from this, never by parsing safeMessage.",
49
+ "description": "Machine-readable failure sub-code within the category; null when the category alone is sufficient. Surfaces choose remediation from this, never by parsing safeMessage.",
49
50
  "default": null
50
51
  },
51
52
  "harnessId": {