@vtxmacro/cli 2026.9.49 → 2026.9.51

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.49",
19
+ package_version: "2026.9.51",
20
20
  codex_package_name: "@openai/codex",
21
21
  codex_version: "0.153.3",
22
22
  copilot_sdk_package_name: "@github/copilot-sdk",
package/bin/vtx.js CHANGED
@@ -77,7 +77,7 @@ var init_agent_cli_release = __esm({
77
77
  "agent-cli-release.json"() {
78
78
  agent_cli_release_default = {
79
79
  package_name: "@vtxmacro/cli",
80
- package_version: "2026.9.49",
80
+ package_version: "2026.9.51",
81
81
  codex_package_name: "@openai/codex",
82
82
  codex_version: "0.153.3",
83
83
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -17580,13 +17580,34 @@ var init_dist = __esm({
17580
17580
  }
17581
17581
  });
17582
17582
 
17583
+ // lib/inference-host/mcp-transport-config.ts
17584
+ import { isIP } from "node:net";
17585
+ import { isAbsolute, win32 } from "node:path";
17586
+ function resolveInferenceMcpDirectTransport(env) {
17587
+ const address = String(env.VTX_INFERENCE_HOST_MCP_CONNECT_ADDRESS || "").trim();
17588
+ const caFile = String(env.VTX_INFERENCE_HOST_MCP_CA_FILE || "").trim();
17589
+ if (!address && !caFile) return void 0;
17590
+ if (!isIP(address) || !caFile || /[\r\n\0]/u.test(caFile) || !isAbsolute(caFile) && !win32.isAbsolute(caFile)) {
17591
+ throw new Error("Direct inference MCP transport requires an IP address and an absolute CA file path.");
17592
+ }
17593
+ return { address, caFile };
17594
+ }
17595
+ var init_mcp_transport_config = __esm({
17596
+ "lib/inference-host/mcp-transport-config.ts"() {
17597
+ "use strict";
17598
+ init_define_VTX_EXO_POLICY();
17599
+ init_define_VTX_GROK_POLICY();
17600
+ init_define_VTX_PI_MODEL_POLICY();
17601
+ }
17602
+ });
17603
+
17583
17604
  // lib/inference-host/config.ts
17584
17605
  import { randomBytes } from "node:crypto";
17585
17606
  import { spawn } from "node:child_process";
17586
17607
  import { constants } from "node:fs";
17587
17608
  import { lstat, mkdir, open, readFile, realpath, rename, rm } from "node:fs/promises";
17588
17609
  import { homedir } from "node:os";
17589
- import { dirname, isAbsolute, join, relative, resolve, win32 as windowsPath } from "node:path";
17610
+ import { dirname, isAbsolute as isAbsolute2, join, relative, resolve, win32 as windowsPath } from "node:path";
17590
17611
  function inferenceBaseDir(env) {
17591
17612
  const configured = String(env.VTX_INFERENCE_HOST_HOME || "").trim();
17592
17613
  return configured || join(homedir(), ".vtx", "inference-host");
@@ -17638,6 +17659,7 @@ function resolveInferenceHostConfig(env = process.env) {
17638
17659
  );
17639
17660
  return {
17640
17661
  apiUrl: String(env.VTX_API_URL || "https://api.vtxmacro.com").replace(/\/+$/, ""),
17662
+ mcpDirectTransport: resolveInferenceMcpDirectTransport(env),
17641
17663
  baseDir,
17642
17664
  instanceName,
17643
17665
  credentialStoreMode: rawMode,
@@ -18160,6 +18182,7 @@ var init_config = __esm({
18160
18182
  init_define_VTX_GROK_POLICY();
18161
18183
  init_define_VTX_PI_MODEL_POLICY();
18162
18184
  init_dist();
18185
+ init_mcp_transport_config();
18163
18186
  loadInferenceReceiptDurabilityTimeoutMs = async () => {
18164
18187
  let configured;
18165
18188
  if (true) {
@@ -18734,7 +18757,7 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
18734
18757
  requireNamedInstancePath = (instanceName, instanceDir, rawPath, label) => {
18735
18758
  if (!rawPath || instanceName === DEFAULT_INFERENCE_HOST_INSTANCE) return rawPath;
18736
18759
  const relativePath = relative(resolve(instanceDir), resolve(rawPath));
18737
- if (relativePath === ".." || relativePath.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) || isAbsolute(relativePath)) {
18760
+ if (relativePath === ".." || relativePath.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) || isAbsolute2(relativePath)) {
18738
18761
  throw new Error(`${label} for a named instance must stay inside its isolated instance directory.`);
18739
18762
  }
18740
18763
  return rawPath;
@@ -20609,6 +20632,53 @@ var init_runtime_policy_generated = __esm({
20609
20632
  }
20610
20633
  });
20611
20634
 
20635
+ // lib/inference-host/mcp-transport.ts
20636
+ import { readFileSync } from "node:fs";
20637
+ import { X509Certificate } from "node:crypto";
20638
+ import { isIP as isIP2 } from "node:net";
20639
+ import { Agent, fetch as undiciFetch } from "undici";
20640
+ function createInferenceMcpTransport(endpoint, direct, fetchImpl = fetch) {
20641
+ if (!direct) return { fetch: fetchImpl, route: "public", close: async () => void 0 };
20642
+ const canonical = new URL(endpoint);
20643
+ if (canonical.protocol !== "https:" || canonical.username || canonical.password || canonical.pathname !== "/insights/mcp" || canonical.search || canonical.hash || isIP2(canonical.hostname) || !isIP2(direct.address)) {
20644
+ throw new Error("Direct inference MCP transport requires a canonical HTTPS MCP hostname.");
20645
+ }
20646
+ const ca = readFileSync(direct.caFile, "utf8");
20647
+ new X509Certificate(ca);
20648
+ const agent = new Agent({
20649
+ connect: {
20650
+ ca,
20651
+ rejectUnauthorized: true,
20652
+ servername: canonical.hostname,
20653
+ lookup: (_hostname, options, callback) => {
20654
+ const address = { address: direct.address, family: isIP2(direct.address) };
20655
+ if (options.all) callback(null, [address]);
20656
+ else callback(null, address.address, address.family);
20657
+ }
20658
+ }
20659
+ });
20660
+ const dispatchFetch = fetchImpl === fetch ? undiciFetch : fetchImpl;
20661
+ const routedFetch = (input, init2) => {
20662
+ const url2 = new URL(input instanceof Request ? input.url : String(input));
20663
+ if (url2.href !== canonical.href) {
20664
+ return Promise.reject(new Error("Direct inference transport cannot send requests outside its MCP endpoint."));
20665
+ }
20666
+ return dispatchFetch(input, { ...init2, redirect: "error", dispatcher: agent });
20667
+ };
20668
+ return { fetch: routedFetch, route: "direct", close: async () => {
20669
+ await agent.destroy();
20670
+ } };
20671
+ }
20672
+ var init_mcp_transport = __esm({
20673
+ "lib/inference-host/mcp-transport.ts"() {
20674
+ "use strict";
20675
+ init_define_VTX_EXO_POLICY();
20676
+ init_define_VTX_GROK_POLICY();
20677
+ init_define_VTX_PI_MODEL_POLICY();
20678
+ init_mcp_transport_config();
20679
+ }
20680
+ });
20681
+
20612
20682
  // lib/inference-host/mcp-client.ts
20613
20683
  var EXTERNAL_INFERENCE_MCP_PROTOCOL_VERSION, EXTERNAL_INFERENCE_AUTOMATED_HOST_TOOLS, EXTERNAL_INFERENCE_OPERATIONAL_TOOLS, ClaimTiming, ExternalInferenceMcpError, DEFAULT_REQUEST_TIMEOUT_MS, MAX_RETRY_AFTER_MS, PUBLIC_TOOL_ERROR_PREFIX, parseRetryAfterMs, identifierSchema2, safeCodeSchema2, publicFailureCodeSchema, publicToolErrorSchema, structuredPublicToolErrorSchema, parsePublicToolError, hostMutationResultSchema, attemptStartResultSchema, agentConnectResultSchema, agentHeartbeatResultSchema, timestampSchema2, positiveGenerationSchema, jsonObjectSchema, agentAssignmentNextArgumentsSchema, agentDataCapabilityDescriptorSchema, agentAssignmentNextResultSchema, agentAssignmentHeartbeatArgumentsSchema, agentAssignmentHeartbeatResultSchema, agentDataCallArgumentsSchema, agentDataCallResultSchema, agentDecisionSubmitArgumentsSchema, agentDecisionSubmitResultSchema, agentDecisionStatusArgumentsSchema, agentDecisionStatusResultSchema, agentAssignmentReleaseArgumentsSchema, agentAssignmentReleaseResultSchema, jobCompletionResultSchema, jobFailureResultSchema, toolContracts, discoveryResultSchema, toolListResultSchema, inlineStructuredContentSchema, protocolMeta, parseJsonDocument, parseSseDocuments, parseResponseDocuments, exactOperationalInventory, exactJson, invalidBoundResult, verifyToolResult, ExternalInferenceMcpClient;
20614
20684
  var init_mcp_client = __esm({
@@ -20619,6 +20689,7 @@ var init_mcp_client = __esm({
20619
20689
  init_define_VTX_PI_MODEL_POLICY();
20620
20690
  init_zod();
20621
20691
  init_runtime_policy_generated();
20692
+ init_mcp_transport();
20622
20693
  init_external_inference_contract();
20623
20694
  EXTERNAL_INFERENCE_MCP_PROTOCOL_VERSION = "2026-07-28";
20624
20695
  EXTERNAL_INFERENCE_AUTOMATED_HOST_TOOLS = [
@@ -21282,6 +21353,7 @@ var init_mcp_client = __esm({
21282
21353
  #endpoint;
21283
21354
  #tokenSource;
21284
21355
  #fetch;
21356
+ #transport;
21285
21357
  #clientVersion;
21286
21358
  #clientName;
21287
21359
  #expectedTools;
@@ -21293,6 +21365,9 @@ var init_mcp_client = __esm({
21293
21365
  #providerHttpStatusTools = /* @__PURE__ */ new Set();
21294
21366
  #grokToolValidationTools = /* @__PURE__ */ new Set();
21295
21367
  #grokResponseIdentityTools = /* @__PURE__ */ new Set();
21368
+ async close() {
21369
+ await this.#transport.close();
21370
+ }
21296
21371
  supportsProviderHttpStatusDiagnostics(tool) {
21297
21372
  return this.#providerHttpStatusTools.has(tool);
21298
21373
  }
@@ -21345,7 +21420,8 @@ var init_mcp_client = __esm({
21345
21420
  }
21346
21421
  this.#endpoint = endpoint;
21347
21422
  this.#tokenSource = options.tokenSource;
21348
- this.#fetch = options.fetchImpl ?? fetch;
21423
+ this.#transport = createInferenceMcpTransport(endpoint, options.directTransport, options.fetchImpl);
21424
+ this.#fetch = this.#transport.fetch;
21349
21425
  this.#clientVersion = String(options.clientVersion || "development").trim() || "development";
21350
21426
  this.#clientName = String(
21351
21427
  options.clientName || "@vtxmacro/cli external inference host"
@@ -21508,7 +21584,7 @@ var init_mcp_client = __esm({
21508
21584
  return result2;
21509
21585
  } finally {
21510
21586
  if (timing) {
21511
- const receipt = timing.finish(outcome);
21587
+ const receipt = Object.freeze({ ...timing.finish(outcome), transport_route: this.#transport.route });
21512
21588
  try {
21513
21589
  void Promise.resolve(options.onClaimTiming?.(receipt)).catch(() => void 0);
21514
21590
  } catch {
@@ -28103,7 +28179,7 @@ var require_ajv = __commonJS({
28103
28179
  import { spawn as spawn3 } from "node:child_process";
28104
28180
  import { chmod, lstat as lstat2, open as open2, readFile as readFile2, rename as rename2, rm as rm2, writeFile } from "node:fs/promises";
28105
28181
  import { tmpdir } from "node:os";
28106
- import { dirname as dirname2, isAbsolute as isAbsolute2, join as join2, resolve as resolve2, sep } from "node:path";
28182
+ import { dirname as dirname2, isAbsolute as isAbsolute3, join as join2, resolve as resolve2, sep } from "node:path";
28107
28183
  import { createInterface } from "node:readline";
28108
28184
  async function loginCodexSubscription(options) {
28109
28185
  const session = await CodexAppServerSession.start(options);
@@ -29732,7 +29808,7 @@ child.once('close', async (code, signal) => {
29732
29808
  const resolvedHome = resolve2(this.codexHome);
29733
29809
  const resolvedThreadPath = resolve2(threadPath);
29734
29810
  const resolvedSessionsRoot = join2(resolvedHome, "sessions");
29735
- if (!threadId || !threadPath || !isAbsolute2(threadPath) || !resolvedThreadPath.startsWith(`${resolvedSessionsRoot}${sep}`) || !resolvedThreadPath.endsWith(".jsonl") || thread?.ephemeral !== false || thread?.modelProvider !== "openai" || !Array.isArray(thread?.turns) || thread.turns.length !== 0 || result2.model !== options.requestedModel || result2.modelProvider !== "openai" || result2.serviceTier !== "default" || result2.reasoningEffort !== options.requestedReasoningEffort || String(result2.cwd || "") !== options.workspacePath || !Array.isArray(result2.runtimeWorkspaceRoots) || result2.runtimeWorkspaceRoots.length !== 0 || !Array.isArray(result2.instructionSources) || result2.instructionSources.length !== 0 || result2.approvalPolicy !== "never" || result2.approvalsReviewer !== "user" || sandbox?.type !== "readOnly" || sandbox.networkAccess !== false || permission?.id !== CODEX_INFERENCE_PERMISSION_PROFILE || permission.extends !== null) {
29811
+ if (!threadId || !threadPath || !isAbsolute3(threadPath) || !resolvedThreadPath.startsWith(`${resolvedSessionsRoot}${sep}`) || !resolvedThreadPath.endsWith(".jsonl") || thread?.ephemeral !== false || thread?.modelProvider !== "openai" || !Array.isArray(thread?.turns) || thread.turns.length !== 0 || result2.model !== options.requestedModel || result2.modelProvider !== "openai" || result2.serviceTier !== "default" || result2.reasoningEffort !== options.requestedReasoningEffort || String(result2.cwd || "") !== options.workspacePath || !Array.isArray(result2.runtimeWorkspaceRoots) || result2.runtimeWorkspaceRoots.length !== 0 || !Array.isArray(result2.instructionSources) || result2.instructionSources.length !== 0 || result2.approvalPolicy !== "never" || result2.approvalsReviewer !== "user" || sandbox?.type !== "readOnly" || sandbox.networkAccess !== false || permission?.id !== CODEX_INFERENCE_PERMISSION_PROFILE || permission.extends !== null) {
29736
29812
  throw new CodexAppServerError({
29737
29813
  message: "Codex thread isolation or effective settings were invalid.",
29738
29814
  category: "adapter",
@@ -29818,7 +29894,7 @@ child.once('close', async (code, signal) => {
29818
29894
  async resumeAgentThread(options) {
29819
29895
  const expectedPath = resolve2(options.threadPath);
29820
29896
  const sessionsRoot = join2(resolve2(this.codexHome), "sessions");
29821
- if (!options.threadId.trim() || !isAbsolute2(options.threadPath) || !expectedPath.startsWith(`${sessionsRoot}${sep}`) || !expectedPath.endsWith(".jsonl")) {
29897
+ if (!options.threadId.trim() || !isAbsolute3(options.threadPath) || !expectedPath.startsWith(`${sessionsRoot}${sep}`) || !expectedPath.endsWith(".jsonl")) {
29822
29898
  throw new CodexAppServerError({
29823
29899
  message: "Codex Agent durable thread receipt was invalid.",
29824
29900
  category: "adapter",
@@ -29863,7 +29939,7 @@ child.once('close', async (code, signal) => {
29863
29939
  const threadPath = String(thread?.path || "");
29864
29940
  const resolvedThreadPath = resolve2(threadPath);
29865
29941
  const sessionsRoot = join2(resolve2(this.codexHome), "sessions");
29866
- if (!threadId || !threadPath || !isAbsolute2(threadPath) || !resolvedThreadPath.startsWith(`${sessionsRoot}${sep}`) || !resolvedThreadPath.endsWith(".jsonl") || thread?.ephemeral !== false || thread?.modelProvider !== "openai" || !Array.isArray(thread?.turns) || !resumed && thread.turns.length !== 0 || result2.model !== options.requestedModel || result2.modelProvider !== "openai" || result2.serviceTier !== "default" || result2.reasoningEffort !== options.requestedReasoningEffort || String(result2.cwd || "") !== options.workspacePath || !Array.isArray(result2.instructionSources) || result2.instructionSources.length !== 0 || result2.approvalPolicy !== "never" || result2.approvalsReviewer !== "user" || sandbox?.type !== "readOnly" || sandbox.networkAccess !== false || permission?.id !== CODEX_AGENT_PERMISSION_PROFILE || permission.extends !== null) {
29942
+ if (!threadId || !threadPath || !isAbsolute3(threadPath) || !resolvedThreadPath.startsWith(`${sessionsRoot}${sep}`) || !resolvedThreadPath.endsWith(".jsonl") || thread?.ephemeral !== false || thread?.modelProvider !== "openai" || !Array.isArray(thread?.turns) || !resumed && thread.turns.length !== 0 || result2.model !== options.requestedModel || result2.modelProvider !== "openai" || result2.serviceTier !== "default" || result2.reasoningEffort !== options.requestedReasoningEffort || String(result2.cwd || "") !== options.workspacePath || !Array.isArray(result2.instructionSources) || result2.instructionSources.length !== 0 || result2.approvalPolicy !== "never" || result2.approvalsReviewer !== "user" || sandbox?.type !== "readOnly" || sandbox.networkAccess !== false || permission?.id !== CODEX_AGENT_PERMISSION_PROFILE || permission.extends !== null) {
29867
29943
  throw new CodexAppServerError({
29868
29944
  message: "Codex Agent thread isolation or effective settings were invalid.",
29869
29945
  category: "adapter",
@@ -30959,6 +31035,7 @@ function createDefaultInferenceHostRunnerDependencies(options) {
30959
31035
  }),
30960
31036
  createMcpClient: (tokenSource) => new ExternalInferenceMcpClient({
30961
31037
  endpoint: `${options.apiUrl.replace(/\/+$/u, "")}/insights/mcp`,
31038
+ directTransport: options.directTransport,
30962
31039
  tokenSource,
30963
31040
  fetchImpl,
30964
31041
  clientVersion: options.clientVersion,
@@ -33382,7 +33459,11 @@ var init_runner = __esm({
33382
33459
  try {
33383
33460
  await this.dependencies.codexAdapter.close?.();
33384
33461
  } finally {
33385
- await lock2.release();
33462
+ try {
33463
+ await mcp?.close?.();
33464
+ } finally {
33465
+ await lock2.release();
33466
+ }
33386
33467
  }
33387
33468
  }
33388
33469
  }
@@ -35627,7 +35708,7 @@ import {
35627
35708
  } from "node:fs/promises";
35628
35709
  import { createHash as createHash6, randomBytes as randomBytes4 } from "node:crypto";
35629
35710
  import { tmpdir as tmpdir2 } from "node:os";
35630
- import { isAbsolute as isAbsolute3, join as join4, relative as relative2, resolve as resolve3, sep as sep2 } from "node:path";
35711
+ import { isAbsolute as isAbsolute4, join as join4, relative as relative2, resolve as resolve3, sep as sep2 } from "node:path";
35631
35712
  var MAX_PROMPT_BYTES2, CODEX_MODEL_NAME_PATTERN, CODEX_REASONING_EFFORT_PATTERN, codexRecoveryCheckpointProcessFingerprint, proveCodexSameBootQuiescence, tokenUsageReceiptSchema, turnResultReceiptSchema, terminalReceiptSchema, recoveryCheckpointSchema, recoveryFileSchema, FileCodexAttemptRecoveryStore, utf8Bytes, assertAttemptActive, tomlString, permissionConfig, ensureDedicatedCodexHome, createIsolatedCodexAttemptResources, createIsolatedCodexHostResources, validateAttemptInput, isStrictDescendant, assertRecoveryResourceScope, removeRecoveredThread, confirmGuardianTerminatedForRecovery, recoveredCodexProcessExit, reconcileCodexAttemptRecovery, CodexSubscriptionAdapter, CodexAgentSubscriptionAdapter;
35632
35713
  var init_codex_adapter = __esm({
35633
35714
  "lib/inference-host/codex-adapter.ts"() {
@@ -36010,7 +36091,7 @@ var init_codex_adapter = __esm({
36010
36091
  const parentPath = resolve3(parent);
36011
36092
  const candidatePath = resolve3(candidate);
36012
36093
  const scoped = relative2(parentPath, candidatePath);
36013
- return scoped.length > 0 && !scoped.startsWith(`..${sep2}`) && scoped !== ".." && !isAbsolute3(scoped);
36094
+ return scoped.length > 0 && !scoped.startsWith(`..${sep2}`) && scoped !== ".." && !isAbsolute4(scoped);
36014
36095
  };
36015
36096
  assertRecoveryResourceScope = (checkpoint) => {
36016
36097
  const temporaryRoot = resolve3(tmpdir2());
@@ -36100,7 +36181,7 @@ var init_codex_adapter = __esm({
36100
36181
  }
36101
36182
  }
36102
36183
  if (checkpoint.threadPath !== null) {
36103
- if (!isAbsolute3(checkpoint.threadPath) || !isStrictDescendant(
36184
+ if (!isAbsolute4(checkpoint.threadPath) || !isStrictDescendant(
36104
36185
  checkpoint.threadPath,
36105
36186
  sessionsRoot
36106
36187
  ) || !checkpoint.threadPath.endsWith(".jsonl")) {
@@ -42462,7 +42543,7 @@ var init_runtime_policy_generated2 = __esm({
42462
42543
  // lib/inference-host/service.ts
42463
42544
  import { spawn as spawn10 } from "node:child_process";
42464
42545
  import { randomUUID as randomUUID9 } from "node:crypto";
42465
- import { createWriteStream, readFileSync } from "node:fs";
42546
+ import { createWriteStream, readFileSync as readFileSync2 } from "node:fs";
42466
42547
  import { access as access4, chmod as chmod3, mkdir as mkdir3, readFile as readFile9, rm as rm10, writeFile as writeFile4 } from "node:fs/promises";
42467
42548
  import { homedir as homedir2 } from "node:os";
42468
42549
  import { dirname as dirname12, join as join13, resolve as resolve10 } from "node:path";
@@ -42505,7 +42586,7 @@ var init_service = __esm({
42505
42586
  isWindowsSubsystemForLinux = (env = process.env, kernelRelease) => Boolean(
42506
42587
  String(env.WSL_INTEROP || "").trim() || String(env.WSL_DISTRO_NAME || "").trim() || /microsoft/iu.test(kernelRelease ?? (() => {
42507
42588
  try {
42508
- return readFileSync("/proc/sys/kernel/osrelease", "utf8");
42589
+ return readFileSync2("/proc/sys/kernel/osrelease", "utf8");
42509
42590
  } catch {
42510
42591
  return "";
42511
42592
  }
@@ -42790,6 +42871,10 @@ var init_service = __esm({
42790
42871
  if (config2.credentialFilePath) {
42791
42872
  result2.VTX_INFERENCE_HOST_CREDENTIAL_FILE = config2.credentialFilePath;
42792
42873
  }
42874
+ if (config2.mcpDirectTransport) {
42875
+ result2.VTX_INFERENCE_HOST_MCP_CONNECT_ADDRESS = config2.mcpDirectTransport.address;
42876
+ result2.VTX_INFERENCE_HOST_MCP_CA_FILE = config2.mcpDirectTransport.caFile;
42877
+ }
42793
42878
  return result2;
42794
42879
  };
42795
42880
  serviceBootstrapArguments = (bootstrapScript, manifestPath, lockPath) => [
@@ -44725,6 +44810,7 @@ Durable service:
44725
44810
  });
44726
44811
  const dependencies = createDefaultInferenceHostRunnerDependencies({
44727
44812
  apiUrl: options.config.apiUrl,
44813
+ directTransport: options.config.mcpDirectTransport,
44728
44814
  statePath: options.config.statePath,
44729
44815
  processLockPath: options.config.processLockPath,
44730
44816
  credentialStore: options.credentialStore,
@@ -44792,6 +44878,7 @@ Durable service:
44792
44878
  }
44793
44879
  const dependencies = createDefaultInferenceHostRunnerDependencies({
44794
44880
  apiUrl: options.config.apiUrl,
44881
+ directTransport: options.config.mcpDirectTransport,
44795
44882
  statePath: options.config.statePath,
44796
44883
  processLockPath: options.config.processLockPath,
44797
44884
  credentialStore: options.credentialStore,
@@ -47821,7 +47908,7 @@ var init_client = __esm({
47821
47908
  import {
47822
47909
  chmodSync,
47823
47910
  mkdirSync,
47824
- readFileSync as readFileSync2,
47911
+ readFileSync as readFileSync3,
47825
47912
  renameSync,
47826
47913
  unlinkSync,
47827
47914
  writeFileSync
@@ -47876,7 +47963,7 @@ var init_protection_storage = __esm({
47876
47963
  }
47877
47964
  readValues() {
47878
47965
  try {
47879
- return parseStoredValues(readFileSync2(this.path, "utf8"), this.path);
47966
+ return parseStoredValues(readFileSync3(this.path, "utf8"), this.path);
47880
47967
  } catch (error48) {
47881
47968
  if (error48.code === "ENOENT") return {};
47882
47969
  throw error48;
@@ -47896,7 +47983,7 @@ var init_protection_storage = __esm({
47896
47983
  chmodSync(temporaryPath, 384);
47897
47984
  renameSync(temporaryPath, this.path);
47898
47985
  chmodSync(this.path, 384);
47899
- if (readFileSync2(this.path, "utf8") !== serialized) {
47986
+ if (readFileSync3(this.path, "utf8") !== serialized) {
47900
47987
  throw new Error("Headless protection state readback did not match the durable write.");
47901
47988
  }
47902
47989
  } catch (error48) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.9.49",
3
+ "version": "2026.9.51",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -20,6 +20,7 @@
20
20
  "node": "^22.19.0 || >=24.0.0"
21
21
  },
22
22
  "dependencies": {
23
+ "undici": "8.10.0",
23
24
  "@openai/codex": "0.153.3",
24
25
  "@earendil-works/pi-coding-agent": "0.85.1",
25
26
  "@earendil-works/pi-ai": "0.85.1",