@vtxmacro/cli 2026.9.5 → 2026.9.7

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.
@@ -16,7 +16,7 @@ import { fileURLToPath } from "node:url";
16
16
  // agent-cli-release.json
17
17
  var agent_cli_release_default = {
18
18
  package_name: "@vtxmacro/cli",
19
- package_version: "2026.9.5",
19
+ package_version: "2026.9.7",
20
20
  codex_package_name: "@openai/codex",
21
21
  codex_version: "0.147.0",
22
22
  copilot_sdk_package_name: "@github/copilot-sdk",
package/bin/vtx.js CHANGED
@@ -47,7 +47,7 @@ var init_agent_cli_release = __esm({
47
47
  "agent-cli-release.json"() {
48
48
  agent_cli_release_default = {
49
49
  package_name: "@vtxmacro/cli",
50
- package_version: "2026.9.5",
50
+ package_version: "2026.9.7",
51
51
  codex_package_name: "@openai/codex",
52
52
  codex_version: "0.147.0",
53
53
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -14442,7 +14442,7 @@ var init_zod = __esm({
14442
14442
  });
14443
14443
 
14444
14444
  // lib/external-inference-contract.ts
14445
- var EXTERNAL_INFERENCE_CONTRACT_VERSION, EXTERNAL_INFERENCE_CONTROLLER_SCHEMA_VERSION, EXTERNAL_INFERENCE_CONTROLLER_SCHEMA_VERSION_V2, EXTERNAL_INFERENCE_ADVERTISEMENT_SCHEMA_VERSION, EXTERNAL_INFERENCE_ENVELOPE_SCHEMA_VERSION, EXTERNAL_INFERENCE_JOB_INPUT_SCHEMA_VERSION, LEGACY_EXTERNAL_INFERENCE_JOB_INPUT_SCHEMA_VERSION, EXTERNAL_INFERENCE_USAGE_SCHEMA_VERSION, EXTERNAL_INFERENCE_INPUT_HASH_DOMAIN, MAX_EXTERNAL_INFERENCE_STATUS_HOSTS, MAX_PROFILE_EXTERNAL_INFERENCE_FALLBACKS_PER_LANE, MAX_GENERATION, MAX_SAFE_INTEGER, MAX_PROMPT_BYTES, MAX_IMMUTABLE_JOB_INPUT_BYTES, MAX_CANDIDATE_PLAINTEXT_BYTES, MAX_CIPHERTEXT_CHARS, SHA256_INITIAL_STATE, SHA256_ROUND_CONSTANTS, rotateRight, sha256BytesHex, sha256Utf8Hex, computeImmutableJobInputSha256, identifierSchema, operationIdentifierSchema, sha256HexSchema, generationSchema, zeroBasedGenerationSchema, nonNegativeSafeIntegerSchema, positiveSafeIntegerSchema, sqlIntegerTokenCountSchema, timestampSchema, safeCodeSchema, processExitCodeSchema, externalInferenceAdapterIdSchema, reasoningEffortSchema, modelNameSchema, displayNameSchema, authenticatedAccountEmailSchema, protocolVersionSchema, base64UrlAlphabet, isCanonicalBase64Url, base64Url32BytesSchema, base64UrlNonceSchema, base64UrlCiphertextSchema, claimHandleSchema, boundedJsonTextSchema, boundedPromptTextSchema, laneSchema, botModeSchema, executionModeSchema, responseModeSchema, controlModeSchema, dispatchOutcomeSchema, responseOutcomeSchema, nativeModelControllerSchema, legacyExternalAgentModelControllerSchema, externalAgentModelControllerSchema, boundExternalAgentModelControllerSchema, externalAgentUnboundControllerSchema, externalAgentUnboundControllerV2Schema, orderedFallbackHostIdsSchema, externalInferenceFallbackHostIdsSchema, liveModelControllerSchema, snapshotModelControllerSchema, modelIdentityMappingSchema, advertisedModelSchema, hostAdvertisementSchema, envelopeAadSchema, validateEnvelopeAad, commonEnvelopeShape, sealedKeyWrapEnvelopeSchema, sealedInputEnvelopeSchema, sealedCandidateEnvelopeSchema, sealedEnvelopeSchema, screenerCandidateRuntimeBindingSchema, screenerClientLeaseBindingSchema, screenerRuntimeBindingSchema, serverRuntimeBindingSchema, clientRuntimeBindingSchema, runtimeBindingSchema, immutableJobInputSchema, canonicalizeJsonValue, serializeImmutableJobInput, reportedTokenUsageSchema, unavailableTokenUsageSchema, tokenUsageSchema, agentConnectRequestSchema, agentNextRequestSchema, agentHeartbeatRequestSchema, emptyAgentNextResultSchema, claimedAgentNextResultSchema, agentNextResultSchema, agentCompleteRequestSchema, agentFailRequestSchema, requestedModelSelectionSchema, completedModelProvenanceSchema, attemptModelProvenanceSchema, providerWeeklyQuotaReadSchema, hostHeartbeatRequestSchema, jobClaimRequestSchema, emptyJobClaimSchema, claimedJobSchema, jobClaimResultSchema, attemptStartRequestSchema, jobHeartbeatRequestSchema, continueHeartbeatDirectiveSchema, cancelHeartbeatDirectiveSchema, jobHeartbeatResultSchema, adapterOutcomeEvidenceSchema, completionBaseShape, validateCompletion, providerResponseCompletionSchema, decisionCandidateCompletionSchema, jobCompleteRequestSchema, codexProcessExitDiagnosticsSchema, jobFailRequestSchema, jobCancelRequestSchema, jobCancellationReceiptSchema, jobDeliveryRequestSchema, deliveryBaseShape, validateDeliveryCandidate, providerResponseDeliverySchema, decisionCandidateDeliverySchema, jobDeliveryResultSchema, jobConsumptionRequestSchema, jobConsumptionReceiptSchema, jobStateSchema, jobStatusReadSchema, hostStatusReadSchema, controllerBindingStatusReadSchema, queueStatusReadSchema, outcomeStatusReadSchema, externalInferenceVolumeWindowReadSchema, externalInferenceFailureCountReadSchema, externalInferenceHostDiagnosticsReadSchema, externalInferenceProfileActivityReadSchema, externalInferenceStatusReadSchema, nativeResearchEvidenceSourceSchema, externalAgentResearchEvidenceSourceSchema, researchEvidenceSourceSchema, reportedResearchTokenUsageSchema, unavailableResearchTokenUsageSchema, researchTokenUsageSchema, externalInferenceProductLineageBaseShape, traderExternalInferenceProductLineageSchema, decisionChatExternalInferenceProductLineageSchema, screenerExternalInferenceProductLineageSchema, externalInferenceProductLineageSchema, normalProductLinkageSchema, evidenceMaterializationMarkerSchema, deliveredExternalAgentSourceIdentitySchema, deliveredRequestEvidenceSchema, researchEvidenceBaseShape, researchEvidenceBaseSchema, validateExactUtf8, validateResearchEvidence, providerResponseResearchEvidenceSchema, decisionCandidateResearchEvidenceSchema, researchEvidenceSchema;
14445
+ var EXTERNAL_INFERENCE_CONTRACT_VERSION, EXTERNAL_INFERENCE_CONTROLLER_SCHEMA_VERSION, EXTERNAL_INFERENCE_CONTROLLER_SCHEMA_VERSION_V2, EXTERNAL_INFERENCE_ADVERTISEMENT_SCHEMA_VERSION, EXTERNAL_INFERENCE_ENVELOPE_SCHEMA_VERSION, EXTERNAL_INFERENCE_JOB_INPUT_SCHEMA_VERSION, LEGACY_EXTERNAL_INFERENCE_JOB_INPUT_SCHEMA_VERSION, EXTERNAL_INFERENCE_USAGE_SCHEMA_VERSION, EXTERNAL_INFERENCE_INPUT_HASH_DOMAIN, MAX_EXTERNAL_INFERENCE_STATUS_HOSTS, MAX_PROFILE_EXTERNAL_INFERENCE_FALLBACKS_PER_LANE, MAX_GENERATION, MAX_SAFE_INTEGER, MAX_PROMPT_BYTES, MAX_IMMUTABLE_JOB_INPUT_BYTES, MAX_CANDIDATE_PLAINTEXT_BYTES, MAX_CIPHERTEXT_CHARS, SHA256_INITIAL_STATE, SHA256_ROUND_CONSTANTS, rotateRight, sha256BytesHex, sha256Utf8Hex, computeImmutableJobInputSha256, identifierSchema, operationIdentifierSchema, sha256HexSchema, generationSchema, zeroBasedGenerationSchema, nonNegativeSafeIntegerSchema, positiveSafeIntegerSchema, sqlIntegerTokenCountSchema, timestampSchema, safeCodeSchema, processExitCodeSchema, externalInferenceAdapterIdSchema, reasoningEffortSchema, modelNameSchema, displayNameSchema, authenticatedAccountEmailSchema, protocolVersionSchema, base64UrlAlphabet, isCanonicalBase64Url, base64Url32BytesSchema, base64UrlNonceSchema, base64UrlCiphertextSchema, claimHandleSchema, boundedJsonTextSchema, boundedPromptTextSchema, laneSchema, botModeSchema, executionModeSchema, responseModeSchema, controlModeSchema, dispatchOutcomeSchema, responseOutcomeSchema, nativeModelControllerSchema, legacyExternalAgentModelControllerSchema, externalAgentModelControllerSchema, boundExternalAgentModelControllerSchema, externalAgentUnboundControllerSchema, externalAgentUnboundControllerV2Schema, orderedFallbackHostIdsSchema, externalInferenceFallbackHostIdsSchema, liveModelControllerSchema, snapshotModelControllerSchema, modelIdentityMappingSchema, advertisedModelSchema, hostAdvertisementSchema, envelopeAadSchema, validateEnvelopeAad, commonEnvelopeShape, sealedKeyWrapEnvelopeSchema, sealedInputEnvelopeSchema, sealedCandidateEnvelopeSchema, sealedEnvelopeSchema, screenerCandidateRuntimeBindingSchema, screenerClientLeaseBindingSchema, screenerRuntimeBindingSchema, serverRuntimeBindingSchema, clientRuntimeBindingSchema, runtimeBindingSchema, immutableJobInputSchema, canonicalizeJsonValue, serializeImmutableJobInput, reportedTokenUsageSchema, unavailableTokenUsageSchema, tokenUsageSchema, agentConnectRequestSchema, agentNextRequestSchema, agentHeartbeatRequestSchema, emptyAgentNextResultSchema, claimedAgentNextResultSchema, agentNextResultSchema, agentCompleteRequestSchema, agentFailRequestSchema, requestedModelSelectionSchema, completedModelProvenanceSchema, attemptModelProvenanceSchema, providerWeeklyQuotaReadSchema, hostHeartbeatRequestSchema, jobClaimRequestBaseShape, jobClaimRequestSchema, emptyJobClaimSchema, claimedJobSchema, claimedDispatchIntentSchema, batchedJobClaimSchema, timedBatchedJobClaimSchema, jobClaimResultSchema, attemptStartRequestSchema, jobHeartbeatRequestSchema, continueHeartbeatDirectiveSchema, cancelHeartbeatDirectiveSchema, jobHeartbeatResultSchema, adapterOutcomeEvidenceSchema, completionBaseShape, validateCompletion, providerResponseCompletionSchema, decisionCandidateCompletionSchema, jobCompleteRequestSchema, codexProcessExitDiagnosticsSchema, jobFailRequestSchema, jobCancelRequestSchema, jobCancellationReceiptSchema, jobDeliveryRequestSchema, deliveryBaseShape, validateDeliveryCandidate, providerResponseDeliverySchema, decisionCandidateDeliverySchema, jobDeliveryResultSchema, jobConsumptionRequestSchema, jobConsumptionReceiptSchema, jobStateSchema, jobStatusReadSchema, hostStatusReadSchema, controllerBindingStatusReadSchema, queueStatusReadSchema, outcomeStatusReadSchema, externalInferenceVolumeWindowReadSchema, externalInferenceFailureCountReadSchema, externalInferenceHostDiagnosticsReadSchema, externalInferenceProfileActivityReadSchema, externalInferenceStatusReadSchema, nativeResearchEvidenceSourceSchema, externalAgentResearchEvidenceSourceSchema, researchEvidenceSourceSchema, reportedResearchTokenUsageSchema, unavailableResearchTokenUsageSchema, researchTokenUsageSchema, externalInferenceProductLineageBaseShape, traderExternalInferenceProductLineageSchema, decisionChatExternalInferenceProductLineageSchema, screenerExternalInferenceProductLineageSchema, externalInferenceProductLineageSchema, normalProductLinkageSchema, evidenceMaterializationMarkerSchema, deliveredExternalAgentSourceIdentitySchema, deliveredRequestEvidenceSchema, researchEvidenceBaseShape, researchEvidenceBaseSchema, validateExactUtf8, validateResearchEvidence, providerResponseResearchEvidenceSchema, decisionCandidateResearchEvidenceSchema, researchEvidenceSchema;
14446
14446
  var init_external_inference_contract = __esm({
14447
14447
  "lib/external-inference-contract.ts"() {
14448
14448
  "use strict";
@@ -15363,8 +15363,7 @@ var init_external_inference_contract = __esm({
15363
15363
  provider_weekly_quota: providerWeeklyQuotaReadSchema.nullable().optional(),
15364
15364
  observed_at: timestampSchema
15365
15365
  });
15366
- jobClaimRequestSchema = external_exports.strictObject({
15367
- schema_version: external_exports.literal("external_inference_job_claim_v1"),
15366
+ jobClaimRequestBaseShape = {
15368
15367
  contract_version: external_exports.literal(EXTERNAL_INFERENCE_CONTRACT_VERSION),
15369
15368
  host_id: identifierSchema,
15370
15369
  host_generation: generationSchema,
@@ -15372,7 +15371,23 @@ var init_external_inference_contract = __esm({
15372
15371
  key_generation: generationSchema,
15373
15372
  claim_request_id: operationIdentifierSchema,
15374
15373
  requested_at: timestampSchema
15375
- });
15374
+ };
15375
+ jobClaimRequestSchema = external_exports.discriminatedUnion("schema_version", [
15376
+ external_exports.strictObject({
15377
+ schema_version: external_exports.literal("external_inference_job_claim_v1"),
15378
+ ...jobClaimRequestBaseShape
15379
+ }),
15380
+ external_exports.strictObject({
15381
+ schema_version: external_exports.literal("external_inference_job_claim_v2"),
15382
+ ...jobClaimRequestBaseShape,
15383
+ maximum_jobs: external_exports.number().int().min(1).max(32)
15384
+ }),
15385
+ external_exports.strictObject({
15386
+ schema_version: external_exports.literal("external_inference_job_claim_v3"),
15387
+ ...jobClaimRequestBaseShape,
15388
+ maximum_jobs: external_exports.number().int().min(1).max(32)
15389
+ })
15390
+ ]);
15376
15391
  emptyJobClaimSchema = external_exports.strictObject({
15377
15392
  schema_version: external_exports.literal("external_inference_job_claim_result_v1"),
15378
15393
  claim_state: external_exports.literal("empty"),
@@ -15415,9 +15430,32 @@ var init_external_inference_contract = __esm({
15415
15430
  context.addIssue({ code: "custom", message: "claim lease cannot exceed the immutable deadline", path: ["lease_expires_at"] });
15416
15431
  }
15417
15432
  });
15418
- jobClaimResultSchema = external_exports.discriminatedUnion("claim_state", [
15433
+ claimedDispatchIntentSchema = external_exports.strictObject({
15434
+ claim: claimedJobSchema,
15435
+ attempt_id: identifierSchema,
15436
+ started_at: timestampSchema,
15437
+ provider_dispatch_freshness_remaining_ms: nonNegativeSafeIntegerSchema
15438
+ });
15439
+ batchedJobClaimSchema = external_exports.strictObject({
15440
+ schema_version: external_exports.literal("external_inference_job_claim_result_v2"),
15441
+ claim_state: external_exports.literal("batch"),
15442
+ claim_request_id: operationIdentifierSchema,
15443
+ claims: external_exports.array(claimedDispatchIntentSchema).max(32),
15444
+ retry_after_ms: nonNegativeSafeIntegerSchema
15445
+ });
15446
+ timedBatchedJobClaimSchema = external_exports.strictObject({
15447
+ schema_version: external_exports.literal("external_inference_job_claim_result_v3"),
15448
+ claim_state: external_exports.literal("batch"),
15449
+ claim_request_id: operationIdentifierSchema,
15450
+ claims: external_exports.array(claimedDispatchIntentSchema).max(32),
15451
+ retry_after_ms: nonNegativeSafeIntegerSchema,
15452
+ server_processing_ms: nonNegativeSafeIntegerSchema
15453
+ });
15454
+ jobClaimResultSchema = external_exports.union([
15419
15455
  emptyJobClaimSchema,
15420
- claimedJobSchema
15456
+ claimedJobSchema,
15457
+ batchedJobClaimSchema,
15458
+ timedBatchedJobClaimSchema
15421
15459
  ]);
15422
15460
  attemptStartRequestSchema = external_exports.strictObject({
15423
15461
  schema_version: external_exports.literal("external_inference_attempt_start_v1"),
@@ -15501,6 +15539,8 @@ var init_external_inference_contract = __esm({
15501
15539
  outcome: adapterOutcomeEvidenceSchema,
15502
15540
  latency_ms: nonNegativeSafeIntegerSchema,
15503
15541
  time_to_first_token_ms: nonNegativeSafeIntegerSchema.nullable(),
15542
+ provider_dispatched_at: timestampSchema.optional(),
15543
+ adapter_result_ready_at: timestampSchema.optional(),
15504
15544
  provider_dispatch_freshness_remaining_ms: nonNegativeSafeIntegerSchema.nullable().optional(),
15505
15545
  finish_reason: safeCodeSchema.nullable(),
15506
15546
  refusal_status: external_exports.enum(["none", "refused", "blocked", "unknown"]),
@@ -15616,6 +15656,8 @@ var init_external_inference_contract = __esm({
15616
15656
  failure_category: safeCodeSchema,
15617
15657
  failure_code: safeCodeSchema,
15618
15658
  retryable: external_exports.boolean(),
15659
+ provider_dispatched_at: timestampSchema.optional(),
15660
+ adapter_result_ready_at: timestampSchema.optional(),
15619
15661
  provider_dispatch_freshness_remaining_ms: nonNegativeSafeIntegerSchema.nullable().optional(),
15620
15662
  process_exit: codexProcessExitDiagnosticsSchema.nullable().optional(),
15621
15663
  membership_disposition: external_exports.enum([
@@ -15651,6 +15693,9 @@ var init_external_inference_contract = __esm({
15651
15693
  if (value.usage?.availability === "reported") {
15652
15694
  context.addIssue({ code: "custom", message: "not-dispatched failures cannot report token usage", path: ["usage"] });
15653
15695
  }
15696
+ if (value.provider_dispatched_at !== void 0 || value.adapter_result_ready_at !== void 0) {
15697
+ context.addIssue({ code: "custom", message: "not-dispatched failures cannot report provider stages", path: ["provider_dispatched_at"] });
15698
+ }
15654
15699
  }
15655
15700
  });
15656
15701
  jobCancelRequestSchema = external_exports.strictObject({
@@ -18682,6 +18727,19 @@ var init_mcp_client = __esm({
18682
18727
  if (name === "inference.job.claim") {
18683
18728
  if (result2.claim_request_id !== request.claim_request_id) invalidBoundResult(name);
18684
18729
  if (result2.claim_state === "claimed" && (result2.host_id !== request.host_id || result2.host_generation !== request.host_generation || result2.advertisement_generation > request.advertisement_generation || result2.key_generation !== request.key_generation)) invalidBoundResult(name);
18730
+ if (result2.claim_state === "batch") {
18731
+ if (request.schema_version !== "external_inference_job_claim_v2" && request.schema_version !== "external_inference_job_claim_v3" || result2.schema_version !== (request.schema_version === "external_inference_job_claim_v3" ? "external_inference_job_claim_result_v3" : "external_inference_job_claim_result_v2") || result2.claims.length > request.maximum_jobs) {
18732
+ invalidBoundResult(name);
18733
+ }
18734
+ const jobIds = /* @__PURE__ */ new Set();
18735
+ const attemptIds = /* @__PURE__ */ new Set();
18736
+ for (const item of result2.claims) {
18737
+ const claim = item.claim;
18738
+ if (claim.host_id !== request.host_id || claim.host_generation !== request.host_generation || claim.advertisement_generation > request.advertisement_generation || claim.key_generation !== request.key_generation || jobIds.has(claim.job_id) || attemptIds.has(item.attempt_id)) invalidBoundResult(name);
18739
+ jobIds.add(claim.job_id);
18740
+ attemptIds.add(item.attempt_id);
18741
+ }
18742
+ }
18685
18743
  return;
18686
18744
  }
18687
18745
  if (name === "inference.job.start") {
@@ -32501,7 +32559,7 @@ function createDefaultInferenceHostRunnerDependencies(options) {
32501
32559
  envelopePublicKey: options.envelopePublicKey
32502
32560
  };
32503
32561
  }
32504
- var import_ajv, RUNTIME_RECEIPT_SCHEMA_VERSION, ATTEMPT_RECEIPT_SCHEMA_VERSION, DEFAULT_ADVERTISEMENT_TTL_MS, DEFAULT_ADVERTISEMENT_REFRESH_LEAD_MS, DEFAULT_HOST_HEARTBEAT_MS, DEFAULT_PROVIDER_RATE_LIMIT_REFRESH_MS, DEFAULT_ATTEMPT_HEARTBEAT_MS, DEFAULT_DRAIN_TIMEOUT_MS, DEFAULT_REMOTE_RETRY_LIMIT, MIN_SLEEP_MS, MIN_HOST_HEARTBEAT_GAP_DIAGNOSTIC_MS, HOST_HEARTBEAT_GAP_DIAGNOSTIC_FACTOR, DEFAULT_CODEX_ACCOUNT_COOLDOWN_MS, DEFAULT_AGENT_RATE_LIMIT_COOLDOWN_MS, DEFAULT_AGENT_QUOTA_COOLDOWN_MS, DEFAULT_AGENT_TRANSIENT_COOLDOWN_MS, MIN_CLAIM_START_WINDOW_MS, MAX_ATTEMPT_START_RETRY_DELAY_MS, UNBOUNDED_AVAILABLE_SLOTS, buildInferenceAdvertisedModels, summarizeInferenceHostRuntimeRecovery, FileInferenceHostRuntimeReceiptStore, InferenceHostRecoveryRequiredError, InferenceHostRunnerError, defaultSleep, abortError, settlesWithin, defaultRegisterSignalHandlers, safeInteger, exactObjectKeys, validIso, validateAttemptReceipt, validateRuntimeReceipt, sha256, stableOperationId, buildAttemptStartRequest, isoAt, providerWeeklyQuotaFromRateLimits, finitePositiveOption, validateRunnerOptions, assertLocalCredentialIdentity, retryableRemoteError, remoteRetryAfterMs, controlPlaneFatal, defaultValidateOutput, objectRecord, positiveUtf8ByteLimit, assertCompilableOutputSchema, parseOutputContract, serverProviderDispatchNotAfterMs, membershipFailureDisposition, safeFailureCode, publicServerFailureCode, attemptStartRetryFallbackMs, exactJson2, runnerIdentityMismatch, assertAdvertisementResult, assertHostHeartbeatResult, assertClaimResult, assertStartResult, assertJobHeartbeatResult, assertTerminalResult, isDefinitiveCompletionEvidenceExpiry, classifyFailure, ambiguousHeartbeatTransport, reportedTokenUsage, reportedUsage, InferenceHostRunner, createInferenceAgentControlClient, INFERENCE_AGENT_SYSTEM_PROMPT, INFERENCE_AGENT_WAKE_SCHEMA, parseInferenceAgentWake, InferenceAgentRuntime;
32562
+ var import_ajv, RUNTIME_RECEIPT_SCHEMA_VERSION, ATTEMPT_RECEIPT_SCHEMA_VERSION, CLAIM_DISPATCH_BATCH_SIZE, DEFAULT_ADVERTISEMENT_TTL_MS, DEFAULT_ADVERTISEMENT_REFRESH_LEAD_MS, DEFAULT_HOST_HEARTBEAT_MS, DEFAULT_PROVIDER_RATE_LIMIT_REFRESH_MS, DEFAULT_ATTEMPT_HEARTBEAT_MS, DEFAULT_DRAIN_TIMEOUT_MS, DEFAULT_REMOTE_RETRY_LIMIT, MIN_SLEEP_MS, MIN_HOST_HEARTBEAT_GAP_DIAGNOSTIC_MS, HOST_HEARTBEAT_GAP_DIAGNOSTIC_FACTOR, DEFAULT_CODEX_ACCOUNT_COOLDOWN_MS, DEFAULT_AGENT_RATE_LIMIT_COOLDOWN_MS, DEFAULT_AGENT_QUOTA_COOLDOWN_MS, DEFAULT_AGENT_TRANSIENT_COOLDOWN_MS, MIN_CLAIM_START_WINDOW_MS, MAX_ATTEMPT_START_RETRY_DELAY_MS, UNBOUNDED_AVAILABLE_SLOTS, buildInferenceAdvertisedModels, summarizeInferenceHostRuntimeRecovery, FileInferenceHostRuntimeReceiptStore, InferenceHostRecoveryRequiredError, InferenceHostRunnerError, defaultSleep, abortError, settlesWithin, defaultRegisterSignalHandlers, safeInteger, exactObjectKeys, validIso, validateAttemptReceipt, validateRuntimeReceipt, sha256, stableOperationId, buildAttemptStartRequest, isoAt, providerWeeklyQuotaFromRateLimits, finitePositiveOption, validateRunnerOptions, assertLocalCredentialIdentity, retryableRemoteError, remoteRetryAfterMs, controlPlaneFatal, defaultValidateOutput, objectRecord, positiveUtf8ByteLimit, assertCompilableOutputSchema, parseOutputContract, serverProviderDispatchNotAfterMs, membershipFailureDisposition, safeFailureCode, publicServerFailureCode, attemptStartRetryFallbackMs, exactJson2, runnerIdentityMismatch, assertAdvertisementResult, assertHostHeartbeatResult, assertClaimResult, assertStartResult, assertJobHeartbeatResult, assertTerminalResult, isDefinitiveCompletionEvidenceExpiry, classifyFailure, ambiguousHeartbeatTransport, reportedTokenUsage, reportedUsage, InferenceHostRunner, createInferenceAgentControlClient, INFERENCE_AGENT_SYSTEM_PROMPT, INFERENCE_AGENT_WAKE_SCHEMA, parseInferenceAgentWake, InferenceAgentRuntime;
32505
32563
  var init_runner = __esm({
32506
32564
  "lib/inference-host/runner.ts"() {
32507
32565
  "use strict";
@@ -32516,6 +32574,7 @@ var init_runner = __esm({
32516
32574
  init_oauth();
32517
32575
  RUNTIME_RECEIPT_SCHEMA_VERSION = "vtx_inference_host_runtime_v1";
32518
32576
  ATTEMPT_RECEIPT_SCHEMA_VERSION = "vtx_inference_attempt_receipt_v1";
32577
+ CLAIM_DISPATCH_BATCH_SIZE = 16;
32519
32578
  DEFAULT_ADVERTISEMENT_TTL_MS = 12e4;
32520
32579
  DEFAULT_ADVERTISEMENT_REFRESH_LEAD_MS = 3e4;
32521
32580
  DEFAULT_HOST_HEARTBEAT_MS = 3e3;
@@ -33297,6 +33356,7 @@ var init_runner = __esm({
33297
33356
  instance_name: this.options.instanceName ?? "default",
33298
33357
  host_id: localState.host_id,
33299
33358
  display_name: this.options.displayName,
33359
+ host_runtime_version: settings.hostRuntimeVersion,
33300
33360
  ...fields
33301
33361
  });
33302
33362
  } catch {
@@ -33800,28 +33860,47 @@ var init_runner = __esm({
33800
33860
  let nextClaimAt = Math.max(now(), providerRetryAtMs ?? 0);
33801
33861
  let pendingClaimPromotions = 0;
33802
33862
  let onceClaimed = false;
33863
+ let batchClaimVersion = 3;
33803
33864
  const preparePendingClaim = (current) => {
33804
33865
  if (current.pending_claim_request) return current;
33805
33866
  const claimSequence = current.claim_sequence + 1;
33806
33867
  const requestedAt = now();
33868
+ const claimRequestBase = {
33869
+ contract_version: EXTERNAL_INFERENCE_CONTRACT_VERSION,
33870
+ host_id: localState.host_id,
33871
+ host_generation: localState.host_generation,
33872
+ advertisement_generation: current.advertisement_generation,
33873
+ key_generation: localState.key_generation,
33874
+ claim_request_id: stableOperationId("claim", [
33875
+ localState.host_id,
33876
+ localState.host_generation,
33877
+ current.advertisement_generation,
33878
+ claimSequence
33879
+ ]),
33880
+ requested_at: isoAt(requestedAt)
33881
+ };
33882
+ const pendingClaimRequest = batchClaimVersion === 3 ? {
33883
+ schema_version: "external_inference_job_claim_v3",
33884
+ ...claimRequestBase,
33885
+ maximum_jobs: Math.min(
33886
+ this.options.once ? 1 : CLAIM_DISPATCH_BATCH_SIZE,
33887
+ settings.maxConcurrency === null ? CLAIM_DISPATCH_BATCH_SIZE : Math.max(1, settings.maxConcurrency - active.size)
33888
+ )
33889
+ } : batchClaimVersion === 2 ? {
33890
+ schema_version: "external_inference_job_claim_v2",
33891
+ ...claimRequestBase,
33892
+ maximum_jobs: Math.min(
33893
+ this.options.once ? 1 : CLAIM_DISPATCH_BATCH_SIZE,
33894
+ settings.maxConcurrency === null ? CLAIM_DISPATCH_BATCH_SIZE : Math.max(1, settings.maxConcurrency - active.size)
33895
+ )
33896
+ } : {
33897
+ schema_version: "external_inference_job_claim_v1",
33898
+ ...claimRequestBase
33899
+ };
33807
33900
  return {
33808
33901
  ...current,
33809
33902
  claim_sequence: claimSequence,
33810
- pending_claim_request: {
33811
- schema_version: "external_inference_job_claim_v1",
33812
- contract_version: EXTERNAL_INFERENCE_CONTRACT_VERSION,
33813
- host_id: localState.host_id,
33814
- host_generation: localState.host_generation,
33815
- advertisement_generation: current.advertisement_generation,
33816
- key_generation: localState.key_generation,
33817
- claim_request_id: stableOperationId("claim", [
33818
- localState.host_id,
33819
- localState.host_generation,
33820
- current.advertisement_generation,
33821
- claimSequence
33822
- ]),
33823
- requested_at: isoAt(requestedAt)
33824
- },
33903
+ pending_claim_request: pendingClaimRequest,
33825
33904
  updated_at: isoAt(requestedAt)
33826
33905
  };
33827
33906
  };
@@ -33940,8 +34019,8 @@ var init_runner = __esm({
33940
34019
  });
33941
34020
  const recoveryQueue = [];
33942
34021
  const attemptStartRetryCounts = /* @__PURE__ */ new Map();
33943
- const launchClaim = (claim, recovery, claimRequest) => {
33944
- if (!recovery) {
34022
+ const launchClaim = (claim, recovery, claimRequest, prestarted) => {
34023
+ if (!recovery || prestarted) {
33945
34024
  claimed += 1;
33946
34025
  onceClaimed = true;
33947
34026
  }
@@ -34040,6 +34119,7 @@ var init_runner = __esm({
34040
34119
  },
34041
34120
  resumeReceipt: recovery,
34042
34121
  claimRequest,
34122
+ prestarted,
34043
34123
  onClaimPersisted: settleClaimPromotion,
34044
34124
  rolloverClaimRequest: (current) => {
34045
34125
  if (drainRequested || this.options.once || settings.maxConcurrency !== null && active.size + 1 >= settings.maxConcurrency) return current;
@@ -34243,6 +34323,7 @@ var init_runner = __esm({
34243
34323
  }
34244
34324
  const request = receipt.pending_claim_request;
34245
34325
  let claim;
34326
+ const claimCallStartedAtMs = now();
34246
34327
  try {
34247
34328
  claim = await mcp.callTool(
34248
34329
  "inference.job.claim",
@@ -34251,7 +34332,48 @@ var init_runner = __esm({
34251
34332
  );
34252
34333
  assertClaimResult(request, claim);
34253
34334
  } catch (error48) {
34254
- if (!this.options.signal?.aborted && controlPlaneFatal(error48)) {
34335
+ if (!this.options.signal?.aborted && request.schema_version === "external_inference_job_claim_v3" && error48 instanceof ExternalInferenceMcpError && error48.serverFailureCode === "schema_validation") {
34336
+ batchClaimVersion = 2;
34337
+ await mutateReceipt((current) => ({
34338
+ ...current,
34339
+ pending_claim_request: current.pending_claim_request?.claim_request_id === request.claim_request_id ? {
34340
+ schema_version: "external_inference_job_claim_v2",
34341
+ contract_version: request.contract_version,
34342
+ host_id: request.host_id,
34343
+ host_generation: request.host_generation,
34344
+ advertisement_generation: request.advertisement_generation,
34345
+ key_generation: request.key_generation,
34346
+ claim_request_id: stableOperationId("claim-fallback-v2", [
34347
+ request.claim_request_id
34348
+ ]),
34349
+ requested_at: isoAt(now()),
34350
+ maximum_jobs: request.maximum_jobs
34351
+ } : current.pending_claim_request,
34352
+ updated_at: isoAt(now())
34353
+ }));
34354
+ nextClaimAt = now();
34355
+ continue;
34356
+ } else if (!this.options.signal?.aborted && request.schema_version === "external_inference_job_claim_v2" && error48 instanceof ExternalInferenceMcpError && error48.serverFailureCode === "schema_validation") {
34357
+ batchClaimVersion = 1;
34358
+ await mutateReceipt((current) => ({
34359
+ ...current,
34360
+ pending_claim_request: current.pending_claim_request?.claim_request_id === request.claim_request_id ? {
34361
+ schema_version: "external_inference_job_claim_v1",
34362
+ contract_version: request.contract_version,
34363
+ host_id: request.host_id,
34364
+ host_generation: request.host_generation,
34365
+ advertisement_generation: request.advertisement_generation,
34366
+ key_generation: request.key_generation,
34367
+ claim_request_id: stableOperationId("claim-fallback-v1", [
34368
+ request.claim_request_id
34369
+ ]),
34370
+ requested_at: isoAt(now())
34371
+ } : current.pending_claim_request,
34372
+ updated_at: isoAt(now())
34373
+ }));
34374
+ nextClaimAt = now();
34375
+ continue;
34376
+ } else if (!this.options.signal?.aborted && controlPlaneFatal(error48)) {
34255
34377
  requestDrain("authority_lost");
34256
34378
  } else if (!this.options.signal?.aborted && error48 instanceof ExternalInferenceMcpError && error48.code === "claim_replay_obsolete") {
34257
34379
  await mutateReceipt((current) => ({
@@ -34283,6 +34405,109 @@ var init_runner = __esm({
34283
34405
  }
34284
34406
  break;
34285
34407
  }
34408
+ const claimResponseReceivedAtMs = now();
34409
+ const claimCallRoundTripMs = Math.max(
34410
+ 0,
34411
+ claimResponseReceivedAtMs - claimCallStartedAtMs
34412
+ );
34413
+ if (claim.claim_state === "batch") {
34414
+ if (request.schema_version === "external_inference_job_claim_v1") {
34415
+ runnerIdentityMismatch("Batched job claim");
34416
+ }
34417
+ const maximumJobs = "maximum_jobs" in request ? request.maximum_jobs : runnerIdentityMismatch("Batched job claim");
34418
+ const expectedBatchResultVersion = request.schema_version === "external_inference_job_claim_v3" ? "external_inference_job_claim_result_v3" : "external_inference_job_claim_result_v2";
34419
+ if (claim.schema_version !== expectedBatchResultVersion || claim.claims.length > maximumJobs) runnerIdentityMismatch("Batched job claim");
34420
+ const claimTransportResidualMs = Math.max(
34421
+ 0,
34422
+ claimCallRoundTripMs - (claim.schema_version === "external_inference_job_claim_result_v3" ? claim.server_processing_ms : 0)
34423
+ );
34424
+ if (claim.claims.length === 0) {
34425
+ await mutateReceipt((current) => ({
34426
+ ...current,
34427
+ pending_claim_request: current.pending_claim_request?.claim_request_id === request.claim_request_id ? null : current.pending_claim_request,
34428
+ updated_at: isoAt(now())
34429
+ }));
34430
+ nextClaimAt = now() + Math.max(MIN_SLEEP_MS, claim.retry_after_ms);
34431
+ if (this.options.once) requestDrain("once_empty");
34432
+ break;
34433
+ }
34434
+ const decryptClaim = this.dependencies.decryptClaim ?? decryptExternalInferenceClaim;
34435
+ const prepared = claim.claims.map((item) => {
34436
+ const claimedJob = item.claim;
34437
+ if (claimedJob.host_id !== localState.host_id || claimedJob.host_generation !== localState.host_generation || claimedJob.advertisement_generation > receipt.advertisement_generation || claimedJob.key_generation !== localState.key_generation) runnerIdentityMismatch("Batched job claim");
34438
+ const { jobInput } = decryptClaim(
34439
+ credential.x25519_private_key,
34440
+ claimedJob
34441
+ );
34442
+ const expectedAttemptId = stableOperationId("attempt", [
34443
+ claimedJob.host_id,
34444
+ claimedJob.job_id,
34445
+ claimedJob.claim_generation,
34446
+ claimedJob.attempt_index,
34447
+ claimedJob.input_sha256
34448
+ ]);
34449
+ if (item.attempt_id !== expectedAttemptId) {
34450
+ runnerIdentityMismatch("Batched attempt");
34451
+ }
34452
+ const startRequest = buildAttemptStartRequest(
34453
+ claimedJob,
34454
+ item.attempt_id,
34455
+ item.started_at
34456
+ );
34457
+ return validateAttemptReceipt({
34458
+ schema_version: ATTEMPT_RECEIPT_SCHEMA_VERSION,
34459
+ attempt_id: item.attempt_id,
34460
+ job_id: claimedJob.job_id,
34461
+ profile_id: jobInput.profile_id,
34462
+ input_sha256: jobInput.input_sha256,
34463
+ claim_generation: claimedJob.claim_generation,
34464
+ attempt_index: claimedJob.attempt_index,
34465
+ phase: "claimed",
34466
+ dispatch_outcome: "not_dispatched",
34467
+ terminal_operation_id: null,
34468
+ job_heartbeat_sequence: 0,
34469
+ claim: claimedJob,
34470
+ start_request: startRequest,
34471
+ terminal_request: null,
34472
+ updated_at: isoAt(now())
34473
+ });
34474
+ });
34475
+ const shouldRollover = !this.options.once && (settings.maxConcurrency === null || active.size + prepared.length < settings.maxConcurrency);
34476
+ await mutateReceipt((current) => {
34477
+ if (current.pending_claim_request?.claim_request_id !== request.claim_request_id) runnerIdentityMismatch("Batched claim receipt");
34478
+ const attempts = { ...current.attempts };
34479
+ for (const attempt of prepared) {
34480
+ if (attempts[attempt.attempt_id]) {
34481
+ runnerIdentityMismatch("Batched attempt receipt");
34482
+ }
34483
+ attempts[attempt.attempt_id] = attempt;
34484
+ }
34485
+ const promoted = {
34486
+ ...current,
34487
+ pending_claim_request: null,
34488
+ attempts,
34489
+ updated_at: isoAt(now())
34490
+ };
34491
+ return shouldRollover ? preparePendingClaim(promoted) : promoted;
34492
+ });
34493
+ for (let index = 0; index < prepared.length; index += 1) {
34494
+ const item = claim.claims[index];
34495
+ launchClaim(item.claim, prepared[index], void 0, {
34496
+ result: {
34497
+ job_id: item.claim.job_id,
34498
+ attempt_id: item.attempt_id,
34499
+ attempt_index: item.claim.attempt_index,
34500
+ state: "dispatch_intent",
34501
+ provider_dispatch_freshness_remaining_ms: item.provider_dispatch_freshness_remaining_ms
34502
+ },
34503
+ roundTripMs: claimTransportResidualMs,
34504
+ claimResponseReceivedAtMs
34505
+ });
34506
+ }
34507
+ if (this.options.once) requestDrain("once_complete");
34508
+ nextClaimAt = claim.claims.length >= (request.schema_version !== "external_inference_job_claim_v1" ? request.maximum_jobs : CLAIM_DISPATCH_BATCH_SIZE) ? now() : now() + Math.max(MIN_SLEEP_MS, claim.retry_after_ms);
34509
+ continue;
34510
+ }
34286
34511
  if (claim.claim_state === "empty") {
34287
34512
  await mutateReceipt((current) => ({
34288
34513
  ...current,
@@ -34416,6 +34641,8 @@ var init_runner = __esm({
34416
34641
  let providerDispatchNotAfterMs = serverProviderDispatchDeadlineMs === void 0 ? void 0 : now() - 1;
34417
34642
  let serverReportedFreshnessRemainingMs = null;
34418
34643
  let startRoundTripMs = 0;
34644
+ let providerDispatchedAt = null;
34645
+ let adapterResultReadyAt = null;
34419
34646
  let providerDispatchFreshnessRemainingMs = null;
34420
34647
  const startRequest = options.resumeReceipt?.start_request ?? buildAttemptStartRequest(claim, attemptId, isoAt(now()));
34421
34648
  let attemptReceipt = options.resumeReceipt ? validateAttemptReceipt(options.resumeReceipt) : {
@@ -34526,69 +34753,75 @@ var init_runner = __esm({
34526
34753
  let startResult;
34527
34754
  const startCallStartedAtMs = now();
34528
34755
  let startCallCompletedAtMs = startCallStartedAtMs;
34529
- const claimPromotionPromise = options.resumeReceipt ? Promise.resolve() : persistAttempt({ phase: "claimed" }, true);
34530
- const startCallPromise = retryExact(() => mcp.callTool(
34531
- "inference.job.start",
34532
- startRequest,
34533
- { signal, deadlineAtMs: attemptDeadlineAtMs }
34534
- ), { signal, deadlineAtMs: attemptDeadlineAtMs }).then((result2) => {
34756
+ if (options.prestarted) {
34757
+ startResult = options.prestarted.result;
34535
34758
  startCallCompletedAtMs = now();
34536
- return result2;
34537
- });
34538
- const [startOutcome, claimPromotionOutcome] = await Promise.allSettled([
34539
- startCallPromise,
34540
- claimPromotionPromise
34541
- ]);
34542
- if (claimPromotionOutcome.status === "rejected") {
34543
- throw claimPromotionOutcome.reason;
34544
- }
34545
- if (startOutcome.status === "rejected") {
34546
- const error48 = startOutcome.reason;
34547
- if (error48 instanceof ExternalInferenceMcpError && error48.serverFailureCode === "server_account_context_expired_before_provider_dispatch") {
34548
- await removeAttempt();
34549
- options.onAttemptOutcome?.({
34550
- outcome: "freshness_rejected_before_provider_dispatch",
34551
- failure_category: "freshness",
34552
- failure_code: error48.serverFailureCode,
34553
- dispatch_outcome: "not_dispatched"
34759
+ startRoundTripMs = Math.max(0, options.prestarted.roundTripMs);
34760
+ } else {
34761
+ const claimPromotionPromise = options.resumeReceipt ? Promise.resolve() : persistAttempt({ phase: "claimed" }, true);
34762
+ const startCallPromise = retryExact(() => mcp.callTool(
34763
+ "inference.job.start",
34764
+ startRequest,
34765
+ { signal, deadlineAtMs: attemptDeadlineAtMs }
34766
+ ), { signal, deadlineAtMs: attemptDeadlineAtMs }).then((result2) => {
34767
+ startCallCompletedAtMs = now();
34768
+ return result2;
34769
+ });
34770
+ const [startOutcome, claimPromotionOutcome] = await Promise.allSettled([
34771
+ startCallPromise,
34772
+ claimPromotionPromise
34773
+ ]);
34774
+ if (claimPromotionOutcome.status === "rejected") {
34775
+ throw claimPromotionOutcome.reason;
34776
+ }
34777
+ if (startOutcome.status === "rejected") {
34778
+ const error48 = startOutcome.reason;
34779
+ if (error48 instanceof ExternalInferenceMcpError && error48.serverFailureCode === "server_account_context_expired_before_provider_dispatch") {
34780
+ await removeAttempt();
34781
+ options.onAttemptOutcome?.({
34782
+ outcome: "freshness_rejected_before_provider_dispatch",
34783
+ failure_category: "freshness",
34784
+ failure_code: error48.serverFailureCode,
34785
+ dispatch_outcome: "not_dispatched"
34786
+ });
34787
+ return "failed";
34788
+ }
34789
+ if (attemptDeadlineAtMs <= now() + MIN_CLAIM_START_WINDOW_MS) {
34790
+ await removeAttempt();
34791
+ return "failed";
34792
+ }
34793
+ if (signal.aborted) throw error48;
34794
+ if (controlPlaneFatal(error48)) throw error48;
34795
+ const remainingMs = Math.max(
34796
+ MIN_SLEEP_MS,
34797
+ attemptDeadlineAtMs - now() - MIN_CLAIM_START_WINDOW_MS
34798
+ );
34799
+ const retryCount = Math.min(
34800
+ Math.max(1, options.startRetryCount),
34801
+ Number.MAX_SAFE_INTEGER
34802
+ );
34803
+ const retryDelayMs = Math.min(
34804
+ remoteRetryAfterMs(error48, attemptStartRetryFallbackMs(retryCount)),
34805
+ remainingMs
34806
+ );
34807
+ const rawErrorCode = error48 && typeof error48 === "object" && "code" in error48 ? String(error48.code) : "start_acknowledgement_failed";
34808
+ options.onAttemptStartRetry?.({
34809
+ failure_stage: "job_start_acknowledgement",
34810
+ error_code: safeFailureCode(rawErrorCode, "start_acknowledgement_failed"),
34811
+ http_status_code: error48 instanceof ExternalInferenceMcpError ? error48.httpStatusCode : null,
34812
+ retryable: retryableRemoteError(error48),
34813
+ definitively_not_applied: Boolean(
34814
+ error48 && typeof error48 === "object" && "definitivelyNotApplied" in error48 && error48.definitivelyNotApplied === true
34815
+ ),
34816
+ retry_after_ms: error48 instanceof ExternalInferenceMcpError ? error48.retryAfterMs : null,
34817
+ retry_count: retryCount,
34818
+ next_delay_ms: retryDelayMs
34554
34819
  });
34555
- return "failed";
34820
+ await options.sleep(retryDelayMs, signal);
34821
+ return "retry_claimed";
34556
34822
  }
34557
- if (attemptDeadlineAtMs <= now() + MIN_CLAIM_START_WINDOW_MS) {
34558
- await removeAttempt();
34559
- return "failed";
34560
- }
34561
- if (signal.aborted) throw error48;
34562
- if (controlPlaneFatal(error48)) throw error48;
34563
- const remainingMs = Math.max(
34564
- MIN_SLEEP_MS,
34565
- attemptDeadlineAtMs - now() - MIN_CLAIM_START_WINDOW_MS
34566
- );
34567
- const retryCount = Math.min(
34568
- Math.max(1, options.startRetryCount),
34569
- Number.MAX_SAFE_INTEGER
34570
- );
34571
- const retryDelayMs = Math.min(
34572
- remoteRetryAfterMs(error48, attemptStartRetryFallbackMs(retryCount)),
34573
- remainingMs
34574
- );
34575
- const rawErrorCode = error48 && typeof error48 === "object" && "code" in error48 ? String(error48.code) : "start_acknowledgement_failed";
34576
- options.onAttemptStartRetry?.({
34577
- failure_stage: "job_start_acknowledgement",
34578
- error_code: safeFailureCode(rawErrorCode, "start_acknowledgement_failed"),
34579
- http_status_code: error48 instanceof ExternalInferenceMcpError ? error48.httpStatusCode : null,
34580
- retryable: retryableRemoteError(error48),
34581
- definitively_not_applied: Boolean(
34582
- error48 && typeof error48 === "object" && "definitivelyNotApplied" in error48 && error48.definitivelyNotApplied === true
34583
- ),
34584
- retry_after_ms: error48 instanceof ExternalInferenceMcpError ? error48.retryAfterMs : null,
34585
- retry_count: retryCount,
34586
- next_delay_ms: retryDelayMs
34587
- });
34588
- await options.sleep(retryDelayMs, signal);
34589
- return "retry_claimed";
34823
+ startResult = startOutcome.value;
34590
34824
  }
34591
- startResult = startOutcome.value;
34592
34825
  assertStartResult(startRequest, startResult);
34593
34826
  if (serverProviderDispatchDeadlineMs !== void 0) {
34594
34827
  const serverRemaining = startResult.provider_dispatch_freshness_remaining_ms;
@@ -34598,13 +34831,16 @@ var init_runner = __esm({
34598
34831
  "The Server provider-dispatch freshness receipt is unavailable."
34599
34832
  );
34600
34833
  }
34601
- startRoundTripMs = Math.max(0, startCallCompletedAtMs - startCallStartedAtMs);
34834
+ if (!options.prestarted) {
34835
+ startRoundTripMs = Math.max(0, startCallCompletedAtMs - startCallStartedAtMs);
34836
+ }
34602
34837
  serverReportedFreshnessRemainingMs = Number(serverRemaining);
34603
34838
  const conservativeRemainingMs = Math.max(
34604
34839
  0,
34605
34840
  serverReportedFreshnessRemainingMs - startRoundTripMs
34606
34841
  );
34607
- providerDispatchNotAfterMs = startCallCompletedAtMs + conservativeRemainingMs;
34842
+ const freshnessAnchorAtMs = options.prestarted ? options.prestarted.claimResponseReceivedAtMs : startCallCompletedAtMs;
34843
+ providerDispatchNotAfterMs = freshnessAnchorAtMs + conservativeRemainingMs;
34608
34844
  }
34609
34845
  }
34610
34846
  if (attemptReceipt.phase !== "dispatched") {
@@ -34705,22 +34941,24 @@ var init_runner = __esm({
34705
34941
  requestedReasoningEffort: jobInput.requested_reasoning_effort,
34706
34942
  deadlineAtMs: Date.parse(jobInput.deadline_at),
34707
34943
  ...providerDispatchNotAfterMs === void 0 ? {} : { providerDispatchNotAfterMs },
34708
- ...providerDispatchNotAfterMs === void 0 ? {} : {
34709
- onProviderDispatch: () => {
34710
- providerDispatchFreshnessRemainingMs = Math.max(
34711
- 0,
34712
- providerDispatchNotAfterMs - now()
34713
- );
34714
- options.onProviderDispatch?.({
34715
- cycle_id: jobInput.runtime_binding?.cycle_id ?? "unavailable",
34716
- freshness_remaining_ms: providerDispatchFreshnessRemainingMs,
34717
- server_reported_remaining_ms: serverReportedFreshnessRemainingMs ?? 0,
34718
- start_round_trip_ms: startRoundTripMs
34719
- });
34720
- }
34944
+ onProviderDispatch: () => {
34945
+ const dispatchedAtMs = now();
34946
+ providerDispatchedAt ??= isoAt(dispatchedAtMs);
34947
+ if (providerDispatchNotAfterMs === void 0) return;
34948
+ providerDispatchFreshnessRemainingMs = Math.max(
34949
+ 0,
34950
+ providerDispatchNotAfterMs - dispatchedAtMs
34951
+ );
34952
+ options.onProviderDispatch?.({
34953
+ cycle_id: jobInput.runtime_binding?.cycle_id ?? "unavailable",
34954
+ freshness_remaining_ms: providerDispatchFreshnessRemainingMs,
34955
+ server_reported_remaining_ms: serverReportedFreshnessRemainingMs ?? 0,
34956
+ start_round_trip_ms: startRoundTripMs
34957
+ });
34721
34958
  },
34722
34959
  signal: attemptAbort.signal
34723
34960
  });
34961
+ adapterResultReadyAt = isoAt(now());
34724
34962
  await persistAttempt({
34725
34963
  phase: "dispatched",
34726
34964
  dispatch_outcome: "confirmed_dispatched"
@@ -34827,6 +35065,8 @@ var init_runner = __esm({
34827
35065
  },
34828
35066
  latency_ms: adapterResult.latencyMs,
34829
35067
  time_to_first_token_ms: adapterResult.timeToFirstTokenMs,
35068
+ ...providerDispatchedAt === null ? {} : { provider_dispatched_at: providerDispatchedAt },
35069
+ ...adapterResultReadyAt === null ? {} : { adapter_result_ready_at: adapterResultReadyAt },
34830
35070
  provider_dispatch_freshness_remaining_ms: providerDispatchFreshnessRemainingMs,
34831
35071
  finish_reason: finishReason,
34832
35072
  refusal_status: refusalStatus,
@@ -34957,6 +35197,8 @@ var init_runner = __esm({
34957
35197
  failure_category: failure.category,
34958
35198
  failure_code: failure.code,
34959
35199
  retryable: failure.retryable,
35200
+ ...providerDispatchedAt === null ? {} : { provider_dispatched_at: providerDispatchedAt },
35201
+ ...adapterResultReadyAt === null ? {} : { adapter_result_ready_at: adapterResultReadyAt },
34960
35202
  provider_dispatch_freshness_remaining_ms: providerDispatchFreshnessRemainingMs,
34961
35203
  ...processExit ? { process_exit: processExit } : {},
34962
35204
  membership_disposition: membershipFailureDisposition({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.9.5",
3
+ "version": "2026.9.7",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",