@symerian/symi 2.6.16 → 2.6.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/{agents-DbDrceM_.js → agents-BEWe0DLk.js} +4 -4
  2. package/dist/{agents.config-AMrJVinF.js → agents.config-C76tSodQ.js} +1 -1
  3. package/dist/{agents.config-phBy3nbc.js → agents.config-DxYp0zoG.js} +1 -1
  4. package/dist/{audio-preflight-DHTaS5U1.js → audio-preflight-BVaaZWkg.js} +4 -4
  5. package/dist/{audio-preflight-C40mKAp7.js → audio-preflight-CPBOQV4I.js} +4 -4
  6. package/dist/{auth-choice-CmbfbR4q.js → auth-choice-DrYJKB8t.js} +1 -1
  7. package/dist/{auth-choice-DsGuT4Dk.js → auth-choice-EwOsmB_b.js} +1 -1
  8. package/dist/{banner-Ds_jDSsM.js → banner-CJyz7ro7.js} +1 -1
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +6 -6
  11. package/dist/bundled/session-memory/handler.js +6 -6
  12. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  13. package/dist/{channel-options-Del6IGRs.js → channel-options-D0NlH6Qb.js} +1 -1
  14. package/dist/{channel-options-BV6WyWWq.js → channel-options-tWyK68mk.js} +1 -1
  15. package/dist/{channel-web-Cuukem2c.js → channel-web-PvWA2ukO.js} +1 -1
  16. package/dist/{channels-cli-C3LiJhRT.js → channels-cli-B50IZ27a.js} +4 -4
  17. package/dist/{channels-cli-D-E-oHnC.js → channels-cli-BAXmmIxX.js} +4 -4
  18. package/dist/{chrome-DYZwl5Gv.js → chrome-D2SKJnR7.js} +5 -5
  19. package/dist/{chrome-CDJYxX5a.js → chrome-DkaXoP36.js} +5 -5
  20. package/dist/{cli-BavIfExj.js → cli-BW4igUHG.js} +1 -1
  21. package/dist/{cli-C53UJpN3.js → cli-CPKEDe6C.js} +1 -1
  22. package/dist/{command-registry-Dtn5iLgE.js → command-registry-DV-FTDz1.js} +9 -9
  23. package/dist/{completion-cli-DhhIPri-.js → completion-cli-BqzmOZg7.js} +1 -1
  24. package/dist/{completion-cli-DEFzGiNX.js → completion-cli-Cbr2b-rs.js} +2 -2
  25. package/dist/{config-cli-DW40utS2.js → config-cli-D5QqQi4y.js} +1 -1
  26. package/dist/{config-cli-CIhqgzOH.js → config-cli-DBjlHFwQ.js} +1 -1
  27. package/dist/{configure-SVzErXwX.js → configure-B4VAN-WJ.js} +3 -3
  28. package/dist/{configure-CkSODPmX.js → configure-DbTH7t_m.js} +3 -3
  29. package/dist/{deliver-BH0l3UKW.js → deliver-C-37cZUe.js} +1 -1
  30. package/dist/{deliver-dODxSv3b.js → deliver-C46-vyqg.js} +1 -1
  31. package/dist/{doctor-completion-BBki2Ufk.js → doctor-completion-Do0e0eZE.js} +1 -1
  32. package/dist/{doctor-completion-B-w1_lQk.js → doctor-completion-v8uq--hy.js} +1 -1
  33. package/dist/entry.js +1 -1
  34. package/dist/extensionAPI.js +6 -6
  35. package/dist/{gateway-cli-BVbhSSqh.js → gateway-cli-BAiFaCGg.js} +9 -9
  36. package/dist/{gateway-cli-BNYHujRR.js → gateway-cli-BkOe3JQ_.js} +9 -9
  37. package/dist/{glass-ui-ws-DfJEU59m.js → glass-ui-ws-B8V4Slwd.js} +7 -7
  38. package/dist/{glass-ui-ws-B-MkTkAC.js → glass-ui-ws-DFAQWoiK.js} +7 -7
  39. package/dist/{health-BU6f7W6a.js → health-8bTzq722.js} +1 -1
  40. package/dist/{health-wZyomt2k.js → health-B3pwVJ_N.js} +1 -1
  41. package/dist/{hooks-cli-DX4nLKqn.js → hooks-cli-D1Yhb7y5.js} +2 -2
  42. package/dist/{hooks-cli-CdoOvoX9.js → hooks-cli-Vqz0A84F.js} +2 -2
  43. package/dist/{image-CXu8W39c.js → image-CuzFLQWC.js} +1 -1
  44. package/dist/{image-CHzdaNJ4.js → image-DcpMiprB.js} +1 -1
  45. package/dist/index.js +6 -6
  46. package/dist/llm-slug-generator.js +6 -6
  47. package/dist/{models-mS0NbL8c.js → models-BQOnDzS9.js} +2 -2
  48. package/dist/{models-cli-Bc2k_maK.js → models-cli-BrDyN5KN.js} +3 -3
  49. package/dist/{models-cli-BeOo0gLs.js → models-cli-EP_U-tWq.js} +2 -2
  50. package/dist/{onboard-B6VpNEvT.js → onboard-BZNptre7.js} +2 -2
  51. package/dist/{onboard-Cl0aQccB.js → onboard-DM0BChC6.js} +2 -2
  52. package/dist/{onboard-channels-BnvM0w8_.js → onboard-channels-4jeB30Ty.js} +1 -1
  53. package/dist/{onboard-channels-BlmSvsPS.js → onboard-channels-C6dLmiYY.js} +1 -1
  54. package/dist/{onboarding-DwHp3u6V.js → onboarding-CDdiYaCC.js} +3 -3
  55. package/dist/{onboarding-BxBRG2z_.js → onboarding-DQJQ-k9A.js} +3 -3
  56. package/dist/{onboarding.finalize-BrbMUUi5.js → onboarding.finalize-B82xL12C.js} +6 -6
  57. package/dist/{onboarding.finalize-J7oUfYcz.js → onboarding.finalize-Bmd5TpyH.js} +5 -5
  58. package/dist/{pi-embedded-gKNapGKh.js → pi-embedded-Dtmwbds4.js} +72 -21
  59. package/dist/{pi-embedded-helpers-lgx_U5KS.js → pi-embedded-helpers-B8kqLWns.js} +4 -4
  60. package/dist/{pi-embedded-helpers-pubKo8HQ.js → pi-embedded-helpers-CfqDGQ9J.js} +4 -4
  61. package/dist/{plugin-registry-CMCHyYWB.js → plugin-registry-D7ylmzDw.js} +1 -1
  62. package/dist/{plugin-registry-thPK5K1z.js → plugin-registry-DG_WWCr9.js} +1 -1
  63. package/dist/plugin-sdk/{channel-web-Byw20uRC.js → channel-web-_efq-pM9.js} +1 -1
  64. package/dist/plugin-sdk/index.js +2 -2
  65. package/dist/plugin-sdk/{reply-DU2A_Mmx.js → reply-D2W7XCcz.js} +58 -7
  66. package/dist/plugin-sdk/{web-k5JssYD-.js → web-CmT3D7vj.js} +2 -2
  67. package/dist/{plugins-cli-B87kp0ad.js → plugins-cli-BUFrZlyR.js} +2 -2
  68. package/dist/{plugins-cli-DamE7XjD.js → plugins-cli-CMCwFRL9.js} +2 -2
  69. package/dist/{program-gbhreuEV.js → program-BdVazL5L.js} +7 -7
  70. package/dist/{program-context-DFKRAsbt.js → program-context-DZNOBe-u.js} +17 -17
  71. package/dist/{prompt-select-styled-B5bx2NEB.js → prompt-select-styled-XyOMjPBV.js} +4 -4
  72. package/dist/{prompt-select-styled-BICt4IW2.js → prompt-select-styled-uLoOKbdZ.js} +4 -4
  73. package/dist/{provider-auth-helpers-DmEnyFX5.js → provider-auth-helpers-CWf7gdZW.js} +1 -1
  74. package/dist/{provider-auth-helpers-BEu0e6yr.js → provider-auth-helpers-D01YbcHZ.js} +1 -1
  75. package/dist/{push-apns-tMnMeZX7.js → push-apns-B-zVLcnN.js} +1 -1
  76. package/dist/{push-apns-DVz2SkR5.js → push-apns-B2bxLda8.js} +1 -1
  77. package/dist/{pw-ai-De-KR9_s.js → pw-ai-1htA-NnS.js} +1 -1
  78. package/dist/{pw-ai-B5asscAD.js → pw-ai-m0mj2KWK.js} +1 -1
  79. package/dist/{register.agent-KI2e7rY8.js → register.agent-BF6_rPdM.js} +5 -5
  80. package/dist/{register.agent-BOvqehoy.js → register.agent-BYZEiWk1.js} +6 -6
  81. package/dist/{register.configure-D8DGPMv0.js → register.configure-4lt1A0NF.js} +6 -6
  82. package/dist/{register.configure-BpxsezsB.js → register.configure-B0g-yfDR.js} +6 -6
  83. package/dist/{register.maintenance-WRAU5DSR.js → register.maintenance-DXZyjFYw.js} +8 -8
  84. package/dist/{register.maintenance-BcIwMibz.js → register.maintenance-WBpgdygw.js} +7 -7
  85. package/dist/{register.message-CX_Dmuke.js → register.message-BHRBK4eH.js} +2 -2
  86. package/dist/{register.message-C0eMmAGL.js → register.message-CuoXu-_e.js} +2 -2
  87. package/dist/{register.onboard-ByB6oGQ-.js → register.onboard-D-P9Wc41.js} +4 -4
  88. package/dist/{register.onboard-BE87LPDH.js → register.onboard-D5-L8JYT.js} +4 -4
  89. package/dist/{register.setup-DSY9eAV8.js → register.setup-BzmkdzSO.js} +4 -4
  90. package/dist/{register.setup-D8DgDNnC.js → register.setup-D7NNQwXc.js} +4 -4
  91. package/dist/{register.status-health-sessions-TMJPmooX.js → register.status-health-sessions-BIwZhPIZ.js} +3 -3
  92. package/dist/{register.status-health-sessions-CW4DkAa1.js → register.status-health-sessions-DiCr003h.js} +3 -3
  93. package/dist/{register.subclis-BS-WgVMV.js → register.subclis-BxbyrMu1.js} +9 -9
  94. package/dist/{reply-B2Xur-75.js → reply-BgOOEOPX.js} +58 -7
  95. package/dist/{run-main-jFBqLwBJ.js → run-main-BW5eFi2Y.js} +14 -14
  96. package/dist/{runner-DUBExAb5.js → runner-BcQ0sF9T.js} +1 -1
  97. package/dist/{runner-WAG0M5s9.js → runner-CU9l0uJh.js} +1 -1
  98. package/dist/{server-methods-zgqyrRAq.js → server-methods-D-Gd1kMo.js} +7 -7
  99. package/dist/{server-methods-BqQeaixw.js → server-methods-Dp8iuEko.js} +7 -7
  100. package/dist/{server-node-events-8pINzbzg.js → server-node-events-B2_RCsYi.js} +2 -2
  101. package/dist/{server-node-events-Doln-zR2.js → server-node-events-CnjqDQbZ.js} +2 -2
  102. package/dist/{status-Bdqk3JgK.js → status-4PSvL6ui.js} +2 -2
  103. package/dist/{status-Bwvq4SPL.js → status-CGhoES6L.js} +1 -1
  104. package/dist/{status-BDABGQ7Y.js → status-CrVk9Tz5.js} +1 -1
  105. package/dist/{status-DFml_pIs.js → status-kFfqsras.js} +2 -2
  106. package/dist/{subagent-registry-CUXuFP-8.js → subagent-registry-M6DQwhYN.js} +58 -7
  107. package/dist/{unified-runner-CZhWh22N.js → unified-runner-DckayuEM.js} +72 -21
  108. package/dist/{update-cli-Pwrk83u-.js → update-cli-DCYkskZu.js} +8 -8
  109. package/dist/{update-cli-C6thJhZU.js → update-cli-x5YGUm9F.js} +7 -7
  110. package/dist/{update-runner-DgqFpUFr.js → update-runner-BIp88-4P.js} +1 -1
  111. package/dist/{update-runner-Bssy0nSl.js → update-runner-Dmki2xrH.js} +1 -1
  112. package/dist/{web-D1KyfkIV.js → web-1JPHv6du.js} +6 -6
  113. package/dist/{web-DHA8-PYV.js → web-C40boK8U.js} +6 -6
  114. package/dist/{web-BiK5cfMV.js → web-DWSTD7Gy.js} +1 -1
  115. package/dist/{web-BFY2FcFr.js → web-rShvuTx4.js} +2 -2
  116. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { o as createSubsystemLogger } from "./entry.js";
2
2
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
3
3
  import { i as loadConfig } from "./config-DHBLS1Hl.js";
4
- import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-CUXuFP-8.js";
4
+ import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-M6DQwhYN.js";
5
5
 
6
6
  //#region src/plugins/status.ts
7
7
  const log = createSubsystemLogger("plugins");
@@ -9,7 +9,7 @@ import { c as resolveAgentWorkspaceDir } from "./agent-scope-D-jRCY0d.js";
9
9
  import { t as buildWorkspaceSkillStatus } from "./skills-status-DKXJ-tbi.js";
10
10
  import { H as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-DHBLS1Hl.js";
11
11
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BcE47FtD.js";
12
- import { En as peekSystemEvents, St as summarizeRestartSentinel, cn as buildChannelAccountSnapshot, in as formatUsageReportLines, ln as formatChannelAllowFrom, nt as sha256HexPrefix, rn as loadProviderUsageSummary, sn as buildChannelSummary, xt as readRestartSentinel } from "./subagent-registry-CUXuFP-8.js";
12
+ import { En as peekSystemEvents, St as summarizeRestartSentinel, cn as buildChannelAccountSnapshot, in as formatUsageReportLines, ln as formatChannelAllowFrom, nt as sha256HexPrefix, rn as loadProviderUsageSummary, sn as buildChannelSummary, xt as readRestartSentinel } from "./subagent-registry-M6DQwhYN.js";
13
13
  import { F as resolveMainSessionKey, j as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-CJXnZVjR.js";
14
14
  import { n as listChannelPlugins } from "./plugins-CwSlLxM8.js";
15
15
  import { o as getTailnetHostname, s as readTailscaleStatusJson } from "./tailscale-CbbvYNVw.js";
@@ -29,7 +29,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-hFVEC3wO.j
29
29
  import { t as readLastGatewayErrorLine } from "./diagnostics-CS1ov_hH.js";
30
30
  import { t as renderTable } from "./table-D01d2GuY.js";
31
31
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-Byo5jCLN.js";
32
- import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-BU6f7W6a.js";
32
+ import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-8bTzq722.js";
33
33
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-ZdimP1aU.js";
34
34
  import { t as resolveNodeService } from "./node-service-fcZExd22.js";
35
35
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-DVLB9DNB.js";
@@ -3,7 +3,7 @@ import { $t as triggerInternalHook, A as normalizeChannelId, B as getPluginComma
3
3
  import { A as buildConfiguredAllowlistKeys, At as resolveShellEnvFallbackTimeoutMs, Ct as resolveEnvApiKey, E as withFileLock, Et as normalizeSecretInput, F as modelKey, H as resolveDefaultModelForAgent, Ht as DEFAULT_MODEL, I as normalizeModelRef$2, K as resolveSubagentSpawnModelSelection, L as normalizeProviderId, M as findNormalizedProviderValue, Ot as getShellPathFromLoginShell, P as isCliProvider, T as resolveSymiAgentDir, Ut as DEFAULT_PROVIDER, V as resolveConfiguredModelRef, Vt as DEFAULT_CONTEXT_TOKENS, W as resolveModelRefFromString, Wt as resolveAuthProfileDisplayLabel, _t as createOllamaStreamFn, a as markAuthProfileFailure, b as ensureAuthProfileStore, bt as requireApiKey, c as resolveApiKeyForProfile, g as markAuthProfileGood, gt as OLLAMA_NATIVE_BASE_URL, h as listProfilesForProvider, i as isProfileInCooldown, j as buildModelAliasIndex, k as buildAllowedModelSet, m as dedupeProfileIds, n as resolveAuthProfileOrder, o as markAuthProfileUsed, q as resolveThinkingDefault, r as getSoonestCooldownExpiry, vt as getApiKeyForModel, w as resolveAuthStorePathForDisplay, wt as resolveModelAuthMode, xt as resolveApiKeyForProvider, yt as getCustomProviderApiKey } from "./auth-profiles-Q1xTr5SX.js";
4
4
  import { t as formatCliCommand } from "./command-format-BtYOfWxC.js";
5
5
  import { C as resolveThreadParentSessionKey, S as parseAgentSessionKey, _ as getSubagentDepth, b as isCronSessionKey, c as normalizeMainKey, d as sanitizeAgentId, h as normalizeAccountId$2, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, o as classifySessionKeyShape, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isAcpSessionKey, x as isSubagentSessionKey } from "./session-key-DjZ7Z1hW.js";
6
- import { t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
6
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
7
7
  import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
8
8
  import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, a as resolveAgentModelFallbacksOverride, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, g as DEFAULT_IDENTITY_FILENAME, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, n as listAgentIds, o as resolveAgentModelPrimary, r as resolveAgentConfig, s as resolveAgentSkillsFilter, u as resolveEffectiveModelFallbacks, w as filterBootstrapFilesForSession } from "./agent-scope-D-jRCY0d.js";
9
9
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-DuFIqfeC.js";
@@ -32297,6 +32297,30 @@ function setCliSessionId(entry, provider, sessionId) {
32297
32297
  //#endregion
32298
32298
  //#region src/config/model-profiles-builtin.ts
32299
32299
  /**
32300
+ * Starter pack — always-on context for models with tool arg corruption.
32301
+ * ~500 tokens. Prevents the most common failure patterns.
32302
+ * For detailed file modification guides, the self-inspect skill cascades from here.
32303
+ */
32304
+ const STARTER_PACK = [
32305
+ "",
32306
+ "YOUR FILES (use read tool directly on these paths — NEVER use exec to find or read files):",
32307
+ "- Glass UI CSS: <SYMI_ROOT>/dist/control-ui/css/style.css",
32308
+ "- Glass UI HTML: <SYMI_ROOT>/dist/control-ui/index.html",
32309
+ "- Glass UI JS: <SYMI_ROOT>/dist/control-ui/js/app.js, gateway.js, render.js, models.js, history.js, symipulse.js, debug.js",
32310
+ "- Package: <SYMI_ROOT>/package.json",
32311
+ "- Config: ~/.symi/symi.json | Sessions: ~/.symi/agents/main/sessions/ | Memory: ~/.symi/state/memory/",
32312
+ "- For detailed modification guides, read the self-inspect skill.",
32313
+ "",
32314
+ "TOOL RULES (mandatory):",
32315
+ "- read/write/edit: Always provide the full absolute path directly. NEVER use exec with cat, head, find, grep, or ls to view files.",
32316
+ "- exec/bash: Provide only valid shell syntax. No tags, no tokens, no markup. Spell commands exactly.",
32317
+ "- web_search: Always include query argument. Example: web_search({ query: \"search terms\" })",
32318
+ "- sessions_spawn: Always include task and mode. Example: sessions_spawn({ label: \"name\", mode: \"run\", task: \"description\" })",
32319
+ "",
32320
+ "KNOWN SHELL COMMANDS (use exact spelling):",
32321
+ "awk basename brew cargo cat chmod chown cp curl cut date dd df diff dig dirname docker du echo env find gcc git go grep gunzip gzip head hostname id ifconfig ip java javac journalctl kill killall launchctl less ln locate ls make man mkdir mktemp more mount mv nc netstat nice node nohup npm npx open paste pbcopy pbpaste ping pip pip3 plutil printf ps pwd python python3 readlink realpath rm rmdir rsync ruby scp sed sleep sort ssh stat strings sudo su sw_vers sysctl system_profiler systemctl tail tar tee test top touch tr type uname uniq unzip wc wget which xargs xz yes zip"
32322
+ ];
32323
+ /**
32300
32324
  * Built-in model profiles. Ordered from most-specific to least-specific so
32301
32325
  * that `resolveModelProfile` can return the first match.
32302
32326
  *
@@ -32339,7 +32363,8 @@ const BUILTIN_PROFILES = [
32339
32363
  "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32340
32364
  "- If you need to verify your work, do so before writing your response, not after.",
32341
32365
  "- Send brief progress updates on long tasks so the user knows you are active.",
32342
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
32366
+ "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax.",
32367
+ ...STARTER_PACK
32343
32368
  ],
32344
32369
  ui: {
32345
32370
  badge: "Local",
@@ -32411,7 +32436,8 @@ const BUILTIN_PROFILES = [
32411
32436
  "- If you need to verify your work, do so before writing your response, not after.",
32412
32437
  "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
32413
32438
  "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active.",
32414
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
32439
+ "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax.",
32440
+ ...STARTER_PACK
32415
32441
  ],
32416
32442
  ui: {
32417
32443
  badge: "CoreWeave",
@@ -39823,7 +39849,18 @@ async function runEmbeddedAttempt(params) {
39823
39849
  const profileModelKey = params.modelId ?? "";
39824
39850
  const modelProfile = resolveModelProfile(profileModelKey, params.config?.models?.profiles);
39825
39851
  log$5.debug(`[profile] resolved: modelId=${profileModelKey} → profile=${modelProfile.label} validateToolArgs=${modelProfile.filters?.validateToolArgs ?? false}`);
39826
- const systemPromptText = createSystemPromptOverride(appendPrompt + (modelProfile.promptAdditions.length > 0 ? "\n\n" + modelProfile.promptAdditions.join("\n") : ""))();
39852
+ const systemPromptText = createSystemPromptOverride(appendPrompt + (() => {
39853
+ if (modelProfile.promptAdditions.length === 0) return "";
39854
+ let text = "\n\n" + modelProfile.promptAdditions.join("\n");
39855
+ if (text.includes("<SYMI_ROOT>")) {
39856
+ const symiRoot = resolveSymiPackageRootSync({
39857
+ moduleUrl: import.meta.url,
39858
+ argv1: process.argv[1]
39859
+ });
39860
+ if (symiRoot) text = text.replaceAll("<SYMI_ROOT>", symiRoot);
39861
+ }
39862
+ return text;
39863
+ })())();
39827
39864
  const sessionLock = await acquireSessionWriteLock({
39828
39865
  sessionFile: params.sessionFile,
39829
39866
  maxHoldMs: resolveSessionLockMaxHoldFromTimeout({ timeoutMs: params.timeoutMs })
@@ -40097,6 +40134,18 @@ async function runEmbeddedAttempt(params) {
40097
40134
  const TOOL_ERROR_ABORT_THRESHOLD = 5;
40098
40135
  const TOOL_ERROR_WARN_THRESHOLD = 3;
40099
40136
  let consecutiveToolErrors = 0;
40137
+ /** Detect exec/bash results that indicate a shell error (non-zero exit, command not found, etc.) */
40138
+ const isShellErrorResult = (result) => {
40139
+ if (!result || typeof result !== "object") return false;
40140
+ const content = result.content;
40141
+ if (!Array.isArray(content)) return false;
40142
+ const text = content.filter((b) => b && typeof b === "object" && b.type === "text").map((b) => {
40143
+ const t = b.text;
40144
+ return typeof t === "string" ? t : "";
40145
+ }).join("\n");
40146
+ if (!text) return false;
40147
+ return /exit code [1-9]\d*|command not found|No such file or directory|syntax error|parse error|Permission denied|not recognized|cannot execute/i.test(text);
40148
+ };
40100
40149
  const subscription = subscribeEmbeddedPiSession({
40101
40150
  session: activeSession,
40102
40151
  runId: params.runId,
@@ -40122,7 +40171,9 @@ async function runEmbeddedAttempt(params) {
40122
40171
  const phase = typeof evt.data?.phase === "string" ? evt.data.phase : "";
40123
40172
  const isError = evt.data?.isError === true;
40124
40173
  if (phase === "result") {
40125
- if (isError) consecutiveToolErrors++;
40174
+ const toolName = typeof evt.data?.name === "string" ? evt.data.name : "";
40175
+ const isExecShellError = !isError && (toolName === "exec" || toolName === "bash") && isShellErrorResult(evt.data?.result);
40176
+ if (isError || isExecShellError) consecutiveToolErrors++;
40126
40177
  else consecutiveToolErrors = 0;
40127
40178
  if (consecutiveToolErrors >= TOOL_ERROR_ABORT_THRESHOLD) {
40128
40179
  const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
@@ -53249,7 +53300,7 @@ function isVoiceChannelType(type) {
53249
53300
  function createDefaultDeps() {
53250
53301
  return {
53251
53302
  sendMessageWhatsApp: async (...args) => {
53252
- const { sendMessageWhatsApp } = await import("./web-BiK5cfMV.js");
53303
+ const { sendMessageWhatsApp } = await import("./web-DWSTD7Gy.js");
53253
53304
  return await sendMessageWhatsApp(...args);
53254
53305
  },
53255
53306
  sendMessageTelegram: async (...args) => {
@@ -68563,7 +68614,7 @@ function loadWebLoginQr() {
68563
68614
  return webLoginQrPromise;
68564
68615
  }
68565
68616
  function loadWebChannel() {
68566
- webChannelPromise ??= import("./web-BiK5cfMV.js");
68617
+ webChannelPromise ??= import("./web-DWSTD7Gy.js");
68567
68618
  return webChannelPromise;
68568
68619
  }
68569
68620
  function loadWhatsAppActions() {
@@ -4,16 +4,16 @@ import { _ as isCronSessionKey, b as resolveThreadParentSessionKey, c as normali
4
4
  import { $ as warn, B as sleep$1, D as escapeRegExp, E as ensureDir$3, G as danger, I as resolveUserPath, J as logVerbose, M as normalizeE164, O as formatTerminalLink, R as shortenHomeInString, S as CONFIG_DIR, U as truncateUtf16Safe, V as sliceUtf16Safe, W as isPlainObject, X as setVerbose, Z as shouldLogVerbose, _ as matchPluginCommand, a as normalizeAnyChannelId, d as createPluginRegistry, dt as resolvePreferredSymiTmpDir, et as colorize, f as normalizePluginHttpPath, g as listPluginCommands, h as getPluginCommandSpecs, k as isRecord$1, l as requireActivePluginRegistry, lt as normalizeLogLevel, m as executePluginCommand, n as CHAT_CHANNEL_ORDER, nt as theme, o as normalizeChannelId, p as clearPluginCommands, r as DEFAULT_CHAT_CHANNEL, rt as getChildLogger, tt as isRich, u as setActivePluginRegistry, v as createInternalHookEvent, w as clampInt, x as triggerInternalHook, z as shortenHomePath } from "./registry-DYq1AYOv.js";
5
5
  import { a as resolveAgentModelPrimary, c as resolveDefaultAgentId, d as resolveSessionAgentIds, i as resolveAgentModelFallbacksOverride, l as resolveEffectiveModelFallbacks, n as resolveAgentConfig, o as resolveAgentSkillsFilter, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId } from "./agent-scope-CpEJ0B88.js";
6
6
  import { a as registerActiveProgressLine, i as clearActiveProgressLine, n as createNonExitingRuntime, o as unregisterActiveProgressLine, r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
7
- import { S as logWarn, _ as runExec, b as logError, f as loadWorkspaceBootstrapFiles, g as runCommandWithTimeout, i as DEFAULT_IDENTITY_FILENAME, l as ensureAgentWorkspace, m as resolveSymiPackageRoot, n as DEFAULT_AGENT_WORKSPACE_DIR, r as DEFAULT_BOOTSTRAP_FILENAME, u as filterBootstrapFilesForSession, v as spawnWithFallback, x as logInfo, y as logDebug } from "./workspace-DscDraUb.js";
7
+ import { S as logWarn, _ as runExec, b as logError, f as loadWorkspaceBootstrapFiles, g as runCommandWithTimeout, h as resolveSymiPackageRootSync, i as DEFAULT_IDENTITY_FILENAME, l as ensureAgentWorkspace, m as resolveSymiPackageRoot, n as DEFAULT_AGENT_WORKSPACE_DIR, r as DEFAULT_BOOTSTRAP_FILENAME, u as filterBootstrapFilesForSession, v as spawnWithFallback, x as logInfo, y as logDebug } from "./workspace-DscDraUb.js";
8
8
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-CbQV9WEg.js";
9
9
  import { $ as resolveSymiAgentDir, B as resolveApiKeyForProvider, C as normalizeProviderId, D as resolveModelRefFromString, E as resolveDefaultModelForAgent, F as OLLAMA_NATIVE_BASE_URL, H as resolveModelAuthMode, I as createOllamaStreamFn, K as resolveShellEnvFallbackTimeoutMs, L as getApiKeyForModel, O as resolveSubagentSpawnModelSelection, Q as resolveAuthProfileDisplayLabel, R as getCustomProviderApiKey, S as normalizeModelRef$2, T as resolveConfiguredModelRef, U as normalizeSecretInput, V as resolveEnvApiKey, W as getShellPathFromLoginShell, X as DEFAULT_MODEL, Y as DEFAULT_CONTEXT_TOKENS, Z as DEFAULT_PROVIDER, _ as buildConfiguredAllowlistKeys, a as markAuthProfileFailure, b as isCliProvider, c as dedupeProfileIds, d as ensureAuthProfileStore, f as resolveAuthStorePathForDisplay, g as buildAllowedModelSet, i as isProfileInCooldown, k as resolveThinkingDefault, l as listProfilesForProvider, n as resolveAuthProfileOrder, o as markAuthProfileUsed, p as withFileLock, r as getSoonestCooldownExpiry, s as resolveApiKeyForProfile, u as markAuthProfileGood, v as buildModelAliasIndex, x as modelKey, y as findNormalizedProviderValue, z as requireApiKey } from "./auth-profiles-DdK1Hxaa.js";
10
10
  import { n as formatCliCommand, r as resolveCliName, t as isTruthyEnvValue } from "./env-BDXYbTKj.js";
11
11
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-cCYzSU9h.js";
12
12
  import { t as parseBooleanValue$1 } from "./boolean-CE7i9tBR.js";
13
- import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-pubKo8HQ.js";
13
+ import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-CfqDGQ9J.js";
14
14
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-5SdHIcHU.js";
15
15
  import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverSymiPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-yb7sAlu4.js";
16
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-DYZwl5Gv.js";
16
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-DkaXoP36.js";
17
17
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-Bs0AW1g3.js";
18
18
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-XIsvXeC-.js";
19
19
  import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-C7CauEK8.js";
@@ -31,10 +31,10 @@ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i
31
31
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-CvhXrdgS.js";
32
32
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-BBh3Gsrx.js";
33
33
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-SqqWIT22.js";
34
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-dODxSv3b.js";
34
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-C46-vyqg.js";
35
35
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-rPhsBoZz.js";
36
36
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Zw87xFym.js";
37
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-CXu8W39c.js";
37
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-CuzFLQWC.js";
38
38
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-Bux9Y_xD.js";
39
39
  import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-DYj_o4_F.js";
40
40
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-Bv5YDJc8.js";
@@ -49,7 +49,7 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-DL3f
49
49
  import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-DhZz0Ybs.js";
50
50
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-CTiz95Vb.js";
51
51
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-Bfc7Uz0o.js";
52
- import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as registerUnhandledRejectionHandler } from "./runner-WAG0M5s9.js";
52
+ import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as registerUnhandledRejectionHandler } from "./runner-CU9l0uJh.js";
53
53
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-DcVwOafC.js";
54
54
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-DSDTl6Kj.js";
55
55
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-Bso4i15F.js";
@@ -80,7 +80,7 @@ import AjvPkg from "ajv";
80
80
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
81
81
  import { createServer } from "node:http";
82
82
  import { ProxyAgent, fetch as fetch$1 } from "undici";
83
- import WebSocket, { WebSocket as WebSocket$1 } from "ws";
83
+ import WebSocket$1, { WebSocket } from "ws";
84
84
  import { Buffer as Buffer$1 } from "node:buffer";
85
85
  import { EdgeTTS } from "node-edge-tts";
86
86
  import { createJiti } from "jiti";
@@ -104,6 +104,30 @@ import { apiThrottler } from "@grammyjs/transformer-throttler";
104
104
 
105
105
  //#region src/config/model-profiles-builtin.ts
106
106
  /**
107
+ * Starter pack — always-on context for models with tool arg corruption.
108
+ * ~500 tokens. Prevents the most common failure patterns.
109
+ * For detailed file modification guides, the self-inspect skill cascades from here.
110
+ */
111
+ const STARTER_PACK = [
112
+ "",
113
+ "YOUR FILES (use read tool directly on these paths — NEVER use exec to find or read files):",
114
+ "- Glass UI CSS: <SYMI_ROOT>/dist/control-ui/css/style.css",
115
+ "- Glass UI HTML: <SYMI_ROOT>/dist/control-ui/index.html",
116
+ "- Glass UI JS: <SYMI_ROOT>/dist/control-ui/js/app.js, gateway.js, render.js, models.js, history.js, symipulse.js, debug.js",
117
+ "- Package: <SYMI_ROOT>/package.json",
118
+ "- Config: ~/.symi/symi.json | Sessions: ~/.symi/agents/main/sessions/ | Memory: ~/.symi/state/memory/",
119
+ "- For detailed modification guides, read the self-inspect skill.",
120
+ "",
121
+ "TOOL RULES (mandatory):",
122
+ "- read/write/edit: Always provide the full absolute path directly. NEVER use exec with cat, head, find, grep, or ls to view files.",
123
+ "- exec/bash: Provide only valid shell syntax. No tags, no tokens, no markup. Spell commands exactly.",
124
+ "- web_search: Always include query argument. Example: web_search({ query: \"search terms\" })",
125
+ "- sessions_spawn: Always include task and mode. Example: sessions_spawn({ label: \"name\", mode: \"run\", task: \"description\" })",
126
+ "",
127
+ "KNOWN SHELL COMMANDS (use exact spelling):",
128
+ "awk basename brew cargo cat chmod chown cp curl cut date dd df diff dig dirname docker du echo env find gcc git go grep gunzip gzip head hostname id ifconfig ip java javac journalctl kill killall launchctl less ln locate ls make man mkdir mktemp more mount mv nc netstat nice node nohup npm npx open paste pbcopy pbpaste ping pip pip3 plutil printf ps pwd python python3 readlink realpath rm rmdir rsync ruby scp sed sleep sort ssh stat strings sudo su sw_vers sysctl system_profiler systemctl tail tar tee test top touch tr type uname uniq unzip wc wget which xargs xz yes zip"
129
+ ];
130
+ /**
107
131
  * Built-in model profiles. Ordered from most-specific to least-specific so
108
132
  * that `resolveModelProfile` can return the first match.
109
133
  *
@@ -146,7 +170,8 @@ const BUILTIN_PROFILES = [
146
170
  "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
147
171
  "- If you need to verify your work, do so before writing your response, not after.",
148
172
  "- Send brief progress updates on long tasks so the user knows you are active.",
149
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
173
+ "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax.",
174
+ ...STARTER_PACK
150
175
  ],
151
176
  ui: {
152
177
  badge: "Local",
@@ -218,7 +243,8 @@ const BUILTIN_PROFILES = [
218
243
  "- If you need to verify your work, do so before writing your response, not after.",
219
244
  "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
220
245
  "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active.",
221
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
246
+ "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax.",
247
+ ...STARTER_PACK
222
248
  ],
223
249
  ui: {
224
250
  badge: "CoreWeave",
@@ -8636,7 +8662,7 @@ var GatewayClient = class {
8636
8662
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
8637
8663
  });
8638
8664
  }
8639
- this.ws = new WebSocket$1(url, wsOptions);
8665
+ this.ws = new WebSocket(url, wsOptions);
8640
8666
  this.ws.on("open", () => {
8641
8667
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
8642
8668
  const tlsError = this.validateTlsFingerprint();
@@ -8855,7 +8881,7 @@ var GatewayClient = class {
8855
8881
  return null;
8856
8882
  }
8857
8883
  async request(method, params, opts) {
8858
- if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
8884
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
8859
8885
  const id = randomUUID();
8860
8886
  const frame = {
8861
8887
  type: "req",
@@ -10121,7 +10147,7 @@ async function routeReply(params) {
10121
10147
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10122
10148
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10123
10149
  try {
10124
- const { deliverOutboundPayloads } = await import("./deliver-dODxSv3b.js").then((n) => n.n);
10150
+ const { deliverOutboundPayloads } = await import("./deliver-C46-vyqg.js").then((n) => n.n);
10125
10151
  return {
10126
10152
  ok: true,
10127
10153
  messageId: (await deliverOutboundPayloads({
@@ -43560,7 +43586,7 @@ async function deliverSessionMaintenanceWarning(params) {
43560
43586
  return;
43561
43587
  }
43562
43588
  try {
43563
- const { deliverOutboundPayloads } = await import("./deliver-dODxSv3b.js").then((n) => n.n);
43589
+ const { deliverOutboundPayloads } = await import("./deliver-C46-vyqg.js").then((n) => n.n);
43564
43590
  await deliverOutboundPayloads({
43565
43591
  cfg: params.cfg,
43566
43592
  channel,
@@ -47006,7 +47032,7 @@ async function describeStickerImage(params) {
47006
47032
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
47007
47033
  try {
47008
47034
  const buffer = await fs$1.readFile(imagePath);
47009
- const { describeImageWithModel } = await import("./image-CXu8W39c.js").then((n) => n.n);
47035
+ const { describeImageWithModel } = await import("./image-CuzFLQWC.js").then((n) => n.n);
47010
47036
  return (await describeImageWithModel({
47011
47037
  buffer,
47012
47038
  fileName: "sticker.webp",
@@ -49668,7 +49694,7 @@ async function preflightDiscordMessage(params) {
49668
49694
  let preflightTranscript;
49669
49695
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
49670
49696
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
49671
- const { transcribeFirstAudio } = await import("./audio-preflight-DHTaS5U1.js");
49697
+ const { transcribeFirstAudio } = await import("./audio-preflight-BVaaZWkg.js");
49672
49698
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
49673
49699
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
49674
49700
  ctx: {
@@ -53674,7 +53700,7 @@ function isVoiceChannelType(type) {
53674
53700
  function createDefaultDeps() {
53675
53701
  return {
53676
53702
  sendMessageWhatsApp: async (...args) => {
53677
- const { sendMessageWhatsApp } = await import("./web-D1KyfkIV.js");
53703
+ const { sendMessageWhatsApp } = await import("./web-1JPHv6du.js");
53678
53704
  return await sendMessageWhatsApp(...args);
53679
53705
  },
53680
53706
  sendMessageTelegram: async (...args) => {
@@ -56579,7 +56605,7 @@ function createDiscordGatewayPlugin(params) {
56579
56605
  super(options);
56580
56606
  }
56581
56607
  createWebSocket(url) {
56582
- return new WebSocket(url, { agent });
56608
+ return new WebSocket$1(url, { agent });
56583
56609
  }
56584
56610
  }
56585
56611
  return new ProxyGatewayPlugin();
@@ -66797,7 +66823,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
66797
66823
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
66798
66824
  let preflightTranscript;
66799
66825
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
66800
- const { transcribeFirstAudio } = await import("./audio-preflight-DHTaS5U1.js");
66826
+ const { transcribeFirstAudio } = await import("./audio-preflight-BVaaZWkg.js");
66801
66827
  preflightTranscript = await transcribeFirstAudio({
66802
66828
  ctx: {
66803
66829
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -68954,7 +68980,7 @@ function loadWebLoginQr() {
68954
68980
  return webLoginQrPromise;
68955
68981
  }
68956
68982
  function loadWebChannel() {
68957
- webChannelPromise ??= import("./web-D1KyfkIV.js");
68983
+ webChannelPromise ??= import("./web-1JPHv6du.js");
68958
68984
  return webChannelPromise;
68959
68985
  }
68960
68986
  function loadWhatsAppActions() {
@@ -77023,7 +77049,18 @@ async function runEmbeddedAttempt(params) {
77023
77049
  const profileModelKey = params.modelId ?? "";
77024
77050
  const modelProfile = resolveModelProfile(profileModelKey, params.config?.models?.profiles);
77025
77051
  log$9.debug(`[profile] resolved: modelId=${profileModelKey} → profile=${modelProfile.label} validateToolArgs=${modelProfile.filters?.validateToolArgs ?? false}`);
77026
- const systemPromptText = createSystemPromptOverride(appendPrompt + (modelProfile.promptAdditions.length > 0 ? "\n\n" + modelProfile.promptAdditions.join("\n") : ""))();
77052
+ const systemPromptText = createSystemPromptOverride(appendPrompt + (() => {
77053
+ if (modelProfile.promptAdditions.length === 0) return "";
77054
+ let text = "\n\n" + modelProfile.promptAdditions.join("\n");
77055
+ if (text.includes("<SYMI_ROOT>")) {
77056
+ const symiRoot = resolveSymiPackageRootSync({
77057
+ moduleUrl: import.meta.url,
77058
+ argv1: process.argv[1]
77059
+ });
77060
+ if (symiRoot) text = text.replaceAll("<SYMI_ROOT>", symiRoot);
77061
+ }
77062
+ return text;
77063
+ })())();
77027
77064
  const sessionLock = await acquireSessionWriteLock({
77028
77065
  sessionFile: params.sessionFile,
77029
77066
  maxHoldMs: resolveSessionLockMaxHoldFromTimeout({ timeoutMs: params.timeoutMs })
@@ -77297,6 +77334,18 @@ async function runEmbeddedAttempt(params) {
77297
77334
  const TOOL_ERROR_ABORT_THRESHOLD = 5;
77298
77335
  const TOOL_ERROR_WARN_THRESHOLD = 3;
77299
77336
  let consecutiveToolErrors = 0;
77337
+ /** Detect exec/bash results that indicate a shell error (non-zero exit, command not found, etc.) */
77338
+ const isShellErrorResult = (result) => {
77339
+ if (!result || typeof result !== "object") return false;
77340
+ const content = result.content;
77341
+ if (!Array.isArray(content)) return false;
77342
+ const text = content.filter((b) => b && typeof b === "object" && b.type === "text").map((b) => {
77343
+ const t = b.text;
77344
+ return typeof t === "string" ? t : "";
77345
+ }).join("\n");
77346
+ if (!text) return false;
77347
+ return /exit code [1-9]\d*|command not found|No such file or directory|syntax error|parse error|Permission denied|not recognized|cannot execute/i.test(text);
77348
+ };
77300
77349
  const subscription = subscribeEmbeddedPiSession({
77301
77350
  session: activeSession,
77302
77351
  runId: params.runId,
@@ -77322,7 +77371,9 @@ async function runEmbeddedAttempt(params) {
77322
77371
  const phase = typeof evt.data?.phase === "string" ? evt.data.phase : "";
77323
77372
  const isError = evt.data?.isError === true;
77324
77373
  if (phase === "result") {
77325
- if (isError) consecutiveToolErrors++;
77374
+ const toolName = typeof evt.data?.name === "string" ? evt.data.name : "";
77375
+ const isExecShellError = !isError && (toolName === "exec" || toolName === "bash") && isShellErrorResult(evt.data?.result);
77376
+ if (isError || isExecShellError) consecutiveToolErrors++;
77326
77377
  else consecutiveToolErrors = 0;
77327
77378
  if (consecutiveToolErrors >= TOOL_ERROR_ABORT_THRESHOLD) {
77328
77379
  const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
@@ -16,7 +16,7 @@ import "./client-DMBZpU6X.js";
16
16
  import "./call-BcE47FtD.js";
17
17
  import "./message-channel-C9dERklz.js";
18
18
  import "./pairing-token-Byh6drgn.js";
19
- import { Ct as trimLogTail } from "./subagent-registry-CUXuFP-8.js";
19
+ import { Ct as trimLogTail } from "./subagent-registry-M6DQwhYN.js";
20
20
  import "./sessions-CJXnZVjR.js";
21
21
  import "./tokens-Csntmwwn.js";
22
22
  import "./plugins-CwSlLxM8.js";
@@ -111,10 +111,10 @@ import "./npm-registry-spec-DkaZNHAW.js";
111
111
  import "./skill-scanner-BGWOBqLY.js";
112
112
  import "./installs-CgQpVncj.js";
113
113
  import "./channels-status-issues-c7qZbYG5.js";
114
- import "./register.subclis-BS-WgVMV.js";
115
- import "./command-registry-Dtn5iLgE.js";
114
+ import "./register.subclis-BxbyrMu1.js";
115
+ import "./command-registry-DV-FTDz1.js";
116
116
  import "./program-context-CqzR_m-7.js";
117
- import { r as installCompletion } from "./completion-cli-DEFzGiNX.js";
117
+ import { r as installCompletion } from "./completion-cli-Cbr2b-rs.js";
118
118
  import "./daemon-runtime-CfRwa6qh.js";
119
119
  import { r as parseSemver } from "./runtime-guard-D7waq_Ho.js";
120
120
  import "./systemd-DlMdyFDY.js";
@@ -124,19 +124,19 @@ import "./systemd-hints-sQipWGd1.js";
124
124
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-wWnBIQtk.js";
125
125
  import "./diagnostics-CS1ov_hH.js";
126
126
  import { t as renderTable } from "./table-D01d2GuY.js";
127
- import "./health-BU6f7W6a.js";
127
+ import "./health-8bTzq722.js";
128
128
  import "./control-ui-assets-BseSWee1.js";
129
129
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-ZdimP1aU.js";
130
130
  import "./dm-policy-shared-DJ-61hCT.js";
131
131
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-DbmZz0Aq.js";
132
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-DgqFpUFr.js";
132
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-BIp88-4P.js";
133
133
  import "./logging-BGewRZy0.js";
134
134
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DEMKx4eC.js";
135
135
  import "./doctor-config-flow-CA3eiKhd.js";
136
136
  import "./systemd-linger-DA_LW52P.js";
137
137
  import "./health-format-CzgUHmmX.js";
138
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BICt4IW2.js";
139
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-B-w1_lQk.js";
138
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-uLoOKbdZ.js";
139
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-v8uq--hy.js";
140
140
  import { spawn, spawnSync } from "node:child_process";
141
141
  import os from "node:os";
142
142
  import path from "node:path";
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, h as pathExists } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import { V as trimLogTail } from "./reply-B2Xur-75.js";
4
+ import { V as trimLogTail } from "./reply-BgOOEOPX.js";
5
5
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
6
  import "./registry-Cja8eT7G.js";
7
7
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
@@ -106,7 +106,7 @@ import "./stagger-BUClb97_.js";
106
106
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, f as resolveGatewayWindowsTaskName } from "./constants-C8_BLnaW.js";
107
107
  import "./channel-selection-DuWs0Aak.js";
108
108
  import { r as parseSemver } from "./runtime-guard-B37eizu-.js";
109
- import "./program-context-DFKRAsbt.js";
109
+ import "./program-context-DZNOBe-u.js";
110
110
  import "./catalog-RiADx7MA.js";
111
111
  import "./skills-status-CURJKnyY.js";
112
112
  import { n as inheritOptionFromParent } from "./command-options-BtDai3oC.js";
@@ -117,7 +117,7 @@ import "./npm-registry-spec-C2JDdSZS.js";
117
117
  import "./skill-scanner-CLs8u6vQ.js";
118
118
  import "./installs-C1Cebk97.js";
119
119
  import "./channels-status-issues-B_kBkl_u.js";
120
- import { r as installCompletion } from "./completion-cli-DhhIPri-.js";
120
+ import { r as installCompletion } from "./completion-cli-BqzmOZg7.js";
121
121
  import "./daemon-runtime-2mwX-jqj.js";
122
122
  import "./systemd-riq8uNJQ.js";
123
123
  import { t as resolveGatewayService } from "./service-Cl74hx8J.js";
@@ -126,19 +126,19 @@ import "./systemd-hints-BR6gChwm.js";
126
126
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-DscwlsKW.js";
127
127
  import "./diagnostics-BAMlsVVX.js";
128
128
  import { t as renderTable } from "./table-BTgkRafz.js";
129
- import "./health-wZyomt2k.js";
129
+ import "./health-B3pwVJ_N.js";
130
130
  import "./control-ui-assets-Z947tKLt.js";
131
131
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-CtckACbb.js";
132
132
  import "./dm-policy-shared-Bh3TbexU.js";
133
133
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-DtwCUTf-.js";
134
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-Bssy0nSl.js";
134
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-Dmki2xrH.js";
135
135
  import "./logging-BzzwiKjv.js";
136
136
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-rw7wJwHd.js";
137
137
  import "./doctor-config-flow-QnaBd8kL.js";
138
138
  import "./systemd-linger-aQ75ZlXY.js";
139
139
  import "./health-format-DSwnXZPU.js";
140
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-B5bx2NEB.js";
141
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BBki2Ufk.js";
140
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-XyOMjPBV.js";
141
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Do0e0eZE.js";
142
142
  import os from "node:os";
143
143
  import path from "node:path";
144
144
  import fs from "node:fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { nt as pathExists } from "./entry.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
3
- import { Ct as trimLogTail } from "./subagent-registry-CUXuFP-8.js";
3
+ import { Ct as trimLogTail } from "./subagent-registry-M6DQwhYN.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-BseSWee1.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-ZdimP1aU.js";
6
6
  import os from "node:os";
@@ -1,5 +1,5 @@
1
1
  import { h as pathExists } from "./utils-B-0b9bGM.js";
2
- import { V as trimLogTail } from "./reply-B2Xur-75.js";
2
+ import { V as trimLogTail } from "./reply-BgOOEOPX.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-Z947tKLt.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-CtckACbb.js";
@@ -4,16 +4,16 @@ import { A as isSelfChatMode, B as sleep, C as clamp, F as resolveJidToE164, H a
4
4
  import "./agent-scope-CpEJ0B88.js";
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
6
6
  import "./workspace-DscDraUb.js";
7
- import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./unified-runner-CZhWh22N.js";
7
+ import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./unified-runner-DckayuEM.js";
8
8
  import { s as resolveStorePath } from "./paths-CbQV9WEg.js";
9
9
  import "./auth-profiles-DdK1Hxaa.js";
10
10
  import { n as formatCliCommand } from "./env-BDXYbTKj.js";
11
11
  import "./github-copilot-token-cCYzSU9h.js";
12
12
  import "./boolean-CE7i9tBR.js";
13
- import { Ct as resolveGroupSessionKey, G as updateLastRoute, H as loadSessionStore, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-pubKo8HQ.js";
13
+ import { Ct as resolveGroupSessionKey, G as updateLastRoute, H as loadSessionStore, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-CfqDGQ9J.js";
14
14
  import { n as loadConfig } from "./config-5SdHIcHU.js";
15
15
  import "./manifest-registry-yb7sAlu4.js";
16
- import "./chrome-DYZwl5Gv.js";
16
+ import "./chrome-DkaXoP36.js";
17
17
  import "./frontmatter-CTR5f_Ez.js";
18
18
  import "./skills-Bs0AW1g3.js";
19
19
  import "./redact-BDMXB06K.js";
@@ -31,10 +31,10 @@ import "./bindings-BsHoBLIE.js";
31
31
  import "./send-CVMyYPQw.js";
32
32
  import "./send-CvhXrdgS.js";
33
33
  import "./tool-images-SqqWIT22.js";
34
- import "./deliver-dODxSv3b.js";
34
+ import "./deliver-C46-vyqg.js";
35
35
  import "./diagnostic-rPhsBoZz.js";
36
36
  import "./diagnostic-session-state-Zw87xFym.js";
37
- import "./image-CXu8W39c.js";
37
+ import "./image-CuzFLQWC.js";
38
38
  import "./tokens-Bux9Y_xD.js";
39
39
  import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocationContext, X as upsertChannelPairingRequest } from "./send-DYj_o4_F.js";
40
40
  import "./pi-model-discovery-Bv5YDJc8.js";
@@ -50,7 +50,7 @@ import { t as getAgentScopedMediaLocalRoots } from "./local-roots-DhZz0Ybs.js";
50
50
  import { a as loadWebMedia } from "./ir-CTiz95Vb.js";
51
51
  import "./render-CDCvpfhh.js";
52
52
  import "./commands-registry-Bfc7Uz0o.js";
53
- import { y as registerUnhandledRejectionHandler } from "./runner-WAG0M5s9.js";
53
+ import { y as registerUnhandledRejectionHandler } from "./runner-CU9l0uJh.js";
54
54
  import "./skill-commands-DcVwOafC.js";
55
55
  import { t as finalizeInboundContext } from "./inbound-context-DSDTl6Kj.js";
56
56
  import "./fetch-Bso4i15F.js";