@vtxmacro/cli 2026.9.12 → 2026.9.13

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,9 +16,9 @@ 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.12",
19
+ package_version: "2026.9.13",
20
20
  codex_package_name: "@openai/codex",
21
- codex_version: "0.147.0",
21
+ codex_version: "0.153.3",
22
22
  copilot_sdk_package_name: "@github/copilot-sdk",
23
23
  copilot_sdk_version: "1.0.0-beta.8",
24
24
  copilot_cli_package_name: "@github/copilot",
@@ -82,13 +82,13 @@ var agent_cli_release_default = {
82
82
  package_name: "@openai/codex-linux-x64",
83
83
  target: "x86_64-unknown-linux-musl",
84
84
  binary_name: "codex",
85
- sha256: "cb0a15567e9a60a5820d54b0f6ae86d504dc3805c1eab21a47f70e3eb7b73a40"
85
+ sha256: "f9d4eab23d0e0726340e084ed22d668885c1dcabeb29ec508b8962e5e29b8dc6"
86
86
  },
87
87
  "win32-x64": {
88
88
  package_name: "@openai/codex-win32-x64",
89
89
  target: "x86_64-pc-windows-msvc",
90
90
  binary_name: "codex.exe",
91
- sha256: "935a1911ed2556e4ffcec995f4886ac2ac425863ba26fed264df62e30272ad9d"
91
+ sha256: "e5ef3c4b81d2fb861f3731c91a773d45a1973c6a0b480d6449f80bc8fd749e96"
92
92
  }
93
93
  }
94
94
  };
package/bin/vtx.js CHANGED
@@ -53,9 +53,9 @@ var init_agent_cli_release = __esm({
53
53
  "agent-cli-release.json"() {
54
54
  agent_cli_release_default = {
55
55
  package_name: "@vtxmacro/cli",
56
- package_version: "2026.9.12",
56
+ package_version: "2026.9.13",
57
57
  codex_package_name: "@openai/codex",
58
- codex_version: "0.147.0",
58
+ codex_version: "0.153.3",
59
59
  copilot_sdk_package_name: "@github/copilot-sdk",
60
60
  copilot_sdk_version: "1.0.0-beta.8",
61
61
  copilot_cli_package_name: "@github/copilot",
@@ -119,13 +119,13 @@ var init_agent_cli_release = __esm({
119
119
  package_name: "@openai/codex-linux-x64",
120
120
  target: "x86_64-unknown-linux-musl",
121
121
  binary_name: "codex",
122
- sha256: "cb0a15567e9a60a5820d54b0f6ae86d504dc3805c1eab21a47f70e3eb7b73a40"
122
+ sha256: "f9d4eab23d0e0726340e084ed22d668885c1dcabeb29ec508b8962e5e29b8dc6"
123
123
  },
124
124
  "win32-x64": {
125
125
  package_name: "@openai/codex-win32-x64",
126
126
  target: "x86_64-pc-windows-msvc",
127
127
  binary_name: "codex.exe",
128
- sha256: "935a1911ed2556e4ffcec995f4886ac2ac425863ba26fed264df62e30272ad9d"
128
+ sha256: "e5ef3c4b81d2fb861f3731c91a773d45a1973c6a0b480d6449f80bc8fd749e96"
129
129
  }
130
130
  }
131
131
  };
@@ -23406,6 +23406,7 @@ var init_codex_adapter = __esm({
23406
23406
  this.attemptCleanups = /* @__PURE__ */ new Map();
23407
23407
  this.durableSession = null;
23408
23408
  this.durableSessionStart = null;
23409
+ this.modelCatalogRefresh = null;
23409
23410
  this.closing = false;
23410
23411
  this.adapterClosePromise = null;
23411
23412
  this.sessionGeneration = 0;
@@ -23417,6 +23418,55 @@ var init_codex_adapter = __esm({
23417
23418
  } catch {
23418
23419
  }
23419
23420
  }
23421
+ async readModelCapabilities(deadlineAtMs, signal) {
23422
+ if (this.modelCatalogRefresh) {
23423
+ return await this.waitForCapabilities(this.modelCatalogRefresh, deadlineAtMs, signal);
23424
+ }
23425
+ const refresh = (async () => {
23426
+ const codexHome = this.dependencies.codexHome;
23427
+ if (!codexHome) {
23428
+ throw new CodexAppServerError({
23429
+ message: "Codex home is required to refresh the model catalog.",
23430
+ category: "adapter",
23431
+ code: "codex_home_required",
23432
+ retryable: false
23433
+ });
23434
+ }
23435
+ const durableSession = await this.acquireDurableSession(codexHome, deadlineAtMs, signal);
23436
+ const previous = durableSession.capabilityPreflight;
23437
+ const discovery = (async () => {
23438
+ if (previous) await this.waitForCapabilities(previous, deadlineAtMs, signal);
23439
+ await durableSession.session.requireManagedChatGptAuth(deadlineAtMs, signal);
23440
+ const capabilities = await durableSession.session.readModelCapabilities(deadlineAtMs, signal);
23441
+ if (capabilities.length === 0) {
23442
+ throw new CodexAppServerError({
23443
+ message: "Codex did not return any visible supported models.",
23444
+ category: "model",
23445
+ code: "model_catalog_empty",
23446
+ retryable: true
23447
+ });
23448
+ }
23449
+ return capabilities;
23450
+ })();
23451
+ if (!previous) durableSession.capabilityPreflight = discovery;
23452
+ try {
23453
+ const capabilities = await discovery;
23454
+ durableSession.capabilityPreflight = Promise.resolve(capabilities);
23455
+ return capabilities;
23456
+ } catch (error48) {
23457
+ if (durableSession.capabilityPreflight === discovery) {
23458
+ durableSession.capabilityPreflight = previous;
23459
+ }
23460
+ throw error48;
23461
+ }
23462
+ })();
23463
+ this.modelCatalogRefresh = refresh;
23464
+ try {
23465
+ return await refresh;
23466
+ } finally {
23467
+ if (this.modelCatalogRefresh === refresh) this.modelCatalogRefresh = null;
23468
+ }
23469
+ }
23420
23470
  async readAccountRateLimits(deadlineAtMs, signal) {
23421
23471
  const codexHome = this.dependencies.codexHome;
23422
23472
  if (!codexHome) {
@@ -23581,7 +23631,12 @@ var init_codex_adapter = __esm({
23581
23631
  })();
23582
23632
  }
23583
23633
  const preflight = durableSession.capabilityPreflight;
23584
- const capabilities = await new Promise((resolve6, reject) => {
23634
+ const capabilities = await this.waitForCapabilities(preflight, deadlineAtMs, signal);
23635
+ assertAttemptActive(deadlineAtMs, signal);
23636
+ durableSession.session.requireModelCapability(capabilities, modelName, reasoningEffort);
23637
+ }
23638
+ async waitForCapabilities(preflight, deadlineAtMs, signal) {
23639
+ return await new Promise((resolve6, reject) => {
23585
23640
  let settled = false;
23586
23641
  const finish = (callback) => {
23587
23642
  if (settled) return;
@@ -23612,8 +23667,6 @@ var init_codex_adapter = __esm({
23612
23667
  (error48) => finish(() => reject(error48))
23613
23668
  );
23614
23669
  });
23615
- assertAttemptActive(deadlineAtMs, signal);
23616
- durableSession.session.requireModelCapability(capabilities, modelName, reasoningEffort);
23617
23670
  }
23618
23671
  runAttempt(input) {
23619
23672
  const active = this.inFlightAttempts.get(input.attemptId);
@@ -33732,6 +33785,25 @@ var init_runner = __esm({
33732
33785
  }
33733
33786
  throw lastError;
33734
33787
  };
33788
+ const modelSnapshots = /* @__PURE__ */ new Map([
33789
+ [receipt.advertisement_generation, settings.advertisedModels]
33790
+ ]);
33791
+ if (receipt.pending_advertisement) {
33792
+ modelSnapshots.set(
33793
+ receipt.pending_advertisement.advertisement_generation,
33794
+ receipt.pending_advertisement.models
33795
+ );
33796
+ }
33797
+ const retainModelSnapshots = () => {
33798
+ const retained = /* @__PURE__ */ new Set([
33799
+ receipt.advertisement_generation,
33800
+ receipt.pending_claim_request?.advertisement_generation,
33801
+ ...Object.values(receipt.attempts).map((attempt) => attempt.claim.advertisement_generation)
33802
+ ]);
33803
+ for (const generation of modelSnapshots.keys()) {
33804
+ if (!retained.has(generation)) modelSnapshots.delete(generation);
33805
+ }
33806
+ };
33735
33807
  let advertisementHandoff = null;
33736
33808
  const publishAdvertisement = async (health, forceAdvance, retryRemote = true, allowDefinitiveReseed = true) => {
33737
33809
  let advertisement = receipt.pending_advertisement;
@@ -33803,6 +33875,8 @@ var init_runner = __esm({
33803
33875
  pending_advertisement: current.pending_advertisement?.operation_id === advertisement.operation_id ? null : current.pending_advertisement,
33804
33876
  updated_at: isoAt(now())
33805
33877
  }));
33878
+ modelSnapshots.set(advertisement.advertisement_generation, advertisement.models);
33879
+ retainModelSnapshots();
33806
33880
  } catch (error48) {
33807
33881
  const definitivelyNotApplied = error48 instanceof ExternalInferenceMcpError ? error48.definitivelyNotApplied : Boolean(error48 && typeof error48 === "object" && error48.definitivelyNotApplied === true);
33808
33882
  const expectedGeneration = receipt.registered ? receipt.advertisement_generation + 1 : receipt.advertisement_generation;
@@ -34118,6 +34192,7 @@ var init_runner = __esm({
34118
34192
  let retryRecovery = null;
34119
34193
  const promise2 = this.executeClaim({
34120
34194
  claim,
34195
+ advertisedModels: modelSnapshots.get(claim.advertisement_generation) ?? settings.advertisedModels,
34121
34196
  attemptId,
34122
34197
  localState,
34123
34198
  credential,
@@ -34431,6 +34506,35 @@ var init_runner = __esm({
34431
34506
  const expiresAt = receipt.advertisement_expires_at ? Date.parse(receipt.advertisement_expires_at) : 0;
34432
34507
  if (currentTime >= nextAdvertisementAttemptAt && expiresAt - currentTime <= settings.advertisementRefreshLeadMs) {
34433
34508
  try {
34509
+ if (!receipt.pending_advertisement && this.dependencies.codexAdapter.readModelCapabilities) {
34510
+ try {
34511
+ const capabilities = await this.dependencies.codexAdapter.readModelCapabilities(
34512
+ Date.now() + Math.max(1, Math.floor(settings.advertisementRefreshLeadMs / 2)),
34513
+ this.options.signal
34514
+ );
34515
+ const refreshedModels = buildInferenceAdvertisedModels(
34516
+ capabilities,
34517
+ this.options.adapterRuntimeVersion,
34518
+ settings.adapterId,
34519
+ this.options.structuredOutput ?? settings.adapterId === "codex",
34520
+ settings.sameAttemptRecovery,
34521
+ settings.agentRuntime ? ["provider", "agent"] : ["provider"]
34522
+ );
34523
+ const changed = !exactJson2(settings.advertisedModels, refreshedModels);
34524
+ settings.advertisedModels = refreshedModels;
34525
+ emitDiagnostic("model_catalog_refreshed", {
34526
+ model_count: refreshedModels.length,
34527
+ changed,
34528
+ active_attempts: active.size
34529
+ });
34530
+ } catch (error48) {
34531
+ emitDiagnostic("model_catalog_refresh_failed", {
34532
+ failure_category: error48 instanceof CodexAppServerError ? error48.category : "adapter",
34533
+ failure_code: error48 instanceof CodexAppServerError ? error48.code : "model_catalog_refresh_failed",
34534
+ retained_model_count: settings.advertisedModels.length
34535
+ });
34536
+ }
34537
+ }
34434
34538
  await publishAdvertisement("healthy", true, false);
34435
34539
  nextAdvertisementAttemptAt = 0;
34436
34540
  } catch (error48) {
@@ -35006,7 +35110,7 @@ var init_runner = __esm({
35006
35110
  let outputContract = null;
35007
35111
  let inputValidationError;
35008
35112
  try {
35009
- this.validateImmutableSelection(jobInput);
35113
+ this.validateImmutableSelection(jobInput, options.advertisedModels);
35010
35114
  outputContract = parseOutputContract(jobInput);
35011
35115
  } catch (error48) {
35012
35116
  inputValidationError = error48;
@@ -35602,11 +35706,11 @@ var init_runner = __esm({
35602
35706
  await stopHeartbeat();
35603
35707
  }
35604
35708
  }
35605
- validateImmutableSelection(jobInput) {
35606
- const advertisedModel = this.options.codexModelCapabilities.find(
35607
- (candidate) => !candidate.hidden && candidate.model === jobInput.requested_model
35709
+ validateImmutableSelection(jobInput, advertisedModels) {
35710
+ const advertisedModel = advertisedModels.find(
35711
+ (candidate) => candidate.model_id === jobInput.requested_model
35608
35712
  );
35609
- if (!advertisedModel || !advertisedModel.supportedReasoningEfforts.includes(jobInput.requested_reasoning_effort) || jobInput.controller.model_id !== jobInput.requested_model || jobInput.controller.reasoning_effort !== jobInput.requested_reasoning_effort) {
35713
+ if (!advertisedModel || !advertisedModel.supported_reasoning_efforts.includes(jobInput.requested_reasoning_effort) || jobInput.controller.model_id !== jobInput.requested_model || jobInput.controller.reasoning_effort !== jobInput.requested_reasoning_effort) {
35610
35714
  throw new InferenceHostRunnerError(
35611
35715
  "unsupported_model_selection",
35612
35716
  "The claimed model or reasoning effort was not advertised by this host."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.9.12",
3
+ "version": "2026.9.13",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -20,7 +20,7 @@
20
20
  "node": "^22.19.0 || >=24.0.0"
21
21
  },
22
22
  "dependencies": {
23
- "@openai/codex": "0.147.0",
23
+ "@openai/codex": "0.153.3",
24
24
  "@github/copilot-sdk": "1.0.0-beta.8",
25
25
  "@github/copilot": "1.0.80",
26
26
  "@deepseek-ai/cordis": "4.0.1",