@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.
- package/bin/vtx-service-bootstrap.js +4 -4
- package/bin/vtx.js +116 -12
- package/package.json +2 -2
|
@@ -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.
|
|
19
|
+
package_version: "2026.9.13",
|
|
20
20
|
codex_package_name: "@openai/codex",
|
|
21
|
-
codex_version: "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: "
|
|
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: "
|
|
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.
|
|
56
|
+
package_version: "2026.9.13",
|
|
57
57
|
codex_package_name: "@openai/codex",
|
|
58
|
-
codex_version: "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: "
|
|
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: "
|
|
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
|
|
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 =
|
|
35607
|
-
(candidate) =>
|
|
35709
|
+
validateImmutableSelection(jobInput, advertisedModels) {
|
|
35710
|
+
const advertisedModel = advertisedModels.find(
|
|
35711
|
+
(candidate) => candidate.model_id === jobInput.requested_model
|
|
35608
35712
|
);
|
|
35609
|
-
if (!advertisedModel || !advertisedModel.
|
|
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.
|
|
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.
|
|
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",
|