@symerian/symi 3.3.0 → 3.3.1

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 (330) hide show
  1. package/dist/{agent-B2IkIBj2.js → agent-BI1-UXxQ.js} +1 -1
  2. package/dist/{agent-BrIHHGnC.js → agent-DeLysRUa.js} +29 -29
  3. package/dist/{agent-scope-2la27US0.js → agent-scope-BjEBQhs0.js} +23 -23
  4. package/dist/{agent-scope-D_MtsuXX.js → agent-scope-DE5eEsvh.js} +2 -2
  5. package/dist/{agents-B57SUSPt.js → agents-BMRZpxNt.js} +2 -2
  6. package/dist/{agents.config-COMcEDAk.js → agents.config-BFKM-a83.js} +3 -3
  7. package/dist/{audit-B58SlbPa.js → audit-DQ_p2Pbq.js} +34 -34
  8. package/dist/{auth-CC9_WXMi.js → auth-BbwD4lRX.js} +3 -3
  9. package/dist/{auth-choice-B6iYCDVN.js → auth-choice-BGZsmh6a.js} +9 -9
  10. package/dist/{auth-choice-Z1qCZxwg.js → auth-choice-T77Ymi34.js} +1 -1
  11. package/dist/{auth-profiles-CZTGpbyT.js → auth-profiles-B6ISm3Th.js} +5 -5
  12. package/dist/{auth-profiles-8vSEr9B4.js → auth-profiles-BVtpxYtY.js} +17 -17
  13. package/dist/{auth-token-DpYUPTNG.js → auth-token-CPluo60n.js} +3 -3
  14. package/dist/{banner-QsnCDxXH.js → banner-BJHky-bq.js} +1 -1
  15. package/dist/{bindings-CiRAK4tH.js → bindings-9LSA3Jr1.js} +2 -2
  16. package/dist/{bonjour-discovery-lp5P_YUR.js → bonjour-discovery-CU1mz7AC.js} +3 -3
  17. package/dist/{browser-cli-_9G3GBJS.js → browser-cli-O7Ic8DI3.js} +28 -28
  18. package/dist/build-info.json +3 -3
  19. package/dist/bundled/boot-md/handler.js +34 -34
  20. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  21. package/dist/bundled/session-memory/handler.js +33 -33
  22. package/dist/{call-DLBaLOHo.js → call-CdXXPXpo.js} +13 -13
  23. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  24. package/dist/{catalog-CNZxYA15.js → catalog-BEREnWaa.js} +4 -4
  25. package/dist/{channel-options-DckWOMWG.js → channel-options-BrDTgiiV.js} +5 -5
  26. package/dist/{channel-options-Cj-xJAMD.js → channel-options-C1yi5h7A.js} +1 -1
  27. package/dist/{channel-selection-BGtIUbFL.js → channel-selection-BvIcXQLj.js} +2 -2
  28. package/dist/{channels-cli-CIq4PFA0.js → channels-cli-BYeGzy-G.js} +7 -7
  29. package/dist/{channels-cli-Y8CGJ_qQ.js → channels-cli-Pxe1OINS.js} +98 -98
  30. package/dist/{channels-status-issues-rRBNHH7B.js → channels-status-issues-DC8vgOMo.js} +1 -1
  31. package/dist/{chrome-b556dOQ6.js → chrome-CQnRgvJz.js} +7 -7
  32. package/dist/{chrome-BgQbis3t.js → chrome-FAf5DZL2.js} +11 -11
  33. package/dist/{chrome-sQI2Ex5S.js → chrome-NUKborg3.js} +7 -7
  34. package/dist/{chunk-CKgSHf7u.js → chunk-DQGU0F8t.js} +2 -2
  35. package/dist/{chunk-Ds8SZRkS.js → chunk-DX6VtywY.js} +1 -1
  36. package/dist/{clack-prompter-CR9tYooX.js → clack-prompter-CWQQn_CK.js} +5 -5
  37. package/dist/cli-DFNOC2Ad.js +128 -0
  38. package/dist/{cli--omJsLkl.js → cli-Dt-wfm_7.js} +4 -4
  39. package/dist/{client-D8iTVY4F.js → client-Bs2zB0rY.js} +7 -7
  40. package/dist/{clipboard-C9NQe8TV.js → clipboard-McRwF3r0.js} +1 -1
  41. package/dist/{command-registry-bozDt85D.js → command-registry-BwbT4ll7.js} +10 -10
  42. package/dist/{commands-sNCgvbpu.js → commands-B3UrgxIz.js} +2 -2
  43. package/dist/{commands-registry-CRkL6mTz.js → commands-registry-C5IdtVVy.js} +4 -4
  44. package/dist/{commands-registry-DXK4Ortm.js → commands-registry-DYk02tmt.js} +6 -6
  45. package/dist/{completion-cli-9qQYFUPk.js → completion-cli-CyOSA5xZ.js} +2 -2
  46. package/dist/{completion-cli-FXkVKM19.js → completion-cli-DiNUqrNY.js} +16 -16
  47. package/dist/{config-fTqqDRAc.js → config-CW8aDVM0.js} +9 -9
  48. package/dist/{config-cli-BexhS7Qb.js → config-cli-DBU_S417.js} +15 -15
  49. package/dist/{config-cli-C3D7beGW.js → config-cli-DfG0nukz.js} +1 -1
  50. package/dist/{config-guard-IteQa1rq.js → config-guard-CNmD3-IC.js} +23 -23
  51. package/dist/{config-validation-B05t9fma.js → config-validation-Bz5CV181.js} +2 -2
  52. package/dist/{configure-BWXNd2TO.js → configure-BYu2DI_6.js} +2 -2
  53. package/dist/{configure-0e3ty1G9.js → configure-BkH4ueot.js} +26 -26
  54. package/dist/{consolidate-BaeR2tIX.js → consolidate-Cx7qF5Ht.js} +10 -10
  55. package/dist/{consolidate-C-HKdAJo.js → consolidate-dh1m3X1s.js} +2 -2
  56. package/dist/{control-service-BDMq-0pg.js → control-service-Drd2sr2o.js} +5 -5
  57. package/dist/{control-ui-assets-muBwnb6-.js → control-ui-assets-D22DSxhv.js} +4 -4
  58. package/dist/{conversation-label-B4d5pKXr.js → conversation-label-CS5Zjc4w.js} +1 -1
  59. package/dist/{conversation-label-WjwKgn7n.js → conversation-label-tLwAlqLf.js} +1 -1
  60. package/dist/{cron-cli-DvDr2Uxo.js → cron-cli-BTAdnRhX.js} +21 -21
  61. package/dist/{daemon-cli-DiLogoCM.js → daemon-cli-BY9BFNuw.js} +22 -22
  62. package/dist/{daemon-runtime-C3dBpZhs.js → daemon-runtime-BH3ZBZXS.js} +13 -13
  63. package/dist/{deliver-B_Fv-dS9.js → deliver-DZ7ynJYH.js} +8 -8
  64. package/dist/{deliver-B_Gz2_tA.js → deliver-Dlq2X0K5.js} +4 -4
  65. package/dist/{deliver-B_jXI55b.js → deliver-kmnOOp9j.js} +22 -22
  66. package/dist/{delivery-queue-CeY346SK.js → delivery-queue-DDs84baU.js} +2 -2
  67. package/dist/{deps-Du8ZcRHN.js → deps-i1g0Zpz4.js} +1 -1
  68. package/dist/{devices-cli-BFPrh5bu.js → devices-cli-Cqi6L8PH.js} +19 -19
  69. package/dist/{diagnostic-D7z6O7v0.js → diagnostic-CQLyE7_n.js} +1 -1
  70. package/dist/{diagnostic-oeL366QK.js → diagnostic-CwF3MnBL.js} +1 -1
  71. package/dist/{diagnostics-3x3usVgE.js → diagnostics-nLP2i_BY.js} +5 -5
  72. package/dist/{directory-cli-BUBucKQI.js → directory-cli-B0XsBWso.js} +19 -19
  73. package/dist/{dm-policy-shared-BcXoqtVd.js → dm-policy-shared-CnKffdt_.js} +2 -2
  74. package/dist/{dns-cli-B6QTNBXV.js → dns-cli-BHWlCG31.js} +17 -17
  75. package/dist/{dock-n_MeJBcj.js → dock-CnGWTXL4.js} +3 -3
  76. package/dist/{docs-cli-C2xEH6jC.js → docs-cli-DASNErN-.js} +13 -13
  77. package/dist/{doctor-completion-K1dL1s3P.js → doctor-completion-D_cwpDAq.js} +4 -4
  78. package/dist/{doctor-completion-CcHk8myN.js → doctor-completion-DqvmZZEo.js} +1 -1
  79. package/dist/{doctor-config-flow-Dl08K6Q3.js → doctor-config-flow-BvHSaiFy.js} +15 -15
  80. package/dist/entry.js +1 -1
  81. package/dist/{env-B7UUyzd_.js → env-B97Ms861.js} +2 -2
  82. package/dist/{errors-BgCjRT2k.js → errors-BkfLlDKo.js} +1 -1
  83. package/dist/{errors-CBVhQiQ9.js → errors-Z-WkF18Q.js} +1 -1
  84. package/dist/{exec-BcvUYCcV.js → exec-DKyLtSjm.js} +2 -2
  85. package/dist/{exec-approvals-BWtVKlN2.js → exec-approvals-CZOc8M5w.js} +3 -3
  86. package/dist/{exec-approvals-cli-SDF4LICf.js → exec-approvals-cli-CyHTywue.js} +27 -27
  87. package/dist/extensionAPI.js +4 -4
  88. package/dist/{fetch-guard-BWofyagX.js → fetch-guard-DG6T0ZdL.js} +2 -2
  89. package/dist/{frontmatter-B5iYTsZP.js → frontmatter-B6IdJ7UK.js} +2 -2
  90. package/dist/{frontmatter-vaw8OX7Y.js → frontmatter-BW7tVmn4.js} +5 -5
  91. package/dist/{fs-safe-CR_3Yr4x.js → fs-safe-DjAKGGJ8.js} +7 -7
  92. package/dist/{gateway-cli-CAFWFnSX.js → gateway-cli-BBqSqFGV.js} +451 -151
  93. package/dist/{gateway-cli-CzD6faIt.js → gateway-cli-BYGA5ex3.js} +311 -11
  94. package/dist/{gateway-rpc-o8CJkHuM.js → gateway-rpc-BJF1iDnx.js} +3 -3
  95. package/dist/{github-copilot-token-DTYkb2IC.js → github-copilot-token-BTNK6Tcd.js} +2 -2
  96. package/dist/{glass-ui-ws-Bbs2mIij.js → glass-ui-ws-DJnV8nJK.js} +8 -8
  97. package/dist/{glass-ui-ws-Dsez9bGF.js → glass-ui-ws-NJNiRFL3.js} +105 -105
  98. package/dist/{gmail-setup-utils-CLvOQ6kY.js → gmail-setup-utils-D5G00y8h.js} +5 -5
  99. package/dist/{health-iJ9JzccO.js → health-D59E1VfO.js} +13 -13
  100. package/dist/{health-format-CxAXRqzB.js → health-format-39e76m9p.js} +1 -1
  101. package/dist/{help-format-BWTv-lf6.js → help-format-BI_G2p1e.js} +1 -1
  102. package/dist/{helpers-BtwjKsDp.js → helpers-BBypnAYf.js} +1 -1
  103. package/dist/{hooks-cli-BEYoHsqh.js → hooks-cli-Bidz8ACz.js} +98 -98
  104. package/dist/{hooks-cli-DNlmk6eB.js → hooks-cli-CyjEjDSY.js} +5 -5
  105. package/dist/{hooks-status-D9SOPTTY.js → hooks-status-DLHEahg_.js} +3 -3
  106. package/dist/{image-ops-BkR5mVOY.js → image-ops-c7_of0HT.js} +12 -12
  107. package/dist/{inbound-context-CICDRKxY.js → inbound-context-CJj1VfzK.js} +2 -2
  108. package/dist/{inbound-context-B4B7i7oM.js → inbound-context-DqAyGDbE.js} +2 -2
  109. package/dist/index.js +90 -90
  110. package/dist/{inspect-XD55qAEL.js → inspect-op0Ov-v4.js} +4 -4
  111. package/dist/{install-safe-path-odQNUvjd.js → install-safe-path-B73BkVO3.js} +12 -12
  112. package/dist/{installs-DLhIne1t.js → installs-ZXEjR9Sp.js} +12 -12
  113. package/dist/{internal-CBKiu8Jv.js → internal-C3o_xyzP.js} +10 -10
  114. package/dist/{legacy-names-BVA_sKnb.js → legacy-names-C0hZiM-7.js} +1 -1
  115. package/dist/{lifecycle-core-CcinwCvM.js → lifecycle-core-zhQYm_ni.js} +10 -10
  116. package/dist/{links-C6mXo5Yj.js → links-CSaUKNKm.js} +1 -1
  117. package/dist/llm-slug-generator.js +33 -33
  118. package/dist/{local-roots-C0G03E-R.js → local-roots-CTriU02e.js} +3 -3
  119. package/dist/{local-roots-DtvYChMM.js → local-roots-Dm8-ErgQ.js} +3 -3
  120. package/dist/{logging-CMolPIQB.js → logging-B96FQvnn.js} +2 -2
  121. package/dist/{logs-cli--Wek899G.js → logs-cli-B7RJ57Dc.js} +20 -20
  122. package/dist/{manager-CS1vxold.js → manager-9dNT9kNF.js} +22 -22
  123. package/dist/{manager-9Rt8-xIT.js → manager-CpBl-VGg.js} +1 -1
  124. package/dist/{manager-Bmh-pcUv.js → manager-Dsdh0rGn.js} +9 -9
  125. package/dist/{manager-Do0-i7vp.js → manager-t4GthPGw.js} +1 -1
  126. package/dist/{manifest-registry-Cc80pffV.js → manifest-registry-B2vClvK5.js} +2 -2
  127. package/dist/{manifest-registry-B4I9g0CL.js → manifest-registry-D7Qup2Vq.js} +3 -3
  128. package/dist/{markdown-tables-D0bwB4O7.js → markdown-tables-BaWa2kOe.js} +1 -1
  129. package/dist/{markdown-tables-jlJYpF1X.js → markdown-tables-GTLvbzuR.js} +2 -2
  130. package/dist/{memory-BduQaKuC.js → memory-B7TJXpqS.js} +2 -2
  131. package/dist/{memory-ofHIUCzf.js → memory-DcWXMzOH.js} +7 -7
  132. package/dist/{memory-cli-BCz9iNCM.js → memory-cli-C0WA_nRS.js} +2 -2
  133. package/dist/{memory-cli-LXH0BNmI.js → memory-cli-xBZPEOeL.js} +22 -22
  134. package/dist/{message-channel-j44ChSJV.js → message-channel-C_V8IAYx.js} +1 -1
  135. package/dist/{model-BBL3doiY.js → model-BXWgh5eZ.js} +1 -1
  136. package/dist/{model-catalog-D8YRs6r8.js → model-catalog-BGVslwAT.js} +4 -4
  137. package/dist/{model-picker-CdmjvvmL.js → model-picker-aTfyp_mP.js} +3 -3
  138. package/dist/{models-DTHdIg0A.js → models-IfAFy9bK.js} +2 -2
  139. package/dist/{models-cli-CdL5Tf5E.js → models-cli-DiB4JqF2.js} +6 -6
  140. package/dist/{models-cli-DrJsggrX.js → models-cli-h8h_qu3F.js} +94 -94
  141. package/dist/{models-config-BCa11tVc.js → models-config-DRgHv7Ss.js} +8 -8
  142. package/dist/{node-cli-Dl-lvH1N.js → node-cli-BPkbqgRt.js} +50 -50
  143. package/dist/{node-service-O5CpXu6c.js → node-service-DuN9eBL6.js} +1 -1
  144. package/dist/{nodes-cli-C9pjIduh.js → nodes-cli-C09c6nCf.js} +27 -27
  145. package/dist/{nodes-screen-B_D8bZhT.js → nodes-screen-CT94yu_w.js} +7 -7
  146. package/dist/{note-1QdZVD7W.js → note-CHrtEumO.js} +2 -2
  147. package/dist/{npm-registry-spec-BQ7yzKIT.js → npm-registry-spec-B8X06AqB.js} +12 -12
  148. package/dist/{onboard-channels-DmvTuYe_.js → onboard-channels-BfzW-9vo.js} +1 -1
  149. package/dist/{onboard-channels-CXqIlUcV.js → onboard-channels-Deq8QGnM.js} +13 -13
  150. package/dist/{onboard-custom-DAD9D1fS.js → onboard-custom-DEdRdzNq.js} +3 -3
  151. package/dist/{onboard-helpers-C5J9vSm2.js → onboard-helpers-DZKHFY2J.js} +16 -16
  152. package/dist/{onboard-hooks-D87tRcuX.js → onboard-hooks-DZZM8goM.js} +11 -11
  153. package/dist/{onboard-3VcPRZV5.js → onboard-iL7Z0wKJ.js} +1 -1
  154. package/dist/{onboard-remote-D3CWFQ0_.js → onboard-remote-dn4L5WdE.js} +3 -3
  155. package/dist/{onboard-Cr1Rd93U.js → onboard-sMgEOBjV.js} +20 -20
  156. package/dist/{onboard-skills-CTv0hBJv.js → onboard-skills-DGHye9Q3.js} +5 -5
  157. package/dist/{onboarding-D_wPq7hv.js → onboarding-70YKbZi6.js} +3 -3
  158. package/dist/{onboarding-Bop5peq2.js → onboarding-BjXYbWlg.js} +19 -19
  159. package/dist/{onboarding.finalize-DGwAMlRi.js → onboarding.finalize-Ch3V08eY.js} +4 -4
  160. package/dist/{onboarding.finalize-Pa0bEFjp.js → onboarding.finalize-dU_CtL43.js} +62 -62
  161. package/dist/{onboarding.gateway-config-aIrdqmcQ.js → onboarding.gateway-config-DfF8Rxvn.js} +23 -23
  162. package/dist/{openai-model-default-BDH_OYY8.js → openai-model-default-D1NFHFF_.js} +4 -4
  163. package/dist/{pairing-cli-PrIxvqnD.js → pairing-cli-CJv8LQfb.js} +17 -17
  164. package/dist/{pairing-store-DmCi9E47.js → pairing-store-CxT0UGxd.js} +5 -5
  165. package/dist/{pairing-token-BmIoXjHZ.js → pairing-token-DorpwP8O.js} +9 -9
  166. package/dist/{path-env-CRW1aXZp.js → path-env-DuQralyy.js} +3 -3
  167. package/dist/{paths-Cqn-zk3M.js → paths-BSzKwaxE.js} +1 -1
  168. package/dist/paths-BeAyfCRg.js +127 -0
  169. package/dist/{paths-CdGa1jlU.js → paths-CJcw9nbZ.js} +3 -3
  170. package/dist/{paths-DvXvD4Xu.js → paths-DaQrPPet.js} +2 -2
  171. package/dist/{pi-auth-json-ChKC--mV.js → pi-auth-json-BzuhVcKu.js} +1 -1
  172. package/dist/{pi-auth-json-DhbhmAvs.js → pi-auth-json-DGZH6URT.js} +5 -5
  173. package/dist/{pi-embedded-hri4e4ie.js → pi-embedded-DOCVZrmx.js} +20 -64
  174. package/dist/{pi-embedded-helpers-VZo1D4Ck.js → pi-embedded-helpers-Be-EeyzH.js} +9 -9
  175. package/dist/{pi-tools.policy-DrRZdkk0.js → pi-tools.policy-qwS9SXOa.js} +6 -6
  176. package/dist/{plugin-auto-enable-BV-thF8P.js → plugin-auto-enable-zDUaiaf2.js} +4 -4
  177. package/dist/{plugin-registry-CYEwOWqU.js → plugin-registry-BgGVB3kW.js} +5 -5
  178. package/dist/{plugin-registry-q_UuFncy.js → plugin-registry-CP2mbhwk.js} +1 -1
  179. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +0 -1
  180. package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +0 -3
  181. package/dist/plugin-sdk/auto-reply/reply/payload-middleware.d.ts +0 -2
  182. package/dist/plugin-sdk/auto-reply/reply/typing-mode.d.ts +5 -3
  183. package/dist/plugin-sdk/auto-reply/types.d.ts +0 -3
  184. package/dist/plugin-sdk/gateway/outbound-filter.d.ts +4 -7
  185. package/dist/plugin-sdk/infra/agent-events.d.ts +0 -1
  186. package/dist/{plugins-CYQOjCDt.js → plugins-DuuHorqi.js} +3 -3
  187. package/dist/{plugins-cli-DE_0PdqM.js → plugins-cli-1wkCRsFe.js} +5 -5
  188. package/dist/{plugins-cli-CR1PAkGv.js → plugins-cli-B_Gtx3LU.js} +89 -89
  189. package/dist/{plugins-BG2b7dR_.js → plugins-yymezpEd.js} +2 -2
  190. package/dist/{ports-DfsXfAsq.js → ports-ChuJYhEL.js} +2 -2
  191. package/dist/{ports-LzI_-wEZ.js → ports-EAVAOFyK.js} +7 -7
  192. package/dist/{program-x8XxEZXE.js → program-UyCr49qs.js} +10 -10
  193. package/dist/{program-context-CvgJOZ3Q.js → program-context-C7uCS8z7.js} +39 -39
  194. package/dist/{progress-B6mhJhX6.js → progress-CyPyGCDn.js} +2 -2
  195. package/dist/{prompt-select-styled-BFV2QYJC.js → prompt-select-styled-BRcRFLzB.js} +4 -4
  196. package/dist/{prompt-select-styled-CFeLUnsr.js → prompt-select-styled-DcMra8CK.js} +54 -54
  197. package/dist/{prompt-style-DtQMGj0v.js → prompt-style-Cad0BDRS.js} +1 -1
  198. package/dist/{provider-auth-helpers-D2GLBV7U.js → provider-auth-helpers-BJTb9xI0.js} +1 -1
  199. package/dist/{provider-auth-helpers-C-Cv3SZA.js → provider-auth-helpers-Xn1TAPPY.js} +8 -8
  200. package/dist/{push-apns-DTqLWoEj.js → push-apns-Aaqf9WKI.js} +10 -10
  201. package/dist/{push-apns-9XQgEWxs.js → push-apns-Bfqnchj6.js} +1 -1
  202. package/dist/{pw-ai-BFZrohva.js → pw-ai-B3qisJP1.js} +1 -1
  203. package/dist/{pw-ai-Bb4P23-n.js → pw-ai-C-ddUgTA.js} +20 -20
  204. package/dist/{pw-ai-D5WlMgqy.js → pw-ai-DJrnU1ja.js} +12 -12
  205. package/dist/{qmd-manager-92cDmzSO.js → qmd-manager-D5kqCz-Y.js} +28 -28
  206. package/dist/{qmd-manager-D6ABQ2yd.js → qmd-manager-DrM6m9z1.js} +7 -7
  207. package/dist/{qr-cli-B_kge4ua.js → qr-cli-B_mw4i0R.js} +12 -12
  208. package/dist/{register.agent-C-p6kDhf.js → register.agent-BqKNzdaW.js} +108 -108
  209. package/dist/{register.agent-D9FfFyh0.js → register.agent-vAJ0_4m0.js} +9 -9
  210. package/dist/register.configure-7TmTqCgU.js +129 -0
  211. package/dist/{register.configure-CtbO9t7v.js → register.configure-BzgavjpU.js} +8 -8
  212. package/dist/{register.maintenance-Dy8l8hKt.js → register.maintenance-6Wz4HXlm.js} +109 -109
  213. package/dist/{register.maintenance-h-CVvMpP.js → register.maintenance-BJO0RCk9.js} +9 -9
  214. package/dist/{register.message-DFytf1Dr.js → register.message-CW9PahRi.js} +5 -5
  215. package/dist/{register.message-CaOagrcp.js → register.message-XYivyrQJ.js} +81 -81
  216. package/dist/{register.onboard-SunldfQB.js → register.onboard-BgwkmP4D.js} +45 -45
  217. package/dist/{register.onboard-BAQSWmTB.js → register.onboard-MWRC29wD.js} +2 -2
  218. package/dist/{register.setup-D3uuohUQ.js → register.setup-7OoAqQG_.js} +48 -48
  219. package/dist/{register.setup-BnuPTj2h.js → register.setup-V-arsKvb.js} +2 -2
  220. package/dist/{register.status-health-sessions-azKiEST-.js → register.status-health-sessions-1VnuXhGM.js} +3 -3
  221. package/dist/{register.status-health-sessions-CPcQpUNU.js → register.status-health-sessions-Bgg1sdY_.js} +68 -68
  222. package/dist/{register.subclis-Di2DRNVF.js → register.subclis-DpPYIqkP.js} +9 -9
  223. package/dist/{registry-C-JddWwo.js → registry-9AaJQms1.js} +2 -2
  224. package/dist/{registry-CtguoMhn.js → registry-DKJLAPDB.js} +4 -4
  225. package/dist/{replies-CvuXRwhI.js → replies-BZN1LuJP.js} +3 -3
  226. package/dist/{replies-BUaT9S6J.js → replies-Dqft-42v.js} +3 -3
  227. package/dist/{reply-prefix-ClUrRCRd.js → reply-prefix-CyLplifX.js} +1 -1
  228. package/dist/{reply-prefix-ChIeKp-P.js → reply-prefix-DkDTGwTs.js} +1 -1
  229. package/dist/{resolve-route-BLDKso2x.js → resolve-route-CIA0TSsF.js} +4 -4
  230. package/dist/{resolve-route-C0EHjIMD.js → resolve-route-xpyI3enn.js} +6 -6
  231. package/dist/{routes-BFfAPz_0.js → routes-xZZ99jJJ.js} +14 -14
  232. package/dist/{rpc-CQUsmQ6_.js → rpc-BzR2wLkc.js} +3 -3
  233. package/dist/{run-main-BhJ6M7oy.js → run-main-n0fjk-o5.js} +17 -17
  234. package/dist/{runtime-guard-Btd35-OG.js → runtime-guard-BZ3_1QqS.js} +1 -1
  235. package/dist/{sandbox-sayuve7z.js → sandbox-DGG12SGo.js} +27 -27
  236. package/dist/{sandbox-cli-Dyh_eqHp.js → sandbox-cli--d2MJPM2.js} +37 -37
  237. package/dist/{security-cli-B5XGCe-n.js → security-cli-CeP9ss1g.js} +53 -53
  238. package/dist/{send-dfhV1QIV.js → send-BQJKg0bU.js} +7 -7
  239. package/dist/{send-B-tsyoRw.js → send-BzUWmgQ9.js} +13 -13
  240. package/dist/{server-context-hxl_K7eY.js → server-context-BNbx1tUD.js} +11 -11
  241. package/dist/{server-methods-MUFuMWc_.js → server-methods-BHg4GltA.js} +76 -408
  242. package/dist/{server-methods-3uA_KwN4.js → server-methods-DkZ2XtEo.js} +8 -340
  243. package/dist/{server-node-events-FUPulMjB.js → server-node-events-6dZ22EGj.js} +82 -82
  244. package/dist/{server-node-events-DkbyHj1T.js → server-node-events-BXviL2UH.js} +6 -6
  245. package/dist/{service-B5aOZmQH.js → service-9ItKCWWS.js} +15 -15
  246. package/dist/{session-cost-usage-DQjHUno0.js → session-cost-usage-DYcv40ss.js} +3 -3
  247. package/dist/{session-dirs-Chh7bBGo.js → session-dirs-B6PWqKEf.js} +2 -2
  248. package/dist/{session-utils-C6O0Db39.js → session-utils-BVC8mmBv.js} +22 -22
  249. package/dist/{sessions-oPVoK2gW.js → sessions-BaFVKzC2.js} +25 -25
  250. package/dist/{shared-BJxR-kzm.js → shared-DUmy8R4n.js} +5 -5
  251. package/dist/{shared-E4KDN3LG.js → shared-ot5_jkpP.js} +3 -3
  252. package/dist/{skill-commands-CfGPouRa.js → skill-commands-DaNhP2Jb.js} +5 -5
  253. package/dist/{skill-commands-4afIEM1a.js → skill-commands-X3T9Y9lT.js} +4 -4
  254. package/dist/{skill-scanner-BGtq5jZi.js → skill-scanner-DVq7ZopF.js} +7 -7
  255. package/dist/{skills-Kt1PL_Um.js → skills-BMTJ2Tiq.js} +6 -6
  256. package/dist/{skills-BF_e-fYt.js → skills-C_KgxpBD.js} +9 -9
  257. package/dist/{skills-cli-BlFM1U3r.js → skills-cli-DwYoPwkG.js} +19 -19
  258. package/dist/{skills-install-miTQGOBQ.js → skills-install-U4FmCP8u.js} +9 -9
  259. package/dist/{skills-remote-Ch1B-1aN.js → skills-remote-C0gcKYWX.js} +6 -6
  260. package/dist/{skills-status-CFVFYR-o.js → skills-status-CdfQvU1h.js} +4 -4
  261. package/dist/{sqlite-CfMLToLW.js → sqlite-BUXBg2yu.js} +8 -8
  262. package/dist/{sqlite-BKMdYqso.js → sqlite-C6MZhX4c.js} +3 -3
  263. package/dist/{ssrf-LaudpmHD.js → ssrf-BvjSIOlZ.js} +9 -9
  264. package/dist/{status-BNH-f3PA.js → status-BAnT_4qI.js} +4 -4
  265. package/dist/{status-B-XD80Yl.js → status-BK-ZK7SP.js} +36 -36
  266. package/dist/{status-CCgqMBwp.js → status-CmoBgZ99.js} +1 -1
  267. package/dist/{status-C7F7r-qN.js → status-J_gR_zbh.js} +1 -1
  268. package/dist/{status.update-B9WCVHPy.js → status.update-Cvj7y384.js} +4 -4
  269. package/dist/{subagent-registry-z08a8MUS.js → subagent-registry-CWolsN8K.js} +13 -55
  270. package/dist/{subsystem-CgepNOk5.js → subsystem-CtH6J8AV.js} +1 -1
  271. package/dist/{subsystem-DzRUKS9f.js → subsystem-DhOo2FZn.js} +1 -1
  272. package/dist/{symi-root-7ei1lwo0.js → symi-root-0MUhiNlM.js} +3 -3
  273. package/dist/{synthesis-D4iCZvKx.js → synthesis-BSKiS446.js} +4 -4
  274. package/dist/{synthesis-CjFmYp54.js → synthesis-CRQp5mTx.js} +78 -78
  275. package/dist/{synthesis-Dlweuq0p.js → synthesis-D3wZX5g3.js} +33 -33
  276. package/dist/{synthesis-ByjLMHMS.js → synthesis-DTZGPpj5.js} +4 -4
  277. package/dist/{system-cli-Ccu9utFt.js → system-cli-CUGyogmP.js} +19 -19
  278. package/dist/{systemd-ChKNxGyT.js → systemd-8KKQdTO_.js} +8 -8
  279. package/dist/{systemd-hints-hoofHqb7.js → systemd-hints-_ghBqtKo.js} +7 -7
  280. package/dist/{systemd-linger-DLgi3jd0.js → systemd-linger-CnKJZBUr.js} +2 -2
  281. package/dist/{table-Cyd0-LaL.js → table-DkAQzCOR.js} +2 -2
  282. package/dist/{tailscale-D3KwzQUZ.js → tailscale-D7dC-5EX.js} +3 -3
  283. package/dist/{thinking-nf5YVDrR.js → thinking-BYtE7_UC.js} +2 -2
  284. package/dist/{tokens-DfB8vBa4.js → tokens-DvvjOTxN.js} +1 -1
  285. package/dist/{tokens-B24nv23l.js → tokens-wW7opugV.js} +1 -1
  286. package/dist/{tool-display-D1Hh5TqL.js → tool-display-Dr6VaTg5.js} +2 -2
  287. package/dist/{tool-loop-detection-BxrJfVQU.js → tool-loop-detection-CSSq5kkt.js} +4 -4
  288. package/dist/{tool-loop-detection-BR52lwOt.js → tool-loop-detection-DyZ0TWGh.js} +2 -2
  289. package/dist/transcript-events-JGGQViao.js +17 -0
  290. package/dist/{trash-oWw0M_xA.js → trash-BjVrPcAx.js} +2 -2
  291. package/dist/{tui-cli-sRKxOjmC.js → tui-cli-BPOcMJ-f.js} +43 -43
  292. package/dist/{tui-DqMRn1zF.js → tui-fKWqWqeq.js} +12 -12
  293. package/dist/{unified-runner-Uyw1gZOm.js → unified-runner-Cdj1nLUh.js} +286 -328
  294. package/dist/{unified-runner-CBVGL54b.js → unified-runner-DftrstdI.js} +200 -245
  295. package/dist/{update-rop24lF7.js → update-XJWQZpV7.js} +5 -5
  296. package/dist/{update-check-CC111uwU.js → update-check-BdSIMYWq.js} +7 -7
  297. package/dist/{update-cli-BbtFbkK5.js → update-cli-D_MLjj6j.js} +120 -120
  298. package/dist/{update-cli-CH7SLjSd.js → update-cli-jQo-vg6S.js} +9 -9
  299. package/dist/{update-runner-B0L2a2rW.js → update-runner-D_UHlPN0.js} +18 -18
  300. package/dist/{utils-AQWIWjGu.js → utils-BU8jVQFM.js} +2 -2
  301. package/dist/{webhooks-cli-CFMpDwWL.js → webhooks-cli-DgRLVVrD.js} +17 -17
  302. package/dist/{widearea-dns-DxpPXWPv.js → widearea-dns-C5NqCQ3L.js} +2 -2
  303. package/dist/{with-timeout-Bxn0qVBQ.js → with-timeout-DwVWQ2sN.js} +2 -2
  304. package/dist/{workspace-StbmAqYj.js → workspace-B_xyjOdv.js} +4 -4
  305. package/dist/{workspace-CsaDUuDn.js → workspace-OBnI5mKu.js} +2 -2
  306. package/dist/{workspace-dirs-B5axjz_-.js → workspace-dirs-DStsDXra.js} +1 -1
  307. package/dist/{ws-FAiTi9-v.js → ws-CahTJvD6.js} +1 -1
  308. package/dist/{wsl-ZWGwnnKI.js → wsl-DO9usEVV.js} +2 -2
  309. package/package.json +1 -1
  310. package/dist/cli-iz9sMJ9d.js +0 -128
  311. package/dist/plugin-sdk/gateway/server-chat.d.ts +0 -49
  312. package/dist/register.configure-D69HXLo4.js +0 -129
  313. package/dist/{boolean-B8-BqKGQ.js → boolean-Wzu0-e0P.js} +0 -0
  314. package/dist/{boolean-BgXe2hyu.js → boolean-mcn6kL0s.js} +0 -0
  315. package/dist/{brew-ip7v32wW.js → brew-BoKmB5x9.js} +1 -1
  316. /package/dist/{chat-type-B2TfTsnW.js → chat-type-B7XD_ESN.js} +0 -0
  317. /package/dist/{chat-type-BoBpxitL.js → chat-type-BPBtOjer.js} +0 -0
  318. /package/dist/{command-format-CyXZlazG.js → command-format-BvAkTjTI.js} +0 -0
  319. /package/dist/{github-copilot-token-BUd9oA8x.js → github-copilot-token-B31ugq7R.js} +0 -0
  320. /package/dist/{input-provenance-iBlnbS1d.js → input-provenance-DsLesw6T.js} +0 -0
  321. /package/dist/{legacy-names-BlIw4lsD.js → legacy-names-sghWmXe3.js} +0 -0
  322. /package/dist/{redact-CozCe54d.js → redact-CSc_2Nka.js} +0 -0
  323. /package/dist/{redact-DPnDWsnT.js → redact-Dd8jrogi.js} +0 -0
  324. /package/dist/{secret-equal-DjTAoH50.js → secret-equal-D1BCVB1D.js} +0 -0
  325. /package/dist/{session-key-DUSb7CCb.js → session-key-B_ZVH1kE.js} +0 -0
  326. /package/dist/{ssrf-Cirmgays.js → ssrf-CC9kEPCT.js} +0 -0
  327. /package/dist/{tailnet-BruyvjMC.js → tailnet-LYvn9g3I.js} +0 -0
  328. /package/dist/{thinking-BTh3b5vY.js → thinking-177f26eg.js} +0 -0
  329. /package/dist/{transcript-events-BOK6eOU8.js → transcript-events-Ch7wLX-j.js} +0 -0
  330. /package/dist/{transcript-tools--a2pL_yH.js → transcript-tools-CrMLYORt.js} +0 -0
@@ -1,97 +1,97 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { g as resolveStateDir, u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
3
- import { S as isPlainObject, _ as shortenHomeInString, b as sliceUtf16Safe, c as escapeRegExp, h as resolveUserPath, r as clampInt, t as CONFIG_DIR, u as isRecord, v as shortenHomePath, x as truncateUtf16Safe, y as sleep } from "./utils-AQWIWjGu.js";
4
- import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-DfB8vBa4.js";
5
- import { D as shouldLogVerbose, H as createInternalHookEvent, M as getChildLogger, O as warn, R as normalizeLogLevel, W as triggerInternalHook, _ as executePluginCommand, b as danger, c as normalizeAnyChannelId, g as clearPluginCommands, h as createPluginRegistry, l as normalizeChannelId, n as CHAT_CHANNEL_ORDER, p as setActivePluginRegistry, v as listPluginCommands, w as logVerbose, y as matchPluginCommand } from "./registry-CtguoMhn.js";
6
- import { d as createNonExitingRuntime, f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-CgepNOk5.js";
7
- import { A as buildConfiguredAllowlistKeys, At as resolveShellEnvFallbackTimeoutMs, Ct as resolveEnvApiKey, Et as normalizeSecretInput, F as modelKey, H as resolveDefaultModelForAgent, Ht as DEFAULT_MODEL, I as normalizeModelRef$1, K as resolveSubagentSpawnModelSelection, L as normalizeProviderId, M as findNormalizedProviderValue, Ot as getShellPathFromLoginShell, T as resolveSymiAgentDir, Ut as DEFAULT_PROVIDER, V as resolveConfiguredModelRef, Vt as DEFAULT_CONTEXT_TOKENS, W as resolveModelRefFromString, Wt as resolveAuthProfileDisplayLabel, _t as createOllamaStreamFn, a as markAuthProfileFailure, b as ensureAuthProfileStore, bt as requireApiKey, et as normalizeGoogleModelId, g as markAuthProfileGood, gt as OLLAMA_NATIVE_BASE_URL, h as listProfilesForProvider, i as isProfileInCooldown, j as buildModelAliasIndex, k as buildAllowedModelSet, n as resolveAuthProfileOrder, o as markAuthProfileUsed, q as resolveThinkingDefault, r as getSoonestCooldownExpiry, vt as getApiKeyForModel, w as resolveAuthStorePathForDisplay, wt as resolveModelAuthMode, xt as resolveApiKeyForProvider, yt as getCustomProviderApiKey } from "./auth-profiles-8vSEr9B4.js";
8
- import { t as formatCliCommand } from "./command-format-CyXZlazG.js";
9
- import { S as resolveThreadParentSessionKey, _ as isAcpSessionKey, a as classifySessionKeyShape, b as isSubagentSessionKey, c as resolveAgentIdFromSessionKey, g as getSubagentDepth, l as resolveThreadSessionKeys, m as normalizeAccountId, o as normalizeAgentId, p as DEFAULT_ACCOUNT_ID, r as buildAgentMainSessionKey, s as normalizeMainKey, t as DEFAULT_AGENT_ID, u as sanitizeAgentId, x as parseAgentSessionKey, y as isCronSessionKey } from "./session-key-DUSb7CCb.js";
10
- import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-7ei1lwo0.js";
11
- import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-BcvUYCcV.js";
12
- import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentConfig, s as resolveAgentSkillsFilter, w as filterBootstrapFilesForSession } from "./agent-scope-2la27US0.js";
13
- import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-DTYkb2IC.js";
14
- import { t as parseBooleanValue } from "./boolean-BgXe2hyu.js";
15
- import { t as isTruthyEnvValue } from "./env-B7UUyzd_.js";
16
- import { A as isRawApiErrorPayload, B as sanitizeGoogleTurnOrdering, C as isCloudCodeAssistFormatError, D as isFailoverErrorMessage, E as isFailoverAssistantError, F as sanitizeUserFacingText, I as buildBootstrapContextFiles, L as ensureSessionHeader, M as isTransientHttpError, N as parseImageDimensionError, O as isLikelyContextOverflowError, P as parseImageSizeError, R as resolveBootstrapMaxChars, S as isBillingAssistantError, T as isContextOverflowError, _ as formatAssistantErrorText, a as normalizeTextForComparison, b as getApiErrorPayloadFingerprint, c as sanitizeToolResultImages, d as extractToolResultId, f as downgradeOpenAIReasoningBlocks, g as classifyFailoverReason, h as BILLING_ERROR_USER_MESSAGE, i as isMessagingToolDuplicateNormalized, j as isTimeoutErrorMessage, k as isRateLimitAssistantError, l as resolveImageSanitizationLimits, m as isGoogleModelApi, n as validateGeminiTurns, o as sanitizeSessionMessagesImages, p as isAntigravityClaude, r as pickFallbackThinkingLevel, s as sanitizeImageBlocks, t as validateAnthropicTurns, u as extractToolCallsFromAssistant, v as formatBillingErrorMessage, w as isCompactionFailureError, x as isAuthAssistantError, y as formatRawAssistantErrorForUi, z as resolveBootstrapTotalMaxChars } from "./pi-embedded-helpers-VZo1D4Ck.js";
17
- import { A as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, C as unsetConfigValueAtPath, N as VERSION, S as setConfigValueAtPath, _ as resetConfigOverrides, b as getConfigValueAtPath, c as resolveConfigSnapshotHash, g as getConfigOverrides, h as validateJsonSchemaValue, i as loadConfig, l as writeConfigFile, m as parseDurationMs, o as readConfigFileSnapshot, u as validateConfigObjectWithPlugins, v as setConfigOverride, x as parseConfigPath, y as unsetConfigOverride } from "./config-fTqqDRAc.js";
18
- import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-B4I9g0CL.js";
19
- import { a as isPathInsideWithRealpath } from "./legacy-names-BVA_sKnb.js";
20
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-sayuve7z.js";
21
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-sQI2Ex5S.js";
22
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-hxl_K7eY.js";
23
- import { l as parseFrontmatterBlock } from "./frontmatter-vaw8OX7Y.js";
24
- 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-BF_e-fYt.js";
25
- import { n as getMediaDir, r as saveMediaBuffer } from "./routes-BFfAPz_0.js";
26
- import { n as formatErrorMessage, r as formatUncaughtError, t as extractErrorCode } from "./errors-CBVhQiQ9.js";
27
- import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-DvXvD4Xu.js";
28
- import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-Cirmgays.js";
29
- import { _ as mediaKindFromMime, c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, h as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, m as normalizeMimeType$1, p as kindFromMime, s as resizeToJpeg, u as getFileExtension } from "./image-ops-BkR5mVOY.js";
30
- import { C as capArrayByJsonBytes, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields } from "./sessions-oPVoK2gW.js";
31
- import { c as normalizeStringEntries, i as resolveChannelGroupRequireMention, l as normalizeStringEntriesLower, n as listChannelDocks, o as normalizeAtHashSlug, r as resolveChannelGroupPolicy, s as normalizeHyphenSlug, t as getChannelDock } from "./dock-n_MeJBcj.js";
32
- import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, h as GATEWAY_CLIENT_NAMES, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-j44ChSJV.js";
33
- import { t as normalizeChatType } from "./chat-type-BoBpxitL.js";
34
- import { n as resolveConversationLabel } from "./conversation-label-WjwKgn7n.js";
35
- import { a as resolveSlackAccount, c as resolveSlackBotToken, n as listChannelPlugins, r as normalizeChannelId$1, s as resolveSlackAppToken, t as getChannelPlugin } from "./plugins-CYQOjCDt.js";
36
- import { _ as resolveSlackChannelId, a as markdownToIRWithMeta, c as MediaFetchError, d as createSlackWebClient, f as resolveSlackWebClientOptions, g as parseSlackTarget, h as buildSlackBlocksFallbackText, i as renderMarkdownWithMarkers, l as fetchRemoteMedia, m as validateSlackBlocksArray, o as getDefaultLocalRoots, p as parseSlackBlocksInput, s as loadWebMedia, t as sendMessageSlack, u as readResponseWithLimit } from "./send-B-tsyoRw.js";
37
- import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, t as resolveDefaultSessionStorePath } from "./paths-CdGa1jlU.js";
38
- import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-iBlnbS1d.js";
39
- import { t as emitSessionTranscriptUpdate } from "./transcript-events-BOK6eOU8.js";
40
- import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-BTh3b5vY.js";
41
- import { c as normalizeChannelTargetInput, d as parseReplyDirectives, f as MEDIA_TOKEN_RE, g as initializeGlobalHookRunner, h as getGlobalHookRunner, l as normalizeTargetForProvider, m as parseInlineDirectives$1, o as normalizeReplyPayloadsForDelivery, p as splitMediaFromOutput, s as buildTargetResolverSignature, t as deliverOutboundPayloads, u as throwIfAborted } from "./deliver-B_Fv-dS9.js";
42
- import { a as logMessageProcessed, i as logLaneEnqueue, o as logMessageQueued, r as logLaneDequeue, s as logSessionStateChange, t as diag } from "./diagnostic-oeL366QK.js";
2
+ import { D as shouldLogVerbose, H as createInternalHookEvent, M as getChildLogger, O as warn, R as normalizeLogLevel, W as triggerInternalHook, _ as executePluginCommand, b as danger, c as normalizeAnyChannelId, g as clearPluginCommands, h as createPluginRegistry, l as normalizeChannelId, n as CHAT_CHANNEL_ORDER, p as setActivePluginRegistry, v as listPluginCommands, w as logVerbose, y as matchPluginCommand } from "./registry-DKJLAPDB.js";
3
+ import { g as resolveStateDir, u as resolveGatewayPort } from "./paths-BSzKwaxE.js";
4
+ import { S as isPlainObject, _ as shortenHomeInString, b as sliceUtf16Safe, c as escapeRegExp, h as resolveUserPath, r as clampInt, t as CONFIG_DIR, u as isRecord, v as shortenHomePath, x as truncateUtf16Safe, y as sleep } from "./utils-BU8jVQFM.js";
5
+ import { d as createNonExitingRuntime, f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-CtH6J8AV.js";
6
+ import { A as buildConfiguredAllowlistKeys, At as resolveShellEnvFallbackTimeoutMs, Ct as resolveEnvApiKey, Et as normalizeSecretInput, F as modelKey, H as resolveDefaultModelForAgent, Ht as DEFAULT_MODEL, I as normalizeModelRef$1, K as resolveSubagentSpawnModelSelection, L as normalizeProviderId, M as findNormalizedProviderValue, Ot as getShellPathFromLoginShell, T as resolveSymiAgentDir, Ut as DEFAULT_PROVIDER, V as resolveConfiguredModelRef, Vt as DEFAULT_CONTEXT_TOKENS, W as resolveModelRefFromString, Wt as resolveAuthProfileDisplayLabel, _t as createOllamaStreamFn, a as markAuthProfileFailure, b as ensureAuthProfileStore, bt as requireApiKey, et as normalizeGoogleModelId, g as markAuthProfileGood, gt as OLLAMA_NATIVE_BASE_URL, h as listProfilesForProvider, i as isProfileInCooldown, j as buildModelAliasIndex, k as buildAllowedModelSet, n as resolveAuthProfileOrder, o as markAuthProfileUsed, q as resolveThinkingDefault, r as getSoonestCooldownExpiry, vt as getApiKeyForModel, w as resolveAuthStorePathForDisplay, wt as resolveModelAuthMode, xt as resolveApiKeyForProvider, yt as getCustomProviderApiKey } from "./auth-profiles-BVtpxYtY.js";
7
+ import { t as formatCliCommand } from "./command-format-BvAkTjTI.js";
8
+ import { S as resolveThreadParentSessionKey, _ as isAcpSessionKey, a as classifySessionKeyShape, b as isSubagentSessionKey, c as resolveAgentIdFromSessionKey, g as getSubagentDepth, l as resolveThreadSessionKeys, m as normalizeAccountId, o as normalizeAgentId, p as DEFAULT_ACCOUNT_ID, r as buildAgentMainSessionKey, s as normalizeMainKey, t as DEFAULT_AGENT_ID, u as sanitizeAgentId, x as parseAgentSessionKey, y as isCronSessionKey } from "./session-key-B_ZVH1kE.js";
9
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-0MUhiNlM.js";
10
+ import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-DKyLtSjm.js";
11
+ import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentConfig, s as resolveAgentSkillsFilter, w as filterBootstrapFilesForSession } from "./agent-scope-BjEBQhs0.js";
12
+ import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-BTNK6Tcd.js";
13
+ import { t as parseBooleanValue } from "./boolean-Wzu0-e0P.js";
14
+ import { t as isTruthyEnvValue } from "./env-B97Ms861.js";
15
+ import { A as isRawApiErrorPayload, B as sanitizeGoogleTurnOrdering, C as isCloudCodeAssistFormatError, D as isFailoverErrorMessage, E as isFailoverAssistantError, F as sanitizeUserFacingText, I as buildBootstrapContextFiles, L as ensureSessionHeader, M as isTransientHttpError, N as parseImageDimensionError, O as isLikelyContextOverflowError, P as parseImageSizeError, R as resolveBootstrapMaxChars, S as isBillingAssistantError, T as isContextOverflowError, _ as formatAssistantErrorText, a as normalizeTextForComparison, b as getApiErrorPayloadFingerprint, c as sanitizeToolResultImages, d as extractToolResultId, f as downgradeOpenAIReasoningBlocks, g as classifyFailoverReason, h as BILLING_ERROR_USER_MESSAGE, i as isMessagingToolDuplicateNormalized, j as isTimeoutErrorMessage, k as isRateLimitAssistantError, l as resolveImageSanitizationLimits, m as isGoogleModelApi, n as validateGeminiTurns, o as sanitizeSessionMessagesImages, p as isAntigravityClaude, r as pickFallbackThinkingLevel, s as sanitizeImageBlocks, t as validateAnthropicTurns, u as extractToolCallsFromAssistant, v as formatBillingErrorMessage, w as isCompactionFailureError, x as isAuthAssistantError, y as formatRawAssistantErrorForUi, z as resolveBootstrapTotalMaxChars } from "./pi-embedded-helpers-Be-EeyzH.js";
16
+ import { A as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, C as unsetConfigValueAtPath, N as VERSION, S as setConfigValueAtPath, _ as resetConfigOverrides, b as getConfigValueAtPath, c as resolveConfigSnapshotHash, g as getConfigOverrides, h as validateJsonSchemaValue, i as loadConfig, l as writeConfigFile, m as parseDurationMs, o as readConfigFileSnapshot, u as validateConfigObjectWithPlugins, v as setConfigOverride, x as parseConfigPath, y as unsetConfigOverride } from "./config-CW8aDVM0.js";
17
+ import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-D7Qup2Vq.js";
18
+ import { a as isPathInsideWithRealpath } from "./legacy-names-C0hZiM-7.js";
19
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-DGG12SGo.js";
20
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-NUKborg3.js";
21
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-BNbx1tUD.js";
22
+ import { l as parseFrontmatterBlock } from "./frontmatter-B6IdJ7UK.js";
23
+ 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-C_KgxpBD.js";
24
+ import { n as getMediaDir, r as saveMediaBuffer } from "./routes-xZZ99jJJ.js";
25
+ import { n as formatErrorMessage, r as formatUncaughtError, t as extractErrorCode } from "./errors-Z-WkF18Q.js";
26
+ import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-DaQrPPet.js";
27
+ import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CC9kEPCT.js";
28
+ import { _ as mediaKindFromMime, c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, h as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, m as normalizeMimeType$1, p as kindFromMime, s as resizeToJpeg, u as getFileExtension } from "./image-ops-c7_of0HT.js";
29
+ import { C as capArrayByJsonBytes, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields } from "./sessions-BaFVKzC2.js";
30
+ import { c as normalizeStringEntries, i as resolveChannelGroupRequireMention, l as normalizeStringEntriesLower, n as listChannelDocks, o as normalizeAtHashSlug, r as resolveChannelGroupPolicy, s as normalizeHyphenSlug, t as getChannelDock } from "./dock-CnGWTXL4.js";
31
+ import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, h as GATEWAY_CLIENT_NAMES, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-C_V8IAYx.js";
32
+ import { t as normalizeChatType } from "./chat-type-B7XD_ESN.js";
33
+ import { n as resolveConversationLabel } from "./conversation-label-CS5Zjc4w.js";
34
+ import { a as resolveSlackAccount, c as resolveSlackBotToken, n as listChannelPlugins, r as normalizeChannelId$1, s as resolveSlackAppToken, t as getChannelPlugin } from "./plugins-DuuHorqi.js";
35
+ import { _ as resolveSlackChannelId, a as markdownToIRWithMeta, c as MediaFetchError, d as createSlackWebClient, f as resolveSlackWebClientOptions, g as parseSlackTarget, h as buildSlackBlocksFallbackText, i as renderMarkdownWithMarkers, l as fetchRemoteMedia, m as validateSlackBlocksArray, o as getDefaultLocalRoots, p as parseSlackBlocksInput, s as loadWebMedia, t as sendMessageSlack, u as readResponseWithLimit } from "./send-BzUWmgQ9.js";
36
+ import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, t as resolveDefaultSessionStorePath } from "./paths-CJcw9nbZ.js";
37
+ import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-DsLesw6T.js";
38
+ import { t as emitSessionTranscriptUpdate } from "./transcript-events-Ch7wLX-j.js";
39
+ import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-177f26eg.js";
40
+ import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-DvvjOTxN.js";
41
+ import { c as normalizeChannelTargetInput, d as parseReplyDirectives, f as MEDIA_TOKEN_RE, g as initializeGlobalHookRunner, h as getGlobalHookRunner, l as normalizeTargetForProvider, m as parseInlineDirectives$1, o as normalizeReplyPayloadsForDelivery, p as splitMediaFromOutput, s as buildTargetResolverSignature, t as deliverOutboundPayloads, u as throwIfAborted } from "./deliver-DZ7ynJYH.js";
42
+ import { a as logMessageProcessed, i as logLaneEnqueue, o as logMessageQueued, r as logLaneDequeue, s as logSessionStateChange, t as diag } from "./diagnostic-CwF3MnBL.js";
43
43
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-I4x9gPY4.js";
44
- import { t as ensureSymiModelsJson } from "./models-config-BCa11tVc.js";
45
- import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-DhbhmAvs.js";
46
- import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o as derivePromptTokens, r as loadSessionCostSummary } from "./session-cost-usage-DQjHUno0.js";
47
- import { C as enqueueSystemEvent, E as buildChannelSummary, S as drainSystemEventEntries, _ as loadProviderUsageSummary, a as loadCombinedSessionStoreForGateway, b as resolveUsageProviderId, d as formatDoctorNonInteractiveHint, g as writeRestartSentinel, k as redactIdentifier, x as lookupContextTokens, y as formatUsageWindowSummary } from "./session-utils-C6O0Db39.js";
48
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-Bxn0qVBQ.js";
49
- import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-ClUrRCRd.js";
50
- import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-ofHIUCzf.js";
51
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-CS1vxold.js";
52
- import { f as runTasksWithConcurrency } from "./internal-CBKiu8Jv.js";
53
- import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-CKgSHf7u.js";
54
- import { n as resolveMarkdownTableMode } from "./markdown-tables-jlJYpF1X.js";
44
+ import { t as ensureSymiModelsJson } from "./models-config-DRgHv7Ss.js";
45
+ import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-DGZH6URT.js";
46
+ import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o as derivePromptTokens, r as loadSessionCostSummary } from "./session-cost-usage-DYcv40ss.js";
47
+ import { C as enqueueSystemEvent, E as buildChannelSummary, S as drainSystemEventEntries, _ as loadProviderUsageSummary, a as loadCombinedSessionStoreForGateway, b as resolveUsageProviderId, d as formatDoctorNonInteractiveHint, g as writeRestartSentinel, k as redactIdentifier, x as lookupContextTokens, y as formatUsageWindowSummary } from "./session-utils-BVC8mmBv.js";
48
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-DwVWQ2sN.js";
49
+ import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CyLplifX.js";
50
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-DcWXMzOH.js";
51
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-9dNT9kNF.js";
52
+ import { f as runTasksWithConcurrency } from "./internal-C3o_xyzP.js";
53
+ import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-DQGU0F8t.js";
54
+ import { n as resolveMarkdownTableMode } from "./markdown-tables-GTLvbzuR.js";
55
55
  import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-CgmRK282.js";
56
- import { t as fetchWithSsrFGuard } from "./fetch-guard-BWofyagX.js";
57
- import { n as getDefaultMediaLocalRoots } from "./local-roots-C0G03E-R.js";
58
- import { i as resolveNativeSkillsEnabled, n as isRestartEnabled, r as resolveNativeCommandsEnabled, t as isCommandFlagEnabled } from "./commands-sNCgvbpu.js";
59
- import { a as shouldHandleTextCommands, i as normalizeCommandBody, n as listChatCommands, r as listChatCommandsForConfig } from "./commands-registry-DXK4Ortm.js";
60
- import { Rt as SESSION_LABEL_MAX_LENGTH } from "./client-D8iTVY4F.js";
61
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-DLBaLOHo.js";
62
- import { n as resolveToolDisplay, t as formatToolDetail } from "./tool-display-D1Hh5TqL.js";
56
+ import { t as fetchWithSsrFGuard } from "./fetch-guard-DG6T0ZdL.js";
57
+ import { n as getDefaultMediaLocalRoots } from "./local-roots-CTriU02e.js";
58
+ import { i as resolveNativeSkillsEnabled, n as isRestartEnabled, r as resolveNativeCommandsEnabled, t as isCommandFlagEnabled } from "./commands-B3UrgxIz.js";
59
+ import { a as shouldHandleTextCommands, i as normalizeCommandBody, n as listChatCommands, r as listChatCommandsForConfig } from "./commands-registry-DYk02tmt.js";
60
+ import { Rt as SESSION_LABEL_MAX_LENGTH } from "./client-Bs2zB0rY.js";
61
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-CdXXPXpo.js";
62
+ import { n as resolveToolDisplay, t as formatToolDetail } from "./tool-display-Dr6VaTg5.js";
63
63
  import { n as formatTimeAgo } from "./format-relative-Vm-Tqk0h.js";
64
- import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CICDRKxY.js";
65
- import { g as getSkillsSnapshotVersion, h as ensureSkillsWatcher, t as getRemoteSkillEligibility } from "./skills-remote-Ch1B-1aN.js";
64
+ import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-DqAyGDbE.js";
65
+ import { g as getSkillsSnapshotVersion, h as ensureSkillsWatcher, t as getRemoteSkillEligibility } from "./skills-remote-C0gcKYWX.js";
66
66
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DdkUSfiI.js";
67
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-D8YRs6r8.js";
68
- import { i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames } from "./skill-commands-4afIEM1a.js";
69
- import { a as removeChannelAllowFromStoreEntry, c as listPairingChannels, i as readChannelAllowFromStore, o as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-DmCi9E47.js";
70
- import { _ as getTrustedSafeBinDirs, b as buildSafeShellCommand, d as resolveExecApprovals, f as resolveExecApprovalsFromFile, g as resolveSafeBins, h as evaluateShellAllowlist, i as maxAsk, l as recordAllowlistUse, n as addAllowlistEntry, o as minSecurity, u as requiresExecApproval, y as buildSafeBinsShellCommand } from "./exec-approvals-BWtVKlN2.js";
71
- 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-B_D8bZhT.js";
67
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-BGVslwAT.js";
68
+ import { i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames } from "./skill-commands-X3T9Y9lT.js";
69
+ import { a as removeChannelAllowFromStoreEntry, c as listPairingChannels, i as readChannelAllowFromStore, o as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-CxT0UGxd.js";
70
+ import { _ as getTrustedSafeBinDirs, b as buildSafeShellCommand, d as resolveExecApprovals, f as resolveExecApprovalsFromFile, g as resolveSafeBins, h as evaluateShellAllowlist, i as maxAsk, l as recordAllowlistUse, n as addAllowlistEntry, o as minSecurity, u as requiresExecApproval, y as buildSafeBinsShellCommand } from "./exec-approvals-CZOc8M5w.js";
71
+ 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-CT94yu_w.js";
72
72
  import { n as parseNodeList, r as parsePairingList, t as resolveNodeIdFromCandidates } from "./node-match-dNgkVIEe.js";
73
73
  import { t as formatDurationCompact$1 } from "./format-duration-DbZRICyO.js";
74
74
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-2_Os41y-.js";
75
75
  import { i as resolveModelCostConfig, n as formatTokenCount$2, r as formatUsd, t as estimateUsageCost } from "./usage-format-Ca9K30TH.js";
76
76
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-DsZw7bas.js";
77
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-BDMq-0pg.js";
77
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-Drd2sr2o.js";
78
78
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BhvnarfO.js";
79
- import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-BGtIUbFL.js";
80
- import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-C0EHjIMD.js";
79
+ import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-BvIcXQLj.js";
80
+ import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-xpyI3enn.js";
81
81
  import { t as parseTimeoutMs } from "./parse-timeout-CpgyC-LD.js";
82
- import { n as registerMemoryCli } from "./memory-cli-LXH0BNmI.js";
83
- import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-BUaT9S6J.js";
84
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-DrRZdkk0.js";
85
- import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-BBL3doiY.js";
82
+ import { n as registerMemoryCli } from "./memory-cli-xBZPEOeL.js";
83
+ import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-Dqft-42v.js";
84
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-qwS9SXOa.js";
85
+ import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-BXWgh5eZ.js";
86
86
  import { createRequire } from "node:module";
87
87
  import process$1 from "node:process";
88
88
  import { fileURLToPath } from "node:url";
89
89
  import crypto, { createHash, createHmac, randomBytes, randomUUID } from "node:crypto";
90
+ import path from "node:path";
90
91
  import fs, { constants, existsSync, statSync } from "node:fs";
91
92
  import os, { homedir } from "node:os";
92
- import path from "node:path";
93
93
  import JSON5 from "json5";
94
- import fs$1 from "node:fs/promises";
94
+ import fsPromises from "node:fs/promises";
95
95
  import { execFileSync, spawn, spawnSync } from "node:child_process";
96
96
  import { complete, createAssistantMessageEventStream, streamSimple } from "@mariozechner/pi-ai";
97
97
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
@@ -101,97 +101,6 @@ import { Type } from "@sinclair/typebox";
101
101
  import { EventEmitter } from "node:events";
102
102
  import SlackBolt from "@slack/bolt";
103
103
 
104
- //#region src/auto-reply/heartbeat.ts
105
- const DEFAULT_HEARTBEAT_ACK_MAX_CHARS = 300;
106
- function stripTokenAtEdges(raw) {
107
- let text = raw.trim();
108
- if (!text) return {
109
- text: "",
110
- didStrip: false
111
- };
112
- const token = SYMIPULSE_TOKEN;
113
- const tokenAtEndWithOptionalTrailingPunctuation = new RegExp(`${escapeRegExp(token)}[^\\w]{0,4}$`);
114
- if (!text.includes(token)) return {
115
- text,
116
- didStrip: false
117
- };
118
- let didStrip = false;
119
- let changed = true;
120
- while (changed) {
121
- changed = false;
122
- const next = text.trim();
123
- if (next.startsWith(token)) {
124
- text = next.slice(token.length).trimStart();
125
- didStrip = true;
126
- changed = true;
127
- continue;
128
- }
129
- if (tokenAtEndWithOptionalTrailingPunctuation.test(next)) {
130
- const idx = next.lastIndexOf(token);
131
- const before = next.slice(0, idx).trimEnd();
132
- if (!before) text = "";
133
- else text = `${before}${next.slice(idx + token.length).trimStart()}`.trimEnd();
134
- didStrip = true;
135
- changed = true;
136
- }
137
- }
138
- return {
139
- text: text.replace(/\s+/g, " ").trim(),
140
- didStrip
141
- };
142
- }
143
- function stripHeartbeatToken(raw, opts = {}) {
144
- if (!raw) return {
145
- shouldSkip: true,
146
- text: "",
147
- didStrip: false
148
- };
149
- const trimmed = raw.trim();
150
- if (!trimmed) return {
151
- shouldSkip: true,
152
- text: "",
153
- didStrip: false
154
- };
155
- const mode = opts.mode ?? "message";
156
- const maxAckCharsRaw = opts.maxAckChars;
157
- const parsedAckChars = typeof maxAckCharsRaw === "string" ? Number(maxAckCharsRaw) : maxAckCharsRaw;
158
- const maxAckChars = Math.max(0, typeof parsedAckChars === "number" && Number.isFinite(parsedAckChars) ? parsedAckChars : DEFAULT_HEARTBEAT_ACK_MAX_CHARS);
159
- const stripMarkup = (text) => text.replace(/<[^>]*>/g, " ").replace(/&nbsp;/gi, " ").replace(/^[*`~_]+/, "").replace(/[*`~_]+$/, "");
160
- const trimmedNormalized = stripMarkup(trimmed);
161
- if (!(trimmed.includes(SYMIPULSE_TOKEN) || trimmedNormalized.includes(SYMIPULSE_TOKEN))) return {
162
- shouldSkip: false,
163
- text: trimmed,
164
- didStrip: false
165
- };
166
- const strippedOriginal = stripTokenAtEdges(trimmed);
167
- const strippedNormalized = stripTokenAtEdges(trimmedNormalized);
168
- const picked = strippedOriginal.didStrip && strippedOriginal.text ? strippedOriginal : strippedNormalized;
169
- if (!picked.didStrip) return {
170
- shouldSkip: false,
171
- text: trimmed,
172
- didStrip: false
173
- };
174
- if (!picked.text) return {
175
- shouldSkip: true,
176
- text: "",
177
- didStrip: true
178
- };
179
- const rest = picked.text.trim();
180
- if (mode === "heartbeat") {
181
- if (rest.length <= maxAckChars) return {
182
- shouldSkip: true,
183
- text: "",
184
- didStrip: true
185
- };
186
- }
187
- return {
188
- shouldSkip: false,
189
- text: rest,
190
- didStrip: true
191
- };
192
- }
193
-
194
- //#endregion
195
104
  //#region src/auto-reply/reply/middleware-circuit-breaker.ts
196
105
  /**
197
106
  * Default recovery prompt — tells the model the previous turn aborted on
@@ -1165,34 +1074,13 @@ function isBareSymipulseAck(text) {
1165
1074
  * Returns a structured verdict the caller uses to decide whether to
1166
1075
  * broadcast / persist a payload. Pure function — no side effects.
1167
1076
  */
1168
- function classifyOutboundMessage(rawText, opts) {
1077
+ function classifyOutboundMessage(rawText, _opts) {
1169
1078
  const text = typeof rawText === "string" ? rawText : "";
1170
1079
  if (isBareSilentReply(text)) return {
1171
1080
  action: "drop",
1172
1081
  output: "",
1173
1082
  reason: "silent-reply-bare"
1174
1083
  };
1175
- if (opts.isHeartbeat) {
1176
- const stripped = stripHeartbeatToken(text, {
1177
- mode: "heartbeat",
1178
- maxAckChars: opts.heartbeatAckMaxChars
1179
- });
1180
- if (stripped.shouldSkip) return {
1181
- action: "drop",
1182
- output: "",
1183
- reason: stripped.didStrip ? "symipulse-heartbeat-ack" : "silent-reply-bare"
1184
- };
1185
- if (stripped.didStrip) return {
1186
- action: "deliver-stripped",
1187
- output: stripped.text,
1188
- reason: "symipulse-heartbeat-stripped"
1189
- };
1190
- return {
1191
- action: "deliver",
1192
- output: text,
1193
- reason: "deliver"
1194
- };
1195
- }
1196
1084
  if (isBareSymipulseAck(text)) return {
1197
1085
  action: "drop",
1198
1086
  output: "",
@@ -1205,48 +1093,6 @@ function classifyOutboundMessage(rawText, opts) {
1205
1093
  };
1206
1094
  }
1207
1095
 
1208
- //#endregion
1209
- //#region src/infra/agent-events.ts
1210
- const seqByRun = /* @__PURE__ */ new Map();
1211
- const listeners = /* @__PURE__ */ new Set();
1212
- const runContextById = /* @__PURE__ */ new Map();
1213
- function registerAgentRunContext(runId, context) {
1214
- if (!runId) return;
1215
- const existing = runContextById.get(runId);
1216
- if (!existing) {
1217
- runContextById.set(runId, { ...context });
1218
- return;
1219
- }
1220
- if (context.sessionKey && existing.sessionKey !== context.sessionKey) existing.sessionKey = context.sessionKey;
1221
- if (context.verboseLevel && existing.verboseLevel !== context.verboseLevel) existing.verboseLevel = context.verboseLevel;
1222
- if (context.isHeartbeat !== void 0 && existing.isHeartbeat !== context.isHeartbeat) existing.isHeartbeat = context.isHeartbeat;
1223
- }
1224
- function getAgentRunContext(runId) {
1225
- return runContextById.get(runId);
1226
- }
1227
- function clearAgentRunContext(runId) {
1228
- runContextById.delete(runId);
1229
- }
1230
- function emitAgentEvent(event) {
1231
- const nextSeq = (seqByRun.get(event.runId) ?? 0) + 1;
1232
- seqByRun.set(event.runId, nextSeq);
1233
- const context = runContextById.get(event.runId);
1234
- const sessionKey = typeof event.sessionKey === "string" && event.sessionKey.trim() ? event.sessionKey : context?.sessionKey;
1235
- const enriched = {
1236
- ...event,
1237
- sessionKey,
1238
- seq: nextSeq,
1239
- ts: Date.now()
1240
- };
1241
- for (const listener of listeners) try {
1242
- listener(enriched);
1243
- } catch {}
1244
- }
1245
- function onAgentEvent(listener) {
1246
- listeners.add(listener);
1247
- return () => listeners.delete(listener);
1248
- }
1249
-
1250
1096
  //#endregion
1251
1097
  //#region src/process/lanes.ts
1252
1098
  let CommandLane = /* @__PURE__ */ function(CommandLane) {
@@ -2006,7 +1852,7 @@ async function imageResult(params) {
2006
1852
  }, params.label, params.imageSanitization);
2007
1853
  }
2008
1854
  async function imageResultFromFile(params) {
2009
- const buf = await fs$1.readFile(params.path);
1855
+ const buf = await fsPromises.readFile(params.path);
2010
1856
  const mimeType = await detectMime({ buffer: buf.slice(0, 256) }) ?? "image/png";
2011
1857
  return await imageResult({
2012
1858
  label: params.label,
@@ -5085,7 +4931,7 @@ async function recordLoopOutcome(args) {
5085
4931
  if (!args.ctx?.sessionKey) return;
5086
4932
  try {
5087
4933
  const { getDiagnosticSessionState } = await import("./diagnostic-session-state-I4x9gPY4.js").then((n) => n.n);
5088
- const { recordToolCallOutcome } = await import("./tool-loop-detection-BxrJfVQU.js");
4934
+ const { recordToolCallOutcome } = await import("./tool-loop-detection-CSSq5kkt.js");
5089
4935
  recordToolCallOutcome(getDiagnosticSessionState({
5090
4936
  sessionKey: args.ctx.sessionKey,
5091
4937
  sessionId: args.ctx?.agentId
@@ -5106,8 +4952,8 @@ async function runBeforeToolCallHook(args) {
5106
4952
  const params = args.params;
5107
4953
  if (args.ctx?.sessionKey) {
5108
4954
  const { getDiagnosticSessionState } = await import("./diagnostic-session-state-I4x9gPY4.js").then((n) => n.n);
5109
- const { logToolLoopAction } = await import("./diagnostic-oeL366QK.js").then((n) => n.n);
5110
- const { detectToolCallLoop, recordToolCall } = await import("./tool-loop-detection-BxrJfVQU.js");
4955
+ const { logToolLoopAction } = await import("./diagnostic-CwF3MnBL.js").then((n) => n.n);
4956
+ const { detectToolCallLoop, recordToolCall } = await import("./tool-loop-detection-CSSq5kkt.js");
5111
4957
  const sessionState = getDiagnosticSessionState({
5112
4958
  sessionKey: args.ctx.sessionKey,
5113
4959
  sessionId: args.ctx?.agentId
@@ -5388,6 +5234,47 @@ function splitSdkTools(options) {
5388
5234
  };
5389
5235
  }
5390
5236
 
5237
+ //#endregion
5238
+ //#region src/infra/agent-events.ts
5239
+ const seqByRun = /* @__PURE__ */ new Map();
5240
+ const listeners = /* @__PURE__ */ new Set();
5241
+ const runContextById = /* @__PURE__ */ new Map();
5242
+ function registerAgentRunContext(runId, context) {
5243
+ if (!runId) return;
5244
+ const existing = runContextById.get(runId);
5245
+ if (!existing) {
5246
+ runContextById.set(runId, { ...context });
5247
+ return;
5248
+ }
5249
+ if (context.sessionKey && existing.sessionKey !== context.sessionKey) existing.sessionKey = context.sessionKey;
5250
+ if (context.verboseLevel && existing.verboseLevel !== context.verboseLevel) existing.verboseLevel = context.verboseLevel;
5251
+ }
5252
+ function getAgentRunContext(runId) {
5253
+ return runContextById.get(runId);
5254
+ }
5255
+ function clearAgentRunContext(runId) {
5256
+ runContextById.delete(runId);
5257
+ }
5258
+ function emitAgentEvent(event) {
5259
+ const nextSeq = (seqByRun.get(event.runId) ?? 0) + 1;
5260
+ seqByRun.set(event.runId, nextSeq);
5261
+ const context = runContextById.get(event.runId);
5262
+ const sessionKey = typeof event.sessionKey === "string" && event.sessionKey.trim() ? event.sessionKey : context?.sessionKey;
5263
+ const enriched = {
5264
+ ...event,
5265
+ sessionKey,
5266
+ seq: nextSeq,
5267
+ ts: Date.now()
5268
+ };
5269
+ for (const listener of listeners) try {
5270
+ listener(enriched);
5271
+ } catch {}
5272
+ }
5273
+ function onAgentEvent(listener) {
5274
+ listeners.add(listener);
5275
+ return () => listeners.delete(listener);
5276
+ }
5277
+
5391
5278
  //#endregion
5392
5279
  //#region src/utils/queue-helpers.ts
5393
5280
  function clearQueueSummaryState(state) {
@@ -5843,6 +5730,97 @@ function clearSessionQueues(keys) {
5843
5730
  };
5844
5731
  }
5845
5732
 
5733
+ //#endregion
5734
+ //#region src/auto-reply/heartbeat.ts
5735
+ const DEFAULT_HEARTBEAT_ACK_MAX_CHARS = 300;
5736
+ function stripTokenAtEdges(raw) {
5737
+ let text = raw.trim();
5738
+ if (!text) return {
5739
+ text: "",
5740
+ didStrip: false
5741
+ };
5742
+ const token = SYMIPULSE_TOKEN;
5743
+ const tokenAtEndWithOptionalTrailingPunctuation = new RegExp(`${escapeRegExp(token)}[^\\w]{0,4}$`);
5744
+ if (!text.includes(token)) return {
5745
+ text,
5746
+ didStrip: false
5747
+ };
5748
+ let didStrip = false;
5749
+ let changed = true;
5750
+ while (changed) {
5751
+ changed = false;
5752
+ const next = text.trim();
5753
+ if (next.startsWith(token)) {
5754
+ text = next.slice(token.length).trimStart();
5755
+ didStrip = true;
5756
+ changed = true;
5757
+ continue;
5758
+ }
5759
+ if (tokenAtEndWithOptionalTrailingPunctuation.test(next)) {
5760
+ const idx = next.lastIndexOf(token);
5761
+ const before = next.slice(0, idx).trimEnd();
5762
+ if (!before) text = "";
5763
+ else text = `${before}${next.slice(idx + token.length).trimStart()}`.trimEnd();
5764
+ didStrip = true;
5765
+ changed = true;
5766
+ }
5767
+ }
5768
+ return {
5769
+ text: text.replace(/\s+/g, " ").trim(),
5770
+ didStrip
5771
+ };
5772
+ }
5773
+ function stripHeartbeatToken(raw, opts = {}) {
5774
+ if (!raw) return {
5775
+ shouldSkip: true,
5776
+ text: "",
5777
+ didStrip: false
5778
+ };
5779
+ const trimmed = raw.trim();
5780
+ if (!trimmed) return {
5781
+ shouldSkip: true,
5782
+ text: "",
5783
+ didStrip: false
5784
+ };
5785
+ const mode = opts.mode ?? "message";
5786
+ const maxAckCharsRaw = opts.maxAckChars;
5787
+ const parsedAckChars = typeof maxAckCharsRaw === "string" ? Number(maxAckCharsRaw) : maxAckCharsRaw;
5788
+ const maxAckChars = Math.max(0, typeof parsedAckChars === "number" && Number.isFinite(parsedAckChars) ? parsedAckChars : DEFAULT_HEARTBEAT_ACK_MAX_CHARS);
5789
+ const stripMarkup = (text) => text.replace(/<[^>]*>/g, " ").replace(/&nbsp;/gi, " ").replace(/^[*`~_]+/, "").replace(/[*`~_]+$/, "");
5790
+ const trimmedNormalized = stripMarkup(trimmed);
5791
+ if (!(trimmed.includes(SYMIPULSE_TOKEN) || trimmedNormalized.includes(SYMIPULSE_TOKEN))) return {
5792
+ shouldSkip: false,
5793
+ text: trimmed,
5794
+ didStrip: false
5795
+ };
5796
+ const strippedOriginal = stripTokenAtEdges(trimmed);
5797
+ const strippedNormalized = stripTokenAtEdges(trimmedNormalized);
5798
+ const picked = strippedOriginal.didStrip && strippedOriginal.text ? strippedOriginal : strippedNormalized;
5799
+ if (!picked.didStrip) return {
5800
+ shouldSkip: false,
5801
+ text: trimmed,
5802
+ didStrip: false
5803
+ };
5804
+ if (!picked.text) return {
5805
+ shouldSkip: true,
5806
+ text: "",
5807
+ didStrip: true
5808
+ };
5809
+ const rest = picked.text.trim();
5810
+ if (mode === "heartbeat") {
5811
+ if (rest.length <= maxAckChars) return {
5812
+ shouldSkip: true,
5813
+ text: "",
5814
+ didStrip: true
5815
+ };
5816
+ }
5817
+ return {
5818
+ shouldSkip: false,
5819
+ text: rest,
5820
+ didStrip: true
5821
+ };
5822
+ }
5823
+
5846
5824
  //#endregion
5847
5825
  //#region src/auto-reply/reply/normalize-reply.ts
5848
5826
  function normalizeReplyPayload(payload, opts = {}) {
@@ -5939,7 +5917,7 @@ async function routeReply(params) {
5939
5917
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
5940
5918
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
5941
5919
  try {
5942
- const { deliverOutboundPayloads } = await import("./deliver-B_Fv-dS9.js").then((n) => n.n);
5920
+ const { deliverOutboundPayloads } = await import("./deliver-DZ7ynJYH.js").then((n) => n.n);
5943
5921
  return {
5944
5922
  ok: true,
5945
5923
  messageId: (await deliverOutboundPayloads({
@@ -10060,8 +10038,7 @@ async function incrementCompactionCount(params) {
10060
10038
  //#endregion
10061
10039
  //#region src/auto-reply/reply/typing-mode.ts
10062
10040
  const DEFAULT_GROUP_TYPING_MODE = "message";
10063
- function resolveTypingMode({ configured, isGroupChat, wasMentioned, isHeartbeat }) {
10064
- if (isHeartbeat) return "never";
10041
+ function resolveTypingMode({ configured, isGroupChat, wasMentioned }) {
10065
10042
  if (configured) return configured;
10066
10043
  if (!isGroupChat || wasMentioned) return "instant";
10067
10044
  return DEFAULT_GROUP_TYPING_MODE;
@@ -10095,12 +10072,11 @@ async function prepareAgentRun(params) {
10095
10072
  const isFirstTurnInSession = isNewSession || !currentSystemSent;
10096
10073
  const isGroupChat = sessionCtx.ChatType === "group";
10097
10074
  const wasMentioned = ctx.WasMentioned === true;
10098
- const isHeartbeat = opts?.isHeartbeat === true;
10099
10075
  const typingMode = resolveTypingMode({
10100
10076
  configured: sessionCfg?.typingMode ?? agentCfg?.typingMode,
10101
10077
  isGroupChat,
10102
10078
  wasMentioned,
10103
- isHeartbeat
10079
+ isHeartbeat: false
10104
10080
  });
10105
10081
  const shouldInjectGroupIntro = Boolean(isGroupChat && (isFirstTurnInSession || sessionEntry?.groupActivationNeedsSystemIntro));
10106
10082
  const groupChatContext = isGroupChat ? buildGroupChatContext({ sessionCtx }) : "";
@@ -11786,7 +11762,7 @@ var MediaAttachmentCache = class {
11786
11762
  const size = await this.ensureLocalStat(entry);
11787
11763
  if (entry.resolvedPath) {
11788
11764
  if (size !== void 0 && size > params.maxBytes) throw new MediaUnderstandingSkipError("maxBytes", `Attachment ${params.attachmentIndex + 1} exceeds maxBytes ${params.maxBytes}`);
11789
- const buffer = await fs$1.readFile(entry.resolvedPath);
11765
+ const buffer = await fsPromises.readFile(entry.resolvedPath);
11790
11766
  entry.buffer = buffer;
11791
11767
  entry.bufferMime = entry.bufferMime ?? entry.attachment.mime ?? await detectMime({
11792
11768
  buffer,
@@ -11856,10 +11832,10 @@ var MediaAttachmentCache = class {
11856
11832
  prefix: "symi-media",
11857
11833
  extension: path.extname(bufferResult.fileName || "") || ""
11858
11834
  });
11859
- await fs$1.writeFile(tmpPath, bufferResult.buffer);
11835
+ await fsPromises.writeFile(tmpPath, bufferResult.buffer);
11860
11836
  entry.tempPath = tmpPath;
11861
11837
  entry.tempCleanup = async () => {
11862
- await fs$1.unlink(tmpPath).catch(() => {});
11838
+ await fsPromises.unlink(tmpPath).catch(() => {});
11863
11839
  };
11864
11840
  return {
11865
11841
  path: tmpPath,
@@ -11906,12 +11882,12 @@ var MediaAttachmentCache = class {
11906
11882
  if (entry.statSize !== void 0) return entry.statSize;
11907
11883
  try {
11908
11884
  const currentPath = entry.resolvedPath;
11909
- const stat = await fs$1.stat(currentPath);
11885
+ const stat = await fsPromises.stat(currentPath);
11910
11886
  if (!stat.isFile()) {
11911
11887
  entry.resolvedPath = void 0;
11912
11888
  return;
11913
11889
  }
11914
- const canonicalPath = await fs$1.realpath(currentPath).catch(() => currentPath);
11890
+ const canonicalPath = await fsPromises.realpath(currentPath).catch(() => currentPath);
11915
11891
  if (!isInboundPathAllowed({
11916
11892
  filePath: canonicalPath,
11917
11893
  roots: await this.getCanonicalLocalPathRoots()
@@ -11933,7 +11909,7 @@ var MediaAttachmentCache = class {
11933
11909
  if (this.canonicalLocalPathRoots) return await this.canonicalLocalPathRoots;
11934
11910
  this.canonicalLocalPathRoots = (async () => mergeInboundPathRoots(this.localPathRoots, await Promise.all(this.localPathRoots.map(async (root) => {
11935
11911
  if (root.includes("*")) return root;
11936
- return await fs$1.realpath(root).catch(() => root);
11912
+ return await fsPromises.realpath(root).catch(() => root);
11937
11913
  }))))();
11938
11914
  return await this.canonicalLocalPathRoots;
11939
11915
  }
@@ -12004,7 +11980,7 @@ function formatAudioTranscripts(outputs) {
12004
11980
  async function fileExists(filePath) {
12005
11981
  if (!filePath) return false;
12006
11982
  try {
12007
- await fs$1.stat(filePath);
11983
+ await fsPromises.stat(filePath);
12008
11984
  return true;
12009
11985
  } catch {
12010
11986
  return false;
@@ -12104,7 +12080,7 @@ async function resolveCliOutput(params) {
12104
12080
  const commandId = commandBase(params.command);
12105
12081
  const fileOutput = commandId === "whisper-cli" ? resolveWhisperCppOutputPath(params.args) : commandId === "whisper" ? resolveWhisperOutputPath(params.args, params.mediaPath) : null;
12106
12082
  if (fileOutput && await fileExists(fileOutput)) try {
12107
- const content = await fs$1.readFile(fileOutput, "utf8");
12083
+ const content = await fsPromises.readFile(fileOutput, "utf8");
12108
12084
  if (content.trim()) return content.trim();
12109
12085
  } catch {}
12110
12086
  if (commandId === "gemini") {
@@ -12395,7 +12371,7 @@ async function runCliEntry(params) {
12395
12371
  maxBytes,
12396
12372
  timeoutMs
12397
12373
  });
12398
- const outputDir = await fs$1.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12374
+ const outputDir = await fsPromises.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12399
12375
  const mediaPath = pathResult.path;
12400
12376
  const outputBase = path.join(outputDir, path.parse(mediaPath).name);
12401
12377
  const templCtx = {
@@ -12429,7 +12405,7 @@ async function runCliEntry(params) {
12429
12405
  model: command
12430
12406
  };
12431
12407
  } finally {
12432
- await fs$1.rm(outputDir, {
12408
+ await fsPromises.rm(outputDir, {
12433
12409
  recursive: true,
12434
12410
  force: true
12435
12411
  }).catch(() => {});
@@ -12473,9 +12449,9 @@ function candidateBinaryNames(name) {
12473
12449
  }
12474
12450
  async function isExecutable$1(filePath) {
12475
12451
  try {
12476
- if (!(await fs$1.stat(filePath)).isFile()) return false;
12452
+ if (!(await fsPromises.stat(filePath)).isFile()) return false;
12477
12453
  if (process.platform === "win32") return true;
12478
- await fs$1.access(filePath, constants.X_OK);
12454
+ await fsPromises.access(filePath, constants.X_OK);
12479
12455
  return true;
12480
12456
  } catch {
12481
12457
  return false;
@@ -14170,8 +14146,7 @@ async function createModelSelectionState(params) {
14170
14146
  sessionKey,
14171
14147
  parentSessionKey
14172
14148
  });
14173
- const skipStoredOverride = params.hasResolvedHeartbeatModelOverride === true;
14174
- if (storedOverride?.model && !skipStoredOverride) {
14149
+ if (storedOverride?.model) {
14175
14150
  const candidateProvider = storedOverride.provider || defaultProvider;
14176
14151
  const key = modelKey(candidateProvider, storedOverride.model);
14177
14152
  if (allowedModelKeys.size === 0 || allowedModelKeys.has(key)) {
@@ -14180,7 +14155,7 @@ async function createModelSelectionState(params) {
14180
14155
  }
14181
14156
  }
14182
14157
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
14183
- const { ensureAuthProfileStore } = await import("./auth-profiles-8vSEr9B4.js").then((n) => n.t);
14158
+ const { ensureAuthProfileStore } = await import("./auth-profiles-BVtpxYtY.js").then((n) => n.t);
14184
14159
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
14185
14160
  const providerKey = normalizeProviderId(provider);
14186
14161
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -17324,7 +17299,7 @@ async function resolveSandboxWorkdir(params) {
17324
17299
  cwd: process.cwd(),
17325
17300
  root: params.sandbox.workspaceDir
17326
17301
  });
17327
- if (!(await fs$1.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17302
+ if (!(await fsPromises.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17328
17303
  const relative = resolved.relative ? resolved.relative.split(path.sep).join(path.posix.sep) : "";
17329
17304
  const containerWorkdir = relative ? path.posix.join(params.sandbox.containerWorkdir, relative) : params.sandbox.containerWorkdir;
17330
17305
  return {
@@ -18338,13 +18313,13 @@ async function validateScriptFileForShellBleed(params) {
18338
18313
  cwd: params.workdir,
18339
18314
  root: params.workdir
18340
18315
  });
18341
- stat = await fs$1.stat(absPath);
18316
+ stat = await fsPromises.stat(absPath);
18342
18317
  } catch {
18343
18318
  return;
18344
18319
  }
18345
18320
  if (!stat.isFile()) return;
18346
18321
  if (stat.size > 512 * 1024) return;
18347
- const content = await fs$1.readFile(absPath, "utf-8");
18322
+ const content = await fsPromises.readFile(absPath, "utf-8");
18348
18323
  const first = /\$[A-Z_][A-Z0-9_]{1,}/g.exec(content);
18349
18324
  if (first) {
18350
18325
  const idx = first.index;
@@ -23021,7 +22996,7 @@ async function handleCommands(params) {
23021
22996
  try {
23022
22997
  const messages = [];
23023
22998
  if (sessionFile) {
23024
- const content = await fs$1.readFile(sessionFile, "utf-8");
22999
+ const content = await fsPromises.readFile(sessionFile, "utf-8");
23025
23000
  for (const line of content.split("\n")) {
23026
23001
  if (!line.trim()) continue;
23027
23002
  try {
@@ -23476,7 +23451,7 @@ function resolveExecOverrides(params) {
23476
23451
  };
23477
23452
  }
23478
23453
  async function resolveReplyDirectives(params) {
23479
- const { ctx, cfg, agentId, agentCfg, agentDir, workspaceDir, sessionCtx, sessionEntry, sessionStore, sessionKey, storePath, sessionScope, groupResolution, isGroup, triggerBodyNormalized, commandAuthorized, defaultProvider, defaultModel, provider: initialProvider, model: initialModel, hasResolvedHeartbeatModelOverride, typing, opts, skillFilter } = params;
23454
+ const { ctx, cfg, agentId, agentCfg, agentDir, workspaceDir, sessionCtx, sessionEntry, sessionStore, sessionKey, storePath, sessionScope, groupResolution, isGroup, triggerBodyNormalized, commandAuthorized, defaultProvider, defaultModel, provider: initialProvider, model: initialModel, typing, opts, skillFilter } = params;
23480
23455
  let provider = initialProvider;
23481
23456
  let model = initialModel;
23482
23457
  const commandSource = sessionCtx.BodyForCommands ?? sessionCtx.CommandBody ?? sessionCtx.RawBody ?? sessionCtx.Transcript ?? sessionCtx.BodyStripped ?? sessionCtx.Body ?? ctx.BodyForCommands ?? ctx.CommandBody ?? ctx.RawBody ?? "";
@@ -23617,8 +23592,7 @@ async function resolveReplyDirectives(params) {
23617
23592
  defaultModel,
23618
23593
  provider,
23619
23594
  model,
23620
- hasModelDirective: directives.hasModelDirective,
23621
- hasResolvedHeartbeatModelOverride
23595
+ hasModelDirective: directives.hasModelDirective
23622
23596
  });
23623
23597
  provider = modelState.provider;
23624
23598
  model = modelState.model;
@@ -25209,7 +25183,7 @@ async function readJsonlFromPath(jsonlPath) {
25209
25183
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${resolved}`);
25210
25184
  throw new Error("jsonlPath outside allowed roots");
25211
25185
  }
25212
- const canonical = await fs$1.realpath(resolved).catch(() => resolved);
25186
+ const canonical = await fsPromises.realpath(resolved).catch(() => resolved);
25213
25187
  if (!isInboundPathAllowed({
25214
25188
  filePath: canonical,
25215
25189
  roots
@@ -25217,7 +25191,7 @@ async function readJsonlFromPath(jsonlPath) {
25217
25191
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${canonical}`);
25218
25192
  throw new Error("jsonlPath outside allowed roots");
25219
25193
  }
25220
- return await fs$1.readFile(canonical, "utf8");
25194
+ return await fsPromises.readFile(canonical, "utf8");
25221
25195
  }
25222
25196
  const CanvasToolSchema = Type.Object({
25223
25197
  action: stringEnum(CANVAS_ACTIONS),
@@ -26760,7 +26734,7 @@ async function hydrateAttachmentPayload(params) {
26760
26734
  accountId: params.accountId
26761
26735
  }),
26762
26736
  sandboxValidated: true,
26763
- readFile: (filePath) => fs$1.readFile(filePath)
26737
+ readFile: (filePath) => fsPromises.readFile(filePath)
26764
26738
  });
26765
26739
  params.args.buffer = media.buffer.toString("base64");
26766
26740
  if (!contentTypeParam && media.contentType) params.args.contentType = media.contentType;
@@ -33254,7 +33228,7 @@ async function deliverSessionMaintenanceWarning(params) {
33254
33228
  return;
33255
33229
  }
33256
33230
  try {
33257
- const { deliverOutboundPayloads } = await import("./deliver-B_Fv-dS9.js").then((n) => n.n);
33231
+ const { deliverOutboundPayloads } = await import("./deliver-DZ7ynJYH.js").then((n) => n.n);
33258
33232
  await deliverOutboundPayloads({
33259
33233
  cfg: params.cfg,
33260
33234
  channel,
@@ -33659,7 +33633,7 @@ async function stageSandboxMedia(params) {
33659
33633
  };
33660
33634
  try {
33661
33635
  const destDir = sandbox ? path.join(effectiveWorkspaceDir, "media", "inbound") : effectiveWorkspaceDir;
33662
- await fs$1.mkdir(destDir, { recursive: true });
33636
+ await fsPromises.mkdir(destDir, { recursive: true });
33663
33637
  const remoteAttachmentRoots = resolveIMessageRemoteAttachmentRoots({
33664
33638
  cfg,
33665
33639
  accountId: ctx.AccountId
@@ -33709,7 +33683,7 @@ async function stageSandboxMedia(params) {
33709
33683
  usedNames.add(fileName);
33710
33684
  const dest = path.join(destDir, fileName);
33711
33685
  if (ctx.MediaRemoteHost) await scpFile(ctx.MediaRemoteHost, source, dest);
33712
- else await fs$1.copyFile(source, dest);
33686
+ else await fsPromises.copyFile(source, dest);
33713
33687
  const stagedPath = sandbox ? path.posix.join("media", "inbound", fileName) : dest;
33714
33688
  staged.set(source, stagedPath);
33715
33689
  }
@@ -33928,20 +33902,6 @@ async function prepareReplyTurn(ctx, opts, configOverride) {
33928
33902
  });
33929
33903
  let provider = defaultProvider;
33930
33904
  let model = defaultModel;
33931
- let hasResolvedHeartbeatModelOverride = false;
33932
- if (opts?.isHeartbeat) {
33933
- const heartbeatRaw = opts.heartbeatModelOverride?.trim() ?? agentCfg?.heartbeat?.model?.trim() ?? "";
33934
- const heartbeatRef = heartbeatRaw ? resolveModelRefFromString({
33935
- raw: heartbeatRaw,
33936
- defaultProvider,
33937
- aliasIndex
33938
- }) : null;
33939
- if (heartbeatRef) {
33940
- provider = heartbeatRef.ref.provider;
33941
- model = heartbeatRef.ref.model;
33942
- hasResolvedHeartbeatModelOverride = true;
33943
- }
33944
- }
33945
33905
  const workspaceDir = (await ensureAgentWorkspace({
33946
33906
  dir: resolveAgentWorkspaceDir(cfg, agentId) ?? DEFAULT_AGENT_WORKSPACE_DIR,
33947
33907
  ensureBootstrapFiles: !agentCfg?.skipBootstrap && !isFastTestEnv
@@ -34020,8 +33980,7 @@ async function prepareReplyTurn(ctx, opts, configOverride) {
34020
33980
  groupSubject: sessionEntry.subject ?? sessionCtx.GroupSubject ?? finalized.GroupSubject,
34021
33981
  parentSessionKey: sessionCtx.ParentSessionKey
34022
33982
  });
34023
- const hasSessionModelOverride = Boolean(sessionEntry.modelOverride?.trim() || sessionEntry.providerOverride?.trim());
34024
- if (!hasResolvedHeartbeatModelOverride && !hasSessionModelOverride && channelModelOverride) {
33983
+ if (!Boolean(sessionEntry.modelOverride?.trim() || sessionEntry.providerOverride?.trim()) && channelModelOverride) {
34025
33984
  const resolved = resolveModelRefFromString({
34026
33985
  raw: channelModelOverride.model,
34027
33986
  defaultProvider,
@@ -34054,7 +34013,6 @@ async function prepareReplyTurn(ctx, opts, configOverride) {
34054
34013
  aliasIndex,
34055
34014
  provider,
34056
34015
  model,
34057
- hasResolvedHeartbeatModelOverride,
34058
34016
  typing,
34059
34017
  opts: resolvedOpts,
34060
34018
  skillFilter: mergedSkillFilter
@@ -34800,7 +34758,7 @@ function withHeartbeatStrip(opts) {
34800
34758
  return (next) => async (payload, ctx) => {
34801
34759
  let text = payload.text;
34802
34760
  const hasMedia = Boolean(payload.mediaUrl) || (payload.mediaUrls?.length ?? 0) > 0;
34803
- if (!ctx.isHeartbeat && typeof text === "string" && text.includes("SYMIPULSE_OK")) {
34761
+ if (typeof text === "string" && text.includes("SYMIPULSE_OK")) {
34804
34762
  const stripped = stripHeartbeatToken(text, { mode: "message" });
34805
34763
  if (stripped.didStrip && !didLogStrip) {
34806
34764
  didLogStrip = true;
@@ -39094,7 +39052,7 @@ function readSlackExternalArgMenuToken(raw) {
39094
39052
  }
39095
39053
  let commandsRegistry;
39096
39054
  async function getCommandsRegistry() {
39097
- if (!commandsRegistry) commandsRegistry = await import("./commands-registry-DXK4Ortm.js").then((n) => n.t);
39055
+ if (!commandsRegistry) commandsRegistry = await import("./commands-registry-DYk02tmt.js").then((n) => n.t);
39098
39056
  return commandsRegistry;
39099
39057
  }
39100
39058
  function encodeSlackCommandArgValue(parts) {
@@ -39436,11 +39394,11 @@ async function registerSlackMonitorSlashCommands(params) {
39436
39394
  const channelName = channelInfo?.name;
39437
39395
  const roomLabel = channelName ? `#${channelName}` : `#${command.channel_id}`;
39438
39396
  const [{ resolveAgentRoute }, { finalizeInboundContext }, { dispatchReplyWithDispatcher }] = await Promise.all([
39439
- import("./resolve-route-C0EHjIMD.js").then((n) => n.r),
39440
- import("./inbound-context-CICDRKxY.js").then((n) => n.n),
39397
+ import("./resolve-route-xpyI3enn.js").then((n) => n.r),
39398
+ import("./inbound-context-DqAyGDbE.js").then((n) => n.n),
39441
39399
  Promise.resolve().then(() => provider_dispatcher_exports)
39442
39400
  ]);
39443
- const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-WjwKgn7n.js").then((n) => n.t), import("./reply-prefix-ClUrRCRd.js").then((n) => n.n)]);
39401
+ const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-CS5Zjc4w.js").then((n) => n.t), import("./reply-prefix-CyLplifX.js").then((n) => n.n)]);
39444
39402
  const route = resolveAgentRoute({
39445
39403
  cfg,
39446
39404
  channel: "slack",
@@ -39497,9 +39455,9 @@ async function registerSlackMonitorSlashCommands(params) {
39497
39455
  });
39498
39456
  const deliverSlashPayloads = async (replies) => {
39499
39457
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
39500
- import("./replies-BUaT9S6J.js").then((n) => n.r),
39501
- import("./chunk-CKgSHf7u.js").then((n) => n.s),
39502
- import("./markdown-tables-jlJYpF1X.js").then((n) => n.t)
39458
+ import("./replies-Dqft-42v.js").then((n) => n.r),
39459
+ import("./chunk-DQGU0F8t.js").then((n) => n.s),
39460
+ import("./markdown-tables-GTLvbzuR.js").then((n) => n.t)
39503
39461
  ]);
39504
39462
  await deliverSlackSlashReplies({
39505
39463
  replies,
@@ -39552,7 +39510,7 @@ async function registerSlackMonitorSlashCommands(params) {
39552
39510
  let nativeCommands = [];
39553
39511
  if (nativeEnabled) {
39554
39512
  reg = await getCommandsRegistry();
39555
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-4afIEM1a.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39513
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-X3T9Y9lT.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39556
39514
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
39557
39515
  skillCommands,
39558
39516
  provider: "slack"
@@ -40685,7 +40643,7 @@ function resolvePluginTools(params) {
40685
40643
  //#endregion
40686
40644
  //#region src/agents/apply-patch-update.ts
40687
40645
  async function defaultReadFile(filePath) {
40688
- return fs$1.readFile(filePath, "utf8");
40646
+ return fsPromises.readFile(filePath, "utf8");
40689
40647
  }
40690
40648
  async function applyUpdateHunk(filePath, chunks, options) {
40691
40649
  const originalLines = (await (options?.readFile ?? defaultReadFile)(filePath).catch((err) => {
@@ -40929,10 +40887,10 @@ function resolvePatchFileOps(options) {
40929
40887
  };
40930
40888
  }
40931
40889
  return {
40932
- readFile: (filePath) => fs$1.readFile(filePath, "utf8"),
40933
- writeFile: (filePath, content) => fs$1.writeFile(filePath, content, "utf8"),
40934
- remove: (filePath) => fs$1.rm(filePath),
40935
- mkdirp: (dir) => fs$1.mkdir(dir, { recursive: true }).then(() => {})
40890
+ readFile: (filePath) => fsPromises.readFile(filePath, "utf8"),
40891
+ writeFile: (filePath, content) => fsPromises.writeFile(filePath, content, "utf8"),
40892
+ remove: (filePath) => fsPromises.rm(filePath),
40893
+ mkdirp: (dir) => fsPromises.mkdir(dir, { recursive: true }).then(() => {})
40936
40894
  };
40937
40895
  }
40938
40896
  async function ensureDir(filePath, ops) {
@@ -42099,7 +42057,7 @@ async function repairSessionFileIfNeeded(params) {
42099
42057
  };
42100
42058
  let content;
42101
42059
  try {
42102
- content = await fs$1.readFile(sessionFile, "utf-8");
42060
+ content = await fsPromises.readFile(sessionFile, "utf-8");
42103
42061
  } catch (err) {
42104
42062
  if (err?.code === "ENOENT") return {
42105
42063
  repaired: false,
@@ -42147,15 +42105,15 @@ async function repairSessionFileIfNeeded(params) {
42147
42105
  const backupPath = `${sessionFile}.bak-${process.pid}-${Date.now()}`;
42148
42106
  const tmpPath = `${sessionFile}.repair-${process.pid}-${Date.now()}.tmp`;
42149
42107
  try {
42150
- const stat = await fs$1.stat(sessionFile).catch(() => null);
42151
- await fs$1.writeFile(backupPath, content, "utf-8");
42152
- if (stat) await fs$1.chmod(backupPath, stat.mode);
42153
- await fs$1.writeFile(tmpPath, cleaned, "utf-8");
42154
- if (stat) await fs$1.chmod(tmpPath, stat.mode);
42155
- await fs$1.rename(tmpPath, sessionFile);
42108
+ const stat = await fsPromises.stat(sessionFile).catch(() => null);
42109
+ await fsPromises.writeFile(backupPath, content, "utf-8");
42110
+ if (stat) await fsPromises.chmod(backupPath, stat.mode);
42111
+ await fsPromises.writeFile(tmpPath, cleaned, "utf-8");
42112
+ if (stat) await fsPromises.chmod(tmpPath, stat.mode);
42113
+ await fsPromises.rename(tmpPath, sessionFile);
42156
42114
  } catch (err) {
42157
42115
  try {
42158
- await fs$1.unlink(tmpPath);
42116
+ await fsPromises.unlink(tmpPath);
42159
42117
  } catch (cleanupErr) {
42160
42118
  params.warn?.(`session file repair cleanup failed: ${cleanupErr instanceof Error ? cleanupErr.message : "unknown error"} (${path.basename(tmpPath)})`);
42161
42119
  }
@@ -43428,7 +43386,7 @@ async function prewarmSessionFile(sessionFile) {
43428
43386
  if (!isSessionManagerCacheEnabled()) return;
43429
43387
  if (isSessionManagerCached(sessionFile)) return;
43430
43388
  try {
43431
- const handle = await fs$1.open(sessionFile, "r");
43389
+ const handle = await fsPromises.open(sessionFile, "r");
43432
43390
  try {
43433
43391
  const buffer = Buffer$1.alloc(4096);
43434
43392
  await handle.read(buffer, 0, buffer.length, 0);
@@ -43561,14 +43519,14 @@ async function compactEmbeddedPiSessionDirect(params) {
43561
43519
  if (!apiKeyInfo.apiKey) {
43562
43520
  if (apiKeyInfo.mode !== "aws-sdk") throw new Error(`No API key resolved for provider "${model.provider}" (auth mode: ${apiKeyInfo.mode}).`);
43563
43521
  } else if (model.provider === "github-copilot") {
43564
- const { resolveCopilotApiToken } = await import("./github-copilot-token-DTYkb2IC.js").then((n) => n.n);
43522
+ const { resolveCopilotApiToken } = await import("./github-copilot-token-BTNK6Tcd.js").then((n) => n.n);
43565
43523
  const copilotToken = await resolveCopilotApiToken({ githubToken: apiKeyInfo.apiKey });
43566
43524
  authStorage.setRuntimeApiKey(model.provider, copilotToken.token);
43567
43525
  } else authStorage.setRuntimeApiKey(model.provider, apiKeyInfo.apiKey);
43568
43526
  } catch (err) {
43569
43527
  return fail(describeUnknownError(err));
43570
43528
  }
43571
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
43529
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
43572
43530
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
43573
43531
  const sandbox = await resolveSandboxContext({
43574
43532
  config: params.config,
@@ -43576,7 +43534,7 @@ async function compactEmbeddedPiSessionDirect(params) {
43576
43534
  workspaceDir: resolvedWorkspace
43577
43535
  });
43578
43536
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
43579
- await fs$1.mkdir(effectiveWorkspace, { recursive: true });
43537
+ await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
43580
43538
  await ensureSessionHeader({
43581
43539
  sessionFile: params.sessionFile,
43582
43540
  sessionId: params.sessionId,
@@ -43902,12 +43860,12 @@ function getQueuedFileWriter(writers, filePath) {
43902
43860
  const existing = writers.get(filePath);
43903
43861
  if (existing) return existing;
43904
43862
  const dir = path.dirname(filePath);
43905
- const ready = fs$1.mkdir(dir, { recursive: true }).catch(() => void 0);
43863
+ const ready = fsPromises.mkdir(dir, { recursive: true }).catch(() => void 0);
43906
43864
  let queue = Promise.resolve();
43907
43865
  const writer = {
43908
43866
  filePath,
43909
43867
  write: (line) => {
43910
- queue = queue.then(() => ready).then(() => fs$1.appendFile(filePath, line, "utf8")).catch(() => void 0);
43868
+ queue = queue.then(() => ready).then(() => fsPromises.appendFile(filePath, line, "utf8")).catch(() => void 0);
43911
43869
  }
43912
43870
  };
43913
43871
  writers.set(filePath, writer);
@@ -47062,7 +47020,7 @@ Use the message tool with buttons:
47062
47020
  */
47063
47021
  async function readSessionFile(sessionFile) {
47064
47022
  try {
47065
- return await fs$1.readFile(sessionFile, "utf-8");
47023
+ return await fsPromises.readFile(sessionFile, "utf-8");
47066
47024
  } catch {
47067
47025
  return null;
47068
47026
  }
@@ -47071,8 +47029,8 @@ async function writeAtomically(sessionFile, text) {
47071
47029
  const dir = path.dirname(sessionFile);
47072
47030
  const base = path.basename(sessionFile);
47073
47031
  const tmp = path.join(dir, `.${base}.prune-${process.pid}-${Date.now()}.tmp`);
47074
- await fs$1.writeFile(tmp, text, "utf-8");
47075
- await fs$1.rename(tmp, sessionFile);
47032
+ await fsPromises.writeFile(tmp, text, "utf-8");
47033
+ await fsPromises.rename(tmp, sessionFile);
47076
47034
  }
47077
47035
  /**
47078
47036
  * Remove empty assistant JSONL entries from the session file.
@@ -47174,7 +47132,7 @@ function isInPoisonRange(version) {
47174
47132
  */
47175
47133
  async function checkSessionPoison(sessionFile) {
47176
47134
  try {
47177
- const firstLine = (await fs$1.readFile(sessionFile, "utf-8")).split("\n")[0];
47135
+ const firstLine = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n")[0];
47178
47136
  if (!firstLine) return null;
47179
47137
  const header = JSON.parse(firstLine);
47180
47138
  if (header.type !== "session") return null;
@@ -47192,7 +47150,7 @@ async function checkSessionPoison(sessionFile) {
47192
47150
  */
47193
47151
  async function archivePoisonedSession(sessionFile) {
47194
47152
  const archiveName = `${sessionFile}.archived-poison.${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
47195
- await fs$1.rename(sessionFile, archiveName);
47153
+ await fsPromises.rename(sessionFile, archiveName);
47196
47154
  return archiveName;
47197
47155
  }
47198
47156
  /**
@@ -47201,14 +47159,14 @@ async function archivePoisonedSession(sessionFile) {
47201
47159
  */
47202
47160
  async function stampSessionVersion(sessionFile) {
47203
47161
  try {
47204
- const lines = (await fs$1.readFile(sessionFile, "utf-8")).split("\n");
47162
+ const lines = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n");
47205
47163
  if (lines.length === 0) return;
47206
47164
  const header = JSON.parse(lines[0]);
47207
47165
  if (header.type !== "session") return;
47208
47166
  if (header.symiVersion === VERSION) return;
47209
47167
  header.symiVersion = VERSION;
47210
47168
  lines[0] = JSON.stringify(header);
47211
- await fs$1.writeFile(sessionFile, lines.join("\n"), "utf-8");
47169
+ await fsPromises.writeFile(sessionFile, lines.join("\n"), "utf-8");
47212
47170
  } catch {}
47213
47171
  }
47214
47172
  /**
@@ -47462,7 +47420,7 @@ async function prepareSessionManagerForRun(params) {
47462
47420
  return;
47463
47421
  }
47464
47422
  if (params.hadSessionFile && header && !hasAssistant) {
47465
- await fs$1.writeFile(params.sessionFile, "", "utf-8");
47423
+ await fsPromises.writeFile(params.sessionFile, "", "utf-8");
47466
47424
  sm.fileEntries = [header];
47467
47425
  sm.byId?.clear?.();
47468
47426
  sm.labelsById?.clear?.();
@@ -48020,7 +47978,7 @@ async function runEmbeddedAttempt(params) {
48020
47978
  const prevCwd = process.cwd();
48021
47979
  const runAbortController = new AbortController();
48022
47980
  log$7.debug(`embedded run start: runId=${params.runId} sessionId=${params.sessionId} provider=${params.provider} model=${params.modelId} thinking=${params.thinkLevel} messageChannel=${params.messageChannel ?? params.messageProvider ?? "unknown"}`);
48023
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
47981
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
48024
47982
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
48025
47983
  const sandbox = await resolveSandboxContext({
48026
47984
  config: params.config,
@@ -48028,7 +47986,7 @@ async function runEmbeddedAttempt(params) {
48028
47986
  workspaceDir: resolvedWorkspace
48029
47987
  });
48030
47988
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
48031
- await fs$1.mkdir(effectiveWorkspace, { recursive: true });
47989
+ await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
48032
47990
  let restoreSkillEnv;
48033
47991
  process.chdir(effectiveWorkspace);
48034
47992
  try {
@@ -48238,7 +48196,7 @@ async function runEmbeddedAttempt(params) {
48238
48196
  sessionFile: params.sessionFile,
48239
48197
  warn: (message) => log$7.warn(message)
48240
48198
  });
48241
- const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
48199
+ const hadSessionFile = await fsPromises.stat(params.sessionFile).then(() => true).catch(() => false);
48242
48200
  const transcriptPolicy = resolveTranscriptPolicy({
48243
48201
  modelApi: params.model?.api,
48244
48202
  provider: params.provider,
@@ -49245,7 +49203,7 @@ async function runEmbeddedPiAgent(params) {
49245
49203
  return;
49246
49204
  }
49247
49205
  if (model.provider === "github-copilot") {
49248
- const { resolveCopilotApiToken } = await import("./github-copilot-token-DTYkb2IC.js").then((n) => n.n);
49206
+ const { resolveCopilotApiToken } = await import("./github-copilot-token-BTNK6Tcd.js").then((n) => n.n);
49249
49207
  const copilotToken = await resolveCopilotApiToken({ githubToken: apiKeyInfo.apiKey });
49250
49208
  authStorage.setRuntimeApiKey(model.provider, copilotToken.token);
49251
49209
  } else authStorage.setRuntimeApiKey(model.provider, apiKeyInfo.apiKey);
@@ -49330,7 +49288,7 @@ async function runEmbeddedPiAgent(params) {
49330
49288
  }
49331
49289
  runLoopIterations += 1;
49332
49290
  attemptedThinking.add(thinkLevel);
49333
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
49291
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
49334
49292
  const prompt = provider === "anthropic" ? scrubAnthropicRefusalMagic(params.prompt) : params.prompt;
49335
49293
  const attempt = await runEmbeddedAttempt({
49336
49294
  sessionId: params.sessionId,
@@ -49994,8 +49952,8 @@ async function runAgentTurnImpl(params) {
49994
49952
  const result = await runEmbeddedPiAgent(buildInternalParams());
49995
49953
  const rawText = (result.payloads ?? []).filter((p) => p.text && !p.isError).map((p) => p.text).join("\n").trim();
49996
49954
  const outboundResult = classifyOutboundMessage(rawText, {
49997
- isHeartbeat: getAgentRunContext(runId)?.isHeartbeat === true,
49998
- heartbeatAckMaxChars: Math.max(0, params.config.agents?.defaults?.heartbeat?.ackMaxChars ?? DEFAULT_HEARTBEAT_ACK_MAX_CHARS)
49955
+ isHeartbeat: false,
49956
+ heartbeatAckMaxChars: 0
49999
49957
  });
50000
49958
  const filteredText = outboundResult.output.trim();
50001
49959
  const resolvedProvider = result.meta.agentMeta?.provider ?? params.provider ?? "";
@@ -50052,4 +50010,4 @@ async function runAgentTurn(params) {
50052
50010
  }
50053
50011
 
50054
50012
  //#endregion
50055
- export { applyBrowserProxyPaths as $, getActiveEmbeddedRunCount as $t, normalizePollInput as A, DEFAULT_HEARTBEAT_ACK_MAX_CHARS as An, estimateBase64DecodedBytes as At, normalizeOptionalText as B, countActiveRunsForSession as Bt, listTasksInWorkdir as C, classifyOutboundMessage as Cn, DEFAULT_INPUT_IMAGE_MIMES as Ct, resolveOutboundSessionRoute as D, FailoverError as Dn, extractImageContentFromSource as Dt, ensureOutboundSessionEntry as E, runWithModelFallback as En, extractFileContentFromSource as Et, normalizeCronJobCreate as F, clearSessionAuthProfileOverride as Ft, hasLegacyDeliveryHints as G, resolveAgentTimeoutMs as Gt, normalizeRequiredName as H, listDescendantRunsForRequester as Ht, normalizeCronJobPatch as I, formatZonedTimestamp as It, CHANNEL_TARGET_DESCRIPTION as J, AGENT_LANE_NESTED as Jt, stripLegacyDeliveryFields as K, runSubagentAnnounceFlow as Kt, inferLegacyName as L, isAbortTrigger as Lt, resetDirectoryCache as M, prepareAgentRun as Mt, CHANNEL_MESSAGE_ACTION_NAMES as N, BARE_SESSION_RESET_PROMPT as Nt, resolveOutboundTarget as O, describeFailoverError as On, normalizeMimeList as Ot, normalizeHttpWebhookUrl as P, normalizeGroupActivation as Pt, isExternalHookSession as Q, abortEmbeddedPiRun as Qt, normalizeOptionalAgentId as R, stopSubagentsForRequester as Rt, createSymiTools as S, registerAgentRunContext as Sn, DEFAULT_INPUT_IMAGE_MAX_BYTES as St, runMessageAction as T, composeTurnMiddleware as Tn, DEFAULT_INPUT_TIMEOUT_MS as Tt, migrateLegacyCronPayload as U, listSubagentRunsForRequester as Ut, normalizePayloadToSystemText as V, initSubagentRegistry as Vt, buildDeliveryFromLegacyPayload as W, subagent_registry_exports as Wt, detectSuspiciousPatterns as X, clearSessionQueues as Xt, buildSafeExternalPrompt as Y, AGENT_LANE_SUBAGENT as Yt, getHookType as Z, buildAgentSystemPrompt as Zt, withContextUsageWarning as _, CommandLane as _n, buildAuthHealthSummary as _t, getPluginToolMeta as a, formatUserTime as an, markGatewaySigusr1RestartHandled as at, buildAgentTurnParams as b, getAgentRunContext as bn, applyVerboseOverride as bt, handleSlackHttpRequest as c, makeBootstrapWarn as cn, setPreRestartDeferralCheck as ct, buildHistoryContextFromEntries as d, resolveRunWorkspaceDir as dn, getProcessSupervisor as dt, waitForEmbeddedPiRunEnd as en, persistBrowserProxyFiles as et, getChannelActivity as f, getActiveTaskCount as fn, detectRuntimeShell as ft, buildGlassUiProfile as g, waitForActiveTasks as gn, DEFAULT_OAUTH_WARN_MS as gt, getTotalPendingReplies as h, setCommandLaneConcurrency as hn, maskApiKey as ht, sniffMimeFromBase64 as i, resolveSymiDocsPath as in, isGatewaySigusr1RestartExternallyAllowed as it, formatTargetDisplay as j, stripHeartbeatToken as jn, applyTemplate as jt, resolveSessionDeliveryTarget as k, resolveFailoverStatus as kn, resolveInputFileLimits as kt, readJsonBodyWithLimit as l, resolveBootstrapContextForRun as ln, buildSystemPromptParams as lt, createReplyDispatcher as m, resetAllLanes as mn, resolveSendPolicy as mt, applyToolPolicyPipeline as n, registerUnhandledRejectionHandler as nn, deferGatewayRestartUntilIdle as nt, createPluginLoaderLogger as o, resolveUserTimeFormat as on, scheduleGatewaySigusr1Restart as ot, provider_dispatcher_exports as p, getTotalQueueSize as pn, normalizeSendPolicy as pt, CHANNEL_TARGETS_DESCRIPTION as q, readLatestAssistantReply as qt, buildDefaultToolPolicyPipelineSteps as r, ToolInputError as rn, emitGatewayRestart as rt, loadSymiPlugins as s, resolveUserTimezone as sn, setGatewaySigusr1RestartPolicy as st, runAgentTurn as t, installUnhandledRejectionHandler as tn, consumeGatewaySigusr1RestartAuthorization as tt, requestBodyErrorToText as u, redactRunIdentifier as un, resolveCommitHash as ut, withContextOverflowRecovery as v, clearAgentRunContext as vn, formatRemainingShort as vt, resolveAnnounceTargetFromKey as w, resolveModelProfile as wn, DEFAULT_INPUT_MAX_REDIRECTS as wt, prepareReplyTurn as x, onAgentEvent as xn, parseVerboseOverride as xt, runUnifiedTurn as y, emitAgentEvent as yn, applyModelOverrideToSessionEntry as yt, normalizeOptionalSessionKey as z, countActiveDescendantRuns as zt };
50013
+ export { applyBrowserProxyPaths as $, clearAgentRunContext as $t, normalizePollInput as A, describeFailoverError as An, estimateBase64DecodedBytes as At, normalizeOptionalText as B, countActiveRunsForSession as Bt, listTasksInWorkdir as C, waitForActiveTasks as Cn, DEFAULT_INPUT_IMAGE_MIMES as Ct, resolveOutboundSessionRoute as D, composeTurnMiddleware as Dn, extractImageContentFromSource as Dt, ensureOutboundSessionEntry as E, resolveModelProfile as En, extractFileContentFromSource as Et, normalizeCronJobCreate as F, clearSessionAuthProfileOverride as Ft, hasLegacyDeliveryHints as G, resolveAgentTimeoutMs as Gt, normalizeRequiredName as H, listDescendantRunsForRequester as Ht, normalizeCronJobPatch as I, formatZonedTimestamp as It, CHANNEL_TARGET_DESCRIPTION as J, AGENT_LANE_NESTED as Jt, stripLegacyDeliveryFields as K, runSubagentAnnounceFlow as Kt, inferLegacyName as L, isAbortTrigger as Lt, resetDirectoryCache as M, prepareAgentRun as Mt, CHANNEL_MESSAGE_ACTION_NAMES as N, BARE_SESSION_RESET_PROMPT as Nt, resolveOutboundTarget as O, runWithModelFallback as On, normalizeMimeList as Ot, normalizeHttpWebhookUrl as P, normalizeGroupActivation as Pt, isExternalHookSession as Q, clearSessionQueues as Qt, normalizeOptionalAgentId as R, stopSubagentsForRequester as Rt, createSymiTools as S, setCommandLaneConcurrency as Sn, DEFAULT_INPUT_IMAGE_MAX_BYTES as St, runMessageAction as T, classifyOutboundMessage as Tn, DEFAULT_INPUT_TIMEOUT_MS as Tt, migrateLegacyCronPayload as U, listSubagentRunsForRequester as Ut, normalizePayloadToSystemText as V, initSubagentRegistry as Vt, buildDeliveryFromLegacyPayload as W, subagent_registry_exports as Wt, detectSuspiciousPatterns as X, DEFAULT_HEARTBEAT_ACK_MAX_CHARS as Xt, buildSafeExternalPrompt as Y, AGENT_LANE_SUBAGENT as Yt, getHookType as Z, stripHeartbeatToken as Zt, withContextUsageWarning as _, redactRunIdentifier as _n, buildAuthHealthSummary as _t, getPluginToolMeta as a, abortEmbeddedPiRun as an, markGatewaySigusr1RestartHandled as at, buildAgentTurnParams as b, getTotalQueueSize as bn, applyVerboseOverride as bt, handleSlackHttpRequest as c, installUnhandledRejectionHandler as cn, setPreRestartDeferralCheck as ct, buildHistoryContextFromEntries as d, resolveSymiDocsPath as dn, getProcessSupervisor as dt, emitAgentEvent as en, persistBrowserProxyFiles as et, getChannelActivity as f, formatUserTime as fn, detectRuntimeShell as ft, buildGlassUiProfile as g, resolveBootstrapContextForRun as gn, DEFAULT_OAUTH_WARN_MS as gt, getTotalPendingReplies as h, makeBootstrapWarn as hn, maskApiKey as ht, sniffMimeFromBase64 as i, buildAgentSystemPrompt as in, isGatewaySigusr1RestartExternallyAllowed as it, formatTargetDisplay as j, resolveFailoverStatus as jn, applyTemplate as jt, resolveSessionDeliveryTarget as k, FailoverError as kn, resolveInputFileLimits as kt, readJsonBodyWithLimit as l, registerUnhandledRejectionHandler as ln, buildSystemPromptParams as lt, createReplyDispatcher as m, resolveUserTimezone as mn, resolveSendPolicy as mt, applyToolPolicyPipeline as n, onAgentEvent as nn, deferGatewayRestartUntilIdle as nt, createPluginLoaderLogger as o, getActiveEmbeddedRunCount as on, scheduleGatewaySigusr1Restart as ot, provider_dispatcher_exports as p, resolveUserTimeFormat as pn, normalizeSendPolicy as pt, CHANNEL_TARGETS_DESCRIPTION as q, readLatestAssistantReply as qt, buildDefaultToolPolicyPipelineSteps as r, registerAgentRunContext as rn, emitGatewayRestart as rt, loadSymiPlugins as s, waitForEmbeddedPiRunEnd as sn, setGatewaySigusr1RestartPolicy as st, runAgentTurn as t, getAgentRunContext as tn, consumeGatewaySigusr1RestartAuthorization as tt, requestBodyErrorToText as u, ToolInputError as un, resolveCommitHash as ut, withContextOverflowRecovery as v, resolveRunWorkspaceDir as vn, formatRemainingShort as vt, resolveAnnounceTargetFromKey as w, CommandLane as wn, DEFAULT_INPUT_MAX_REDIRECTS as wt, prepareReplyTurn as x, resetAllLanes as xn, parseVerboseOverride as xt, runUnifiedTurn as y, getActiveTaskCount as yn, applyModelOverrideToSessionEntry as yt, normalizeOptionalSessionKey as z, countActiveDescendantRuns as zt };