@vtxmacro/cli 2026.10.34 → 2026.10.36
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 +1 -1
- package/bin/vtx-service-bootstrap.js +1 -1
- package/bin/vtx.js +96 -34
- package/package.json +1 -1
package/bin/vtx-mcp.js
CHANGED
|
@@ -37,7 +37,7 @@ var init_define_VTX_PI_MODEL_POLICY = __esm({
|
|
|
37
37
|
var agent_cli_release_default;
|
|
38
38
|
var init_agent_cli_release = __esm({
|
|
39
39
|
"agent-cli-release.json"() {
|
|
40
|
-
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.
|
|
40
|
+
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.36", 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" } } };
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
|
|
@@ -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.
|
|
17
|
+
var agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.36", 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
|
@@ -113,7 +113,7 @@ var init_routing = __esm({
|
|
|
113
113
|
var agent_cli_release_default;
|
|
114
114
|
var init_agent_cli_release = __esm({
|
|
115
115
|
"agent-cli-release.json"() {
|
|
116
|
-
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.
|
|
116
|
+
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.36", 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" } } };
|
|
117
117
|
}
|
|
118
118
|
});
|
|
119
119
|
|
|
@@ -56297,6 +56297,16 @@ function normalizeClientRuntimeSecretRateLimitErrorMessage(rawMessage, options)
|
|
|
56297
56297
|
);
|
|
56298
56298
|
return projectClientRuntimeSecretRateLimit(operation, retryAfterSeconds).detail;
|
|
56299
56299
|
}
|
|
56300
|
+
function getClientRuntimeSecretRateLimitRetryAfterSeconds(rawMessage, options) {
|
|
56301
|
+
const normalized = normalizeClientRuntimeSecretRateLimitErrorMessage(rawMessage, options);
|
|
56302
|
+
if (!normalized) {
|
|
56303
|
+
return null;
|
|
56304
|
+
}
|
|
56305
|
+
const retryFromDetail = normalized.match(/try\s*again\s*in\s*([0-9]+(?:\.[0-9]+)?)\s*seconds?/i)?.[1];
|
|
56306
|
+
return normalizeClientRuntimeSecretRetryAfterSeconds(
|
|
56307
|
+
retryFromDetail ?? options?.retryAfterHeader
|
|
56308
|
+
);
|
|
56309
|
+
}
|
|
56300
56310
|
function isClientRuntimeSecretRateLimitError(error48, options) {
|
|
56301
56311
|
const message = error48 instanceof Error ? error48.message : String(error48 ?? "");
|
|
56302
56312
|
return normalizeClientRuntimeSecretRateLimitErrorMessage(message, options) !== null;
|
|
@@ -96057,7 +96067,7 @@ function validateDeviceSecrets(value, options) {
|
|
|
96057
96067
|
missing: missing2
|
|
96058
96068
|
};
|
|
96059
96069
|
}
|
|
96060
|
-
var CLIENT_VAULT_CHANGED_EVENT, memory, runtimeSecretsInFlight, buildRuntimeSecretsRequestKey, fetchClientRuntimeSecretsSingleFlight, mapClientRuntimeSecretsToDeviceSecrets, normalizeLocalAiSecrets, normalizeOpenAiCompatibleSecrets, hasAnySecretValues, normalizeClientRuntimeSecretProvider, getResponseSecretVersion, buildHydrationState, normalizeProfileIdForApi, LEGACY_VAULT_PREFIX, LEGACY_VAULT_DB_NAME, LEGACY_VAULT_DB_VERSION, LEGACY_VAULT_KEY_STORE, safeLocalStorage, hasIndexedDb, base64ToArrayBuffer, openLegacyVaultDb, withLegacyStore, legacyRecordCache, readLegacyRecordUncached, readLegacyRecord, fillFromLegacy, legacyMigrations, ClientVault;
|
|
96070
|
+
var CLIENT_VAULT_CHANGED_EVENT, ClientRuntimeSecretRefreshPendingError, memory, runtimeSecretsInFlight, runtimeSecretsRetryAtMs, runtimeSecretsRetryKey, buildRuntimeSecretsRequestKey, fetchClientRuntimeSecretsSingleFlight, mapClientRuntimeSecretsToDeviceSecrets, normalizeLocalAiSecrets, normalizeOpenAiCompatibleSecrets, hasAnySecretValues, normalizeClientRuntimeSecretProvider, getResponseSecretVersion, buildHydrationState, normalizeProfileIdForApi, LEGACY_VAULT_PREFIX, LEGACY_VAULT_DB_NAME, LEGACY_VAULT_DB_VERSION, LEGACY_VAULT_KEY_STORE, safeLocalStorage, hasIndexedDb, base64ToArrayBuffer, openLegacyVaultDb, withLegacyStore, legacyRecordCache, readLegacyRecordUncached, readLegacyRecord, fillFromLegacy, legacyMigrations, ClientVault;
|
|
96061
96071
|
var init_vault = __esm({
|
|
96062
96072
|
"lib/runtime/vault.ts"() {
|
|
96063
96073
|
"use strict";
|
|
@@ -96075,9 +96085,19 @@ var init_vault = __esm({
|
|
|
96075
96085
|
init_client_runtime_secret_rate_limit_contract();
|
|
96076
96086
|
init_local_ai();
|
|
96077
96087
|
init_byokProviderRegistry();
|
|
96088
|
+
init_constants();
|
|
96078
96089
|
CLIENT_VAULT_CHANGED_EVENT = "vtx-client-vault-changed";
|
|
96090
|
+
ClientRuntimeSecretRefreshPendingError = class extends Error {
|
|
96091
|
+
constructor(retryAfterSeconds) {
|
|
96092
|
+
super("Client provider credentials changed; account refresh is pending.");
|
|
96093
|
+
this.code = "client_runtime_secret_refresh_pending";
|
|
96094
|
+
this.retryAfterSeconds = retryAfterSeconds;
|
|
96095
|
+
}
|
|
96096
|
+
};
|
|
96079
96097
|
memory = /* @__PURE__ */ new Map();
|
|
96080
96098
|
runtimeSecretsInFlight = /* @__PURE__ */ new Map();
|
|
96099
|
+
runtimeSecretsRetryAtMs = /* @__PURE__ */ new Map();
|
|
96100
|
+
runtimeSecretsRetryKey = (profileId) => String(normalizeProfileIdForApi(profileId) ?? profileId);
|
|
96081
96101
|
buildRuntimeSecretsRequestKey = (profileId, activeProvider, includeAllProviderKeys) => `${normalizeProfileIdForApi(profileId)}:${activeProvider ?? "auto"}:${includeAllProviderKeys ? "all" : "active"}`;
|
|
96082
96102
|
fetchClientRuntimeSecretsSingleFlight = (profileId, activeProvider, includeAllProviderKeys) => {
|
|
96083
96103
|
const key = buildRuntimeSecretsRequestKey(profileId, activeProvider, includeAllProviderKeys);
|
|
@@ -96085,13 +96105,35 @@ var init_vault = __esm({
|
|
|
96085
96105
|
if (existing) {
|
|
96086
96106
|
return existing;
|
|
96087
96107
|
}
|
|
96108
|
+
const retryKey = runtimeSecretsRetryKey(profileId);
|
|
96109
|
+
const retryAtMs = runtimeSecretsRetryAtMs.get(retryKey);
|
|
96110
|
+
if (retryAtMs !== void 0) {
|
|
96111
|
+
const remainingMs = retryAtMs - Date.now();
|
|
96112
|
+
if (remainingMs > 0) {
|
|
96113
|
+
return Promise.reject(new Error(projectClientRuntimeSecretRateLimit(
|
|
96114
|
+
"get",
|
|
96115
|
+
Math.ceil(remainingMs / MS_PER_SECOND)
|
|
96116
|
+
).detail));
|
|
96117
|
+
}
|
|
96118
|
+
runtimeSecretsRetryAtMs.delete(retryKey);
|
|
96119
|
+
}
|
|
96088
96120
|
const request = getClientRuntimeSecrets(
|
|
96089
96121
|
normalizeProfileIdForApi(profileId),
|
|
96090
96122
|
{
|
|
96091
96123
|
activeProvider,
|
|
96092
96124
|
includeAllProviderKeys
|
|
96093
96125
|
}
|
|
96094
|
-
).
|
|
96126
|
+
).catch((error48) => {
|
|
96127
|
+
if (isClientRuntimeSecretRateLimitError(error48)) {
|
|
96128
|
+
const retryAfterSeconds = getClientRuntimeSecretRateLimitRetryAfterSeconds(
|
|
96129
|
+
error48 instanceof Error ? error48.message : String(error48)
|
|
96130
|
+
);
|
|
96131
|
+
if (retryAfterSeconds && retryAfterSeconds > 0) {
|
|
96132
|
+
runtimeSecretsRetryAtMs.set(retryKey, Date.now() + retryAfterSeconds * MS_PER_SECOND);
|
|
96133
|
+
}
|
|
96134
|
+
}
|
|
96135
|
+
throw error48;
|
|
96136
|
+
}).finally(() => {
|
|
96095
96137
|
runtimeSecretsInFlight.delete(key);
|
|
96096
96138
|
});
|
|
96097
96139
|
runtimeSecretsInFlight.set(key, request);
|
|
@@ -96348,27 +96390,8 @@ var init_vault = __esm({
|
|
|
96348
96390
|
static async refreshProviderSecretsForVersion(profileId, current, serverVersion) {
|
|
96349
96391
|
const version3 = normalizeClientRuntimeSecretVersion(serverVersion);
|
|
96350
96392
|
if (!version3) return current;
|
|
96351
|
-
let savedSecrets;
|
|
96352
96393
|
const stored = memory.get(profileId);
|
|
96353
|
-
|
|
96354
|
-
const hydrated = await _ClientVault.hydrateFromServerWithState(profileId, {
|
|
96355
|
-
includeAllProviderKeys: true,
|
|
96356
|
-
requireProviderSecret: false
|
|
96357
|
-
});
|
|
96358
|
-
if (hydrated.hydrationState.serverSecretVersion !== version3) {
|
|
96359
|
-
throw new Error("Client provider credentials changed; account refresh is pending.");
|
|
96360
|
-
}
|
|
96361
|
-
savedSecrets = hydrated.secrets;
|
|
96362
|
-
if (!memory.has(profileId)) {
|
|
96363
|
-
memory.set(profileId, {
|
|
96364
|
-
secrets: savedSecrets ?? { providerKeys: {} },
|
|
96365
|
-
serverSecretVersion: version3,
|
|
96366
|
-
allProviderKeysHydrated: true
|
|
96367
|
-
});
|
|
96368
|
-
}
|
|
96369
|
-
} else {
|
|
96370
|
-
savedSecrets = stored.secrets;
|
|
96371
|
-
}
|
|
96394
|
+
const savedSecrets = stored?.serverSecretVersion === version3 && stored.allProviderKeysHydrated ? stored.secrets : await _ClientVault.loadProviderSecretsRevision(profileId, version3);
|
|
96372
96395
|
return {
|
|
96373
96396
|
...current,
|
|
96374
96397
|
providerKeys: savedSecrets?.providerKeys ?? {},
|
|
@@ -96379,6 +96402,33 @@ var init_vault = __esm({
|
|
|
96379
96402
|
openaiCompatible: savedSecrets?.openaiCompatible
|
|
96380
96403
|
};
|
|
96381
96404
|
}
|
|
96405
|
+
/** Every provider secret of account revision `version`, read from the server when this page lacks it. */
|
|
96406
|
+
static async loadProviderSecretsRevision(profileId, version3) {
|
|
96407
|
+
let hydrated;
|
|
96408
|
+
try {
|
|
96409
|
+
hydrated = await _ClientVault.hydrateFromServerWithState(profileId, {
|
|
96410
|
+
includeAllProviderKeys: true,
|
|
96411
|
+
requireProviderSecret: false
|
|
96412
|
+
});
|
|
96413
|
+
} catch (error48) {
|
|
96414
|
+
const held = memory.get(profileId);
|
|
96415
|
+
if (isClientRuntimeSecretRateLimitError(error48) && held?.serverSecretVersion === version3) {
|
|
96416
|
+
return held.secrets;
|
|
96417
|
+
}
|
|
96418
|
+
throw error48;
|
|
96419
|
+
}
|
|
96420
|
+
if (hydrated.secretVersion !== version3) {
|
|
96421
|
+
throw new ClientRuntimeSecretRefreshPendingError(hydrated.rateLimited?.retryAfterSeconds ?? null);
|
|
96422
|
+
}
|
|
96423
|
+
if (!hydrated.rateLimited && !memory.has(profileId)) {
|
|
96424
|
+
memory.set(profileId, {
|
|
96425
|
+
secrets: hydrated.secrets ?? { providerKeys: {} },
|
|
96426
|
+
serverSecretVersion: version3,
|
|
96427
|
+
allProviderKeysHydrated: true
|
|
96428
|
+
});
|
|
96429
|
+
}
|
|
96430
|
+
return hydrated.secrets;
|
|
96431
|
+
}
|
|
96382
96432
|
static async hydrateFromServer(profileId, options) {
|
|
96383
96433
|
const result = await _ClientVault.hydrateFromServerWithState(profileId, options);
|
|
96384
96434
|
return result.secrets;
|
|
@@ -96400,17 +96450,24 @@ var init_vault = __esm({
|
|
|
96400
96450
|
includeAllProviderKeys
|
|
96401
96451
|
);
|
|
96402
96452
|
} catch (error48) {
|
|
96453
|
+
const record5 = memory.get(profileId);
|
|
96403
96454
|
const existing = await _ClientVault.getSecrets(profileId);
|
|
96404
96455
|
const localValidation = validateDeviceSecrets(existing, validationOptions);
|
|
96405
96456
|
if (isClientRuntimeSecretRateLimitError(error48) && localValidation.readyForClientRuntime && localValidation.normalized) {
|
|
96457
|
+
const message = error48 instanceof Error ? error48.message : String(error48);
|
|
96406
96458
|
return {
|
|
96407
96459
|
secrets: localValidation.normalized,
|
|
96408
|
-
hydrationState: await _ClientVault.getHydrationState(profileId, validationOptions)
|
|
96460
|
+
hydrationState: await _ClientVault.getHydrationState(profileId, validationOptions),
|
|
96461
|
+
// The revision of the copy returned (none for a legacy device copy).
|
|
96462
|
+
secretVersion: record5?.serverSecretVersion ?? null,
|
|
96463
|
+
rateLimited: { retryAfterSeconds: getClientRuntimeSecretRateLimitRetryAfterSeconds(message) ?? 0 }
|
|
96409
96464
|
};
|
|
96410
96465
|
}
|
|
96411
96466
|
throw error48;
|
|
96412
96467
|
}
|
|
96413
96468
|
const remoteSecretVersion = getResponseSecretVersion(remoteSecrets);
|
|
96469
|
+
const held = memory.get(profileId);
|
|
96470
|
+
const keepsCompleteCopy = !includeAllProviderKeys && remoteSecretVersion !== null && held?.allProviderKeysHydrated === true && held.serverSecretVersion === remoteSecretVersion;
|
|
96414
96471
|
const mapped = mapClientRuntimeSecretsToDeviceSecrets(remoteSecrets, {
|
|
96415
96472
|
activeProvider,
|
|
96416
96473
|
includeAllProviderKeys
|
|
@@ -96422,18 +96479,22 @@ var init_vault = __esm({
|
|
|
96422
96479
|
);
|
|
96423
96480
|
const validation = validateDeviceSecrets(merged, validationOptions);
|
|
96424
96481
|
if (!validation.normalized || !hasAnySecretValues(validation.normalized)) {
|
|
96425
|
-
_ClientVault.forget(profileId);
|
|
96482
|
+
if (!keepsCompleteCopy) _ClientVault.forget(profileId);
|
|
96426
96483
|
return {
|
|
96427
96484
|
secrets: validation.normalized,
|
|
96428
|
-
hydrationState: buildHydrationState(remoteSecrets, validation.normalized, "missing", null, validationOptions)
|
|
96485
|
+
hydrationState: keepsCompleteCopy ? buildHydrationState(remoteSecrets, validation.normalized, "memory", remoteSecretVersion, validationOptions) : buildHydrationState(remoteSecrets, validation.normalized, "missing", null, validationOptions),
|
|
96486
|
+
secretVersion: remoteSecretVersion,
|
|
96487
|
+
rateLimited: null
|
|
96429
96488
|
};
|
|
96430
96489
|
}
|
|
96431
|
-
|
|
96432
|
-
|
|
96433
|
-
|
|
96434
|
-
|
|
96435
|
-
|
|
96436
|
-
|
|
96490
|
+
if (!keepsCompleteCopy) {
|
|
96491
|
+
memory.set(profileId, {
|
|
96492
|
+
secrets: validation.normalized,
|
|
96493
|
+
serverSecretVersion: remoteSecretVersion,
|
|
96494
|
+
allProviderKeysHydrated: includeAllProviderKeys
|
|
96495
|
+
});
|
|
96496
|
+
notifyVaultChanged(profileId);
|
|
96497
|
+
}
|
|
96437
96498
|
return {
|
|
96438
96499
|
secrets: validation.normalized,
|
|
96439
96500
|
hydrationState: buildHydrationState(
|
|
@@ -96442,7 +96503,9 @@ var init_vault = __esm({
|
|
|
96442
96503
|
"memory",
|
|
96443
96504
|
remoteSecretVersion,
|
|
96444
96505
|
validationOptions
|
|
96445
|
-
)
|
|
96506
|
+
),
|
|
96507
|
+
secretVersion: remoteSecretVersion,
|
|
96508
|
+
rateLimited: null
|
|
96446
96509
|
};
|
|
96447
96510
|
}
|
|
96448
96511
|
/**
|
|
@@ -107401,7 +107464,6 @@ var init_runtime_execution = __esm({
|
|
|
107401
107464
|
}
|
|
107402
107465
|
if (state2 == null || !state2.enabled) return null;
|
|
107403
107466
|
const settings = nativeSettingsOf(input.request.executionContext);
|
|
107404
|
-
if (settings.stopLoss?.trailing) return null;
|
|
107405
107467
|
const symbol2 = normalizeHyperliquidMarketSymbol(input.request.executionContext.symbol);
|
|
107406
107468
|
const request = nativeEntryRequest({
|
|
107407
107469
|
settings,
|