@vtxmacro/cli 2026.9.67 → 2026.9.68

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.67",
19
+ package_version: "2026.9.68",
20
20
  codex_package_name: "@openai/codex",
21
21
  codex_version: "0.155.0",
22
22
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -133,6 +133,14 @@ var runtime_policy_generated_default = {
133
133
  min_delay_milliseconds: 250,
134
134
  max_delay_milliseconds: 1e4
135
135
  },
136
+ trade_refresh_policy: {
137
+ server_config_stream_timeout_ms: 1e4,
138
+ config_retry_interval_ms: 5e3,
139
+ copy_trading_status_poll_ms: 5e3,
140
+ post_execution_refresh_delay_ms: 3e3,
141
+ account_read_backoff_min_ms: 2e3,
142
+ account_read_backoff_max_ms: 6e4
143
+ },
136
144
  deployment_reload_observability: {
137
145
  bootstrap_max_error_events_per_page: 4,
138
146
  bootstrap_max_profiles: 10
@@ -210,10 +218,12 @@ var runtime_policy_generated_default = {
210
218
  },
211
219
  server_runtime: {
212
220
  prompt_rescue: {
221
+ request_ttl_seconds: 20,
213
222
  snapshot_max_age_seconds: 5,
214
223
  snapshot_component_max_skew_seconds: 2,
215
- client_long_poll_seconds: 20,
216
- client_claim_http_timeout_milliseconds: 25e3,
224
+ client_claim_http_timeout_milliseconds: 5e3,
225
+ client_claim_retry_delay_milliseconds: 1e3,
226
+ client_failure_report_timeout_milliseconds: 2e3,
217
227
  client_presence_heartbeat_interval_milliseconds: 3e4,
218
228
  client_presence_http_timeout_milliseconds: 5e3
219
229
  }
@@ -16,6 +16,14 @@ var runtime_policy_generated_default = {
16
16
  min_delay_milliseconds: 250,
17
17
  max_delay_milliseconds: 1e4
18
18
  },
19
+ trade_refresh_policy: {
20
+ server_config_stream_timeout_ms: 1e4,
21
+ config_retry_interval_ms: 5e3,
22
+ copy_trading_status_poll_ms: 5e3,
23
+ post_execution_refresh_delay_ms: 3e3,
24
+ account_read_backoff_min_ms: 2e3,
25
+ account_read_backoff_max_ms: 6e4
26
+ },
19
27
  deployment_reload_observability: {
20
28
  bootstrap_max_error_events_per_page: 4,
21
29
  bootstrap_max_profiles: 10
@@ -93,10 +101,12 @@ var runtime_policy_generated_default = {
93
101
  },
94
102
  server_runtime: {
95
103
  prompt_rescue: {
104
+ request_ttl_seconds: 20,
96
105
  snapshot_max_age_seconds: 5,
97
106
  snapshot_component_max_skew_seconds: 2,
98
- client_long_poll_seconds: 20,
99
- client_claim_http_timeout_milliseconds: 25e3,
107
+ client_claim_http_timeout_milliseconds: 5e3,
108
+ client_claim_retry_delay_milliseconds: 1e3,
109
+ client_failure_report_timeout_milliseconds: 2e3,
100
110
  client_presence_heartbeat_interval_milliseconds: 3e4,
101
111
  client_presence_http_timeout_milliseconds: 5e3
102
112
  }
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.67",
80
+ package_version: "2026.9.68",
81
81
  codex_package_name: "@openai/codex",
82
82
  codex_version: "0.155.0",
83
83
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -15727,6 +15727,8 @@ var init_external_inference_contract = __esm({
15727
15727
  }
15728
15728
  });
15729
15729
  providerWeeklyQuotaReadSchema = external_exports.strictObject({
15730
+ credits_available: external_exports.boolean().nullable().optional(),
15731
+ rate_limit_reached: external_exports.boolean().nullable().optional(),
15730
15732
  source: external_exports.literal("codex_app_server"),
15731
15733
  used_percent: external_exports.number().finite().min(0).max(1e6),
15732
15734
  resets_at: timestampSchema,
@@ -20516,6 +20518,14 @@ var init_runtime_policy_generated = __esm({
20516
20518
  min_delay_milliseconds: 250,
20517
20519
  max_delay_milliseconds: 1e4
20518
20520
  },
20521
+ trade_refresh_policy: {
20522
+ server_config_stream_timeout_ms: 1e4,
20523
+ config_retry_interval_ms: 5e3,
20524
+ copy_trading_status_poll_ms: 5e3,
20525
+ post_execution_refresh_delay_ms: 3e3,
20526
+ account_read_backoff_min_ms: 2e3,
20527
+ account_read_backoff_max_ms: 6e4
20528
+ },
20519
20529
  deployment_reload_observability: {
20520
20530
  bootstrap_max_error_events_per_page: 4,
20521
20531
  bootstrap_max_profiles: 10
@@ -20593,10 +20603,12 @@ var init_runtime_policy_generated = __esm({
20593
20603
  },
20594
20604
  server_runtime: {
20595
20605
  prompt_rescue: {
20606
+ request_ttl_seconds: 20,
20596
20607
  snapshot_max_age_seconds: 5,
20597
20608
  snapshot_component_max_skew_seconds: 2,
20598
- client_long_poll_seconds: 20,
20599
- client_claim_http_timeout_milliseconds: 25e3,
20609
+ client_claim_http_timeout_milliseconds: 5e3,
20610
+ client_claim_retry_delay_milliseconds: 1e3,
20611
+ client_failure_report_timeout_milliseconds: 2e3,
20600
20612
  client_presence_heartbeat_interval_milliseconds: 3e4,
20601
20613
  client_presence_http_timeout_milliseconds: 5e3
20602
20614
  }
@@ -21464,6 +21476,7 @@ var init_mcp_client = __esm({
21464
21476
  #requestId = 0;
21465
21477
  #initialized = false;
21466
21478
  #providerQuotaRecoverySupported = false;
21479
+ #providerCreditsSupported = false;
21467
21480
  #runtimeRecoveryDiagnosticsSupported = false;
21468
21481
  #providerHttpStatusTools = /* @__PURE__ */ new Set();
21469
21482
  #grokToolValidationTools = /* @__PURE__ */ new Set();
@@ -21510,6 +21523,9 @@ var init_mcp_client = __esm({
21510
21523
  supportsRuntimeRecoveryDiagnostics() {
21511
21524
  return this.#runtimeRecoveryDiagnosticsSupported;
21512
21525
  }
21526
+ supportsProviderCredits() {
21527
+ return this.#providerCreditsSupported;
21528
+ }
21513
21529
  supportsProviderQuotaRecovery() {
21514
21530
  return this.#providerQuotaRecoverySupported;
21515
21531
  }
@@ -21572,6 +21588,21 @@ var init_mcp_client = __esm({
21572
21588
  "inference.host.heartbeat",
21573
21589
  ["provider_quota_recovery"]
21574
21590
  ) && advertisesFields("inference.job.fail", ["provider_retry_at", "provider_retry_source"]);
21591
+ const hostHeartbeatSchema = listed.tools.find(
21592
+ (tool) => tool.name === "inference.host.heartbeat"
21593
+ )?.inputSchema;
21594
+ const advertisesCredits = (value, depth = 0) => {
21595
+ if (depth > 4 || !value || typeof value !== "object" || Array.isArray(value)) return false;
21596
+ const node = value;
21597
+ const properties = node.properties;
21598
+ if (properties && typeof properties === "object" && Object.hasOwn(properties, "credits_available") && Object.hasOwn(properties, "rate_limit_reached")) return true;
21599
+ if (typeof node.$ref === "string" && /^#\/\$defs\/[^/]+$/u.test(node.$ref)) {
21600
+ const definition = node.$ref.slice("#/$defs/".length).replace(/~1/gu, "/").replace(/~0/gu, "~");
21601
+ return advertisesCredits(hostHeartbeatSchema?.$defs?.[definition], depth + 1);
21602
+ }
21603
+ return Array.isArray(node.anyOf) && node.anyOf.some((branch) => advertisesCredits(branch, depth + 1));
21604
+ };
21605
+ this.#providerCreditsSupported = advertisesCredits(hostHeartbeatSchema?.properties?.provider_weekly_quota);
21575
21606
  this.#grokToolValidationTools.clear();
21576
21607
  if (advertisesFields("inference.job.fail", ["grok_tool_validation"])) {
21577
21608
  this.#grokToolValidationTools.add("inference.job.fail");
@@ -28355,7 +28386,7 @@ async function logoutCodexSubscription(options) {
28355
28386
  await session.close();
28356
28387
  }
28357
28388
  }
28358
- var CODEX_INFERENCE_PERMISSION_PROFILE, CODEX_AGENT_PERMISSION_PROFILE, CODEX_REASONING_CONTENT_MAX_UTF8_BYTES, CODEX_REASONING_SUMMARY_MAX_UTF8_BYTES, CODEX_ACCOUNT_PLAN_TYPES, CODEX_AGENT_DYNAMIC_TOOLS, CodexAppServerError, objectOrNull, finiteToken, tokenUsageFromBreakdown, usageFromNotification, validPlanType, nonnegativeSafeIntegerOrNull, nonnegativeFiniteNumberOrNull, parseRateLimitWindow, RATE_LIMIT_REACHED_TYPES, DEFAULT_CODEX_QUOTA_COOLDOWN_MS, MAX_CODEX_QUOTA_COOLDOWN_MS, CODEX_TRANSIENT_RATE_LIMIT_COOLDOWN_MS, parseRateLimitSnapshot, codexRateLimitRetryAtMs, codexAccountRateLimitReached, forbiddenMethod, forbiddenTerminalItem, forbiddenAgentMethod, forbiddenAgentTerminalItem, createCodexAgentToolSpecs, classifyCodexTurnFailure, scrubbedCodexEnvironment, killWindowsProcessTree, appServerArgs, GUARDIAN_SCRIPT, WINDOWS_RECEIPT_REPLACE_ERROR_CODES, MAX_RETIRED_RESPONSE_IDS, LATE_RESPONSE_SAFE_METHODS, replaceCodexGuardianReceiptFile, writeCodexGuardianSpawnIntent, parseGuardianReceipt, readCodexGuardianReceipt, waitForCodexGuardianState, defaultSpawn, CodexAppServerSession;
28389
+ var CODEX_INFERENCE_PERMISSION_PROFILE, CODEX_AGENT_PERMISSION_PROFILE, CODEX_REASONING_CONTENT_MAX_UTF8_BYTES, CODEX_REASONING_SUMMARY_MAX_UTF8_BYTES, CODEX_ACCOUNT_PLAN_TYPES, CODEX_AGENT_DYNAMIC_TOOLS, CodexAppServerError, objectOrNull, finiteToken, tokenUsageFromBreakdown, usageFromNotification, validPlanType, nonnegativeSafeIntegerOrNull, nonnegativeFiniteNumberOrNull, parseRateLimitWindow, RATE_LIMIT_REACHED_TYPES, DEFAULT_CODEX_QUOTA_COOLDOWN_MS, MAX_CODEX_QUOTA_COOLDOWN_MS, CODEX_TRANSIENT_RATE_LIMIT_COOLDOWN_MS, parseCreditsSnapshot, codexCreditsAvailable, parseRateLimitSnapshot, codexRateLimitRetryAtMs, codexAccountRateLimitReached, forbiddenMethod, forbiddenTerminalItem, forbiddenAgentMethod, forbiddenAgentTerminalItem, createCodexAgentToolSpecs, classifyCodexTurnFailure, scrubbedCodexEnvironment, killWindowsProcessTree, appServerArgs, GUARDIAN_SCRIPT, WINDOWS_RECEIPT_REPLACE_ERROR_CODES, MAX_RETIRED_RESPONSE_IDS, LATE_RESPONSE_SAFE_METHODS, replaceCodexGuardianReceiptFile, writeCodexGuardianSpawnIntent, parseGuardianReceipt, readCodexGuardianReceipt, waitForCodexGuardianState, defaultSpawn, CodexAppServerSession;
28359
28390
  var init_codex_app_server = __esm({
28360
28391
  "lib/inference-host/codex-app-server.ts"() {
28361
28392
  "use strict";
@@ -28470,6 +28501,19 @@ var init_codex_app_server = __esm({
28470
28501
  DEFAULT_CODEX_QUOTA_COOLDOWN_MS = 5 * 60 * 1e3;
28471
28502
  MAX_CODEX_QUOTA_COOLDOWN_MS = 8 * 24 * 60 * 60 * 1e3;
28472
28503
  CODEX_TRANSIENT_RATE_LIMIT_COOLDOWN_MS = 30 * 1e3;
28504
+ parseCreditsSnapshot = (value) => {
28505
+ const candidate = objectOrNull(value);
28506
+ if (!candidate || typeof candidate.hasCredits !== "boolean" || typeof candidate.unlimited !== "boolean" || candidate.balance != null && typeof candidate.balance !== "string") return null;
28507
+ return {
28508
+ hasCredits: candidate.hasCredits,
28509
+ unlimited: candidate.unlimited,
28510
+ balance: candidate.balance ?? null
28511
+ };
28512
+ };
28513
+ codexCreditsAvailable = (snapshot) => {
28514
+ const credits = parseCreditsSnapshot(snapshot.credits);
28515
+ return credits !== null && (credits.hasCredits || credits.unlimited);
28516
+ };
28473
28517
  parseRateLimitSnapshot = (value) => {
28474
28518
  const candidate = objectOrNull(value);
28475
28519
  if (!candidate) throw new Error("invalid rate-limit snapshot");
@@ -28483,6 +28527,7 @@ var init_codex_app_server = __esm({
28483
28527
  limitId,
28484
28528
  limitName,
28485
28529
  planType,
28530
+ credits: parseCreditsSnapshot(candidate.credits),
28486
28531
  primary: parseRateLimitWindow(candidate.primary ?? null),
28487
28532
  secondary: parseRateLimitWindow(candidate.secondary ?? null),
28488
28533
  rateLimitReachedType: reached,
@@ -28490,6 +28535,7 @@ var init_codex_app_server = __esm({
28490
28535
  };
28491
28536
  };
28492
28537
  codexRateLimitRetryAtMs = (accountRateLimits) => {
28538
+ if (!codexAccountRateLimitReached(accountRateLimits)) return null;
28493
28539
  const snapshots = [accountRateLimits.rateLimits];
28494
28540
  const exhaustedResets = [];
28495
28541
  const reachedResets = [];
@@ -28510,7 +28556,12 @@ var init_codex_app_server = __esm({
28510
28556
  const candidates = exhaustedResets.length > 0 ? exhaustedResets : reachedResets.length > 0 ? reachedResets : [];
28511
28557
  return candidates.length > 0 ? Math.max(...candidates) : null;
28512
28558
  };
28513
- codexAccountRateLimitReached = (accountRateLimits) => [accountRateLimits.rateLimits].some((snapshot) => snapshot.rateLimitReachedType !== null || snapshot.spendControlReached === true || snapshot.primary?.usedPercent !== void 0 && snapshot.primary.usedPercent >= 100 || snapshot.secondary?.usedPercent !== void 0 && snapshot.secondary.usedPercent >= 100);
28559
+ codexAccountRateLimitReached = (accountRateLimits) => [accountRateLimits.rateLimits].some((snapshot) => (
28560
+ // The account snapshot reports generic included-usage exhaustion even when
28561
+ // purchased credits remain. Workspace restrictions are distinct hard stops;
28562
+ // actual turn failures remain authoritative in classifyCodexTurnFailure.
28563
+ snapshot.rateLimitReachedType !== null && (snapshot.rateLimitReachedType !== "rate_limit_reached" || !codexCreditsAvailable(snapshot)) || snapshot.spendControlReached === true || !codexCreditsAvailable(snapshot) && (snapshot.primary?.usedPercent !== void 0 && snapshot.primary.usedPercent >= 100 || snapshot.secondary?.usedPercent !== void 0 && snapshot.secondary.usedPercent >= 100)
28564
+ ));
28514
28565
  forbiddenMethod = (method) => method.startsWith("mcpServer/") || method.startsWith("serverRequest/") || method.startsWith("item/mcpToolCall") || method.startsWith("item/commandExecution") || method.startsWith("item/fileChange") || method.startsWith("item/dynamicToolCall") || method.startsWith("item/collabAgentToolCall");
28515
28566
  forbiddenTerminalItem = (item) => ![
28516
28567
  "userMessage",
@@ -31514,12 +31565,16 @@ var init_runner = __esm({
31514
31565
  started_at: startedAt
31515
31566
  });
31516
31567
  isoAt = (milliseconds) => new Date(milliseconds).toISOString();
31517
- providerWeeklyQuotaFromRateLimits = (rateLimits, observedAtMs, currentTimeMs = observedAtMs) => {
31568
+ providerWeeklyQuotaFromRateLimits = (rateLimits, observedAtMs, currentTimeMs = observedAtMs, includeCredits = true) => {
31518
31569
  if (!rateLimits) return null;
31519
31570
  for (const window2 of [rateLimits.rateLimits.primary, rateLimits.rateLimits.secondary]) {
31520
31571
  if (window2?.windowDurationMins !== 7 * 24 * 60 || window2.resetsAt === null || window2.resetsAt * 1e3 <= currentTimeMs) continue;
31521
31572
  return {
31522
31573
  source: "codex_app_server",
31574
+ ...includeCredits ? {
31575
+ credits_available: codexCreditsAvailable(rateLimits.rateLimits),
31576
+ rate_limit_reached: codexAccountRateLimitReached(rateLimits)
31577
+ } : {},
31523
31578
  used_percent: window2.usedPercent,
31524
31579
  resets_at: isoAt(window2.resetsAt * 1e3),
31525
31580
  observed_at: isoAt(observedAtMs)
@@ -31531,7 +31586,7 @@ var init_runner = __esm({
31531
31586
  const window2 = rateLimits.rateLimits[key];
31532
31587
  const known = previous?.[key];
31533
31588
  if (known && (!window2 || window2.windowDurationMins !== known.windowDurationMins)) return false;
31534
- return window2 === null || window2.resetsAt !== null && window2.resetsAt * 1e3 > nowMs && window2.usedPercent < 100;
31589
+ return window2 === null || window2.resetsAt !== null && window2.resetsAt * 1e3 > nowMs && (window2.usedPercent < 100 || codexCreditsAvailable(rateLimits.rateLimits));
31535
31590
  });
31536
31591
  finitePositiveOption = (value, fallback, label) => {
31537
31592
  const result2 = value ?? fallback;
@@ -32563,7 +32618,8 @@ var init_runner = __esm({
32563
32618
  provider_weekly_quota: providerWeeklyQuotaFromRateLimits(
32564
32619
  providerRateLimits,
32565
32620
  providerRateLimitsObservedAtMs,
32566
- now()
32621
+ now(),
32622
+ mcp.supportsProviderCredits?.() === true
32567
32623
  ),
32568
32624
  ...mcp.supportsProviderQuotaRecovery?.() === true && providerQuotaRecoveryObservedAtMs !== null && status === "healthy" && active.size === 0 && (providerRetryAtMs ?? 0) <= now() && providerFailureRetryAtMs <= now() && now() - providerQuotaRecoveryObservedAtMs <= 2 * settings.providerRateLimitRefreshMs && providerRateLimits !== null && usableProviderQuotaSnapshot(providerRateLimits, knownProviderQuotaSnapshot, now()) ? { provider_quota_recovery: {
32569
32625
  source: "codex_app_server",
@@ -33181,14 +33237,7 @@ var init_runner = __esm({
33181
33237
  providerRetryAtMs = Math.max(providerRetryAtMs ?? 0, refreshedRetryAt);
33182
33238
  providerCooldownReason = "provider_limit_snapshot";
33183
33239
  retainQuotaSnapshot(providerRateLimits);
33184
- } else if (providerRetryAtMs !== null && !codexAccountRateLimitReached(providerRateLimits) && providerRateLimits.rateLimits.limitId === providerQuotaSnapshot?.limitId && [providerRateLimits.rateLimits.primary, providerRateLimits.rateLimits.secondary].some((window2) => window2 !== null) && ["primary", "secondary"].every((key) => {
33185
- const window2 = refreshedRateLimits.rateLimits[key];
33186
- const previous = providerQuotaSnapshot?.[key];
33187
- if (previous && (!window2 || window2.windowDurationMins !== previous.windowDurationMins)) {
33188
- return false;
33189
- }
33190
- return window2 === null || window2.resetsAt !== null && window2.resetsAt * 1e3 > refreshedAt && window2.usedPercent < 100;
33191
- })) {
33240
+ } else if (providerRetryAtMs !== null && usableProviderQuotaSnapshot(providerRateLimits, providerQuotaSnapshot, refreshedAt)) {
33192
33241
  emitDiagnostic("provider_cooldown_cleared", {
33193
33242
  reason: providerCooldownReason,
33194
33243
  recovery: "provider_quota_restored",
@@ -42642,6 +42691,14 @@ var init_runtime_policy_generated2 = __esm({
42642
42691
  min_delay_milliseconds: 250,
42643
42692
  max_delay_milliseconds: 1e4
42644
42693
  },
42694
+ trade_refresh_policy: {
42695
+ server_config_stream_timeout_ms: 1e4,
42696
+ config_retry_interval_ms: 5e3,
42697
+ copy_trading_status_poll_ms: 5e3,
42698
+ post_execution_refresh_delay_ms: 3e3,
42699
+ account_read_backoff_min_ms: 2e3,
42700
+ account_read_backoff_max_ms: 6e4
42701
+ },
42645
42702
  deployment_reload_observability: {
42646
42703
  bootstrap_max_error_events_per_page: 4,
42647
42704
  bootstrap_max_profiles: 10
@@ -42719,10 +42776,12 @@ var init_runtime_policy_generated2 = __esm({
42719
42776
  },
42720
42777
  server_runtime: {
42721
42778
  prompt_rescue: {
42779
+ request_ttl_seconds: 20,
42722
42780
  snapshot_max_age_seconds: 5,
42723
42781
  snapshot_component_max_skew_seconds: 2,
42724
- client_long_poll_seconds: 20,
42725
- client_claim_http_timeout_milliseconds: 25e3,
42782
+ client_claim_http_timeout_milliseconds: 5e3,
42783
+ client_claim_retry_delay_milliseconds: 1e3,
42784
+ client_failure_report_timeout_milliseconds: 2e3,
42726
42785
  client_presence_heartbeat_interval_milliseconds: 3e4,
42727
42786
  client_presence_http_timeout_milliseconds: 5e3
42728
42787
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.9.67",
3
+ "version": "2026.9.68",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",