@symerian/symi 3.3.1 → 3.3.3

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 (257) hide show
  1. package/dist/{agent-BI1-UXxQ.js → agent-9zPi5Bip.js} +2 -5
  2. package/dist/{agent-DeLysRUa.js → agent-M9EC02CI.js} +17 -20
  3. package/dist/{agent-scope-BjEBQhs0.js → agent-scope-B_oqIiaD.js} +18 -18
  4. package/dist/{agent-scope-DE5eEsvh.js → agent-scope-D_MtsuXX.js} +2 -2
  5. package/dist/{agents-BMRZpxNt.js → agents-CW9uf_n0.js} +2 -2
  6. package/dist/{agents.config-BFKM-a83.js → agents.config-B_LFeRQS.js} +1 -1
  7. package/dist/{audit-DQ_p2Pbq.js → audit-B_HL4UJ_.js} +20 -20
  8. package/dist/{auth-choice-BGZsmh6a.js → auth-choice-Bio1-QUP.js} +8 -8
  9. package/dist/{auth-choice-T77Ymi34.js → auth-choice-DS5oaUTz.js} +1 -1
  10. package/dist/{auth-profiles-BVtpxYtY.js → auth-profiles-CPlXilKu.js} +9 -9
  11. package/dist/{auth-profiles-B6ISm3Th.js → auth-profiles-duUuQXeC.js} +3 -3
  12. package/dist/{auth-token-CPluo60n.js → auth-token-DTj2WrbV.js} +1 -1
  13. package/dist/{banner-BJHky-bq.js → banner-0vT1O9w2.js} +1 -1
  14. package/dist/{browser-cli-O7Ic8DI3.js → browser-cli-C-Q0t9y_.js} +9 -9
  15. package/dist/build-info.json +3 -3
  16. package/dist/bundled/boot-md/handler.js +29 -32
  17. package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
  18. package/dist/bundled/session-memory/handler.js +28 -28
  19. package/dist/{call-CdXXPXpo.js → call-Du4CT1Hp.js} +9 -9
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-BrDTgiiV.js → channel-options-CcGtiy0Q.js} +1 -1
  22. package/dist/{channel-options-C1yi5h7A.js → channel-options-DZ17japQ.js} +1 -1
  23. package/dist/{channels-cli-BYeGzy-G.js → channels-cli-BSvEpjOV.js} +10 -10
  24. package/dist/{channels-cli-Pxe1OINS.js → channels-cli-DxSXTCCh.js} +55 -55
  25. package/dist/{chrome-FAf5DZL2.js → chrome-C9mX2mtt.js} +3 -3
  26. package/dist/{chrome-NUKborg3.js → chrome-owBWinlj.js} +2 -2
  27. package/dist/{chunk-DX6VtywY.js → chunk-5H33X8qU.js} +1 -1
  28. package/dist/{cli-Dt-wfm_7.js → cli-CHk4wR-F.js} +7 -7
  29. package/dist/{cli-DFNOC2Ad.js → cli-Dn9ylBb2.js} +43 -43
  30. package/dist/{client-Bs2zB0rY.js → client-ZZqt0H0-.js} +1 -1
  31. package/dist/{command-registry-BwbT4ll7.js → command-registry-UxY6jjeo.js} +10 -10
  32. package/dist/{commands-registry-C5IdtVVy.js → commands-registry-DaPrWQSe.js} +4 -4
  33. package/dist/{commands-registry-DYk02tmt.js → commands-registry-W2GQIywv.js} +1 -1
  34. package/dist/{completion-cli-DiNUqrNY.js → completion-cli-DebZ6nSb.js} +12 -12
  35. package/dist/{completion-cli-CyOSA5xZ.js → completion-cli-m9L2Gv9t.js} +2 -2
  36. package/dist/{config-CW8aDVM0.js → config-CphS_6eg.js} +2 -2
  37. package/dist/{config-cli-DBU_S417.js → config-cli-D4_gO3Pd.js} +4 -4
  38. package/dist/{config-cli-DfG0nukz.js → config-cli-D9YdRiN2.js} +1 -1
  39. package/dist/{config-guard-CNmD3-IC.js → config-guard-B5BwQ-AP.js} +6 -6
  40. package/dist/{config-validation-Bz5CV181.js → config-validation-A2rXGvVY.js} +1 -1
  41. package/dist/{configure-BkH4ueot.js → configure-BXjJQG1p.js} +14 -14
  42. package/dist/{configure-BYu2DI_6.js → configure-D9NeIMjP.js} +2 -2
  43. package/dist/{consolidate-Cx7qF5Ht.js → consolidate-7Usm-b2g.js} +6 -6
  44. package/dist/{consolidate-dh1m3X1s.js → consolidate-C-HKdAJo.js} +2 -2
  45. package/dist/{control-service-Drd2sr2o.js → control-service-CMVDL3Yl.js} +4 -4
  46. package/dist/{control-ui-assets-D22DSxhv.js → control-ui-assets-DUhvOLUL.js} +1 -1
  47. package/dist/{cron-cli-BTAdnRhX.js → cron-cli-DR4W075u.js} +7 -7
  48. package/dist/{daemon-cli-BY9BFNuw.js → daemon-cli-B__05b-d.js} +11 -11
  49. package/dist/{daemon-runtime-BH3ZBZXS.js → daemon-runtime-BD-3XS8R.js} +10 -10
  50. package/dist/{deliver-DZ7ynJYH.js → deliver-63FtOVMC.js} +3 -3
  51. package/dist/{deliver-Dlq2X0K5.js → deliver-DSMNXd9k.js} +1 -1
  52. package/dist/{deliver-kmnOOp9j.js → deliver-DSv-Z24A.js} +16 -16
  53. package/dist/{deliver-CRqS1O8w.js → deliver-DcP6aVt4.js} +1 -1
  54. package/dist/{deps-i1g0Zpz4.js → deps-DD_ZCq3v.js} +1 -1
  55. package/dist/{devices-cli-Cqi6L8PH.js → devices-cli-CJom2K8b.js} +6 -6
  56. package/dist/{diagnostic-CQLyE7_n.js → diagnostic-D7z6O7v0.js} +1 -1
  57. package/dist/{diagnostics-nLP2i_BY.js → diagnostics-DxdqTfpW.js} +5 -5
  58. package/dist/{directory-cli-B0XsBWso.js → directory-cli-BwhEj1FE.js} +3 -3
  59. package/dist/{dm-policy-shared-CnKffdt_.js → dm-policy-shared-C1TQOlkZ.js} +1 -1
  60. package/dist/{dns-cli-BHWlCG31.js → dns-cli-DzQDEQM2.js} +3 -3
  61. package/dist/{docs-cli-DASNErN-.js → docs-cli--T-77Ujn.js} +1 -1
  62. package/dist/{doctor-completion-DqvmZZEo.js → doctor-completion--AgLv0kV.js} +1 -1
  63. package/dist/{doctor-completion-D_cwpDAq.js → doctor-completion-D1ImH_eM.js} +2 -2
  64. package/dist/{doctor-config-flow-BvHSaiFy.js → doctor-config-flow-4UT3396o.js} +9 -9
  65. package/dist/entry.js +1 -1
  66. package/dist/{exec-approvals-cli-CyHTywue.js → exec-approvals-cli-D-MLmhzh.js} +13 -13
  67. package/dist/extensionAPI.js +5 -5
  68. package/dist/{frontmatter-BW7tVmn4.js → frontmatter-BzAaXBfE.js} +2 -2
  69. package/dist/{fs-safe-DjAKGGJ8.js → fs-safe-B6nMaZqV.js} +6 -6
  70. package/dist/{gateway-cli-BBqSqFGV.js → gateway-cli-5KVJJGFm.js} +97 -117
  71. package/dist/{gateway-cli-BYGA5ex3.js → gateway-cli-BjGvnfU3.js} +15 -35
  72. package/dist/{gateway-rpc-BJF1iDnx.js → gateway-rpc-CUIXRk2t.js} +1 -1
  73. package/dist/{glass-ui-ws-NJNiRFL3.js → glass-ui-ws-CwJdwqn6.js} +65 -65
  74. package/dist/{glass-ui-ws-DJnV8nJK.js → glass-ui-ws-f_OPXcN2.js} +11 -11
  75. package/dist/{health-D59E1VfO.js → health-BdxlhiXA.js} +4 -4
  76. package/dist/{hooks-cli-Bidz8ACz.js → hooks-cli-BfVq5C1p.js} +57 -57
  77. package/dist/{hooks-cli-CyjEjDSY.js → hooks-cli-CQ6rF_LQ.js} +8 -8
  78. package/dist/{image-ops-c7_of0HT.js → image-ops-C-gIIp7Q.js} +10 -10
  79. package/dist/index.js +50 -50
  80. package/dist/{inspect-op0Ov-v4.js → inspect-BDzd6yBs.js} +4 -4
  81. package/dist/{install-safe-path-B73BkVO3.js → install-safe-path-CQXx3s9R.js} +11 -11
  82. package/dist/{installs-ZXEjR9Sp.js → installs-CLp95gcX.js} +10 -10
  83. package/dist/{internal-C3o_xyzP.js → internal-CHnZdvRy.js} +9 -9
  84. package/dist/{lifecycle-core-zhQYm_ni.js → lifecycle-core-_BlNODTH.js} +5 -5
  85. package/dist/llm-slug-generator.js +28 -28
  86. package/dist/{local-roots-CTriU02e.js → local-roots-JhQs5w0I.js} +1 -1
  87. package/dist/{local-roots-Dm8-ErgQ.js → local-roots-WWcVq0Ma.js} +3 -3
  88. package/dist/{logs-cli-B7RJ57Dc.js → logs-cli-BEWOyW5R.js} +7 -7
  89. package/dist/{manager-CpBl-VGg.js → manager-BI8o6AGu.js} +1 -1
  90. package/dist/{manager-9dNT9kNF.js → manager-BQ5Wl5r-.js} +14 -14
  91. package/dist/{manager-t4GthPGw.js → manager-BUS2wGkQ.js} +1 -1
  92. package/dist/{manager-Dsdh0rGn.js → manager-D_AVoLu8.js} +6 -6
  93. package/dist/{manifest-registry-B2vClvK5.js → manifest-registry-DsTUFMvZ.js} +1 -1
  94. package/dist/{markdown-tables-BaWa2kOe.js → markdown-tables-ptfgMe6b.js} +1 -1
  95. package/dist/{memory-DcWXMzOH.js → memory-2OKjMT7V.js} +5 -5
  96. package/dist/{memory-B7TJXpqS.js → memory-CMKSFx1T.js} +2 -2
  97. package/dist/{memory-cli-xBZPEOeL.js → memory-cli-CmPcKzGZ.js} +12 -12
  98. package/dist/{memory-cli-C0WA_nRS.js → memory-cli-rdfaJrCS.js} +2 -2
  99. package/dist/{model-BXWgh5eZ.js → model-BKtw-Bqs.js} +1 -1
  100. package/dist/{model-catalog-BGVslwAT.js → model-catalog-DKBhNiWm.js} +4 -4
  101. package/dist/{model-picker-aTfyp_mP.js → model-picker-DKzvan7c.js} +3 -3
  102. package/dist/{models-IfAFy9bK.js → models-DRtgYyTB.js} +2 -2
  103. package/dist/{models-cli-h8h_qu3F.js → models-cli-183sPHZO.js} +53 -53
  104. package/dist/{models-cli-DiB4JqF2.js → models-cli-DN2zTFw9.js} +9 -9
  105. package/dist/{models-config-DRgHv7Ss.js → models-config-CFUwiu4W.js} +7 -7
  106. package/dist/{node-cli-BPkbqgRt.js → node-cli-CgWAxe-K.js} +27 -27
  107. package/dist/{node-service-DuN9eBL6.js → node-service-tPO_yUk7.js} +1 -1
  108. package/dist/{nodes-cli-C09c6nCf.js → nodes-cli-CprJ5K63.js} +10 -10
  109. package/dist/{nodes-screen-CT94yu_w.js → nodes-screen-JELuBMBi.js} +4 -4
  110. package/dist/{npm-registry-spec-B8X06AqB.js → npm-registry-spec-BXw_6vF6.js} +9 -9
  111. package/dist/{onboard-sMgEOBjV.js → onboard-CPHA8CdV.js} +13 -13
  112. package/dist/{onboard-iL7Z0wKJ.js → onboard-bTgNnEHK.js} +1 -1
  113. package/dist/{onboard-channels-Deq8QGnM.js → onboard-channels-B_iyN1qL.js} +4 -4
  114. package/dist/{onboard-channels-BfzW-9vo.js → onboard-channels-D5ugcgBE.js} +1 -1
  115. package/dist/{onboard-custom-DEdRdzNq.js → onboard-custom-Cla8O-Tv.js} +3 -3
  116. package/dist/{onboard-helpers-DZKHFY2J.js → onboard-helpers-D2mWJnFB.js} +8 -8
  117. package/dist/{onboard-hooks-DZZM8goM.js → onboard-hooks-DZD-nGLB.js} +1 -1
  118. package/dist/{onboard-remote-dn4L5WdE.js → onboard-remote-Bi2BNRnh.js} +1 -1
  119. package/dist/{onboard-skills-DGHye9Q3.js → onboard-skills-C0XDXvWw.js} +4 -4
  120. package/dist/{onboarding-BjXYbWlg.js → onboarding-D2SLzcWH.js} +12 -12
  121. package/dist/{onboarding-70YKbZi6.js → onboarding-ii3ok0Ih.js} +3 -3
  122. package/dist/{onboarding.finalize-dU_CtL43.js → onboarding.finalize-DOHv_Xe8.js} +31 -31
  123. package/dist/{onboarding.finalize-Ch3V08eY.js → onboarding.finalize-g-_d-wVY.js} +4 -4
  124. package/dist/{onboarding.gateway-config-DfF8Rxvn.js → onboarding.gateway-config-BmaAH8uo.js} +8 -8
  125. package/dist/{openai-model-default-D1NFHFF_.js → openai-model-default-BeRT9S75.js} +2 -2
  126. package/dist/{pairing-cli-CJv8LQfb.js → pairing-cli-DdtW6Nu-.js} +4 -4
  127. package/dist/{pairing-store-CxT0UGxd.js → pairing-store-mmeniyUt.js} +1 -1
  128. package/dist/{pairing-token-DorpwP8O.js → pairing-token-CURbSHdi.js} +7 -7
  129. package/dist/{paths-DaQrPPet.js → paths-Dc6A9_vI.js} +1 -1
  130. package/dist/{pi-auth-json-DGZH6URT.js → pi-auth-json-1Z1j1PDI.js} +5 -5
  131. package/dist/{pi-auth-json-BzuhVcKu.js → pi-auth-json-D4Bl4hBw.js} +1 -1
  132. package/dist/{pi-embedded-DOCVZrmx.js → pi-embedded-CvGL6bij.js} +39 -212
  133. package/dist/{pi-embedded-helpers-Be-EeyzH.js → pi-embedded-helpers-BRM8EM4P.js} +6 -6
  134. package/dist/{pi-tools.policy-qwS9SXOa.js → pi-tools.policy-BBHbN8Nh.js} +3 -3
  135. package/dist/{plugin-auto-enable-zDUaiaf2.js → plugin-auto-enable-BCwyDNSP.js} +1 -1
  136. package/dist/{plugin-registry-BgGVB3kW.js → plugin-registry-DSG-0min.js} +3 -3
  137. package/dist/{plugin-registry-CP2mbhwk.js → plugin-registry-Dl3HqI5J.js} +1 -1
  138. package/dist/plugin-sdk/agents/{symipulse-timeout.d.ts → idle-timeout.d.ts} +3 -3
  139. package/dist/plugin-sdk/agents/pi-embedded-runner/system-prompt.d.ts +0 -2
  140. package/dist/plugin-sdk/agents/system-prompt.d.ts +1 -2
  141. package/dist/plugin-sdk/auto-reply/reply/middleware-transcript-update.d.ts +1 -8
  142. package/dist/plugin-sdk/auto-reply/reply/normalize-reply.d.ts +1 -3
  143. package/dist/plugin-sdk/auto-reply/reply/reply-dispatcher.d.ts +0 -1
  144. package/dist/plugin-sdk/auto-reply/tokens.d.ts +0 -3
  145. package/dist/plugin-sdk/gateway/outbound-filter.d.ts +2 -4
  146. package/dist/{plugins-yymezpEd.js → plugins-CcVzjOo_.js} +1 -1
  147. package/dist/{plugins-cli-1wkCRsFe.js → plugins-cli-CEj-qNus.js} +8 -8
  148. package/dist/{plugins-cli-B_Gtx3LU.js → plugins-cli-CUTyMzoz.js} +52 -52
  149. package/dist/{ports-ChuJYhEL.js → ports-DRHSHvqY.js} +1 -1
  150. package/dist/{ports-EAVAOFyK.js → ports-DqxP-bXz.js} +2 -2
  151. package/dist/{program-UyCr49qs.js → program-CjZ65fN4.js} +13 -13
  152. package/dist/{program-context-C7uCS8z7.js → program-context-GaV454D6.js} +38 -38
  153. package/dist/{prompt-select-styled-DcMra8CK.js → prompt-select-styled-BkowcFQR.js} +36 -36
  154. package/dist/{prompt-select-styled-BRcRFLzB.js → prompt-select-styled-CwXc8EFB.js} +4 -4
  155. package/dist/{provider-auth-helpers-Xn1TAPPY.js → provider-auth-helpers-Bo1_RSEb.js} +5 -5
  156. package/dist/{provider-auth-helpers-BJTb9xI0.js → provider-auth-helpers-CRobCJR_.js} +1 -1
  157. package/dist/{push-apns-Aaqf9WKI.js → push-apns-BBym2pAw.js} +4 -4
  158. package/dist/{push-apns-Bfqnchj6.js → push-apns-Bv16DYOL.js} +1 -1
  159. package/dist/{pw-ai-C-ddUgTA.js → pw-ai-BW5obXRK.js} +7 -7
  160. package/dist/{pw-ai-DJrnU1ja.js → pw-ai-GICi0s74.js} +8 -8
  161. package/dist/{qmd-manager-D5kqCz-Y.js → qmd-manager-C-J9Sfjk.js} +19 -19
  162. package/dist/{qmd-manager-DrM6m9z1.js → qmd-manager-CTHJcHPq.js} +5 -5
  163. package/dist/{qr-cli-B_mw4i0R.js → qr-cli-BIdgVMK1.js} +3 -3
  164. package/dist/{register.agent-vAJ0_4m0.js → register.agent-QXqsCc-q.js} +12 -12
  165. package/dist/{register.agent-BqKNzdaW.js → register.agent-z4GJgPr-.js} +65 -65
  166. package/dist/{register.configure-BzgavjpU.js → register.configure-CYXErdjF.js} +11 -11
  167. package/dist/{register.configure-7TmTqCgU.js → register.configure-DaMmDTaj.js} +68 -68
  168. package/dist/{register.maintenance-BJO0RCk9.js → register.maintenance-CBGhJ5R9.js} +12 -12
  169. package/dist/{register.maintenance-6Wz4HXlm.js → register.maintenance-CcWTycM4.js} +65 -65
  170. package/dist/{register.message-XYivyrQJ.js → register.message-Bcvdcd3v.js} +45 -45
  171. package/dist/{register.message-CW9PahRi.js → register.message-EMkIi8Ga.js} +8 -8
  172. package/dist/{register.onboard-BgwkmP4D.js → register.onboard-CtcLKgR4.js} +22 -22
  173. package/dist/{register.onboard-MWRC29wD.js → register.onboard-lmLaYYZl.js} +2 -2
  174. package/dist/{register.setup-V-arsKvb.js → register.setup-Cu8R_HaH.js} +2 -2
  175. package/dist/{register.setup-7OoAqQG_.js → register.setup-D47FYXH2.js} +25 -25
  176. package/dist/{register.status-health-sessions-1VnuXhGM.js → register.status-health-sessions--q6ddHX9.js} +3 -3
  177. package/dist/{register.status-health-sessions-Bgg1sdY_.js → register.status-health-sessions-B9CINBWm.js} +38 -38
  178. package/dist/{register.subclis-DpPYIqkP.js → register.subclis-CHTY5PYx.js} +9 -9
  179. package/dist/{registry-9AaJQms1.js → registry-C-JddWwo.js} +2 -2
  180. package/dist/{replies-CgVOirGF.js → replies-BOy28KVL.js} +1 -1
  181. package/dist/{replies-pnMj7AtP.js → replies-BeK3uuQ8.js} +1 -1
  182. package/dist/{replies-BZN1LuJP.js → replies-C82xaXm3.js} +3 -3
  183. package/dist/{replies-Dqft-42v.js → replies-P7jbK6Bo.js} +2 -2
  184. package/dist/{reply-prefix-DkDTGwTs.js → reply-prefix-ChIeKp-P.js} +1 -1
  185. package/dist/{reply-prefix-CyLplifX.js → reply-prefix-xaWqfM9m.js} +1 -1
  186. package/dist/{resolve-route-CIA0TSsF.js → resolve-route-CIS2tjpz.js} +3 -3
  187. package/dist/{resolve-route-xpyI3enn.js → resolve-route-DKhx5C-P.js} +1 -1
  188. package/dist/{routes-xZZ99jJJ.js → routes-BJ2iXVJF.js} +10 -10
  189. package/dist/{rpc-BzR2wLkc.js → rpc-CSI4uFgj.js} +1 -1
  190. package/dist/{run-main-n0fjk-o5.js → run-main-Bzub4qvZ.js} +20 -20
  191. package/dist/{sandbox-DGG12SGo.js → sandbox-CQU7Gcb9.js} +18 -18
  192. package/dist/{sandbox-cli--d2MJPM2.js → sandbox-cli-Ci90LP_X.js} +13 -13
  193. package/dist/{security-cli-CeP9ss1g.js → security-cli-BfOZ_cJN.js} +28 -28
  194. package/dist/{send-BzUWmgQ9.js → send-BAKkoPOy.js} +7 -7
  195. package/dist/{send-BQJKg0bU.js → send-DulXmWcG.js} +7 -7
  196. package/dist/{server-context-BNbx1tUD.js → server-context-BsMQBnUG.js} +5 -5
  197. package/dist/{server-methods-BHg4GltA.js → server-methods-C2UnIkWU.js} +57 -57
  198. package/dist/{server-methods-DkZ2XtEo.js → server-methods-THO5vDXZ.js} +7 -7
  199. package/dist/{server-node-events-BXviL2UH.js → server-node-events-j4AWHS1m.js} +9 -9
  200. package/dist/{server-node-events-6dZ22EGj.js → server-node-events-mBi614x_.js} +46 -46
  201. package/dist/{service-9ItKCWWS.js → service-AP9pR9R5.js} +15 -15
  202. package/dist/{session-dirs-B6PWqKEf.js → session-dirs-Chh7bBGo.js} +2 -2
  203. package/dist/{session-utils-BVC8mmBv.js → session-utils-0F9pB5d6.js} +12 -12
  204. package/dist/{sessions-BaFVKzC2.js → sessions-DQMaURzb.js} +11 -11
  205. package/dist/{shared-DUmy8R4n.js → shared-4Z8Ut8Cs.js} +3 -3
  206. package/dist/{shared-ot5_jkpP.js → shared-DmYHvtn2.js} +1 -1
  207. package/dist/{skill-commands-DaNhP2Jb.js → skill-commands-Cwrebyvj.js} +5 -5
  208. package/dist/{skill-commands-X3T9Y9lT.js → skill-commands-DP1fshwh.js} +4 -4
  209. package/dist/{skill-scanner-DVq7ZopF.js → skill-scanner-qMQf6-FN.js} +5 -5
  210. package/dist/{skills-BMTJ2Tiq.js → skills-D0k4o0Ez.js} +6 -6
  211. package/dist/{skills-C_KgxpBD.js → skills-DL8DjveU.js} +4 -4
  212. package/dist/{skills-cli-DwYoPwkG.js → skills-cli-BkIH3HKr.js} +7 -7
  213. package/dist/{skills-install-U4FmCP8u.js → skills-install-C9uT4MR2.js} +3 -3
  214. package/dist/{skills-remote-C0gcKYWX.js → skills-remote-Db5Wwr4s.js} +3 -3
  215. package/dist/{skills-status-CdfQvU1h.js → skills-status-Dx3Lf5iU.js} +1 -1
  216. package/dist/{sqlite-C6MZhX4c.js → sqlite--aBEq1-J.js} +1 -1
  217. package/dist/{sqlite-BUXBg2yu.js → sqlite-DBEvS-Ne.js} +5 -5
  218. package/dist/{ssrf-BvjSIOlZ.js → ssrf-Dcgaqg3U.js} +9 -9
  219. package/dist/{status-CmoBgZ99.js → status-BtAHzMLu.js} +1 -1
  220. package/dist/{status-BK-ZK7SP.js → status-BuHx0FXI.js} +23 -23
  221. package/dist/{status-J_gR_zbh.js → status-FKqnkO3K.js} +1 -1
  222. package/dist/{status-BAnT_4qI.js → status-MkJRgsTJ.js} +3 -3
  223. package/dist/{status.update-Cvj7y384.js → status.update-CQ1vKrEg.js} +3 -3
  224. package/dist/{subagent-registry-CWolsN8K.js → subagent-registry-B1RgR3-0.js} +41 -218
  225. package/dist/{subsystem-DhOo2FZn.js → subsystem-DzRUKS9f.js} +1 -1
  226. package/dist/{symi-root-0MUhiNlM.js → symi-root-DueRHNOE.js} +2 -2
  227. package/dist/{synthesis-DTZGPpj5.js → synthesis-BEaISjwW.js} +5 -5
  228. package/dist/{synthesis-BSKiS446.js → synthesis-BSUjIY0v.js} +7 -7
  229. package/dist/{synthesis-CRQp5mTx.js → synthesis-BtlmxJ7w.js} +43 -43
  230. package/dist/{synthesis-D3wZX5g3.js → synthesis-DsYfiC2s.js} +28 -28
  231. package/dist/{system-cli-CUGyogmP.js → system-cli-5_JOcUt0.js} +7 -7
  232. package/dist/{systemd-8KKQdTO_.js → systemd-9LEEqibe.js} +5 -5
  233. package/dist/{systemd-hints-_ghBqtKo.js → systemd-hints-CeavseQh.js} +6 -6
  234. package/dist/{systemd-linger-CnKJZBUr.js → systemd-linger-PqG8iGCt.js} +1 -1
  235. package/dist/{thinking-BYtE7_UC.js → thinking-CMIo8E_E.js} +2 -2
  236. package/dist/{tokens-wW7opugV.js → tokens-BBh6tlmO.js} +2 -5
  237. package/dist/{tokens-DvvjOTxN.js → tokens-BKbemuIk.js} +1 -4
  238. package/dist/{tokens-CGqnWNmv.js → tokens-CJgPtOxz.js} +1 -4
  239. package/dist/{tokens-DJQ4rO24.js → tokens-K3kGchJA.js} +1 -4
  240. package/dist/{tool-loop-detection-DyZ0TWGh.js → tool-loop-detection-BR52lwOt.js} +2 -2
  241. package/dist/{tui-fKWqWqeq.js → tui-Bnusp3Vd.js} +7 -7
  242. package/dist/{tui-cli-BPOcMJ-f.js → tui-cli-BY8W9Yjm.js} +19 -19
  243. package/dist/{unified-runner-DftrstdI.js → unified-runner-BPyxPZv9.js} +75 -248
  244. package/dist/{unified-runner-Cdj1nLUh.js → unified-runner-Bn9vq7Zy.js} +132 -309
  245. package/dist/{update-XJWQZpV7.js → update-BvDXKE6K.js} +3 -3
  246. package/dist/{update-check-BdSIMYWq.js → update-check-CZxZhEXr.js} +5 -5
  247. package/dist/{update-cli-jQo-vg6S.js → update-cli-BXtHo0ox.js} +12 -12
  248. package/dist/{update-cli-D_MLjj6j.js → update-cli-DLx7LNVB.js} +75 -75
  249. package/dist/{update-runner-D_UHlPN0.js → update-runner-C8L4XRQb.js} +15 -15
  250. package/dist/{webhooks-cli-DgRLVVrD.js → webhooks-cli-CXbv4eB6.js} +4 -4
  251. package/dist/{with-timeout-DwVWQ2sN.js → with-timeout-C0UtpXBj.js} +1 -1
  252. package/dist/{workspace-OBnI5mKu.js → workspace-CsaDUuDn.js} +2 -2
  253. package/dist/{workspace-dirs-DStsDXra.js → workspace-dirs-gn_0yzFP.js} +1 -1
  254. package/dist/{wsl-DO9usEVV.js → wsl-ZWGwnnKI.js} +2 -2
  255. package/package.json +1 -1
  256. package/dist/plugin-sdk/auto-reply/heartbeat.d.ts +0 -26
  257. package/dist/plugin-sdk/auto-reply/reply/middleware-heartbeat-strip.d.ts +0 -25
@@ -3,86 +3,86 @@ import { D as shouldLogVerbose, H as createInternalHookEvent, M as getChildLogge
3
3
  import { g as resolveStateDir, u as resolveGatewayPort } from "./paths-BSzKwaxE.js";
4
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
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";
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-CPlXilKu.js";
7
7
  import { t as formatCliCommand } from "./command-format-BvAkTjTI.js";
8
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";
9
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-DueRHNOE.js";
10
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";
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-B_oqIiaD.js";
12
12
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-BTNK6Tcd.js";
13
13
  import { t as parseBooleanValue } from "./boolean-Wzu0-e0P.js";
14
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";
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-BRM8EM4P.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-CphS_6eg.js";
17
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
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";
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-CQU7Gcb9.js";
20
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-owBWinlj.js";
21
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-BsMQBnUG.js";
22
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";
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-DL8DjveU.js";
24
+ import { n as getMediaDir, r as saveMediaBuffer } from "./routes-BJ2iXVJF.js";
25
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";
26
+ import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-Dc6A9_vI.js";
27
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";
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-C-gIIp7Q.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-DQMaURzb.js";
30
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
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
32
  import { t as normalizeChatType } from "./chat-type-B7XD_ESN.js";
33
33
  import { n as resolveConversationLabel } from "./conversation-label-CS5Zjc4w.js";
34
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";
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-BAKkoPOy.js";
36
36
  import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, t as resolveDefaultSessionStorePath } from "./paths-CJcw9nbZ.js";
37
37
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-DsLesw6T.js";
38
38
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-Ch7wLX-j.js";
39
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";
40
+ import { n as isSilentReplyText, t as SILENT_REPLY_TOKEN } from "./tokens-BKbemuIk.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-63FtOVMC.js";
42
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-DRgHv7Ss.js";
45
- import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-DGZH6URT.js";
44
+ import { t as ensureSymiModelsJson } from "./models-config-CFUwiu4W.js";
45
+ import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-1Z1j1PDI.js";
46
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";
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-0F9pB5d6.js";
48
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-C0UtpXBj.js";
49
+ import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-xaWqfM9m.js";
50
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-2OKjMT7V.js";
51
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-BQ5Wl5r-.js";
52
+ import { f as runTasksWithConcurrency } from "./internal-CHnZdvRy.js";
53
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
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
56
  import { t as fetchWithSsrFGuard } from "./fetch-guard-DG6T0ZdL.js";
57
- import { n as getDefaultMediaLocalRoots } from "./local-roots-CTriU02e.js";
57
+ import { n as getDefaultMediaLocalRoots } from "./local-roots-JhQs5w0I.js";
58
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";
59
+ import { a as shouldHandleTextCommands, i as normalizeCommandBody, n as listChatCommands, r as listChatCommandsForConfig } from "./commands-registry-W2GQIywv.js";
60
+ import { Rt as SESSION_LABEL_MAX_LENGTH } from "./client-ZZqt0H0-.js";
61
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-Du4CT1Hp.js";
62
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
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";
65
+ import { g as getSkillsSnapshotVersion, h as ensureSkillsWatcher, t as getRemoteSkillEligibility } from "./skills-remote-Db5Wwr4s.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-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";
67
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-DKBhNiWm.js";
68
+ import { i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames } from "./skill-commands-DP1fshwh.js";
69
+ import { a as removeChannelAllowFromStoreEntry, c as listPairingChannels, i as readChannelAllowFromStore, o as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-mmeniyUt.js";
70
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";
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-JELuBMBi.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-Drd2sr2o.js";
77
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-CMVDL3Yl.js";
78
78
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BhvnarfO.js";
79
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";
80
+ import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-DKhx5C-P.js";
81
81
  import { t as parseTimeoutMs } from "./parse-timeout-CpgyC-LD.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";
82
+ import { n as registerMemoryCli } from "./memory-cli-CmPcKzGZ.js";
83
+ import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-P7jbK6Bo.js";
84
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-BBHbN8Nh.js";
85
+ import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-BKtw-Bqs.js";
86
86
  import { createRequire } from "node:module";
87
87
  import process$1 from "node:process";
88
88
  import { fileURLToPath } from "node:url";
@@ -91,7 +91,7 @@ import path from "node:path";
91
91
  import fs, { constants, existsSync, statSync } from "node:fs";
92
92
  import os, { homedir } from "node:os";
93
93
  import JSON5 from "json5";
94
- import fsPromises from "node:fs/promises";
94
+ import fs$1 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";
@@ -1057,17 +1057,11 @@ function resolveModelProfile(modelId, userProfiles) {
1057
1057
  //#endregion
1058
1058
  //#region src/gateway/outbound-filter.ts
1059
1059
  const SILENT_REPLY_BARE_RE = new RegExp(`^\\s*(?:["'\`]|\\*+|_+)?\\s*${SILENT_REPLY_TOKEN}\\s*(?:["'\`]|\\*+|_+)?\\s*$`);
1060
- const SYMIPULSE_BARE_RE = new RegExp(`^\\s*(?:["'\`]|\\*+|_+)?\\s*${SYMIPULSE_TOKEN}\\s*(?:["'\`]|\\*+|_+)?\\s*$`);
1061
1060
  /** Strict-match check for the bare NO_REPLY token. */
1062
1061
  function isBareSilentReply(text) {
1063
1062
  if (!text) return false;
1064
1063
  return SILENT_REPLY_BARE_RE.test(text);
1065
1064
  }
1066
- /** Strict-match check for the bare SYMIPULSE_OK token. */
1067
- function isBareSymipulseAck(text) {
1068
- if (!text) return false;
1069
- return SYMIPULSE_BARE_RE.test(text);
1070
- }
1071
1065
  /**
1072
1066
  * Classify an outbound assistant message at the gateway boundary.
1073
1067
  *
@@ -1081,11 +1075,6 @@ function classifyOutboundMessage(rawText, _opts) {
1081
1075
  output: "",
1082
1076
  reason: "silent-reply-bare"
1083
1077
  };
1084
- if (isBareSymipulseAck(text)) return {
1085
- action: "drop",
1086
- output: "",
1087
- reason: "symipulse-non-heartbeat-bare"
1088
- };
1089
1078
  return {
1090
1079
  action: "deliver",
1091
1080
  output: text,
@@ -1852,7 +1841,7 @@ async function imageResult(params) {
1852
1841
  }, params.label, params.imageSanitization);
1853
1842
  }
1854
1843
  async function imageResultFromFile(params) {
1855
- const buf = await fsPromises.readFile(params.path);
1844
+ const buf = await fs$1.readFile(params.path);
1856
1845
  const mimeType = await detectMime({ buffer: buf.slice(0, 256) }) ?? "image/png";
1857
1846
  return await imageResult({
1858
1847
  label: params.label,
@@ -4603,8 +4592,6 @@ function buildAgentSystemPrompt(params) {
4603
4592
  const reasoningLevel = params.reasoningLevel ?? "off";
4604
4593
  const userTimezone = params.userTimezone?.trim();
4605
4594
  const skillsPrompt = params.skillsPrompt?.trim();
4606
- const heartbeatPrompt = params.heartbeatPrompt?.trim();
4607
- const heartbeatPromptLine = heartbeatPrompt ? `Heartbeat prompt: ${heartbeatPrompt}` : "Heartbeat prompt: (configured)";
4608
4595
  const runtimeInfo = params.runtimeInfo;
4609
4596
  const runtimeChannel = runtimeInfo?.channel?.trim().toLowerCase();
4610
4597
  const runtimeCapabilities = (runtimeInfo?.capabilities ?? []).map((cap) => String(cap).trim()).filter(Boolean);
@@ -4817,7 +4804,6 @@ function buildAgentSystemPrompt(params) {
4817
4804
  for (const file of validContextFiles) lines.push(`## ${file.path}`, "", file.content, "");
4818
4805
  }
4819
4806
  if (!isMinimal && !isCoding) lines.push("## Silent Replies", `When you have nothing to say, respond with ONLY: ${SILENT_REPLY_TOKEN}`, "", "⚠️ Rules:", "- It must be your ENTIRE message — nothing else", `- Never append it to an actual response (never include "${SILENT_REPLY_TOKEN}" in real replies)`, "- Never wrap it in markdown or code blocks", "", `❌ Wrong: "Here's help... ${SILENT_REPLY_TOKEN}"`, `❌ Wrong: "${SILENT_REPLY_TOKEN}"`, `✅ Right: ${SILENT_REPLY_TOKEN}`, "");
4820
- if (!isMinimal && !isCoding) lines.push("## Heartbeats", heartbeatPromptLine, "If you receive a heartbeat poll (a user message matching the heartbeat prompt above), and there is nothing that needs attention, reply exactly:", "SYMIPULSE_OK", "Symi treats a leading/trailing \"SYMIPULSE_OK\" as a heartbeat ack (and may discard it).", "If something needs attention, do NOT include \"SYMIPULSE_OK\"; reply with the alert text instead.", "");
4821
4807
  lines.push("## Runtime", buildRuntimeLine(runtimeInfo, runtimeChannel, runtimeCapabilities, params.defaultThinkLevel), `Reasoning: ${reasoningLevel} (hidden unless on/stream). Toggle /reasoning; /status shows Reasoning when enabled.`);
4822
4808
  return lines.filter(Boolean).join("\n");
4823
4809
  }
@@ -4861,10 +4847,8 @@ function buildEmbeddedSystemPrompt(params) {
4861
4847
  ownerDisplay: params.ownerDisplay,
4862
4848
  ownerDisplaySecret: params.ownerDisplaySecret,
4863
4849
  reasoningTagHint: params.reasoningTagHint,
4864
- heartbeatPrompt: params.heartbeatPrompt,
4865
4850
  skillsPrompt: params.skillsPrompt,
4866
4851
  docsPath: params.docsPath,
4867
- ttsHint: params.ttsHint,
4868
4852
  workspaceNotes: params.workspaceNotes,
4869
4853
  reactionGuidance: params.reactionGuidance,
4870
4854
  promptMode: params.promptMode,
@@ -5730,97 +5714,6 @@ function clearSessionQueues(keys) {
5730
5714
  };
5731
5715
  }
5732
5716
 
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
-
5824
5717
  //#endregion
5825
5718
  //#region src/auto-reply/reply/normalize-reply.ts
5826
5719
  function normalizeReplyPayload(payload, opts = {}) {
@@ -5841,15 +5734,6 @@ function normalizeReplyPayload(payload, opts = {}) {
5841
5734
  text = "";
5842
5735
  }
5843
5736
  if (text && !trimmed) text = "";
5844
- if ((opts.stripHeartbeat ?? true) && text?.includes(HEARTBEAT_TOKEN)) {
5845
- const stripped = stripHeartbeatToken(text, { mode: "message" });
5846
- if (stripped.didStrip) opts.onHeartbeatStrip?.();
5847
- if (stripped.shouldSkip && !hasMedia && !hasChannelData) {
5848
- opts.onSkip?.("heartbeat");
5849
- return null;
5850
- }
5851
- text = stripped.text;
5852
- }
5853
5737
  if (text) text = sanitizeUserFacingText(text, { errorContext: Boolean(payload.isError) });
5854
5738
  if (!text?.trim() && !hasMedia && !hasChannelData) {
5855
5739
  opts.onSkip?.("empty");
@@ -5860,7 +5744,7 @@ function normalizeReplyPayload(payload, opts = {}) {
5860
5744
  text
5861
5745
  };
5862
5746
  const effectivePrefix = opts.responsePrefixContext ? resolveResponsePrefixTemplate(opts.responsePrefix, opts.responsePrefixContext) : opts.responsePrefix;
5863
- if (effectivePrefix && text && text.trim() !== HEARTBEAT_TOKEN && !text.startsWith(effectivePrefix)) text = `${effectivePrefix} ${text}`;
5747
+ if (effectivePrefix && text && !text.startsWith(effectivePrefix)) text = `${effectivePrefix} ${text}`;
5864
5748
  return {
5865
5749
  ...enrichedPayload,
5866
5750
  text
@@ -5917,7 +5801,7 @@ async function routeReply(params) {
5917
5801
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
5918
5802
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
5919
5803
  try {
5920
- const { deliverOutboundPayloads } = await import("./deliver-DZ7ynJYH.js").then((n) => n.n);
5804
+ const { deliverOutboundPayloads } = await import("./deliver-63FtOVMC.js").then((n) => n.n);
5921
5805
  return {
5922
5806
  ok: true,
5923
5807
  messageId: (await deliverOutboundPayloads({
@@ -11762,7 +11646,7 @@ var MediaAttachmentCache = class {
11762
11646
  const size = await this.ensureLocalStat(entry);
11763
11647
  if (entry.resolvedPath) {
11764
11648
  if (size !== void 0 && size > params.maxBytes) throw new MediaUnderstandingSkipError("maxBytes", `Attachment ${params.attachmentIndex + 1} exceeds maxBytes ${params.maxBytes}`);
11765
- const buffer = await fsPromises.readFile(entry.resolvedPath);
11649
+ const buffer = await fs$1.readFile(entry.resolvedPath);
11766
11650
  entry.buffer = buffer;
11767
11651
  entry.bufferMime = entry.bufferMime ?? entry.attachment.mime ?? await detectMime({
11768
11652
  buffer,
@@ -11832,10 +11716,10 @@ var MediaAttachmentCache = class {
11832
11716
  prefix: "symi-media",
11833
11717
  extension: path.extname(bufferResult.fileName || "") || ""
11834
11718
  });
11835
- await fsPromises.writeFile(tmpPath, bufferResult.buffer);
11719
+ await fs$1.writeFile(tmpPath, bufferResult.buffer);
11836
11720
  entry.tempPath = tmpPath;
11837
11721
  entry.tempCleanup = async () => {
11838
- await fsPromises.unlink(tmpPath).catch(() => {});
11722
+ await fs$1.unlink(tmpPath).catch(() => {});
11839
11723
  };
11840
11724
  return {
11841
11725
  path: tmpPath,
@@ -11882,12 +11766,12 @@ var MediaAttachmentCache = class {
11882
11766
  if (entry.statSize !== void 0) return entry.statSize;
11883
11767
  try {
11884
11768
  const currentPath = entry.resolvedPath;
11885
- const stat = await fsPromises.stat(currentPath);
11769
+ const stat = await fs$1.stat(currentPath);
11886
11770
  if (!stat.isFile()) {
11887
11771
  entry.resolvedPath = void 0;
11888
11772
  return;
11889
11773
  }
11890
- const canonicalPath = await fsPromises.realpath(currentPath).catch(() => currentPath);
11774
+ const canonicalPath = await fs$1.realpath(currentPath).catch(() => currentPath);
11891
11775
  if (!isInboundPathAllowed({
11892
11776
  filePath: canonicalPath,
11893
11777
  roots: await this.getCanonicalLocalPathRoots()
@@ -11909,7 +11793,7 @@ var MediaAttachmentCache = class {
11909
11793
  if (this.canonicalLocalPathRoots) return await this.canonicalLocalPathRoots;
11910
11794
  this.canonicalLocalPathRoots = (async () => mergeInboundPathRoots(this.localPathRoots, await Promise.all(this.localPathRoots.map(async (root) => {
11911
11795
  if (root.includes("*")) return root;
11912
- return await fsPromises.realpath(root).catch(() => root);
11796
+ return await fs$1.realpath(root).catch(() => root);
11913
11797
  }))))();
11914
11798
  return await this.canonicalLocalPathRoots;
11915
11799
  }
@@ -11980,7 +11864,7 @@ function formatAudioTranscripts(outputs) {
11980
11864
  async function fileExists(filePath) {
11981
11865
  if (!filePath) return false;
11982
11866
  try {
11983
- await fsPromises.stat(filePath);
11867
+ await fs$1.stat(filePath);
11984
11868
  return true;
11985
11869
  } catch {
11986
11870
  return false;
@@ -12080,7 +11964,7 @@ async function resolveCliOutput(params) {
12080
11964
  const commandId = commandBase(params.command);
12081
11965
  const fileOutput = commandId === "whisper-cli" ? resolveWhisperCppOutputPath(params.args) : commandId === "whisper" ? resolveWhisperOutputPath(params.args, params.mediaPath) : null;
12082
11966
  if (fileOutput && await fileExists(fileOutput)) try {
12083
- const content = await fsPromises.readFile(fileOutput, "utf8");
11967
+ const content = await fs$1.readFile(fileOutput, "utf8");
12084
11968
  if (content.trim()) return content.trim();
12085
11969
  } catch {}
12086
11970
  if (commandId === "gemini") {
@@ -12371,7 +12255,7 @@ async function runCliEntry(params) {
12371
12255
  maxBytes,
12372
12256
  timeoutMs
12373
12257
  });
12374
- const outputDir = await fsPromises.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12258
+ const outputDir = await fs$1.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12375
12259
  const mediaPath = pathResult.path;
12376
12260
  const outputBase = path.join(outputDir, path.parse(mediaPath).name);
12377
12261
  const templCtx = {
@@ -12405,7 +12289,7 @@ async function runCliEntry(params) {
12405
12289
  model: command
12406
12290
  };
12407
12291
  } finally {
12408
- await fsPromises.rm(outputDir, {
12292
+ await fs$1.rm(outputDir, {
12409
12293
  recursive: true,
12410
12294
  force: true
12411
12295
  }).catch(() => {});
@@ -12449,9 +12333,9 @@ function candidateBinaryNames(name) {
12449
12333
  }
12450
12334
  async function isExecutable$1(filePath) {
12451
12335
  try {
12452
- if (!(await fsPromises.stat(filePath)).isFile()) return false;
12336
+ if (!(await fs$1.stat(filePath)).isFile()) return false;
12453
12337
  if (process.platform === "win32") return true;
12454
- await fsPromises.access(filePath, constants.X_OK);
12338
+ await fs$1.access(filePath, constants.X_OK);
12455
12339
  return true;
12456
12340
  } catch {
12457
12341
  return false;
@@ -14155,7 +14039,7 @@ async function createModelSelectionState(params) {
14155
14039
  }
14156
14040
  }
14157
14041
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
14158
- const { ensureAuthProfileStore } = await import("./auth-profiles-BVtpxYtY.js").then((n) => n.t);
14042
+ const { ensureAuthProfileStore } = await import("./auth-profiles-CPlXilKu.js").then((n) => n.t);
14159
14043
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
14160
14044
  const providerKey = normalizeProviderId(provider);
14161
14045
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -17299,7 +17183,7 @@ async function resolveSandboxWorkdir(params) {
17299
17183
  cwd: process.cwd(),
17300
17184
  root: params.sandbox.workspaceDir
17301
17185
  });
17302
- if (!(await fsPromises.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17186
+ if (!(await fs$1.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17303
17187
  const relative = resolved.relative ? resolved.relative.split(path.sep).join(path.posix.sep) : "";
17304
17188
  const containerWorkdir = relative ? path.posix.join(params.sandbox.containerWorkdir, relative) : params.sandbox.containerWorkdir;
17305
17189
  return {
@@ -18313,13 +18197,13 @@ async function validateScriptFileForShellBleed(params) {
18313
18197
  cwd: params.workdir,
18314
18198
  root: params.workdir
18315
18199
  });
18316
- stat = await fsPromises.stat(absPath);
18200
+ stat = await fs$1.stat(absPath);
18317
18201
  } catch {
18318
18202
  return;
18319
18203
  }
18320
18204
  if (!stat.isFile()) return;
18321
18205
  if (stat.size > 512 * 1024) return;
18322
- const content = await fsPromises.readFile(absPath, "utf-8");
18206
+ const content = await fs$1.readFile(absPath, "utf-8");
18323
18207
  const first = /\$[A-Z_][A-Z0-9_]{1,}/g.exec(content);
18324
18208
  if (first) {
18325
18209
  const idx = first.index;
@@ -20755,7 +20639,6 @@ async function resolveCommandsSystemPromptBundle(params) {
20755
20639
  userTimeFormat,
20756
20640
  contextFiles: injectedFiles,
20757
20641
  skillsPrompt,
20758
- heartbeatPrompt: void 0,
20759
20642
  runtimeInfo,
20760
20643
  sandboxInfo,
20761
20644
  memoryCitationsMode: params.cfg?.memory?.citations
@@ -22996,7 +22879,7 @@ async function handleCommands(params) {
22996
22879
  try {
22997
22880
  const messages = [];
22998
22881
  if (sessionFile) {
22999
- const content = await fsPromises.readFile(sessionFile, "utf-8");
22882
+ const content = await fs$1.readFile(sessionFile, "utf-8");
23000
22883
  for (const line of content.split("\n")) {
23001
22884
  if (!line.trim()) continue;
23002
22885
  try {
@@ -25183,7 +25066,7 @@ async function readJsonlFromPath(jsonlPath) {
25183
25066
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${resolved}`);
25184
25067
  throw new Error("jsonlPath outside allowed roots");
25185
25068
  }
25186
- const canonical = await fsPromises.realpath(resolved).catch(() => resolved);
25069
+ const canonical = await fs$1.realpath(resolved).catch(() => resolved);
25187
25070
  if (!isInboundPathAllowed({
25188
25071
  filePath: canonical,
25189
25072
  roots
@@ -25191,7 +25074,7 @@ async function readJsonlFromPath(jsonlPath) {
25191
25074
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${canonical}`);
25192
25075
  throw new Error("jsonlPath outside allowed roots");
25193
25076
  }
25194
- return await fsPromises.readFile(canonical, "utf8");
25077
+ return await fs$1.readFile(canonical, "utf8");
25195
25078
  }
25196
25079
  const CanvasToolSchema = Type.Object({
25197
25080
  action: stringEnum(CANVAS_ACTIONS),
@@ -26734,7 +26617,7 @@ async function hydrateAttachmentPayload(params) {
26734
26617
  accountId: params.accountId
26735
26618
  }),
26736
26619
  sandboxValidated: true,
26737
- readFile: (filePath) => fsPromises.readFile(filePath)
26620
+ readFile: (filePath) => fs$1.readFile(filePath)
26738
26621
  });
26739
26622
  params.args.buffer = media.buffer.toString("base64");
26740
26623
  if (!contentTypeParam && media.contentType) params.args.contentType = media.contentType;
@@ -33228,7 +33111,7 @@ async function deliverSessionMaintenanceWarning(params) {
33228
33111
  return;
33229
33112
  }
33230
33113
  try {
33231
- const { deliverOutboundPayloads } = await import("./deliver-DZ7ynJYH.js").then((n) => n.n);
33114
+ const { deliverOutboundPayloads } = await import("./deliver-63FtOVMC.js").then((n) => n.n);
33232
33115
  await deliverOutboundPayloads({
33233
33116
  cfg: params.cfg,
33234
33117
  channel,
@@ -33633,7 +33516,7 @@ async function stageSandboxMedia(params) {
33633
33516
  };
33634
33517
  try {
33635
33518
  const destDir = sandbox ? path.join(effectiveWorkspaceDir, "media", "inbound") : effectiveWorkspaceDir;
33636
- await fsPromises.mkdir(destDir, { recursive: true });
33519
+ await fs$1.mkdir(destDir, { recursive: true });
33637
33520
  const remoteAttachmentRoots = resolveIMessageRemoteAttachmentRoots({
33638
33521
  cfg,
33639
33522
  accountId: ctx.AccountId
@@ -33683,7 +33566,7 @@ async function stageSandboxMedia(params) {
33683
33566
  usedNames.add(fileName);
33684
33567
  const dest = path.join(destDir, fileName);
33685
33568
  if (ctx.MediaRemoteHost) await scpFile(ctx.MediaRemoteHost, source, dest);
33686
- else await fsPromises.copyFile(source, dest);
33569
+ else await fs$1.copyFile(source, dest);
33687
33570
  const stagedPath = sandbox ? path.posix.join("media", "inbound", fileName) : dest;
33688
33571
  staged.set(source, stagedPath);
33689
33572
  }
@@ -34736,54 +34619,6 @@ function withFastAbort(opts) {
34736
34619
  };
34737
34620
  }
34738
34621
 
34739
- //#endregion
34740
- //#region src/auto-reply/reply/middleware-heartbeat-strip.ts
34741
- /**
34742
- * Returns a PayloadMiddleware that strips heartbeat tokens, drops silent
34743
- * replies, and sanitizes user-facing text. Reads `ctx.isHeartbeat` to
34744
- * decide whether to strip; reads `payload.isError` to give the sanitizer
34745
- * the right context flag.
34746
- *
34747
- * Equivalence claim (proven by tests): for every input shape the chain's
34748
- * `normalizeStreamingText({text})` would have produced `{ skip, text }`,
34749
- * this middleware produces the corresponding `PayloadDelivery`:
34750
- *
34751
- * skip=true → delivered=false (drop)
34752
- * skip=false, text=undefined → delivered=true with payload.text undefined
34753
- * (media-only carry-through case)
34754
- * skip=false, text=string → delivered=true with payload.text=sanitized
34755
- */
34756
- function withHeartbeatStrip(opts) {
34757
- let didLogStrip = false;
34758
- return (next) => async (payload, ctx) => {
34759
- let text = payload.text;
34760
- const hasMedia = Boolean(payload.mediaUrl) || (payload.mediaUrls?.length ?? 0) > 0;
34761
- if (typeof text === "string" && text.includes("SYMIPULSE_OK")) {
34762
- const stripped = stripHeartbeatToken(text, { mode: "message" });
34763
- if (stripped.didStrip && !didLogStrip) {
34764
- didLogStrip = true;
34765
- opts?.onStrip?.();
34766
- }
34767
- if (stripped.shouldSkip && !hasMedia) return PayloadDelivery.drop(payload, "drop:heartbeat-token-bare");
34768
- text = stripped.text;
34769
- }
34770
- if (isSilentReplyText(text, SILENT_REPLY_TOKEN)) return PayloadDelivery.drop(payload, "drop:silent-reply");
34771
- if (!text) {
34772
- if (hasMedia) return next({
34773
- ...payload,
34774
- text: void 0
34775
- }, ctx);
34776
- return PayloadDelivery.drop(payload, "drop:empty");
34777
- }
34778
- const sanitized = sanitizeUserFacingText(text, { errorContext: Boolean(payload.isError) });
34779
- if (!sanitized.trim()) return PayloadDelivery.drop(payload, "drop:empty-after-sanitize");
34780
- return next({
34781
- ...payload,
34782
- text: sanitized
34783
- }, ctx);
34784
- };
34785
- }
34786
-
34787
34622
  //#endregion
34788
34623
  //#region src/infra/map-size.ts
34789
34624
  function pruneMapToMaxSize(map, maxSize) {
@@ -35059,25 +34894,22 @@ function withToolResultSerialization(opts) {
35059
34894
  * session transcript after the inner runner completes.
35060
34895
  *
35061
34896
  * Skip conditions:
35062
- * - outbound.action === "drop" (NO_REPLY / heartbeat ack — no message)
34897
+ * - outbound.action === "drop" (NO_REPLY — no message)
35063
34898
  * - empty / whitespace-only text
35064
- * - outbound.action === "deliver-stripped" AND includeStripped=false
35065
34899
  *
35066
34900
  * The middleware does NOT mutate the turn result — the append is a
35067
34901
  * post-turn side effect. The result is returned unchanged regardless of
35068
34902
  * append success/failure.
35069
34903
  */
35070
34904
  function withTranscriptUpdate(opts) {
35071
- const includeStripped = opts.includeStripped !== false;
35072
34905
  return (next) => async (params) => {
35073
34906
  const result = await next(params);
35074
- if (shouldAppend(result, includeStripped)) await runAppend(opts, params, result);
34907
+ if (shouldAppend(result)) await runAppend(opts, params, result);
35075
34908
  return result;
35076
34909
  };
35077
34910
  }
35078
- function shouldAppend(result, includeStripped) {
34911
+ function shouldAppend(result) {
35079
34912
  if (result.outbound.action === "drop") return false;
35080
- if (result.outbound.action === "deliver-stripped" && !includeStripped) return false;
35081
34913
  return (typeof result.text === "string" ? result.text.trim() : "").length > 0;
35082
34914
  }
35083
34915
  async function runAppend(opts, params, result) {
@@ -35161,7 +34993,6 @@ function buildChannelProfile(opts) {
35161
34993
  ],
35162
34994
  payloadMiddlewares: [
35163
34995
  withPayloadDropOnEmpty(),
35164
- withHeartbeatStrip(),
35165
34996
  ...opts.typingSignaler ? [withTypingSignals({ signaler: opts.typingSignaler })] : [],
35166
34997
  withToolResultSerialization(),
35167
34998
  withChannelRouting({
@@ -35190,11 +35021,7 @@ function buildGlassUiProfile(opts) {
35190
35021
  withModelFallback(),
35191
35022
  ...opts.transcriptAppender ? [withTranscriptUpdate({ appender: opts.transcriptAppender })] : []
35192
35023
  ],
35193
- payloadMiddlewares: [
35194
- withPayloadDropOnEmpty(),
35195
- withHeartbeatStrip(),
35196
- withToolResultSerialization()
35197
- ],
35024
+ payloadMiddlewares: [withPayloadDropOnEmpty(), withToolResultSerialization()],
35198
35025
  payloadHandler: createReplyDispatcherHandler(opts.dispatcher)
35199
35026
  };
35200
35027
  }
@@ -35335,7 +35162,6 @@ function normalizeReplyPayloadInternal(payload, opts) {
35335
35162
  return normalizeReplyPayload(payload, {
35336
35163
  responsePrefix: opts.responsePrefix,
35337
35164
  responsePrefixContext: prefixContext,
35338
- onHeartbeatStrip: opts.onHeartbeatStrip,
35339
35165
  onSkip: opts.onSkip
35340
35166
  });
35341
35167
  }
@@ -35358,7 +35184,6 @@ function createReplyDispatcher(options) {
35358
35184
  responsePrefix: options.responsePrefix,
35359
35185
  responsePrefixContext: options.responsePrefixContext,
35360
35186
  responsePrefixContextProvider: options.responsePrefixContextProvider,
35361
- onHeartbeatStrip: options.onHeartbeatStrip,
35362
35187
  onSkip: (reason) => options.onSkip?.(payload, {
35363
35188
  kind,
35364
35189
  reason
@@ -39052,7 +38877,7 @@ function readSlackExternalArgMenuToken(raw) {
39052
38877
  }
39053
38878
  let commandsRegistry;
39054
38879
  async function getCommandsRegistry() {
39055
- if (!commandsRegistry) commandsRegistry = await import("./commands-registry-DYk02tmt.js").then((n) => n.t);
38880
+ if (!commandsRegistry) commandsRegistry = await import("./commands-registry-W2GQIywv.js").then((n) => n.t);
39056
38881
  return commandsRegistry;
39057
38882
  }
39058
38883
  function encodeSlackCommandArgValue(parts) {
@@ -39394,11 +39219,11 @@ async function registerSlackMonitorSlashCommands(params) {
39394
39219
  const channelName = channelInfo?.name;
39395
39220
  const roomLabel = channelName ? `#${channelName}` : `#${command.channel_id}`;
39396
39221
  const [{ resolveAgentRoute }, { finalizeInboundContext }, { dispatchReplyWithDispatcher }] = await Promise.all([
39397
- import("./resolve-route-xpyI3enn.js").then((n) => n.r),
39222
+ import("./resolve-route-DKhx5C-P.js").then((n) => n.r),
39398
39223
  import("./inbound-context-DqAyGDbE.js").then((n) => n.n),
39399
39224
  Promise.resolve().then(() => provider_dispatcher_exports)
39400
39225
  ]);
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)]);
39226
+ const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-CS5Zjc4w.js").then((n) => n.t), import("./reply-prefix-xaWqfM9m.js").then((n) => n.n)]);
39402
39227
  const route = resolveAgentRoute({
39403
39228
  cfg,
39404
39229
  channel: "slack",
@@ -39455,7 +39280,7 @@ async function registerSlackMonitorSlashCommands(params) {
39455
39280
  });
39456
39281
  const deliverSlashPayloads = async (replies) => {
39457
39282
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
39458
- import("./replies-Dqft-42v.js").then((n) => n.r),
39283
+ import("./replies-P7jbK6Bo.js").then((n) => n.r),
39459
39284
  import("./chunk-DQGU0F8t.js").then((n) => n.s),
39460
39285
  import("./markdown-tables-GTLvbzuR.js").then((n) => n.t)
39461
39286
  ]);
@@ -39510,7 +39335,7 @@ async function registerSlackMonitorSlashCommands(params) {
39510
39335
  let nativeCommands = [];
39511
39336
  if (nativeEnabled) {
39512
39337
  reg = await getCommandsRegistry();
39513
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-X3T9Y9lT.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39338
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DP1fshwh.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39514
39339
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
39515
39340
  skillCommands,
39516
39341
  provider: "slack"
@@ -40643,7 +40468,7 @@ function resolvePluginTools(params) {
40643
40468
  //#endregion
40644
40469
  //#region src/agents/apply-patch-update.ts
40645
40470
  async function defaultReadFile(filePath) {
40646
- return fsPromises.readFile(filePath, "utf8");
40471
+ return fs$1.readFile(filePath, "utf8");
40647
40472
  }
40648
40473
  async function applyUpdateHunk(filePath, chunks, options) {
40649
40474
  const originalLines = (await (options?.readFile ?? defaultReadFile)(filePath).catch((err) => {
@@ -40887,10 +40712,10 @@ function resolvePatchFileOps(options) {
40887
40712
  };
40888
40713
  }
40889
40714
  return {
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(() => {})
40715
+ readFile: (filePath) => fs$1.readFile(filePath, "utf8"),
40716
+ writeFile: (filePath, content) => fs$1.writeFile(filePath, content, "utf8"),
40717
+ remove: (filePath) => fs$1.rm(filePath),
40718
+ mkdirp: (dir) => fs$1.mkdir(dir, { recursive: true }).then(() => {})
40894
40719
  };
40895
40720
  }
40896
40721
  async function ensureDir(filePath, ops) {
@@ -42057,7 +41882,7 @@ async function repairSessionFileIfNeeded(params) {
42057
41882
  };
42058
41883
  let content;
42059
41884
  try {
42060
- content = await fsPromises.readFile(sessionFile, "utf-8");
41885
+ content = await fs$1.readFile(sessionFile, "utf-8");
42061
41886
  } catch (err) {
42062
41887
  if (err?.code === "ENOENT") return {
42063
41888
  repaired: false,
@@ -42105,15 +41930,15 @@ async function repairSessionFileIfNeeded(params) {
42105
41930
  const backupPath = `${sessionFile}.bak-${process.pid}-${Date.now()}`;
42106
41931
  const tmpPath = `${sessionFile}.repair-${process.pid}-${Date.now()}.tmp`;
42107
41932
  try {
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);
41933
+ const stat = await fs$1.stat(sessionFile).catch(() => null);
41934
+ await fs$1.writeFile(backupPath, content, "utf-8");
41935
+ if (stat) await fs$1.chmod(backupPath, stat.mode);
41936
+ await fs$1.writeFile(tmpPath, cleaned, "utf-8");
41937
+ if (stat) await fs$1.chmod(tmpPath, stat.mode);
41938
+ await fs$1.rename(tmpPath, sessionFile);
42114
41939
  } catch (err) {
42115
41940
  try {
42116
- await fsPromises.unlink(tmpPath);
41941
+ await fs$1.unlink(tmpPath);
42117
41942
  } catch (cleanupErr) {
42118
41943
  params.warn?.(`session file repair cleanup failed: ${cleanupErr instanceof Error ? cleanupErr.message : "unknown error"} (${path.basename(tmpPath)})`);
42119
41944
  }
@@ -43386,7 +43211,7 @@ async function prewarmSessionFile(sessionFile) {
43386
43211
  if (!isSessionManagerCacheEnabled()) return;
43387
43212
  if (isSessionManagerCached(sessionFile)) return;
43388
43213
  try {
43389
- const handle = await fsPromises.open(sessionFile, "r");
43214
+ const handle = await fs$1.open(sessionFile, "r");
43390
43215
  try {
43391
43216
  const buffer = Buffer$1.alloc(4096);
43392
43217
  await handle.read(buffer, 0, buffer.length, 0);
@@ -43526,7 +43351,7 @@ async function compactEmbeddedPiSessionDirect(params) {
43526
43351
  } catch (err) {
43527
43352
  return fail(describeUnknownError(err));
43528
43353
  }
43529
- await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
43354
+ await fs$1.mkdir(resolvedWorkspace, { recursive: true });
43530
43355
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
43531
43356
  const sandbox = await resolveSandboxContext({
43532
43357
  config: params.config,
@@ -43534,7 +43359,7 @@ async function compactEmbeddedPiSessionDirect(params) {
43534
43359
  workspaceDir: resolvedWorkspace
43535
43360
  });
43536
43361
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
43537
- await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
43362
+ await fs$1.mkdir(effectiveWorkspace, { recursive: true });
43538
43363
  await ensureSessionHeader({
43539
43364
  sessionFile: params.sessionFile,
43540
43365
  sessionId: params.sessionId,
@@ -43650,7 +43475,6 @@ async function compactEmbeddedPiSessionDirect(params) {
43650
43475
  ownerDisplay: params.config?.commands?.ownerDisplay,
43651
43476
  ownerDisplaySecret: params.config?.commands?.ownerDisplaySecret ?? params.config?.gateway?.auth?.token ?? params.config?.gateway?.remote?.token,
43652
43477
  reasoningTagHint,
43653
- heartbeatPrompt: void 0,
43654
43478
  skillsPrompt,
43655
43479
  docsPath: docsPath ?? void 0,
43656
43480
  promptMode,
@@ -43860,12 +43684,12 @@ function getQueuedFileWriter(writers, filePath) {
43860
43684
  const existing = writers.get(filePath);
43861
43685
  if (existing) return existing;
43862
43686
  const dir = path.dirname(filePath);
43863
- const ready = fsPromises.mkdir(dir, { recursive: true }).catch(() => void 0);
43687
+ const ready = fs$1.mkdir(dir, { recursive: true }).catch(() => void 0);
43864
43688
  let queue = Promise.resolve();
43865
43689
  const writer = {
43866
43690
  filePath,
43867
43691
  write: (line) => {
43868
- queue = queue.then(() => ready).then(() => fsPromises.appendFile(filePath, line, "utf8")).catch(() => void 0);
43692
+ queue = queue.then(() => ready).then(() => fs$1.appendFile(filePath, line, "utf8")).catch(() => void 0);
43869
43693
  }
43870
43694
  };
43871
43695
  writers.set(filePath, writer);
@@ -44106,6 +43930,31 @@ function createCacheTrace(params) {
44106
43930
  };
44107
43931
  }
44108
43932
 
43933
+ //#endregion
43934
+ //#region src/agents/idle-timeout.ts
43935
+ /**
43936
+ * Per-run idle timeout resolution.
43937
+ *
43938
+ * The idle timer resets on every model/tool activity signal (streaming
43939
+ * chunk, tool execution, compaction, etc.). It fires only when the run is
43940
+ * truly idle — distinguishing "model working slowly on large context" from
43941
+ * "model stuck / connection lost".
43942
+ */
43943
+ const DEFAULT_IDLE_RATIO = .5;
43944
+ const MIN_IDLE_MS = 12e4;
43945
+ const MAX_IDLE_MS = 9e5;
43946
+ const ABSOLUTE_MIN_IDLE_MS = 3e4;
43947
+ const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
43948
+ function resolveIdleTimeoutMs(opts) {
43949
+ const cap = Math.max(ABSOLUTE_MIN_IDLE_MS, opts.runTimeoutMs - 1e3);
43950
+ const modelMs = normalizeNumber(opts.modelSeconds != null ? opts.modelSeconds * 1e3 : void 0);
43951
+ if (modelMs !== void 0 && modelMs > 0) return Math.min(Math.max(modelMs, ABSOLUTE_MIN_IDLE_MS), cap);
43952
+ const configMs = normalizeNumber(opts.configSeconds != null ? opts.configSeconds * 1e3 : void 0);
43953
+ if (configMs !== void 0 && configMs > 0) return Math.min(Math.max(configMs, ABSOLUTE_MIN_IDLE_MS), cap);
43954
+ const computed = Math.floor(opts.runTimeoutMs * DEFAULT_IDLE_RATIO);
43955
+ return Math.min(Math.max(computed, MIN_IDLE_MS), Math.min(MAX_IDLE_MS, cap));
43956
+ }
43957
+
44109
43958
  //#endregion
44110
43959
  //#region src/agents/model-token-filter.ts
44111
43960
  /**
@@ -47020,7 +46869,7 @@ Use the message tool with buttons:
47020
46869
  */
47021
46870
  async function readSessionFile(sessionFile) {
47022
46871
  try {
47023
- return await fsPromises.readFile(sessionFile, "utf-8");
46872
+ return await fs$1.readFile(sessionFile, "utf-8");
47024
46873
  } catch {
47025
46874
  return null;
47026
46875
  }
@@ -47029,8 +46878,8 @@ async function writeAtomically(sessionFile, text) {
47029
46878
  const dir = path.dirname(sessionFile);
47030
46879
  const base = path.basename(sessionFile);
47031
46880
  const tmp = path.join(dir, `.${base}.prune-${process.pid}-${Date.now()}.tmp`);
47032
- await fsPromises.writeFile(tmp, text, "utf-8");
47033
- await fsPromises.rename(tmp, sessionFile);
46881
+ await fs$1.writeFile(tmp, text, "utf-8");
46882
+ await fs$1.rename(tmp, sessionFile);
47034
46883
  }
47035
46884
  /**
47036
46885
  * Remove empty assistant JSONL entries from the session file.
@@ -47132,7 +46981,7 @@ function isInPoisonRange(version) {
47132
46981
  */
47133
46982
  async function checkSessionPoison(sessionFile) {
47134
46983
  try {
47135
- const firstLine = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n")[0];
46984
+ const firstLine = (await fs$1.readFile(sessionFile, "utf-8")).split("\n")[0];
47136
46985
  if (!firstLine) return null;
47137
46986
  const header = JSON.parse(firstLine);
47138
46987
  if (header.type !== "session") return null;
@@ -47150,7 +46999,7 @@ async function checkSessionPoison(sessionFile) {
47150
46999
  */
47151
47000
  async function archivePoisonedSession(sessionFile) {
47152
47001
  const archiveName = `${sessionFile}.archived-poison.${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
47153
- await fsPromises.rename(sessionFile, archiveName);
47002
+ await fs$1.rename(sessionFile, archiveName);
47154
47003
  return archiveName;
47155
47004
  }
47156
47005
  /**
@@ -47159,14 +47008,14 @@ async function archivePoisonedSession(sessionFile) {
47159
47008
  */
47160
47009
  async function stampSessionVersion(sessionFile) {
47161
47010
  try {
47162
- const lines = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n");
47011
+ const lines = (await fs$1.readFile(sessionFile, "utf-8")).split("\n");
47163
47012
  if (lines.length === 0) return;
47164
47013
  const header = JSON.parse(lines[0]);
47165
47014
  if (header.type !== "session") return;
47166
47015
  if (header.symiVersion === VERSION) return;
47167
47016
  header.symiVersion = VERSION;
47168
47017
  lines[0] = JSON.stringify(header);
47169
- await fsPromises.writeFile(sessionFile, lines.join("\n"), "utf-8");
47018
+ await fs$1.writeFile(sessionFile, lines.join("\n"), "utf-8");
47170
47019
  } catch {}
47171
47020
  }
47172
47021
  /**
@@ -47268,31 +47117,6 @@ function hasRepetition(text, minBlockSize) {
47268
47117
  return text.indexOf(sample, searchStart) >= 0;
47269
47118
  }
47270
47119
 
47271
- //#endregion
47272
- //#region src/agents/symipulse-timeout.ts
47273
- /**
47274
- * Symipulse inactivity timeout resolution.
47275
- *
47276
- * The symipulse timer resets on every model/tool activity signal (streaming
47277
- * chunk, tool execution, compaction, etc.). It fires only when the run is
47278
- * truly idle — distinguishing "model working slowly on large context" from
47279
- * "model stuck / connection lost".
47280
- */
47281
- const DEFAULT_SYMIPULSE_RATIO = .5;
47282
- const MIN_SYMIPULSE_MS = 12e4;
47283
- const MAX_SYMIPULSE_MS = 9e5;
47284
- const SYMIPULSE_MIN_TIMEOUT_MS = 3e4;
47285
- const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
47286
- function resolveSymipulseMs(opts) {
47287
- const cap = Math.max(SYMIPULSE_MIN_TIMEOUT_MS, opts.runTimeoutMs - 1e3);
47288
- const modelMs = normalizeNumber(opts.modelSeconds != null ? opts.modelSeconds * 1e3 : void 0);
47289
- if (modelMs !== void 0 && modelMs > 0) return Math.min(Math.max(modelMs, SYMIPULSE_MIN_TIMEOUT_MS), cap);
47290
- const configMs = normalizeNumber(opts.configSeconds != null ? opts.configSeconds * 1e3 : void 0);
47291
- if (configMs !== void 0 && configMs > 0) return Math.min(Math.max(configMs, SYMIPULSE_MIN_TIMEOUT_MS), cap);
47292
- const computed = Math.floor(opts.runTimeoutMs * DEFAULT_SYMIPULSE_RATIO);
47293
- return Math.min(Math.max(computed, MIN_SYMIPULSE_MS), Math.min(MAX_SYMIPULSE_MS, cap));
47294
- }
47295
-
47296
47120
  //#endregion
47297
47121
  //#region src/agents/pi-embedded-runner/abort.ts
47298
47122
  /**
@@ -47420,7 +47244,7 @@ async function prepareSessionManagerForRun(params) {
47420
47244
  return;
47421
47245
  }
47422
47246
  if (params.hadSessionFile && header && !hasAssistant) {
47423
- await fsPromises.writeFile(params.sessionFile, "", "utf-8");
47247
+ await fs$1.writeFile(params.sessionFile, "", "utf-8");
47424
47248
  sm.fileEntries = [header];
47425
47249
  sm.byId?.clear?.();
47426
47250
  sm.labelsById?.clear?.();
@@ -47978,7 +47802,7 @@ async function runEmbeddedAttempt(params) {
47978
47802
  const prevCwd = process.cwd();
47979
47803
  const runAbortController = new AbortController();
47980
47804
  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"}`);
47981
- await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
47805
+ await fs$1.mkdir(resolvedWorkspace, { recursive: true });
47982
47806
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
47983
47807
  const sandbox = await resolveSandboxContext({
47984
47808
  config: params.config,
@@ -47986,7 +47810,7 @@ async function runEmbeddedAttempt(params) {
47986
47810
  workspaceDir: resolvedWorkspace
47987
47811
  });
47988
47812
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
47989
- await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
47813
+ await fs$1.mkdir(effectiveWorkspace, { recursive: true });
47990
47814
  let restoreSkillEnv;
47991
47815
  process.chdir(effectiveWorkspace);
47992
47816
  try {
@@ -48124,7 +47948,6 @@ async function runEmbeddedAttempt(params) {
48124
47948
  ownerDisplay: params.config?.commands?.ownerDisplay,
48125
47949
  ownerDisplaySecret: params.config?.commands?.ownerDisplaySecret ?? params.config?.gateway?.auth?.token ?? params.config?.gateway?.remote?.token,
48126
47950
  reasoningTagHint,
48127
- heartbeatPrompt: void 0,
48128
47951
  skillsPrompt,
48129
47952
  docsPath: docsPath ?? void 0,
48130
47953
  workspaceNotes,
@@ -48196,7 +48019,7 @@ async function runEmbeddedAttempt(params) {
48196
48019
  sessionFile: params.sessionFile,
48197
48020
  warn: (message) => log$7.warn(message)
48198
48021
  });
48199
- const hadSessionFile = await fsPromises.stat(params.sessionFile).then(() => true).catch(() => false);
48022
+ const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
48200
48023
  const transcriptPolicy = resolveTranscriptPolicy({
48201
48024
  modelApi: params.model?.api,
48202
48025
  provider: params.provider,
@@ -48431,7 +48254,7 @@ async function runEmbeddedAttempt(params) {
48431
48254
  if (!key) return null;
48432
48255
  return (params.config?.agents?.defaults?.models)?.[key]?.symipulseSeconds ?? null;
48433
48256
  };
48434
- const symipulseMs = params.symipulseMs ?? resolveSymipulseMs({
48257
+ const symipulseMs = params.symipulseMs ?? resolveIdleTimeoutMs({
48435
48258
  runTimeoutMs: params.timeoutMs,
48436
48259
  configSeconds: params.config?.agents?.defaults?.symipulseSeconds,
48437
48260
  modelSeconds: resolveModelSymipulseSeconds()
@@ -49288,7 +49111,7 @@ async function runEmbeddedPiAgent(params) {
49288
49111
  }
49289
49112
  runLoopIterations += 1;
49290
49113
  attemptedThinking.add(thinkLevel);
49291
- await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
49114
+ await fs$1.mkdir(resolvedWorkspace, { recursive: true });
49292
49115
  const prompt = provider === "anthropic" ? scrubAnthropicRefusalMagic(params.prompt) : params.prompt;
49293
49116
  const attempt = await runEmbeddedAttempt({
49294
49117
  sessionId: params.sessionId,
@@ -50010,4 +49833,4 @@ async function runAgentTurn(params) {
50010
49833
  }
50011
49834
 
50012
49835
  //#endregion
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 };
49836
+ export { applyBrowserProxyPaths as $, getAgentRunContext as $t, normalizePollInput as A, 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, emitAgentEvent as Qt, normalizeOptionalAgentId as R, stopSubagentsForRequester as Rt, createSymiTools as S, CommandLane 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, clearAgentRunContext as Zt, withContextUsageWarning as _, getActiveTaskCount as _n, buildAuthHealthSummary as _t, getPluginToolMeta as a, waitForEmbeddedPiRunEnd as an, markGatewaySigusr1RestartHandled as at, buildAgentTurnParams as b, setCommandLaneConcurrency as bn, applyVerboseOverride as bt, handleSlackHttpRequest as c, ToolInputError as cn, setPreRestartDeferralCheck as ct, buildHistoryContextFromEntries as d, resolveUserTimeFormat as dn, getProcessSupervisor as dt, onAgentEvent as en, persistBrowserProxyFiles as et, getChannelActivity as f, resolveUserTimezone as fn, detectRuntimeShell as ft, buildGlassUiProfile as g, resolveRunWorkspaceDir as gn, DEFAULT_OAUTH_WARN_MS as gt, getTotalPendingReplies as h, redactRunIdentifier as hn, maskApiKey as ht, sniffMimeFromBase64 as i, getActiveEmbeddedRunCount as in, isGatewaySigusr1RestartExternallyAllowed as it, formatTargetDisplay as j, applyTemplate as jt, resolveSessionDeliveryTarget as k, resolveFailoverStatus as kn, resolveInputFileLimits as kt, readJsonBodyWithLimit as l, resolveSymiDocsPath as ln, buildSystemPromptParams as lt, createReplyDispatcher as m, resolveBootstrapContextForRun as mn, resolveSendPolicy as mt, applyToolPolicyPipeline as n, buildAgentSystemPrompt as nn, deferGatewayRestartUntilIdle as nt, createPluginLoaderLogger as o, installUnhandledRejectionHandler as on, scheduleGatewaySigusr1Restart as ot, provider_dispatcher_exports as p, makeBootstrapWarn as pn, normalizeSendPolicy as pt, CHANNEL_TARGETS_DESCRIPTION as q, readLatestAssistantReply as qt, buildDefaultToolPolicyPipelineSteps as r, abortEmbeddedPiRun as rn, emitGatewayRestart as rt, loadSymiPlugins as s, registerUnhandledRejectionHandler as sn, setGatewaySigusr1RestartPolicy as st, runAgentTurn as t, registerAgentRunContext as tn, consumeGatewaySigusr1RestartAuthorization as tt, requestBodyErrorToText as u, formatUserTime as un, resolveCommitHash as ut, withContextOverflowRecovery as v, getTotalQueueSize as vn, formatRemainingShort as vt, resolveAnnounceTargetFromKey as w, resolveModelProfile as wn, DEFAULT_INPUT_MAX_REDIRECTS as wt, prepareReplyTurn as x, waitForActiveTasks as xn, parseVerboseOverride as xt, runUnifiedTurn as y, resetAllLanes as yn, applyModelOverrideToSessionEntry as yt, normalizeOptionalSessionKey as z, countActiveDescendantRuns as zt };