@claudexor/orchestrator 4.8.1 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/account-pool.d.ts +4 -1
  2. package/dist/account-pool.d.ts.map +1 -1
  3. package/dist/account-pool.js +25 -19
  4. package/dist/account-pool.js.map +1 -1
  5. package/dist/account-resolution.d.ts +1 -4
  6. package/dist/account-resolution.d.ts.map +1 -1
  7. package/dist/account-resolution.js +19 -42
  8. package/dist/account-resolution.js.map +1 -1
  9. package/dist/attemptOutputMarkers.d.ts +7 -0
  10. package/dist/attemptOutputMarkers.d.ts.map +1 -1
  11. package/dist/attemptOutputMarkers.js +1 -1
  12. package/dist/attemptOutputMarkers.js.map +1 -1
  13. package/dist/attemptTelemetry.d.ts +4 -1
  14. package/dist/attemptTelemetry.d.ts.map +1 -1
  15. package/dist/attemptTelemetry.js +9 -26
  16. package/dist/attemptTelemetry.js.map +1 -1
  17. package/dist/candidateEvidence.d.ts +12 -9
  18. package/dist/candidateEvidence.d.ts.map +1 -1
  19. package/dist/candidateEvidence.js +38 -13
  20. package/dist/candidateEvidence.js.map +1 -1
  21. package/dist/candidateOutputs.d.ts +44 -22
  22. package/dist/candidateOutputs.d.ts.map +1 -1
  23. package/dist/candidateOutputs.js +116 -72
  24. package/dist/candidateOutputs.js.map +1 -1
  25. package/dist/candidateReview.d.ts.map +1 -1
  26. package/dist/candidateReview.js +44 -8
  27. package/dist/candidateReview.js.map +1 -1
  28. package/dist/candidateTerminals.d.ts +1 -0
  29. package/dist/candidateTerminals.d.ts.map +1 -1
  30. package/dist/candidateTerminals.js +11 -6
  31. package/dist/candidateTerminals.js.map +1 -1
  32. package/dist/candidateWorkProduct.d.ts +2 -1
  33. package/dist/candidateWorkProduct.d.ts.map +1 -1
  34. package/dist/candidateWorkProduct.js +6 -3
  35. package/dist/candidateWorkProduct.js.map +1 -1
  36. package/dist/captureRefusal.d.ts +29 -1
  37. package/dist/captureRefusal.d.ts.map +1 -1
  38. package/dist/captureRefusal.js +114 -8
  39. package/dist/captureRefusal.js.map +1 -1
  40. package/dist/continuation-chain.test-support.d.ts +473 -0
  41. package/dist/continuation-chain.test-support.d.ts.map +1 -0
  42. package/dist/continuation-chain.test-support.js +206 -0
  43. package/dist/continuation-chain.test-support.js.map +1 -0
  44. package/dist/continuation-custody.d.ts +4 -1
  45. package/dist/continuation-custody.d.ts.map +1 -1
  46. package/dist/continuation-custody.js +68 -28
  47. package/dist/continuation-custody.js.map +1 -1
  48. package/dist/continuation-evidence-io.d.ts +30 -4
  49. package/dist/continuation-evidence-io.d.ts.map +1 -1
  50. package/dist/continuation-evidence-io.js +162 -46
  51. package/dist/continuation-evidence-io.js.map +1 -1
  52. package/dist/continuation-evidence.d.ts +40 -3
  53. package/dist/continuation-evidence.d.ts.map +1 -1
  54. package/dist/continuation-evidence.js +85 -11
  55. package/dist/continuation-evidence.js.map +1 -1
  56. package/dist/continuation-input.d.ts +10 -1
  57. package/dist/continuation-input.d.ts.map +1 -1
  58. package/dist/continuation-input.js +21 -20
  59. package/dist/continuation-input.js.map +1 -1
  60. package/dist/continuation-later.d.ts +30 -0
  61. package/dist/continuation-later.d.ts.map +1 -0
  62. package/dist/continuation-later.js +108 -0
  63. package/dist/continuation-later.js.map +1 -0
  64. package/dist/continue-from.d.ts +4 -3
  65. package/dist/continue-from.d.ts.map +1 -1
  66. package/dist/continue-from.js +62 -26
  67. package/dist/continue-from.js.map +1 -1
  68. package/dist/continuity-notice.d.ts +3 -1
  69. package/dist/continuity-notice.d.ts.map +1 -1
  70. package/dist/continuity-notice.js +3 -1
  71. package/dist/continuity-notice.js.map +1 -1
  72. package/dist/continuity-terminal.d.ts +16 -0
  73. package/dist/continuity-terminal.d.ts.map +1 -1
  74. package/dist/continuity-terminal.js +21 -0
  75. package/dist/continuity-terminal.js.map +1 -1
  76. package/dist/continuity.d.ts +1 -1
  77. package/dist/continuity.d.ts.map +1 -1
  78. package/dist/contract-gates.d.ts.map +1 -1
  79. package/dist/contract-gates.js +11 -6
  80. package/dist/contract-gates.js.map +1 -1
  81. package/dist/credential-cooldown.d.ts +2 -1
  82. package/dist/credential-cooldown.d.ts.map +1 -1
  83. package/dist/credential-cooldown.js +16 -7
  84. package/dist/credential-cooldown.js.map +1 -1
  85. package/dist/credential-preflight.d.ts.map +1 -1
  86. package/dist/credential-preflight.js +10 -7
  87. package/dist/credential-preflight.js.map +1 -1
  88. package/dist/credential-profile-rotation.d.ts +10 -3
  89. package/dist/credential-profile-rotation.d.ts.map +1 -1
  90. package/dist/credential-profile-rotation.js +28 -26
  91. package/dist/credential-profile-rotation.js.map +1 -1
  92. package/dist/deepScanReducer.d.ts +0 -3
  93. package/dist/deepScanReducer.d.ts.map +1 -1
  94. package/dist/deepScanReducer.js +22 -26
  95. package/dist/deepScanReducer.js.map +1 -1
  96. package/dist/delegationFailure.d.ts +34 -5
  97. package/dist/delegationFailure.d.ts.map +1 -1
  98. package/dist/delegationFailure.js +6 -4
  99. package/dist/delegationFailure.js.map +1 -1
  100. package/dist/delegationToolEvidence.d.ts +2 -0
  101. package/dist/delegationToolEvidence.d.ts.map +1 -1
  102. package/dist/delegationToolEvidence.js +21 -0
  103. package/dist/delegationToolEvidence.js.map +1 -1
  104. package/dist/diffReview.d.ts +1 -8
  105. package/dist/diffReview.d.ts.map +1 -1
  106. package/dist/diffReview.js +3 -18
  107. package/dist/diffReview.js.map +1 -1
  108. package/dist/directoryCandidate.d.ts +1 -1
  109. package/dist/directoryCandidate.d.ts.map +1 -1
  110. package/dist/directoryCandidate.js +13 -13
  111. package/dist/directoryCandidate.js.map +1 -1
  112. package/dist/inrun-continuity-carrier.d.ts +11 -1
  113. package/dist/inrun-continuity-carrier.d.ts.map +1 -1
  114. package/dist/inrun-continuity-carrier.js +32 -10
  115. package/dist/inrun-continuity-carrier.js.map +1 -1
  116. package/dist/inrun-continuity-types.d.ts +17 -4
  117. package/dist/inrun-continuity-types.d.ts.map +1 -1
  118. package/dist/inrun-continuity.d.ts +8 -3
  119. package/dist/inrun-continuity.d.ts.map +1 -1
  120. package/dist/inrun-continuity.js +41 -37
  121. package/dist/inrun-continuity.js.map +1 -1
  122. package/dist/inrun-continuity.test-support.d.ts +69 -4
  123. package/dist/inrun-continuity.test-support.d.ts.map +1 -1
  124. package/dist/inrun-continuity.test-support.js +12 -2
  125. package/dist/inrun-continuity.test-support.js.map +1 -1
  126. package/dist/modelGovernance.d.ts +87 -9
  127. package/dist/modelGovernance.d.ts.map +1 -1
  128. package/dist/modelGovernance.js +110 -15
  129. package/dist/modelGovernance.js.map +1 -1
  130. package/dist/orchestrator-credentials.d.ts +9 -4
  131. package/dist/orchestrator-credentials.d.ts.map +1 -1
  132. package/dist/orchestrator-credentials.js +14 -6
  133. package/dist/orchestrator-credentials.js.map +1 -1
  134. package/dist/orchestrator.d.ts +1 -2
  135. package/dist/orchestrator.d.ts.map +1 -1
  136. package/dist/orchestrator.js +248 -224
  137. package/dist/orchestrator.js.map +1 -1
  138. package/dist/planFinalize.d.ts.map +1 -1
  139. package/dist/planFinalize.js +3 -7
  140. package/dist/planFinalize.js.map +1 -1
  141. package/dist/planRun.js +2 -2
  142. package/dist/planRun.js.map +1 -1
  143. package/dist/plannerAttempt.d.ts +0 -2
  144. package/dist/plannerAttempt.d.ts.map +1 -1
  145. package/dist/plannerAttempt.js +64 -30
  146. package/dist/plannerAttempt.js.map +1 -1
  147. package/dist/policyFindings.d.ts +3 -0
  148. package/dist/policyFindings.d.ts.map +1 -1
  149. package/dist/policyFindings.js +11 -1
  150. package/dist/policyFindings.js.map +1 -1
  151. package/dist/pool-attempt-evidence.d.ts +1 -1
  152. package/dist/pool-attempt-evidence.d.ts.map +1 -1
  153. package/dist/pool-attempt-evidence.js +1 -1
  154. package/dist/pool-attempt-evidence.js.map +1 -1
  155. package/dist/primary-divergence.d.ts +7 -2
  156. package/dist/primary-divergence.d.ts.map +1 -1
  157. package/dist/primary-divergence.js +13 -5
  158. package/dist/primary-divergence.js.map +1 -1
  159. package/dist/quota-refusal-scope.d.ts +39 -1
  160. package/dist/quota-refusal-scope.d.ts.map +1 -1
  161. package/dist/quota-refusal-scope.js +95 -1
  162. package/dist/quota-refusal-scope.js.map +1 -1
  163. package/dist/readonlyTerminals.d.ts +0 -1
  164. package/dist/readonlyTerminals.d.ts.map +1 -1
  165. package/dist/readonlyTerminals.js +5 -3
  166. package/dist/readonlyTerminals.js.map +1 -1
  167. package/dist/requestRequirements.d.ts +23 -0
  168. package/dist/requestRequirements.d.ts.map +1 -1
  169. package/dist/requestRequirements.js +22 -0
  170. package/dist/requestRequirements.js.map +1 -1
  171. package/dist/resultNotice.d.ts +14 -0
  172. package/dist/resultNotice.d.ts.map +1 -0
  173. package/dist/resultNotice.js +21 -0
  174. package/dist/resultNotice.js.map +1 -0
  175. package/dist/reviewerInventory.d.ts +47 -0
  176. package/dist/reviewerInventory.d.ts.map +1 -0
  177. package/dist/reviewerInventory.js +74 -0
  178. package/dist/reviewerInventory.js.map +1 -0
  179. package/dist/reviewerPanel.d.ts.map +1 -1
  180. package/dist/reviewerPanel.js +37 -60
  181. package/dist/reviewerPanel.js.map +1 -1
  182. package/dist/routing-failure.d.ts +2 -1
  183. package/dist/routing-failure.d.ts.map +1 -1
  184. package/dist/routing-failure.js +2 -0
  185. package/dist/routing-failure.js.map +1 -1
  186. package/dist/runAdmission.d.ts.map +1 -1
  187. package/dist/runAdmission.js +1 -14
  188. package/dist/runAdmission.js.map +1 -1
  189. package/dist/runEventLog.js +2 -2
  190. package/dist/runEventLog.js.map +1 -1
  191. package/dist/runFactsBuilder.d.ts.map +1 -1
  192. package/dist/runFactsBuilder.js +18 -10
  193. package/dist/runFactsBuilder.js.map +1 -1
  194. package/dist/runFactsDeliverable.d.ts.map +1 -1
  195. package/dist/runFactsDeliverable.js +7 -1
  196. package/dist/runFactsDeliverable.js.map +1 -1
  197. package/dist/runSupport.d.ts +5 -10
  198. package/dist/runSupport.d.ts.map +1 -1
  199. package/dist/runSupport.js +40 -40
  200. package/dist/runSupport.js.map +1 -1
  201. package/dist/runTerminalResults.d.ts +9 -1
  202. package/dist/runTerminalResults.d.ts.map +1 -1
  203. package/dist/runTerminalResults.js +27 -5
  204. package/dist/runTerminalResults.js.map +1 -1
  205. package/dist/savedCandidate.d.ts +43 -0
  206. package/dist/savedCandidate.d.ts.map +1 -0
  207. package/dist/savedCandidate.js +88 -0
  208. package/dist/savedCandidate.js.map +1 -0
  209. package/dist/secretDiff.d.ts +85 -46
  210. package/dist/secretDiff.d.ts.map +1 -1
  211. package/dist/secretDiff.js +123 -126
  212. package/dist/secretDiff.js.map +1 -1
  213. package/dist/task-contract-builder.d.ts.map +1 -1
  214. package/dist/task-contract-builder.js +5 -7
  215. package/dist/task-contract-builder.js.map +1 -1
  216. package/dist/workReportEnvelope.d.ts.map +1 -1
  217. package/dist/workReportEnvelope.js +4 -16
  218. package/dist/workReportEnvelope.js.map +1 -1
  219. package/package.json +17 -17
  220. package/dist/persistedPatch.d.ts +0 -55
  221. package/dist/persistedPatch.d.ts.map +0 -1
  222. package/dist/persistedPatch.js +0 -132
  223. package/dist/persistedPatch.js.map +0 -1
@@ -14,12 +14,14 @@ type Script = (ctx: Spawn & {
14
14
  emit: (ev: Partial<HarnessEvent>) => HarnessEvent;
15
15
  }) => Generator<HarnessEvent>;
16
16
  interface Scenario {
17
- mode: "agent" | "ask";
17
+ mode: "agent" | "ask" | "plan";
18
18
  profiles: string[];
19
19
  script: Script;
20
20
  continuity?: HarnessContinuityCapability | null;
21
21
  pinned?: string;
22
22
  limitAction?: "rotate" | "fail" | "ask";
23
+ /** The saved quota reserve (`profile_policy.headroom_threshold`; default 1). */
24
+ headroomThreshold?: number;
23
25
  maxRetries?: number;
24
26
  /** The run's requested model; null = none (the harness default). */
25
27
  model?: string | null;
@@ -32,6 +34,9 @@ interface Scenario {
32
34
  models?: (profileId: string | null) => Promise<HarnessModel[]>;
33
35
  /** Extra Orchestrator dependencies (e.g. a Delegate drain authority). */
34
36
  deps?: Partial<ConstructorParameters<typeof Orchestrator>[0]>;
37
+ /** Runs inside each asynchronous credential readiness probe (e.g. time
38
+ * passing or a new quota observation landing while readiness is checked). */
39
+ onProbe?: (profileId: string) => void | Promise<void>;
35
40
  }
36
41
  export declare const RESET = "2026-10-06T21:00:00.000Z";
37
42
  /** A movable fake store: sessions live under `<locator>/sessions/<sid>.jsonl`. */
@@ -49,7 +54,7 @@ export declare function run(scenario: Scenario): Promise<{
49
54
  run_id: string;
50
55
  task_id: string;
51
56
  thread_id?: string | undefined;
52
- type: "arbitration.completed" | "budget.cash" | "budget.lease.created" | "budget.observation" | "budget.quota_pressure" | "context.pack.created" | "control.applied" | "control.rejected" | "control.requested" | "council.draft" | "council.member.failed" | "council.merged" | "council.started" | "delegation.belt.degraded" | "delegation.belt.unavailable" | "finding.revalidated" | "gate.completed" | "gate.started" | "harness.completed" | "harness.event" | "harness.started" | "interaction.answer_discarded" | "interaction.answered" | "interaction.requested" | "interaction.timeout" | "interaction.withdrawn" | "message.accepted" | "message.delivered" | "message.refused" | "output.ready" | "plan.brief.materialized" | "plan.progress" | "plan.questions" | "policy.web.upgraded" | "project.claude_bridge.created" | "project.git.initialized" | "review.preflight" | "review.skipped" | "review.started" | "reviewer.auth_switched" | "reviewer.completed" | "reviewer.failed" | "reviewer.first_event" | "reviewer.started" | "reviewer.timed_out" | "route.account.lane_switch" | "route.account.pool_exhausted" | "route.account.pool_selected" | "route.fallback.auth_switched" | "route.fallback.completed" | "route.fallback.exhausted" | "route.fallback.started" | "route.pool.degraded" | "route.primary.diverged" | "route.profile.credential_unusable" | "route.profile.headroom_exceeded" | "route.profile.rotated" | "route.profile.rotation_exhausted" | "route.transient.detected" | "route.transient.exhausted" | "route.transient.retry_scheduled" | "run.blocked" | "run.completed" | "run.continuation" | "run.continuation.denied" | "run.continuity" | "run.created" | "run.failed" | "session.continuity" | "synthesis.started" | "task.contract.created" | "work_product.adopted" | "work_product.emitted" | "workspace.retained";
57
+ type: "arbitration.completed" | "budget.cash" | "budget.lease.created" | "budget.observation" | "budget.quota_pressure" | "context.pack.created" | "control.applied" | "control.rejected" | "control.requested" | "council.draft" | "council.member.failed" | "council.merged" | "council.started" | "delegation.belt.degraded" | "delegation.belt.unavailable" | "finding.revalidated" | "gate.completed" | "gate.started" | "harness.completed" | "harness.event" | "harness.started" | "interaction.answer_discarded" | "interaction.answered" | "interaction.requested" | "interaction.timeout" | "interaction.withdrawn" | "message.accepted" | "message.delivered" | "message.refused" | "output.ready" | "plan.brief.materialized" | "plan.progress" | "plan.questions" | "policy.web.upgraded" | "project.claude_bridge.created" | "project.git.initialized" | "review.preflight" | "review.skipped" | "review.started" | "reviewer.auth_switched" | "reviewer.completed" | "reviewer.failed" | "reviewer.first_event" | "reviewer.started" | "reviewer.timed_out" | "route.account.lane_switch" | "route.account.pool_exhausted" | "route.account.pool_selected" | "route.fallback.auth_switched" | "route.fallback.completed" | "route.fallback.exhausted" | "route.fallback.started" | "route.pool.degraded" | "route.primary.diverged" | "route.profile.credential_unusable" | "route.profile.headroom_exceeded" | "route.profile.rotated" | "route.profile.rotation_exhausted" | "route.transient.detected" | "route.transient.exhausted" | "route.transient.retry_scheduled" | "run.blocked" | "run.completed" | "run.continuation" | "run.continuation.denied" | "run.continuity" | "run.created" | "run.failed" | "session.continuity" | "synthesis.started" | "task.contract.created" | "work_product.adopted" | "work_product.emitted" | "workspace.retained" | "workspace.settlement_failed";
53
58
  payload: Record<string, unknown>;
54
59
  }[];
55
60
  receipts: Record<string, unknown>[];
@@ -98,6 +103,10 @@ export declare const limit: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent,
98
103
  source: "account_catalog";
99
104
  profile_id: string | null;
100
105
  } | undefined;
106
+ speech?: {
107
+ key: string;
108
+ op: "abandoned" | "complete" | "fragment";
109
+ } | undefined;
101
110
  request_refusal?: {
102
111
  scope: "turn_text";
103
112
  unit: "unicode_scalars";
@@ -162,9 +171,18 @@ export declare const limit: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent,
162
171
  use_id?: string | undefined;
163
172
  target?: string | undefined;
164
173
  status?: "cancelled" | "denied" | "error" | "ok" | undefined;
174
+ phase?: "completed" | "started" | undefined;
165
175
  error_summary?: string | undefined;
166
176
  content_summary?: string | undefined;
167
177
  exit_code?: number | undefined;
178
+ command_outcome?: {
179
+ state: "backgrounded" | "exited" | "timed_out" | "unknown";
180
+ signal?: string | undefined;
181
+ timeout_ms?: number | undefined;
182
+ background_reason?: "requested" | "timeout" | undefined;
183
+ shell_id?: string | undefined;
184
+ pid?: number | undefined;
185
+ } | undefined;
168
186
  web_retrieval?: "dispatched" | "failed" | "verified" | undefined;
169
187
  } | undefined;
170
188
  interaction?: {
@@ -192,7 +210,23 @@ export declare const limit: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent,
192
210
  expected_blob_oid: string | null;
193
211
  }[];
194
212
  } | undefined;
195
- refusal_code?: "raw_patch_apply_failed" | "raw_patch_base_mismatch" | "raw_patch_binary_unsupported" | "raw_patch_digest_mismatch" | "raw_patch_missing_evidence" | "raw_patch_outside_scope" | "raw_patch_path_traversal" | "raw_patch_requires_isolation" | "raw_patch_stale_preimage" | "raw_patch_truncated" | undefined;
213
+ refusal_code?: "raw_context_exceeds_window" | "raw_patch_apply_failed" | "raw_patch_base_mismatch" | "raw_patch_binary_unsupported" | "raw_patch_digest_mismatch" | "raw_patch_missing_evidence" | "raw_patch_outside_scope" | "raw_patch_path_traversal" | "raw_patch_requires_isolation" | "raw_patch_stale_preimage" | "raw_patch_truncated" | undefined;
214
+ raw_context?: {
215
+ model: string;
216
+ estimated_request_tokens: number;
217
+ budget: {
218
+ estimator: "chars_div_4";
219
+ basis: "assumed_ceiling" | "model_context_window";
220
+ model: string | null;
221
+ context_window: number | null;
222
+ output_allowance_tokens: number | null;
223
+ framing_tokens: number | null;
224
+ selection_limit_tokens: number;
225
+ estimated_packet_tokens: number;
226
+ omitted_for_budget: number;
227
+ mandatory_paths: string[];
228
+ };
229
+ } | undefined;
196
230
  permission_denial?: {
197
231
  permission: string;
198
232
  source: string;
@@ -227,6 +261,7 @@ export declare const limit: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent,
227
261
  constraint_id?: string | undefined;
228
262
  applies_to_request_kinds?: ("image" | "text")[] | undefined;
229
263
  applies_to_models?: string[] | null | undefined;
264
+ applies_to_model_prefixes?: string[] | undefined;
230
265
  resets_at: string | null;
231
266
  retry_delay_ms: number | null;
232
267
  } | undefined;
@@ -281,6 +316,10 @@ export declare const crash: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent)
281
316
  source: "account_catalog";
282
317
  profile_id: string | null;
283
318
  } | undefined;
319
+ speech?: {
320
+ key: string;
321
+ op: "abandoned" | "complete" | "fragment";
322
+ } | undefined;
284
323
  request_refusal?: {
285
324
  scope: "turn_text";
286
325
  unit: "unicode_scalars";
@@ -345,9 +384,18 @@ export declare const crash: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent)
345
384
  use_id?: string | undefined;
346
385
  target?: string | undefined;
347
386
  status?: "cancelled" | "denied" | "error" | "ok" | undefined;
387
+ phase?: "completed" | "started" | undefined;
348
388
  error_summary?: string | undefined;
349
389
  content_summary?: string | undefined;
350
390
  exit_code?: number | undefined;
391
+ command_outcome?: {
392
+ state: "backgrounded" | "exited" | "timed_out" | "unknown";
393
+ signal?: string | undefined;
394
+ timeout_ms?: number | undefined;
395
+ background_reason?: "requested" | "timeout" | undefined;
396
+ shell_id?: string | undefined;
397
+ pid?: number | undefined;
398
+ } | undefined;
351
399
  web_retrieval?: "dispatched" | "failed" | "verified" | undefined;
352
400
  } | undefined;
353
401
  interaction?: {
@@ -375,7 +423,23 @@ export declare const crash: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent)
375
423
  expected_blob_oid: string | null;
376
424
  }[];
377
425
  } | undefined;
378
- refusal_code?: "raw_patch_apply_failed" | "raw_patch_base_mismatch" | "raw_patch_binary_unsupported" | "raw_patch_digest_mismatch" | "raw_patch_missing_evidence" | "raw_patch_outside_scope" | "raw_patch_path_traversal" | "raw_patch_requires_isolation" | "raw_patch_stale_preimage" | "raw_patch_truncated" | undefined;
426
+ refusal_code?: "raw_context_exceeds_window" | "raw_patch_apply_failed" | "raw_patch_base_mismatch" | "raw_patch_binary_unsupported" | "raw_patch_digest_mismatch" | "raw_patch_missing_evidence" | "raw_patch_outside_scope" | "raw_patch_path_traversal" | "raw_patch_requires_isolation" | "raw_patch_stale_preimage" | "raw_patch_truncated" | undefined;
427
+ raw_context?: {
428
+ model: string;
429
+ estimated_request_tokens: number;
430
+ budget: {
431
+ estimator: "chars_div_4";
432
+ basis: "assumed_ceiling" | "model_context_window";
433
+ model: string | null;
434
+ context_window: number | null;
435
+ output_allowance_tokens: number | null;
436
+ framing_tokens: number | null;
437
+ selection_limit_tokens: number;
438
+ estimated_packet_tokens: number;
439
+ omitted_for_budget: number;
440
+ mandatory_paths: string[];
441
+ };
442
+ } | undefined;
379
443
  permission_denial?: {
380
444
  permission: string;
381
445
  source: string;
@@ -410,6 +474,7 @@ export declare const crash: (emit: (ev: Partial<HarnessEvent>) => HarnessEvent)
410
474
  constraint_id?: string | undefined;
411
475
  applies_to_request_kinds?: ("image" | "text")[] | undefined;
412
476
  applies_to_models?: string[] | null | undefined;
477
+ applies_to_model_prefixes?: string[] | undefined;
413
478
  resets_at: string | null;
414
479
  retry_delay_ms: number | null;
415
480
  } | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"inrun-continuity.test-support.d.ts","sourceRoot":"","sources":["../src/inrun-continuity.test-support.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inrun-continuity.test-support.d.ts","sourceRoot":"","sources":["../src/inrun-continuity.test-support.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,16 @@ export async function run(scenario) {
64
64
  },
65
65
  },
66
66
  credential_profiles: scenario.registryProfiles?.(profiles) ?? profiles,
67
- harnesses: { fake: { profile_policy: { limit_action: scenario.limitAction ?? "rotate" } } },
67
+ harnesses: {
68
+ fake: {
69
+ profile_policy: {
70
+ limit_action: scenario.limitAction ?? "rotate",
71
+ ...(scenario.headroomThreshold
72
+ ? { headroom_threshold: scenario.headroomThreshold }
73
+ : {}),
74
+ },
75
+ },
76
+ },
68
77
  }));
69
78
  const spawns = [];
70
79
  const perProfile = new Map();
@@ -97,13 +106,14 @@ export async function run(scenario) {
97
106
  return ConformanceReport.parse({
98
107
  harness_id: "fake",
99
108
  status: "ok",
100
- enabled_intents: ["implement", "repair", "explain", "audit"],
109
+ enabled_intents: ["implement", "repair", "explain", "audit", "plan"],
101
110
  auth_sources: [
102
111
  { source: "native_session", availability: "available", verification: "passed" },
103
112
  ],
104
113
  });
105
114
  },
106
115
  async probeCredentialProfile(profile) {
116
+ await scenario.onProbe?.(profile.profile_id);
107
117
  return {
108
118
  profile_id: profile.profile_id,
109
119
  harness_id: "fake",
@@ -1 +1 @@
1
- {"version":3,"file":"inrun-continuity.test-support.js","sourceRoot":"","sources":["../src/inrun-continuity.test-support.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inrun-continuity.test-support.js","sourceRoot":"","sources":["../src/inrun-continuity.test-support.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,83 @@
1
+ /**
2
+ * STRICT run-preflight model gate (INV-104): every route that resolved an
3
+ * explicit model (per-run map or per-harness settings default) must pass its
4
+ * harness's model truth source — the live `models()` inventory when the
5
+ * adapter has one, else the manifest `known_models` list. A violation throws
6
+ * a typed error BEFORE any vendor CLI spawns; the orchestrator surfaces it
7
+ * through the routing-failure path, so failure.yaml names harness, model, and
8
+ * truth source.
9
+ *
10
+ * Two rules keep the gate honest about WHICH account answered:
11
+ * - The inventory is asked of the account the run will actually use. A
12
+ * profile-pinned route derives its auth route from that profile's credential
13
+ * kind, and the query carries the profile's own state HOME, so model truth
14
+ * can never come from the default credential store.
15
+ * - Nothing about the spawned spec is rewritten to make the two agree. A
16
+ * profile-less `auto` run is enumerated with the same `auto` preference the
17
+ * adapter will resolve, so preflight and spawn share one resolution instead
18
+ * of the gate freezing a route the adapter would then be unable to disclose.
19
+ *
20
+ * A fallback model is checked by the authoritative per-spawn gate only after
21
+ * its own quota/profile preflight; checking it against the primary profile
22
+ * here would reject a valid cross-profile fallback.
23
+ *
24
+ * What a list may refuse with is the HARNESS's declaration: where the adapter
25
+ * declared `model_inventory_absence: "advisory"`, its live inventory and its
26
+ * manifest hints alike prove presence but not absence, so an unlisted explicit
27
+ * model is forwarded to the vendor unchanged and disclosed once by the
28
+ * per-spawn gate. An authoritative harness (the declaration a silent manifest
29
+ * gets) refuses as before, and no gate ever swaps one list for another to
30
+ * admit a model. A live read that FAILED is not a list at all (#393, owner
31
+ * decision A): a missing or rejected credential refuses the explicit model at
32
+ * both gates with the read's typed cause (`ModelCatalogUnavailableError`, core
33
+ * `validateModelOnUnreadCatalog`); any other failure forwards it unverified on
34
+ * the same key, disclosed once by the per-spawn gate. A declared refused
35
+ * variant is refused either way.
36
+ *
37
+ * A failure never erases what this run already read: the route keeps its most
38
+ * recent successful read, and a later failed read at the SAME credential
39
+ * identity is answered by that earlier read (its rows, presence and windows),
40
+ * disclosed as such. That identity is the profile AND the key: both reads must
41
+ * carry the producer's same key fingerprint, because a stored secret or key
42
+ * variable replaced mid-run keeps its profile id. Nothing is read again for it
43
+ * and nothing outlives the route; another identity, a read that names no key,
44
+ * or a credential failure never borrows it.
45
+ *
46
+ * The per-spawn gate reads the catalog ONCE per spawn, at the identity the
47
+ * vendor process receives, and that one read serves every consumer of the
48
+ * spawn: the explicit model, the size of a RawContextPacket the request inlines
49
+ * (#147) and the adapter's own disclosures (#146), so none of them can judge
50
+ * the request by another read. Where the producer binds its key to the read
51
+ * (`credential`), the request sends that same key: one replaced while the
52
+ * packet is prepared is first read, and sent, by the next spawn.
53
+ */
54
+ import { RoutingPreflightError } from "@claudexor/budget";
1
55
  import type { AuthVerification, PaidFallback } from "@claudexor/schema";
2
- import type { HarnessAdapter } from "@claudexor/core";
3
- import { type CredentialProfile, type HarnessCapabilities, type HarnessEvent, type HarnessRunSpec, type KnownModelEntry, type ProcessingReceipt } from "@claudexor/schema";
56
+ import type { HarnessAdapter, RawRequestCapacity } from "@claudexor/core";
57
+ import { ModelCatalogUnavailableError, RawContextRefusalError } from "@claudexor/core";
58
+ import { type CredentialProfile, type HarnessCapabilities, type HarnessEvent, type HarnessModel, type HarnessRunSpec, type KnownModelEntry, type ProcessingReceipt, type RawContextPacket } from "@claudexor/schema";
59
+ import { ProcessingBudgetAdmissionError } from "./processing-dispatch.js";
4
60
  export interface ModelGovernedRoute {
5
61
  adapter: HarnessAdapter;
6
62
  /** Manifest model truth source (used when the adapter has no live models()). */
7
63
  knownModels: readonly KnownModelEntry[];
8
64
  /** The adapter's declared live-inventory contract, read from its manifest:
9
- * WHICH credential routes its `models()` producer answers for, and WHAT its
65
+ * WHICH credential routes its `models()` producer answers for, WHAT its
10
66
  * answer proves about a model it does not list (`model_inventory_absence`;
11
- * omitted = `authoritative` = today's refusal). Both halves travel together
12
- * so a caller cannot supply one and silently lose the other. */
13
- modelInventory?: Readonly<Pick<HarnessCapabilities, "model_inventory_routes" | "model_inventory_absence">>;
67
+ * omitted = `authoritative` = today's refusal), and which request-time
68
+ * routing suffixes a listed row admits (#145). They travel together so a
69
+ * caller cannot supply one and silently lose another. */
70
+ modelInventory?: Readonly<Pick<HarnessCapabilities, "model_inventory_routes" | "model_inventory_absence" | "model_routing_variants" | "model_refused_variants">>;
71
+ /** The most recent successful typed catalog read on this route, and the
72
+ * credential identity it was read under (profile id, null = the engine
73
+ * default; the producer's key fingerprint, null = it named none). Written by
74
+ * the gates of this run only (see the file comment). */
75
+ lastListedCatalog?: {
76
+ profileId: string | null;
77
+ credentialFingerprint: string | null;
78
+ models: HarnessModel[];
79
+ observedAt: string;
80
+ };
14
81
  /** Pre-spawn credential-route estimate: route-annotated manifest models are
15
82
  * filtered by it, and stay EXCLUDED when it is null (fail-closed — a
16
83
  * route-scoped model never passes the gate on an undecidable route). */
@@ -39,14 +106,25 @@ export declare function assertRouteModelsAllowed(routes: readonly ModelGovernedR
39
106
  routeStateEnvFor?: (harnessId: string) => Record<string, string> | undefined): Promise<void>;
40
107
  /** Refresh account evidence and admit one send without replacing captured Processing. */
41
108
  export declare function admitCurrentProfileDispatch(routed: Pick<ModelGovernedRoute, "billingVerificationForProfile" | "paidFallback">, spec: HarnessRunSpec): Promise<void>;
109
+ /** What `runModelGovernedRoute` refuses with BEFORE anything is sent: budget
110
+ * or routing admission, an unreadable catalog, an undeliverable packet. An
111
+ * attempt records it as its declared failure, never as a crashed harness. */
112
+ export type DispatchRefusal = ProcessingBudgetAdmissionError | RoutingPreflightError | ModelCatalogUnavailableError | RawContextRefusalError;
113
+ export declare function isDispatchRefusal(err: unknown): err is DispatchRefusal;
42
114
  /**
43
115
  * Authoritative per-spawn model gate. Admission validates the initially routed
44
116
  * account early; this guard rebinds the same strict truth contract to the
45
117
  * profile, auth preference, cwd, and mutable state HOME the vendor process will
46
118
  * actually receive. Every routed spawn funnels through this generator, so a
47
119
  * quota rotation or fallback-model preflight cannot reuse another account's
48
- * inventory. The spec is passed to the adapter byte-identical: the gate reads
49
- * the run's identity, it never rewrites it.
120
+ * inventory. The gate reads the run's identity, it never rewrites it; what it
121
+ * adds is this spawn's own catalog read and, for a `rawContext` caller, the
122
+ * packet sized from it.
50
123
  */
51
- export declare function runModelGovernedRoute(routed: ModelGovernedRoute, spec: HarnessRunSpec): AsyncIterable<HarnessEvent>;
124
+ export declare function runModelGovernedRoute(routed: ModelGovernedRoute, spec: HarnessRunSpec,
125
+ /** `rawContext` builds this spawn's RawContextPacket for the capacity of the
126
+ * gate's own catalog read (#147); the caller keeps the packet it returns. */
127
+ dispatch?: {
128
+ rawContext?: (capacity: RawRequestCapacity | null) => Promise<RawContextPacket>;
129
+ }): AsyncIterable<HarnessEvent>;
52
130
  //# sourceMappingURL=modelGovernance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modelGovernance.d.ts","sourceRoot":"","sources":["../src/modelGovernance.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAYtD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAEjB,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,gFAAgF;IAChF,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACxC;;;;oEAIgE;IAChE,cAAc,CAAC,EAAE,QAAQ,CACvB,IAAI,CAAC,mBAAmB,EAAE,wBAAwB,GAAG,yBAAyB,CAAC,CAChF,CAAC;IACF;;4EAEwE;IACxE,iBAAiB,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IACtD;sEACkE;IAClE,cAAc,EAAE;QAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;KAAE,CAAC;IACtD,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1F,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/E,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;CACtC;AA0FD;;0EAE0E;AAC1E,wBAAsB,eAAe,CACnC,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,kBAAkB,EAAE,EACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC1C,GAAG,EAAE,MAAM;AACX;iEACiE;AACjE,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC3E,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,yFAAyF;AACzF,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,+BAA+B,GAAG,cAAc,CAAC,EAClF,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;;;GAQG;AACH,wBAAuB,qBAAqB,CAC1C,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,cAAc,GACnB,aAAa,CAAC,YAAY,CAAC,CAqF7B"}
1
+ {"version":3,"file":"modelGovernance.d.ts","sourceRoot":"","sources":["../src/modelGovernance.ts"],"names":[],"mappings":"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"}
@@ -27,11 +27,35 @@
27
27
  * model is forwarded to the vendor unchanged and disclosed once by the
28
28
  * per-spawn gate. An authoritative harness (the declaration a silent manifest
29
29
  * gets) refuses as before, and no gate ever swaps one list for another to
30
- * admit a model.
30
+ * admit a model. A live read that FAILED is not a list at all (#393, owner
31
+ * decision A): a missing or rejected credential refuses the explicit model at
32
+ * both gates with the read's typed cause (`ModelCatalogUnavailableError`, core
33
+ * `validateModelOnUnreadCatalog`); any other failure forwards it unverified on
34
+ * the same key, disclosed once by the per-spawn gate. A declared refused
35
+ * variant is refused either way.
36
+ *
37
+ * A failure never erases what this run already read: the route keeps its most
38
+ * recent successful read, and a later failed read at the SAME credential
39
+ * identity is answered by that earlier read (its rows, presence and windows),
40
+ * disclosed as such. That identity is the profile AND the key: both reads must
41
+ * carry the producer's same key fingerprint, because a stored secret or key
42
+ * variable replaced mid-run keeps its profile id. Nothing is read again for it
43
+ * and nothing outlives the route; another identity, a read that names no key,
44
+ * or a credential failure never borrows it.
45
+ *
46
+ * The per-spawn gate reads the catalog ONCE per spawn, at the identity the
47
+ * vendor process receives, and that one read serves every consumer of the
48
+ * spawn: the explicit model, the size of a RawContextPacket the request inlines
49
+ * (#147) and the adapter's own disclosures (#146), so none of them can judge
50
+ * the request by another read. Where the producer binds its key to the read
51
+ * (`credential`), the request sends that same key: one replaced while the
52
+ * packet is prepared is first read, and sent, by the next spawn.
31
53
  */
32
- import { billingKnowledgeForAuthRoute } from "@claudexor/budget";
33
- import { HarnessUnavailableError, effortResolutionEvent, resolveEffortEvidence, validateModel, hasModelInventoryForRoute, prepareHarnessProcessing, admitPreparedProcessing, observeCredentialExecution, observedModelCatalogMatch, } from "@claudexor/core";
54
+ import { RoutingPreflightError, billingKnowledgeForAuthRoute } from "@claudexor/budget";
55
+ import { HarnessUnavailableError, ModelCatalogUnavailableError, RawContextRefusalError, abortSignalFromSpec, effortResolutionEvent, modelCatalogFailureRefuses, modelCatalogFailureText, readModelCatalog, resolveEffortEvidence, validateModel, validateModelOnUnreadCatalog, hasModelInventoryForRoute, prepareHarnessProcessing, admitPreparedProcessing, observeCredentialExecution, observedModelCatalogMatch, withDispatchModelCatalog, } from "@claudexor/core";
34
56
  import { knownModelIdsForRoute, } from "@claudexor/schema";
57
+ import { nowIso } from "@claudexor/util";
58
+ import { ProcessingBudgetAdmissionError } from "./processing-dispatch.js";
35
59
  /** A pinned profile decides the route by its credential kind; without one the
36
60
  * pre-spawn estimate stands (and stays fail-closed when undecidable). */
37
61
  function authRouteForProfile(profile, estimate) {
@@ -42,17 +66,48 @@ function authRouteForProfile(profile, estimate) {
42
66
  async function modelTruthForRoute(routed, query) {
43
67
  const route = authRouteForProfile(query.profile, routed.authRouteEstimate);
44
68
  if (hasModelInventoryForRoute(routed.adapter, routed.modelInventory?.model_inventory_routes, route)) {
45
- const inventory = await routed.adapter.models({
69
+ const read = await readModelCatalog(routed.adapter, {
46
70
  cwd: query.cwd,
47
71
  ...(query.env ? { env: query.env } : {}),
48
72
  ...(query.authPreference ? { authPreference: query.authPreference } : {}),
49
73
  ...(query.profile ? { credentialProfile: query.profile } : {}),
50
74
  });
75
+ const profileId = query.profile?.profile_id ?? null;
76
+ // The key this read sent travels with every observation the gate hands
77
+ // on, so the spawn's request sends that key (see the file comment).
78
+ const credential = read.credential;
79
+ if (read.status === "listed" && !read.failSoft)
80
+ routed.lastListedCatalog = {
81
+ profileId,
82
+ credentialFingerprint: credential?.fingerprint ?? null,
83
+ models: read.models,
84
+ observedAt: nowIso(),
85
+ };
86
+ const earlier = routed.lastListedCatalog;
87
+ if (read.status === "unavailable" &&
88
+ !modelCatalogFailureRefuses(read.failure) &&
89
+ credential &&
90
+ earlier?.profileId === profileId &&
91
+ earlier.credentialFingerprint === credential.fingerprint)
92
+ return {
93
+ list: earlier.models.map((model) => model.id),
94
+ source: "api",
95
+ route,
96
+ absence: routed.modelInventory?.model_inventory_absence ?? "authoritative",
97
+ catalogRead: true,
98
+ observation: { status: "listed", models: earlier.models, credential },
99
+ earlierRead: { failure: read.failure, observedAt: earlier.observedAt },
100
+ };
51
101
  return {
52
- list: inventory.map((model) => model.id),
102
+ list: read.status === "listed" ? read.models.map((model) => model.id) : [],
53
103
  source: "api",
54
104
  route,
55
105
  absence: routed.modelInventory?.model_inventory_absence ?? "authoritative",
106
+ ...(read.status === "unavailable" ? { failure: read.failure, observation: read } : {}),
107
+ catalogRead: read.status === "listed" && !read.failSoft,
108
+ ...(read.status === "listed" && !read.failSoft
109
+ ? { observation: { status: "listed", models: read.models, credential } }
110
+ : {}),
56
111
  };
57
112
  }
58
113
  // The manifest hint list is judged under the SAME declaration as the live
@@ -63,6 +118,7 @@ async function modelTruthForRoute(routed, query) {
63
118
  source: "manifest",
64
119
  route,
65
120
  absence: routed.modelInventory?.model_inventory_absence ?? "authoritative",
121
+ catalogRead: false,
66
122
  };
67
123
  }
68
124
  /** Throws on a refused candidate; returns the notes of the candidates a truth
@@ -70,13 +126,24 @@ async function modelTruthForRoute(routed, query) {
70
126
  * disclose does it once. */
71
127
  function assertModelsAllowed(routed, candidates, truth, profile) {
72
128
  const unverified = [];
129
+ const refusedVariants = routed.modelInventory?.model_refused_variants ?? [];
73
130
  for (const { role, model } of candidates) {
74
- const check = validateModel(model, truth.list, truth.source, truth.absence);
131
+ const check = truth.failure
132
+ ? validateModelOnUnreadCatalog(model, truth.failure, truth.absence, { refusedVariants })
133
+ : validateModel(model, truth.list, truth.source, truth.absence, {
134
+ catalogRead: truth.catalogRead,
135
+ routingVariants: routed.modelInventory?.model_routing_variants ?? [],
136
+ refusedVariants,
137
+ });
75
138
  if (check.status === "ok") {
76
139
  if (check.unverified && check.message)
77
140
  unverified.push(check.message);
78
141
  continue;
79
142
  }
143
+ if (check.catalogFailure)
144
+ throw new ModelCatalogUnavailableError(`harness '${routed.adapter.id}' refused ${role} '${model}' (truth source: api): ${check.message}`, check.catalogFailure);
145
+ if (check.refusedVariant)
146
+ throw new HarnessUnavailableError(`harness '${routed.adapter.id}' refused ${role} '${model}': ${check.message}`);
80
147
  // A pinned profile OWNS this inventory: sending the operator to the
81
148
  // profile-less `claudexor models` would print a different account's list.
82
149
  // Observations only — which account supplied which list — never a cause
@@ -145,16 +212,26 @@ export async function admitCurrentProfileDispatch(routed, spec) {
145
212
  if (typeof markStarted === "function")
146
213
  markStarted();
147
214
  }
215
+ export function isDispatchRefusal(err) {
216
+ return (err instanceof ProcessingBudgetAdmissionError ||
217
+ err instanceof RoutingPreflightError ||
218
+ err instanceof ModelCatalogUnavailableError ||
219
+ err instanceof RawContextRefusalError);
220
+ }
148
221
  /**
149
222
  * Authoritative per-spawn model gate. Admission validates the initially routed
150
223
  * account early; this guard rebinds the same strict truth contract to the
151
224
  * profile, auth preference, cwd, and mutable state HOME the vendor process will
152
225
  * actually receive. Every routed spawn funnels through this generator, so a
153
226
  * quota rotation or fallback-model preflight cannot reuse another account's
154
- * inventory. The spec is passed to the adapter byte-identical: the gate reads
155
- * the run's identity, it never rewrites it.
227
+ * inventory. The gate reads the run's identity, it never rewrites it; what it
228
+ * adds is this spawn's own catalog read and, for a `rawContext` caller, the
229
+ * packet sized from it.
156
230
  */
157
- export async function* runModelGovernedRoute(routed, spec) {
231
+ export async function* runModelGovernedRoute(routed, spec,
232
+ /** `rawContext` builds this spawn's RawContextPacket for the capacity of the
233
+ * gate's own catalog read (#147); the caller keeps the packet it returns. */
234
+ dispatch = {}) {
158
235
  let nativeModel = null;
159
236
  let preparedEffort;
160
237
  let catalog = [];
@@ -180,19 +257,32 @@ export async function* runModelGovernedRoute(routed, spec) {
180
257
  }
181
258
  const model = spec.model_hint?.trim();
182
259
  const unverified = [];
183
- if (model) {
184
- const profile = spec.credential_profile ?? null;
185
- const truth = await modelTruthForRoute(routed, {
260
+ const profile = spec.credential_profile ?? null;
261
+ const truth = model || dispatch.rawContext
262
+ ? await modelTruthForRoute(routed, {
186
263
  cwd: spec.cwd,
187
264
  env: spec.env,
188
265
  authPreference: spec.auth_preference,
189
266
  profile,
190
- });
267
+ })
268
+ : null;
269
+ // Said before any model note: which read the notes and the packet stand on.
270
+ if (truth?.earlierRead)
271
+ unverified.push(`${modelCatalogFailureText(truth.earlierRead.failure)} at dispatch; this run's earlier ` +
272
+ `catalog read with the same credentials (${truth.earlierRead.observedAt}) answers for ` +
273
+ "the model and its limits");
274
+ if (model && truth) {
191
275
  unverified.push(...assertModelsAllowed(routed, [{ role: "model", model }], truth, profile));
192
276
  if (nativeModel && nativeModel !== model) {
193
277
  unverified.push(...assertModelsAllowed(routed, [{ role: "native processing model", model: nativeModel }], truth, profile));
194
278
  }
195
279
  }
280
+ if (dispatch.rawContext) {
281
+ // Sized before admission: a packet that cannot be delivered spends nothing.
282
+ const rows = truth?.observation?.status === "listed" ? truth.observation.models : [];
283
+ const capacity = routed.adapter.rawRequestCapacity?.(spec, rows) ?? null;
284
+ spec = { ...spec, raw_context_packet: await dispatch.rawContext(capacity) };
285
+ }
196
286
  await admitCurrentProfileDispatch(routed, spec);
197
287
  if (spec.processing?.reason === "processing_control_unavailable") {
198
288
  yield {
@@ -224,8 +314,13 @@ export async function* runModelGovernedRoute(routed, spec) {
224
314
  else if (!routed.adapter.effortParameter) {
225
315
  yield effortResolutionEvent(spec.session_id, resolveEffortEvidence(spec.effort_hint, [], [], "adapter", null));
226
316
  }
227
- const events = stampObservedModelCatalogMatch(routed.adapter.run(spec), catalog, spec.credential_profile?.profile_id ?? null);
228
- yield* observeCredentialExecution(routed.adapter.id, spec, events);
317
+ // The disclosures above are yields; a run stopped at one of them is not
318
+ // dispatched when its consumer keeps reading to drain teardown evidence.
319
+ if (abortSignalFromSpec(spec)?.aborted)
320
+ return;
321
+ const sent = truth?.observation ? withDispatchModelCatalog(spec, truth.observation) : spec;
322
+ const events = stampObservedModelCatalogMatch(routed.adapter.run(sent), catalog, sent.credential_profile?.profile_id ?? null);
323
+ yield* observeCredentialExecution(routed.adapter.id, sent, events);
229
324
  }
230
325
  /**
231
326
  * The gate is the only author of `observed_model_catalog_match`: it