@symerian/symi 2.8.17 → 2.9.0

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 (163) hide show
  1. package/dist/{agents-9cAyC5ED.js → agents-CvNeiuSB.js} +4 -4
  2. package/dist/{agents.config-Cu9zTq04.js → agents.config-BCgY5FjE.js} +1 -1
  3. package/dist/{agents.config-DuwhYjpi.js → agents.config-Ct64cGQ8.js} +1 -1
  4. package/dist/{audio-preflight-rjCWpcfE.js → audio-preflight-Cb-T0r6e.js} +4 -4
  5. package/dist/{auth-choice-CPqyqc93.js → auth-choice-ChFU9OCF.js} +1 -1
  6. package/dist/{auth-choice-DeNzlUAR.js → auth-choice-DmMyKZX4.js} +1 -1
  7. package/dist/{banner-S1NGA6-s.js → banner-Bf46tqiY.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +7 -7
  10. package/dist/bundled/session-memory/handler.js +7 -7
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-C0v4BJgp.js → channel-options-Bqc2VCgt.js} +1 -1
  13. package/dist/{channel-options-C6y7Khvq.js → channel-options-D4a0ZJ72.js} +1 -1
  14. package/dist/{channel-web-DirOFV_n.js → channel-web-YNC2xS5K.js} +1 -1
  15. package/dist/{channels-cli-BhNHckMo.js → channels-cli-BFJcNLbB.js} +6 -6
  16. package/dist/{channels-cli-By_SbriI.js → channels-cli-h3GnmmM9.js} +6 -6
  17. package/dist/{chrome-C08Z0XAa.js → chrome-ROtrXlNs.js} +7 -7
  18. package/dist/{cli-B1QQv1cb.js → cli-BX54CAM7.js} +3 -3
  19. package/dist/{cli-Bx4RQCuK.js → cli-BpQlSGVs.js} +3 -3
  20. package/dist/{command-registry-uMOPbrbY.js → command-registry-BiRjJ2Sy.js} +10 -10
  21. package/dist/{completion-cli-B6s_3rEE.js → completion-cli-BYXofVqv.js} +2 -2
  22. package/dist/{completion-cli-DVD79pVj.js → completion-cli-C8K5J1ld.js} +1 -1
  23. package/dist/{config-cli-DzudcNAD.js → config-cli-BPPD3xqE.js} +1 -1
  24. package/dist/{config-cli-DCGgd-ZL.js → config-cli-Deoo6r2K.js} +1 -1
  25. package/dist/{configure-BybpK_1N.js → configure-BKHxUAAh.js} +3 -3
  26. package/dist/{configure-CItWwZwI.js → configure-D4f0P3bH.js} +3 -3
  27. package/dist/{deliver-qUx-eLKt.js → deliver-B0OUq6RP.js} +1 -1
  28. package/dist/{doctor-completion-BkwgaO4G.js → doctor-completion-gMWymNcA.js} +1 -1
  29. package/dist/{doctor-completion-Bf6dN4D-.js → doctor-completion-woDYSVtY.js} +1 -1
  30. package/dist/entry.js +1 -1
  31. package/dist/extensionAPI.js +2 -2
  32. package/dist/{gateway-cli-eNV6kb1V.js → gateway-cli-Bnh42-56.js} +85 -41
  33. package/dist/{gateway-cli-7CVmb3cX.js → gateway-cli-DsnkTUOp.js} +85 -41
  34. package/dist/{glass-ui-ws-i91Ms6ts.js → glass-ui-ws-0Y0KsBvU.js} +9 -9
  35. package/dist/{glass-ui-ws-B4fsBuHx.js → glass-ui-ws-uj3DRmL8.js} +9 -9
  36. package/dist/{health-C4tWTDu_.js → health-CcV5nKIK.js} +1 -1
  37. package/dist/{health-dA8r4WJ4.js → health-Dl2WRoTa.js} +1 -1
  38. package/dist/{hooks-cli-DYn9nXX0.js → hooks-cli-CTcHtm_0.js} +4 -4
  39. package/dist/{hooks-cli-uGLWBIcW.js → hooks-cli-DEJe3dUH.js} +4 -4
  40. package/dist/{image-C6rCON9L.js → image-BuVL0jHI.js} +1 -1
  41. package/dist/index.js +8 -8
  42. package/dist/llm-slug-generator.js +7 -7
  43. package/dist/{manager-DhGfNqfc.js → manager-9Mni2AA9.js} +1 -1
  44. package/dist/{manager-D6E6EGWa.js → manager-C-H0XXJq.js} +1 -1
  45. package/dist/{manager-BaSutzfz.js → manager-CjW8kPVc.js} +1 -1
  46. package/dist/{manager-CgQo1mIM.js → manager-QPF0UtOC.js} +1 -1
  47. package/dist/{memory-cli-BMb31chU.js → memory-cli-BTByRgM0.js} +3 -3
  48. package/dist/{memory-cli-lJe72a5i.js → memory-cli-OW9XfyYu.js} +3 -3
  49. package/dist/{models-BITN17gY.js → models-Q1jV8ArL.js} +2 -2
  50. package/dist/{models-cli-CHjxevMe.js → models-cli-Cy6H1sFq.js} +5 -5
  51. package/dist/{models-cli-C6JJWWoI.js → models-cli-pfVmmgpv.js} +4 -4
  52. package/dist/{onboard-C8Si08MS.js → onboard-CvpyaUQd.js} +2 -2
  53. package/dist/{onboard-DdJV-Doq.js → onboard-EL8foMiP.js} +2 -2
  54. package/dist/{onboard-channels-Cb-bemSg.js → onboard-channels-BRoSUijQ.js} +1 -1
  55. package/dist/{onboard-channels-PQP9wlk8.js → onboard-channels-Bupbm6zh.js} +1 -1
  56. package/dist/{onboarding-QAtuyHtA.js → onboarding-Ch8WSJ3j.js} +3 -3
  57. package/dist/{onboarding-CAaoPaVQ.js → onboarding-Dg5ydWSh.js} +3 -3
  58. package/dist/{onboarding.finalize-MuO2mvHv.js → onboarding.finalize-Bo8-8TtH.js} +7 -7
  59. package/dist/{onboarding.finalize-BhlQmJlX.js → onboarding.finalize-CCTaCp2s.js} +8 -8
  60. package/dist/{pi-embedded-BUYKq7Wv.js → pi-embedded-Bl3YkBkI.js} +149 -35
  61. package/dist/{pi-embedded-helpers-P13adotN.js → pi-embedded-helpers-D1_Sab0M.js} +4 -4
  62. package/dist/{plugin-registry-tXiHw0vr.js → plugin-registry-BVYZLxmo.js} +1 -1
  63. package/dist/{plugin-registry-DEhkDNDx.js → plugin-registry-Bn9Mj8mP.js} +1 -1
  64. package/dist/plugin-sdk/agents/pi-tools.read-edit-guard.d.ts +5 -0
  65. package/dist/plugin-sdk/agents/pi-tools.read-edit-tracker.d.ts +26 -0
  66. package/dist/plugin-sdk/{channel-web-C7aP_KKZ.js → channel-web-BhqGIC7q.js} +1 -1
  67. package/dist/plugin-sdk/index.js +3 -3
  68. package/dist/plugin-sdk/{manager-CvrDwB1Q.js → manager-DdOb0Em2.js} +1 -1
  69. package/dist/plugin-sdk/{reply-BI7Rf3_S.js → reply-Cjjf4VYT.js} +149 -35
  70. package/dist/plugin-sdk/{synthesis-B3z0Jqt1.js → synthesis-CZ8BYNXP.js} +2 -2
  71. package/dist/plugin-sdk/{web-D2WrY-DI.js → web-B8upqMUo.js} +3 -3
  72. package/dist/{plugins-cli-ByG6o7D2.js → plugins-cli-3h1N5N8n.js} +4 -4
  73. package/dist/{plugins-cli-D1vPxTOQ.js → plugins-cli-CYOQh2DM.js} +4 -4
  74. package/dist/{program-Q44fKoq6.js → program-D3_xE9BL.js} +9 -9
  75. package/dist/{program-context-C3QEc34t.js → program-context-COwsYCbf.js} +18 -18
  76. package/dist/{prompt-select-styled-DBVeLysq.js → prompt-select-styled-D88AWCeM.js} +6 -6
  77. package/dist/{prompt-select-styled-BSZrZcW2.js → prompt-select-styled-rKPBDv7n.js} +6 -6
  78. package/dist/{provider-auth-helpers-Bm4cf-Ms.js → provider-auth-helpers-CyZyVx-V.js} +1 -1
  79. package/dist/{provider-auth-helpers-rH91VXG-.js → provider-auth-helpers-rff7s_gC.js} +1 -1
  80. package/dist/{push-apns-CRD9IH1s.js → push-apns-BNzgqUl3.js} +1 -1
  81. package/dist/{push-apns-Cj10sUbK.js → push-apns-d9qKGKPe.js} +1 -1
  82. package/dist/{pw-ai-CeWN4iD9.js → pw-ai-DWkC5eGA.js} +1 -1
  83. package/dist/{register.agent-DGDnsvVd.js → register.agent-BjaqQA02.js} +7 -7
  84. package/dist/{register.agent-Dfu85lRL.js → register.agent-D_MON8p-.js} +8 -8
  85. package/dist/{register.configure-FCTbPCwe.js → register.configure-BWkkQhpH.js} +8 -8
  86. package/dist/{register.configure-BcdyiQui.js → register.configure-UJi9sfNv.js} +8 -8
  87. package/dist/{register.maintenance-Y8P9AnLe.js → register.maintenance-ChskcWGz.js} +10 -10
  88. package/dist/{register.maintenance-DvDwpW6B.js → register.maintenance-DJptz3DR.js} +9 -9
  89. package/dist/{register.message-mTqwOntI.js → register.message-BDTsiyrW.js} +4 -4
  90. package/dist/{register.message-C57ubt4f.js → register.message-CiadI_oS.js} +4 -4
  91. package/dist/{register.onboard-MIChlygg.js → register.onboard-BflOE1jy.js} +6 -6
  92. package/dist/{register.onboard-YCmMzAW-.js → register.onboard-KR_-4TLY.js} +6 -6
  93. package/dist/{register.setup-sQeN5xag.js → register.setup-Cl0sD25T.js} +6 -6
  94. package/dist/{register.setup-DzUZ2x6y.js → register.setup-W-oNfOp0.js} +6 -6
  95. package/dist/{register.status-health-sessions-DaPK2tow.js → register.status-health-sessions-CCQs235z.js} +5 -5
  96. package/dist/{register.status-health-sessions-DsptpS7K.js → register.status-health-sessions-CT_SmmOH.js} +5 -5
  97. package/dist/{register.subclis-17z5d7uO.js → register.subclis-ByZAz4st.js} +9 -9
  98. package/dist/{reply-2awhibgG.js → reply-CgyjcoxC.js} +148 -34
  99. package/dist/{run-main-CfVO6DFS.js → run-main-xmWpjZL9.js} +17 -17
  100. package/dist/{runner-D633VT13.js → runner-ecX1WzDt.js} +1 -1
  101. package/dist/{server-methods-Bdgs89ve.js → server-methods-CBn954AO.js} +8 -8
  102. package/dist/{server-methods-D_g3GJhv.js → server-methods-DDpCXuOU.js} +8 -8
  103. package/dist/{server-node-events-BZN3RZ8H.js → server-node-events-BBEMSKVE.js} +4 -4
  104. package/dist/{server-node-events-Cvgmf8fS.js → server-node-events-BUEZ3py9.js} +4 -4
  105. package/dist/{status-CwqBkxi2.js → status-BjMiGq0n.js} +1 -1
  106. package/dist/{status-Dkr4Celv.js → status-CG5iHUJ6.js} +3 -3
  107. package/dist/{status-DcxWlds6.js → status-CpvzoCOC.js} +1 -1
  108. package/dist/{status-Ca_VZkZV.js → status-PfvX-BjO.js} +3 -3
  109. package/dist/{subagent-registry-CncIZPCd.js → subagent-registry-D0IYimMO.js} +148 -34
  110. package/dist/{synthesis-CxvpkXBW.js → synthesis-BVZ5RJLg.js} +3 -3
  111. package/dist/{synthesis-lD0Vb_9q.js → synthesis-CBwKBuLy.js} +7 -7
  112. package/dist/{synthesis-CTC73eY9.js → synthesis-D55QrjAJ.js} +3 -3
  113. package/dist/{synthesis-DOmJ2Gay.js → synthesis-itgrzpuj.js} +2 -2
  114. package/dist/{unified-runner-JQaSdhSg.js → unified-runner-BhnvjB1J.js} +163 -49
  115. package/dist/{update-cli-BO1uw-SU.js → update-cli-CL1_LPBS.js} +10 -10
  116. package/dist/{update-cli-CplnPSZ5.js → update-cli-D3K4mhrr.js} +9 -9
  117. package/dist/{update-runner-Df4mjndq.js → update-runner-Bmq67eos.js} +1 -1
  118. package/dist/{update-runner-DFp9PDMN.js → update-runner-DMucmRlv.js} +1 -1
  119. package/dist/{web-CCEVjDcU.js → web-B0lZdBBl.js} +3 -3
  120. package/dist/{web-CZoQ03ZE.js → web-C1HPdY_D.js} +2 -2
  121. package/dist/{web-BEDc6iEz.js → web-DCO_YCRw.js} +7 -7
  122. package/dist/{web-Dn33Cd3-.js → web-DmgQtLx3.js} +4 -4
  123. package/extensions/bluebubbles/package.json +1 -1
  124. package/extensions/copilot-proxy/package.json +1 -1
  125. package/extensions/diagnostics-otel/package.json +1 -1
  126. package/extensions/discord/package.json +1 -1
  127. package/extensions/feishu/package.json +1 -1
  128. package/extensions/google-antigravity-auth/package.json +1 -1
  129. package/extensions/google-gemini-cli-auth/package.json +1 -1
  130. package/extensions/googlechat/package.json +1 -1
  131. package/extensions/imessage/package.json +1 -1
  132. package/extensions/irc/package.json +1 -1
  133. package/extensions/learning-loop/package.json +1 -1
  134. package/extensions/line/package.json +1 -1
  135. package/extensions/llm-task/package.json +1 -1
  136. package/extensions/matrix/CHANGELOG.md +6 -0
  137. package/extensions/matrix/package.json +1 -1
  138. package/extensions/mattermost/package.json +1 -1
  139. package/extensions/memory-core/package.json +1 -1
  140. package/extensions/memory-lancedb/package.json +1 -1
  141. package/extensions/minimax-portal-auth/package.json +1 -1
  142. package/extensions/msteams/CHANGELOG.md +6 -0
  143. package/extensions/msteams/package.json +1 -1
  144. package/extensions/nextcloud-talk/package.json +1 -1
  145. package/extensions/nostr/CHANGELOG.md +6 -0
  146. package/extensions/nostr/package.json +1 -1
  147. package/extensions/open-prose/package.json +1 -1
  148. package/extensions/outlook/package.json +1 -1
  149. package/extensions/pipeline/package.json +1 -1
  150. package/extensions/signal/package.json +1 -1
  151. package/extensions/slack/package.json +1 -1
  152. package/extensions/telegram/package.json +1 -1
  153. package/extensions/tlon/package.json +1 -1
  154. package/extensions/twitch/CHANGELOG.md +6 -0
  155. package/extensions/twitch/package.json +1 -1
  156. package/extensions/voice-call/CHANGELOG.md +6 -0
  157. package/extensions/voice-call/package.json +1 -1
  158. package/extensions/whatsapp/package.json +1 -1
  159. package/extensions/zalo/CHANGELOG.md +6 -0
  160. package/extensions/zalo/package.json +1 -1
  161. package/extensions/zalouser/CHANGELOG.md +6 -0
  162. package/extensions/zalouser/package.json +1 -1
  163. package/package.json +1 -1
@@ -10,10 +10,10 @@ import { $ as resolveAuthProfileDisplayLabel, B as resolveApiKeyForProvider, C a
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-P13adotN.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-D1_Sab0M.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-BkZ9HOKT.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-CBCGTsIb.js";
16
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-C08Z0XAa.js";
16
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-ROtrXlNs.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-CXxrn_e2.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,16 +31,16 @@ 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-C0QjmPaf.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-qUx-eLKt.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-B0OUq6RP.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-BUcR3Meg.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-C6rCON9L.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-BuVL0jHI.js";
38
38
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-RXOlh8ar.js";
39
39
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-W0JzCJJM.js";
40
40
  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-Bb4it0te.js";
41
41
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-CuZX_Q4t.js";
42
42
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CvEIl6_d.js";
43
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-BaSutzfz.js";
43
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-CjW8kPVc.js";
44
44
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-DjnxpF_K.js";
45
45
  import { n as retryAsync } from "./retry-B-y5suGA.js";
46
46
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-DeJTztcq.js";
@@ -50,7 +50,7 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-CVCB
50
50
  import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-ClipCZ9s.js";
51
51
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-7tMVY7D_.js";
52
52
  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-DxbSTLNQ.js";
53
- 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-D633VT13.js";
53
+ 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-ecX1WzDt.js";
54
54
  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-DG2lcozb.js";
55
55
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-DZQU0r3y.js";
56
56
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-ClslA6GS.js";
@@ -81,7 +81,7 @@ import AjvPkg from "ajv";
81
81
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
82
82
  import { createServer } from "node:http";
83
83
  import { ProxyAgent, fetch as fetch$1 } from "undici";
84
- import WebSocket$1, { WebSocket } from "ws";
84
+ import WebSocket, { WebSocket as WebSocket$1 } from "ws";
85
85
  import { Buffer as Buffer$1 } from "node:buffer";
86
86
  import { EdgeTTS } from "node-edge-tts";
87
87
  import { createJiti } from "jiti";
@@ -4340,7 +4340,7 @@ async function getMemorySearchManager(params) {
4340
4340
  const wrapper = new FallbackMemoryManager({
4341
4341
  primary,
4342
4342
  fallbackFactory: async () => {
4343
- const { MemoryIndexManager } = await import("./manager-BaSutzfz.js").then((n) => n.n);
4343
+ const { MemoryIndexManager } = await import("./manager-CjW8kPVc.js").then((n) => n.n);
4344
4344
  return await MemoryIndexManager.get(params);
4345
4345
  }
4346
4346
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4353,7 +4353,7 @@ async function getMemorySearchManager(params) {
4353
4353
  }
4354
4354
  }
4355
4355
  try {
4356
- const { MemoryIndexManager } = await import("./manager-BaSutzfz.js").then((n) => n.n);
4356
+ const { MemoryIndexManager } = await import("./manager-CjW8kPVc.js").then((n) => n.n);
4357
4357
  return { manager: await MemoryIndexManager.get(params) };
4358
4358
  } catch (err) {
4359
4359
  return {
@@ -8955,7 +8955,7 @@ var GatewayClient = class {
8955
8955
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
8956
8956
  });
8957
8957
  }
8958
- this.ws = new WebSocket(url, wsOptions);
8958
+ this.ws = new WebSocket$1(url, wsOptions);
8959
8959
  this.ws.on("open", () => {
8960
8960
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
8961
8961
  const tlsError = this.validateTlsFingerprint();
@@ -9174,7 +9174,7 @@ var GatewayClient = class {
9174
9174
  return null;
9175
9175
  }
9176
9176
  async request(method, params, opts) {
9177
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
9177
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
9178
9178
  const id = randomUUID();
9179
9179
  const frame = {
9180
9180
  type: "req",
@@ -10443,7 +10443,7 @@ async function routeReply(params) {
10443
10443
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10444
10444
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10445
10445
  try {
10446
- const { deliverOutboundPayloads } = await import("./deliver-qUx-eLKt.js").then((n) => n.n);
10446
+ const { deliverOutboundPayloads } = await import("./deliver-B0OUq6RP.js").then((n) => n.n);
10447
10447
  return {
10448
10448
  ok: true,
10449
10449
  messageId: (await deliverOutboundPayloads({
@@ -13328,16 +13328,16 @@ function shouldComputeCommandAuthorized(text, cfg, options) {
13328
13328
 
13329
13329
  //#endregion
13330
13330
  //#region src/channels/sender-label.ts
13331
- function normalize(value) {
13331
+ function normalize$1(value) {
13332
13332
  const trimmed = value?.trim();
13333
13333
  return trimmed ? trimmed : void 0;
13334
13334
  }
13335
13335
  function resolveSenderLabel(params) {
13336
- const name = normalize(params.name);
13337
- const username = normalize(params.username);
13338
- const tag = normalize(params.tag);
13339
- const e164 = normalize(params.e164);
13340
- const id = normalize(params.id);
13336
+ const name = normalize$1(params.name);
13337
+ const username = normalize$1(params.username);
13338
+ const tag = normalize$1(params.tag);
13339
+ const e164 = normalize$1(params.e164);
13340
+ const id = normalize$1(params.id);
13341
13341
  const display = name ?? username ?? tag ?? "";
13342
13342
  const idPart = e164 ?? id ?? "";
13343
13343
  if (display && idPart && display !== idPart) return `${display} (${idPart})`;
@@ -32995,8 +32995,39 @@ const GatewayToolSchema = Type.Object({
32995
32995
  baseHash: Type.Optional(Type.String()),
32996
32996
  sessionKey: Type.Optional(Type.String()),
32997
32997
  note: Type.Optional(Type.String()),
32998
- restartDelayMs: Type.Optional(Type.Number())
32998
+ restartDelayMs: Type.Optional(Type.Number()),
32999
+ userRequestAcknowledgment: Type.Optional(Type.String())
32999
33000
  });
33001
+ /** Actions that mutate gateway state and require explicit user authorization. */
33002
+ const DESTRUCTIVE_ACTIONS = new Set([
33003
+ "config.apply",
33004
+ "config.patch",
33005
+ "update.run"
33006
+ ]);
33007
+ /** Minimum length for a meaningful authorization message. */
33008
+ const MIN_AUTHORIZATION_LENGTH = 10;
33009
+ /**
33010
+ * Asserts the user's request was explicitly acknowledged for destructive
33011
+ * actions. Throws a descriptive error if the acknowledgment is missing,
33012
+ * empty, or trivially short.
33013
+ *
33014
+ * NOTE: This is defense-in-depth, not a hard barrier. A determined model
33015
+ * could still populate the field with fabricated text. The barrier exists
33016
+ * to:
33017
+ * 1. Force the agent to deliberately compose a justification (vs. blind
33018
+ * tool invocation).
33019
+ * 2. Provide an audit trail (the acknowledgment is logged with the tool
33020
+ * call args).
33021
+ * 3. Surface for future tightening (e.g., matching against real session
33022
+ * history).
33023
+ */
33024
+ function assertUserAuthorization(action, params) {
33025
+ if (!DESTRUCTIVE_ACTIONS.has(action)) return;
33026
+ const ack = params.userRequestAcknowledgment;
33027
+ const trimmed = typeof ack === "string" ? ack.trim() : "";
33028
+ if (!trimmed) throw new Error(`Action '${action}' requires an explicit user authorization. Pass userRequestAcknowledgment with a paraphrase of the user's request (e.g., "user said: please update Symi"). If the user did not explicitly request this action, ask them first instead of invoking it.`);
33029
+ if (trimmed.length < MIN_AUTHORIZATION_LENGTH) throw new Error(`Action '${action}' requires a substantive userRequestAcknowledgment (minimum ${MIN_AUTHORIZATION_LENGTH} characters describing the user's request). Received: ${JSON.stringify(trimmed)}.`);
33030
+ }
33000
33031
  function createGatewayTool(opts) {
33001
33032
  return {
33002
33033
  label: "Gateway",
@@ -33007,6 +33038,7 @@ function createGatewayTool(opts) {
33007
33038
  execute: async (_toolCallId, args) => {
33008
33039
  const params = args;
33009
33040
  const action = readStringParam(params, "action", { required: true });
33041
+ assertUserAuthorization(action, params);
33010
33042
  if (action === "restart") {
33011
33043
  if (!isRestartEnabled(opts?.config)) throw new Error("Gateway restart is disabled (commands.restart=false).");
33012
33044
  const sessionKey = typeof params.sessionKey === "string" && params.sessionKey.trim() ? params.sessionKey.trim() : opts?.agentSessionKey?.trim() || void 0;
@@ -44204,7 +44236,7 @@ async function deliverSessionMaintenanceWarning(params) {
44204
44236
  return;
44205
44237
  }
44206
44238
  try {
44207
- const { deliverOutboundPayloads } = await import("./deliver-qUx-eLKt.js").then((n) => n.n);
44239
+ const { deliverOutboundPayloads } = await import("./deliver-B0OUq6RP.js").then((n) => n.n);
44208
44240
  await deliverOutboundPayloads({
44209
44241
  cfg: params.cfg,
44210
44242
  channel,
@@ -47650,7 +47682,7 @@ async function describeStickerImage(params) {
47650
47682
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
47651
47683
  try {
47652
47684
  const buffer = await fs$1.readFile(imagePath);
47653
- const { describeImageWithModel } = await import("./image-C6rCON9L.js").then((n) => n.n);
47685
+ const { describeImageWithModel } = await import("./image-BuVL0jHI.js").then((n) => n.n);
47654
47686
  return (await describeImageWithModel({
47655
47687
  buffer,
47656
47688
  fileName: "sticker.webp",
@@ -50399,7 +50431,7 @@ async function preflightDiscordMessage(params) {
50399
50431
  let preflightTranscript;
50400
50432
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
50401
50433
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
50402
- const { transcribeFirstAudio } = await import("./audio-preflight-rjCWpcfE.js");
50434
+ const { transcribeFirstAudio } = await import("./audio-preflight-Cb-T0r6e.js");
50403
50435
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
50404
50436
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
50405
50437
  ctx: {
@@ -54405,7 +54437,7 @@ function isVoiceChannelType(type) {
54405
54437
  function createDefaultDeps() {
54406
54438
  return {
54407
54439
  sendMessageWhatsApp: async (...args) => {
54408
- const { sendMessageWhatsApp } = await import("./web-BEDc6iEz.js");
54440
+ const { sendMessageWhatsApp } = await import("./web-DCO_YCRw.js");
54409
54441
  return await sendMessageWhatsApp(...args);
54410
54442
  },
54411
54443
  sendMessageTelegram: async (...args) => {
@@ -57310,7 +57342,7 @@ function createDiscordGatewayPlugin(params) {
57310
57342
  super(options);
57311
57343
  }
57312
57344
  createWebSocket(url) {
57313
- return new WebSocket$1(url, { agent });
57345
+ return new WebSocket(url, { agent });
57314
57346
  }
57315
57347
  }
57316
57348
  return new ProxyGatewayPlugin();
@@ -67528,7 +67560,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
67528
67560
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
67529
67561
  let preflightTranscript;
67530
67562
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
67531
- const { transcribeFirstAudio } = await import("./audio-preflight-rjCWpcfE.js");
67563
+ const { transcribeFirstAudio } = await import("./audio-preflight-Cb-T0r6e.js");
67532
67564
  preflightTranscript = await transcribeFirstAudio({
67533
67565
  ctx: {
67534
67566
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -69685,7 +69717,7 @@ function loadWebLoginQr() {
69685
69717
  return webLoginQrPromise;
69686
69718
  }
69687
69719
  function loadWebChannel() {
69688
- webChannelPromise ??= import("./web-BEDc6iEz.js");
69720
+ webChannelPromise ??= import("./web-DCO_YCRw.js");
69689
69721
  return webChannelPromise;
69690
69722
  }
69691
69723
  function loadWhatsAppActions() {
@@ -71154,6 +71186,91 @@ function isToolAllowedByPolicies(name, policies) {
71154
71186
  return policies.every((policy) => isToolAllowedByPolicyName(name, policy));
71155
71187
  }
71156
71188
 
71189
+ //#endregion
71190
+ //#region src/agents/pi-tools.read-edit-guard.ts
71191
+ const RETRY_GUIDANCE_SUFFIX$1 = " Read the file first, then retry the edit.";
71192
+ function readGuardError(filePath) {
71193
+ return /* @__PURE__ */ new Error(`Edit refused: '${filePath}' has not been read in this session. The edit tool requires the agent to read the file first so oldText can match real content rather than hallucinated content.${RETRY_GUIDANCE_SUFFIX$1}`);
71194
+ }
71195
+ function extractPath(args) {
71196
+ if (!args || typeof args !== "object") return;
71197
+ const record = args;
71198
+ const candidate = record.path ?? record.file_path;
71199
+ if (typeof candidate !== "string") return;
71200
+ const trimmed = candidate.trim();
71201
+ return trimmed.length > 0 ? trimmed : void 0;
71202
+ }
71203
+ function wrapReadToolWithTracker(tool, tracker) {
71204
+ return {
71205
+ ...tool,
71206
+ execute: async (toolCallId, args, signal, onUpdate) => {
71207
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
71208
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
71209
+ const filePath = extractPath(args);
71210
+ if (filePath) tracker.recordRead(filePath);
71211
+ }
71212
+ return result;
71213
+ }
71214
+ };
71215
+ }
71216
+ function wrapWriteToolWithTracker(tool, tracker) {
71217
+ return {
71218
+ ...tool,
71219
+ execute: async (toolCallId, args, signal, onUpdate) => {
71220
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
71221
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
71222
+ const filePath = extractPath(args);
71223
+ if (filePath) tracker.recordWrite(filePath);
71224
+ }
71225
+ return result;
71226
+ }
71227
+ };
71228
+ }
71229
+ function wrapEditToolWithGuard(tool, tracker) {
71230
+ return {
71231
+ ...tool,
71232
+ execute: async (toolCallId, args, signal, onUpdate) => {
71233
+ const filePath = extractPath(args);
71234
+ if (filePath && !tracker.hasObserved(filePath)) throw readGuardError(filePath);
71235
+ return tool.execute(toolCallId, args, signal, onUpdate);
71236
+ }
71237
+ };
71238
+ }
71239
+
71240
+ //#endregion
71241
+ //#region src/agents/pi-tools.read-edit-tracker.ts
71242
+ function normalize(filePath, workspaceRoot) {
71243
+ if (!workspaceRoot) return filePath;
71244
+ if (path.isAbsolute(filePath)) return path.normalize(filePath);
71245
+ return path.resolve(workspaceRoot, filePath);
71246
+ }
71247
+ function createReadEditTracker(opts = {}) {
71248
+ const observed = /* @__PURE__ */ new Map();
71249
+ const record = (filePath, kind) => {
71250
+ if (typeof filePath !== "string" || !filePath.trim()) return;
71251
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
71252
+ const prior = observed.get(key);
71253
+ if (kind === "written" || prior !== "written") observed.set(key, kind);
71254
+ };
71255
+ return {
71256
+ recordRead: (filePath) => record(filePath, "read"),
71257
+ recordWrite: (filePath) => record(filePath, "written"),
71258
+ observation: (filePath) => {
71259
+ if (typeof filePath !== "string" || !filePath.trim()) return null;
71260
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
71261
+ return observed.get(key) ?? null;
71262
+ },
71263
+ hasObserved: (filePath) => {
71264
+ if (typeof filePath !== "string" || !filePath.trim()) return false;
71265
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
71266
+ return observed.has(key);
71267
+ },
71268
+ reset: () => {
71269
+ observed.clear();
71270
+ }
71271
+ };
71272
+ }
71273
+
71157
71274
  //#endregion
71158
71275
  //#region src/media/sniff-mime-from-base64.ts
71159
71276
  async function sniffMimeFromBase64(base64) {
@@ -71781,33 +71898,34 @@ function createSymiCodingTools(options) {
71781
71898
  });
71782
71899
  if (sandboxRoot && !sandboxFsBridge) throw new Error("Sandbox filesystem bridge is unavailable.");
71783
71900
  const imageSanitization = resolveImageSanitizationLimits(options?.config);
71901
+ const readEditTracker = createReadEditTracker({ workspaceRoot: sandboxRoot ?? workspaceRoot });
71784
71902
  const base = codingTools.flatMap((tool) => {
71785
71903
  if (tool.name === readTool.name) {
71786
71904
  if (sandboxRoot) {
71787
- const sandboxed = createSandboxedReadTool({
71905
+ const tracked = wrapReadToolWithTracker(createSandboxedReadTool({
71788
71906
  root: sandboxRoot,
71789
71907
  bridge: sandboxFsBridge,
71790
71908
  modelContextWindowTokens: options?.modelContextWindowTokens,
71791
71909
  imageSanitization
71792
- });
71793
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxed, sandboxRoot) : sandboxed];
71910
+ }), readEditTracker);
71911
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, sandboxRoot) : tracked];
71794
71912
  }
71795
- const wrapped = createSymiReadTool(createReadTool(workspaceRoot), {
71913
+ const tracked = wrapReadToolWithTracker(createSymiReadTool(createReadTool(workspaceRoot), {
71796
71914
  modelContextWindowTokens: options?.modelContextWindowTokens,
71797
71915
  imageSanitization
71798
- });
71799
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
71916
+ }), readEditTracker);
71917
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
71800
71918
  }
71801
71919
  if (tool.name === "bash" || tool.name === execToolName) return [];
71802
71920
  if (tool.name === "write") {
71803
71921
  if (sandboxRoot) return [];
71804
- const wrapped = wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write);
71805
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
71922
+ const tracked = wrapWriteToolWithTracker(wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write), readEditTracker);
71923
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
71806
71924
  }
71807
71925
  if (tool.name === "edit") {
71808
71926
  if (sandboxRoot) return [];
71809
- const wrapped = wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit);
71810
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
71927
+ const guarded = wrapEditToolWithGuard(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), readEditTracker);
71928
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
71811
71929
  }
71812
71930
  return [tool];
71813
71931
  });
@@ -71850,22 +71968,18 @@ function createSymiCodingTools(options) {
71850
71968
  } : void 0,
71851
71969
  workspaceOnly: applyPatchWorkspaceOnly
71852
71970
  });
71971
+ const sandboxedEditTool = sandboxRoot ? wrapEditToolWithGuard(createSandboxedEditTool({
71972
+ root: sandboxRoot,
71973
+ bridge: sandboxFsBridge
71974
+ }), readEditTracker) : null;
71975
+ const sandboxedWriteTool = sandboxRoot ? wrapWriteToolWithTracker(createSandboxedWriteTool({
71976
+ root: sandboxRoot,
71977
+ bridge: sandboxFsBridge
71978
+ }), readEditTracker) : null;
71853
71979
  const withHooks = applyToolPolicyPipeline({
71854
71980
  tools: applyOwnerOnlyToolPolicy([
71855
71981
  ...base,
71856
- ...sandboxRoot ? allowWorkspaceWrites ? [workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedEditTool({
71857
- root: sandboxRoot,
71858
- bridge: sandboxFsBridge
71859
- }), sandboxRoot) : createSandboxedEditTool({
71860
- root: sandboxRoot,
71861
- bridge: sandboxFsBridge
71862
- }), workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedWriteTool({
71863
- root: sandboxRoot,
71864
- bridge: sandboxFsBridge
71865
- }), sandboxRoot) : createSandboxedWriteTool({
71866
- root: sandboxRoot,
71867
- bridge: sandboxFsBridge
71868
- })] : [] : [],
71982
+ ...sandboxRoot ? allowWorkspaceWrites && sandboxedEditTool && sandboxedWriteTool ? [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedEditTool, sandboxRoot) : sandboxedEditTool, workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedWriteTool, sandboxRoot) : sandboxedWriteTool] : [] : [],
71869
71983
  ...applyPatchTool ? [applyPatchTool] : [],
71870
71984
  execTool,
71871
71985
  processTool,
@@ -17,7 +17,7 @@ import "./client-CJIMV1WD.js";
17
17
  import "./call-M4YyUnwu.js";
18
18
  import "./message-channel-C9dERklz.js";
19
19
  import "./pairing-token-Byh6drgn.js";
20
- import { wt as trimLogTail } from "./subagent-registry-CncIZPCd.js";
20
+ import { wt as trimLogTail } from "./subagent-registry-D0IYimMO.js";
21
21
  import "./sessions-BPD85pWA.js";
22
22
  import "./tokens-Csntmwwn.js";
23
23
  import "./plugins-CwSlLxM8.js";
@@ -55,8 +55,8 @@ import "./tool-images-CVLISeRT.js";
55
55
  import "./thinking-8sKPnzpp.js";
56
56
  import "./models-config-J1x_DaPn.js";
57
57
  import "./reply-prefix-BUN71nd5.js";
58
- import "./memory-cli-lJe72a5i.js";
59
- import "./manager-CgQo1mIM.js";
58
+ import "./memory-cli-OW9XfyYu.js";
59
+ import "./manager-QPF0UtOC.js";
60
60
  import "./gemini-auth-DEakvf-D.js";
61
61
  import "./retry-C4Q_VPOo.js";
62
62
  import "./sqlite-BP8tiuca.js";
@@ -112,10 +112,10 @@ import "./npm-registry-spec-PuS2I1Em.js";
112
112
  import "./skill-scanner-BV3QHmsf.js";
113
113
  import "./installs-B4sNNRaW.js";
114
114
  import "./channels-status-issues-B-ssmZ8E.js";
115
- import "./register.subclis-17z5d7uO.js";
116
- import "./command-registry-uMOPbrbY.js";
115
+ import "./register.subclis-ByZAz4st.js";
116
+ import "./command-registry-BiRjJ2Sy.js";
117
117
  import "./program-context-DeZ44oQ9.js";
118
- import { r as installCompletion } from "./completion-cli-B6s_3rEE.js";
118
+ import { r as installCompletion } from "./completion-cli-BYXofVqv.js";
119
119
  import "./daemon-runtime-D_elkkFW.js";
120
120
  import { r as parseSemver } from "./runtime-guard-BofkqBu7.js";
121
121
  import "./systemd-CJ5L2ee4.js";
@@ -125,19 +125,19 @@ import "./systemd-hints-Ct8ebNeC.js";
125
125
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-BFoJGCHZ.js";
126
126
  import "./diagnostics-C6xPE2ln.js";
127
127
  import { t as renderTable } from "./table-Bka4fasy.js";
128
- import "./health-C4tWTDu_.js";
128
+ import "./health-CcV5nKIK.js";
129
129
  import "./control-ui-assets-Clf7H-Sm.js";
130
130
  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-BNjupSIM.js";
131
131
  import "./dm-policy-shared-JiSNSaKz.js";
132
132
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-B5zI1_Id.js";
133
- 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-Df4mjndq.js";
133
+ 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-Bmq67eos.js";
134
134
  import "./logging-PVQxLC6I.js";
135
135
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DticqU4-.js";
136
136
  import "./doctor-config-flow-B2dVxbL7.js";
137
137
  import "./systemd-linger-ipoPa7o0.js";
138
138
  import "./health-format-DkjSgkDx.js";
139
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-DBVeLysq.js";
140
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Bf6dN4D-.js";
139
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-D88AWCeM.js";
140
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-woDYSVtY.js";
141
141
  import { spawn, spawnSync } from "node:child_process";
142
142
  import os from "node:os";
143
143
  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 { H as trimLogTail } from "./reply-2awhibgG.js";
4
+ import { H as trimLogTail } from "./reply-CgyjcoxC.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";
@@ -62,8 +62,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
62
62
  import "./send-DpMnSIi5.js";
63
63
  import "./model-ECsJuJew.js";
64
64
  import "./reply-prefix-CE2YmmsD.js";
65
- import "./memory-cli-BMb31chU.js";
66
- import "./manager-DhGfNqfc.js";
65
+ import "./memory-cli-BTByRgM0.js";
66
+ import "./manager-9Mni2AA9.js";
67
67
  import "./retry-BoS4e4X_.js";
68
68
  import "./sqlite-D55gRQbH.js";
69
69
  import "./target-errors-C9e6dMU_.js";
@@ -107,7 +107,7 @@ import "./stagger-CZ1Rrj7O.js";
107
107
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, f as resolveGatewayWindowsTaskName } from "./constants-DF8wPn-_.js";
108
108
  import "./channel-selection-9fIQGtZy.js";
109
109
  import { r as parseSemver } from "./runtime-guard-BKFbNplo.js";
110
- import "./program-context-C3QEc34t.js";
110
+ import "./program-context-COwsYCbf.js";
111
111
  import "./catalog-KW3oyt3k.js";
112
112
  import "./skills-status-D1IW8MhS.js";
113
113
  import { n as inheritOptionFromParent } from "./command-options-DOOvAdsg.js";
@@ -118,7 +118,7 @@ import "./npm-registry-spec-B98RgVZF.js";
118
118
  import "./skill-scanner-BTgjeQBf.js";
119
119
  import "./installs-BPZKRjsO.js";
120
120
  import "./channels-status-issues-BVpj6wWd.js";
121
- import { r as installCompletion } from "./completion-cli-DVD79pVj.js";
121
+ import { r as installCompletion } from "./completion-cli-C8K5J1ld.js";
122
122
  import "./daemon-runtime-Cp7obV7Q.js";
123
123
  import "./systemd-Xs16roN5.js";
124
124
  import { t as resolveGatewayService } from "./service-DzLem5vL.js";
@@ -127,19 +127,19 @@ import "./systemd-hints-vhJS1sOh.js";
127
127
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-D6wyb9bo.js";
128
128
  import "./diagnostics-1uBuB9IE.js";
129
129
  import { t as renderTable } from "./table-BWuvjnmY.js";
130
- import "./health-dA8r4WJ4.js";
130
+ import "./health-Dl2WRoTa.js";
131
131
  import "./control-ui-assets-BrP31IQR.js";
132
132
  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-Bbvpax6u.js";
133
133
  import "./dm-policy-shared-KlzpDeT_.js";
134
134
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-8HXdAdwz.js";
135
- 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-DFp9PDMN.js";
135
+ 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-DMucmRlv.js";
136
136
  import "./logging-CZuxhCZR.js";
137
137
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-D4uLu0dv.js";
138
138
  import "./doctor-config-flow-BCMxS2lf.js";
139
139
  import "./systemd-linger-0C265XKH.js";
140
140
  import "./health-format-Ct4VWeSk.js";
141
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BSZrZcW2.js";
142
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BkwgaO4G.js";
141
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-rKPBDv7n.js";
142
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-gMWymNcA.js";
143
143
  import os from "node:os";
144
144
  import path from "node:path";
145
145
  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 { wt as trimLogTail } from "./subagent-registry-CncIZPCd.js";
3
+ import { wt as trimLogTail } from "./subagent-registry-D0IYimMO.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-Clf7H-Sm.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-BNjupSIM.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 { H as trimLogTail } from "./reply-2awhibgG.js";
2
+ import { H as trimLogTail } from "./reply-CgyjcoxC.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-BrP31IQR.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-Bbvpax6u.js";
@@ -16,7 +16,7 @@ import "./client-CJIMV1WD.js";
16
16
  import "./call-M4YyUnwu.js";
17
17
  import "./message-channel-C9dERklz.js";
18
18
  import "./pairing-token-Byh6drgn.js";
19
- import { Bn as formatInboundEnvelope, F as buildHistoryContextFromEntries, I as recordPendingHistoryEntryIfEnabled, Jn as normalizeMentionText, L as shouldAckReactionForWhatsApp, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as createInboundDebouncer, U as createDedupeCache, Un as hasControlCommand, Vn as resolveEnvelopeFormatOptions, W as getReplyFromConfig, Wn as shouldComputeCommandAuthorized, b as sleepWithAbort, nn as normalizeGroupActivation, qn as buildMentionRegexes, rn as parseActivationCommand, wn as enqueueSystemEvent, y as computeBackoff, zn as resolveInboundDebounceMs } from "./subagent-registry-CncIZPCd.js";
19
+ import { Bn as formatInboundEnvelope, F as buildHistoryContextFromEntries, I as recordPendingHistoryEntryIfEnabled, Jn as normalizeMentionText, L as shouldAckReactionForWhatsApp, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as createInboundDebouncer, U as createDedupeCache, Un as hasControlCommand, Vn as resolveEnvelopeFormatOptions, W as getReplyFromConfig, Wn as shouldComputeCommandAuthorized, b as sleepWithAbort, nn as normalizeGroupActivation, qn as buildMentionRegexes, rn as parseActivationCommand, wn as enqueueSystemEvent, y as computeBackoff, zn as resolveInboundDebounceMs } from "./subagent-registry-D0IYimMO.js";
20
20
  import { B as resolveGroupSessionKey, c as recordSessionMetaFromInbound, o as loadSessionStore, s as readSessionUpdatedAt, u as updateLastRoute } from "./sessions-BPD85pWA.js";
21
21
  import "./tokens-Csntmwwn.js";
22
22
  import "./plugins-CwSlLxM8.js";
@@ -54,8 +54,8 @@ import "./tool-images-CVLISeRT.js";
54
54
  import "./thinking-8sKPnzpp.js";
55
55
  import "./models-config-J1x_DaPn.js";
56
56
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-BUN71nd5.js";
57
- import "./memory-cli-lJe72a5i.js";
58
- import "./manager-CgQo1mIM.js";
57
+ import "./memory-cli-OW9XfyYu.js";
58
+ import "./manager-QPF0UtOC.js";
59
59
  import "./gemini-auth-DEakvf-D.js";
60
60
  import "./retry-C4Q_VPOo.js";
61
61
  import "./sqlite-BP8tiuca.js";
@@ -8,7 +8,7 @@ import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createR
8
8
  import "./github-copilot-token-BbsJ0Qbo.js";
9
9
  import { r as formatCliCommand } from "./env-CQ_DQOwT.js";
10
10
  import "./tokens-Cn6drXx2.js";
11
- import { C as hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as formatDurationPrecise, a as DEFAULT_GROUP_HISTORY_LIMIT, b as resolveInboundDebounceMs, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as parseActivationCommand, h as normalizeGroupActivation, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as enqueueSystemEvent, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./pi-embedded-BUYKq7Wv.js";
11
+ import { C as hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as formatDurationPrecise, a as DEFAULT_GROUP_HISTORY_LIMIT, b as resolveInboundDebounceMs, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as parseActivationCommand, h as normalizeGroupActivation, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as enqueueSystemEvent, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./pi-embedded-Bl3YkBkI.js";
12
12
  import "./plugins-71oIavrF.js";
13
13
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  import "./bindings-DYVakimr.js";
@@ -36,7 +36,7 @@ import "./accounts-DImOt9jX.js";
36
36
  import { s as resolveStorePath } from "./paths-DkMamAQ-.js";
37
37
  import "./tool-images-ChC2CXaN.js";
38
38
  import "./image-MNvheU8U.js";
39
- import "./manager-D6E6EGWa.js";
39
+ import "./manager-C-H0XXJq.js";
40
40
  import "./gemini-auth-DVcG-42i.js";
41
41
  import "./retry-QGp0jvVi.js";
42
42
  import "./sqlite-Bo4pHfp8.js";