@vtxmacro/cli 2026.10.33 → 2026.10.34

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.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.33", 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" } } };
116
+ agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.34", 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
 
@@ -3891,10 +3891,10 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
3891
3891
  env: invocation.env
3892
3892
  });
3893
3893
  const output3 = [];
3894
- let settled = false;
3894
+ let settled2 = false;
3895
3895
  const settle = (value) => {
3896
- if (settled) return;
3897
- settled = true;
3896
+ if (settled2) return;
3897
+ settled2 = true;
3898
3898
  clearTimeout(timer);
3899
3899
  resolvePromise(value);
3900
3900
  };
@@ -3921,10 +3921,10 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
3921
3921
  stdio: ["ignore", "pipe", "ignore"]
3922
3922
  });
3923
3923
  const output3 = [];
3924
- let settled = false;
3924
+ let settled2 = false;
3925
3925
  const settle = (value) => {
3926
- if (settled) return;
3927
- settled = true;
3926
+ if (settled2) return;
3927
+ settled2 = true;
3928
3928
  clearTimeout(timer);
3929
3929
  resolvePromise(value);
3930
3930
  };
@@ -3947,10 +3947,10 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
3947
3947
  });
3948
3948
  const output3 = [];
3949
3949
  let bytes3 = 0;
3950
- let settled = false;
3950
+ let settled2 = false;
3951
3951
  const settle = (value) => {
3952
- if (settled) return;
3953
- settled = true;
3952
+ if (settled2) return;
3953
+ settled2 = true;
3954
3954
  clearTimeout(timer);
3955
3955
  resolvePromise(value);
3956
3956
  };
@@ -4335,6 +4335,165 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
4335
4335
  }
4336
4336
  });
4337
4337
 
4338
+ // lib/runtime/abort.ts
4339
+ var ABORT_MESSAGE_TOKENS, readAbortLikeMessage, isAbortLikeError, toAbortError;
4340
+ var init_abort = __esm({
4341
+ "lib/runtime/abort.ts"() {
4342
+ "use strict";
4343
+ init_define_VTX_EXO_POLICY();
4344
+ init_define_VTX_GROK_POLICY();
4345
+ init_define_VTX_PI_MODEL_POLICY();
4346
+ ABORT_MESSAGE_TOKENS = [
4347
+ "the operation was aborted",
4348
+ "the user aborted a request",
4349
+ "request was aborted",
4350
+ "request aborted",
4351
+ "signal is aborted",
4352
+ "client runtime stop requested"
4353
+ ];
4354
+ readAbortLikeMessage = (error48) => {
4355
+ if (error48 instanceof Error) {
4356
+ return error48.message;
4357
+ }
4358
+ if (typeof error48 === "string") {
4359
+ return error48;
4360
+ }
4361
+ if (error48 && typeof error48 === "object" && typeof error48.message === "string") {
4362
+ return String(error48.message);
4363
+ }
4364
+ return "";
4365
+ };
4366
+ isAbortLikeError = (error48) => {
4367
+ if (typeof DOMException !== "undefined" && error48 instanceof DOMException) {
4368
+ return error48.name === "AbortError";
4369
+ }
4370
+ if (error48 instanceof Error && error48.name === "AbortError") {
4371
+ return true;
4372
+ }
4373
+ if (error48 && typeof error48 === "object" && error48.name === "AbortError") {
4374
+ return true;
4375
+ }
4376
+ const normalized = readAbortLikeMessage(error48).trim().toLowerCase();
4377
+ if (!normalized) {
4378
+ return false;
4379
+ }
4380
+ return ABORT_MESSAGE_TOKENS.some((token) => normalized.includes(token));
4381
+ };
4382
+ toAbortError = (error48, fallbackMessage = "The operation was aborted.") => {
4383
+ const message = readAbortLikeMessage(error48).trim() || fallbackMessage;
4384
+ try {
4385
+ return new DOMException(message, "AbortError");
4386
+ } catch {
4387
+ const fallback = new Error(message);
4388
+ fallback.name = "AbortError";
4389
+ return fallback;
4390
+ }
4391
+ };
4392
+ }
4393
+ });
4394
+
4395
+ // lib/runtime/runtime-redaction.ts
4396
+ var REDACTED_VALUE, WHITESPACE_CLASS, SEPARATOR, VALUE_RUN, NAME_LETTER_VARIANTS, NAME_START, NAME_PREFIX, secretName, SECRET_NAME_WORDS, NAMED_VALUE, SECRET_QUERY_PARAM_PATTERN, BEARER_TOKEN_PATTERN, ASSIGNMENT_SEPARATOR, AUTHORIZATION_SCHEMES, assignmentPattern, SECRET_ASSIGNMENT_PATTERN, SECRET_WORD_ASSIGNMENT_PATTERN, SECRET_TOKEN_PATTERN, redactAssignedValue, isRuntimeErrorObject, sanitizeRuntimeDiagnosticValue, sanitizeRuntimeNetworkPath, getSanitizedRuntimeErrorMessage, toSanitizedRuntimeError, getSanitizedRuntimeAbortReason;
4397
+ var init_runtime_redaction = __esm({
4398
+ "lib/runtime/runtime-redaction.ts"() {
4399
+ "use strict";
4400
+ init_define_VTX_EXO_POLICY();
4401
+ init_define_VTX_GROK_POLICY();
4402
+ init_define_VTX_PI_MODEL_POLICY();
4403
+ init_abort();
4404
+ REDACTED_VALUE = "[REDACTED]";
4405
+ WHITESPACE_CLASS = String.raw`[\t\n\v\f\r \x1c-\x1f\x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]`;
4406
+ SEPARATOR = WHITESPACE_CLASS;
4407
+ VALUE_RUN = String.raw`[^,\t\n\v\f\r ]+`;
4408
+ NAME_LETTER_VARIANTS = {
4409
+ s: String.raw`[s\u017f]`,
4410
+ k: String.raw`[k\u212a]`,
4411
+ i: String.raw`[i\u0131\u0130]`
4412
+ };
4413
+ NAME_START = "(?:^|[^A-Za-z0-9_.-])";
4414
+ NAME_PREFIX = "[A-Za-z0-9_.-]*";
4415
+ secretName = (word) => Array.from(word, (letter) => NAME_LETTER_VARIANTS[letter] ?? letter).join("");
4416
+ SECRET_NAME_WORDS = `(?:${[
4417
+ "key",
4418
+ "token",
4419
+ "secret",
4420
+ "password",
4421
+ "passphrase",
4422
+ "credentials",
4423
+ "credential",
4424
+ "authorization"
4425
+ ].map(secretName).join("|")})`;
4426
+ NAMED_VALUE = String.raw`("[^"]*"|'[^']*'` + String.raw`|(?:[^,\t\n\v\f\r ]*${SECRET_NAME_WORDS}(?:[:=]${SEPARATOR}+|${SEPARATOR}+[:=]${SEPARATOR}*))*${VALUE_RUN})`;
4427
+ SECRET_QUERY_PARAM_PATTERN = new RegExp(
4428
+ `([?&](?:${NAME_PREFIX}${SECRET_NAME_WORDS}|${secretName("auth")}|${secretName("sig")}|${secretName("signature")})=)${NAMED_VALUE}`,
4429
+ "gi"
4430
+ );
4431
+ BEARER_TOKEN_PATTERN = new RegExp(
4432
+ String.raw`(\bBearer${SEPARATOR}+)(?:[^,;\t\n\v\f\r ]*${SECRET_NAME_WORDS}(?:[:=]${SEPARATOR}+|${SEPARATOR}+[:=]${SEPARATOR}*))*[^,;\t\n\v\f\r ]+`,
4433
+ "gi"
4434
+ );
4435
+ ASSIGNMENT_SEPARATOR = `['"]?${SEPARATOR}*[:=]${SEPARATOR}*`;
4436
+ AUTHORIZATION_SCHEMES = "(?:Bearer|Basic|Digest|Token|Bot|Negotiate|NTLM|ApiKey)";
4437
+ assignmentPattern = (nameStart) => new RegExp(
4438
+ `(${nameStart}(?:${secretName("authorization")}${ASSIGNMENT_SEPARATOR}['"]?${AUTHORIZATION_SCHEMES}${SEPARATOR}+|${SECRET_NAME_WORDS}${ASSIGNMENT_SEPARATOR}))${NAMED_VALUE}`,
4439
+ "gi"
4440
+ );
4441
+ SECRET_ASSIGNMENT_PATTERN = assignmentPattern(`${NAME_START}${NAME_PREFIX}`);
4442
+ SECRET_WORD_ASSIGNMENT_PATTERN = assignmentPattern(
4443
+ `(?:^|[^A-Za-z0-9_])(?:(?:${["api", "access", "private"].map(secretName).join("|")})[_ -]?)?`
4444
+ );
4445
+ SECRET_TOKEN_PATTERN = /\b(?:AIza[A-Za-z0-9_-]+|sk-[A-Za-z0-9._-]+|xai-[A-Za-z0-9]{20,}|gsk_[A-Za-z0-9]{20,}|AQ\.[A-Za-z0-9._-]+|0x[a-fA-F0-9]{64})\b/g;
4446
+ redactAssignedValue = (_match, prefix, value) => {
4447
+ const quote = value[0] === '"' || value[0] === "'" ? value[0] : "";
4448
+ const closing = quote && value.length > 1 && value[value.length - 1] === quote ? quote : "";
4449
+ return `${prefix}${quote}${REDACTED_VALUE}${closing}`;
4450
+ };
4451
+ isRuntimeErrorObject = (error48) => error48 instanceof Error || error48 != null && typeof error48 === "object" && Object.prototype.toString.call(error48) === "[object DOMException]" && typeof error48.message === "string" && typeof error48.name === "string";
4452
+ sanitizeRuntimeDiagnosticValue = (value) => {
4453
+ const normalized = String(value || "");
4454
+ if (!normalized) {
4455
+ return normalized;
4456
+ }
4457
+ return normalized.replace(BEARER_TOKEN_PATTERN, `$1${REDACTED_VALUE}`).replace(SECRET_WORD_ASSIGNMENT_PATTERN, redactAssignedValue).replace(SECRET_TOKEN_PATTERN, REDACTED_VALUE).replace(SECRET_QUERY_PARAM_PATTERN, redactAssignedValue).replace(SECRET_ASSIGNMENT_PATTERN, redactAssignedValue);
4458
+ };
4459
+ sanitizeRuntimeNetworkPath = (value) => {
4460
+ const normalized = String(value || "").trim();
4461
+ if (!normalized) {
4462
+ return "/";
4463
+ }
4464
+ const withoutFragment = normalized.split("#", 1)[0] || normalized;
4465
+ const withoutQuery = withoutFragment.split("?", 1)[0] || withoutFragment;
4466
+ const sanitized = sanitizeRuntimeDiagnosticValue(withoutQuery.trim());
4467
+ return sanitized || "/";
4468
+ };
4469
+ getSanitizedRuntimeErrorMessage = (error48) => {
4470
+ const message = isRuntimeErrorObject(error48) ? error48.message : typeof error48 === "string" ? error48 : error48 == null ? null : String(error48);
4471
+ if (message == null) {
4472
+ return null;
4473
+ }
4474
+ return sanitizeRuntimeDiagnosticValue(message);
4475
+ };
4476
+ toSanitizedRuntimeError = (error48) => {
4477
+ const message = getSanitizedRuntimeErrorMessage(error48) || "Unknown runtime error.";
4478
+ if (isRuntimeErrorObject(error48) && error48.message === message) {
4479
+ if (isAbortLikeError(error48) && error48.name !== "AbortError") {
4480
+ if (error48 instanceof Error) error48.name = "AbortError";
4481
+ else return Object.assign(new Error(message), { name: "AbortError" });
4482
+ }
4483
+ return error48;
4484
+ }
4485
+ const sanitized = new Error(message);
4486
+ if (isAbortLikeError(error48)) {
4487
+ sanitized.name = "AbortError";
4488
+ } else if (isRuntimeErrorObject(error48) && error48.name) {
4489
+ sanitized.name = error48.name;
4490
+ }
4491
+ return sanitized;
4492
+ };
4493
+ getSanitizedRuntimeAbortReason = (signal, fallbackMessage = "The operation was aborted.") => isRuntimeErrorObject(signal?.reason) ? toSanitizedRuntimeError(signal.reason) : new DOMException(fallbackMessage, "AbortError");
4494
+ }
4495
+ });
4496
+
4338
4497
  // lib/cli-release/updater.ts
4339
4498
  var updater_exports = {};
4340
4499
  __export(updater_exports, {
@@ -4390,6 +4549,7 @@ var init_updater = __esm({
4390
4549
  init_stop_signals();
4391
4550
  init_config2();
4392
4551
  init_routing();
4552
+ init_runtime_redaction();
4393
4553
  CLI_PACKAGE_NAME = "@vtxmacro/cli";
4394
4554
  OFFICIAL_NPM_REGISTRY = "https://registry.npmjs.org";
4395
4555
  CLI_UPDATE_COMMAND = `npm install -g ${CLI_PACKAGE_NAME}@latest`;
@@ -4424,10 +4584,10 @@ var init_updater = __esm({
4424
4584
  });
4425
4585
  const stdout = [];
4426
4586
  const stderr = [];
4427
- let settled = false;
4587
+ let settled2 = false;
4428
4588
  const settle = (result) => {
4429
- if (settled) return;
4430
- settled = true;
4589
+ if (settled2) return;
4590
+ settled2 = true;
4431
4591
  resolvePromise(result);
4432
4592
  };
4433
4593
  child.stdout.on("data", (chunk) => stdout.push(Buffer.from(chunk)));
@@ -4845,7 +5005,7 @@ var init_updater = __esm({
4845
5005
  try {
4846
5006
  await ensureUpdaterPrivateDirectory(paths.root, paths.root, { platform: input.platform });
4847
5007
  } catch (error48) {
4848
- const reason = `update_directory_unsafe: ${error48 instanceof Error ? error48.message.slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown"}`;
5008
+ const reason = `update_directory_unsafe: ${error48 instanceof Error ? sanitizeRuntimeDiagnosticValue(error48.message).slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown"}`;
4849
5009
  await appendCliUpdateLog(paths, "cli_update_failed", { package_version: target.version, reason });
4850
5010
  return { kind: "failed", reason };
4851
5011
  }
@@ -4878,7 +5038,7 @@ var init_updater = __esm({
4878
5038
  await appendCliUpdateLog(paths, "cli_release_staged", { package_version: selection.package_version });
4879
5039
  return { kind: "staged", selection };
4880
5040
  } catch (error48) {
4881
- const reason = error48 instanceof Error ? error48.message.slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown";
5041
+ const reason = error48 instanceof Error ? sanitizeRuntimeDiagnosticValue(error48.message).slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown";
4882
5042
  await appendCliUpdateLog(paths, "cli_update_failed", { package_version: target.version, reason });
4883
5043
  return { kind: "failed", reason };
4884
5044
  } finally {
@@ -4966,7 +5126,7 @@ var init_updater = __esm({
4966
5126
  return runSelected();
4967
5127
  } catch (error48) {
4968
5128
  await appendCliUpdateLog(paths, "cli_update_check_failed", {
4969
- reason: error48 instanceof Error ? error48.message.slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown"
5129
+ reason: error48 instanceof Error ? sanitizeRuntimeDiagnosticValue(error48.message).slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown"
4970
5130
  });
4971
5131
  return { kind: "run" };
4972
5132
  }
@@ -5394,7 +5554,7 @@ var init_updater = __esm({
5394
5554
  return active && compareCliReleaseVersions(active.package_version, current) > 0 && rejection?.package_version !== active.package_version ? active : null;
5395
5555
  } catch (error48) {
5396
5556
  await appendCliUpdateLog(paths, "cli_runtime_release_poll_failed", {
5397
- reason: error48 instanceof Error ? error48.message.slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown"
5557
+ reason: error48 instanceof Error ? sanitizeRuntimeDiagnosticValue(error48.message).slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown"
5398
5558
  });
5399
5559
  return null;
5400
5560
  }
@@ -23618,20 +23778,20 @@ var init_credential_store = __esm({
23618
23778
  stdio: ["pipe", "pipe", "pipe"],
23619
23779
  windowsHide: true
23620
23780
  });
23621
- let settled = false;
23781
+ let settled2 = false;
23622
23782
  let terminating = false;
23623
23783
  const cleanup = () => {
23624
23784
  clearTimeout(timer);
23625
23785
  options.signal?.removeEventListener("abort", abort);
23626
23786
  };
23627
23787
  const settleReject = (error48) => {
23628
- if (settled) return;
23629
- settled = true;
23788
+ if (settled2) return;
23789
+ settled2 = true;
23630
23790
  cleanup();
23631
23791
  reject(error48);
23632
23792
  };
23633
23793
  const terminate = (error48) => {
23634
- if (settled || terminating) return;
23794
+ if (settled2 || terminating) return;
23635
23795
  terminating = true;
23636
23796
  void terminateCredentialProcessTree(child).finally(() => settleReject(error48));
23637
23797
  };
@@ -23654,12 +23814,12 @@ var init_credential_store = __esm({
23654
23814
  child.stderr.resume();
23655
23815
  child.once("error", () => settleReject(new Error("OS credential command could not start.")));
23656
23816
  child.once("close", (exitCode) => {
23657
- if (terminating || settled) return;
23817
+ if (terminating || settled2) return;
23658
23818
  try {
23659
23819
  const normalizedExitCode = Number(exitCode ?? 1);
23660
23820
  const stdout = Buffer.concat(stdoutChunks).toString("utf8");
23661
23821
  const transformedStdout = normalizedExitCode === 0 ? command.transformStdout?.(stdout) ?? stdout : stdout;
23662
- settled = true;
23822
+ settled2 = true;
23663
23823
  cleanup();
23664
23824
  resolve14({
23665
23825
  exitCode: normalizedExitCode,
@@ -24888,16 +25048,16 @@ async function beginInferenceOAuthLogin(options) {
24888
25048
  state: pkce.state,
24889
25049
  challenge: pkce.challenge
24890
25050
  });
24891
- let settled = false;
25051
+ let settled2 = false;
24892
25052
  let rejectCompletion;
24893
25053
  const completion = new Promise((resolve14, reject) => {
24894
25054
  rejectCompletion = reject;
24895
25055
  handler = async (requestUrl2, method, writeResponse) => {
24896
- if (settled) {
25056
+ if (settled2) {
24897
25057
  writeResponse(HTTP_STATUS.CONFLICT, "Authorization callback is no longer active.");
24898
25058
  return;
24899
25059
  }
24900
- settled = true;
25060
+ settled2 = true;
24901
25061
  try {
24902
25062
  if (method !== "GET") throw new Error("Inference OAuth callback is invalid.");
24903
25063
  const callbackUrl = new URL(requestUrl2, redirectUri).toString();
@@ -24982,8 +25142,8 @@ async function beginInferenceOAuthLogin(options) {
24982
25142
  };
24983
25143
  });
24984
25144
  const abortLogin = () => {
24985
- if (settled) return;
24986
- settled = true;
25145
+ if (settled2) return;
25146
+ settled2 = true;
24987
25147
  void closeServer(server).finally(() => rejectCompletion(
24988
25148
  new InferenceOAuthRequestError(
24989
25149
  "request_aborted",
@@ -24994,8 +25154,8 @@ async function beginInferenceOAuthLogin(options) {
24994
25154
  options.signal?.addEventListener("abort", abortLogin, { once: true });
24995
25155
  if (options.signal?.aborted) abortLogin();
24996
25156
  const timeout = setTimeout(() => {
24997
- if (settled) return;
24998
- settled = true;
25157
+ if (settled2) return;
25158
+ settled2 = true;
24999
25159
  void closeServer(server).finally(
25000
25160
  () => rejectCompletion(new Error("Inference OAuth authorization timed out."))
25001
25161
  );
@@ -25016,8 +25176,8 @@ async function beginInferenceOAuthLogin(options) {
25016
25176
  redirectUri,
25017
25177
  completion,
25018
25178
  cancel: async () => {
25019
- if (settled) return;
25020
- settled = true;
25179
+ if (settled2) return;
25180
+ settled2 = true;
25021
25181
  await closeServer(server);
25022
25182
  rejectCompletion(new Error("Inference OAuth authorization was cancelled."));
25023
25183
  }
@@ -25120,6 +25280,7 @@ var init_mcp_client = __esm({
25120
25280
  init_runtime_policy_generated2();
25121
25281
  init_constants();
25122
25282
  init_mcp_transport();
25283
+ init_runtime_redaction();
25123
25284
  init_external_inference_contract();
25124
25285
  EXTERNAL_INFERENCE_MCP_PROTOCOL_VERSION = "2026-07-28";
25125
25286
  EXTERNAL_INFERENCE_AUTOMATED_HOST_TOOLS = [
@@ -25300,7 +25461,7 @@ var init_mcp_client = __esm({
25300
25461
  publicRejectionReason = (text) => {
25301
25462
  const marker = text.indexOf(PUBLIC_TOOL_ERROR_PREFIX);
25302
25463
  const [firstLine = ""] = (marker < 0 ? text : text.slice(0, marker)).split("\n");
25303
- const reason = firstLine.replace(CONTROL_CHARACTERS, " ").trim();
25464
+ const reason = sanitizeRuntimeDiagnosticValue(firstLine.replace(CONTROL_CHARACTERS, " ")).trim();
25304
25465
  if (!reason) return null;
25305
25466
  return reason.length > MAX_REJECTION_REASON_CHARS ? `${reason.slice(0, MAX_REJECTION_REASON_CHARS)}\u2026` : reason;
25306
25467
  };
@@ -35854,7 +36015,7 @@ var init_runner = __esm({
35854
36015
  };
35855
36016
  settlesWithin = async (promise2, timeoutMs) => {
35856
36017
  let timer = null;
35857
- const settled = await Promise.race([
36018
+ const settled2 = await Promise.race([
35858
36019
  promise2.then(() => true, () => true),
35859
36020
  new Promise((resolve14) => {
35860
36021
  timer = setTimeout(
@@ -35864,7 +36025,7 @@ var init_runner = __esm({
35864
36025
  })
35865
36026
  ]);
35866
36027
  if (timer !== null) clearTimeout(timer);
35867
- return settled;
36028
+ return settled2;
35868
36029
  };
35869
36030
  defaultRegisterSignalHandlers = (requestDrain) => {
35870
36031
  const onSigint = () => requestDrain("sigint");
@@ -41325,10 +41486,10 @@ var init_codex_adapter = __esm({
41325
41486
  }
41326
41487
  const start = this.durableSessionStart;
41327
41488
  return await new Promise((resolveSession, reject) => {
41328
- let settled = false;
41489
+ let settled2 = false;
41329
41490
  const finish = (callback) => {
41330
- if (settled) return;
41331
- settled = true;
41491
+ if (settled2) return;
41492
+ settled2 = true;
41332
41493
  clearTimeout(timer);
41333
41494
  signal?.removeEventListener("abort", onAbort);
41334
41495
  callback();
@@ -41404,10 +41565,10 @@ var init_codex_adapter = __esm({
41404
41565
  }
41405
41566
  async waitForCapabilities(preflight, deadlineAtMs, signal) {
41406
41567
  return await new Promise((resolve14, reject) => {
41407
- let settled = false;
41568
+ let settled2 = false;
41408
41569
  const finish = (callback) => {
41409
- if (settled) return;
41410
- settled = true;
41570
+ if (settled2) return;
41571
+ settled2 = true;
41411
41572
  clearTimeout(timer);
41412
41573
  signal?.removeEventListener("abort", onAbort);
41413
41574
  callback();
@@ -47436,6 +47597,7 @@ var init_service = __esm({
47436
47597
  init_define_VTX_GROK_POLICY();
47437
47598
  init_define_VTX_PI_MODEL_POLICY();
47438
47599
  init_service_launcher_state();
47600
+ init_runtime_redaction();
47439
47601
  init_agent_cli_release();
47440
47602
  init_runtime_policy_generated();
47441
47603
  init_constants();
@@ -48722,7 +48884,7 @@ ${result.stderr}`)) {
48722
48884
  event: "worker_output",
48723
48885
  instance_name: worker.instance_name,
48724
48886
  stream,
48725
- message: line.slice(0, SERVICE_POLICY.worker_output_line_max_chars)
48887
+ message: sanitizeRuntimeDiagnosticValue(line).slice(0, SERVICE_POLICY.worker_output_line_max_chars)
48726
48888
  })}
48727
48889
  `);
48728
48890
  }
@@ -49002,8 +49164,8 @@ ${result.stderr}`)) {
49002
49164
  record5.controller.abort();
49003
49165
  await updateRecord(record5, "draining");
49004
49166
  }
49005
- const settled = await Promise.allSettled(retiring.map((record5) => record5.promise));
49006
- const failedDrain = settled.find(
49167
+ const settled2 = await Promise.allSettled(retiring.map((record5) => record5.promise));
49168
+ const failedDrain = settled2.find(
49007
49169
  (result) => result.status === "rejected"
49008
49170
  );
49009
49171
  if (failedDrain) {
@@ -49037,8 +49199,8 @@ ${result.stderr}`)) {
49037
49199
  record5.controller.abort();
49038
49200
  await updateRecord(record5, "draining");
49039
49201
  }
49040
- const settled = await Promise.allSettled(draining.map((record5) => record5.promise));
49041
- const failedDrain = settled.find(
49202
+ const settled2 = await Promise.allSettled(draining.map((record5) => record5.promise));
49203
+ const failedDrain = settled2.find(
49042
49204
  (result) => result.status === "rejected"
49043
49205
  );
49044
49206
  if (failedDrain) throw failedDrain.reason;
@@ -49081,8 +49243,8 @@ ${result.stderr}`)) {
49081
49243
  await drainWorkers();
49082
49244
  break;
49083
49245
  }
49084
- const settled = await completion;
49085
- const failure2 = settled.find((result) => result.status === "rejected");
49246
+ const settled2 = await completion;
49247
+ const failure2 = settled2.find((result) => result.status === "rejected");
49086
49248
  if (failure2) throw failure2.reason;
49087
49249
  break;
49088
49250
  }
@@ -55607,63 +55769,6 @@ var init_request_encoding = __esm({
55607
55769
  }
55608
55770
  });
55609
55771
 
55610
- // lib/runtime/abort.ts
55611
- var ABORT_MESSAGE_TOKENS, readAbortLikeMessage, isAbortLikeError, toAbortError;
55612
- var init_abort = __esm({
55613
- "lib/runtime/abort.ts"() {
55614
- "use strict";
55615
- init_define_VTX_EXO_POLICY();
55616
- init_define_VTX_GROK_POLICY();
55617
- init_define_VTX_PI_MODEL_POLICY();
55618
- ABORT_MESSAGE_TOKENS = [
55619
- "the operation was aborted",
55620
- "the user aborted a request",
55621
- "request was aborted",
55622
- "request aborted",
55623
- "signal is aborted",
55624
- "client runtime stop requested"
55625
- ];
55626
- readAbortLikeMessage = (error48) => {
55627
- if (error48 instanceof Error) {
55628
- return error48.message;
55629
- }
55630
- if (typeof error48 === "string") {
55631
- return error48;
55632
- }
55633
- if (error48 && typeof error48 === "object" && typeof error48.message === "string") {
55634
- return String(error48.message);
55635
- }
55636
- return "";
55637
- };
55638
- isAbortLikeError = (error48) => {
55639
- if (typeof DOMException !== "undefined" && error48 instanceof DOMException) {
55640
- return error48.name === "AbortError";
55641
- }
55642
- if (error48 instanceof Error && error48.name === "AbortError") {
55643
- return true;
55644
- }
55645
- if (error48 && typeof error48 === "object" && error48.name === "AbortError") {
55646
- return true;
55647
- }
55648
- const normalized = readAbortLikeMessage(error48).trim().toLowerCase();
55649
- if (!normalized) {
55650
- return false;
55651
- }
55652
- return ABORT_MESSAGE_TOKENS.some((token) => normalized.includes(token));
55653
- };
55654
- toAbortError = (error48, fallbackMessage = "The operation was aborted.") => {
55655
- const message = readAbortLikeMessage(error48).trim() || fallbackMessage;
55656
- try {
55657
- return new DOMException(message, "AbortError");
55658
- } catch {
55659
- const fallback = new Error(message);
55660
- fallback.name = "AbortError";
55661
- return fallback;
55662
- }
55663
- };
55664
- }
55665
- });
55666
-
55667
55772
  // lib/api/shared.ts
55668
55773
  function configureApiTransport(transport) {
55669
55774
  if (transport === null) {
@@ -55691,7 +55796,7 @@ function getProfileHeaders(baseHeaders = {}, explicitProfileId) {
55691
55796
  if (profileId) headers["x-profile-id"] = profileId.toString();
55692
55797
  return headers;
55693
55798
  }
55694
- var configuredApiTransport, getApiUrl, sendApiRequest, apiFetch, sleep, inFlightClientGetRequests, recentClientGetResponses, clientGetRequestGenerations, initializedClientGetRequestKeys, CLIENT_GET_DEDUPE_TTL_MS, CLIENT_RUNTIME_STATUSES_DEDUPE_TTL_MS, CLIENT_LLM_CONFIG_PRIME_TTL_MS, AUTH_BOOTSTRAP_GET_MAX_ATTEMPTS, AUTH_BOOTSTRAP_RETRY_JITTER_MS, canUseClientGetRequestCache, invalidateClientGetRequestCache, raceWithAbortSignal, shareClientGetRequest, clientGetRequestKey, clientPreferencesRequestKey, invalidateClientPreferencesCache, parseRetryAfterMs2, resolveAuthBootstrapRetryDelayMs, fetchAuthBootstrapGetWithRetry, annotateMarketDataRequestError, buildMarketDataFetchError, buildMarketDataNetworkError, buildMarketDataResponseBodyError, isTransientNetworkFetchError, createIdempotencyKey, getErrorMessage, getErrorPayloadOrEmpty, getErrorPayloadOrFallbackDetail, getErrorMessageFromResponse, throwUnauthorizedIfNeeded, activeProfileId, PROFILE_STORAGE_KEY;
55799
+ var configuredApiTransport, getApiUrl, sendApiRequest, apiFetch, sleep, DEVICE_CLOCK_HEADER, deviceClockHeader, inFlightClientGetRequests, recentClientGetResponses, clientGetRequestGenerations, initializedClientGetRequestKeys, CLIENT_GET_DEDUPE_TTL_MS, CLIENT_RUNTIME_STATUSES_DEDUPE_TTL_MS, CLIENT_LLM_CONFIG_PRIME_TTL_MS, AUTH_BOOTSTRAP_GET_MAX_ATTEMPTS, AUTH_BOOTSTRAP_RETRY_JITTER_MS, canUseClientGetRequestCache, invalidateClientGetRequestCache, raceWithAbortSignal, shareClientGetRequest, clientGetRequestKey, clientPreferencesRequestKey, invalidateClientPreferencesCache, parseRetryAfterMs2, resolveAuthBootstrapRetryDelayMs, fetchAuthBootstrapGetWithRetry, annotateMarketDataRequestError, buildMarketDataFetchError, buildMarketDataNetworkError, buildMarketDataResponseBodyError, isTransientNetworkFetchError, createIdempotencyKey, getErrorMessage, getErrorPayloadOrEmpty, getErrorPayloadOrFallbackDetail, getErrorMessageFromResponse, throwUnauthorizedIfNeeded, activeProfileId, PROFILE_STORAGE_KEY;
55695
55800
  var init_shared = __esm({
55696
55801
  "lib/api/shared.ts"() {
55697
55802
  "use strict";
@@ -55704,6 +55809,7 @@ var init_shared = __esm({
55704
55809
  init_runtime_policy_generated2();
55705
55810
  init_constants();
55706
55811
  init_abort();
55812
+ init_runtime_redaction();
55707
55813
  configuredApiTransport = null;
55708
55814
  getApiUrl = () => {
55709
55815
  if (configuredApiTransport) return configuredApiTransport.baseUrl;
@@ -55738,6 +55844,8 @@ var init_shared = __esm({
55738
55844
  return sent !== init2 && refusedUnread(response, readsGzip) ? sendApiRequest(input, init2) : response;
55739
55845
  };
55740
55846
  sleep = (ms) => new Promise((resolve14) => setTimeout(resolve14, ms));
55847
+ DEVICE_CLOCK_HEADER = "X-Device-Clock-Ms";
55848
+ deviceClockHeader = () => ({ [DEVICE_CLOCK_HEADER]: String(Date.now()) });
55741
55849
  inFlightClientGetRequests = /* @__PURE__ */ new Map();
55742
55850
  recentClientGetResponses = /* @__PURE__ */ new Map();
55743
55851
  clientGetRequestGenerations = /* @__PURE__ */ new Map();
@@ -55852,7 +55960,7 @@ var init_shared = __esm({
55852
55960
  responseText = "";
55853
55961
  }
55854
55962
  const statusText = response.statusText ? ` ${response.statusText}` : "";
55855
- const detail = responseText ? `: ${responseText.slice(0, runtime_policy_generated_default2.ui.api_client.market_data_error_detail_chars)}` : "";
55963
+ const detail = responseText ? `: ${sanitizeRuntimeDiagnosticValue(responseText).slice(0, runtime_policy_generated_default2.ui.api_client.market_data_error_detail_chars)}` : "";
55856
55964
  return annotateMarketDataRequestError(
55857
55965
  new Error(`Market data request failed: ${label2} unavailable (HTTP ${response.status}${statusText})${detail}`),
55858
55966
  path,
@@ -56324,68 +56432,6 @@ var init_google_auth_url = __esm({
56324
56432
  }
56325
56433
  });
56326
56434
 
56327
- // lib/runtime/runtime-redaction.ts
56328
- var REDACTED_VALUE, SECRET_QUERY_PARAM_PATTERN, BEARER_TOKEN_PATTERN, SECRET_ASSIGNMENT_PATTERN, SECRET_KEYWORD_VALUE_PATTERN, OPENAI_STYLE_KEY_PATTERN, VERTEX_EXPRESS_KEY_PATTERN, isRuntimeErrorObject, sanitizeRuntimeDiagnosticValue, sanitizeRuntimeNetworkPath, getSanitizedRuntimeErrorMessage, toSanitizedRuntimeError, getSanitizedRuntimeAbortReason;
56329
- var init_runtime_redaction = __esm({
56330
- "lib/runtime/runtime-redaction.ts"() {
56331
- "use strict";
56332
- init_define_VTX_EXO_POLICY();
56333
- init_define_VTX_GROK_POLICY();
56334
- init_define_VTX_PI_MODEL_POLICY();
56335
- init_abort();
56336
- REDACTED_VALUE = "[REDACTED]";
56337
- SECRET_QUERY_PARAM_PATTERN = /([?&](?:access_token|api(?:_|-)?key|auth|authorization|key|private_key|secret|sig|signature|token)=)[^&#\s]*/gi;
56338
- BEARER_TOKEN_PATTERN = /\b(Bearer)\s+[A-Za-z0-9._:-]+\b/gi;
56339
- SECRET_ASSIGNMENT_PATTERN = /((?:authorization\s*[:=]\s*['"]?Bearer\s+|x-api-key\s*[:=]\s*['"]?|api(?:_|-)?key\s*[:=]\s*['"]?|\bkey\s*[:=]\s*['"]?|token\s*[:=]\s*['"]?|secret\s*[:=]\s*['"]?))[^'"\s,}]+/gi;
56340
- SECRET_KEYWORD_VALUE_PATTERN = /((?:private(?:_|-|\s)?key|signing(?:_|-|\s)?key)\s*[:=]\s*['"]?)(0x[a-fA-F0-9]{64}|[^'"\s,}]+)/gi;
56341
- OPENAI_STYLE_KEY_PATTERN = /\bsk-[A-Za-z0-9._-]+\b/g;
56342
- VERTEX_EXPRESS_KEY_PATTERN = /\bAQ\.[A-Za-z0-9._-]+\b/g;
56343
- isRuntimeErrorObject = (error48) => error48 instanceof Error || error48 != null && typeof error48 === "object" && Object.prototype.toString.call(error48) === "[object DOMException]" && typeof error48.message === "string" && typeof error48.name === "string";
56344
- sanitizeRuntimeDiagnosticValue = (value) => {
56345
- const normalized = String(value || "");
56346
- if (!normalized) {
56347
- return normalized;
56348
- }
56349
- return normalized.replace(SECRET_QUERY_PARAM_PATTERN, `$1${REDACTED_VALUE}`).replace(BEARER_TOKEN_PATTERN, `$1 ${REDACTED_VALUE}`).replace(SECRET_ASSIGNMENT_PATTERN, `$1${REDACTED_VALUE}`).replace(SECRET_KEYWORD_VALUE_PATTERN, `$1${REDACTED_VALUE}`).replace(OPENAI_STYLE_KEY_PATTERN, REDACTED_VALUE).replace(VERTEX_EXPRESS_KEY_PATTERN, REDACTED_VALUE);
56350
- };
56351
- sanitizeRuntimeNetworkPath = (value) => {
56352
- const normalized = String(value || "").trim();
56353
- if (!normalized) {
56354
- return "/";
56355
- }
56356
- const withoutFragment = normalized.split("#", 1)[0] || normalized;
56357
- const withoutQuery = withoutFragment.split("?", 1)[0] || withoutFragment;
56358
- const sanitized = sanitizeRuntimeDiagnosticValue(withoutQuery.trim());
56359
- return sanitized || "/";
56360
- };
56361
- getSanitizedRuntimeErrorMessage = (error48) => {
56362
- const message = isRuntimeErrorObject(error48) ? error48.message : typeof error48 === "string" ? error48 : error48 == null ? null : String(error48);
56363
- if (message == null) {
56364
- return null;
56365
- }
56366
- return sanitizeRuntimeDiagnosticValue(message);
56367
- };
56368
- toSanitizedRuntimeError = (error48) => {
56369
- const message = getSanitizedRuntimeErrorMessage(error48) || "Unknown runtime error.";
56370
- if (isRuntimeErrorObject(error48) && error48.message === message) {
56371
- if (isAbortLikeError(error48) && error48.name !== "AbortError") {
56372
- if (error48 instanceof Error) error48.name = "AbortError";
56373
- else return Object.assign(new Error(message), { name: "AbortError" });
56374
- }
56375
- return error48;
56376
- }
56377
- const sanitized = new Error(message);
56378
- if (isAbortLikeError(error48)) {
56379
- sanitized.name = "AbortError";
56380
- } else if (isRuntimeErrorObject(error48) && error48.name) {
56381
- sanitized.name = error48.name;
56382
- }
56383
- return sanitized;
56384
- };
56385
- getSanitizedRuntimeAbortReason = (signal, fallbackMessage = "The operation was aborted.") => isRuntimeErrorObject(signal?.reason) ? toSanitizedRuntimeError(signal.reason) : new DOMException(fallbackMessage, "AbortError");
56386
- }
56387
- });
56388
-
56389
56435
  // lib/runtime/channel-sender.ts
56390
56436
  var RUNTIME_TAB_ID_STORAGE_KEY, createRuntimeUuid, getOrCreateRuntimeTabSenderId;
56391
56437
  var init_channel_sender = __esm({
@@ -57086,6 +57132,7 @@ var init_local_breadcrumbs = __esm({
57086
57132
  init_define_VTX_PI_MODEL_POLICY();
57087
57133
  init_constants();
57088
57134
  init_runtime_policy_generated2();
57135
+ init_runtime_redaction();
57089
57136
  LOCAL_RUNTIME_BREADCRUMBS_STORAGE_KEY = "vtx_client_runtime_local_breadcrumbs_v1";
57090
57137
  DEVICE_DIAGNOSTICS2 = runtime_policy_generated_default2.trading.engine.client_runtime.device_diagnostics;
57091
57138
  LOCAL_RUNTIME_BREADCRUMBS_MAX_ENTRIES = DEVICE_DIAGNOSTICS2.breadcrumbs_max_entries;
@@ -57098,7 +57145,7 @@ var init_local_breadcrumbs = __esm({
57098
57145
  return window;
57099
57146
  };
57100
57147
  sanitizeText = (value, maxLength) => {
57101
- const text = String(value ?? "").trim();
57148
+ const text = sanitizeRuntimeDiagnosticValue(String(value ?? "")).trim();
57102
57149
  if (!text) {
57103
57150
  return null;
57104
57151
  }
@@ -57529,6 +57576,7 @@ var init_market_data = __esm({
57529
57576
  init_define_VTX_GROK_POLICY();
57530
57577
  init_define_VTX_PI_MODEL_POLICY();
57531
57578
  init_abort();
57579
+ init_runtime_redaction();
57532
57580
  init_network_debug();
57533
57581
  init_shared();
57534
57582
  init_constants();
@@ -58972,7 +59020,7 @@ var init_hyperliquid_public_read = __esm({
58972
59020
  let permit = null;
58973
59021
  const rowWeightedReservationId = !hostTransport && HYPERLIQUID_ROW_WEIGHTED_INFO_REQUESTS.includes(requestType) ? crypto.randomUUID() : void 0;
58974
59022
  let outcome = "cancelled";
58975
- let settled;
59023
+ let settled2;
58976
59024
  let acquiring = false;
58977
59025
  let observedRateLimit;
58978
59026
  let privateRouteUsed = false;
@@ -59016,7 +59064,7 @@ var init_hyperliquid_public_read = __esm({
59016
59064
  checkAbort(signal);
59017
59065
  }
59018
59066
  pending2.set(key, { promise: new Promise((resolve14) => {
59019
- settled = resolve14;
59067
+ settled2 = resolve14;
59020
59068
  }), priority });
59021
59069
  }
59022
59070
  if (options.reservation?.closed) throw new DOMException("Hyperliquid account read was cancelled.", "AbortError");
@@ -59129,9 +59177,9 @@ var init_hyperliquid_public_read = __esm({
59129
59177
  try {
59130
59178
  await finishHyperliquidRecoveryRequest(permit, outcome);
59131
59179
  } finally {
59132
- if (settled) {
59180
+ if (settled2) {
59133
59181
  pending2.delete(key);
59134
- settled();
59182
+ settled2();
59135
59183
  }
59136
59184
  }
59137
59185
  }
@@ -92783,7 +92831,7 @@ var init_hyperliquid_client = __esm({
92783
92831
  }
92784
92832
  settlementAttempted = true;
92785
92833
  try {
92786
- const settled = await settleClientRuntimeExchangeMutation(
92834
+ const settled2 = await settleClientRuntimeExchangeMutation(
92787
92835
  durableMutation.profileId,
92788
92836
  durableMutation.mutationId,
92789
92837
  {
@@ -92798,10 +92846,10 @@ var init_hyperliquid_client = __esm({
92798
92846
  ...durableMutationAuthorityArgs(durableMutation)
92799
92847
  );
92800
92848
  try {
92801
- durableMutation.onSettled?.(settled);
92849
+ durableMutation.onSettled?.(settled2);
92802
92850
  } catch {
92803
92851
  }
92804
- return settled;
92852
+ return settled2;
92805
92853
  } catch (settlementCause) {
92806
92854
  throw Object.assign(new RuntimeExecutionError(
92807
92855
  "Exchange submission may have completed; durable reconciliation is pending.",
@@ -92846,10 +92894,10 @@ var init_hyperliquid_client = __esm({
92846
92894
  );
92847
92895
  }
92848
92896
  await new Promise((resolve14) => {
92849
- let settled = false;
92897
+ let settled2 = false;
92850
92898
  const finish = () => {
92851
- if (settled) return;
92852
- settled = true;
92899
+ if (settled2) return;
92900
+ settled2 = true;
92853
92901
  globalThis.clearTimeout(timeoutId);
92854
92902
  input.signal?.removeEventListener("abort", finish);
92855
92903
  resolve14();
@@ -93600,7 +93648,8 @@ async function postClientRuntime(path, profileId, body, options) {
93600
93648
  signal: requestSignal,
93601
93649
  headers: {
93602
93650
  ...requestHeaders,
93603
- ...lastRequestId ? { "X-Request-ID": lastRequestId } : {}
93651
+ ...lastRequestId ? { "X-Request-ID": lastRequestId } : {},
93652
+ ...deviceClockHeader()
93604
93653
  },
93605
93654
  body
93606
93655
  });
@@ -94722,6 +94771,7 @@ var init_api2 = __esm({
94722
94771
  init_bot_exchanges();
94723
94772
  init_local_breadcrumbs();
94724
94773
  init_abort();
94774
+ init_runtime_redaction();
94725
94775
  init_client_runtime_ownership_errors();
94726
94776
  init_shared();
94727
94777
  init_shared();
@@ -95277,7 +95327,7 @@ var init_api2 = __esm({
95277
95327
  if (code !== "client_exchange_evidence_invalid") throw error48;
95278
95328
  appendRuntimeDebugEvent({
95279
95329
  label: "client_exchange_reconcile_evidence_rejected",
95280
- note: `mutation_id=${answer.mutation_id} code=${code} detail=${String(error48.message ?? "").slice(0, runtime_policy_generated_default2.ui.api_client.exchange_evidence_rejection_detail_chars)}`,
95330
+ note: `mutation_id=${answer.mutation_id} code=${code} detail=${sanitizeRuntimeDiagnosticValue(String(error48.message ?? "")).slice(0, runtime_policy_generated_default2.ui.api_client.exchange_evidence_rejection_detail_chars)}`,
95281
95331
  outcome: "error"
95282
95332
  });
95283
95333
  return answer;
@@ -96015,6 +96065,7 @@ var init_vault = __esm({
96015
96065
  init_define_VTX_GROK_POLICY();
96016
96066
  init_define_VTX_PI_MODEL_POLICY();
96017
96067
  init_host_storage();
96068
+ init_runtime_redaction();
96018
96069
  init_api2();
96019
96070
  init_client_runtime_secret_contract();
96020
96071
  init_client_runtime_provider_contract();
@@ -97804,8 +97855,8 @@ var init_hyperliquid_account_state_adapter = __esm({
97804
97855
  return await Promise.all(reads);
97805
97856
  } catch (error48) {
97806
97857
  controller.abort(error48);
97807
- const settled = await Promise.allSettled(reads);
97808
- for (const result of settled) {
97858
+ const settled2 = await Promise.allSettled(reads);
97859
+ for (const result of settled2) {
97809
97860
  if (result.status === "rejected" && result.reason instanceof HyperliquidPublicReadError && result.reason.code === "public_rate_limited") throw result.reason;
97810
97861
  }
97811
97862
  throw error48;
@@ -99042,7 +99093,7 @@ var init_protective_actions = __esm({
99042
99093
  });
99043
99094
  continue;
99044
99095
  }
99045
- let settled = null;
99096
+ let settled2 = null;
99046
99097
  try {
99047
99098
  await executeClientPreparedProtectiveAction({
99048
99099
  profileId: input.profileId,
@@ -99061,7 +99112,7 @@ var init_protective_actions = __esm({
99061
99112
  clientOrderIds: action.client_order_ids,
99062
99113
  wireAction: canonical,
99063
99114
  onSettled: (mutation) => {
99064
- settled = mutation;
99115
+ settled2 = mutation;
99065
99116
  }
99066
99117
  });
99067
99118
  result.processed.push({ actionId: action.action_id, actionKind: action.action_kind, outcome: "sent" });
@@ -99073,7 +99124,7 @@ var init_protective_actions = __esm({
99073
99124
  reason: errorCode2(error48) || (error48 instanceof RuntimeExecutionError ? error48.reasonCode : "execution_failed")
99074
99125
  });
99075
99126
  }
99076
- const settledMutation = settled;
99127
+ const settledMutation = settled2;
99077
99128
  if (settledMutation?.protection) result.protection = settledMutation.protection;
99078
99129
  if (settledMutation && Array.isArray(settledMutation.protective_actions)) {
99079
99130
  actions = settledMutation.protective_actions;
@@ -99215,7 +99266,7 @@ var init_client_exchange_mutations = __esm({
99215
99266
  });
99216
99267
 
99217
99268
  // lib/runtime/execution-guard-contract.ts
99218
- var unitsFromPosition, signedUnitsFromPosition, signedUnitsFromEntryPosition, classifyExecutionIntent, reductionFirstOrder, usdAmount, orderMetadataRetryReason, orderCeilingRefusal, resolveExecutionTarget, decisionOrderSizeAsset, flipExecutionLegs, executedOrderPositionEvent;
99269
+ var unitsFromPosition, signedUnitsFromPosition, signedUnitsFromEntryPosition, classifyExecutionIntent, reductionFirstOrder, usdAmount, orderMetadataRetryReason, orderCeilingRefusal, copyClosingSize, copyOrderClosingSize, copyOrderNotionalCap, resolveExecutionTarget, decisionOrderSizeAsset, flipExecutionLegs, executedOrderPositionEvent;
99219
99270
  var init_execution_guard_contract = __esm({
99220
99271
  "lib/runtime/execution-guard-contract.ts"() {
99221
99272
  "use strict";
@@ -99426,6 +99477,10 @@ var init_execution_guard_contract = __esm({
99426
99477
  return null;
99427
99478
  };
99428
99479
  orderCeilingRefusal = (input) => {
99480
+ const closingSide2 = input.side === "sell" && input.currentPositionSize > 0 || input.side === "buy" && input.currentPositionSize < 0;
99481
+ if (input.reduceOnly && closingSide2 && input.size <= Math.abs(input.currentPositionSize)) {
99482
+ return null;
99483
+ }
99429
99484
  const orderNotional = input.size * input.price;
99430
99485
  if (orderNotional > input.maxOrderNotional) {
99431
99486
  return `Order notional ${usdAmount(orderNotional)} exceeds limit ${usdAmount(input.maxOrderNotional)}`;
@@ -99437,6 +99492,23 @@ var init_execution_guard_contract = __esm({
99437
99492
  }
99438
99493
  return null;
99439
99494
  };
99495
+ copyClosingSize = (destinationPosition, destinationDelta) => destinationPosition * destinationDelta >= 0 ? 0 : Math.min(Math.abs(destinationDelta), Math.abs(destinationPosition));
99496
+ copyOrderClosingSize = (input) => {
99497
+ const size = Number.isFinite(input.size) && input.size > 0 ? input.size : 0;
99498
+ if (input.reduceOnly) return size;
99499
+ if (input.actualPosition === null || !Number.isFinite(input.actualPosition)) return 0;
99500
+ const signedSize = String(input.side).trim().toLowerCase() === "buy" ? size : -size;
99501
+ return copyClosingSize(input.actualPosition, signedSize);
99502
+ };
99503
+ copyOrderNotionalCap = (followerCap, platformCap, closingNotional) => {
99504
+ const platform = Number(platformCap);
99505
+ if (!Number.isFinite(platform) || platform <= 0) return null;
99506
+ const closing = Number(closingNotional);
99507
+ const platformBound = (Number.isFinite(closing) && closing > 0 ? closing : 0) + platform;
99508
+ const follower = Number(followerCap);
99509
+ if (!Number.isFinite(follower) || follower <= 0) return platformBound;
99510
+ return Math.min(follower, platformBound);
99511
+ };
99440
99512
  resolveExecutionTarget = (classified, liveSignedUnits, livePositionDirection) => {
99441
99513
  const liveUnits = Number.isFinite(liveSignedUnits) ? Math.trunc(liveSignedUnits) : 0;
99442
99514
  const exactLiveDirection = livePositionDirection == null ? liveUnits > 0 ? 1 : liveUnits < 0 ? -1 : 0 : livePositionDirection;
@@ -105502,7 +105574,7 @@ var init_runtime_execution = __esm({
105502
105574
  const io = nativeProtectionIo(request, read.record.isLong);
105503
105575
  const standby = read.record.standby ?? [];
105504
105576
  if (read.record.phase === "entry_pending" || standby.length > 0) {
105505
- const settled = await settleNativeProtectionAfterFill({
105577
+ const settled2 = await settleNativeProtectionAfterFill({
105506
105578
  record: read.record,
105507
105579
  settings: nativeSettingsOf(request.executionContext),
105508
105580
  sizeDecimals: request.executionContext.sizeDecimals,
@@ -105510,8 +105582,8 @@ var init_runtime_execution = __esm({
105510
105582
  entryOrderId: read.record.phase === "entry_pending" ? read.record.entryClientOrderId : standby[0].orderId ?? standby[0].clientOrderId,
105511
105583
  io
105512
105584
  });
105513
- const reports2 = [...settled.reports];
105514
- let record5 = settled.record;
105585
+ const reports2 = [...settled2.reports];
105586
+ let record5 = settled2.record;
105515
105587
  if (record5 != null && record5.phase !== "entry_pending" && (record5.standby ?? []).length > 0) {
105516
105588
  const kept = await reconcileNativeProtection({
105517
105589
  record: record5,
@@ -108773,6 +108845,7 @@ var init_runtime_execution = __esm({
108773
108845
  price: executionPrice,
108774
108846
  // A flip's close has filled by now: its new position starts from flat.
108775
108847
  currentPositionSize: targetResolution.closeOpposingPosition ? 0 : currentPositionSize,
108848
+ reduceOnly: classified.reduceOnly === true,
108776
108849
  maxOrderNotional: runtime_policy_generated_default2.trading.risk.max_order_notional,
108777
108850
  maxPositionNotional: runtime_policy_generated_default2.trading.risk.max_position_notional
108778
108851
  });
@@ -109244,7 +109317,7 @@ var init_runtime_execution = __esm({
109244
109317
  });
109245
109318
  } else {
109246
109319
  try {
109247
- const settled = await settleNativeProtectionAfterFill({
109320
+ const settled2 = await settleNativeProtectionAfterFill({
109248
109321
  record: record5,
109249
109322
  settings: nativeSettingsOf(input.executionContext),
109250
109323
  sizeDecimals: input.executionContext.sizeDecimals,
@@ -109252,8 +109325,8 @@ var init_runtime_execution = __esm({
109252
109325
  entryOrderId: confirmedMarketFill.orderId,
109253
109326
  io: nativeProtectionIo(input, record5.isLong)
109254
109327
  });
109255
- executionReports.push(...settled.reports);
109256
- if (settled.record != null) record5 = settled.record;
109328
+ executionReports.push(...settled2.reports);
109329
+ if (settled2.record != null) record5 = settled2.record;
109257
109330
  } catch (postEntryProtectionError) {
109258
109331
  if (isClientRuntimeLeaseOwnershipError(postEntryProtectionError)) throw postEntryProtectionError;
109259
109332
  if (nativePassEnded(input, postEntryProtectionError)) {
@@ -109751,7 +109824,7 @@ var init_runtime_execution = __esm({
109751
109824
  let actualPosition = null;
109752
109825
  let desiredPosition = null;
109753
109826
  let exactFullCloseBeforeQuantization = false;
109754
- let maxOrderNotional = 0;
109827
+ let followerOrderNotionalCap = 0;
109755
109828
  let minOrderNotional = 0;
109756
109829
  let executionReferencePrice = Number(intent.source_price);
109757
109830
  let dispatchedOrder = null;
@@ -109762,13 +109835,21 @@ var init_runtime_execution = __esm({
109762
109835
  desiredPosition = Number(
109763
109836
  record5.target_space === "copied" ? copiedNowServed ? record5.copied_target_after : Number.NaN : record5.desired_destination_position_after
109764
109837
  );
109765
- maxOrderNotional = Number(
109766
- reconciliation.max_order_notional_usdc
109767
- );
109838
+ followerOrderNotionalCap = reconciliation.max_order_notional_usdc;
109768
109839
  minOrderNotional = Number(
109769
109840
  reconciliation.min_notional_usdc
109770
109841
  );
109771
109842
  }
109843
+ const platformOrderNotionalCap = input.config?.copy_trading?.execution?.max_per_intent_order_notional_usdc;
109844
+ let maxOrderNotional = 0;
109845
+ let orderNotionalCapResolved = false;
109846
+ if (copyOrderNotionalCap(followerOrderNotionalCap, platformOrderNotionalCap, 0) === null) {
109847
+ return {
109848
+ status: "failed",
109849
+ orderId: null,
109850
+ message: "Copy Trading platform order notional cap is unavailable."
109851
+ };
109852
+ }
109772
109853
  if (!destinationSide || !Number.isFinite(destinationSize) || destinationSize <= 0) {
109773
109854
  return {
109774
109855
  status: "skipped",
@@ -109844,6 +109925,17 @@ var init_runtime_execution = __esm({
109844
109925
  destinationSize = Math.abs(liveDelta);
109845
109926
  exactFullCloseBeforeQuantization = Math.abs(desiredPosition) <= tolerance && Math.abs(actualPosition) > tolerance;
109846
109927
  reduceOnly = Math.abs(desiredPosition) <= tolerance || (actualPosition > 0 && liveDelta < 0 && desiredPosition >= 0 || actualPosition < 0 && liveDelta > 0 && desiredPosition <= 0);
109928
+ maxOrderNotional = copyOrderNotionalCap(
109929
+ followerOrderNotionalCap,
109930
+ platformOrderNotionalCap,
109931
+ copyOrderClosingSize({
109932
+ side: destinationSide,
109933
+ size: destinationSize,
109934
+ reduceOnly,
109935
+ actualPosition
109936
+ }) * executionReferencePrice
109937
+ ) ?? 0;
109938
+ orderNotionalCapResolved = true;
109847
109939
  if (Number.isFinite(maxOrderNotional) && maxOrderNotional > 0) {
109848
109940
  destinationSize = Math.min(
109849
109941
  destinationSize,
@@ -109863,6 +109955,18 @@ var init_runtime_execution = __esm({
109863
109955
  };
109864
109956
  }
109865
109957
  const referencePrice = executionReferencePrice;
109958
+ if (!orderNotionalCapResolved) {
109959
+ maxOrderNotional = copyOrderNotionalCap(
109960
+ followerOrderNotionalCap,
109961
+ platformOrderNotionalCap,
109962
+ copyOrderClosingSize({
109963
+ side: destinationSide,
109964
+ size: destinationSize,
109965
+ reduceOnly,
109966
+ actualPosition: null
109967
+ }) * referencePrice
109968
+ ) ?? 0;
109969
+ }
109866
109970
  if (Number.isFinite(maxOrderNotional) && maxOrderNotional > 0 && Number.isFinite(referencePrice) && referencePrice > 0 && sizePrecision.quantizedSize * referencePrice > maxOrderNotional + COPY_TRADING_NOTIONAL_CAP_TOLERANCE_USD) {
109867
109971
  const cappedSize = Math.min(destinationSize, maxOrderNotional / referencePrice);
109868
109972
  sizePrecision = {
@@ -110489,7 +110593,7 @@ var init_periodic_schedule = __esm({
110489
110593
  });
110490
110594
 
110491
110595
  // lib/runtime/provider-observability.ts
110492
- var MAX_DIAGNOSTIC_LIST_ITEMS, record4, ERROR_TOKEN, ERROR_DOMAIN, ERROR_INPUT, ERROR_REDACTIONS, normalizeProviderError, identifier, count3, normalizeProviderDiagnostics, providerRequestId, hash4, googleCredentialDiagnostics, extractProviderDiagnostics, estimateRequestInputTokens;
110596
+ var MAX_DIAGNOSTIC_LIST_ITEMS, record4, ERROR_TOKEN, ERROR_DOMAIN, ERROR_INPUT, ERROR_ECHO_REDACTIONS, ERROR_PROSE_REDACTIONS, CONTROL_CHARACTER_RUN, WHITESPACE_RUN, collapseProse, settled, REDACTED_MARKER_START, boundedMessage, normalizeProviderError, identifier, count3, normalizeProviderDiagnostics, providerRequestId, hash4, googleCredentialDiagnostics, extractProviderDiagnostics, estimateRequestInputTokens;
110493
110597
  var init_provider_observability = __esm({
110494
110598
  "lib/runtime/provider-observability.ts"() {
110495
110599
  "use strict";
@@ -110497,34 +110601,68 @@ var init_provider_observability = __esm({
110497
110601
  init_define_VTX_GROK_POLICY();
110498
110602
  init_define_VTX_PI_MODEL_POLICY();
110499
110603
  init_constants();
110604
+ init_runtime_redaction();
110500
110605
  MAX_DIAGNOSTIC_LIST_ITEMS = PROVIDER_DIAGNOSTIC_LIMITS.MAX_LIST_ITEMS;
110501
110606
  record4 = (v) => v !== null && typeof v === "object" && !Array.isArray(v) ? v : {};
110502
110607
  ERROR_TOKEN = /^[A-Z][A-Z0-9_]{0,63}$/;
110503
110608
  ERROR_DOMAIN = /^[a-z0-9][a-z0-9.-]{0,127}$/;
110504
- ERROR_INPUT = /\b(?:prompt|contents|messages|system[_ ]?instruction|tools|request\s+body|input(?:\s+text)?)\s*[:=]|[{}]|```/i;
110505
- ERROR_REDACTIONS = [
110506
- [/https?:\/\/[^\s<>"']+/gi, "[REDACTED_URL]"],
110609
+ ERROR_INPUT = new RegExp(
110610
+ String.raw`\b(?:prompt|contents|messages|system[_ ]?instruction|tools|request${WHITESPACE_CLASS}+body|input(?:${WHITESPACE_CLASS}+text)?)${WHITESPACE_CLASS}*[:=]|[{}]|` + "```",
110611
+ "i"
110612
+ );
110613
+ ERROR_ECHO_REDACTIONS = [
110614
+ [/https?:\/\/[^<>"'\t\n\v\f\r \x1c-\x1f\x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]+/gi, "[REDACTED_URL]"],
110507
110615
  [/\b[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g, "[REDACTED_EMAIL]"],
110508
- [/\bBearer\s+[^\s,;]+/gi, "Bearer [REDACTED]"],
110509
- [/\b(?:api[_ -]?key|x-goog-api-key|authorization|access[_ -]?token|token|secret|password|private[_ -]?key|key)\s*[:=]\s*(?:"[^"]*"|'[^']*'|[^\s,;]+)/gi, "[REDACTED]"],
110510
- [/\b(?:AIza[A-Za-z0-9_-]+|sk-[A-Za-z0-9_-]+|AQ\.[A-Za-z0-9._-]+|0x[a-fA-F0-9]{64})\b/g, "[REDACTED]"],
110616
+ // A URL whose scheme a key form already took ("AIzahttps://..." is read as
110617
+ // a key first): the rest is still an echoed URL.
110618
+ [/\[REDACTED\]:\/\/[^<>"'\t\n\v\f\r \x1c-\x1f\x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]+/g, "[REDACTED_URL]"]
110619
+ ];
110620
+ ERROR_PROSE_REDACTIONS = [
110621
+ ...ERROR_ECHO_REDACTIONS,
110511
110622
  [/"[^"]*"|'[^'\r\n]*'/g, "[REDACTED]"]
110512
110623
  ];
110624
+ CONTROL_CHARACTER_RUN = /[\x00-\x1f\x7f]+/g;
110625
+ WHITESPACE_RUN = new RegExp(`${WHITESPACE_CLASS}+`, "g");
110626
+ collapseProse = (value) => value.replace(CONTROL_CHARACTER_RUN, " ").replace(WHITESPACE_RUN, " ").trim();
110627
+ settled = (value) => {
110628
+ let current = value;
110629
+ let previous = null;
110630
+ while (current !== previous) {
110631
+ previous = current;
110632
+ for (const [pattern, replacement] of ERROR_PROSE_REDACTIONS) current = current.replace(pattern, replacement);
110633
+ current = sanitizeRuntimeDiagnosticValue(collapseProse(current));
110634
+ }
110635
+ return current;
110636
+ };
110637
+ REDACTED_MARKER_START = "[REDACTED";
110638
+ boundedMessage = (value) => {
110639
+ const characters = Array.from(value);
110640
+ if (characters.length <= PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_MESSAGE_CHARS) return value;
110641
+ let cut = characters.slice(0, PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_MESSAGE_CHARS).join("");
110642
+ const marker = cut.lastIndexOf(REDACTED_MARKER_START);
110643
+ if (marker !== -1 && value.indexOf("]", marker) >= cut.length) cut = cut.slice(0, marker);
110644
+ return cut.replace(/ +$/, "");
110645
+ };
110513
110646
  normalizeProviderError = (value) => {
110514
110647
  const raw = record4(value);
110515
110648
  const result = {};
110516
110649
  if (typeof raw.code === "number" && Number.isInteger(raw.code) && raw.code >= HTTP_STATUS_MIN && raw.code <= HTTP_STATUS_MAX) result.code = raw.code;
110517
110650
  if (typeof raw.status === "string" && ERROR_TOKEN.test(raw.status)) result.status = raw.status;
110518
- if (typeof raw.message === "string" && raw.message.trim()) {
110651
+ if (typeof raw.message === "string" && collapseProse(raw.message)) {
110519
110652
  let message = raw.message;
110520
- if (Array.from(message).length > PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_INPUT_CHARS || ERROR_INPUT.test(message)) message = "[REDACTED_INPUT]";
110653
+ if (Array.from(message).length > PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_INPUT_CHARS || ERROR_INPUT.test(message) || ERROR_INPUT.test(collapseProse(message))) message = "[REDACTED_INPUT]";
110521
110654
  else {
110522
- for (const [pattern, replacement] of ERROR_REDACTIONS) message = message.replace(pattern, replacement);
110523
- message = message.replace(/[\x00-\x1f\x7f]+/g, " ").replace(/\s+/g, " ").trim();
110524
- }
110525
- const characters = Array.from(message);
110526
- result.message = characters.slice(0, PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_MESSAGE_CHARS).join("");
110527
- if (characters.length > PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_MESSAGE_CHARS || raw.message_truncated === true) result.message_truncated = true;
110655
+ message = sanitizeRuntimeDiagnosticValue(message);
110656
+ for (const [pattern, replacement] of ERROR_ECHO_REDACTIONS) message = message.replace(pattern, replacement);
110657
+ message = sanitizeRuntimeDiagnosticValue(message);
110658
+ for (const [pattern, replacement] of ERROR_PROSE_REDACTIONS) message = message.replace(pattern, replacement);
110659
+ message = settled(sanitizeRuntimeDiagnosticValue(collapseProse(sanitizeRuntimeDiagnosticValue(message))));
110660
+ }
110661
+ const fullLength = Array.from(message).length;
110662
+ let bounded = boundedMessage(message);
110663
+ while (settled(bounded) !== bounded) bounded = Array.from(bounded).slice(0, -1).join("").replace(/ +$/, "");
110664
+ result.message = bounded;
110665
+ if (fullLength > PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_MESSAGE_CHARS || raw.message_truncated === true) result.message_truncated = true;
110528
110666
  }
110529
110667
  if (Array.isArray(raw.details)) {
110530
110668
  const details = raw.details.slice(0, PROVIDER_DIAGNOSTIC_LIMITS.MAX_ERROR_DETAILS).map((value2) => {
@@ -116739,7 +116877,7 @@ var init_provider_client = __esm({
116739
116877
  return payload.message.trim();
116740
116878
  }
116741
116879
  if (rawText) {
116742
- return rawText.replace(/\s+/g, " ").slice(0, PROVIDER_ERROR_RAW_TEXT_MAX_CHARS);
116880
+ return sanitizeRuntimeDiagnosticValue(rawText).replace(/\s+/g, " ").slice(0, PROVIDER_ERROR_RAW_TEXT_MAX_CHARS);
116743
116881
  }
116744
116882
  return "";
116745
116883
  };
@@ -120791,7 +120929,7 @@ var init_local_analysis = __esm({
120791
120929
  return numeric2;
120792
120930
  };
120793
120931
  compactSnippet = (value, max2 = RUNTIME_DEBUG_SNIPPET_CHARS) => {
120794
- const text = String(value ?? "").replace(/\s+/g, " ").trim();
120932
+ const text = sanitizeRuntimeDiagnosticValue(String(value ?? "").replace(/\s+/g, " ")).trim();
120795
120933
  if (!text) {
120796
120934
  return "";
120797
120935
  }
@@ -121507,7 +121645,7 @@ ${reviewOutputContract}`;
121507
121645
  return REVIEW_FAILURE_SQL_STATEMENT_PATTERN.test(lowered) && REVIEW_FAILURE_SCHEMA_DISCLOSURE_TOKENS.some((token) => lowered.includes(token));
121508
121646
  };
121509
121647
  summarizeReviewFailureExplanation = (detail) => {
121510
- const message = String(detail ?? "").trim();
121648
+ const message = sanitizeRuntimeDiagnosticValue(String(detail ?? "")).trim();
121511
121649
  if (!message) {
121512
121650
  return "The review step stopped before VTX received error details.";
121513
121651
  }
@@ -127306,10 +127444,10 @@ var init_engine = __esm({
127306
127444
  outcome: "error"
127307
127445
  });
127308
127446
  await new Promise((resolve14) => {
127309
- let settled = false;
127447
+ let settled2 = false;
127310
127448
  const finish = () => {
127311
- if (settled) return;
127312
- settled = true;
127449
+ if (settled2) return;
127450
+ settled2 = true;
127313
127451
  globalThis.clearTimeout(timeoutId);
127314
127452
  signal.removeEventListener("abort", finish);
127315
127453
  resolve14();
@@ -128252,14 +128390,14 @@ var init_engine = __esm({
128252
128390
  const loop = this._executionLoopPromise;
128253
128391
  if (!loop) return true;
128254
128392
  let timer;
128255
- const settled = await Promise.race([
128393
+ const settled2 = await Promise.race([
128256
128394
  loop.then(() => true, () => true),
128257
128395
  new Promise((resolve14) => {
128258
128396
  timer = setTimeout(() => resolve14(false), timeoutMs);
128259
128397
  })
128260
128398
  ]);
128261
128399
  clearTimeout(timer);
128262
- return settled;
128400
+ return settled2;
128263
128401
  }
128264
128402
  get active() {
128265
128403
  return this._startPromise !== null || this._isStopping || this._state === "running" || this._state === "stale" || this._state === "offline";
@@ -129390,10 +129528,10 @@ var init_engine = __esm({
129390
129528
  throw signal.reason ?? createStopAbortError("trade_sync_settlement_cancelled");
129391
129529
  }
129392
129530
  await new Promise((resolve14) => {
129393
- let settled = false;
129531
+ let settled2 = false;
129394
129532
  const finish = () => {
129395
- if (settled) return;
129396
- settled = true;
129533
+ if (settled2) return;
129534
+ settled2 = true;
129397
129535
  globalThis.clearTimeout(timeoutId);
129398
129536
  signal?.removeEventListener("abort", finish);
129399
129537
  resolve14();
@@ -130014,7 +130152,9 @@ var init_engine = __esm({
130014
130152
  reviewModelResponse: result.reviewModelResponse,
130015
130153
  primaryReasoningContent: result.primaryReasoningContent,
130016
130154
  reviewReasoningContent: result.reviewReasoningContent,
130017
- reviewFailureReason: result.reviewFailureReason,
130155
+ // Raw provider error text never leaves the device; the server
130156
+ // stores the reason through the same redaction contract.
130157
+ reviewFailureReason: result.reviewFailureReason == null ? result.reviewFailureReason : sanitizeRuntimeDiagnosticValue(result.reviewFailureReason),
130018
130158
  systemPrompt: result.systemPrompt,
130019
130159
  userPrompt: result.userPrompt,
130020
130160
  reviewSystemPrompt: result.reviewSystemPrompt,