@vtxmacro/cli 2026.10.46 → 2026.10.47

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-mcp.js CHANGED
@@ -43,7 +43,7 @@ var init_define_VTX_PI_MODEL_POLICY = __esm({
43
43
  var agent_cli_release_default;
44
44
  var init_agent_cli_release = __esm({
45
45
  "agent-cli-release.json"() {
46
- agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.46", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
46
+ agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.47", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
47
47
  }
48
48
  });
49
49
 
@@ -14,7 +14,7 @@ import { dirname as dirname4, relative as relative4, resolve as resolve4 } from
14
14
  import { fileURLToPath } from "node:url";
15
15
 
16
16
  // agent-cli-release.json
17
- var agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.46", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
17
+ var agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.47", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
18
18
 
19
19
  // lib/runtime-policy.generated.json
20
20
  var runtime_policy_generated_default = {
package/bin/vtx.js CHANGED
@@ -122,7 +122,7 @@ var init_routing = __esm({
122
122
  var agent_cli_release_default;
123
123
  var init_agent_cli_release = __esm({
124
124
  "agent-cli-release.json"() {
125
- agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.46", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
125
+ agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.47", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
126
126
  }
127
127
  });
128
128
 
@@ -1514,7 +1514,7 @@ var init_runtime_policy_generated = __esm({
1514
1514
  });
1515
1515
 
1516
1516
  // lib/constants.ts
1517
- var MS_PER_SECOND, SECONDS_PER_MINUTE, MINUTES_PER_HOUR, HOURS_PER_DAY, DAYS_PER_WEEK, MS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, MINUTES_PER_DAY, MINUTES_PER_WEEK, MS_PER_HOUR, MS_PER_DAY, READ_STAMP_TIE_MS, READ_STAMP_STEP_BACK_MS, CLOCK_FIELD_DIGITS, BACKOFF_GROWTH_FACTOR, BYTES_PER_KIB, BYTES_PER_MIB, BITS_PER_BYTE, BYTE_MASK, OWNER_ONLY_FILE_MODE, OWNER_ONLY_DIRECTORY_MODE, GROUP_OTHER_PERMISSION_BITS, DECIMAL_RADIX, HEX_RADIX, BASE36_RADIX, BYTE_HEX_DIGITS, UINT32_HEX_DIGITS, RANDOM_FRACTION_PREFIX_LENGTH, PERCENT_SCALE, MIDPOINT_DIVISOR, SQUARE_EXPONENT, FNV1A_32_OFFSET_BASIS, FNV1A_32_PRIME, JSON_INDENT_SPACES, INT32_MIN, INT32_MAX, SET_TIMEOUT_MAX_DELAY_MS, POSITION_SIZE_EPSILON, CANDLE_TIMEFRAME_SECONDS, HTTP_STATUS, HTTP_STATUS_MIN, HTTP_STATUS_MAX, HTTP_CLIENT_ERROR_MIN, HTTP_SERVER_ERROR_MIN, PROMPT_RESCUE_ASKS_PER_CYCLE_BUILD, USD_DISPLAY_DECIMALS, AI_COST_ESTIMATE_PERIOD_DAYS, SECONDS_PER_AI_COST_ESTIMATE_PERIOD, DATE_FIELD_DIGITS, EXTERNAL_INFERENCE_LIMITS, NODE_ARGV_COMMAND_ARGS_START, EXIT_CODE_TEMPFAIL, SHA256_INITIAL_STATE, SHA256_ROUND_CONSTANTS, SHA256, UINT64_HIGH_WORD_DIVISOR, CANONICAL_BASE64URL, INFERENCE_ENVELOPE_CRYPTO, EXTERNAL_INFERENCE_SCHEMA_BOUNDS, JSON_RPC_ERROR_CODES, INFERENCE_MCP_SCHEMA_PROBE_MAX_DEPTH, INFERENCE_HOST_PROCESS_LOCK_RECORD_SCHEMA_VERSION, NATIVE_PROTECTION_RECORD_WITH_LOTS_VERSION, INFERENCE_HOST_RECLAIM_GUARD_CREATE_PASSES, LINUX_PROC_STAT_COMM_TERMINATOR_CHARS, INFERENCE_HOST_RANDOM_BYTES, INFERENCE_OAUTH_TOKEN_MAX_LENGTH, INFERENCE_CREDENTIAL_WINDOWS_NOT_FOUND_EXIT_CODE, MACOS_SECURITY_ITEM_NOT_FOUND_EXIT_CODE, INFERENCE_CREDENTIAL_LABEL_ACCOUNT_KEY_CHARS, INFERENCE_HOST_STABLE_OPERATION_ID_HASH_CHARS, INFERENCE_HOST_DRAIN_PRIORITY, INFERENCE_JOB_CLAIM_SCHEMA_VERSION, INFERENCE_HOST_WINDOWS_TASK_IDENTITY_MAX_CHARS, INFERENCE_HOST_OWNER_ONLY_EXECUTABLE_MODE, WINDOWS_TASKKILL_PROCESS_NOT_FOUND_EXIT_CODE, INFERENCE_HOST_CLI_MAX_SERVICE_POSITIONALS, INFERENCE_HOST_CLI_MAX_COMMAND_POSITIONALS, INFERENCE_HOST_DISPLAY_NAME_MAX_CHARS, INFERENCE_HOST_REVOCATION_CHECKPOINT_MAX_CHARS, INFERENCE_HOST_MODEL_ID_MAX_CHARS, CODEX_RECOVERY_RECEIPT_MAX_CHARS, CODEX_HOSTED_ATTEMPT_PATH_SEGMENTS, CODEX_GUARDIAN_PROCESS_TOKEN_BYTES, CODEX_RATE_LIMIT_EXHAUSTED_PERCENT, INFERENCE_HOST_PROXY_TOKEN_BYTES, AGENT_TOOL_SERVER_TOKEN_BYTES, GROK_NATIVE_SESSION_GROUP_NAME_MAX_CHARS, GROK_POLICY_TRANSPORT_MAX_BYTES, EXO_POLICY_MAX_TOOL_ROUNDS, EXO_POLICY_MAX_MODELS, EXO_POLICY_MODEL_NAME_MAX_CHARS, CLAUDE_CODE_POLICY_MAX_MODELS, CLAUDE_CODE_POLICY_MODEL_NAME_MAX_CHARS, CLAUDE_CODE_POLICY_MAX_TURNS, ANTHROPIC_SCHEMA_PROPERTY_NAME_MAX_CHARS, EXO_RUNTIME_VERSION_COMMIT_CHARS, PI_QUALIFIED_MODEL_ID_MAX_CHARS, PI_STRUCTURED_OUTPUT_MAX_DEPTH, PI_STRUCTURED_OUTPUT_MAX_PROPERTIES, INFERENCE_HOST_API_KEY_MIN_CHARS, INFERENCE_HOST_API_KEY_MAX_BYTES, INFERENCE_HOST_API_KEY_IDENTITY_HEX_CHARS, DEEPSEEK_HARNESS_NODE_LTS_MAJOR, DEEPSEEK_HARNESS_NODE_LTS_MIN_MINOR, DEEPSEEK_HARNESS_NODE_CURRENT_MAJOR, PROMPT_FIXED_DIGITS, PROMPT_SIGNIFICANT_DIGITS, PROMPT_NUMBER_MAX_DIGITS, PROMPT_RELATIVE_VOLUME_DIGITS, BINARY_RADIX, PROMPT_PRICE_INTEGER_THRESHOLD, PROMPT_MARGIN_UTILIZATION_DECIMALS, PROMPT_SYMBOL_MAX_CHARS, PROMPT_PARTIAL_UNIT_ROUND_UP_FRACTION, HALF_UP_ROUNDING_OFFSET, PROMPT_ENTRY_PRICE_MATCH_ABS_TOLERANCE, PROMPT_ENTRY_PRICE_MATCH_REL_TOLERANCE, DECISION_OUTPUT_EXAMPLE_TRADABILITY, INDICATOR_RSI_PERIOD, INDICATOR_ATR_PERIOD, INDICATOR_MACD_FAST_PERIOD, INDICATOR_MACD_SLOW_PERIOD, INDICATOR_MACD_SIGNAL_PERIOD, INDICATOR_BOLLINGER_PERIOD, INDICATOR_BOLLINGER_STD_DEV, INDICATOR_OSCILLATOR_MAX, EMA_SMOOTHING_NUMERATOR, PROMPT_EMA_PERIODS, JSON_UNICODE_ESCAPE_PREFIX_LENGTH, JSON_UNICODE_ESCAPE_HEX_DIGITS, JSON_CONTROL_CHARACTER_MAX, RUNTIME_DEBUG_SNIPPET_CHARS, RUNTIME_DEBUG_PROMPT_SNIPPET_CHARS, RUNTIME_DEBUG_TOKEN_PREFIX_CHARS, RUNTIME_DEBUG_USD_DECIMALS, REVIEW_FAILURE_DETAIL_MAX_CHARS, RUNTIME_LATENCY_SECONDS_DECIMALS, AI_SCHEDULE_CLOCK_PARTS, ESTIMATED_CHARS_PER_TOKEN, PROVIDER_ERROR_RAW_TEXT_MAX_CHARS, AI_CALL_COST_DECIMALS, PROVIDER_DIAGNOSTIC_LIMITS, AI_INVOCATION_CONTRACT_VERSION, AI_INVOCATION_TELEMETRY_LIMITS, PROVIDER_USAGE_DETAIL_LIMITS, HYPERLIQUID_EXCHANGE_SPECIFICATION, HYPERLIQUID_TPSL_BATCH_MIN_ORDERS, HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP, HYPERLIQUID_ROW_WEIGHTED_INFO_REQUESTS, HYPERLIQUID_INFO_ROWS_PER_EXTRA_WEIGHT, HYPERLIQUID_PUBLIC_READ_WINDOWS_KEPT, CLIENT_RUNTIME_NOTE_GAP_MAX_LOOPS, HYPERLIQUID_META_AND_ASSET_CTXS_PARTS, HYPERLIQUID_SIDE_PAIR_LENGTH, HYPERLIQUID_SIGNED_SIZE_MATCH_EXTRA_DECIMALS, HYPERLIQUID_OPEN_ORDERS_MAX_NESTING_DEPTH, ACCOUNT_PAYLOAD_MODE_SEARCH_MAX_DEPTH, HYPERLIQUID_ACCOUNT_ROUNDING_DECIMALS, HYPERLIQUID_UNREALIZED_PNL_ZERO_TOLERANCE, HYPERLIQUID_MAX_DEPLOYER_FEE_SCALE, HYPERLIQUID_DEPLOYER_FEE_SCALE_MULTIPLIER, HYPERLIQUID_GROWTH_MODE_FEE_FACTOR, HYPERLIQUID_ALIGNED_QUOTE_NON_DEPLOYER_FEE_FACTOR, HYPERLIQUID_CLOSE_SIZE_RELATIVE_TOLERANCE, HYPERLIQUID_POSITION_SIZE_MATCH_ABS_TOLERANCE, HYPERLIQUID_POSITION_SIZE_MATCH_RELATIVE_TOLERANCE, HYPERLIQUID_LOT_FLOOR_NOISE_DECIMALS, HYPERLIQUID_RECOVERY_BACKOFF_MAX_EXPONENT, HYPERLIQUID_RECOVERY_CONCURRENCY_GROWTH_FACTOR, UUID_BYTES, UUID_HEX_GROUP_ENDS, MSGPACK, CLIENT_RUNTIME_DEFAULT_RETRY_SECONDS, CLIENT_RUNTIME_PROVIDER_ATTEMPT_SUMMARY_MAX_CHARS, CLIENT_RUNTIME_HL_REQUEST_TYPE_MAX_CHARS, CLIENT_RUNTIME_DRAWDOWN_DEBUG_DECIMALS, CLIENT_PROTECTIVE_GROUP_VERSION, CLIENT_PROTECTIVE_TPSL_PAIR_LEGS, CLIENT_PROTECTIVE_FILL_MATCH_ABS_TOLERANCE, CLIENT_PROTECTIVE_FILL_MATCH_REL_TOLERANCE, CLIENT_CLOSE_FILL_EPSILON_ULPS, COPY_TRADING_SIZE_EPSILON, COPY_TRADING_RELATIVE_SIZE_TOLERANCE, COPY_TRADING_NOTIONAL_CAP_TOLERANCE_USD, CLIENT_ACCOUNT_PNL_NONZERO_MIN_USD, RUNTIME_PORTFOLIO_PERIOD_ENTRY_LENGTH, CLIENT_EXCHANGE_RECONCILIATION_MAX_DELAY_MS, RFC1918_172_BLOCK_SECOND_OCTET, AGENT_CLI_TAKEOVER_REQUIRED_EXIT_CODE, EXIT_CODE_INTERRUPTED, EXIT_CODE_SIGNAL_BASE, BYOK_PROVIDER_DISPLAY_ORDER_STEP, TOKENS_PER_MILLION, RENDER_DEBUG_ID_RANDOM_CHARS;
1517
+ var MS_PER_SECOND, SECONDS_PER_MINUTE, MINUTES_PER_HOUR, HOURS_PER_DAY, DAYS_PER_WEEK, MS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, MINUTES_PER_DAY, MINUTES_PER_WEEK, MS_PER_HOUR, MS_PER_DAY, READ_STAMP_TIE_MS, READ_STAMP_STEP_BACK_MS, CLOCK_FIELD_DIGITS, BACKOFF_GROWTH_FACTOR, BYTES_PER_KIB, BYTES_PER_MIB, BITS_PER_BYTE, BYTE_MASK, OWNER_ONLY_FILE_MODE, OWNER_ONLY_DIRECTORY_MODE, GROUP_OTHER_PERMISSION_BITS, DECIMAL_RADIX, HEX_RADIX, BASE36_RADIX, BYTE_HEX_DIGITS, UINT32_HEX_DIGITS, RANDOM_FRACTION_PREFIX_LENGTH, PERCENT_SCALE, MIDPOINT_DIVISOR, SQUARE_EXPONENT, FNV1A_32_OFFSET_BASIS, FNV1A_32_PRIME, JSON_INDENT_SPACES, INT32_MIN, INT32_MAX, SET_TIMEOUT_MAX_DELAY_MS, POSITION_SIZE_EPSILON, CANDLE_TIMEFRAME_SECONDS, HTTP_STATUS, HTTP_STATUS_MIN, HTTP_STATUS_MAX, HTTP_CLIENT_ERROR_MIN, HTTP_SERVER_ERROR_MIN, PROMPT_RESCUE_ASKS_PER_CYCLE_BUILD, USD_DISPLAY_DECIMALS, AI_COST_ESTIMATE_PERIOD_DAYS, SECONDS_PER_AI_COST_ESTIMATE_PERIOD, DATE_FIELD_DIGITS, EXTERNAL_INFERENCE_LIMITS, NODE_ARGV_COMMAND_ARGS_START, EXIT_CODE_TEMPFAIL, SHA256_INITIAL_STATE, SHA256_ROUND_CONSTANTS, SHA256, UINT64_HIGH_WORD_DIVISOR, CANONICAL_BASE64URL, INFERENCE_ENVELOPE_CRYPTO, EXTERNAL_INFERENCE_SCHEMA_BOUNDS, JSON_RPC_ERROR_CODES, INFERENCE_MCP_SCHEMA_PROBE_MAX_DEPTH, INFERENCE_HOST_PROCESS_LOCK_RECORD_SCHEMA_VERSION, NATIVE_PROTECTION_RECORD_WITH_LOTS_VERSION, INFERENCE_HOST_RECLAIM_GUARD_CREATE_PASSES, LINUX_PROC_STAT_COMM_TERMINATOR_CHARS, INFERENCE_HOST_RANDOM_BYTES, INFERENCE_OAUTH_TOKEN_MAX_LENGTH, INFERENCE_CREDENTIAL_WINDOWS_NOT_FOUND_EXIT_CODE, MACOS_SECURITY_ITEM_NOT_FOUND_EXIT_CODE, INFERENCE_CREDENTIAL_LABEL_ACCOUNT_KEY_CHARS, INFERENCE_HOST_STABLE_OPERATION_ID_HASH_CHARS, INFERENCE_HOST_DRAIN_PRIORITY, INFERENCE_JOB_CLAIM_SCHEMA_VERSION, INFERENCE_HOST_WINDOWS_TASK_IDENTITY_MAX_CHARS, INFERENCE_HOST_OWNER_ONLY_EXECUTABLE_MODE, WINDOWS_TASKKILL_PROCESS_NOT_FOUND_EXIT_CODE, INFERENCE_HOST_CLI_MAX_SERVICE_POSITIONALS, INFERENCE_HOST_CLI_MAX_COMMAND_POSITIONALS, INFERENCE_HOST_DISPLAY_NAME_MAX_CHARS, INFERENCE_HOST_REVOCATION_CHECKPOINT_MAX_CHARS, INFERENCE_HOST_MODEL_ID_MAX_CHARS, CODEX_RECOVERY_RECEIPT_MAX_CHARS, CODEX_HOSTED_ATTEMPT_PATH_SEGMENTS, CODEX_GUARDIAN_PROCESS_TOKEN_BYTES, CODEX_RATE_LIMIT_EXHAUSTED_PERCENT, INFERENCE_HOST_PROXY_TOKEN_BYTES, AGENT_TOOL_SERVER_TOKEN_BYTES, GROK_NATIVE_SESSION_GROUP_NAME_MAX_CHARS, GROK_POLICY_TRANSPORT_MAX_BYTES, EXO_POLICY_MAX_TOOL_ROUNDS, EXO_POLICY_MAX_MODELS, EXO_POLICY_MODEL_NAME_MAX_CHARS, CLAUDE_CODE_POLICY_MAX_MODELS, CLAUDE_CODE_POLICY_MODEL_NAME_MAX_CHARS, CLAUDE_CODE_POLICY_MAX_TURNS, ANTHROPIC_SCHEMA_PROPERTY_NAME_MAX_CHARS, EXO_RUNTIME_VERSION_COMMIT_CHARS, PI_QUALIFIED_MODEL_ID_MAX_CHARS, PI_STRUCTURED_OUTPUT_MAX_DEPTH, PI_STRUCTURED_OUTPUT_MAX_PROPERTIES, INFERENCE_HOST_API_KEY_MIN_CHARS, INFERENCE_HOST_API_KEY_MAX_BYTES, INFERENCE_HOST_API_KEY_IDENTITY_HEX_CHARS, DEEPSEEK_HARNESS_NODE_LTS_MAJOR, DEEPSEEK_HARNESS_NODE_LTS_MIN_MINOR, DEEPSEEK_HARNESS_NODE_CURRENT_MAJOR, PROMPT_FIXED_DIGITS, PROMPT_SIGNIFICANT_DIGITS, PROMPT_NUMBER_MAX_DIGITS, PROMPT_RELATIVE_VOLUME_DIGITS, BINARY_RADIX, PROMPT_PRICE_INTEGER_THRESHOLD, PROMPT_MARGIN_UTILIZATION_DECIMALS, PROMPT_SYMBOL_MAX_CHARS, PROMPT_PARTIAL_UNIT_ROUND_UP_FRACTION, HALF_UP_ROUNDING_OFFSET, PROMPT_ENTRY_PRICE_MATCH_ABS_TOLERANCE, PROMPT_ENTRY_PRICE_MATCH_REL_TOLERANCE, DECISION_OUTPUT_EXAMPLE_TRADABILITY, INDICATOR_RSI_PERIOD, INDICATOR_ATR_PERIOD, INDICATOR_MACD_FAST_PERIOD, INDICATOR_MACD_SLOW_PERIOD, INDICATOR_MACD_SIGNAL_PERIOD, INDICATOR_BOLLINGER_PERIOD, INDICATOR_BOLLINGER_STD_DEV, INDICATOR_OSCILLATOR_MAX, EMA_SMOOTHING_NUMERATOR, PROMPT_EMA_PERIODS, JSON_UNICODE_ESCAPE_PREFIX_LENGTH, JSON_UNICODE_ESCAPE_HEX_DIGITS, JSON_CONTROL_CHARACTER_MAX, RUNTIME_DEBUG_SNIPPET_CHARS, RUNTIME_DEBUG_PROMPT_SNIPPET_CHARS, RUNTIME_DEBUG_TOKEN_PREFIX_CHARS, RUNTIME_DEBUG_USD_DECIMALS, REVIEW_FAILURE_DETAIL_MAX_CHARS, RUNTIME_LATENCY_SECONDS_DECIMALS, AI_SCHEDULE_CLOCK_PARTS, ESTIMATED_CHARS_PER_TOKEN, PROVIDER_ERROR_RAW_TEXT_MAX_CHARS, AI_CALL_COST_DECIMALS, PROVIDER_DIAGNOSTIC_LIMITS, AI_INVOCATION_CONTRACT_VERSION, AI_INVOCATION_TELEMETRY_LIMITS, PROVIDER_USAGE_DETAIL_LIMITS, HYPERLIQUID_EXCHANGE_SPECIFICATION, HYPERLIQUID_TPSL_BATCH_MIN_ORDERS, HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP, HYPERLIQUID_ROW_WEIGHTED_INFO_REQUESTS, HYPERLIQUID_INFO_ROWS_PER_EXTRA_WEIGHT, HYPERLIQUID_PUBLIC_READ_WINDOWS_KEPT, CLIENT_RUNTIME_NOTE_GAP_MAX_LOOPS, HYPERLIQUID_META_AND_ASSET_CTXS_PARTS, HYPERLIQUID_SIDE_PAIR_LENGTH, HYPERLIQUID_SIGNED_SIZE_MATCH_EXTRA_DECIMALS, HYPERLIQUID_OPEN_ORDERS_MAX_NESTING_DEPTH, ACCOUNT_PAYLOAD_MODE_SEARCH_MAX_DEPTH, HYPERLIQUID_ACCOUNT_ROUNDING_DECIMALS, HYPERLIQUID_UNREALIZED_PNL_ZERO_TOLERANCE, HYPERLIQUID_MAX_DEPLOYER_FEE_SCALE, HYPERLIQUID_DEPLOYER_FEE_SCALE_MULTIPLIER, HYPERLIQUID_GROWTH_MODE_FEE_FACTOR, HYPERLIQUID_ALIGNED_QUOTE_NON_DEPLOYER_FEE_FACTOR, HYPERLIQUID_CLOSE_SIZE_RELATIVE_TOLERANCE, HYPERLIQUID_POSITION_SIZE_MATCH_ABS_TOLERANCE, HYPERLIQUID_POSITION_SIZE_MATCH_RELATIVE_TOLERANCE, HYPERLIQUID_LOT_FLOOR_NOISE_DECIMALS, HYPERLIQUID_RECOVERY_BACKOFF_MAX_EXPONENT, HYPERLIQUID_RECOVERY_CONCURRENCY_GROWTH_FACTOR, UUID_BYTES, UUID_HEX_GROUP_ENDS, MSGPACK, CLIENT_RUNTIME_DEFAULT_RETRY_SECONDS, CLIENT_RUNTIME_PROVIDER_ATTEMPT_SUMMARY_MAX_CHARS, CLIENT_RUNTIME_HL_REQUEST_TYPE_MAX_CHARS, CLIENT_RUNTIME_DRAWDOWN_DEBUG_DECIMALS, CLIENT_PROTECTIVE_GROUP_VERSION, CLIENT_PROTECTIVE_TPSL_PAIR_LEGS, CLIENT_PROTECTIVE_FILL_MATCH_ABS_TOLERANCE, CLIENT_PROTECTIVE_FILL_MATCH_REL_TOLERANCE, CLIENT_CLOSE_FILL_EPSILON_ULPS, COPY_TRADING_SIZE_EPSILON, COPY_TRADING_RELATIVE_SIZE_TOLERANCE, COPY_TRADING_NOTIONAL_CAP_TOLERANCE_USD, CLIENT_ACCOUNT_PNL_NONZERO_MIN_USD, RUNTIME_PORTFOLIO_PERIOD_ENTRY_LENGTH, CLIENT_EXCHANGE_RECONCILIATION_MAX_DELAY_MS, RFC1918_172_BLOCK_SECOND_OCTET, AGENT_CLI_TAKEOVER_REQUIRED_EXIT_CODE, EXIT_CODE_INTERRUPTED, EXIT_CODE_SIGNAL_BASE, CLIENT_PROTECTION_CAPABILITY_VERSION, BYOK_PROVIDER_DISPLAY_ORDER_STEP, TOKENS_PER_MILLION, RENDER_DEBUG_ID_RANDOM_CHARS;
1518
1518
  var init_constants = __esm({
1519
1519
  "lib/constants.ts"() {
1520
1520
  "use strict";
@@ -2063,6 +2063,7 @@ var init_constants = __esm({
2063
2063
  AGENT_CLI_TAKEOVER_REQUIRED_EXIT_CODE = 2;
2064
2064
  EXIT_CODE_INTERRUPTED = 130;
2065
2065
  EXIT_CODE_SIGNAL_BASE = 128;
2066
+ CLIENT_PROTECTION_CAPABILITY_VERSION = 2;
2066
2067
  BYOK_PROVIDER_DISPLAY_ORDER_STEP = 10;
2067
2068
  TOKENS_PER_MILLION = 1e6;
2068
2069
  RENDER_DEBUG_ID_RANDOM_CHARS = 6;
@@ -59738,16 +59739,18 @@ async function getExecutionAssetMetadata(exchange, symbol2, options) {
59738
59739
  });
59739
59740
  if (!response.ok) {
59740
59741
  const summary = `Failed to fetch execution asset metadata: ${response.status} ${response.statusText}`;
59742
+ const code = await response.clone().json().then((body) => typeof body?.detail?.code === "string" ? body.detail.code : null).catch(() => null);
59741
59743
  const detail = await getErrorMessageFromResponse(response, summary);
59742
59744
  throw new ExecutionAssetMetadataRequestError(
59743
59745
  detail === summary ? summary : `${summary}: ${detail}`,
59744
59746
  response.status,
59745
- parseRetryAfterMs2(response.headers.get("Retry-After"))
59747
+ parseRetryAfterMs2(response.headers.get("Retry-After")),
59748
+ code
59746
59749
  );
59747
59750
  }
59748
59751
  return response.json();
59749
59752
  }
59750
- var ExecutionAssetMetadataRequestError;
59753
+ var ExecutionAssetMetadataRequestError, CLIENT_EXECUTION_METADATA_DEVICE_READ, executionMetadataNeedsDeviceRead;
59751
59754
  var init_market_data = __esm({
59752
59755
  "lib/api/market-data.ts"() {
59753
59756
  "use strict";
@@ -59761,13 +59764,16 @@ var init_market_data = __esm({
59761
59764
  init_shared();
59762
59765
  init_constants();
59763
59766
  ExecutionAssetMetadataRequestError = class extends Error {
59764
- constructor(message, status, retryAfterMs) {
59767
+ constructor(message, status, retryAfterMs, code = null) {
59765
59768
  super(message);
59766
59769
  this.status = status;
59767
59770
  this.retryAfterMs = retryAfterMs;
59771
+ this.code = code;
59768
59772
  this.name = "ExecutionAssetMetadataRequestError";
59769
59773
  }
59770
59774
  };
59775
+ CLIENT_EXECUTION_METADATA_DEVICE_READ = "client_execution_metadata_device_read";
59776
+ executionMetadataNeedsDeviceRead = (error48) => error48 instanceof ExecutionAssetMetadataRequestError && error48.code === CLIENT_EXECUTION_METADATA_DEVICE_READ;
59771
59777
  }
59772
59778
  });
59773
59779
 
@@ -60315,6 +60321,17 @@ var init_admin_signups = __esm({
60315
60321
  }
60316
60322
  });
60317
60323
 
60324
+ // lib/api/client-exchange-reconciliation.ts
60325
+ var init_client_exchange_reconciliation = __esm({
60326
+ "lib/api/client-exchange-reconciliation.ts"() {
60327
+ "use strict";
60328
+ init_define_VTX_CLAUDE_CODE_POLICY();
60329
+ init_define_VTX_EXO_POLICY();
60330
+ init_define_VTX_GROK_POLICY();
60331
+ init_define_VTX_PI_MODEL_POLICY();
60332
+ }
60333
+ });
60334
+
60318
60335
  // lib/runtime/hyperliquid-account-mode-contract.ts
60319
60336
  function resolveExactHyperliquidAccountMode(userAbstraction, ...dexEvidence) {
60320
60337
  const mode = extractCanonicalHyperliquidAccountMode(userAbstraction);
@@ -61808,6 +61825,92 @@ var init_hyperliquid_exchange_rejections = __esm({
61808
61825
  }
61809
61826
  });
61810
61827
 
61828
+ // lib/runtime/hyperliquid-market-catalog.ts
61829
+ var DEFAULT_DEX, DEFAULT_DEX_INDEX, ISOLATED_ONLY_MARGIN_MODES, malformed, perpDexIndexes, integer3, marketIdentityRow, listedMarketRows;
61830
+ var init_hyperliquid_market_catalog = __esm({
61831
+ "lib/runtime/hyperliquid-market-catalog.ts"() {
61832
+ "use strict";
61833
+ init_define_VTX_CLAUDE_CODE_POLICY();
61834
+ init_define_VTX_EXO_POLICY();
61835
+ init_define_VTX_GROK_POLICY();
61836
+ init_define_VTX_PI_MODEL_POLICY();
61837
+ init_constants();
61838
+ init_hyperliquid_market_symbol();
61839
+ init_runtime_error_reason_rules2();
61840
+ DEFAULT_DEX = "";
61841
+ DEFAULT_DEX_INDEX = 0;
61842
+ ISOLATED_ONLY_MARGIN_MODES = /* @__PURE__ */ new Set(["nocross", "strictisolated"]);
61843
+ malformed = (message) => new RuntimeReasonError(message, "hyperliquid_data_unavailable");
61844
+ perpDexIndexes = (perpDexs) => {
61845
+ if (!Array.isArray(perpDexs) || perpDexs.length === 0 || perpDexs.some((item) => item !== null && (!item || typeof item !== "object" || Array.isArray(item) || !String(item.name ?? "").trim()))) {
61846
+ throw malformed("Hyperliquid returned a malformed perpDexs list.");
61847
+ }
61848
+ const indexes = /* @__PURE__ */ new Map([[DEFAULT_DEX, DEFAULT_DEX_INDEX]]);
61849
+ perpDexs.forEach((item, index) => {
61850
+ if (item === null) indexes.set(DEFAULT_DEX, index);
61851
+ else indexes.set(String(item.name).trim().toLowerCase(), index);
61852
+ });
61853
+ return indexes;
61854
+ };
61855
+ integer3 = (value) => {
61856
+ const parsed = typeof value === "number" ? value : typeof value === "string" && value.trim() ? Number(value) : NaN;
61857
+ return Number.isFinite(parsed) ? Math.trunc(parsed) : null;
61858
+ };
61859
+ marketIdentityRow = (input) => {
61860
+ const symbol2 = normalizeHyperliquidMarketSymbol(input.asset.name);
61861
+ if (!symbol2) throw malformed("A Hyperliquid market entry has no name.");
61862
+ const dex = getHyperliquidMarketDex(symbol2);
61863
+ if (dex !== String(input.dex ?? "").trim().toLowerCase()) throw malformed(`Hyperliquid listed ${symbol2} under another DEX.`);
61864
+ const baseSymbol = dex ? symbol2.slice(dex.length + 1) : symbol2;
61865
+ const szDecimals = integer3(input.asset.szDecimals);
61866
+ if (szDecimals === null || szDecimals < 0) throw malformed(`Hyperliquid's entry for ${symbol2} has no size precision.`);
61867
+ const leverage = input.asset.maxLeverage ? integer3(input.asset.maxLeverage) : 1;
61868
+ if (leverage === null) throw malformed(`Hyperliquid's entry for ${symbol2} has an invalid max leverage.`);
61869
+ const rawMarginMode = input.asset.marginMode;
61870
+ const marginMode = rawMarginMode === null || rawMarginMode === void 0 ? null : String(rawMarginMode).trim() || null;
61871
+ const assetId = input.perpDexIndex === DEFAULT_DEX_INDEX ? input.indexInMeta : HYPERLIQUID_EXCHANGE_SPECIFICATION.hip3_asset_id_base + input.perpDexIndex * HYPERLIQUID_EXCHANGE_SPECIFICATION.hip3_asset_id_dex_stride + input.indexInMeta;
61872
+ return {
61873
+ symbol: symbol2,
61874
+ dex,
61875
+ coin: symbol2,
61876
+ base_symbol: baseSymbol,
61877
+ quote_symbol: "USDC",
61878
+ display_symbol: `${baseSymbol}-USDC`,
61879
+ asset_id: assetId,
61880
+ asset_index: assetId,
61881
+ index_in_meta: input.indexInMeta,
61882
+ perp_dex_index: input.perpDexIndex,
61883
+ max_leverage: Math.max(1, leverage),
61884
+ sz_decimals: szDecimals,
61885
+ market_type: "perp",
61886
+ margin_mode: marginMode,
61887
+ only_isolated: input.asset.onlyIsolated === true || ISOLATED_ONLY_MARGIN_MODES.has(String(marginMode ?? "").toLowerCase())
61888
+ };
61889
+ };
61890
+ listedMarketRows = (requested, metas, dexIndexes, caseSensitiveSymbols, options) => {
61891
+ if (Array.isArray(caseSensitiveSymbols)) configureHyperliquidMarketSymbolCasing(caseSensitiveSymbols);
61892
+ const wanted = new Set(requested.map((symbol2) => normalizeHyperliquidMarketSymbol(symbol2)).filter(Boolean));
61893
+ const listed = {};
61894
+ for (const [dex, response] of Object.entries(metas)) {
61895
+ const universe = response && typeof response === "object" ? response.universe : null;
61896
+ if (!Array.isArray(universe) || universe.length === 0 || universe.some((asset) => !asset || typeof asset !== "object" || !String(asset.name ?? "").trim())) {
61897
+ throw malformed(`Hyperliquid returned malformed market metadata for ${dex || "the default DEX"}.`);
61898
+ }
61899
+ const perpDexIndex = dex === DEFAULT_DEX ? DEFAULT_DEX_INDEX : dexIndexes.get(dex);
61900
+ if (perpDexIndex === void 0) throw malformed(`Hyperliquid does not list the perp DEX ${dex}.`);
61901
+ universe.forEach((asset, indexInMeta) => {
61902
+ const symbol2 = normalizeHyperliquidMarketSymbol(asset.name);
61903
+ const delisted = asset.isDelisted === true;
61904
+ if (wanted.has(symbol2) && (options.includeDelisted || !delisted)) {
61905
+ listed[symbol2] = marketIdentityRow({ dex, perpDexIndex, indexInMeta, asset });
61906
+ }
61907
+ });
61908
+ }
61909
+ return listed;
61910
+ };
61911
+ }
61912
+ });
61913
+
61811
61914
  // lib/runtime/exchange-mutation-fence.ts
61812
61915
  var activeSettlementsByScope, normalizeScope, trackBrowserExchangeMutation, waitForBrowserExchangeMutationSettlement;
61813
61916
  var init_exchange_mutation_fence = __esm({
@@ -93135,7 +93238,7 @@ var init_hyperliquid_signer = __esm({
93135
93238
  });
93136
93239
 
93137
93240
  // lib/runtime/hyperliquid-client.ts
93138
- var HyperliquidExchangeRejectionError, durableMutationAuthorityArgs, assertFreshPreparedExecutionContext, normalizeSymbol, HYPERLIQUID_NONCE_STORAGE_KEY, HYPERLIQUID_NONCE_LOCK_NAME, lastGeneratedNonce, readBrowserStoredHyperliquidNonce, writeBrowserStoredHyperliquidNonce, browserNonceCoordinator, allocateHyperliquidNonce, hostNonceAllocator, allocateActionNonce, generateHyperliquidNonce, normalizeDecimalString, HYPERLIQUID_PRICE_SIGNIFICANT_FIGURES, HYPERLIQUID_INTEGER_PRICE_MINIMUM, shortestDecimalParts, formatHyperliquidPerpPriceGrid, formatHyperliquidTriggerPriceWire, hyperliquidOrderPriceRounding, formatHyperliquidOrderPriceWire, countSignificantDigits, countDecimalPlaces, validateHyperliquidPerpPriceWire, validateHyperliquidSizeWire, formatSizeWire, inferApiUrl, inferIsTestnet, postHyperliquidInfoRead, postHyperliquidInfo, fetchBrowserHyperliquidInfoPayload, fetchBrowserHyperliquidInfoRead, fetchBrowserHyperliquidInfoText, coerceMarketMaxLeverage, toFiniteNumber, OPEN_ORDER_NUMERIC_STRING, OPEN_ORDER_ID_STRING, parseCanonicalOpenOrderId, parseOpenOrderFiniteNumber, parseOpenOrderNonNegativeNumber, NATIVE_FIRED_TRIGGER_CONDITION, parseOpenOrderPositiveNumber, parseOpenOrderPresentationNumber, readOpenOrderField, firstFiniteNumber, parseFundingUsdcFromInfoPosition, isExchangeIsolatedOnly, resolveLeverageTarget, computeHip3AssetId, getPerpDexIndexMap, buildAssetInfosFromMetaResponse, requireWalletAddress, assertPositiveInteger, assertPositiveNumber, normalizeOrderSide, normalizeHyperliquidClientOrderId, resolveAssets, findResolvedAsset, normalizeExecutionAssetMetadata, resolveHyperliquidAsset, resolveHyperliquidAssetIndex, decimalUnits, quantizeHyperliquidOrderSizeValue, hyperliquidSignedSizeMatchesRequestedSize, finitePositive, readDevicePrivateExecutionContext, quantizeHyperliquidOrderSize, fetchBrowserAvailableAssets, fetchBrowserAllMids, fetchBrowserSymbolMidPrice, fetchBrowserOpenOrders, parseCanonicalHyperliquidOrderStatusEvidence, fetchBrowserOrderStatusEvidence, fetchBrowserUserRole, fetchBrowserAccountState, fetchBrowserPosition, buildHyperliquidOrderWire, buildHyperliquidTriggerOrderWire, signHyperliquidPayload, signHyperliquidPreparedAction, buildHyperliquidCancelPayload, buildHyperliquidUpdateLeveragePayload, buildHyperliquidMarketOrderPayload, buildHyperliquidLimitOrderPayload, buildHyperliquidTriggerOrderPayload, buildHyperliquidOrderBatchPayload, buildHyperliquidModifyOrderPayload, TRAILING_PCT_PATTERN, buildHyperliquidTrailingStopPayload, extractHyperliquidExchangeError, acknowledgementLookupPacing, lookupUntilListed, resolveHyperliquidTriggerAcknowledgements, readHyperliquidTrailingStopAcknowledgement, resolveHyperliquidModifyAcknowledgement, isDefinitiveHyperliquidExchangeResponse, extractDefinitiveHyperliquidOrderId, CANONICAL_POSITIVE_DECIMAL_PATTERN, extractCanonicalHyperliquidOrderStateAcknowledgement, extractCanonicalHyperliquidOrderStateAcknowledgements, extractCanonicalHyperliquidFilledOrderAcknowledgement, extractDefinitiveHyperliquidOrderMemberResults, buildHyperliquidOrderDiagnostics, loadClientExecutionReferenceEvidence, sha256Hex, extractSignedPayloadClientOrderId, extractSignedPayloadMutationCorrelation, assertDurableMutationMatchesSignedAction, exchangeRejectionReason, exchangeActionPriority, submitHyperliquidExchangePayload;
93241
+ var HyperliquidExchangeRejectionError, durableMutationAuthorityArgs, assertFreshPreparedExecutionContext, normalizeSymbol, normalizeBotMarket, HYPERLIQUID_NONCE_STORAGE_KEY, HYPERLIQUID_NONCE_LOCK_NAME, lastGeneratedNonce, readBrowserStoredHyperliquidNonce, writeBrowserStoredHyperliquidNonce, browserNonceCoordinator, allocateHyperliquidNonce, hostNonceAllocator, allocateActionNonce, generateHyperliquidNonce, normalizeDecimalString, HYPERLIQUID_PRICE_SIGNIFICANT_FIGURES, HYPERLIQUID_INTEGER_PRICE_MINIMUM, shortestDecimalParts, formatHyperliquidPerpPriceGrid, formatHyperliquidTriggerPriceWire, hyperliquidOrderPriceRounding, formatHyperliquidOrderPriceWire, countSignificantDigits, countDecimalPlaces, validateHyperliquidPerpPriceWire, validateHyperliquidSizeWire, formatSizeWire, inferApiUrl, inferIsTestnet, postHyperliquidInfoRead, postHyperliquidInfo, fetchBrowserHyperliquidInfoPayload, fetchBrowserHyperliquidInfoRead, fetchBrowserHyperliquidInfoText, coerceMarketMaxLeverage, toFiniteNumber, OPEN_ORDER_NUMERIC_STRING, OPEN_ORDER_ID_STRING, parseCanonicalOpenOrderId, parseOpenOrderFiniteNumber, parseOpenOrderNonNegativeNumber, NATIVE_FIRED_TRIGGER_CONDITION, parseOpenOrderPositiveNumber, parseOpenOrderPresentationNumber, readOpenOrderField, firstFiniteNumber, parseFundingUsdcFromInfoPosition, isExchangeIsolatedOnly, resolveLeverageTarget, computeHip3AssetId, getPerpDexIndexMap, buildAssetInfosFromMetaResponse, requireWalletAddress, assertPositiveInteger, assertPositiveNumber, normalizeOrderSide, normalizeHyperliquidClientOrderId, resolveAssets, findResolvedAsset, normalizeExecutionAssetMetadata, readDeviceExecutionAssetMetadata, requireBotProfileId, executionAssetMetadataFor, resolveHyperliquidAsset, resolveHyperliquidAssetIndex, decimalUnits, quantizeHyperliquidOrderSizeValue, hyperliquidSignedSizeMatchesRequestedSize, finitePositive, readDevicePrivateExecutionContext, quantizeHyperliquidOrderSize, fetchBrowserAvailableAssets, fetchBrowserAllMids, fetchBrowserSymbolMidPrice, fetchBrowserOpenOrders, parseCanonicalHyperliquidOrderStatusEvidence, fetchBrowserOrderStatusEvidence, fetchBrowserUserRole, fetchBrowserAccountState, fetchBrowserPosition, buildHyperliquidOrderWire, buildHyperliquidTriggerOrderWire, signHyperliquidPayload, signHyperliquidPreparedAction, buildHyperliquidCancelPayload, buildHyperliquidUpdateLeveragePayload, buildHyperliquidMarketOrderPayload, buildHyperliquidLimitOrderPayload, buildHyperliquidTriggerOrderPayload, buildHyperliquidOrderBatchPayload, buildHyperliquidModifyOrderPayload, TRAILING_PCT_PATTERN, buildHyperliquidTrailingStopPayload, extractHyperliquidExchangeError, acknowledgementLookupPacing, lookupUntilListed, resolveHyperliquidTriggerAcknowledgements, readHyperliquidTrailingStopAcknowledgement, resolveHyperliquidModifyAcknowledgement, isDefinitiveHyperliquidExchangeResponse, extractDefinitiveHyperliquidOrderId, CANONICAL_POSITIVE_DECIMAL_PATTERN, extractCanonicalHyperliquidOrderStateAcknowledgement, extractCanonicalHyperliquidOrderStateAcknowledgements, extractCanonicalHyperliquidFilledOrderAcknowledgement, extractDefinitiveHyperliquidOrderMemberResults, buildHyperliquidOrderDiagnostics, loadClientExecutionReferenceEvidence, sha256Hex, extractSignedPayloadClientOrderId, extractSignedPayloadMutationCorrelation, assertDurableMutationMatchesSignedAction, exchangeRejectionReason, exchangeActionPriority, submitHyperliquidExchangePayload;
93139
93242
  var init_hyperliquid_client = __esm({
93140
93243
  "lib/runtime/hyperliquid-client.ts"() {
93141
93244
  "use strict";
@@ -93154,6 +93257,8 @@ var init_hyperliquid_client = __esm({
93154
93257
  init_hyperliquid_exchange_rejections();
93155
93258
  init_hyperliquid_market_symbol();
93156
93259
  init_network_debug();
93260
+ init_hyperliquid_market_catalog();
93261
+ init_runtime_error_reason_rules2();
93157
93262
  init_runtime_redaction();
93158
93263
  init_exchange_mutation_fence();
93159
93264
  init_runtime_handoff();
@@ -93196,6 +93301,11 @@ var init_hyperliquid_client = __esm({
93196
93301
  }
93197
93302
  };
93198
93303
  normalizeSymbol = (value) => normalizeHyperliquidMarketSymbol(value);
93304
+ normalizeBotMarket = (config2, value) => {
93305
+ const caseSensitiveSymbols = config2?.client_runtime_hyperliquid_case_sensitive_symbols;
93306
+ if (Array.isArray(caseSensitiveSymbols)) configureHyperliquidMarketSymbolCasing(caseSensitiveSymbols);
93307
+ return normalizeSymbol(value);
93308
+ };
93199
93309
  HYPERLIQUID_NONCE_STORAGE_KEY = "vtx_hyperliquid_exchange_nonce_v1";
93200
93310
  HYPERLIQUID_NONCE_LOCK_NAME = "vtx_hyperliquid_exchange_nonce";
93201
93311
  lastGeneratedNonce = 0;
@@ -93673,16 +93783,57 @@ var init_hyperliquid_client = __esm({
93673
93783
  only_isolated: metadata.only_isolated === true
93674
93784
  };
93675
93785
  };
93786
+ readDeviceExecutionAssetMetadata = async (input, symbol2) => {
93787
+ const market = normalizeBotMarket(input.config, symbol2);
93788
+ const dex = getHyperliquidMarketDex(market);
93789
+ const notListed = () => new RuntimeReasonError(`Hyperliquid does not list ${market}.`, "internal_data_error");
93790
+ const perpDexConfig = input.config?.client_runtime_hyperliquid_perp_dexs;
93791
+ const enabledDexes = perpDexConfig?.enabled && Array.isArray(perpDexConfig.allowed_dexes) ? perpDexConfig.allowed_dexes.map((value) => String(value ?? "").trim().toLowerCase()) : [];
93792
+ if (dex && !enabledDexes.includes(dex)) throw notListed();
93793
+ let indexes = /* @__PURE__ */ new Map([["", 0]]);
93794
+ if (dex) {
93795
+ indexes = perpDexIndexes(await postHyperliquidInfo(input, { type: "perpDexs" }, "hyperliquid.perpDexs"));
93796
+ if (!indexes.has(dex)) throw notListed();
93797
+ }
93798
+ const meta3 = await postHyperliquidInfo(input, dex ? { type: "meta", dex } : { type: "meta" }, `hyperliquid.meta${dex ? `.${dex}` : ""}`);
93799
+ const row = listedMarketRows(
93800
+ [market],
93801
+ { [dex]: meta3 },
93802
+ indexes,
93803
+ input.config?.client_runtime_hyperliquid_case_sensitive_symbols,
93804
+ { includeDelisted: true }
93805
+ )[market];
93806
+ if (!row) throw notListed();
93807
+ return row;
93808
+ };
93809
+ requireBotProfileId = (input, symbol2) => {
93810
+ const profileId = Number(input.profileId);
93811
+ if (!Number.isSafeInteger(profileId) || profileId <= 0) {
93812
+ throw new RuntimeReasonError(`The bot's profile is needed to read ${symbol2}'s execution metadata.`, "internal_data_error");
93813
+ }
93814
+ return profileId;
93815
+ };
93816
+ executionAssetMetadataFor = async (input, symbol2, options = {}) => {
93817
+ const requestOptions = {
93818
+ profileId: requireBotProfileId(input, symbol2),
93819
+ ...options.forceCatalogRefresh ? { forceCatalogRefresh: true } : {},
93820
+ ...input.publicRequestPriority === "trading_reduce" ? { publicRequestPriority: "trading_reduce" } : {}
93821
+ };
93822
+ try {
93823
+ return await getExecutionAssetMetadata("hyperliquid", symbol2, requestOptions);
93824
+ } catch (error48) {
93825
+ if (!executionMetadataNeedsDeviceRead(error48)) throw error48;
93826
+ options.onDeviceRead?.();
93827
+ return readDeviceExecutionAssetMetadata(input, symbol2);
93828
+ }
93829
+ };
93676
93830
  resolveHyperliquidAsset = async (input) => {
93677
- const symbol2 = normalizeSymbol(input.symbol);
93831
+ const symbol2 = normalizeBotMarket(input.config, input.symbol);
93678
93832
  if (!symbol2) {
93679
93833
  throw new Error("Missing Hyperliquid symbol.");
93680
93834
  }
93681
93835
  if (input.refreshCatalog) {
93682
- return normalizeExecutionAssetMetadata(symbol2, await getExecutionAssetMetadata("hyperliquid", symbol2, {
93683
- forceCatalogRefresh: true,
93684
- ...input.publicRequestPriority === "trading_reduce" ? { publicRequestPriority: "trading_reduce" } : {}
93685
- }));
93836
+ return normalizeExecutionAssetMetadata(symbol2, await executionAssetMetadataFor(input, symbol2, { forceCatalogRefresh: true }));
93686
93837
  }
93687
93838
  if (Array.isArray(input.assets) && input.assets.length > 0) {
93688
93839
  const explicitAsset = findResolvedAsset(symbol2, input.assets);
@@ -93690,10 +93841,16 @@ var init_hyperliquid_client = __esm({
93690
93841
  return explicitAsset;
93691
93842
  }
93692
93843
  }
93844
+ requireBotProfileId(input, symbol2);
93845
+ let readOnDevice = false;
93693
93846
  try {
93694
- const metadata = input.publicRequestPriority === "trading_reduce" ? await getExecutionAssetMetadata("hyperliquid", symbol2, { publicRequestPriority: "trading_reduce" }) : await getExecutionAssetMetadata("hyperliquid", symbol2);
93695
- return normalizeExecutionAssetMetadata(symbol2, metadata);
93847
+ return normalizeExecutionAssetMetadata(symbol2, await executionAssetMetadataFor(input, symbol2, {
93848
+ onDeviceRead: () => {
93849
+ readOnDevice = true;
93850
+ }
93851
+ }));
93696
93852
  } catch (executionMetadataError) {
93853
+ if (readOnDevice) throw executionMetadataError;
93697
93854
  const assets = await resolveAssets(input);
93698
93855
  const fallbackAsset = findResolvedAsset(symbol2, assets);
93699
93856
  if (fallbackAsset) {
@@ -93807,7 +93964,7 @@ var init_hyperliquid_client = __esm({
93807
93964
  return { executionPositionSize, executionMarkPrice, executionContextAtMs };
93808
93965
  };
93809
93966
  quantizeHyperliquidOrderSize = async (input) => {
93810
- const symbol2 = normalizeSymbol(input.symbol);
93967
+ const symbol2 = normalizeBotMarket(input.config, input.symbol);
93811
93968
  if (!symbol2) {
93812
93969
  throw new Error("Missing Hyperliquid symbol.");
93813
93970
  }
@@ -93818,7 +93975,7 @@ var init_hyperliquid_client = __esm({
93818
93975
  symbol: symbol2
93819
93976
  }) : null;
93820
93977
  devicePrivateContext?.catch(() => void 0);
93821
- const metadata = input.publicRequestPriority === "trading_reduce" ? await getExecutionAssetMetadata("hyperliquid", symbol2, { publicRequestPriority: "trading_reduce" }) : await getExecutionAssetMetadata("hyperliquid", symbol2);
93978
+ const metadata = await executionAssetMetadataFor(input, symbol2);
93822
93979
  const deviceContext = devicePrivateContext ? await devicePrivateContext : null;
93823
93980
  const executionContextReceivedAtMonotonicMs = globalThis.performance.now();
93824
93981
  const resolved = normalizeExecutionAssetMetadata(symbol2, metadata);
@@ -93875,9 +94032,9 @@ var init_hyperliquid_client = __esm({
93875
94032
  const allowedDexes = Array.isArray(perpDexConfig.allowed_dexes) ? perpDexConfig.allowed_dexes.map((dex) => String(dex || "").trim().toLowerCase()).filter(Boolean) : [];
93876
94033
  if (allowedDexes.length > 0) {
93877
94034
  const perpDexPayload = await postHyperliquidInfo(input, { type: "perpDexs" }, "hyperliquid.perpDexs");
93878
- const perpDexIndexes = getPerpDexIndexMap(perpDexPayload);
94035
+ const perpDexIndexes2 = getPerpDexIndexMap(perpDexPayload);
93879
94036
  for (const dex of allowedDexes) {
93880
- const perpDexIndex = perpDexIndexes.get(dex);
94037
+ const perpDexIndex = perpDexIndexes2.get(dex);
93881
94038
  if (perpDexIndex === void 0) {
93882
94039
  throw new Error(`Configured Hyperliquid perp DEX is not available: ${dex}`);
93883
94040
  }
@@ -95661,7 +95818,7 @@ var exchange_mutation_evidence_exports = {};
95661
95818
  __export(exchange_mutation_evidence_exports, {
95662
95819
  readClientExchangeReconciliationEvidence: () => readClientExchangeReconciliationEvidence
95663
95820
  });
95664
- var resolveHyperliquidApiUrl, readClientExchangeReconciliationEvidence;
95821
+ var profileRuntimeConfig, resolveHyperliquidApiUrl, readClientExchangeReconciliationEvidence;
95665
95822
  var init_exchange_mutation_evidence = __esm({
95666
95823
  "lib/runtime/exchange-mutation-evidence.ts"() {
95667
95824
  "use strict";
@@ -95672,15 +95829,18 @@ var init_exchange_mutation_evidence = __esm({
95672
95829
  init_api2();
95673
95830
  init_hyperliquid_client();
95674
95831
  init_monotonic_clock();
95675
- resolveHyperliquidApiUrl = async (profileId, answered, signal) => {
95676
- const fromAnswer = String(answered ?? "").trim();
95677
- if (fromAnswer) return fromAnswer;
95832
+ profileRuntimeConfig = async (profileId, signal) => {
95678
95833
  const numericProfileId = Number(profileId);
95679
- const config2 = await getLLMConfig(
95834
+ return getLLMConfig(
95680
95835
  void 0,
95681
95836
  Number.isSafeInteger(numericProfileId) && numericProfileId > 0 ? numericProfileId : void 0,
95682
95837
  signal
95683
95838
  );
95839
+ };
95840
+ resolveHyperliquidApiUrl = async (profileId, answered, signal) => {
95841
+ const fromAnswer = String(answered ?? "").trim();
95842
+ if (fromAnswer) return fromAnswer;
95843
+ const config2 = await profileRuntimeConfig(profileId, signal);
95684
95844
  const apiUrl = String(config2?.client_runtime_exchange_endpoints?.hyperliquid_api_url ?? "").trim();
95685
95845
  if (!apiUrl) throw new Error("Missing client runtime Hyperliquid API URL.");
95686
95846
  return apiUrl;
@@ -95715,6 +95875,12 @@ var init_exchange_mutation_evidence = __esm({
95715
95875
  "hyperliquid.frontendOpenOrders"
95716
95876
  );
95717
95877
  const historicalOrders = input.required.historical_orders === true ? await fetchBrowserHyperliquidInfoPayload(readInput, { type: "historicalOrders", user: wallet }, "hyperliquid.historicalOrders") : void 0;
95878
+ const assetSymbol = String(input.required.execution_asset_symbol ?? "").trim();
95879
+ const executionAsset = assetSymbol ? await readDeviceExecutionAssetMetadata({
95880
+ ...readInput,
95881
+ // Which HIP-3 DEXes VTX enables: the caller's runtime config, else the profile's.
95882
+ config: input.config ?? await profileRuntimeConfig(input.profileId, input.signal)
95883
+ }, assetSymbol) : void 0;
95718
95884
  return {
95719
95885
  evidence: {
95720
95886
  wallet_address: wallet,
@@ -95722,7 +95888,8 @@ var init_exchange_mutation_evidence = __esm({
95722
95888
  order_statuses: orderStatuses,
95723
95889
  active_asset_data: activeAssetData,
95724
95890
  ...openOrders === void 0 ? {} : { open_orders: openOrders },
95725
- ...historicalOrders === void 0 ? {} : { historical_orders: historicalOrders }
95891
+ ...historicalOrders === void 0 ? {} : { historical_orders: historicalOrders },
95892
+ ...executionAsset === void 0 ? {} : { execution_asset: executionAsset }
95726
95893
  },
95727
95894
  startedAtMonotonicMs
95728
95895
  };
@@ -97245,7 +97412,7 @@ async function getClientRuntimeStatuses(profileIds, signal, options) {
97245
97412
  ttlMs: viewer.requestKey ? 0 : CLIENT_RUNTIME_STATUSES_DEDUPE_TTL_MS
97246
97413
  });
97247
97414
  }
97248
- var clientRuntimeSecretHeaders, preferencesWriteQueue, getCopyTradingRuntimeLeaseToken, getCopyTradingSchedulerInstanceId, AI_TRADE_HISTORY_BY_ORDER_IDS_MAX_BATCH, AI_TRADE_HISTORY_BY_ORDER_IDS_MAX_CONCURRENCY, resolveClientRuntimeStatusViewerHeaders, CLIENT_SUPPORTED_PROMPT_CONTRACT_VERSION, CLIENT_PROTECTION_CAPABILITY_VERSION, completedDeferredClientRuntimeStops, rememberCompletedDeferredClientRuntimeStop, consumeCompletedDeferredClientRuntimeStop, toNumericProfileId, buildClientRuntimeBody, shouldAttachRuntimeIdempotencyKey, attachRuntimeLeaseHeader, attachRuntimeSchedulerInstanceHeader, resolveRuntimeLeaseToken, resolveSchedulerBoundRuntimeLeaseToken, persistRuntimeLeaseFromPayload, persistRuntimeLeaseStatusMetadata, shouldClearPersistedRuntimeLeaseOnError, createRuntimeRequestError, parseClientRuntimeRequestContext, recordRuntimeAuthFailureBreadcrumb, classifyRuntimeRequestError, annotateRuntimeRequestError, CLIENT_RUNTIME_RETRYABLE_STATUSES, isRetryableClientRuntimeStatus, shouldRetryClientRuntimeHttpStatus, isRuntimeIdempotencyInProgressError, isRetryableRuntimeConflictError, resolveClientRuntimeRetryDelayMs, reconcilePendingClientExchangeMutation, CLIENT_RUNTIME_CLAIM_EXCHANGE_MUTATION_WAIT_CODES, CLIENT_EXCHANGE_AUTHORITY_DEVICE_KEY, CLIENT_EXCHANGE_AUTHORITY_SESSION_KEY, getOrCreateClientExchangeAuthorityIdentity, resolveClientExchangeMutationAuthority, pinClientExchangeMutationAuthority, CLIENT_EXCHANGE_MUTATION_AUTHORITY_MISMATCH, isClientExchangeMutationAuthorityConflict, handOffClientExchangeMutationToReconciliation, clientExchangeMutationAuthorityBody, isPendingClientExchangeMutationError, isMissingActiveClientExchangeMutationError, clientExchangeMutationReconciliationTimers, ClientExchangeMutationRebuildRequiredError, isTerminalClientExchangeMutation, clientExchangeMutationReconciliationKey, clearScheduledClientExchangeMutationReconciliation, snapshotClientExchangeMutationReconciliationAuthority, completeClientExchangeMutationReconciliation, protectiveBoundClientExchangeMutations, rememberProtectiveBoundClientExchangeMutation, isProtectiveBoundClientExchangeMutation, postClientExchangeMutationReconciliation, scheduleClientExchangeMutationReconciliation;
97415
+ var clientRuntimeSecretHeaders, preferencesWriteQueue, getCopyTradingRuntimeLeaseToken, getCopyTradingSchedulerInstanceId, AI_TRADE_HISTORY_BY_ORDER_IDS_MAX_BATCH, AI_TRADE_HISTORY_BY_ORDER_IDS_MAX_CONCURRENCY, resolveClientRuntimeStatusViewerHeaders, CLIENT_SUPPORTED_PROMPT_CONTRACT_VERSION, completedDeferredClientRuntimeStops, rememberCompletedDeferredClientRuntimeStop, consumeCompletedDeferredClientRuntimeStop, toNumericProfileId, buildClientRuntimeBody, shouldAttachRuntimeIdempotencyKey, attachRuntimeLeaseHeader, attachRuntimeSchedulerInstanceHeader, resolveRuntimeLeaseToken, resolveSchedulerBoundRuntimeLeaseToken, persistRuntimeLeaseFromPayload, persistRuntimeLeaseStatusMetadata, shouldClearPersistedRuntimeLeaseOnError, createRuntimeRequestError, parseClientRuntimeRequestContext, recordRuntimeAuthFailureBreadcrumb, classifyRuntimeRequestError, annotateRuntimeRequestError, CLIENT_RUNTIME_RETRYABLE_STATUSES, isRetryableClientRuntimeStatus, shouldRetryClientRuntimeHttpStatus, isRuntimeIdempotencyInProgressError, isRetryableRuntimeConflictError, resolveClientRuntimeRetryDelayMs, reconcilePendingClientExchangeMutation, CLIENT_RUNTIME_CLAIM_EXCHANGE_MUTATION_WAIT_CODES, CLIENT_EXCHANGE_AUTHORITY_DEVICE_KEY, CLIENT_EXCHANGE_AUTHORITY_SESSION_KEY, getOrCreateClientExchangeAuthorityIdentity, resolveClientExchangeMutationAuthority, pinClientExchangeMutationAuthority, CLIENT_EXCHANGE_MUTATION_AUTHORITY_MISMATCH, isClientExchangeMutationAuthorityConflict, handOffClientExchangeMutationToReconciliation, clientExchangeMutationAuthorityBody, isPendingClientExchangeMutationError, isMissingActiveClientExchangeMutationError, clientExchangeMutationReconciliationTimers, ClientExchangeMutationRebuildRequiredError, isTerminalClientExchangeMutation, clientExchangeMutationReconciliationKey, clearScheduledClientExchangeMutationReconciliation, snapshotClientExchangeMutationReconciliationAuthority, completeClientExchangeMutationReconciliation, protectiveBoundClientExchangeMutations, rememberProtectiveBoundClientExchangeMutation, isProtectiveBoundClientExchangeMutation, postClientExchangeMutationReconciliation, scheduleClientExchangeMutationReconciliation;
97249
97416
  var init_api2 = __esm({
97250
97417
  "lib/api.ts"() {
97251
97418
  "use strict";
@@ -97290,6 +97457,7 @@ var init_api2 = __esm({
97290
97457
  init_account_summary();
97291
97458
  init_mobile_notifications();
97292
97459
  init_admin_signups();
97460
+ init_client_exchange_reconciliation();
97293
97461
  init_server_runtime_lease();
97294
97462
  clientRuntimeSecretHeaders = (profileId) => {
97295
97463
  const headers = getProfileHeaders({}, profileId);
@@ -97332,7 +97500,6 @@ var init_api2 = __esm({
97332
97500
  CLIENT_SUPPORTED_PROMPT_CONTRACT_VERSION = String(
97333
97501
  process.env.NEXT_PUBLIC_CLIENT_RUNTIME_PROMPT_CONTRACT_VERSION || "2026-08-24.1"
97334
97502
  ).trim() || "2026-08-24.1";
97335
- CLIENT_PROTECTION_CAPABILITY_VERSION = 1;
97336
97503
  completedDeferredClientRuntimeStops = /* @__PURE__ */ new Set();
97337
97504
  rememberCompletedDeferredClientRuntimeStop = (profileId, result) => {
97338
97505
  if (result.runtime_stop_completed === true) {
@@ -99223,6 +99390,7 @@ var init_browser_trading = __esm({
99223
99390
  const payload = await buildHyperliquidUpdateLeveragePayload({
99224
99391
  config: input.config ?? null,
99225
99392
  publicRequestPriority: priorityOf(input),
99393
+ profileId: input.profileId,
99226
99394
  signingKey,
99227
99395
  symbol: input.symbol,
99228
99396
  leverage: input.leverage,
@@ -99262,6 +99430,7 @@ var init_browser_trading = __esm({
99262
99430
  const payload = await buildHyperliquidMarketOrderPayload({
99263
99431
  config: input.config ?? null,
99264
99432
  publicRequestPriority: priorityOf(input),
99433
+ profileId: input.profileId,
99265
99434
  signingKey,
99266
99435
  symbol: input.symbol,
99267
99436
  side: input.side,
@@ -99343,6 +99512,7 @@ var init_browser_trading = __esm({
99343
99512
  const payload = await buildHyperliquidLimitOrderPayload({
99344
99513
  config: input.config ?? null,
99345
99514
  publicRequestPriority: priorityOf(input),
99515
+ profileId: input.profileId,
99346
99516
  signingKey,
99347
99517
  symbol: input.symbol,
99348
99518
  side: input.side,
@@ -99381,6 +99551,7 @@ var init_browser_trading = __esm({
99381
99551
  const payload = await buildHyperliquidTriggerOrderPayload({
99382
99552
  config: input.config ?? null,
99383
99553
  publicRequestPriority: priorityOf(input),
99554
+ profileId: input.profileId,
99384
99555
  signingKey,
99385
99556
  symbol: input.symbol,
99386
99557
  side: input.side,
@@ -99421,6 +99592,7 @@ var init_browser_trading = __esm({
99421
99592
  const payload = await buildHyperliquidOrderBatchPayload({
99422
99593
  config: input.config ?? null,
99423
99594
  publicRequestPriority: priorityOf(input),
99595
+ profileId: input.profileId,
99424
99596
  signingKey,
99425
99597
  symbol: input.symbol,
99426
99598
  members: input.members,
@@ -99457,6 +99629,7 @@ var init_browser_trading = __esm({
99457
99629
  const payload = await buildHyperliquidModifyOrderPayload({
99458
99630
  config: input.config ?? null,
99459
99631
  publicRequestPriority: priorityOf(input),
99632
+ profileId: input.profileId,
99460
99633
  signingKey,
99461
99634
  symbol: input.symbol,
99462
99635
  orderId: input.orderId,
@@ -99504,6 +99677,7 @@ var init_browser_trading = __esm({
99504
99677
  const payload = await buildHyperliquidCancelPayload({
99505
99678
  config: input.config ?? null,
99506
99679
  publicRequestPriority: priorityOf(input),
99680
+ profileId: input.profileId,
99507
99681
  signingKey,
99508
99682
  symbol: input.symbol,
99509
99683
  orderId: input.orderId,
@@ -99537,6 +99711,7 @@ var init_browser_trading = __esm({
99537
99711
  const payload = await buildHyperliquidTrailingStopPayload({
99538
99712
  config: input.config ?? null,
99539
99713
  publicRequestPriority: priorityOf(input),
99714
+ profileId: input.profileId,
99540
99715
  signingKey,
99541
99716
  symbol: input.symbol,
99542
99717
  side: input.side,
@@ -101147,6 +101322,9 @@ var init_protective_evidence = __esm({
101147
101322
  includeMark: request.include_mark === true || existing?.kind === "market" && existing.includeMark,
101148
101323
  shareable: request.reason === "leg_active" && (existing?.kind !== "market" || existing.shareable)
101149
101324
  });
101325
+ } else if (request.kind === "execution_asset") {
101326
+ const symbol2 = String(request.symbol ?? "").trim();
101327
+ if (symbol2) items.set(`execution_asset:${symbol2}`, { kind: "execution_asset", symbol: symbol2 });
101150
101328
  }
101151
101329
  }
101152
101330
  return [...items.values()];
@@ -101168,7 +101346,7 @@ var init_protective_evidence = __esm({
101168
101346
  const observedAt = (/* @__PURE__ */ new Date()).toISOString();
101169
101347
  const perDex = /* @__PURE__ */ new Map();
101170
101348
  const scope = `${String(input.apiUrl ?? "")}|${wallet.toLowerCase()}`;
101171
- const shareable = batch.every((item) => item.kind !== "fills" && item.shareable);
101349
+ const shareable = batch.every((item) => item.kind === "execution_asset" || item.kind !== "fills" && item.shareable);
101172
101350
  const dexRead = (key, body, label2) => {
101173
101351
  let read = perDex.get(key);
101174
101352
  if (read) return read;
@@ -101193,7 +101371,13 @@ var init_protective_evidence = __esm({
101193
101371
  const orderStatuses = [];
101194
101372
  const fills = [];
101195
101373
  const markets = [];
101374
+ const assets = [];
101196
101375
  await Promise.all(batch.map(async (item) => {
101376
+ if (item.kind === "execution_asset") {
101377
+ const row = await readOrNull(() => readDeviceExecutionAssetMetadata(input, item.symbol));
101378
+ if (row != null) assets.push({ symbol: item.symbol, row });
101379
+ return;
101380
+ }
101197
101381
  if (item.kind === "order_status") {
101198
101382
  const oid = orderStatusOid(item.orderRef);
101199
101383
  const response = await readOrNull(() => fetchBrowserHyperliquidInfoPayload(
@@ -101233,7 +101417,8 @@ var init_protective_evidence = __esm({
101233
101417
  if (orderStatuses.length > 0) report.order_statuses = orderStatuses;
101234
101418
  if (fills.length > 0) report.fills = fills;
101235
101419
  if (markets.length > 0) report.markets = markets;
101236
- const items = orderStatuses.length + fills.length + markets.length;
101420
+ if (assets.length > 0) report.assets = assets;
101421
+ const items = orderStatuses.length + fills.length + markets.length + assets.length;
101237
101422
  return items > 0 ? { report, items, startedAtMonotonicMs } : null;
101238
101423
  };
101239
101424
  withEvidenceReporterLock = async (profileId, work, busy) => {
@@ -102741,9 +102926,9 @@ var init_native_position_protection = __esm({
102741
102926
  roundDecimalHalfUp = (value, decimals) => {
102742
102927
  const text = String(value);
102743
102928
  if (text.includes("e")) return "0";
102744
- const [integer3, fraction = ""] = text.split(".");
102745
- if (fraction.length <= decimals) return fraction ? `${integer3}.${fraction}`.replace(/\.?0+$/, "") : integer3;
102746
- let units = BigInt(`${integer3}${fraction.slice(0, decimals)}`);
102929
+ const [integer4, fraction = ""] = text.split(".");
102930
+ if (fraction.length <= decimals) return fraction ? `${integer4}.${fraction}`.replace(/\.?0+$/, "") : integer4;
102931
+ let units = BigInt(`${integer4}${fraction.slice(0, decimals)}`);
102747
102932
  if (fraction[decimals] >= HALF_UP_DIGIT) units += BigInt(1);
102748
102933
  const digits = units.toString().padStart(decimals + 1, "0");
102749
102934
  const rounded = `${digits.slice(0, -decimals)}.${digits.slice(-decimals)}`;
@@ -104488,7 +104673,7 @@ var init_runtime_execution = __esm({
104488
104673
  let target;
104489
104674
  try {
104490
104675
  target = resolveLeverageTarget(
104491
- await resolveHyperliquidAsset({ symbol: symbol2, config: input.config ?? null, publicRequestPriority: "trading_reconcile" }),
104676
+ await resolveHyperliquidAsset({ symbol: symbol2, config: input.config ?? null, publicRequestPriority: "trading_reconcile", profileId: input.profileId }),
104492
104677
  context.leverage,
104493
104678
  context.marginMode !== "isolated"
104494
104679
  );
@@ -105968,7 +106153,8 @@ var init_runtime_execution = __esm({
105968
106153
  const { sz_decimals: assetSizeDecimals } = await resolveHyperliquidAsset({
105969
106154
  symbol: symbol2,
105970
106155
  config: request.config,
105971
- publicRequestPriority: "trading_reduce"
106156
+ publicRequestPriority: "trading_reduce",
106157
+ profileId
105972
106158
  });
105973
106159
  const candidates = allocatedCandidates.map((candidate) => ({
105974
106160
  ...candidate,
@@ -109490,7 +109676,8 @@ var init_runtime_execution = __esm({
109490
109676
  const { sz_decimals: assetSizeDecimals } = await resolveHyperliquidAsset({
109491
109677
  symbol: symbol2,
109492
109678
  config: request.config,
109493
- publicRequestPriority: "trading_reduce"
109679
+ publicRequestPriority: "trading_reduce",
109680
+ profileId
109494
109681
  });
109495
109682
  const reports = [];
109496
109683
  const updated = [...retained];
@@ -109793,11 +109980,12 @@ var init_runtime_execution = __esm({
109793
109980
  });
109794
109981
  };
109795
109982
  isDefinitiveEntryRejection = (error48, entryMutationId) => error48 instanceof HyperliquidExchangeRejectionError && Boolean(entryMutationId) && String(error48.clientMutationId ?? "").trim().toLowerCase() === String(entryMutationId).trim().toLowerCase();
109796
- resolveExchangeSizeDecimals = async (symbol2, config2, publicRequestPriority) => {
109983
+ resolveExchangeSizeDecimals = async (symbol2, config2, publicRequestPriority, profileId) => {
109797
109984
  const { sz_decimals: sizeDecimals } = await resolveHyperliquidAsset({
109798
109985
  symbol: symbol2,
109799
109986
  config: config2,
109800
- publicRequestPriority
109987
+ publicRequestPriority,
109988
+ profileId
109801
109989
  });
109802
109990
  if (!Number.isInteger(sizeDecimals) || sizeDecimals < 0) {
109803
109991
  throw new Error(`Hyperliquid size precision is unavailable for ${symbol2}.`);
@@ -109837,6 +110025,7 @@ var init_runtime_execution = __esm({
109837
110025
  const asset = await resolveHyperliquidAsset({
109838
110026
  symbol: input.executionContext.symbol,
109839
110027
  config: input.config ?? void 0,
110028
+ profileId: input.profileId,
109840
110029
  publicRequestPriority: executionReadPriority(input),
109841
110030
  refreshCatalog: true
109842
110031
  });
@@ -110403,7 +110592,7 @@ var init_runtime_execution = __esm({
110403
110592
  const groups2 = readFreshClientProtectiveGroups(String(request.profileId).trim(), context.symbol);
110404
110593
  if (hasClientProtectiveGroupReadFailure(String(request.profileId).trim(), context.symbol) || groups2.some((group) => group.walletAddress !== String(context.walletAddress ?? "").trim().toLowerCase() || group.pendingEntry || group.attachmentJournal || group.cleanupRequired || group.legs.some((leg) => leg.replacement))) return [];
110405
110594
  if (!groups2.some((group) => group.legs.some((leg) => leg.isTrailing && typeof leg.orderId === "number"))) return [];
110406
- const assetSizeDecimals = await resolveExchangeSizeDecimals(context.symbol, request.config ?? void 0, "trading_reduce");
110595
+ const assetSizeDecimals = await resolveExchangeSizeDecimals(context.symbol, request.config ?? void 0, "trading_reduce", request.profileId);
110407
110596
  const isLong = context.currentPositionSize > 0;
110408
110597
  const improves = groups2.some((group) => group.isLong === isLong && group.legs.some((leg) => {
110409
110598
  if (!leg.isTrailing || typeof leg.orderId !== "number") return false;
@@ -110485,7 +110674,7 @@ var init_runtime_execution = __esm({
110485
110674
  if (!hasUnresolvedClientProtectiveIdentity(groups2)) continue;
110486
110675
  let symbolReports = [];
110487
110676
  try {
110488
- const sizeDecimals = await resolveExchangeSizeDecimals(symbol2, input.config, "trading_reconcile");
110677
+ const sizeDecimals = await resolveExchangeSizeDecimals(symbol2, input.config, "trading_reconcile", profileId);
110489
110678
  const core = {
110490
110679
  profileId,
110491
110680
  config: input.config,
@@ -110715,7 +110904,7 @@ var init_runtime_execution = __esm({
110715
110904
  const ownGroups = groups2.filter((group) => group.pendingEntry != null && group.walletAddress === walletAddress.toLowerCase());
110716
110905
  if (ownGroups.length === 0) return [];
110717
110906
  input.beforeRead?.();
110718
- const sizeDecimals = await resolveExchangeSizeDecimals(symbol2, input.config, "trading_reconcile");
110907
+ const sizeDecimals = await resolveExchangeSizeDecimals(symbol2, input.config, "trading_reconcile", profileId);
110719
110908
  const request = {
110720
110909
  mutationAuthority: "manual_session",
110721
110910
  profileId,
@@ -110858,7 +111047,8 @@ var init_runtime_execution = __esm({
110858
111047
  sizeDecimals: await resolveExchangeSizeDecimals(
110859
111048
  unsizedInput.executionContext.symbol,
110860
111049
  unsizedInput.config ?? void 0,
110861
- unsizedInput.decision === "HOLD" || requestedUnits <= 0 ? "trading_reconcile" : executionReadPriority(unsizedInput)
111050
+ unsizedInput.decision === "HOLD" || requestedUnits <= 0 ? "trading_reconcile" : executionReadPriority(unsizedInput),
111051
+ unsizedInput.profileId
110862
111052
  )
110863
111053
  }
110864
111054
  };
@@ -112078,7 +112268,8 @@ var init_runtime_execution = __esm({
112078
112268
  const { sz_decimals: assetSizeDecimals } = await resolveHyperliquidAsset({
112079
112269
  symbol: input.executionContext.symbol,
112080
112270
  config: input.config,
112081
- publicRequestPriority: "trading_reduce"
112271
+ publicRequestPriority: "trading_reduce",
112272
+ profileId: input.profileId
112082
112273
  });
112083
112274
  const provisionalLeg = {
112084
112275
  kind,
@@ -112452,9 +112643,12 @@ var init_runtime_execution = __esm({
112452
112643
  roundingMode: "nearest",
112453
112644
  includePrivateContext: desiredPosition != null && Number.isFinite(desiredPosition),
112454
112645
  // The device reads its own position and mark; the server never reads
112455
- // a Client wallet.
112646
+ // a Client wallet. The bot's own profile and runtime config name the
112647
+ // market's execution row (a market VTX's cached list lacks is read here).
112456
112648
  walletAddress: input.walletAddress,
112457
- signal: input.signal
112649
+ signal: input.signal,
112650
+ profileId: input.profileId,
112651
+ config: input.config ?? null
112458
112652
  });
112459
112653
  if (desiredPosition != null && Number.isFinite(desiredPosition)) {
112460
112654
  const preparedContextMaxAgeMs = Number(
@@ -116424,33 +116618,33 @@ var init_history_evidence = __esm({
116424
116618
  isDecimalText = (value) => typeof value === "string" && DECIMAL_TEXT.test(value.trim());
116425
116619
  isRecord4 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
116426
116620
  parseHistoryPage = (stream, body, startMs, endMs) => {
116427
- const malformed = (detail) => new HistoryPageError(`The ${stream} page is not a valid Hyperliquid response: ${detail}`);
116621
+ const malformed2 = (detail) => new HistoryPageError(`The ${stream} page is not a valid Hyperliquid response: ${detail}`);
116428
116622
  if (!STREAMS.has(stream)) throw new HistoryPageError(`Unknown history stream ${stream}.`);
116429
- if (!isInt(startMs) || !isInt(endMs) || startMs < 0 || endMs < startMs) throw malformed("the window is invalid");
116430
- if (typeof body !== "string") throw malformed("the body must be the raw response text");
116623
+ if (!isInt(startMs) || !isInt(endMs) || startMs < 0 || endMs < startMs) throw malformed2("the window is invalid");
116624
+ if (typeof body !== "string") throw malformed2("the body must be the raw response text");
116431
116625
  let rows;
116432
116626
  try {
116433
116627
  rows = JSON.parse(body);
116434
116628
  } catch {
116435
- throw malformed("the body is not JSON");
116629
+ throw malformed2("the body is not JSON");
116436
116630
  }
116437
- if (!Array.isArray(rows)) throw malformed("the body is not a list");
116631
+ if (!Array.isArray(rows)) throw malformed2("the body is not a list");
116438
116632
  for (const row of rows) {
116439
- if (!isRecord4(row)) throw malformed("a row is not an object");
116633
+ if (!isRecord4(row)) throw malformed2("a row is not an object");
116440
116634
  const time3 = row.time;
116441
- if (!isInt(time3)) throw malformed("a row has no millisecond time");
116442
- if (time3 < startMs || time3 > endMs) throw malformed("a row lies outside the requested window");
116443
- if (!isText(row.hash)) throw malformed("a row has no hash");
116635
+ if (!isInt(time3)) throw malformed2("a row has no millisecond time");
116636
+ if (time3 < startMs || time3 > endMs) throw malformed2("a row lies outside the requested window");
116637
+ if (!isText(row.hash)) throw malformed2("a row has no hash");
116444
116638
  if (stream === "fills") {
116445
116639
  if (!(isText(row.coin) && isInt(row.oid) && (row.side === "A" || row.side === "B") && isDecimalText(row.px) && isDecimalText(row.sz))) {
116446
- throw malformed("a fill lacks coin, oid, side, px or sz");
116640
+ throw malformed2("a fill lacks coin, oid, side, px or sz");
116447
116641
  }
116448
116642
  continue;
116449
116643
  }
116450
116644
  const delta = row.delta;
116451
- if (!isRecord4(delta) || !isText(delta.type)) throw malformed("a row has no typed delta");
116645
+ if (!isRecord4(delta) || !isText(delta.type)) throw malformed2("a row has no typed delta");
116452
116646
  if (stream === "funding" && !(delta.type === "funding" && isText(delta.coin) && isDecimalText(delta.usdc))) {
116453
- throw malformed("a funding row lacks coin or usdc");
116647
+ throw malformed2("a funding row lacks coin or usdc");
116454
116648
  }
116455
116649
  }
116456
116650
  return rows;
@@ -116620,12 +116814,12 @@ var init_host_wake_schedule = __esm({
116620
116814
  init_define_VTX_GROK_POLICY();
116621
116815
  init_define_VTX_PI_MODEL_POLICY();
116622
116816
  marker = null;
116623
- markBatchableTimer = (handle) => {
116624
- marker?.(handle, "batchable");
116817
+ markBatchableTimer = (handle, options) => {
116818
+ marker?.(handle, "batchable", options);
116625
116819
  return handle;
116626
116820
  };
116627
- markDeferrableTimer = (handle) => {
116628
- marker?.(handle, "deferrable");
116821
+ markDeferrableTimer = (handle, options) => {
116822
+ marker?.(handle, "deferrable", options);
116629
116823
  return handle;
116630
116824
  };
116631
116825
  }
@@ -134256,7 +134450,7 @@ var init_engine = __esm({
134256
134450
  // its start.
134257
134451
  analyzingObservedAtMs: heartbeatObservedAtMs
134258
134452
  });
134259
- if (Number(response.protective_actions_pending ?? 0) > 0) {
134453
+ if (Number(response.protective_actions_pending ?? 0) > 0 || response.protective_evidence_due === true) {
134260
134454
  notifyClientProtectiveActionsPending(heartbeatProfileId);
134261
134455
  }
134262
134456
  if (this._isStopping || this._state === "stopped" || this._profileId !== heartbeatProfileId || this._sessionId !== heartbeatSessionId || this._deviceId !== heartbeatDeviceId || this._mode !== heartbeatMode || this._lifecycleGeneration !== heartbeatLifecycleGeneration) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.10.46",
3
+ "version": "2026.10.47",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",