@vtxmacro/cli 2026.9.54 → 2026.9.55

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.54",
19
+ package_version: "2026.9.55",
20
20
  codex_package_name: "@openai/codex",
21
21
  codex_version: "0.155.0",
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.54",
80
+ package_version: "2026.9.55",
81
81
  codex_package_name: "@openai/codex",
82
82
  codex_version: "0.155.0",
83
83
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -21519,7 +21519,8 @@ var init_mcp_client = __esm({
21519
21519
  this.#initialized = true;
21520
21520
  }
21521
21521
  async callTool(name, argumentsValue, options = {}) {
21522
- const timing = name === "inference.job.claim" && options.onClaimTiming ? new ClaimTiming() : void 0;
21522
+ const timingObserver = name === "inference.job.claim" ? options.onClaimTiming : name === "inference.host.heartbeat" ? options.onHostHeartbeatTiming : void 0;
21523
+ const timing = timingObserver ? new ClaimTiming() : void 0;
21523
21524
  let outcome = "failure";
21524
21525
  try {
21525
21526
  if (!this.#initialized) {
@@ -21598,7 +21599,7 @@ var init_mcp_client = __esm({
21598
21599
  if (timing) {
21599
21600
  const receipt = Object.freeze({ ...timing.finish(outcome), transport_route: this.#transport.route });
21600
21601
  try {
21601
- void Promise.resolve(options.onClaimTiming?.(receipt)).catch(() => void 0);
21602
+ void Promise.resolve(timingObserver?.(receipt)).catch(() => void 0);
21602
21603
  } catch {
21603
21604
  }
21604
21605
  }
@@ -32615,6 +32616,39 @@ var init_runner = __esm({
32615
32616
  };
32616
32617
  const hostHeartbeatAbort = new AbortController();
32617
32618
  stopHostHeartbeatLoop = () => hostHeartbeatAbort.abort();
32619
+ const backgroundHostHeartbeat = async (advertisementGeneration, allowOfflineProjection, deadlineAtMs) => {
32620
+ const startedAt = performance.now();
32621
+ let clientTiming;
32622
+ try {
32623
+ await hostHeartbeat("healthy", {
32624
+ signal: hostHeartbeatAbort.signal,
32625
+ // A liveness request must not inherit the general MCP timeout,
32626
+ // which can exceed the server's host-staleness window. Generation
32627
+ // recovery shares this deadline with its first attempt.
32628
+ timeoutMs: settings.hostHeartbeatMs,
32629
+ deadlineAtMs,
32630
+ onHostHeartbeatTiming: (timing) => {
32631
+ clientTiming = timing;
32632
+ }
32633
+ }, false, allowOfflineProjection, 0, advertisementGeneration);
32634
+ } catch (error48) {
32635
+ if (!hostHeartbeatAbort.signal.aborted && !drainRequested) {
32636
+ emitDiagnostic("host_heartbeat_request_failed", {
32637
+ elapsed_ms: Math.max(0, Math.round(performance.now() - startedAt)),
32638
+ request_timeout_ms: settings.hostHeartbeatMs,
32639
+ advertisement_generation: advertisementGeneration,
32640
+ failure_code: safeFailureCode(
32641
+ error48 instanceof ExternalInferenceMcpError ? error48.code : "",
32642
+ "heartbeat_failed"
32643
+ ),
32644
+ http_status_code: error48 instanceof ExternalInferenceMcpError ? error48.httpStatusCode : null,
32645
+ retry_after_ms: error48 instanceof ExternalInferenceMcpError ? error48.retryAfterMs : null,
32646
+ ...clientTiming ? { client_timing: clientTiming } : {}
32647
+ });
32648
+ }
32649
+ throw error48;
32650
+ }
32651
+ };
32618
32652
  let nextHostHeartbeatAt = now() + settings.hostHeartbeatMs;
32619
32653
  hostHeartbeatLoop = (async () => {
32620
32654
  while (!drainRequested && !hostHeartbeatAbort.signal.aborted) {
@@ -32643,19 +32677,16 @@ var init_runner = __esm({
32643
32677
  }
32644
32678
  }
32645
32679
  if (drainRequested || hostHeartbeatAbort.signal.aborted) return;
32646
- const heartbeatAttemptedAt = now();
32680
+ const heartbeatDeadlineAtMs = Date.now() + settings.hostHeartbeatMs;
32647
32681
  const attemptedAdvertisementGeneration = receipt.advertisement_generation;
32648
32682
  try {
32649
- await hostHeartbeat(
32650
- "healthy",
32651
- { signal: hostHeartbeatAbort.signal },
32652
- false,
32683
+ await backgroundHostHeartbeat(
32684
+ attemptedAdvertisementGeneration,
32653
32685
  // The server evaluates advertisement expiry when it receives
32654
32686
  // the heartbeat. A request sent just before expiry can therefore
32655
32687
  // truthfully return offline; the advertisement loop owns repair.
32656
32688
  true,
32657
- 0,
32658
- attemptedAdvertisementGeneration
32689
+ heartbeatDeadlineAtMs
32659
32690
  );
32660
32691
  } catch (error48) {
32661
32692
  if (hostHeartbeatAbort.signal.aborted || drainRequested) return;
@@ -32664,13 +32695,10 @@ var init_runner = __esm({
32664
32695
  const recoveryAdvertisementGeneration = receipt.advertisement_generation > attemptedAdvertisementGeneration ? receipt.advertisement_generation : errorCode === "generation_stale" && pendingAdvertisement && pendingAdvertisement.advertisement_generation === attemptedAdvertisementGeneration + 1 ? pendingAdvertisement.advertisement_generation : null;
32665
32696
  if (errorCode === "generation_stale" && recoveryAdvertisementGeneration !== null) {
32666
32697
  try {
32667
- await hostHeartbeat(
32668
- "healthy",
32669
- { signal: hostHeartbeatAbort.signal },
32670
- false,
32698
+ await backgroundHostHeartbeat(
32699
+ recoveryAdvertisementGeneration,
32671
32700
  false,
32672
- 0,
32673
- recoveryAdvertisementGeneration
32701
+ heartbeatDeadlineAtMs
32674
32702
  );
32675
32703
  if (receipt.advertisement_generation < recoveryAdvertisementGeneration) {
32676
32704
  await mutateReceipt((current) => current.advertisement_generation >= recoveryAdvertisementGeneration ? current : {
@@ -49839,6 +49867,8 @@ var init_network_debug = __esm({
49839
49867
  kind: input.kind,
49840
49868
  label: input.label,
49841
49869
  transport: "browser",
49870
+ providerTransport: input.kind === "provider" ? input.providerTransport ?? "direct" : null,
49871
+ actualRelayPath: input.kind === "provider" && input.providerTransport === "server_relay" ? "/llm/native-provider-relay" : null,
49842
49872
  method: (input.method || "POST").toUpperCase(),
49843
49873
  targetProtocol,
49844
49874
  targetHost,
@@ -92451,13 +92481,14 @@ var init_constraint_contract = __esm({
92451
92481
  });
92452
92482
 
92453
92483
  // lib/runtime/provider-observability.ts
92454
- var record4, identifier, count3, normalizeProviderDiagnostics;
92484
+ var MAX_DIAGNOSTIC_LIST_ITEMS, record4, identifier, count3, normalizeProviderDiagnostics;
92455
92485
  var init_provider_observability = __esm({
92456
92486
  "lib/runtime/provider-observability.ts"() {
92457
92487
  "use strict";
92458
92488
  init_define_VTX_EXO_POLICY();
92459
92489
  init_define_VTX_GROK_POLICY();
92460
92490
  init_define_VTX_PI_MODEL_POLICY();
92491
+ MAX_DIAGNOSTIC_LIST_ITEMS = 16;
92461
92492
  record4 = (v) => v !== null && typeof v === "object" && !Array.isArray(v) ? v : {};
92462
92493
  identifier = (v) => typeof v === "string" && /^[A-Za-z0-9][A-Za-z0-9_.:/-]{0,255}$/.test(v) ? v : void 0;
92463
92494
  count3 = (v) => {
@@ -92479,7 +92510,7 @@ var init_provider_observability = __esm({
92479
92510
  result2.quota_project_source = "provider_quota_subject";
92480
92511
  }
92481
92512
  if (Array.isArray(raw.quota_violations)) {
92482
- const violations = raw.quota_violations.slice(0, 16).map((item) => {
92513
+ const violations = raw.quota_violations.slice(0, MAX_DIAGNOSTIC_LIST_ITEMS).map((item) => {
92483
92514
  const v = record4(item);
92484
92515
  const out = {};
92485
92516
  const metric = identifier(v.metric), id2 = identifier(v.id), value2 = count3(v.value);
@@ -92493,6 +92524,11 @@ var init_provider_observability = __esm({
92493
92524
  }).filter((v) => Object.keys(v).length > 0);
92494
92525
  if (violations.length) result2.quota_violations = violations;
92495
92526
  }
92527
+ const outputValidation = record4(raw.output_validation);
92528
+ if (Array.isArray(outputValidation.expected_symbols)) {
92529
+ const symbols = outputValidation.expected_symbols.slice(0, MAX_DIAGNOSTIC_LIST_ITEMS).map(identifier).filter((symbol2) => symbol2 !== void 0);
92530
+ if (symbols.length) result2.output_validation = { expected_symbols: [...new Set(symbols)] };
92531
+ }
92496
92532
  return result2;
92497
92533
  };
92498
92534
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.9.54",
3
+ "version": "2026.9.55",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",