@symerian/symi 2.9.0 → 2.9.2

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 (416) hide show
  1. package/dist/{acp-cli-Bav1bRj2.js → acp-cli-Bc6ZQZ4f.js} +2 -2
  2. package/dist/{acp-cli-BTu3_kZ1.js → acp-cli-Dy9QuDBN.js} +2 -2
  3. package/dist/{agents-CvNeiuSB.js → agents-DTl30WoB.js} +7 -7
  4. package/dist/{agents.config-BCgY5FjE.js → agents.config-CO8F9mkD.js} +1 -1
  5. package/dist/{agents.config-Ct64cGQ8.js → agents.config-CZ3GFxPg.js} +1 -1
  6. package/dist/{audio-preflight-C2EgDXSo.js → audio-preflight-8UNY1akA.js} +11 -11
  7. package/dist/{audio-preflight-1dv3T5Zx.js → audio-preflight-By0dnw-T.js} +11 -11
  8. package/dist/{audio-preflight-Cb-T0r6e.js → audio-preflight-DQR2Ivi-.js} +5 -5
  9. package/dist/{audio-preflight-C6vpFnOG.js → audio-preflight-Dtsvq6Hj.js} +6 -6
  10. package/dist/{audit-CuKP86d_.js → audit-DGwhL71Q.js} +5 -5
  11. package/dist/{audit-C9nq99IR.js → audit-OPWWS900.js} +5 -5
  12. package/dist/{auth-choice-DmMyKZX4.js → auth-choice-BYDGn7lJ.js} +4 -4
  13. package/dist/{auth-choice-ChFU9OCF.js → auth-choice-BoOyy-ZT.js} +4 -4
  14. package/dist/{banner-Bf46tqiY.js → banner-D4MiyUnv.js} +1 -1
  15. package/dist/{browser-cli-ClgQ-C8E.js → browser-cli-CGLTZ9KQ.js} +3 -3
  16. package/dist/{browser-cli-DuPPIcuV.js → browser-cli-qpJlsofO.js} +3 -3
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +14 -14
  19. package/dist/bundled/session-memory/handler.js +14 -14
  20. package/dist/{call-M4YyUnwu.js → call-BCTAmPye.js} +1 -1
  21. package/dist/{call-DYfKEdwh.js → call-BIETyST6.js} +1 -1
  22. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  23. package/dist/{channel-options-Bqc2VCgt.js → channel-options-B6qP-vR-.js} +1 -1
  24. package/dist/{channel-options-D4a0ZJ72.js → channel-options-BiSSYYQC.js} +1 -1
  25. package/dist/{channel-web-YNC2xS5K.js → channel-web-DP97EUhx.js} +7 -7
  26. package/dist/{channels-cli-BFJcNLbB.js → channels-cli-6LNvJQPb.js} +30 -30
  27. package/dist/{channels-cli-h3GnmmM9.js → channels-cli-CE_A3Hai.js} +31 -31
  28. package/dist/{chrome-B14NNyfm.js → chrome-B-hW5hrK.js} +1 -1
  29. package/dist/{chrome-ROtrXlNs.js → chrome-BaMQiegP.js} +1 -1
  30. package/dist/{chrome-D2ohnA09.js → chrome-CO5ZhkcZ.js} +1 -1
  31. package/dist/{chrome-BJvuH-NZ.js → chrome-CtTba9sH.js} +1 -1
  32. package/dist/cli/daemon-cli.js +1 -1
  33. package/dist/{cli-BX54CAM7.js → cli-D4j_JTug.js} +27 -27
  34. package/dist/{cli-BpQlSGVs.js → cli-DwQ3mqhI.js} +26 -26
  35. package/dist/{command-registry-BiRjJ2Sy.js → command-registry-b62Qpsi2.js} +11 -11
  36. package/dist/{completion-cli-BYXofVqv.js → completion-cli-DUT2XYgK.js} +2 -2
  37. package/dist/{completion-cli-C8K5J1ld.js → completion-cli-RQyC3L-t.js} +1 -1
  38. package/dist/{config-PXAJCHa5.js → config-CitI_jxW.js} +8 -0
  39. package/dist/{config-BAVNLbja.js → config-D7Zr88dI.js} +8 -0
  40. package/dist/{config-BkZ9HOKT.js → config-Do4JxgLI.js} +8 -0
  41. package/dist/{config-DXt3pc08.js → config-Gfhqs66L.js} +8 -0
  42. package/dist/{config-cli-BPPD3xqE.js → config-cli-Di8VOhbp.js} +2 -2
  43. package/dist/{config-cli-Deoo6r2K.js → config-cli-H52N8rp1.js} +2 -2
  44. package/dist/{config-guard-BvqCjFPk.js → config-guard-BLcbR_sH.js} +2 -2
  45. package/dist/{config-guard-CaP-V3tf.js → config-guard-CgPPAm7S.js} +3 -3
  46. package/dist/{config-validation-B6Fa3VmF.js → config-validation-B6GnatLw.js} +1 -1
  47. package/dist/{config-validation-EmHZVnuz.js → config-validation-UMq2H_tR.js} +1 -1
  48. package/dist/{configure-D4f0P3bH.js → configure-BF9crM5K.js} +10 -10
  49. package/dist/{configure-BKHxUAAh.js → configure-DQxuawe-.js} +10 -10
  50. package/dist/{control-service-C0pRqIFv.js → control-service-BkyH7qkF.js} +4 -4
  51. package/dist/{control-service-Bujr5pk7.js → control-service-DnNPjFvU.js} +4 -4
  52. package/dist/{cron-cli-C8-Gv5dd.js → cron-cli-CcgewYtp.js} +3 -3
  53. package/dist/{cron-cli-BEdmHCWZ.js → cron-cli-DEcQk1bb.js} +3 -3
  54. package/dist/{daemon-cli-D6wyb9bo.js → daemon-cli-BNZu5unw.js} +6 -6
  55. package/dist/{daemon-cli-BFoJGCHZ.js → daemon-cli-BiBjGGfw.js} +6 -6
  56. package/dist/daemon-cli.js +8 -0
  57. package/dist/{daemon-runtime-Cp7obV7Q.js → daemon-runtime-C-Mwepv_.js} +1 -1
  58. package/dist/{daemon-runtime-D_elkkFW.js → daemon-runtime-C86WnKU5.js} +1 -1
  59. package/dist/{deliver-Bdk_R0pQ.js → deliver-DaRQn5Ai.js} +3 -3
  60. package/dist/{deliver-D7BQXt0l.js → deliver-DrgHcdVo.js} +3 -3
  61. package/dist/{deliver-B0OUq6RP.js → deliver-Dx39g9ey.js} +2 -2
  62. package/dist/{deliver-D0bWiRCg.js → deliver-XYF4JahT.js} +2 -2
  63. package/dist/{devices-cli-CHt4I-7e.js → devices-cli-Wb4H-vyx.js} +2 -2
  64. package/dist/{devices-cli-BXc6DPkC.js → devices-cli-hX2lrsCy.js} +2 -2
  65. package/dist/{directory-cli-CQTzAhw1.js → directory-cli-CLIYvXkV.js} +1 -1
  66. package/dist/{directory-cli-DRWJsAT6.js → directory-cli-C_vm-dsr.js} +1 -1
  67. package/dist/{dns-cli-BBVIay6Z.js → dns-cli-BJuUZ4pr.js} +1 -1
  68. package/dist/{dns-cli-BCKPibb8.js → dns-cli-CTCAHPcB.js} +1 -1
  69. package/dist/{doctor-completion-gMWymNcA.js → doctor-completion-BKXQ50ee.js} +1 -1
  70. package/dist/{doctor-completion-woDYSVtY.js → doctor-completion-BS2JEeZy.js} +1 -1
  71. package/dist/{doctor-config-flow-BCMxS2lf.js → doctor-config-flow-BFHsvL2k.js} +2 -2
  72. package/dist/{doctor-config-flow-B2dVxbL7.js → doctor-config-flow-l2aPNzHP.js} +2 -2
  73. package/dist/entry.js +1 -1
  74. package/dist/{exec-approvals-cli-BBKVrFTj.js → exec-approvals-cli-BXDSu2Ze.js} +4 -4
  75. package/dist/{exec-approvals-cli-CKRDAo17.js → exec-approvals-cli-uAM6-swA.js} +4 -4
  76. package/dist/extensionAPI.js +16 -16
  77. package/dist/{gateway-cli-DsnkTUOp.js → gateway-cli-Do9KUPqe.js} +42 -42
  78. package/dist/{gateway-cli-Bnh42-56.js → gateway-cli-moPf-zP5.js} +43 -43
  79. package/dist/{gateway-rpc-BEfosIsg.js → gateway-rpc-DMEPdgmc.js} +1 -1
  80. package/dist/{gateway-rpc-DZrB7Sl_.js → gateway-rpc-Wa_4MrZb.js} +1 -1
  81. package/dist/{glass-ui-ws-0Y0KsBvU.js → glass-ui-ws-D53pvIov.js} +35 -35
  82. package/dist/{glass-ui-ws-uj3DRmL8.js → glass-ui-ws-Dfro-3R8.js} +34 -34
  83. package/dist/{health-Dl2WRoTa.js → health-BQGRC0xh.js} +5 -5
  84. package/dist/{health-CcV5nKIK.js → health-CV741PBg.js} +5 -5
  85. package/dist/{hooks-cli-CTcHtm_0.js → hooks-cli-CG-PDY2U.js} +28 -28
  86. package/dist/{hooks-cli-DEJe3dUH.js → hooks-cli-CWXGIL9L.js} +27 -27
  87. package/dist/{image-MNvheU8U.js → image-BjyeKf1c.js} +2 -2
  88. package/dist/{image-BuVL0jHI.js → image-C-JvPPpM.js} +2 -2
  89. package/dist/{image-6RZuWKy5.js → image-GaF72sln.js} +2 -2
  90. package/dist/{image-CnEFsKgw.js → image-dYtWZNKT.js} +2 -2
  91. package/dist/index.js +35 -35
  92. package/dist/{lifecycle-core-Uucs6Wz6.js → lifecycle-core-BMVHLJi_.js} +2 -2
  93. package/dist/{lifecycle-core-v3lT0Ymo.js → lifecycle-core-HOQrbQ-_.js} +2 -2
  94. package/dist/llm-slug-generator.js +14 -14
  95. package/dist/{login-F4pbdnF5.js → login-Cd4DTmg6.js} +2 -2
  96. package/dist/{login-EYdkb0dH.js → login-Cv_LYGzG.js} +2 -2
  97. package/dist/{login-C7EdfiAr.js → login-D4OYfM0U.js} +2 -2
  98. package/dist/{login-D4rZWBXe.js → login-DqhTprwd.js} +2 -2
  99. package/dist/{login-qr-Apnag5S6.js → login-qr-CZXIrzvh.js} +2 -2
  100. package/dist/{login-qr-DdAVHOEC.js → login-qr-DiyxAHpv.js} +2 -2
  101. package/dist/{login-qr-BElXRp6T.js → login-qr-Dq_hs3eJ.js} +2 -2
  102. package/dist/{login-qr-DML5LgsI.js → login-qr-Xgw7JPYo.js} +2 -2
  103. package/dist/{logs-cli-N5jQvJTm.js → logs-cli-DZTxEhiM.js} +3 -3
  104. package/dist/{logs-cli-CsHpYc2M.js → logs-cli-Dh-aAqF3.js} +3 -3
  105. package/dist/{manager-9Mni2AA9.js → manager-B_2KzUSI.js} +1 -1
  106. package/dist/{manager-CjW8kPVc.js → manager-Bc-MeMho.js} +1 -1
  107. package/dist/{manager-C-H0XXJq.js → manager-CLPHK-qG.js} +1 -1
  108. package/dist/{manager-QPF0UtOC.js → manager-yrUe0KOT.js} +1 -1
  109. package/dist/{memory-cli-OW9XfyYu.js → memory-cli-3RSIw4no.js} +4 -4
  110. package/dist/{memory-cli-BTByRgM0.js → memory-cli-BKNnDIdx.js} +4 -4
  111. package/dist/{model-catalog-D7k3dDQq.js → model-catalog-BFJW_s3i.js} +2 -2
  112. package/dist/{model-catalog-BuYrTTBn.js → model-catalog-DRqmevpR.js} +2 -2
  113. package/dist/{model-picker-BNWV-jU4.js → model-picker-BT8MumhL.js} +2 -2
  114. package/dist/{model-picker-n7beL1F5.js → model-picker-DhsG4iZa.js} +2 -2
  115. package/dist/{models-Q1jV8ArL.js → models-D_C2JFPw.js} +8 -8
  116. package/dist/{models-cli-Cy6H1sFq.js → models-cli-DQE60EtL.js} +30 -30
  117. package/dist/{models-cli-pfVmmgpv.js → models-cli-j2O4e1Lu.js} +29 -29
  118. package/dist/{models-config-B91ShhoT.js → models-config-DdK8uWQW.js} +1 -1
  119. package/dist/{models-config-J1x_DaPn.js → models-config-frWb8fDT.js} +1 -1
  120. package/dist/{node-cli-CwnTjFkG.js → node-cli-DB4Z23h8.js} +9 -9
  121. package/dist/{node-cli-BD4E-Y8a.js → node-cli-DcRlL2Np.js} +9 -9
  122. package/dist/{nodes-cli-Dv0NXhCO.js → nodes-cli-B42u9UxB.js} +3 -3
  123. package/dist/{nodes-cli-DUD8_q_Q.js → nodes-cli-DQ9YsQmy.js} +3 -3
  124. package/dist/{onboard-CvpyaUQd.js → onboard-Ckw89oRF.js} +7 -7
  125. package/dist/{onboard-EL8foMiP.js → onboard-DUIZfWqa.js} +7 -7
  126. package/dist/{onboard-channels-BRoSUijQ.js → onboard-channels-B8Ouc5sR.js} +1 -1
  127. package/dist/{onboard-channels-Bupbm6zh.js → onboard-channels-Oa9IlsGt.js} +1 -1
  128. package/dist/{onboard-custom-Dk9cL3Uu.js → onboard-custom-7TON2w6b.js} +2 -2
  129. package/dist/{onboard-custom-CJGSIPt3.js → onboard-custom-Bb3xuH0G.js} +2 -2
  130. package/dist/{onboard-helpers-CBxazphs.js → onboard-helpers-BiCrYw-N.js} +2 -2
  131. package/dist/{onboard-helpers-DWDNKmkJ.js → onboard-helpers-Ca4KojJF.js} +2 -2
  132. package/dist/{onboard-remote-cZrkePlK.js → onboard-remote-B8MQTgX-.js} +1 -1
  133. package/dist/{onboard-remote-DoIKLWXA.js → onboard-remote-IMqgmH78.js} +1 -1
  134. package/dist/{onboard-skills-BjGYTueQ.js → onboard-skills-BP1P7f-w.js} +1 -1
  135. package/dist/{onboard-skills-zauvnEui.js → onboard-skills-BcvPjVfl.js} +1 -1
  136. package/dist/{onboarding-Ch8WSJ3j.js → onboarding-Cjh-Y8ha.js} +10 -10
  137. package/dist/{onboarding-Dg5ydWSh.js → onboarding-JFWHlqAb.js} +10 -10
  138. package/dist/{onboarding.finalize-Bo8-8TtH.js → onboarding.finalize-CkGLgiEA.js} +32 -32
  139. package/dist/{onboarding.finalize-CCTaCp2s.js → onboarding.finalize-spzEoVkm.js} +34 -34
  140. package/dist/{onboarding.gateway-config-Dg12RcXA.js → onboarding.gateway-config-Cp8mV8S9.js} +4 -4
  141. package/dist/{onboarding.gateway-config-uIRsaxMy.js → onboarding.gateway-config-tmzsyFbT.js} +4 -4
  142. package/dist/{outbound-mG1crIsY.js → outbound-BD7PNRhC.js} +1 -1
  143. package/dist/{outbound-Zmd7UyQH.js → outbound-BaF9dF-H.js} +1 -1
  144. package/dist/{outbound-CW8eNbCh.js → outbound-CDuo0JH3.js} +1 -1
  145. package/dist/{outbound-B5OgOn1h.js → outbound-CPcVipU-.js} +1 -1
  146. package/dist/{pairing-cli-Cl4t3cDV.js → pairing-cli-CfuG75IW.js} +1 -1
  147. package/dist/{pairing-cli-7X1qlhzF.js → pairing-cli-K09J3MIl.js} +1 -1
  148. package/dist/{pi-embedded-Bl3YkBkI.js → pi-embedded-D6Zi01El.js} +517 -94
  149. package/dist/{pi-embedded-helpers-D1_Sab0M.js → pi-embedded-helpers-B1P8lkqj.js} +5 -5
  150. package/dist/{pi-embedded-helpers-YD1JQ5xV.js → pi-embedded-helpers-BlL08R8g.js} +1 -1
  151. package/dist/{pi-embedded-helpers-DHAJW99p.js → pi-embedded-helpers-CmY04lZ7.js} +1 -1
  152. package/dist/{pi-embedded-helpers-TcYQOZAY.js → pi-embedded-helpers-DuZtk5SK.js} +6 -6
  153. package/dist/{pi-tools.policy-Bx5zp45n.js → pi-tools.policy-54ABEJtH.js} +2 -2
  154. package/dist/{pi-tools.policy-o0ytjRqu.js → pi-tools.policy-BFsWV2pS.js} +2 -2
  155. package/dist/{plugin-registry-BVYZLxmo.js → plugin-registry-CYglC746.js} +2 -2
  156. package/dist/{plugin-registry-Bn9Mj8mP.js → plugin-registry-zGF6HUkQ.js} +2 -2
  157. package/dist/plugin-sdk/agents/pi-embedded-runner/system-prompt.d.ts +21 -0
  158. package/dist/plugin-sdk/agents/pi-tools.read.d.ts +11 -0
  159. package/dist/plugin-sdk/agents/skills/triggers.d.ts +12 -0
  160. package/dist/plugin-sdk/agents/system-prompt-skills-autoload.d.ts +21 -0
  161. package/dist/plugin-sdk/agents/system-prompt-skills-jit.d.ts +28 -0
  162. package/dist/plugin-sdk/agents/tools/skill-search-tool.d.ts +30 -0
  163. package/dist/plugin-sdk/{audio-preflight-DucGa8w7.js → audio-preflight-CoKYDdd4.js} +6 -6
  164. package/dist/plugin-sdk/{channel-web-BhqGIC7q.js → channel-web-eeGSjU9N.js} +7 -7
  165. package/dist/plugin-sdk/{chrome-D9kN9org.js → chrome-CdjVSHtz.js} +1 -1
  166. package/dist/plugin-sdk/config/model-profiles-builtin.d.ts +16 -0
  167. package/dist/plugin-sdk/config/resolve-model-profile.d.ts +9 -1
  168. package/dist/plugin-sdk/config/types.skills.d.ts +22 -0
  169. package/dist/plugin-sdk/config/zod-schema.d.ts +6 -0
  170. package/dist/plugin-sdk/{config-BzupW6LN.js → config-Cf-PzD3r.js} +8 -0
  171. package/dist/plugin-sdk/{deliver-CKgFosI5.js → deliver-hjUeDZ7e.js} +2 -2
  172. package/dist/plugin-sdk/{image-DFyINnvE.js → image-CS95I-I5.js} +2 -2
  173. package/dist/plugin-sdk/index.js +20 -20
  174. package/dist/plugin-sdk/{login-K1YB_7-t.js → login-BhLw-aw1.js} +2 -2
  175. package/dist/plugin-sdk/{login-qr-lMl_OqDj.js → login-qr-B4dxH543.js} +2 -2
  176. package/dist/plugin-sdk/{manager-DdOb0Em2.js → manager-DZ5-lr4s.js} +1 -1
  177. package/dist/plugin-sdk/{outbound-DW3cqlQW.js → outbound-D7yJKgEX.js} +1 -1
  178. package/dist/plugin-sdk/{pi-embedded-helpers-BL7ZRhGv.js → pi-embedded-helpers-6EL59cK1.js} +6 -6
  179. package/dist/plugin-sdk/{pw-ai-B3T0mTHr.js → pw-ai-DWcXZkbZ.js} +2 -2
  180. package/dist/plugin-sdk/{replies-BR2TPTVW.js → replies-B4fizDsZ.js} +1 -1
  181. package/dist/plugin-sdk/{reply-Cjjf4VYT.js → reply-BRGoceel.js} +517 -94
  182. package/dist/plugin-sdk/{runner-BhifC1J_.js → runner-D9c_MNRa.js} +2 -2
  183. package/dist/plugin-sdk/{send-DLO_yV5_.js → send-BAzimHH-.js} +1 -1
  184. package/dist/plugin-sdk/{send-CGhw9mO3.js → send-BfqyNBU1.js} +1 -1
  185. package/dist/plugin-sdk/{send-ZhAe1nXO.js → send-CF7BhO8B.js} +1 -1
  186. package/dist/plugin-sdk/{send-jsofmTfJ.js → send-CJIEYVXL.js} +1 -1
  187. package/dist/plugin-sdk/{send-BP5pSPaZ.js → send-DDpZS9jb.js} +1 -1
  188. package/dist/plugin-sdk/{session-BfyK_04G.js → session-BfTQAyNx.js} +1 -1
  189. package/dist/plugin-sdk/{skill-commands-DEfqC_kJ.js → skill-commands-C70yD9PL.js} +1 -1
  190. package/dist/plugin-sdk/{skills-C9DbB-Kp.js → skills-DuQ-xGok.js} +1 -1
  191. package/dist/plugin-sdk/{synthesis-CZ8BYNXP.js → synthesis-DVsG2Tbp.js} +16 -16
  192. package/dist/plugin-sdk/{web-B8upqMUo.js → web-7u3fdT2S.js} +20 -20
  193. package/dist/plugin-sdk/{whatsapp-actions-eTefsWhW.js → whatsapp-actions-B_3do0s7.js} +2 -2
  194. package/dist/{plugins-cli-CYOQh2DM.js → plugins-cli-CLb_0vH6.js} +27 -27
  195. package/dist/{plugins-cli-3h1N5N8n.js → plugins-cli-ndIGvW38.js} +28 -28
  196. package/dist/{program-D3_xE9BL.js → program-BovNsUAh.js} +34 -34
  197. package/dist/{program-context-COwsYCbf.js → program-context-mFSRQPMm.js} +38 -38
  198. package/dist/{prompt-select-styled-rKPBDv7n.js → prompt-select-styled-DlKhnnDV.js} +15 -15
  199. package/dist/{prompt-select-styled-D88AWCeM.js → prompt-select-styled-vhI0kQYd.js} +15 -15
  200. package/dist/{provider-auth-helpers-rff7s_gC.js → provider-auth-helpers-DXlKD0hY.js} +2 -2
  201. package/dist/{provider-auth-helpers-CyZyVx-V.js → provider-auth-helpers-U0t5YhCn.js} +2 -2
  202. package/dist/{push-apns-BNzgqUl3.js → push-apns-hN0N3Wcu.js} +1 -1
  203. package/dist/{push-apns-d9qKGKPe.js → push-apns-rDsc17-c.js} +1 -1
  204. package/dist/{pw-ai-D9fCYPe7.js → pw-ai-B8IypzYb.js} +2 -2
  205. package/dist/{pw-ai-DYZonrPL.js → pw-ai-BYRvpqBg.js} +2 -2
  206. package/dist/{pw-ai-DWkC5eGA.js → pw-ai-BlWK9Tr3.js} +2 -2
  207. package/dist/{pw-ai-40Jf9QIb.js → pw-ai-BwKx4yAQ.js} +2 -2
  208. package/dist/{qr-cli-6eVyM6ek.js → qr-cli-B7hz3Zj2.js} +1 -1
  209. package/dist/{qr-cli-CCWM_3Nb.js → qr-cli-Zf3abH3y.js} +1 -1
  210. package/dist/{register.agent-D_MON8p-.js → register.agent-B1liWWB3.js} +35 -35
  211. package/dist/{register.agent-BjaqQA02.js → register.agent-Cyij2g-g.js} +33 -33
  212. package/dist/{register.configure-BWkkQhpH.js → register.configure-CoYKlH75.js} +37 -37
  213. package/dist/{register.configure-UJi9sfNv.js → register.configure-keWh1w1p.js} +38 -38
  214. package/dist/{register.maintenance-ChskcWGz.js → register.maintenance-CsA9QQRE.js} +37 -37
  215. package/dist/{register.maintenance-DJptz3DR.js → register.maintenance-CvY-Yar9.js} +35 -35
  216. package/dist/{register.message-CiadI_oS.js → register.message-D7815_7Y.js} +28 -28
  217. package/dist/{register.message-BDTsiyrW.js → register.message-DltuBwIg.js} +27 -27
  218. package/dist/{register.onboard-KR_-4TLY.js → register.onboard-CY50To_-.js} +33 -33
  219. package/dist/{register.onboard-BflOE1jy.js → register.onboard-FcZymlrx.js} +34 -34
  220. package/dist/{register.setup-Cl0sD25T.js → register.setup-8dkIizGs.js} +34 -34
  221. package/dist/{register.setup-W-oNfOp0.js → register.setup-X011Evir.js} +33 -33
  222. package/dist/{register.status-health-sessions-CCQs235z.js → register.status-health-sessions-DRkIaw1q.js} +32 -32
  223. package/dist/{register.status-health-sessions-CT_SmmOH.js → register.status-health-sessions-u9ZbWWea.js} +30 -30
  224. package/dist/{register.subclis-ByZAz4st.js → register.subclis-vTS3UwIU.js} +28 -28
  225. package/dist/{replies-CUWXgyx2.js → replies-A6SltFjk.js} +1 -1
  226. package/dist/{replies-CZH45dMt.js → replies-CsNZ9ImJ.js} +1 -1
  227. package/dist/{replies-Sxbew659.js → replies-Dk0cnpHa.js} +1 -1
  228. package/dist/{replies-D0NFBbd-.js → replies-Dmo0pSSf.js} +1 -1
  229. package/dist/{reply-CgyjcoxC.js → reply-Dx9DWIO2.js} +524 -100
  230. package/dist/{routes-c86p9MPH.js → routes-B3wAMCSw.js} +3 -3
  231. package/dist/{routes-wmFRpLa9.js → routes-DH2Da7TP.js} +3 -3
  232. package/dist/{rpc-BKlQ97aZ.js → rpc-BPtq6BO7.js} +1 -1
  233. package/dist/{rpc-DC4ol5Xa.js → rpc-DCB41PXt.js} +1 -1
  234. package/dist/{run-main-xmWpjZL9.js → run-main-BQKf71Kt.js} +45 -45
  235. package/dist/{runner-ecX1WzDt.js → runner-C4opGXAA.js} +2 -2
  236. package/dist/{runner-Cbz8g76d.js → runner-CY_8vnxU.js} +3 -3
  237. package/dist/{runner-DFuAePEr.js → runner-Dbs3i8HW.js} +2 -2
  238. package/dist/{runner-BBYms6g4.js → runner-Im1oOE3i.js} +3 -3
  239. package/dist/{sandbox-WWVXeHlA.js → sandbox-BTziorto.js} +5 -5
  240. package/dist/{sandbox-cli-momxce7H.js → sandbox-cli-BVpVuidu.js} +6 -6
  241. package/dist/{sandbox-cli-BtGgnGrs.js → sandbox-cli-rOwF1Yuh.js} +6 -6
  242. package/dist/{sandbox-CCHQuSja.js → sandbox-wUKYI3zy.js} +5 -5
  243. package/dist/{security-cli-BfiJ3e0Y.js → security-cli-Bb4vR6LY.js} +9 -9
  244. package/dist/{security-cli-CIB7kqEk.js → security-cli-Cg7KhJC7.js} +9 -9
  245. package/dist/{send-BaFD3lZ7.js → send-8Gw3YmOh.js} +1 -1
  246. package/dist/{send-Bb4it0te.js → send-90t8KM2a.js} +1 -1
  247. package/dist/{send-C0QjmPaf.js → send-9ktd0CBZ.js} +1 -1
  248. package/dist/{send-Iocbaltq.js → send-B0szkIfv.js} +1 -1
  249. package/dist/{send-BKo1T3HF.js → send-B7kMNQ-T.js} +1 -1
  250. package/dist/{send-COVVt64P.js → send-BbZtP8GJ.js} +1 -1
  251. package/dist/{send-DFtnbzqy.js → send-CQj8FBE3.js} +1 -1
  252. package/dist/{send-Dz656vcm.js → send-Cxr6CgGf.js} +1 -1
  253. package/dist/{send-DLVrnezL.js → send-D27q8Oqo.js} +1 -1
  254. package/dist/{send-9sVK0zP4.js → send-D4GfXudZ.js} +1 -1
  255. package/dist/{send-DvbOiJ-I.js → send-D5Siw6wn.js} +1 -1
  256. package/dist/{send-SF7x1UHb.js → send-DanpvmZQ.js} +1 -1
  257. package/dist/{send-5GrSqB6v.js → send-DbJsN7Lj.js} +1 -1
  258. package/dist/{send-DGbBPbV0.js → send-Dj6_LS_W.js} +1 -1
  259. package/dist/{send-BaBv1rAU.js → send-F2Cpm-SJ.js} +1 -1
  260. package/dist/{send-DpMnSIi5.js → send-aXMPprv9.js} +1 -1
  261. package/dist/{send-B5kAnKqP.js → send-depbZ9aA.js} +1 -1
  262. package/dist/{send-BqOhAhRS.js → send-nRhkxbqX.js} +1 -1
  263. package/dist/{send-CJJuN-Fg.js → send-t_DoGd2Y.js} +1 -1
  264. package/dist/{send-Cpk3Ti6-.js → send-zMHWALCW.js} +1 -1
  265. package/dist/{server-context-DefCxQsB.js → server-context-BPuBLXYG.js} +5 -5
  266. package/dist/{server-context-C66bI8ZM.js → server-context-DQIkGNj2.js} +5 -5
  267. package/dist/{server-methods-DDpCXuOU.js → server-methods-1TzYth88.js} +17 -17
  268. package/dist/{server-methods-CBn954AO.js → server-methods-DeIwhdBv.js} +16 -16
  269. package/dist/{server-node-events-BBEMSKVE.js → server-node-events-CFMtnBFU.js} +28 -28
  270. package/dist/{server-node-events-BUEZ3py9.js → server-node-events-DF_ks0oa.js} +27 -27
  271. package/dist/{session-BTeY6Gn2.js → session-C4odFBc2.js} +1 -1
  272. package/dist/{session-BpaF8fzk.js → session-CTTpxOx1.js} +1 -1
  273. package/dist/{session-mFiujXaP.js → session-Cs58by4_.js} +1 -1
  274. package/dist/{session-BtL_LuWh.js → session-d5_vMl76.js} +1 -1
  275. package/dist/{session-utils-DaBIs243.js → session-utils--1xVj2BC.js} +3 -3
  276. package/dist/{sessions-B2KSRtKQ.js → sessions-BikjOqQs.js} +3 -3
  277. package/dist/{sessions-BeYHj0gr.js → sessions-CVWGQEWu.js} +1 -1
  278. package/dist/{sessions-BPD85pWA.js → sessions-CpDbQNFu.js} +1 -1
  279. package/dist/{shared-C9vLT1Vj.js → shared-DHpMu95O.js} +1 -1
  280. package/dist/{shared-PtB96PLH.js → shared-NCp143fJ.js} +1 -1
  281. package/dist/{skill-commands-CSF7Poen.js → skill-commands-QmLQo8Tj.js} +1 -1
  282. package/dist/{skills-XEbTRNYL.js → skills-D0hfZgFz.js} +1 -1
  283. package/dist/{skills-cli-dTks7st0.js → skills-cli-6wYY0Xes.js} +1 -1
  284. package/dist/{skills-cli-DiND94Um.js → skills-cli-CkTThcTU.js} +1 -1
  285. package/dist/{status-BjMiGq0n.js → status-CvElSWg2.js} +2 -2
  286. package/dist/{status-PfvX-BjO.js → status-CwZgLSfx.js} +10 -10
  287. package/dist/{status-CpvzoCOC.js → status-DEQAH4oA.js} +2 -2
  288. package/dist/{status-CG5iHUJ6.js → status-vO4-v0vI.js} +9 -9
  289. package/dist/{status.update-8HXdAdwz.js → status.update-BSaVYFQv.js} +1 -1
  290. package/dist/{status.update-B5zI1_Id.js → status.update-DoXJrRh6.js} +1 -1
  291. package/dist/{subagent-registry-D0IYimMO.js → subagent-registry-K1lQH7iR.js} +525 -101
  292. package/dist/{synthesis-D55QrjAJ.js → synthesis-AYqn8_O8.js} +27 -27
  293. package/dist/{synthesis-CBwKBuLy.js → synthesis-CZhOC8n4.js} +14 -14
  294. package/dist/{synthesis-BVZ5RJLg.js → synthesis-DazoL-DI.js} +26 -26
  295. package/dist/{synthesis-itgrzpuj.js → synthesis-DhxkkJq7.js} +16 -16
  296. package/dist/{system-cli-BERSpUjO.js → system-cli-BmccUOcE.js} +3 -3
  297. package/dist/{system-cli-C61hzNPk.js → system-cli-DJIrqTFB.js} +3 -3
  298. package/dist/{systemd-hints-Ct8ebNeC.js → systemd-hints-BbqPFaZ2.js} +1 -1
  299. package/dist/{systemd-hints-vhJS1sOh.js → systemd-hints-CfnF9j3s.js} +1 -1
  300. package/dist/{tui-Dg_cvgVP.js → tui-Cc1L4YuN.js} +4 -4
  301. package/dist/{tui-CI_zqapL.js → tui-D5we2kr7.js} +4 -4
  302. package/dist/{tui-cli-BD1cbShC.js → tui-cli-BHBp8e8w.js} +9 -9
  303. package/dist/{tui-cli-DtBW_VCL.js → tui-cli-CmVmkEzr.js} +9 -9
  304. package/dist/{unified-runner-BhnvjB1J.js → unified-runner-CavADnkK.js} +515 -91
  305. package/dist/{update-cli-CL1_LPBS.js → update-cli-DPf2vrJK.js} +40 -40
  306. package/dist/{update-cli-D3K4mhrr.js → update-cli-DmxFKAmJ.js} +38 -38
  307. package/dist/{update-runner-Bmq67eos.js → update-runner-D4UIv_1p.js} +1 -1
  308. package/dist/{update-runner-DMucmRlv.js → update-runner-XU-jPEg_.js} +1 -1
  309. package/dist/{web-B0lZdBBl.js → web-BBbVbRTg.js} +30 -30
  310. package/dist/{web-DCO_YCRw.js → web-BJIv_6uQ.js} +17 -17
  311. package/dist/{web-DmgQtLx3.js → web-C-E-O8iP.js} +30 -30
  312. package/dist/{web-C1HPdY_D.js → web-CIj8erCe.js} +19 -19
  313. package/dist/{webhooks-cli-BEk3Xj9r.js → webhooks-cli-BPWIcZ4r.js} +1 -1
  314. package/dist/{webhooks-cli-B7WTF3ao.js → webhooks-cli-DCw-yCzR.js} +1 -1
  315. package/dist/{whatsapp-actions-BUZuNBin.js → whatsapp-actions-B5o7eFIc.js} +2 -2
  316. package/dist/{whatsapp-actions-DEn0NRir.js → whatsapp-actions-CJkCiI_n.js} +2 -2
  317. package/dist/{whatsapp-actions-uEcDLORc.js → whatsapp-actions-CkT3dnmD.js} +2 -2
  318. package/dist/{whatsapp-actions-DmVpLXmh.js → whatsapp-actions-DRvUrapa.js} +2 -2
  319. package/dist/{with-timeout-DwriPEWn.js → with-timeout-7M4c248g.js} +1 -1
  320. package/dist/{with-timeout-BuIx7QnX.js → with-timeout-BWETfI9T.js} +1 -1
  321. package/extensions/bluebubbles/package.json +1 -1
  322. package/extensions/copilot-proxy/package.json +1 -1
  323. package/extensions/diagnostics-otel/package.json +1 -1
  324. package/extensions/discord/package.json +1 -1
  325. package/extensions/feishu/package.json +1 -1
  326. package/extensions/google-antigravity-auth/package.json +1 -1
  327. package/extensions/google-gemini-cli-auth/package.json +1 -1
  328. package/extensions/googlechat/package.json +1 -1
  329. package/extensions/imessage/package.json +1 -1
  330. package/extensions/irc/package.json +1 -1
  331. package/extensions/learning-loop/package.json +1 -1
  332. package/extensions/line/package.json +1 -1
  333. package/extensions/llm-task/package.json +1 -1
  334. package/extensions/matrix/CHANGELOG.md +12 -0
  335. package/extensions/matrix/package.json +1 -1
  336. package/extensions/mattermost/package.json +1 -1
  337. package/extensions/memory-core/package.json +1 -1
  338. package/extensions/memory-lancedb/package.json +1 -1
  339. package/extensions/minimax-portal-auth/package.json +1 -1
  340. package/extensions/msteams/CHANGELOG.md +12 -0
  341. package/extensions/msteams/package.json +1 -1
  342. package/extensions/nextcloud-talk/package.json +1 -1
  343. package/extensions/nostr/CHANGELOG.md +12 -0
  344. package/extensions/nostr/package.json +1 -1
  345. package/extensions/open-prose/package.json +1 -1
  346. package/extensions/outlook/package.json +1 -1
  347. package/extensions/pipeline/package.json +1 -1
  348. package/extensions/signal/package.json +1 -1
  349. package/extensions/slack/package.json +1 -1
  350. package/extensions/telegram/package.json +1 -1
  351. package/extensions/tlon/package.json +1 -1
  352. package/extensions/twitch/CHANGELOG.md +12 -0
  353. package/extensions/twitch/package.json +1 -1
  354. package/extensions/voice-call/CHANGELOG.md +12 -0
  355. package/extensions/voice-call/package.json +1 -1
  356. package/extensions/whatsapp/package.json +1 -1
  357. package/extensions/zalo/CHANGELOG.md +12 -0
  358. package/extensions/zalo/package.json +1 -1
  359. package/extensions/zalouser/CHANGELOG.md +12 -0
  360. package/extensions/zalouser/package.json +1 -1
  361. package/package.json +1 -1
  362. package/skills/1password/SKILL.md +1 -0
  363. package/skills/apple-notes/SKILL.md +1 -0
  364. package/skills/apple-reminders/SKILL.md +1 -0
  365. package/skills/bear-notes/SKILL.md +1 -0
  366. package/skills/blogwatcher/SKILL.md +1 -0
  367. package/skills/blucli/SKILL.md +1 -0
  368. package/skills/bluebubbles/SKILL.md +1 -0
  369. package/skills/camsnap/SKILL.md +1 -0
  370. package/skills/canvas/SKILL.md +6 -0
  371. package/skills/coding-agent/SKILL.md +1 -0
  372. package/skills/connect-email/SKILL.md +1 -0
  373. package/skills/discord/SKILL.md +1 -0
  374. package/skills/eightctl/SKILL.md +1 -0
  375. package/skills/food-order/SKILL.md +1 -0
  376. package/skills/gemini/SKILL.md +1 -0
  377. package/skills/gh-issues/SKILL.md +1 -0
  378. package/skills/gifgrep/SKILL.md +1 -0
  379. package/skills/github/SKILL.md +1 -0
  380. package/skills/gog/SKILL.md +1 -0
  381. package/skills/goplaces/SKILL.md +1 -0
  382. package/skills/healthcheck/SKILL.md +1 -0
  383. package/skills/himalaya/SKILL.md +1 -0
  384. package/skills/imsg/SKILL.md +1 -0
  385. package/skills/long-task/SKILL.md +1 -0
  386. package/skills/mcporter/SKILL.md +1 -0
  387. package/skills/model-usage/SKILL.md +1 -0
  388. package/skills/nano-banana-pro/SKILL.md +1 -0
  389. package/skills/nano-pdf/SKILL.md +1 -0
  390. package/skills/notion/SKILL.md +1 -0
  391. package/skills/obsidian/SKILL.md +1 -0
  392. package/skills/openai-image-gen/SKILL.md +1 -0
  393. package/skills/openai-whisper/SKILL.md +1 -0
  394. package/skills/openai-whisper-api/SKILL.md +1 -0
  395. package/skills/openhue/SKILL.md +1 -0
  396. package/skills/oracle/SKILL.md +1 -0
  397. package/skills/ordercli/SKILL.md +1 -0
  398. package/skills/peekaboo/SKILL.md +1 -0
  399. package/skills/sag/SKILL.md +1 -0
  400. package/skills/session-logs/SKILL.md +1 -0
  401. package/skills/sherpa-onnx-tts/SKILL.md +1 -0
  402. package/skills/skill-creator/SKILL.md +1 -0
  403. package/skills/slack/SKILL.md +1 -0
  404. package/skills/songsee/SKILL.md +1 -0
  405. package/skills/sonoscli/SKILL.md +1 -0
  406. package/skills/spotify-player/SKILL.md +1 -0
  407. package/skills/summarize/SKILL.md +1 -0
  408. package/skills/symihub/SKILL.md +1 -0
  409. package/skills/things-mac/SKILL.md +1 -0
  410. package/skills/tmux/SKILL.md +1 -0
  411. package/skills/trello/SKILL.md +1 -0
  412. package/skills/video-frames/SKILL.md +1 -0
  413. package/skills/voice-call/SKILL.md +1 -0
  414. package/skills/wacli/SKILL.md +1 -0
  415. package/skills/weather/SKILL.md +1 -0
  416. package/skills/xurl/SKILL.md +1 -0
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { c as expandHomePrefix, i as resolveGatewayPort, n as resolveConfigPath, s as resolveStateDir, t as STATE_DIR, u as resolveRequiredHomeDir } from "./paths-CE7eVGHg.js";
3
3
  import { _ as isCronSessionKey, b as resolveThreadParentSessionKey, c as normalizeMainKey, d as sanitizeAgentId, f as DEFAULT_ACCOUNT_ID, g as isAcpSessionKey, h as getSubagentDepth, l as resolveAgentIdFromSessionKey, o as classifySessionKeyShape, p as normalizeAccountId$2, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isSubagentSessionKey, y as parseAgentSessionKey } from "./session-key-BCzIW1Y2.js";
4
4
  import { $ as isRich, A as normalizeE164, D as isRecord$1, E as formatTerminalLink, H as isPlainObject, I as shortenHomeInString, J as setVerbose, K as logVerbose, L as shortenHomePath, P as resolveUserPath, Q as colorize, R as sleep$1, S as clampInt, T as escapeRegExp, U as danger, V as truncateUtf16Safe, Y as shouldLogVerbose, Z as warn, _ as matchPluginCommand, a as normalizeAnyChannelId, b as CONFIG_DIR, d as createPluginRegistry, et as theme, f as normalizePluginHttpPath, g as listPluginCommands, h as getPluginCommandSpecs, l as requireActivePluginRegistry, lt as resolvePreferredSymiTmpDir, m as executePluginCommand, n as CHAT_CHANNEL_ORDER, o as normalizeChannelId, p as clearPluginCommands, r as DEFAULT_CHAT_CHANNEL, st as normalizeLogLevel, tt as getChildLogger, u as setActivePluginRegistry, v as createInternalHookEvent, w as ensureDir$3, y as triggerInternalHook, z as sliceUtf16Safe } from "./registry-BhoUuugi.js";
5
- import { A as logInfo, C as resolveSymiPackageRoot, D as spawnWithFallback, E as runExec, O as logDebug, S as loadWorkspaceBootstrapFiles, T as runCommandWithTimeout, a as resolveAgentModelPrimary, b as ensureAgentWorkspace, c as resolveDefaultAgentId, d as resolveSessionAgentIds, h as DEFAULT_IDENTITY_FILENAME, i as resolveAgentModelFallbacksOverride, j as logWarn, k as logError, l as resolveEffectiveModelFallbacks, m as DEFAULT_BOOTSTRAP_FILENAME, n as resolveAgentConfig, o as resolveAgentSkillsFilter, p as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId, x as filterBootstrapFilesForSession } from "./agent-scope-Cbl5pNe1.js";
5
+ import { A as logInfo, C as resolveSymiPackageRoot, D as spawnWithFallback, E as runExec, O as logDebug, S as loadWorkspaceBootstrapFiles, T as runCommandWithTimeout, a as resolveAgentModelPrimary, b as ensureAgentWorkspace, c as resolveDefaultAgentId, d as resolveSessionAgentIds, h as DEFAULT_IDENTITY_FILENAME, i as resolveAgentModelFallbacksOverride, j as logWarn, k as logError, l as resolveEffectiveModelFallbacks, m as DEFAULT_BOOTSTRAP_FILENAME, n as resolveAgentConfig, o as resolveAgentSkillsFilter, p as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId, w as resolveSymiPackageRootSync, x as filterBootstrapFilesForSession } from "./agent-scope-Cbl5pNe1.js";
6
6
  import { a as registerActiveProgressLine, i as clearActiveProgressLine, n as createNonExitingRuntime, o as unregisterActiveProgressLine, r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-CZixfwU8.js";
7
7
  import { $ as DEFAULT_MODEL, A as resolveShellEnvFallbackTimeoutMs, B as dedupeProfileIds, C as getCustomProviderApiKey, D as resolveModelAuthMode, E as resolveEnvApiKey, F as getSoonestCooldownExpiry, G as resolveSymiAgentDir, H as markAuthProfileGood, I as isProfileInCooldown, K as withFileLock, L as markAuthProfileFailure, O as getShellPathFromLoginShell, P as resolveAuthProfileOrder, Q as DEFAULT_CONTEXT_TOKENS, R as markAuthProfileUsed, S as getApiKeyForModel, T as resolveApiKeyForProvider, U as ensureAuthProfileStore, V as listProfilesForProvider, W as resolveAuthStorePathForDisplay, X as normalizeSecretInput, Z as resolveAuthProfileDisplayLabel, a as isCliProvider, b as OLLAMA_NATIVE_BASE_URL, c as normalizeProviderId, d as resolveDefaultModelForAgent, et as DEFAULT_PROVIDER, f as resolveModelRefFromString, i as findNormalizedProviderValue, m as resolveThinkingDefault, n as buildConfiguredAllowlistKeys, o as modelKey, p as resolveSubagentSpawnModelSelection, r as buildModelAliasIndex, s as normalizeModelRef$2, t as buildAllowedModelSet, u as resolveConfiguredModelRef, w as requireApiKey, x as createOllamaStreamFn, z as resolveApiKeyForProfile } from "./model-selection-vHAQ4r1b.js";
8
8
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-K_J_nfgx.js";
@@ -12,21 +12,21 @@ import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY
12
12
  import { _ as resolveDiscordAccount, a as normalizeWhatsAppTarget, c as listTelegramAccountIds, d as resolveSlackAccount, g as listEnabledDiscordAccounts, h as createDiscordActionGate, i as isWhatsAppGroupJid, l as resolveTelegramAccount, m as resolveSlackBotToken, n as listChannelPlugins, o as createTelegramActionGate, p as resolveSlackAppToken, r as normalizeChannelId$1, s as listEnabledTelegramAccounts, t as getChannelPlugin, u as resolveTelegramToken, v as normalizeDiscordToken } from "./plugins-71oIavrF.js";
13
13
  import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExists, r as getWebAuthAgeMs, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
- import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-BaBv1rAU.js";
16
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-DLVrnezL.js";
17
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-D0bWiRCg.js";
15
+ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-F2Cpm-SJ.js";
16
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-D27q8Oqo.js";
17
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-XYF4JahT.js";
18
18
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-Kbl70eCP.js";
19
19
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-8zZqL37v.js";
21
- import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-B5kAnKqP.js";
21
+ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-depbZ9aA.js";
22
22
  import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-ByaQt43P.js";
23
23
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
24
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BQINJQIT.js";
25
- import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-TcYQOZAY.js";
26
- import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-BAVNLbja.js";
25
+ import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-DuZtk5SK.js";
26
+ import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-D7Zr88dI.js";
27
27
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverSymiPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-DWdYdchb.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-B14NNyfm.js";
29
- import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-XEbTRNYL.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-B-hW5hrK.js";
29
+ import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, h as parseFrontmatterBlock, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-D0hfZgFz.js";
30
30
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-CPfngF0S.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
32
32
  import { n as getMediaDir, r as saveMediaBuffer } from "./store-bnzGvI16.js";
@@ -36,8 +36,8 @@ import { t as resolveIMessageAccount } from "./accounts-DImOt9jX.js";
36
36
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-DkMamAQ-.js";
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
38
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-ChC2CXaN.js";
39
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-MNvheU8U.js";
40
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-C-H0XXJq.js";
39
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-BjyeKf1c.js";
40
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-CLPHK-qG.js";
41
41
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-479FB0St.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
43
43
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-Dm716SF3.js";
@@ -47,20 +47,20 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-DwuL
47
47
  import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-BuSWcEvl.js";
48
48
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-0kwEfxD4.js";
49
49
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-ke7KirEH.js";
50
- import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-CSF7Poen.js";
50
+ import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-QmLQo8Tj.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CgGv6nTy.js";
52
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-DFuAePEr.js";
52
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-Dbs3i8HW.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-WLZaC77l.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-BaoETsQI.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-C-6tM-GK.js";
56
56
  import { n as normalizePollInput } from "./polls-Coxe0Akm.js";
57
57
  import { t as convertMarkdownTables } from "./tables-BE0lT1IV.js";
58
- import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-DGbBPbV0.js";
59
- import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-Iocbaltq.js";
58
+ import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-Dj6_LS_W.js";
59
+ import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-B0szkIfv.js";
60
60
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-Dd2_hyM2.js";
61
61
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-CFRe6XNa.js";
62
62
  import { t as makeProxyFetch } from "./proxy-DaT-KQ7w.js";
63
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-D0NFBbd-.js";
63
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-Dmo0pSSf.js";
64
64
  import { t as getActiveWebListener } from "./active-listener-OKZn7EWc.js";
65
65
  import { createRequire } from "node:module";
66
66
  import * as path$1 from "node:path";
@@ -3473,7 +3473,7 @@ async function getMemorySearchManager(params) {
3473
3473
  const wrapper = new FallbackMemoryManager({
3474
3474
  primary,
3475
3475
  fallbackFactory: async () => {
3476
- const { MemoryIndexManager } = await import("./manager-C-H0XXJq.js").then((n) => n.n);
3476
+ const { MemoryIndexManager } = await import("./manager-CLPHK-qG.js").then((n) => n.n);
3477
3477
  return await MemoryIndexManager.get(params);
3478
3478
  }
3479
3479
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -3486,7 +3486,7 @@ async function getMemorySearchManager(params) {
3486
3486
  }
3487
3487
  }
3488
3488
  try {
3489
- const { MemoryIndexManager } = await import("./manager-C-H0XXJq.js").then((n) => n.n);
3489
+ const { MemoryIndexManager } = await import("./manager-CLPHK-qG.js").then((n) => n.n);
3490
3490
  return { manager: await MemoryIndexManager.get(params) };
3491
3491
  } catch (err) {
3492
3492
  return {
@@ -7367,7 +7367,7 @@ async function routeReply(params) {
7367
7367
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7368
7368
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7369
7369
  try {
7370
- const { deliverOutboundPayloads } = await import("./deliver-D0bWiRCg.js").then((n) => n.n);
7370
+ const { deliverOutboundPayloads } = await import("./deliver-XYF4JahT.js").then((n) => n.n);
7371
7371
  return {
7372
7372
  ok: true,
7373
7373
  messageId: (await deliverOutboundPayloads({
@@ -36293,6 +36293,231 @@ function createSessionsSpawnTool(opts) {
36293
36293
  };
36294
36294
  }
36295
36295
 
36296
+ //#endregion
36297
+ //#region src/agents/skills/triggers.ts
36298
+ const QUOTE_RE = /^["'`](.*)["'`]$/;
36299
+ const ARRAY_FORM_RE = /^\[(.*)\]$/s;
36300
+ function stripWrappingQuotes(s) {
36301
+ const m = s.trim().match(QUOTE_RE);
36302
+ return m ? m[1] : s.trim();
36303
+ }
36304
+ /** Parse a single trigger value, dropping empty / whitespace-only entries. */
36305
+ function cleanTrigger(raw) {
36306
+ const trimmed = stripWrappingQuotes(raw).toLowerCase();
36307
+ return trimmed.length > 0 ? trimmed : null;
36308
+ }
36309
+ /**
36310
+ * Parse the value of a `triggers:` frontmatter field into a string[].
36311
+ * Accepts both inline-array form `[a, b, "c d"]` and YAML-list form
36312
+ * (multiline with leading hyphens). Returns deduped lowercased trigger
36313
+ * strings, or empty array on unparseable / missing input.
36314
+ */
36315
+ function parseTriggersValue(raw) {
36316
+ if (typeof raw !== "string") return [];
36317
+ const trimmed = raw.trim();
36318
+ if (!trimmed) return [];
36319
+ const items = [];
36320
+ const arrayMatch = trimmed.match(ARRAY_FORM_RE);
36321
+ if (arrayMatch) {
36322
+ const inner = arrayMatch[1];
36323
+ let buf = "";
36324
+ let inQuote = null;
36325
+ for (const ch of inner) {
36326
+ if (inQuote) {
36327
+ if (ch === inQuote) inQuote = null;
36328
+ else buf += ch;
36329
+ continue;
36330
+ }
36331
+ if (ch === "\"" || ch === "'") {
36332
+ inQuote = ch;
36333
+ continue;
36334
+ }
36335
+ if (ch === ",") {
36336
+ const cleaned = cleanTrigger(buf);
36337
+ if (cleaned) items.push(cleaned);
36338
+ buf = "";
36339
+ continue;
36340
+ }
36341
+ buf += ch;
36342
+ }
36343
+ const cleaned = cleanTrigger(buf);
36344
+ if (cleaned) items.push(cleaned);
36345
+ } else for (const line of trimmed.split("\n")) {
36346
+ const ltrim = line.trimStart();
36347
+ if (ltrim.startsWith("- ")) {
36348
+ const cleaned = cleanTrigger(ltrim.slice(2));
36349
+ if (cleaned) items.push(cleaned);
36350
+ } else if (ltrim && !ltrim.startsWith("#")) {
36351
+ const cleaned = cleanTrigger(ltrim);
36352
+ if (cleaned) items.push(cleaned);
36353
+ }
36354
+ }
36355
+ const seen = /* @__PURE__ */ new Set();
36356
+ const out = [];
36357
+ for (const t of items) if (!seen.has(t)) {
36358
+ seen.add(t);
36359
+ out.push(t);
36360
+ }
36361
+ return out;
36362
+ }
36363
+ /**
36364
+ * Extract triggers from a parsed frontmatter record. Returns empty array
36365
+ * when the field is absent or unparseable.
36366
+ */
36367
+ function getSkillTriggers(frontmatter) {
36368
+ return parseTriggersValue(frontmatter.triggers);
36369
+ }
36370
+
36371
+ //#endregion
36372
+ //#region src/agents/tools/skill-search-tool.ts
36373
+ const SkillSearchToolSchema = Type.Object({
36374
+ query: Type.String({
36375
+ minLength: 1,
36376
+ description: "Intent description (2-8 words). Match by trigger keywords first, then description text."
36377
+ }),
36378
+ limit: Type.Optional(Type.Number({
36379
+ minimum: 1,
36380
+ maximum: 10,
36381
+ description: "Max results to return (default 5, capped at 10)."
36382
+ }))
36383
+ });
36384
+ const CACHE_TTL_MS = 6e4;
36385
+ const SAFE_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
36386
+ function loadSkillFromDir(dir, source) {
36387
+ const name = path.basename(dir);
36388
+ if (!SAFE_NAME_RE.test(name)) return null;
36389
+ const file = path.join(dir, "SKILL.md");
36390
+ let raw;
36391
+ try {
36392
+ if (!fs.statSync(file).isFile()) return null;
36393
+ raw = fs.readFileSync(file, "utf8");
36394
+ } catch {
36395
+ return null;
36396
+ }
36397
+ const fm = parseFrontmatterBlock(raw);
36398
+ return {
36399
+ name,
36400
+ description: (fm.description ?? "").trim(),
36401
+ path: file,
36402
+ triggers: getSkillTriggers(fm),
36403
+ source
36404
+ };
36405
+ }
36406
+ function listSkillDirs(root) {
36407
+ const skillsDir = path.join(root, "skills");
36408
+ let entries;
36409
+ try {
36410
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
36411
+ } catch {
36412
+ return [];
36413
+ }
36414
+ return entries.filter((e) => e.isDirectory()).map((e) => path.join(skillsDir, e.name));
36415
+ }
36416
+ let cachedPackageRoot$1;
36417
+ const cachePerWorkspace = /* @__PURE__ */ new Map();
36418
+ function getPackageRoot$1() {
36419
+ if (cachedPackageRoot$1 === void 0) cachedPackageRoot$1 = resolveSymiPackageRootSync({});
36420
+ return cachedPackageRoot$1;
36421
+ }
36422
+ function loadAllSkills(workspaceDir) {
36423
+ const cacheKey = workspaceDir ?? "";
36424
+ const now = Date.now();
36425
+ const existing = cachePerWorkspace.get(cacheKey);
36426
+ if (existing && now - existing.loadedAt < CACHE_TTL_MS) return existing.skills;
36427
+ const seen = /* @__PURE__ */ new Map();
36428
+ if (workspaceDir) for (const dir of listSkillDirs(workspaceDir)) {
36429
+ const skill = loadSkillFromDir(dir, "workspace");
36430
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
36431
+ }
36432
+ const packageRoot = getPackageRoot$1();
36433
+ if (packageRoot) for (const dir of listSkillDirs(packageRoot)) {
36434
+ const skill = loadSkillFromDir(dir, "bundled");
36435
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
36436
+ }
36437
+ const skills = [...seen.values()];
36438
+ cachePerWorkspace.set(cacheKey, {
36439
+ skills,
36440
+ loadedAt: now
36441
+ });
36442
+ return skills;
36443
+ }
36444
+ const TOKEN_SPLIT_RE = /[^\w/]+/;
36445
+ function tokenizeQuery(raw) {
36446
+ return raw.toLowerCase().split(TOKEN_SPLIT_RE).filter((t) => t.length >= 2);
36447
+ }
36448
+ /**
36449
+ * Score a query against one skill's triggers + description.
36450
+ * - Trigger score: ratio of query tokens that appear in the trigger set.
36451
+ * - FTS score: 0.4 × ratio of query tokens that appear in the description
36452
+ * (case-insensitive substring match).
36453
+ * - Final = max(trigger, fts) so trigger matches always beat descriptions.
36454
+ * - Returns 0 for "no signal at all" (caller should drop these).
36455
+ */
36456
+ function scoreSkillMatch(skill, queryTokens) {
36457
+ if (queryTokens.length === 0) return 0;
36458
+ const triggerSet = new Set(skill.triggers.map((t) => t.toLowerCase()));
36459
+ const description = skill.description.toLowerCase();
36460
+ let triggerHits = 0;
36461
+ let ftsHits = 0;
36462
+ for (const token of queryTokens) if (triggerSet.has(token)) triggerHits += 1;
36463
+ else if (description.includes(token)) ftsHits += 1;
36464
+ const triggerScore = triggerHits / queryTokens.length;
36465
+ const ftsScore = ftsHits / queryTokens.length * .4;
36466
+ return Math.max(triggerScore, ftsScore);
36467
+ }
36468
+ /**
36469
+ * Pure-function search; exported for testing without going through the
36470
+ * tool execute wrapper.
36471
+ */
36472
+ function searchSkills(query, limit, workspaceDir) {
36473
+ const tokens = tokenizeQuery(query);
36474
+ if (tokens.length === 0) return [];
36475
+ const all = loadAllSkills(workspaceDir);
36476
+ const scored = [];
36477
+ for (const skill of all) {
36478
+ const score = scoreSkillMatch(skill, tokens);
36479
+ if (score > 0) scored.push({
36480
+ name: skill.name,
36481
+ description: skill.description,
36482
+ path: skill.path,
36483
+ score
36484
+ });
36485
+ }
36486
+ scored.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
36487
+ return scored.slice(0, limit);
36488
+ }
36489
+ function createSkillSearchTool(opts) {
36490
+ return {
36491
+ name: "skill_search",
36492
+ label: "skill_search",
36493
+ description: "Find skills relevant to the current task. Returns matching skills with name/description/path; `read` the SKILL.md to apply. Call before non-trivial tool work — search by intent ('connect email', 'long task') not tool name.",
36494
+ parameters: SkillSearchToolSchema,
36495
+ execute: async (_toolCallId, args) => {
36496
+ const params = args;
36497
+ const query = typeof params.query === "string" ? params.query.trim() : "";
36498
+ if (!query) return jsonResult({
36499
+ ok: false,
36500
+ error: "skill_search requires a non-empty `query` string."
36501
+ });
36502
+ const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.min(10, Math.max(1, Math.floor(params.limit))) : 5;
36503
+ try {
36504
+ return jsonResult({
36505
+ ok: true,
36506
+ query,
36507
+ matches: searchSkills(query, limit, opts?.workspaceDir)
36508
+ });
36509
+ } catch (err) {
36510
+ const message = err instanceof Error ? err.message : String(err);
36511
+ logWarn(`skill_search failed: ${message}`);
36512
+ return jsonResult({
36513
+ ok: false,
36514
+ error: message
36515
+ });
36516
+ }
36517
+ }
36518
+ };
36519
+ }
36520
+
36296
36521
  //#endregion
36297
36522
  //#region src/agents/tools/subagents-tool.ts
36298
36523
  const SUBAGENT_ACTIONS = [
@@ -38353,6 +38578,7 @@ function createSymiTools(options) {
38353
38578
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
38354
38579
  createTaskListTool({ workspaceDir }),
38355
38580
  createTaskCancelTool({ workspaceDir }),
38581
+ createSkillSearchTool({ workspaceDir }),
38356
38582
  ...messageTool ? [messageTool] : [],
38357
38583
  createTtsTool({
38358
38584
  agentChannel: options?.agentChannel,
@@ -39534,6 +39760,38 @@ function setCliSessionId(entry, provider, sessionId) {
39534
39760
  //#endregion
39535
39761
  //#region src/config/model-profiles-builtin.ts
39536
39762
  /**
39763
+ * Shared safety + output-style additions applied to most built-in profiles
39764
+ * and the Generic fallback. These rules came from a long history of
39765
+ * model-specific bugs (verification-monologue padding, "I have addressed"
39766
+ * preambles, post-answer assessment lists). Keeping them in one place
39767
+ * means a new profile inherits sane defaults instead of starting empty.
39768
+ *
39769
+ * Stage 2.4 of the prompt-reduction plan: rules that ALL profiles need
39770
+ * live here; profile-specific rules (control-token stripping, tool-arg
39771
+ * cleanup, reasoning hints) live in their own per-profile additions.
39772
+ *
39773
+ * Exported so resolve-model-profile.ts can apply the same additions to
39774
+ * the Generic fallback profile — no model resolves to "Generic" without
39775
+ * inheriting the safety/style rules.
39776
+ */
39777
+ const SAFETY_AND_STYLE_ADDITIONS = [
39778
+ "CRITICAL OUTPUT RULES:",
39779
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
39780
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39781
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39782
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39783
+ "- If you need to verify your work, do so before writing your response, not after.",
39784
+ "- Send brief progress updates on long tasks so the user knows you are active."
39785
+ ];
39786
+ /** Hint for native-reasoning models (Nemotron, Qwen 3.5/3.6) to keep
39787
+ * planning internal. Not applied to Gemma/Ollama because those models
39788
+ * don't have structured thinking and the rule confuses them. */
39789
+ const REASONING_DISCIPLINE_ADDITION = "- Keep planning and reasoning internal. Only speak when you have a result or need user input.";
39790
+ /** Hint for models that leak Gemma-style control tokens (Gemma family,
39791
+ * Ollama hosting any uncensored open model). Forces tool-arg cleanup and
39792
+ * forbids leaking turn markers in user-visible text. */
39793
+ const CONTROL_TOKEN_ADDITIONS = ["- Do not output raw control tokens, channel tags, or turn markers.", "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."];
39794
+ /**
39537
39795
  * Built-in model profiles. Ordered from most-specific to least-specific so
39538
39796
  * that `resolveModelProfile` can return the first match.
39539
39797
  *
@@ -39567,17 +39825,7 @@ const BUILTIN_PROFILES = [
39567
39825
  hasStructuredThinking: false,
39568
39826
  validateToolArgs: true
39569
39827
  },
39570
- promptAdditions: [
39571
- "CRITICAL OUTPUT RULES:",
39572
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39573
- "- Do not output raw control tokens, channel tags, or turn markers.",
39574
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39575
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39576
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39577
- "- If you need to verify your work, do so before writing your response, not after.",
39578
- "- Send brief progress updates on long tasks so the user knows you are active.",
39579
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
39580
- ],
39828
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
39581
39829
  ui: {
39582
39830
  badge: "Local",
39583
39831
  watchdogMs: 9e5,
@@ -39604,16 +39852,7 @@ const BUILTIN_PROFILES = [
39604
39852
  hasStructuredThinking: true,
39605
39853
  validateToolArgs: false
39606
39854
  },
39607
- promptAdditions: [
39608
- "CRITICAL OUTPUT RULES:",
39609
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39610
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39611
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39612
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39613
- "- If you need to verify your work, do so before writing your response, not after.",
39614
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
39615
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
39616
- ],
39855
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
39617
39856
  ui: {
39618
39857
  badge: "Local",
39619
39858
  watchdogMs: 9e5,
@@ -39639,7 +39878,7 @@ const BUILTIN_PROFILES = [
39639
39878
  hasStructuredThinking: true,
39640
39879
  validateToolArgs: false
39641
39880
  },
39642
- promptAdditions: [],
39881
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
39643
39882
  ui: {
39644
39883
  badge: "API",
39645
39884
  watchdogMs: 3e5,
@@ -39672,15 +39911,7 @@ const BUILTIN_PROFILES = [
39672
39911
  hasStructuredThinking: true,
39673
39912
  validateToolArgs: false
39674
39913
  },
39675
- promptAdditions: [
39676
- "CRITICAL OUTPUT RULES:",
39677
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39678
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39679
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39680
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39681
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
39682
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
39683
- ],
39914
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
39684
39915
  ui: {
39685
39916
  badge: "Spider",
39686
39917
  watchdogMs: 9e5,
@@ -39713,16 +39944,7 @@ const BUILTIN_PROFILES = [
39713
39944
  hasStructuredThinking: false,
39714
39945
  validateToolArgs: true
39715
39946
  },
39716
- promptAdditions: [
39717
- "CRITICAL OUTPUT RULES:",
39718
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39719
- "- Do not output raw control tokens, channel tags, or turn markers.",
39720
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39721
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39722
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39723
- "- Send brief progress updates on long tasks so the user knows you are active.",
39724
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
39725
- ],
39947
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
39726
39948
  ui: {
39727
39949
  badge: "Spider",
39728
39950
  watchdogMs: 6e5,
@@ -39754,16 +39976,7 @@ const BUILTIN_PROFILES = [
39754
39976
  hasStructuredThinking: true,
39755
39977
  validateToolArgs: false
39756
39978
  },
39757
- promptAdditions: [
39758
- "CRITICAL OUTPUT RULES:",
39759
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39760
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39761
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39762
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39763
- "- If you need to verify your work, do so before writing your response, not after.",
39764
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
39765
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
39766
- ],
39979
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
39767
39980
  ui: {
39768
39981
  badge: "CoreWeave",
39769
39982
  watchdogMs: 9e5,
@@ -39774,7 +39987,15 @@ const BUILTIN_PROFILES = [
39774
39987
 
39775
39988
  //#endregion
39776
39989
  //#region src/config/resolve-model-profile.ts
39777
- /** Default profile returned when no match is found. */
39990
+ /**
39991
+ * Default profile returned when no match is found.
39992
+ *
39993
+ * Stage 2.4 of the prompt-reduction plan: the Generic fallback now ships
39994
+ * the same safety+style additions as every named profile, so newly-added
39995
+ * models without a profile entry inherit sane defaults instead of
39996
+ * starting empty (which would silently regress safety rules until someone
39997
+ * notices and adds a profile).
39998
+ */
39778
39999
  const FALLBACK_PROFILE = {
39779
40000
  match: "*",
39780
40001
  label: "Generic",
@@ -39793,7 +40014,7 @@ const FALLBACK_PROFILE = {
39793
40014
  hasStructuredThinking: false,
39794
40015
  validateToolArgs: false
39795
40016
  },
39796
- promptAdditions: [],
40017
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
39797
40018
  ui: {
39798
40019
  watchdogMs: 3e5,
39799
40020
  armWatchdogOnSend: true
@@ -46379,10 +46600,155 @@ async function prepareSessionManagerForRun(params) {
46379
46600
  }
46380
46601
  }
46381
46602
 
46603
+ //#endregion
46604
+ //#region src/agents/system-prompt-skills-autoload.ts
46605
+ const FRONTMATTER_RE = /^---\s*\n[\s\S]*?\n---\s*\n?/;
46606
+ let cachedPackageRoot;
46607
+ function getPackageRoot() {
46608
+ if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
46609
+ return cachedPackageRoot;
46610
+ }
46611
+ function safeSkillName(name) {
46612
+ return /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/.test(name);
46613
+ }
46614
+ function tryLoadSkill(skillName, root) {
46615
+ const skillPath = path.join(root, "skills", skillName, "SKILL.md");
46616
+ try {
46617
+ if (!fs.statSync(skillPath).isFile()) return null;
46618
+ } catch {
46619
+ return null;
46620
+ }
46621
+ try {
46622
+ return fs.readFileSync(skillPath, "utf8");
46623
+ } catch {
46624
+ return null;
46625
+ }
46626
+ }
46627
+ function stripFrontmatter(body) {
46628
+ return body.replace(FRONTMATTER_RE, "").trimStart();
46629
+ }
46630
+ /**
46631
+ * Resolves and loads each named skill. Returns the inlinable Markdown block,
46632
+ * or empty string when no skills loaded / minimal mode / no names supplied.
46633
+ */
46634
+ function buildAutoLoadedSkillsBlock(opts) {
46635
+ if (opts.minimalMode) return "";
46636
+ const names = opts.skillNames.filter((n) => typeof n === "string" && n.trim().length > 0);
46637
+ if (names.length === 0) return "";
46638
+ const packageRoot = getPackageRoot();
46639
+ const loaded = [];
46640
+ for (const rawName of names) {
46641
+ const name = rawName.trim();
46642
+ if (!safeSkillName(name)) {
46643
+ logWarn(`autoLoadInline: skipping invalid skill name '${rawName}'`);
46644
+ continue;
46645
+ }
46646
+ let body = null;
46647
+ let source = "bundled";
46648
+ if (opts.workspaceDir) {
46649
+ body = tryLoadSkill(name, opts.workspaceDir);
46650
+ source = "workspace";
46651
+ }
46652
+ if (body === null && packageRoot) {
46653
+ body = tryLoadSkill(name, packageRoot);
46654
+ source = "bundled";
46655
+ }
46656
+ if (body === null) {
46657
+ logWarn(`autoLoadInline: skill '${name}' not found in workspace or bundled skills`);
46658
+ continue;
46659
+ }
46660
+ const stripped = stripFrontmatter(body).trim();
46661
+ if (!stripped) {
46662
+ logWarn(`autoLoadInline: skill '${name}' has empty body after frontmatter strip; skipping`);
46663
+ continue;
46664
+ }
46665
+ loaded.push({
46666
+ name,
46667
+ body: stripped,
46668
+ source
46669
+ });
46670
+ }
46671
+ if (loaded.length === 0) return "";
46672
+ return [
46673
+ "",
46674
+ "---",
46675
+ "",
46676
+ "## Auto-loaded Skills",
46677
+ "",
46678
+ loaded.map((skill) => `<!-- auto-loaded: ${skill.name} (${skill.source}) -->\n${skill.body}`).join("\n\n---\n\n"),
46679
+ ""
46680
+ ].join("\n");
46681
+ }
46682
+
46683
+ //#endregion
46684
+ //#region src/agents/system-prompt-skills-jit.ts
46685
+ const MAX_ANCHOR_DESCRIPTION_CHARS = 100;
46686
+ const MAX_AUTO_INJECT_RESULTS = 3;
46687
+ const MAX_AUTO_INJECT_TOTAL_CHARS = 600;
46688
+ /**
46689
+ * Build the anchor list block. Returns "" when no anchor list configured
46690
+ * or in preload mode (anchor list adds value only in jit/hybrid).
46691
+ */
46692
+ function buildAnchorListBlock(opts) {
46693
+ if (opts.minimalMode) return "";
46694
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
46695
+ const names = (opts.anchorList ?? []).filter((n) => typeof n === "string" && n.trim().length > 0);
46696
+ if (names.length === 0) return "";
46697
+ const lines = [];
46698
+ for (const name of names) {
46699
+ const description = searchSkills(name, 1, opts.workspaceDir)[0]?.description.trim() ?? "";
46700
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
46701
+ lines.push(truncated ? `- ${name}: ${truncated}` : `- ${name}`);
46702
+ }
46703
+ return [
46704
+ "",
46705
+ "## Anchor Skills",
46706
+ "These skills are always available. Read their SKILL.md via `read` if relevant. For full discovery use the `skill_search` tool.",
46707
+ lines.join("\n"),
46708
+ ""
46709
+ ].join("\n");
46710
+ }
46711
+ /**
46712
+ * Build the auto-injected matches block based on the user message triggers.
46713
+ * Returns "" when discoveryMode doesn't ask for it, no message available,
46714
+ * no matches found, or in minimal mode.
46715
+ */
46716
+ function buildAutoInjectBlock(opts) {
46717
+ if (opts.minimalMode) return "";
46718
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
46719
+ const message = (opts.userMessage ?? "").trim();
46720
+ if (!message) return "";
46721
+ const matches = searchSkills(message, MAX_AUTO_INJECT_RESULTS, opts.workspaceDir);
46722
+ if (matches.length === 0) return "";
46723
+ const lines = [];
46724
+ let total = 0;
46725
+ for (const match of matches) {
46726
+ const description = match.description.trim();
46727
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
46728
+ const skillRef = path.basename(path.dirname(match.path));
46729
+ const line = truncated ? `- ${skillRef}: ${truncated}` : `- ${skillRef}`;
46730
+ if (total + line.length > MAX_AUTO_INJECT_TOTAL_CHARS) break;
46731
+ lines.push(line);
46732
+ total += line.length + 1;
46733
+ }
46734
+ if (lines.length === 0) return "";
46735
+ return [
46736
+ "",
46737
+ "## Possibly Relevant Skills (auto-suggested for this request)",
46738
+ "These skills' triggers matched keywords in your message. Read the SKILL.md if it applies; otherwise ignore and proceed.",
46739
+ lines.join("\n"),
46740
+ ""
46741
+ ].join("\n");
46742
+ }
46743
+ /** Convenience: build both blocks concatenated. */
46744
+ function buildSkillsJitBlocks(opts) {
46745
+ return `${buildAnchorListBlock(opts)}${buildAutoInjectBlock(opts)}`;
46746
+ }
46747
+
46382
46748
  //#endregion
46383
46749
  //#region src/agents/pi-embedded-runner/system-prompt.ts
46384
46750
  function buildEmbeddedSystemPrompt(params) {
46385
- return buildAgentSystemPrompt({
46751
+ const corePrompt = buildAgentSystemPrompt({
46386
46752
  workspaceDir: params.workspaceDir,
46387
46753
  defaultThinkLevel: params.defaultThinkLevel,
46388
46754
  reasoningLevel: params.reasoningLevel,
@@ -46410,6 +46776,19 @@ function buildEmbeddedSystemPrompt(params) {
46410
46776
  contextFiles: params.contextFiles,
46411
46777
  memoryCitationsMode: params.memoryCitationsMode
46412
46778
  });
46779
+ const promptMode = params.promptMode ?? "full";
46780
+ const isMinimal = promptMode === "minimal" || promptMode === "none";
46781
+ return `${corePrompt}${buildAutoLoadedSkillsBlock({
46782
+ skillNames: params.autoLoadInlineSkills ?? [],
46783
+ workspaceDir: params.workspaceDir,
46784
+ minimalMode: isMinimal
46785
+ })}${buildSkillsJitBlocks({
46786
+ discoveryMode: params.skillsDiscoveryMode,
46787
+ anchorList: params.skillsAnchorList,
46788
+ userMessage: params.currentUserMessage,
46789
+ workspaceDir: params.workspaceDir,
46790
+ minimalMode: isMinimal
46791
+ })}`;
46413
46792
  }
46414
46793
  function createSystemPromptOverride(systemPrompt) {
46415
46794
  const override = systemPrompt.trim();
@@ -47197,7 +47576,11 @@ async function runEmbeddedAttempt(params) {
47197
47576
  userTime,
47198
47577
  userTimeFormat,
47199
47578
  contextFiles,
47200
- memoryCitationsMode: params.config?.memory?.citations
47579
+ memoryCitationsMode: params.config?.memory?.citations,
47580
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
47581
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
47582
+ skillsAnchorList: params.config?.skills?.anchorList,
47583
+ currentUserMessage: params.prompt
47201
47584
  });
47202
47585
  const systemPromptReport = buildSystemPromptReport({
47203
47586
  source: "run",
@@ -51680,7 +52063,7 @@ async function deliverSessionMaintenanceWarning(params) {
51680
52063
  return;
51681
52064
  }
51682
52065
  try {
51683
- const { deliverOutboundPayloads } = await import("./deliver-D0bWiRCg.js").then((n) => n.n);
52066
+ const { deliverOutboundPayloads } = await import("./deliver-XYF4JahT.js").then((n) => n.n);
51684
52067
  await deliverOutboundPayloads({
51685
52068
  cfg: params.cfg,
51686
52069
  channel,
@@ -55126,7 +55509,7 @@ async function describeStickerImage(params) {
55126
55509
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
55127
55510
  try {
55128
55511
  const buffer = await fs$1.readFile(imagePath);
55129
- const { describeImageWithModel } = await import("./image-MNvheU8U.js").then((n) => n.n);
55512
+ const { describeImageWithModel } = await import("./image-BjyeKf1c.js").then((n) => n.n);
55130
55513
  return (await describeImageWithModel({
55131
55514
  buffer,
55132
55515
  fileName: "sticker.webp",
@@ -55549,7 +55932,7 @@ function createWhatsAppLoginTool() {
55549
55932
  force: Type.Optional(Type.Boolean())
55550
55933
  }),
55551
55934
  execute: async (_toolCallId, args) => {
55552
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-Apnag5S6.js");
55935
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-CZXIrzvh.js");
55553
55936
  if ((args?.action ?? "start") === "wait") {
55554
55937
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
55555
55938
  return {
@@ -57875,7 +58258,7 @@ async function preflightDiscordMessage(params) {
57875
58258
  let preflightTranscript;
57876
58259
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
57877
58260
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
57878
- const { transcribeFirstAudio } = await import("./audio-preflight-C6vpFnOG.js");
58261
+ const { transcribeFirstAudio } = await import("./audio-preflight-Dtsvq6Hj.js");
57879
58262
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
57880
58263
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
57881
58264
  ctx: {
@@ -61658,27 +62041,27 @@ function isVoiceChannelType(type) {
61658
62041
  function createDefaultDeps() {
61659
62042
  return {
61660
62043
  sendMessageWhatsApp: async (...args) => {
61661
- const { sendMessageWhatsApp } = await import("./web-C1HPdY_D.js");
62044
+ const { sendMessageWhatsApp } = await import("./web-CIj8erCe.js");
61662
62045
  return await sendMessageWhatsApp(...args);
61663
62046
  },
61664
62047
  sendMessageTelegram: async (...args) => {
61665
- const { sendMessageTelegram } = await import("./send-B5kAnKqP.js").then((n) => n.l);
62048
+ const { sendMessageTelegram } = await import("./send-depbZ9aA.js").then((n) => n.l);
61666
62049
  return await sendMessageTelegram(...args);
61667
62050
  },
61668
62051
  sendMessageDiscord: async (...args) => {
61669
- const { sendMessageDiscord } = await import("./send-DLVrnezL.js").then((n) => n.t);
62052
+ const { sendMessageDiscord } = await import("./send-D27q8Oqo.js").then((n) => n.t);
61670
62053
  return await sendMessageDiscord(...args);
61671
62054
  },
61672
62055
  sendMessageSlack: async (...args) => {
61673
- const { sendMessageSlack } = await import("./send-BaBv1rAU.js").then((n) => n.n);
62056
+ const { sendMessageSlack } = await import("./send-F2Cpm-SJ.js").then((n) => n.n);
61674
62057
  return await sendMessageSlack(...args);
61675
62058
  },
61676
62059
  sendMessageSignal: async (...args) => {
61677
- const { sendMessageSignal } = await import("./send-DGbBPbV0.js").then((n) => n.i);
62060
+ const { sendMessageSignal } = await import("./send-Dj6_LS_W.js").then((n) => n.i);
61678
62061
  return await sendMessageSignal(...args);
61679
62062
  },
61680
62063
  sendMessageIMessage: async (...args) => {
61681
- const { sendMessageIMessage } = await import("./send-Iocbaltq.js").then((n) => n.n);
62064
+ const { sendMessageIMessage } = await import("./send-B0szkIfv.js").then((n) => n.n);
61682
62065
  return await sendMessageIMessage(...args);
61683
62066
  }
61684
62067
  };
@@ -72508,7 +72891,7 @@ async function registerSlackMonitorSlashCommands(params) {
72508
72891
  });
72509
72892
  const deliverSlashPayloads = async (replies) => {
72510
72893
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
72511
- import("./replies-D0NFBbd-.js").then((n) => n.r),
72894
+ import("./replies-Dmo0pSSf.js").then((n) => n.r),
72512
72895
  import("./chunk-Bk95VMr4.js").then((n) => n.s),
72513
72896
  import("./markdown-tables-XmEPv2t0.js").then((n) => n.t)
72514
72897
  ]);
@@ -72563,7 +72946,7 @@ async function registerSlackMonitorSlashCommands(params) {
72563
72946
  let nativeCommands = [];
72564
72947
  if (nativeEnabled) {
72565
72948
  reg = await getCommandsRegistry();
72566
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-CSF7Poen.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
72949
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-QmLQo8Tj.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
72567
72950
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
72568
72951
  skillCommands,
72569
72952
  provider: "slack"
@@ -74781,7 +75164,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
74781
75164
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
74782
75165
  let preflightTranscript;
74783
75166
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
74784
- const { transcribeFirstAudio } = await import("./audio-preflight-C6vpFnOG.js");
75167
+ const { transcribeFirstAudio } = await import("./audio-preflight-Dtsvq6Hj.js");
74785
75168
  preflightTranscript = await transcribeFirstAudio({
74786
75169
  ctx: {
74787
75170
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -76926,23 +77309,23 @@ let webLoginQrPromise = null;
76926
77309
  let webChannelPromise = null;
76927
77310
  let whatsappActionsPromise = null;
76928
77311
  function loadWebOutbound() {
76929
- webOutboundPromise ??= import("./outbound-mG1crIsY.js").then((n) => n.t);
77312
+ webOutboundPromise ??= import("./outbound-BD7PNRhC.js").then((n) => n.t);
76930
77313
  return webOutboundPromise;
76931
77314
  }
76932
77315
  function loadWebLogin() {
76933
- webLoginPromise ??= import("./login-EYdkb0dH.js").then((n) => n.n);
77316
+ webLoginPromise ??= import("./login-Cv_LYGzG.js").then((n) => n.n);
76934
77317
  return webLoginPromise;
76935
77318
  }
76936
77319
  function loadWebLoginQr() {
76937
- webLoginQrPromise ??= import("./login-qr-Apnag5S6.js");
77320
+ webLoginQrPromise ??= import("./login-qr-CZXIrzvh.js");
76938
77321
  return webLoginQrPromise;
76939
77322
  }
76940
77323
  function loadWebChannel() {
76941
- webChannelPromise ??= import("./web-C1HPdY_D.js");
77324
+ webChannelPromise ??= import("./web-CIj8erCe.js");
76942
77325
  return webChannelPromise;
76943
77326
  }
76944
77327
  function loadWhatsAppActions() {
76945
- whatsappActionsPromise ??= import("./whatsapp-actions-uEcDLORc.js");
77328
+ whatsappActionsPromise ??= import("./whatsapp-actions-CkT3dnmD.js");
76946
77329
  return whatsappActionsPromise;
76947
77330
  }
76948
77331
  function createPluginRuntime() {
@@ -78817,6 +79200,22 @@ function wrapToolParamNormalization(tool, requiredParamGroups) {
78817
79200
  }
78818
79201
  };
78819
79202
  }
79203
+ /**
79204
+ * Override a tool's description while preserving execute, parameters, and
79205
+ * other properties. Used by Stage 2.5 of the prompt-reduction plan to move
79206
+ * usage docs from the system prompt into tool descriptions where they
79207
+ * belong contextually.
79208
+ *
79209
+ * The replacement description should include the upstream's tool-purpose
79210
+ * sentence so models that only read the description (without the prompt
79211
+ * section) still have the same baseline understanding.
79212
+ */
79213
+ function wrapToolWithDescriptionOverride(tool, description) {
79214
+ return {
79215
+ ...tool,
79216
+ description
79217
+ };
79218
+ }
78820
79219
  function wrapToolWorkspaceRootGuard(tool, root) {
78821
79220
  return {
78822
79221
  ...tool,
@@ -79057,6 +79456,26 @@ function resolveToolLoopDetectionConfig(params) {
79057
79456
  }
79058
79457
  };
79059
79458
  }
79459
+ /**
79460
+ * Edit tool description. Replaces the upstream's terse one-liner with
79461
+ * usage notes migrated from the system prompt's "Edit Tool Best Practices"
79462
+ * section in Stage 2.5 of the prompt-reduction plan. Co-locating these
79463
+ * notes with the tool means they ship only when edit is in palette, and
79464
+ * the system prompt section can be deleted in Stage 4 without losing the
79465
+ * guidance.
79466
+ *
79467
+ * Combined with the read-before-edit guard (Stage 1.3) and the model's
79468
+ * own discipline, this should kill the hallucinated-oldText failure class
79469
+ * for any well-intentioned model.
79470
+ */
79471
+ const EDIT_TOOL_DESCRIPTION = [
79472
+ "Edit a file by replacing exact text. The oldText must match the file EXACTLY (whitespace, indentation, and all).",
79473
+ "Best practices to avoid match failures:",
79474
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
79475
+ "- ALWAYS read the file first, then copy the exact text from the read output for oldText. The read-before-edit guard refuses edits to unread files.",
79476
+ "- If an edit fails with 'Could not find the exact text', re-read the file and retry with the exact text from the fresh read. Do NOT skip to a different issue.",
79477
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines)."
79478
+ ].join(" ");
79060
79479
  function createSymiCodingTools(options) {
79061
79480
  const execToolName = "exec";
79062
79481
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -79145,7 +79564,7 @@ function createSymiCodingTools(options) {
79145
79564
  }
79146
79565
  if (tool.name === "edit") {
79147
79566
  if (sandboxRoot) return [];
79148
- const guarded = wrapEditToolWithGuard(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), readEditTracker);
79567
+ const guarded = wrapEditToolWithGuard(wrapToolWithDescriptionOverride(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), EDIT_TOOL_DESCRIPTION), readEditTracker);
79149
79568
  return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
79150
79569
  }
79151
79570
  return [tool];
@@ -79588,7 +80007,11 @@ async function compactEmbeddedPiSessionDirect(params) {
79588
80007
  userTime,
79589
80008
  userTimeFormat,
79590
80009
  contextFiles,
79591
- memoryCitationsMode: params.config?.memory?.citations
80010
+ memoryCitationsMode: params.config?.memory?.citations,
80011
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
80012
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
80013
+ skillsAnchorList: params.config?.skills?.anchorList,
80014
+ currentUserMessage: void 0
79592
80015
  }));
79593
80016
  const sessionLock = await acquireSessionWriteLock({
79594
80017
  sessionFile: params.sessionFile,