@vtxmacro/cli 2026.8.17 → 2026.8.18

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.
Files changed (2) hide show
  1. package/bin/vtx.js +23 -6
  2. package/package.json +1 -1
package/bin/vtx.js CHANGED
@@ -38,7 +38,7 @@ var init_agent_cli_release = __esm({
38
38
  "agent-cli-release.json"() {
39
39
  agent_cli_release_default = {
40
40
  package_name: "@vtxmacro/cli",
41
- package_version: "2026.8.17",
41
+ package_version: "2026.8.18",
42
42
  codex_package_name: "@openai/codex",
43
43
  codex_version: "0.147.0",
44
44
  platforms: {
@@ -17403,11 +17403,13 @@ var init_mcp_client = __esm({
17403
17403
  }).passthrough().parse(rawResult);
17404
17404
  if (callResult.isError === true) {
17405
17405
  const errorText = (callResult.content ?? []).filter((block) => block.type === "text").map((block) => block.text ?? "").join("\n");
17406
- const definitivelyNotApplied = (name === "inference.host.register" || name === "inference.host.advertise") && (errorText.includes("Advertisement time is outside the allowed clock skew.") || errorText.includes("Advertisement is already expired.")) || (name === "inference.agent.next" || name === "inference.agent.heartbeat") && (errorText.includes("Advertisement time is outside the allowed clock skew.") || errorText.includes("Advertisement is already expired.") || errorText.includes("Heartbeat time is outside the allowed clock skew.")) || name === "inference.job.claim" && (errorText.includes(
17406
+ const definitivelyNotApplied = (name === "inference.host.register" || name === "inference.host.advertise") && (errorText.includes("Advertisement time is outside the allowed clock skew.") || errorText.includes("Advertisement is already expired.")) || (name === "inference.agent.next" || name === "inference.agent.heartbeat") && (errorText.includes("Advertisement time is outside the allowed clock skew.") || errorText.includes("Advertisement is already expired.") || errorText.includes("Heartbeat time is outside the allowed clock skew.")) || name === "inference.host.heartbeat" && errorText.includes("Heartbeat time is outside the allowed clock skew.") || name === "inference.job.claim" && (errorText.includes(
17407
17407
  "External inference claim request was not applied before its generation became stale"
17408
17408
  ) || errorText.includes("External inference host advertisement is expired or superseded"));
17409
17409
  const retryableInfrastructureRejection = EXTERNAL_INFERENCE_AUTOMATED_HOST_TOOLS.includes(name) && (errorText.includes("External inference polling is at its configured concurrency limit") || errorText.includes("The Insights action reached the response timeout") || errorText.includes("Insights capability failed without exposing private runtime details"));
17410
17410
  const retryableClaimRejection = name === "inference.job.claim" && !definitivelyNotApplied && (retryableInfrastructureRejection || errorText.includes("External inference host is not live enough to claim work") || errorText.includes("External inference host request generation is stale"));
17411
+ const retryableHeartbeatClockSkew = name === "inference.host.heartbeat" && definitivelyNotApplied;
17412
+ const retryableAdvertisementClockSkew = (name === "inference.host.register" || name === "inference.host.advertise") && definitivelyNotApplied;
17411
17413
  throw new ExternalInferenceMcpError(
17412
17414
  "tool_rejected",
17413
17415
  `Insights MCP rejected ${name}.`,
@@ -17417,7 +17419,7 @@ var init_mcp_client = __esm({
17417
17419
  // API rotation the MCP server can return a tool error after the
17418
17420
  // request reached the application boundary, so retain and replay
17419
17421
  // the exact request unless the server proves it was not applied.
17420
- retryable: retryableInfrastructureRejection || retryableClaimRejection
17422
+ retryable: retryableInfrastructureRejection || retryableClaimRejection || retryableHeartbeatClockSkew || retryableAdvertisementClockSkew
17421
17423
  }
17422
17424
  );
17423
17425
  }
@@ -28420,7 +28422,7 @@ var init_runner = __esm({
28420
28422
  return await operation();
28421
28423
  } catch (error48) {
28422
28424
  lastError = error48;
28423
- if (!retryableRemoteError(error48) || attempt === settings.remoteRetryLimit) throw error48;
28425
+ if (!retryableRemoteError(error48) || error48 instanceof ExternalInferenceMcpError && error48.definitivelyNotApplied || attempt === settings.remoteRetryLimit) throw error48;
28424
28426
  const requestedRetryDelay = remoteRetryAfterMs(
28425
28427
  error48,
28426
28428
  Math.min(250 * attempt, 1e3)
@@ -28521,7 +28523,7 @@ var init_runner = __esm({
28521
28523
  }
28522
28524
  const hostHeartbeat = async (status, requestOptions = {
28523
28525
  signal: this.options.signal
28524
- }, retryRemote = true, allowOfflineProjection = false) => {
28526
+ }, retryRemote = true, allowOfflineProjection = false, definitiveReseedAttempt = 0) => {
28525
28527
  const sequence = receipt.host_heartbeat_sequence + 1;
28526
28528
  const request = {
28527
28529
  schema_version: "external_inference_host_heartbeat_v1",
@@ -28547,7 +28549,22 @@ var init_runner = __esm({
28547
28549
  request,
28548
28550
  requestOptions
28549
28551
  );
28550
- const result2 = status === "draining" || !retryRemote ? await heartbeatOperation() : await retryExact(heartbeatOperation, requestOptions);
28552
+ let result2;
28553
+ try {
28554
+ result2 = status === "draining" || !retryRemote ? await heartbeatOperation() : await retryExact(heartbeatOperation, requestOptions);
28555
+ } catch (error48) {
28556
+ if (status !== "draining" && retryRemote && error48 instanceof ExternalInferenceMcpError && error48.definitivelyNotApplied && error48.retryable && definitiveReseedAttempt < settings.remoteRetryLimit - 1) {
28557
+ await sleep4(remoteRetryAfterMs(error48, MIN_SLEEP_MS), requestOptions.signal);
28558
+ return await hostHeartbeat(
28559
+ status,
28560
+ requestOptions,
28561
+ retryRemote,
28562
+ allowOfflineProjection,
28563
+ definitiveReseedAttempt + 1
28564
+ );
28565
+ }
28566
+ throw error48;
28567
+ }
28551
28568
  assertHostHeartbeatResult(request, result2, allowOfflineProjection);
28552
28569
  if (result2.host.status === "revoked" || result2.host.status === "offline" && !allowOfflineProjection) {
28553
28570
  const error48 = new InferenceHostRunnerError(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.8.17",
3
+ "version": "2026.8.18",
4
4
  "description": "VTX Macro CLI, MCP server, and foreground subscription inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",