@symerian/symi 2.6.10 → 2.6.12

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 (157) hide show
  1. package/dist/{acp-cli-DT0rEuUE.js → acp-cli-Cu4icbJT.js} +2 -2
  2. package/dist/{agents-DDqXWXbP.js → agents-Cz2na8n6.js} +4 -4
  3. package/dist/{agents.config-Bu_N-bn_.js → agents.config-BeOO73lT.js} +1 -1
  4. package/dist/{agents.config-CEt-ES9z.js → agents.config-BoP9QtHX.js} +1 -1
  5. package/dist/{audio-preflight-C40mKAp7.js → audio-preflight-CPBOQV4I.js} +4 -4
  6. package/dist/{audio-preflight-BcSzL_0I.js → audio-preflight-CWnxkaac.js} +8 -8
  7. package/dist/{audio-preflight-BVaaZWkg.js → audio-preflight-DHTaS5U1.js} +4 -4
  8. package/dist/{audit-BIE9JAxf.js → audit-CrITRV6w.js} +5 -5
  9. package/dist/{auth-choice-Djy_YmfW.js → auth-choice-D-czhFdL.js} +4 -4
  10. package/dist/{auth-choice-Bmd-rbuU.js → auth-choice-DTe3UF8T.js} +1 -1
  11. package/dist/{banner-BNkhjU8E.js → banner-CSZ39UAE.js} +1 -1
  12. package/dist/{browser-cli-nNQ60Koh.js → browser-cli-BG4qPxpM.js} +3 -3
  13. package/dist/build-info.json +3 -3
  14. package/dist/bundled/boot-md/handler.js +6 -6
  15. package/dist/bundled/session-memory/handler.js +6 -6
  16. package/dist/{call-7djMRPgl.js → call-CJaS1iRF.js} +1 -1
  17. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  18. package/dist/{channel-options-D8ByM6g0.js → channel-options-CySdnaWJ.js} +1 -1
  19. package/dist/{channel-options-NLrg-j_d.js → channel-options-FlKM6QP8.js} +1 -1
  20. package/dist/{channel-web-BUQWBln9.js → channel-web-BEFE-0qE.js} +2 -2
  21. package/dist/{channels-cli-C5DWcDDG.js → channels-cli-D6zAPAP3.js} +4 -4
  22. package/dist/{channels-cli-qBgicVqp.js → channels-cli-RkhiaITs.js} +19 -19
  23. package/dist/{chrome-CDJYxX5a.js → chrome-D2SKJnR7.js} +7 -7
  24. package/dist/{chrome-DkaXoP36.js → chrome-DYZwl5Gv.js} +7 -7
  25. package/dist/{chrome-DBKZkx0x.js → chrome-DtPkPq9T.js} +7 -7
  26. package/dist/cli/daemon-cli.js +1 -1
  27. package/dist/{cli-UHMMUbWL.js → cli-Bjw4Mr_t.js} +16 -16
  28. package/dist/{cli-Bx78WeyO.js → cli-v8nSF61Z.js} +1 -1
  29. package/dist/{client-Z6SFrwob.js → client-CQSyCS4M.js} +3 -3
  30. package/dist/{command-registry-BSGsNY71.js → command-registry-CojVJ8At.js} +9 -9
  31. package/dist/{completion-cli-B915TqN4.js → completion-cli-D3N7Bpqe.js} +2 -2
  32. package/dist/{completion-cli-CajQzz5J.js → completion-cli-rD9RSIqQ.js} +1 -1
  33. package/dist/{config-cli-BM9FX48b.js → config-cli-CCG1Hizl.js} +1 -1
  34. package/dist/{config-cli-CeErUiHR.js → config-cli-DFYbGvDQ.js} +1 -1
  35. package/dist/{configure-DggNPSKd.js → configure-DdWNM_S-.js} +3 -3
  36. package/dist/{configure-CbiNzEIk.js → configure-v2ocSUJ3.js} +8 -8
  37. package/dist/{control-service-DdeFa44u.js → control-service-Bz7rxLWq.js} +3 -3
  38. package/dist/{cron-cli-C_1RndRW.js → cron-cli-DBIlCvp3.js} +3 -3
  39. package/dist/{daemon-cli-C2fkpr13.js → daemon-cli-DscwlsKW.js} +2 -2
  40. package/dist/{deliver-BH0l3UKW.js → deliver-C-37cZUe.js} +1 -1
  41. package/dist/{deliver-Bu624MY6.js → deliver-CWR_98sK.js} +1 -1
  42. package/dist/{deliver-C46-vyqg.js → deliver-dODxSv3b.js} +1 -1
  43. package/dist/{devices-cli-ERMql8Dq.js → devices-cli-Dds-25Ve.js} +2 -2
  44. package/dist/{doctor-completion-BfLDfA98.js → doctor-completion-F_AI3hun.js} +1 -1
  45. package/dist/{doctor-completion-BP_qD5Bt.js → doctor-completion-vTHV1Opp.js} +1 -1
  46. package/dist/entry.js +1 -1
  47. package/dist/{exec-approvals-cli-BEU-xJFu.js → exec-approvals-cli-BliRl8VB.js} +4 -4
  48. package/dist/extensionAPI.js +6 -6
  49. package/dist/{gateway-cli-LmMxDk7B.js → gateway-cli-DLaTC2ps.js} +28 -28
  50. package/dist/{gateway-cli-qMBjCmLH.js → gateway-cli-Di1ExMCg.js} +9 -9
  51. package/dist/{gateway-rpc-BWZzo3L9.js → gateway-rpc-BxkKeCZ0.js} +1 -1
  52. package/dist/{glass-ui-ws-CXpW0epd.js → glass-ui-ws-Bfn56Lok.js} +7 -7
  53. package/dist/{glass-ui-ws-DbV46Nrg.js → glass-ui-ws-CbaWZjN3.js} +23 -23
  54. package/dist/{health-BctmvDJ0.js → health-CqQIZeIm.js} +1 -1
  55. package/dist/{health-pukFTT09.js → health-DbJOe12X.js} +3 -3
  56. package/dist/{hooks-cli-BMQOn6QU.js → hooks-cli-B9pOqbW_.js} +17 -17
  57. package/dist/{hooks-cli-DcQN6UeT.js → hooks-cli-D60an6P1.js} +2 -2
  58. package/dist/{image-CuzFLQWC.js → image-CXu8W39c.js} +1 -1
  59. package/dist/{image-CtCUVPCD.js → image-D9uvDTrc.js} +1 -1
  60. package/dist/{image-CHzdaNJ4.js → image-DcpMiprB.js} +1 -1
  61. package/dist/index.js +21 -21
  62. package/dist/llm-slug-generator.js +6 -6
  63. package/dist/{logs-cli-V5qUbmVy.js → logs-cli-xOzIPrHm.js} +3 -3
  64. package/dist/{model-catalog-Da6fXK5K.js → model-catalog-DvBJ8pMD.js} +1 -1
  65. package/dist/{model-picker-B6QoK7pe.js → model-picker-Ddo3jHe-.js} +1 -1
  66. package/dist/{models-cli-DAKvip7R.js → models-cli-4EwiSo4p.js} +18 -18
  67. package/dist/{models-cli-DHOMkJmd.js → models-cli-Du60Ivll.js} +3 -3
  68. package/dist/{models-yF2XRbPQ.js → models-hMbDU9ot.js} +2 -2
  69. package/dist/{node-cli-r5-MNz9_.js → node-cli-C_G-Q3h-.js} +6 -6
  70. package/dist/{nodes-cli-DQed-Snk.js → nodes-cli-BcnuJajV.js} +3 -3
  71. package/dist/{onboard-BhqTlAS0.js → onboard-5yW9nvG6.js} +2 -2
  72. package/dist/{onboard-BafMA6T9.js → onboard-DJqYAPxi.js} +5 -5
  73. package/dist/{onboard-channels-CHe-XSLv.js → onboard-channels-B39Hvc_L.js} +1 -1
  74. package/dist/{onboard-channels-CZB5bhSJ.js → onboard-channels-BSzHnDcL.js} +1 -1
  75. package/dist/{onboard-custom-BduhuM_4.js → onboard-custom-C7O-zfQ1.js} +1 -1
  76. package/dist/{onboard-helpers-CiLCJJVQ.js → onboard-helpers-ZmZYzlq3.js} +1 -1
  77. package/dist/{onboard-remote-C1nRkyWo.js → onboard-remote-zUjD7UtM.js} +1 -1
  78. package/dist/{onboard-skills-9GLwG44a.js → onboard-skills-BB0YhUmF.js} +1 -1
  79. package/dist/{onboarding-D5yCx7Yb.js → onboarding-C7g_ZvRW.js} +9 -9
  80. package/dist/{onboarding-BXVYtRYj.js → onboarding-D7Y_e4zX.js} +3 -3
  81. package/dist/{onboarding.finalize-BX4DUaoK.js → onboarding.finalize-C3rqwVvV.js} +21 -21
  82. package/dist/{onboarding.finalize-DF5Zx0Zc.js → onboarding.finalize-OYNmD4ly.js} +6 -6
  83. package/dist/{onboarding.gateway-config-TSh7IejG.js → onboarding.gateway-config-CJUgDC6Y.js} +3 -3
  84. package/dist/{pi-auth-json-Tqz9D47K.js → pi-auth-json-DayrlDg_.js} +1 -1
  85. package/dist/{pi-embedded-DV6dp0BP.js → pi-embedded-Bp_9g-wj.js} +68 -17
  86. package/dist/{pi-embedded-helpers-lgx_U5KS.js → pi-embedded-helpers-B8kqLWns.js} +4 -4
  87. package/dist/{pi-embedded-helpers-D-dUrQOR.js → pi-embedded-helpers-CNPyv_ax.js} +1 -1
  88. package/dist/{pi-embedded-helpers-CfqDGQ9J.js → pi-embedded-helpers-pubKo8HQ.js} +4 -4
  89. package/dist/{pi-tools.policy-CgGK6Jq8.js → pi-tools.policy-CIDBbw6x.js} +1 -1
  90. package/dist/{plugin-registry-BSmy8tIV.js → plugin-registry-C4lpIiGz.js} +1 -1
  91. package/dist/{plugin-registry-BwnzEvIz.js → plugin-registry-CUjBEHAz.js} +1 -1
  92. package/dist/plugin-sdk/{channel-web-BdY2z7lg.js → channel-web-CQNBQiKF.js} +1 -1
  93. package/dist/plugin-sdk/index.js +2 -2
  94. package/dist/plugin-sdk/{reply-BvxntA3R.js → reply-S1JHdV1Y.js} +54 -3
  95. package/dist/plugin-sdk/{web-CorFnJCI.js → web-GZFVijBY.js} +2 -2
  96. package/dist/{plugins-cli-BMmiYArH.js → plugins-cli-1pbqkgc2.js} +17 -17
  97. package/dist/{plugins-cli-CrN718uZ.js → plugins-cli-NpSGD1FH.js} +2 -2
  98. package/dist/{program-NGbjPxJh.js → program-CvHqOriK.js} +7 -7
  99. package/dist/{program-context-BqxG0w61.js → program-context-gkaZBN4U.js} +30 -30
  100. package/dist/{prompt-select-styled-B7SzTPf7.js → prompt-select-styled-DNaDChFa.js} +8 -8
  101. package/dist/{prompt-select-styled-B1LZVYl0.js → prompt-select-styled-We9EmwdJ.js} +4 -4
  102. package/dist/{provider-auth-helpers--A-4LKUl.js → provider-auth-helpers-BD1qo8xm.js} +1 -1
  103. package/dist/{provider-auth-helpers-CNEhLjMl.js → provider-auth-helpers-aA2Nm1dz.js} +1 -1
  104. package/dist/{push-apns-DgT_gz_P.js → push-apns-Cp9F-674.js} +1 -1
  105. package/dist/{push-apns-Cem8OlK7.js → push-apns-DseyExUl.js} +1 -1
  106. package/dist/{pw-ai-De-KR9_s.js → pw-ai-1htA-NnS.js} +1 -1
  107. package/dist/{pw-ai-m0mj2KWK.js → pw-ai-B5asscAD.js} +1 -1
  108. package/dist/{pw-ai-CC0xm0TY.js → pw-ai-DqL87js3.js} +1 -1
  109. package/dist/{register.agent-vP7gkHzk.js → register.agent-BQ2_6Nm3.js} +6 -6
  110. package/dist/{register.agent-DT0doE92.js → register.agent-CBYb5PmK.js} +21 -21
  111. package/dist/{register.configure-B_W1y_ag.js → register.configure-CjLPSjMa.js} +6 -6
  112. package/dist/{register.configure-BnkkCig3.js → register.configure-o-37DMn9.js} +25 -25
  113. package/dist/{register.maintenance-C0akYVa2.js → register.maintenance-B119maJ4.js} +22 -22
  114. package/dist/{register.maintenance-Br5q9f-j.js → register.maintenance-B5VGGPfr.js} +8 -8
  115. package/dist/{register.message-CRaEakG_.js → register.message-C0vKP2cl.js} +2 -2
  116. package/dist/{register.message-mCGVBJsU.js → register.message-Dqit98AR.js} +17 -17
  117. package/dist/{register.onboard-CV_3MiHm.js → register.onboard-BHj8YY-f.js} +4 -4
  118. package/dist/{register.onboard-BvsYOovb.js → register.onboard-DfCy6ZXS.js} +21 -21
  119. package/dist/{register.setup-DFcMhPAd.js → register.setup-BO4Kdk1x.js} +4 -4
  120. package/dist/{register.setup-BQqw49hm.js → register.setup-CUK-FwzD.js} +21 -21
  121. package/dist/{register.status-health-sessions-DlgKRa9S.js → register.status-health-sessions-BIXO_68y.js} +3 -3
  122. package/dist/{register.status-health-sessions-SAm9yGnr.js → register.status-health-sessions-CvcX-h97.js} +19 -19
  123. package/dist/{register.subclis-CdANuuHY.js → register.subclis-B0T9tMmL.js} +9 -9
  124. package/dist/{reply-CiPQDsZl.js → reply-DPaH7oQp.js} +75 -24
  125. package/dist/{routes-BO8eMYxn.js → routes-Ba9CUQ8M.js} +2 -2
  126. package/dist/{rpc-BcyzUwtC.js → rpc-BfhojW8g.js} +1 -1
  127. package/dist/{run-main-z8u07ybv.js → run-main-DLFhMwmE.js} +14 -14
  128. package/dist/{runner-DUBExAb5.js → runner-BcQ0sF9T.js} +1 -1
  129. package/dist/{runner-DxdRmWfW.js → runner-CUglpiFP.js} +2 -2
  130. package/dist/{runner-CU9l0uJh.js → runner-WAG0M5s9.js} +1 -1
  131. package/dist/{sandbox-B7qoYkRl.js → sandbox-C-T6hOMv.js} +3 -3
  132. package/dist/{sandbox-cli-C-hbJJWM.js → sandbox-cli-BllVdQzR.js} +4 -4
  133. package/dist/{security-cli-CNzBZn7V.js → security-cli-BFLtWWHy.js} +8 -8
  134. package/dist/{server-context-B-ra1emS.js → server-context-CEpFjqSk.js} +4 -4
  135. package/dist/{server-methods-D9jBWl7O.js → server-methods-CCAxdyvF.js} +14 -14
  136. package/dist/{server-methods-Dwsrsy7D.js → server-methods-DMIR4YTm.js} +7 -7
  137. package/dist/{server-node-events-9T-Sm9Q4.js → server-node-events-BQ7wsfbY.js} +17 -17
  138. package/dist/{server-node-events-CUKIb7Xq.js → server-node-events-BvOiDPkg.js} +2 -2
  139. package/dist/{status-UWWMuety.js → status-BPGU6b1g.js} +5 -5
  140. package/dist/{status-CB6N6XaA.js → status-CpCo3PvK.js} +1 -1
  141. package/dist/{status-Dqm_DV3z.js → status-D4RE4eR4.js} +2 -2
  142. package/dist/{status-DPk2qV91.js → status-gpmp_Ca5.js} +1 -1
  143. package/dist/{subagent-registry-DTIudfq4.js → subagent-registry-CzBf7A_o.js} +54 -3
  144. package/dist/{system-cli-_0h_FSPB.js → system-cli-UMsMEurS.js} +3 -3
  145. package/dist/{tui-D0s_9S8b.js → tui-CriznorL.js} +3 -3
  146. package/dist/{tui-cli-gm9fv3M8.js → tui-cli-CSIdfCTR.js} +8 -8
  147. package/dist/{unified-runner-DdeRGc1w.js → unified-runner-CnKhgGr-.js} +68 -17
  148. package/dist/{update-cli-C55vGnoj.js → update-cli-16QmlAYc.js} +8 -8
  149. package/dist/{update-cli-D8jX4yKe.js → update-cli-B8lzwxOj.js} +23 -23
  150. package/dist/{update-runner-B0ORHPYT.js → update-runner-CEjq0Uxs.js} +1 -1
  151. package/dist/{update-runner-CGsqW9Gu.js → update-runner-DLCpL3Pj.js} +1 -1
  152. package/dist/{web-DsGfc1GN.js → web-BPQuKyCM.js} +17 -17
  153. package/dist/{web-CRFt1vNo.js → web-BiZqjSRz.js} +1 -1
  154. package/dist/{web-nKQzj7wJ.js → web-CQ7OlTVM.js} +6 -6
  155. package/dist/{web-BC4kDUZw.js → web-D7tHOzz3.js} +6 -6
  156. package/dist/{with-timeout-BFdGltxb.js → with-timeout-gmK6RciS.js} +1 -1
  157. package/package.json +1 -1
@@ -21,14 +21,14 @@ import { a as isPathInsideWithRealpath } from "./legacy-names-Be3msDZo.js";
21
21
  import { t as normalizeChatType } from "./chat-type-DyovJwCt.js";
22
22
  import { n as resolveConversationLabel } from "./conversation-label-Bn5j3lUT.js";
23
23
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CmmmT8IP.js";
24
- import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-DxdRmWfW.js";
25
- import { _ as stripThinkingTagsFromText, a as decodeDataUrl, b as minimaxUnderstandImage, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as stripReasoningTagsFromText, y as extractTextFromChatContent } from "./image-CtCUVPCD.js";
24
+ import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CUglpiFP.js";
25
+ import { _ as stripThinkingTagsFromText, a as decodeDataUrl, b as minimaxUnderstandImage, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as stripReasoningTagsFromText, y as extractTextFromChatContent } from "./image-D9uvDTrc.js";
26
26
  import { t as ensureSymiModelsJson } from "./models-config-qyOXrOli.js";
27
27
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-4uUnLc3n.js";
28
- import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-D-dUrQOR.js";
29
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-B7qoYkRl.js";
30
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-DBKZkx0x.js";
31
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-B-ra1emS.js";
28
+ import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-CNPyv_ax.js";
29
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-C-T6hOMv.js";
30
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-DtPkPq9T.js";
31
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-CEpFjqSk.js";
32
32
  import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-6jdJQ5ZL.js";
33
33
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-BF3TeRH2.js";
34
34
  import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-BBm9fwuG.js";
@@ -51,10 +51,10 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-Db3d
51
51
  import { t as fetchWithSsrFGuard } from "./fetch-guard-DOPkVbh3.js";
52
52
  import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, t as getAgentScopedMediaLocalRoots } from "./local-roots-aAFLQGkY.js";
53
53
  import { v as runTasksWithConcurrency } from "./sqlite-Dx3J_aSE.js";
54
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-Da6fXK5K.js";
54
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-DvBJ8pMD.js";
55
55
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-BuceUQDl.js";
56
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-BFdGltxb.js";
57
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeChannelTargetInput, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as buildTargetResolverSignature, h as throwIfAborted, 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 normalizeTargetForProvider, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-Bu624MY6.js";
56
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-gmK6RciS.js";
57
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeChannelTargetInput, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as buildTargetResolverSignature, h as throwIfAborted, 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 normalizeTargetForProvider, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-CWR_98sK.js";
58
58
  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-DjBRPfu9.js";
59
59
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-CUslJyKP.js";
60
60
  import { A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as toLocationContext, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as parseTelegramTarget, K as withTelegramApiErrorLogging, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as formatLocationText, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-Cutb0ZDY.js";
@@ -69,8 +69,8 @@ import { n as resolveMarkdownTableMode } from "./markdown-tables-CEbN0fEm.js";
69
69
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-DZam9q5M.js";
70
70
  import { a as resolveNativeSkillsEnabled, i as resolveNativeCommandsEnabled, n as isNativeCommandsExplicitlyDisabled, r as isRestartEnabled, t as isCommandFlagEnabled } from "./commands-BNLCWX6e.js";
71
71
  import { a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, i as listChatCommands, l as parseCommandArgs, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices } from "./commands-registry-BT0-zzs3.js";
72
- import { Mt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-Z6SFrwob.js";
73
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-7djMRPgl.js";
72
+ import { Mt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-CQSyCS4M.js";
73
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-CJaS1iRF.js";
74
74
  import { n as formatTimeAgo } from "./format-relative-BXoxEQVN.js";
75
75
  import { n as normalizePollInput } from "./polls-DhH5YkzN.js";
76
76
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-BOiuJS3t.js";
@@ -85,7 +85,7 @@ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliv
85
85
  import { b as ensureSkillsWatcher, i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames, x as getSkillsSnapshotVersion } from "./skill-commands-Cxw-jNxU.js";
86
86
  import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o as derivePromptTokens, r as loadSessionCostSummary, s as deriveSessionTotalTokens } from "./session-cost-usage-UxUgrslM.js";
87
87
  import { a as normalizeIMessageHandle, c as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, i as isAllowedIMessageSender, o as parseIMessageTarget, r as formatIMessageChatTarget, s as createIMessageRpcClient, t as sendMessageIMessage } from "./send-DWYkPSUs.js";
88
- import { r as detectBinary } from "./onboard-helpers-CiLCJJVQ.js";
88
+ import { r as detectBinary } from "./onboard-helpers-ZmZYzlq3.js";
89
89
  import { t as resolvePairingIdLabel } from "./pairing-labels-2S6x2UoV.js";
90
90
  import { i as resolveModelCostConfig, n as formatTokenCount$2, r as formatUsd, t as estimateUsageCost } from "./usage-format-BzKEDn0q.js";
91
91
  import { t as getActiveWebListener } from "./active-listener-kvXhlgwu.js";
@@ -93,8 +93,8 @@ import { _ as getTrustedSafeBinDirs, b as buildSafeShellCommand, d as resolveExe
93
93
  import { a as canvasSnapshotTempPath, c as parseCameraClipPayload, d as writeCameraClipPayloadToFile, f as writeUrlToFile, g as normalizePathPrepend, h as mergePathPrepend, i as parseEnvPairs, l as parseCameraSnapPayload, m as applyPathPrepend, n as screenRecordTempPath, o as parseCanvasSnapshotPayload, p as buildNodeShellCommand, r as writeScreenRecordToFile, s as cameraTempPath, t as parseScreenRecordPayload, u as writeBase64ToFile } from "./nodes-screen-VBGXKdLk.js";
94
94
  import { n as parseNodeList, r as parsePairingList, t as resolveNodeIdFromCandidates } from "./node-match-CN8o4Vi3.js";
95
95
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-BiwOFDEK.js";
96
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-CgGK6Jq8.js";
97
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-DdeFa44u.js";
96
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-CIDBbw6x.js";
97
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-Bz7rxLWq.js";
98
98
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BUClb97_.js";
99
99
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-C8_BLnaW.js";
100
100
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-DuWs0Aak.js";
@@ -113,7 +113,7 @@ import { complete, completeSimple, createAssistantMessageEventStream, streamSimp
113
113
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
114
114
  import { createServer } from "node:http";
115
115
  import { ProxyAgent, fetch as fetch$1 } from "undici";
116
- import WebSocket$1 from "ws";
116
+ import WebSocket from "ws";
117
117
  import { Buffer as Buffer$1 } from "node:buffer";
118
118
  import { EdgeTTS } from "node-edge-tts";
119
119
  import { createJiti } from "jiti";
@@ -10415,7 +10415,7 @@ async function routeReply(params) {
10415
10415
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10416
10416
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10417
10417
  try {
10418
- const { deliverOutboundPayloads } = await import("./deliver-Bu624MY6.js").then((n) => n.n);
10418
+ const { deliverOutboundPayloads } = await import("./deliver-CWR_98sK.js").then((n) => n.n);
10419
10419
  return {
10420
10420
  ok: true,
10421
10421
  messageId: (await deliverOutboundPayloads({
@@ -12965,7 +12965,7 @@ async function describeStickerImage(params) {
12965
12965
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
12966
12966
  try {
12967
12967
  const buffer = await fs$1.readFile(imagePath);
12968
- const { describeImageWithModel } = await import("./image-CtCUVPCD.js").then((n) => n.n);
12968
+ const { describeImageWithModel } = await import("./image-D9uvDTrc.js").then((n) => n.n);
12969
12969
  return (await describeImageWithModel({
12970
12970
  buffer,
12971
12971
  fileName: "sticker.webp",
@@ -15604,7 +15604,7 @@ async function preflightDiscordMessage(params) {
15604
15604
  let preflightTranscript;
15605
15605
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
15606
15606
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
15607
- const { transcribeFirstAudio } = await import("./audio-preflight-BcSzL_0I.js");
15607
+ const { transcribeFirstAudio } = await import("./audio-preflight-CWnxkaac.js");
15608
15608
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
15609
15609
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
15610
15610
  ctx: {
@@ -25481,6 +25481,16 @@ function validateShellCommand(command) {
25481
25481
  //#endregion
25482
25482
  //#region src/agents/pi-tools.validate-wrapper.ts
25483
25483
  const log$3 = createSubsystemLogger("agents/tool-validate");
25484
+ /** Return a properly formatted tool result error that pi-agent-core can process. */
25485
+ function toolError(message) {
25486
+ return {
25487
+ content: [{
25488
+ type: "text",
25489
+ text: message
25490
+ }],
25491
+ details: {}
25492
+ };
25493
+ }
25484
25494
  const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
25485
25495
  const GEMMA_MODEL_ID = "gemma";
25486
25496
  /**
@@ -25536,15 +25546,56 @@ function sanitizeParams(params) {
25536
25546
  };
25537
25547
  }
25538
25548
  /**
25549
+ * Build a usage example string from a tool's JSON schema for helpful error messages.
25550
+ * Returns something like: web_search({ query: "<search terms>" })
25551
+ */
25552
+ function buildToolUsageExample(toolName, schema) {
25553
+ const props = schema?.properties;
25554
+ if (!props || typeof props !== "object") return `${toolName}({ ... })`;
25555
+ return `${toolName}({ ${Object.entries(props).slice(0, 4).map(([key, def]) => {
25556
+ const typeDef = def;
25557
+ if (Array.isArray(typeDef?.enum)) return `${key}: "${typeDef.enum[0]}"`;
25558
+ if (typeDef?.type === "string") return `${key}: "<${typeof typeDef.description === "string" ? typeDef.description.slice(0, 30) : key}>"`;
25559
+ return `${key}: ...`;
25560
+ }).join(", ")} })`;
25561
+ }
25562
+ /**
25563
+ * Extract required fields from a tool's JSON schema.
25564
+ */
25565
+ function getRequiredFields(schema) {
25566
+ const required = schema?.required;
25567
+ return Array.isArray(required) ? required.filter((r) => typeof r === "string") : [];
25568
+ }
25569
+ /**
25570
+ * Create a relaxed copy of a tool schema with required fields removed.
25571
+ * This allows args with missing fields to pass pi-agent-core's schema
25572
+ * validation, reaching our execute() wrapper where we can return a
25573
+ * helpful error message with a usage example.
25574
+ */
25575
+ function relaxSchema(schema) {
25576
+ if (!schema || typeof schema !== "object") return schema;
25577
+ const copy = { ...schema };
25578
+ delete copy.required;
25579
+ return copy;
25580
+ }
25581
+ /**
25539
25582
  * Wrap a single tool with universal argument sanitization.
25540
25583
  */
25541
25584
  function wrapToolWithArgValidation(tool) {
25542
25585
  const toolName = (tool.name ?? "").toLowerCase().trim();
25543
25586
  const isExecTool = EXEC_TOOL_NAMES.has(toolName);
25587
+ const originalRequired = getRequiredFields(tool.parameters);
25588
+ const usageExample = buildToolUsageExample(toolName, tool.parameters);
25544
25589
  const originalExecute = tool.execute;
25545
25590
  return {
25546
25591
  ...tool,
25592
+ parameters: relaxSchema(tool.parameters),
25547
25593
  execute(toolCallId, params, ...rest) {
25594
+ const missingFields = originalRequired.filter((field) => params[field] === void 0 || params[field] === null);
25595
+ if (missingFields.length > 0) {
25596
+ log$3.warn(`[validate] ${toolName} missing required fields: ${missingFields.join(", ")}`);
25597
+ return Promise.resolve(toolError(`Error: Missing required argument${missingFields.length > 1 ? "s" : ""}: ${missingFields.join(", ")}. Please try again with all required arguments.\nExample: ${usageExample}`));
25598
+ }
25548
25599
  const { cleaned, changed } = sanitizeParams(params);
25549
25600
  if (changed) log$3.debug(`[validate] sanitized args for ${toolName}: ${Object.keys(params).filter((k) => cleaned[k] !== params[k]).join(",")}`);
25550
25601
  const effectiveParams = changed ? cleaned : params;
@@ -25557,7 +25608,7 @@ function wrapToolWithArgValidation(tool) {
25557
25608
  const result = validateShellCommand(command);
25558
25609
  if (!result.valid) {
25559
25610
  log$3.warn(`[validate] exec command rejected: reason=${result.reason} raw=${command.slice(0, 100)}`);
25560
- return Promise.resolve({ output: `Error: ${result.reason}. The command appears to contain model control tokens. Please provide a clean shell command without any <|, |>, or XML-like tags. Only valid shell syntax is accepted.` });
25611
+ return Promise.resolve(toolError(`Error: ${result.reason}. The command appears to contain model control tokens. Please provide a clean shell command without any <|, |>, or XML-like tags. Only valid shell syntax is accepted.`));
25561
25612
  }
25562
25613
  if (result.cleaned !== command) {
25563
25614
  log$3.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
@@ -31403,7 +31454,7 @@ async function runAgentTurn(params) {
31403
31454
  function createDefaultDeps() {
31404
31455
  return {
31405
31456
  sendMessageWhatsApp: async (...args) => {
31406
- const { sendMessageWhatsApp } = await import("./web-DsGfc1GN.js");
31457
+ const { sendMessageWhatsApp } = await import("./web-BPQuKyCM.js");
31407
31458
  return await sendMessageWhatsApp(...args);
31408
31459
  },
31409
31460
  sendMessageTelegram: async (...args) => {
@@ -34610,7 +34661,7 @@ function createDiscordGatewayPlugin(params) {
34610
34661
  super(options);
34611
34662
  }
34612
34663
  createWebSocket(url) {
34613
- return new WebSocket$1(url, { agent });
34664
+ return new WebSocket(url, { agent });
34614
34665
  }
34615
34666
  }
34616
34667
  return new ProxyGatewayPlugin();
@@ -47668,7 +47719,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
47668
47719
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
47669
47720
  let preflightTranscript;
47670
47721
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
47671
- const { transcribeFirstAudio } = await import("./audio-preflight-BcSzL_0I.js");
47722
+ const { transcribeFirstAudio } = await import("./audio-preflight-CWnxkaac.js");
47672
47723
  preflightTranscript = await transcribeFirstAudio({
47673
47724
  ctx: {
47674
47725
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -49834,7 +49885,7 @@ function loadWebLoginQr() {
49834
49885
  return webLoginQrPromise;
49835
49886
  }
49836
49887
  function loadWebChannel() {
49837
- webChannelPromise ??= import("./web-DsGfc1GN.js");
49888
+ webChannelPromise ??= import("./web-BPQuKyCM.js");
49838
49889
  return webChannelPromise;
49839
49890
  }
49840
49891
  function loadWhatsAppActions() {
@@ -72535,7 +72586,7 @@ async function deliverSessionMaintenanceWarning(params) {
72535
72586
  return;
72536
72587
  }
72537
72588
  try {
72538
- const { deliverOutboundPayloads } = await import("./deliver-Bu624MY6.js").then((n) => n.n);
72589
+ const { deliverOutboundPayloads } = await import("./deliver-CWR_98sK.js").then((n) => n.n);
72539
72590
  await deliverOutboundPayloads({
72540
72591
  cfg: params.cfg,
72541
72592
  channel,
@@ -1,7 +1,7 @@
1
1
  import { t as parseBooleanValue } from "./boolean-BsqeuxE6.js";
2
2
  import { i as loadConfig, l as writeConfigFile } from "./config-CHwyw6l5.js";
3
- import { C as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, a as resolveSymiUserDataDir, c as captureScreenshot, f as snapshotAria, h as withBrowserNavigationPolicy, s as resolveBrowserExecutableForPlatform, w as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS } from "./chrome-DBKZkx0x.js";
4
- import { a as resolveProfile, c as getUsedColors, d as deriveDefaultBrowserCdpPortRange, f as getPwAiModule$1, l as getUsedPorts, o as allocateCdpPort, r as parseHttpUrl, s as allocateColor, u as isValidProfileName } from "./server-context-B-ra1emS.js";
3
+ import { C as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, a as resolveSymiUserDataDir, c as captureScreenshot, f as snapshotAria, h as withBrowserNavigationPolicy, s as resolveBrowserExecutableForPlatform, w as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS } from "./chrome-DtPkPq9T.js";
4
+ import { a as resolveProfile, c as getUsedColors, d as deriveDefaultBrowserCdpPortRange, f as getPwAiModule$1, l as getUsedPorts, o as allocateCdpPort, r as parseHttpUrl, s as allocateColor, u as isValidProfileName } from "./server-context-CEpFjqSk.js";
5
5
  import { a as resolvePathWithinRoot, i as resolveExistingPathsWithinRoot, n as DEFAULT_TRACE_DIR, r as DEFAULT_UPLOAD_DIR, t as DEFAULT_DOWNLOAD_DIR } from "./paths-BBm9fwuG.js";
6
6
  import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-1OJMSAUX.js";
7
7
  import { r as saveMediaBuffer, t as ensureMediaDir } from "./store-r1DJSDq-.js";
@@ -1,5 +1,5 @@
1
1
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-aT-I_DTX.js";
2
- import { a as randomIdempotencyKey, n as callGateway } from "./call-7djMRPgl.js";
2
+ import { a as randomIdempotencyKey, n as callGateway } from "./call-CJaS1iRF.js";
3
3
  import { n as withProgress } from "./progress-jIePzvGA.js";
4
4
  import { n as parseNodeList, r as parsePairingList, t as resolveNodeIdFromCandidates } from "./node-match-CN8o4Vi3.js";
5
5
 
@@ -13,7 +13,7 @@ import "./client-DMBZpU6X.js";
13
13
  import "./call-BcE47FtD.js";
14
14
  import "./message-channel-C9dERklz.js";
15
15
  import "./pairing-token-Byh6drgn.js";
16
- import "./subagent-registry-DTIudfq4.js";
16
+ import "./subagent-registry-CzBf7A_o.js";
17
17
  import "./sessions-CJXnZVjR.js";
18
18
  import "./tokens-Csntmwwn.js";
19
19
  import "./plugins-CwSlLxM8.js";
@@ -101,9 +101,9 @@ import { t as ensureSymiCliOnPath } from "./path-env-Bic_wXs9.js";
101
101
  import "./catalog-DLQFKucJ.js";
102
102
  import "./note-DDecZomM.js";
103
103
  import "./plugin-auto-enable-D6ENR3Xg.js";
104
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BwnzEvIz.js";
104
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-CUjBEHAz.js";
105
105
  import { t as assertSupportedRuntime } from "./runtime-guard-D7waq_Ho.js";
106
- import { t as emitCliBanner } from "./banner-BNkhjU8E.js";
106
+ import { t as emitCliBanner } from "./banner-CSZ39UAE.js";
107
107
  import "./doctor-config-flow-CA3eiKhd.js";
108
108
  import { n as ensureConfigReady } from "./config-guard-CPHvOzsC.js";
109
109
  import process$1 from "node:process";
@@ -118,7 +118,7 @@ const routeHealth = {
118
118
  const verbose = getVerboseFlag(argv, { includeDebug: true });
119
119
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
120
120
  if (timeoutMs === null) return false;
121
- const { healthCommand } = await import("./health-BctmvDJ0.js").then((n) => n.i);
121
+ const { healthCommand } = await import("./health-CqQIZeIm.js").then((n) => n.i);
122
122
  await healthCommand({
123
123
  json,
124
124
  timeoutMs,
@@ -138,7 +138,7 @@ const routeStatus = {
138
138
  const verbose = getVerboseFlag(argv, { includeDebug: true });
139
139
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
140
140
  if (timeoutMs === null) return false;
141
- const { statusCommand } = await import("./status-Dqm_DV3z.js").then((n) => n.t);
141
+ const { statusCommand } = await import("./status-D4RE4eR4.js").then((n) => n.t);
142
142
  await statusCommand({
143
143
  json,
144
144
  deep,
@@ -172,7 +172,7 @@ const routeAgentsList = {
172
172
  run: async (argv) => {
173
173
  const json = hasFlag(argv, "--json");
174
174
  const bindings = hasFlag(argv, "--bindings");
175
- const { agentsListCommand } = await import("./agents-DDqXWXbP.js").then((n) => n.t);
175
+ const { agentsListCommand } = await import("./agents-Cz2na8n6.js").then((n) => n.t);
176
176
  await agentsListCommand({
177
177
  json,
178
178
  bindings
@@ -243,7 +243,7 @@ const routes = [
243
243
  const pathArg = getCommandPositionals(argv)[2];
244
244
  if (!pathArg) return false;
245
245
  const json = hasFlag(argv, "--json");
246
- const { runConfigGet } = await import("./config-cli-BM9FX48b.js");
246
+ const { runConfigGet } = await import("./config-cli-CCG1Hizl.js");
247
247
  await runConfigGet({
248
248
  path: pathArg,
249
249
  json
@@ -256,7 +256,7 @@ const routes = [
256
256
  run: async (argv) => {
257
257
  const pathArg = getCommandPositionals(argv)[2];
258
258
  if (!pathArg) return false;
259
- const { runConfigUnset } = await import("./config-cli-BM9FX48b.js");
259
+ const { runConfigUnset } = await import("./config-cli-CCG1Hizl.js");
260
260
  await runConfigUnset({ path: pathArg });
261
261
  return true;
262
262
  }
@@ -270,7 +270,7 @@ const routes = [
270
270
  const local = hasFlag(argv, "--local");
271
271
  const json = hasFlag(argv, "--json");
272
272
  const plain = hasFlag(argv, "--plain");
273
- const { modelsListCommand } = await import("./models-yF2XRbPQ.js").then((n) => n.t);
273
+ const { modelsListCommand } = await import("./models-hMbDU9ot.js").then((n) => n.t);
274
274
  await modelsListCommand({
275
275
  all,
276
276
  local,
@@ -301,7 +301,7 @@ const routes = [
301
301
  const plain = hasFlag(argv, "--plain");
302
302
  const check = hasFlag(argv, "--check");
303
303
  const probe = hasFlag(argv, "--probe");
304
- const { modelsStatusCommand } = await import("./models-yF2XRbPQ.js").then((n) => n.t);
304
+ const { modelsStatusCommand } = await import("./models-hMbDU9ot.js").then((n) => n.t);
305
305
  await modelsStatusCommand({
306
306
  json,
307
307
  plain,
@@ -379,7 +379,7 @@ async function runCli(argv = process$1.argv) {
379
379
  assertSupportedRuntime();
380
380
  if (await tryRouteCli(normalizedArgv)) return;
381
381
  enableConsoleCapture();
382
- const { buildProgram } = await import("./program-NGbjPxJh.js");
382
+ const { buildProgram } = await import("./program-CvHqOriK.js");
383
383
  const program = buildProgram();
384
384
  installUnhandledRejectionHandler();
385
385
  process$1.on("uncaughtException", (error) => {
@@ -411,10 +411,10 @@ async function runCli(argv = process$1.argv) {
411
411
  const { getProgramContext } = await import("./program-context-CqzR_m-7.js").then((n) => n.n);
412
412
  const ctx = getProgramContext(program);
413
413
  if (ctx) {
414
- const { registerCoreCliByName } = await import("./command-registry-BSGsNY71.js").then((n) => n.t);
414
+ const { registerCoreCliByName } = await import("./command-registry-CojVJ8At.js").then((n) => n.t);
415
415
  await registerCoreCliByName(program, ctx, primary, parseArgv);
416
416
  }
417
- const { registerSubCliByName } = await import("./register.subclis-CdANuuHY.js").then((n) => n.a);
417
+ const { registerSubCliByName } = await import("./register.subclis-B0T9tMmL.js").then((n) => n.a);
418
418
  await registerSubCliByName(program, primary);
419
419
  }
420
420
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -423,7 +423,7 @@ async function runCli(argv = process$1.argv) {
423
423
  primary,
424
424
  hasBuiltinPrimary
425
425
  })) {
426
- const { registerPluginCliCommands } = await import("./cli-Bx78WeyO.js");
426
+ const { registerPluginCliCommands } = await import("./cli-v8nSF61Z.js");
427
427
  const { loadConfig } = await import("./config-DHBLS1Hl.js").then((n) => n.t);
428
428
  registerPluginCliCommands(program, loadConfig());
429
429
  }
@@ -4,7 +4,7 @@ import { G as resolveSymiAgentDir, T as resolveApiKeyForProvider, c as normalize
4
4
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
5
5
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-ByaQt43P.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-BmV60pPT.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-CHzdaNJ4.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-DcpMiprB.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-CSlZZ1Pw.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-BheTNyes.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-CC8jiKDk.js";
@@ -3,14 +3,14 @@ import { n as runExec } from "./exec-CWkblSrI.js";
3
3
  import { E as normalizeGoogleModelId, K as requireApiKey, l as normalizeProviderId, q as resolveApiKeyForProvider } from "./model-selection-CyFvYcRt.js";
4
4
  import { _ as isInboundPathAllowed, g as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, v as mergeInboundPathRoots, y as resolveIMessageAttachmentRoots } from "./config-CHwyw6l5.js";
5
5
  import { t as normalizeChatType } from "./chat-type-DyovJwCt.js";
6
- import { t as describeImageWithModel } from "./image-CtCUVPCD.js";
6
+ import { t as describeImageWithModel } from "./image-D9uvDTrc.js";
7
7
  import { r as formatUncaughtError, t as extractErrorCode } from "./errors-BF3TeRH2.js";
8
8
  import { c as detectMime, f as isAudioFileName, m as kindFromMime, u as getFileExtension } from "./image-ops-1OJMSAUX.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-Db3da8yR.js";
10
10
  import { t as fetchWithSsrFGuard } from "./fetch-guard-DOPkVbh3.js";
11
11
  import { n as executeWithApiKeyRotation, r as parseGeminiAuth, t as collectProviderApiKeysForExecution } from "./api-key-rotation-CzuPlV2t.js";
12
12
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, r as MediaFetchError } from "./local-roots-aAFLQGkY.js";
13
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-Da6fXK5K.js";
13
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-DvBJ8pMD.js";
14
14
  import process$1 from "node:process";
15
15
  import { fileURLToPath } from "node:url";
16
16
  import { constants } from "node:fs";
@@ -4,7 +4,7 @@ import { $ as resolveSymiAgentDir, A as normalizeGoogleModelId, B as resolveApiK
4
4
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-5SdHIcHU.js";
5
5
  import { c as detectMime, f as isAudioFileName, m as kindFromMime, u as getFileExtension } from "./image-ops-C7CauEK8.js";
6
6
  import { t as normalizeChatType } from "./chat-type-3FRbbjbq.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-CuzFLQWC.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-CXu8W39c.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-Dy12ZAH3.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-DL3f_O53.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-DhZz0Ybs.js";
@@ -6,12 +6,12 @@ import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
6
6
  import { C as ensureAgentWorkspace, S as DEFAULT_USER_FILENAME, b as DEFAULT_SYMIPULSE_FILENAME, d as resolveSessionAgentId, g as DEFAULT_IDENTITY_FILENAME, h as DEFAULT_BOOTSTRAP_FILENAME, m as DEFAULT_AGENT_WORKSPACE_DIR, p as DEFAULT_AGENTS_FILENAME, r as resolveAgentConfig, x as DEFAULT_TOOLS_FILENAME, y as DEFAULT_SYMICORE_FILENAME } from "./agent-scope-CgUHAtCo.js";
7
7
  import { t as formatCliCommand } from "./command-format-COaS-S7B.js";
8
8
  import { i as loadConfig } from "./config-CHwyw6l5.js";
9
- import { A as DEFAULT_SYMI_BROWSER_PROFILE_NAME, D as DEFAULT_BROWSER_EVALUATE_ENABLED, O as DEFAULT_SYMI_BROWSER_COLOR } from "./chrome-DBKZkx0x.js";
9
+ import { A as DEFAULT_SYMI_BROWSER_PROFILE_NAME, D as DEFAULT_BROWSER_EVALUATE_ENABLED, O as DEFAULT_SYMI_BROWSER_COLOR } from "./chrome-DtPkPq9T.js";
10
10
  import { t as safeEqualSecret } from "./secret-equal-D7A3Bol7.js";
11
11
  import { r as isLoopbackHost } from "./ws-C7EXRv8z.js";
12
- import { a as resolveProfile, m as resolveBrowserControlAuth, p as ensureBrowserControlAuth, t as createBrowserRouteContext } from "./server-context-B-ra1emS.js";
12
+ import { a as resolveProfile, m as resolveBrowserControlAuth, p as ensureBrowserControlAuth, t as createBrowserRouteContext } from "./server-context-CEpFjqSk.js";
13
13
  import { d as resolveSandboxInputPath, f as resolveSandboxPath, g as sanitizeEnvVars, o as syncSkillsToWorkspace } from "./skills-6jdJQ5ZL.js";
14
- import { t as registerBrowserRoutes } from "./routes-BO8eMYxn.js";
14
+ import { t as registerBrowserRoutes } from "./routes-Ba9CUQ8M.js";
15
15
  import { B as resolveAgentMainSessionKey, J as acquireSessionWriteLock, z as canonicalizeMainSessionAlias } from "./sessions-DgYpBvse.js";
16
16
  import { existsSync, realpathSync } from "node:fs";
17
17
  import path, { posix } from "node:path";
@@ -13,14 +13,14 @@ import "./env-DPCHYPeH.js";
13
13
  import { t as INTERNAL_MESSAGE_CHANNEL } from "./message-channel-aT-I_DTX.js";
14
14
  import { i as loadConfig } from "./config-CHwyw6l5.js";
15
15
  import "./manifest-registry-C4BxOMWX.js";
16
- import { f as resolveSandboxConfigForAgent, i as removeSandboxContainer, m as resolveSandboxToolPolicyForAgent, n as listSandboxContainers, r as removeSandboxBrowserContainer, t as listSandboxBrowsers } from "./sandbox-B7qoYkRl.js";
17
- import "./chrome-DBKZkx0x.js";
16
+ import { f as resolveSandboxConfigForAgent, i as removeSandboxContainer, m as resolveSandboxToolPolicyForAgent, n as listSandboxContainers, r as removeSandboxBrowserContainer, t as listSandboxBrowsers } from "./sandbox-C-T6hOMv.js";
17
+ import "./chrome-DtPkPq9T.js";
18
18
  import "./tailscale-D5dKabOc.js";
19
19
  import "./auth-B741uFtk.js";
20
- import "./server-context-B-ra1emS.js";
20
+ import "./server-context-CEpFjqSk.js";
21
21
  import "./frontmatter-DWQhtOo7.js";
22
22
  import "./skills-6jdJQ5ZL.js";
23
- import "./routes-BO8eMYxn.js";
23
+ import "./routes-Ba9CUQ8M.js";
24
24
  import "./redact-f-Q-hFt_.js";
25
25
  import "./errors-BF3TeRH2.js";
26
26
  import "./fs-safe-CUjO1ca2.js";
@@ -13,14 +13,14 @@ import "./env-DPCHYPeH.js";
13
13
  import "./message-channel-aT-I_DTX.js";
14
14
  import { i as loadConfig, r as createConfigIO } from "./config-CHwyw6l5.js";
15
15
  import "./manifest-registry-C4BxOMWX.js";
16
- import "./sandbox-B7qoYkRl.js";
17
- import "./chrome-DBKZkx0x.js";
16
+ import "./sandbox-C-T6hOMv.js";
17
+ import "./chrome-DtPkPq9T.js";
18
18
  import "./tailscale-D5dKabOc.js";
19
19
  import "./auth-B741uFtk.js";
20
- import "./server-context-B-ra1emS.js";
20
+ import "./server-context-CEpFjqSk.js";
21
21
  import "./frontmatter-DWQhtOo7.js";
22
22
  import "./skills-6jdJQ5ZL.js";
23
- import "./routes-BO8eMYxn.js";
23
+ import "./routes-Ba9CUQ8M.js";
24
24
  import "./redact-f-Q-hFt_.js";
25
25
  import "./errors-BF3TeRH2.js";
26
26
  import "./fs-safe-CUjO1ca2.js";
@@ -40,17 +40,17 @@ import "./bindings-DFaVVCsf.js";
40
40
  import "./logging-w5jq5901.js";
41
41
  import "./paths-CyhzMxFA.js";
42
42
  import "./commands-BNLCWX6e.js";
43
- import "./client-Z6SFrwob.js";
44
- import "./call-7djMRPgl.js";
43
+ import "./client-CQSyCS4M.js";
44
+ import "./call-CJaS1iRF.js";
45
45
  import "./pairing-token-CX3NN_qj.js";
46
46
  import { i as readChannelAllowFromStore } from "./pairing-store-CK726Dzq.js";
47
47
  import { t as formatDocsLink } from "./links-3i1eUga4.js";
48
48
  import { t as formatHelpExamples } from "./help-format-B_-M23wP.js";
49
49
  import "./workspace-dirs-GpkFi6Kw.js";
50
- import "./pi-tools.policy-CgGK6Jq8.js";
50
+ import "./pi-tools.policy-CIDBbw6x.js";
51
51
  import "./dangerous-tools-BL-M3lPt.js";
52
52
  import "./skill-scanner-CLs8u6vQ.js";
53
- import { i as collectIncludePathsRecursive, n as createIcaclsResetCommand, r as formatIcaclsResetCommand, t as runSecurityAudit } from "./audit-BIE9JAxf.js";
53
+ import { i as collectIncludePathsRecursive, n as createIcaclsResetCommand, r as formatIcaclsResetCommand, t as runSecurityAudit } from "./audit-CrITRV6w.js";
54
54
  import "./dm-policy-shared-Bh3TbexU.js";
55
55
  import path from "node:path";
56
56
  import fs from "node:fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
2
2
  import { i as loadConfig, l as writeConfigFile, r as createConfigIO } from "./config-CHwyw6l5.js";
3
- import { A as DEFAULT_SYMI_BROWSER_PROFILE_NAME, D as DEFAULT_BROWSER_EVALUATE_ENABLED, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, O as DEFAULT_SYMI_BROWSER_COLOR, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, k as DEFAULT_SYMI_BROWSER_ENABLED, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, v as fetchOk, x as ensureChromeExtensionRelayServer } from "./chrome-DBKZkx0x.js";
3
+ import { A as DEFAULT_SYMI_BROWSER_PROFILE_NAME, D as DEFAULT_BROWSER_EVALUATE_ENABLED, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, O as DEFAULT_SYMI_BROWSER_COLOR, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, k as DEFAULT_SYMI_BROWSER_ENABLED, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, v as fetchOk, x as ensureChromeExtensionRelayServer } from "./chrome-DtPkPq9T.js";
4
4
  import { r as isLoopbackHost } from "./ws-C7EXRv8z.js";
5
5
  import { a as resolveGatewayAuth } from "./auth-B741uFtk.js";
6
6
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-BF3TeRH2.js";
@@ -152,7 +152,7 @@ function isModuleNotFoundError(err) {
152
152
  }
153
153
  async function loadPwAiModule(mode) {
154
154
  try {
155
- return await import("./pw-ai-CC0xm0TY.js");
155
+ return await import("./pw-ai-DqL87js3.js");
156
156
  } catch (err) {
157
157
  if (mode === "soft") return null;
158
158
  if (isModuleNotFoundError(err)) return null;
@@ -775,11 +775,11 @@ function createProfileContext(opts, profile) {
775
775
  const userDataDir = resolveSymiUserDataDir(profile.name);
776
776
  const profileState = getProfileState();
777
777
  if (await isHttpReachable(300) && !profileState.running) try {
778
- await (await import("./pw-ai-CC0xm0TY.js")).closePlaywrightBrowserConnection();
778
+ await (await import("./pw-ai-DqL87js3.js")).closePlaywrightBrowserConnection();
779
779
  } catch {}
780
780
  if (profileState.running) await stopRunningBrowser();
781
781
  try {
782
- await (await import("./pw-ai-CC0xm0TY.js")).closePlaywrightBrowserConnection();
782
+ await (await import("./pw-ai-DqL87js3.js")).closePlaywrightBrowserConnection();
783
783
  } catch {}
784
784
  if (!fs.existsSync(userDataDir)) return {
785
785
  moved: false,