@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
@@ -3,7 +3,7 @@ import { g as resolveStateDir, r as STATE_DIR, u as resolveGatewayPort, y as res
3
3
  import { B as theme, C as sleep$1, D as isPlainObject, E as truncateUtf16Safe, F as shouldLogVerbose, J as normalizeLogLevel, L as warn, M as logVerbose, O as danger, S as shortenHomePath, V as getChildLogger, X as resolvePreferredSymiTmpDir, d as isRecord$1, i as clampInt, l as escapeRegExp, m as normalizeE164, t as CONFIG_DIR, w as sliceUtf16Safe, x as shortenHomeInString, y as resolveUserPath } from "./utils-B-0b9bGM.js";
4
4
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-EAliFiVK.js";
5
5
  import { C as resolveThreadParentSessionKey, S as parseAgentSessionKey, _ as getSubagentDepth, b as isCronSessionKey, c as normalizeMainKey, d as sanitizeAgentId, h as normalizeAccountId$2, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, o as classifySessionKeyShape, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isAcpSessionKey, x as isSubagentSessionKey, y as isCronRunSessionKey } from "./session-key-DCt45XZa.js";
6
- import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
7
7
  import { C as createInternalHookEvent, T as triggerInternalHook, _ as clearPluginCommands, b as listPluginCommands, c as normalizeAnyChannelId, f as requireActivePluginRegistry, g as normalizePluginHttpPath, h as createPluginRegistry, l as normalizeChannelId, n as CHAT_CHANNEL_ORDER, p as setActivePluginRegistry, r as DEFAULT_CHAT_CHANNEL, v as executePluginCommand, x as matchPluginCommand, y as getPluginCommandSpecs } from "./registry-Cja8eT7G.js";
8
8
  import { d as createNonExitingRuntime, f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
9
9
  import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
@@ -14,34 +14,35 @@ import { t as formatCliCommand } from "./command-format-COaS-S7B.js";
14
14
  import { t as parseBooleanValue$1 } from "./boolean-BsqeuxE6.js";
15
15
  import { t as isTruthyEnvValue } from "./env-DPCHYPeH.js";
16
16
  import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, d as resolveMessageChannel, h as GATEWAY_CLIENT_NAMES, i as isGatewayMessageChannel, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-aT-I_DTX.js";
17
- import { $ as parseDiscordTarget, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as createDiscordRestClient, 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 createDiscordClient, 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 resolveDiscordSystemLocation, a as removeReactionDiscord, at as normalizeDiscordAllowList, b as sendWebhookMessageDiscord, bt as fetchChannelPermissionsDiscord, c as formatDiscordComponentEventText, ct as resolveDiscordChannelConfigWithFallback, d as parseDiscordModalCustomId, dt as resolveDiscordOwnerAllowFrom, et as resolveDiscordChannelId, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordShouldRequireMention, g as sendMessageDiscord, gt as formatDiscordUserTag, h as resolveDiscordModalEntry, ht as formatDiscordReactionEmoji, i as removeOwnReactionsDiscord, it as isDiscordGroupAllowedByPolicy, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as resolveDiscordGuildEntry, m as resolveDiscordComponentEntry, mt as shouldEmitDiscordReactionNotification, n as fetchReactionsDiscord, nt as listDiscordDirectoryPeersLive, o as sendDiscordComponentMessage, ot as normalizeDiscordSlug, p as readDiscordComponentSpec, pt as resolveGroupDmAllow, q as deleteChannelDiscord, r as reactMessageDiscord, rt as allowListMatches$1, s as createDiscordFormModal, st as resolveDiscordAllowListMatch, tt as listDiscordDirectoryGroupsLive, u as parseDiscordComponentCustomIdForCarbon, ut as resolveDiscordMemberAccessState, v as sendStickerDiscord, vt as resolveTimestampMs, w as fetchMessageDiscord, wt as chunkDiscordTextWithMode, x as createThreadDiscord, xt as hasAnyGuildPermissionDiscord, y as sendVoiceMessageDiscord, yt as fetchDiscord, z as listGuildChannelsDiscord } from "./send-COVVt64P.js";
18
- import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-PXAJCHa5.js";
17
+ import { $ as parseDiscordTarget, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as createDiscordRestClient, 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 createDiscordClient, 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 resolveDiscordSystemLocation, a as removeReactionDiscord, at as normalizeDiscordAllowList, b as sendWebhookMessageDiscord, bt as fetchChannelPermissionsDiscord, c as formatDiscordComponentEventText, ct as resolveDiscordChannelConfigWithFallback, d as parseDiscordModalCustomId, dt as resolveDiscordOwnerAllowFrom, et as resolveDiscordChannelId, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordShouldRequireMention, g as sendMessageDiscord, gt as formatDiscordUserTag, h as resolveDiscordModalEntry, ht as formatDiscordReactionEmoji, i as removeOwnReactionsDiscord, it as isDiscordGroupAllowedByPolicy, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as resolveDiscordGuildEntry, m as resolveDiscordComponentEntry, mt as shouldEmitDiscordReactionNotification, n as fetchReactionsDiscord, nt as listDiscordDirectoryPeersLive, o as sendDiscordComponentMessage, ot as normalizeDiscordSlug, p as readDiscordComponentSpec, pt as resolveGroupDmAllow, q as deleteChannelDiscord, r as reactMessageDiscord, rt as allowListMatches$1, s as createDiscordFormModal, st as resolveDiscordAllowListMatch, tt as listDiscordDirectoryGroupsLive, u as parseDiscordComponentCustomIdForCarbon, ut as resolveDiscordMemberAccessState, v as sendStickerDiscord, vt as resolveTimestampMs, w as fetchMessageDiscord, wt as chunkDiscordTextWithMode, x as createThreadDiscord, xt as hasAnyGuildPermissionDiscord, y as sendVoiceMessageDiscord, yt as fetchDiscord, z as listGuildChannelsDiscord } from "./send-BbZtP8GJ.js";
18
+ import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-CitI_jxW.js";
19
19
  import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-BDSRH8nU.js";
20
20
  import { a as isPathInsideWithRealpath } from "./legacy-names-Be3msDZo.js";
21
21
  import { t as normalizeChatType } from "./chat-type-DyovJwCt.js";
22
22
  import { n as resolveConversationLabel } from "./conversation-label-Bn5j3lUT.js";
23
23
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CmmmT8IP.js";
24
- import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-BBYms6g4.js";
25
- import { _ as stripThinkingTagsFromText, a as decodeDataUrl, b as minimaxUnderstandImage, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as stripReasoningTagsFromText, y as extractTextFromChatContent } from "./image-6RZuWKy5.js";
26
- import { t as ensureSymiModelsJson } from "./models-config-B91ShhoT.js";
24
+ import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-Im1oOE3i.js";
25
+ import { _ as stripThinkingTagsFromText, a as decodeDataUrl, b as minimaxUnderstandImage, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as stripReasoningTagsFromText, y as extractTextFromChatContent } from "./image-GaF72sln.js";
26
+ import { t as ensureSymiModelsJson } from "./models-config-DdK8uWQW.js";
27
27
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-4uUnLc3n.js";
28
- import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-DHAJW99p.js";
29
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-CCHQuSja.js";
30
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-BJvuH-NZ.js";
31
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-DefCxQsB.js";
28
+ import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-CmY04lZ7.js";
29
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-wUKYI3zy.js";
30
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-CtTba9sH.js";
31
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-BPuBLXYG.js";
32
+ import { l as parseFrontmatterBlock } from "./frontmatter-DWQhtOo7.js";
32
33
  import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-BG8FpqDp.js";
33
34
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-BF3TeRH2.js";
34
35
  import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-BBm9fwuG.js";
35
36
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-BCYMnxkM.js";
36
37
  import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-1OJMSAUX.js";
37
38
  import { n as getMediaDir, r as saveMediaBuffer } from "./store-r1DJSDq-.js";
38
- import { B as resolveAgentMainSessionKey, C as capArrayByJsonBytes, D as resolveSessionTranscriptCandidates, E as readSessionTitleFieldsFromTranscript, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, K as buildGroupDisplayName, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, V as resolveExplicitAgentSessionKey, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, b as normalizeAccountId$3, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields, z as canonicalizeMainSessionAlias } from "./sessions-BeYHj0gr.js";
39
+ import { B as resolveAgentMainSessionKey, C as capArrayByJsonBytes, D as resolveSessionTranscriptCandidates, E as readSessionTitleFieldsFromTranscript, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, K as buildGroupDisplayName, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, V as resolveExplicitAgentSessionKey, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, b as normalizeAccountId$3, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields, z as canonicalizeMainSessionAlias } from "./sessions-CVWGQEWu.js";
39
40
  import { a as resolveChannelGroupRequireMention, c as normalizeHyphenSlug, i as resolveChannelGroupPolicy, l as normalizeStringEntries, n as listChannelDocks, r as normalizeSignalMessagingTarget, s as normalizeAtHashSlug, t as getChannelDock, u as normalizeStringEntriesLower } from "./dock-BhS32F6E.js";
40
41
  import { _ as listEnabledDiscordAccounts, a as isWhatsAppGroupJid, c as listEnabledTelegramAccounts, d as resolveTelegramToken, f as resolveSlackAccount, g as createDiscordActionGate, h as resolveSlackBotToken, l as listTelegramAccountIds, m as resolveSlackAppToken, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId$1, s as createTelegramActionGate, t as getChannelPlugin, u as resolveTelegramAccount, v as resolveDiscordAccount, y as normalizeDiscordToken } from "./plugins-DKDeQZF0.js";
41
42
  import { a as logWebSelfId, i as getWebAuthAgeMs, m as webAuthExists, n as resolveWhatsAppAccount, o as logoutWeb, u as readWebSelfId } from "./accounts-DDuIpcln.js";
42
43
  import { t as resolveIMessageAccount } from "./accounts-bK-Yqdwx.js";
43
44
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-DyJN4_vR.js";
44
- 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-BqOhAhRS.js";
45
+ 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-nRhkxbqX.js";
45
46
  import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, t as resolveDefaultSessionStorePath } from "./paths-CyhzMxFA.js";
46
47
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-BzbXHcaD.js";
47
48
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-DdnTeoR1.js";
@@ -51,17 +52,17 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-Db3d
51
52
  import { t as fetchWithSsrFGuard } from "./fetch-guard-DOPkVbh3.js";
52
53
  import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, t as getAgentScopedMediaLocalRoots } from "./local-roots-aAFLQGkY.js";
53
54
  import { m as runTasksWithConcurrency } from "./internal-iXV867Nr.js";
54
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-D7k3dDQq.js";
55
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-BFJW_s3i.js";
55
56
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-BuceUQDl.js";
56
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-DwriPEWn.js";
57
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeChannelTargetInput, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as buildTargetResolverSignature, h as throwIfAborted, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as normalizeTargetForProvider, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-D7BQXt0l.js";
57
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-7M4c248g.js";
58
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeChannelTargetInput, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as buildTargetResolverSignature, h as throwIfAborted, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as normalizeTargetForProvider, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-DrgHcdVo.js";
58
59
  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-JkjuvDGH.js";
59
60
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-CUslJyKP.js";
60
- import { A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as toLocationContext, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as parseTelegramTarget, K as withTelegramApiErrorLogging, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as formatLocationText, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-DpMnSIi5.js";
61
+ import { A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as toLocationContext, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as parseTelegramTarget, K as withTelegramApiErrorLogging, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as formatLocationText, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-aXMPprv9.js";
61
62
  import { a as buildModelAliasLines, n as resolveModel } from "./model-ECsJuJew.js";
62
63
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CE2YmmsD.js";
63
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-BTByRgM0.js";
64
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-9Mni2AA9.js";
64
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-BKNnDIdx.js";
65
+ import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-B_2KzUSI.js";
65
66
  import { n as retryAsync } from "./retry-BoS4e4X_.js";
66
67
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-C9e6dMU_.js";
67
68
  import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-DIi9uyC6.js";
@@ -70,23 +71,23 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-jTXFdH5R.js";
70
71
  import { a as resolveNativeSkillsEnabled, i as resolveNativeCommandsEnabled, n as isNativeCommandsExplicitlyDisabled, r as isRestartEnabled, t as isCommandFlagEnabled } from "./commands-vWB85AXk.js";
71
72
  import { a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, i as listChatCommands, l as parseCommandArgs, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices } from "./commands-registry-D_uByLpw.js";
72
73
  import { Rt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-pd8kwOFJ.js";
73
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-DYfKEdwh.js";
74
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-BIETyST6.js";
74
75
  import { n as formatTimeAgo } from "./format-relative-CviDPm2s.js";
75
76
  import { n as normalizePollInput } from "./polls-DZoQqmds.js";
76
77
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-CoTZV03i.js";
77
78
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-BECUf3wn.js";
78
79
  import { t as convertMarkdownTables } from "./tables-C3TR-LvH.js";
79
- import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-DvbOiJ-I.js";
80
+ import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-D5Siw6wn.js";
80
81
  import { i as readChannelAllowFromStore, l as listPairingChannels, o as removeChannelAllowFromStoreEntry, s as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-iAT1if6k.js";
81
82
  import { t as makeProxyFetch } from "./proxy-mdETjik4.js";
82
83
  import { i as formatDurationSeconds, r as formatDurationPrecise, t as formatDurationCompact$1 } from "./format-duration-DeLiQNNv.js";
83
84
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-FCaqxoqg.js";
84
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-CZH45dMt.js";
85
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-CsNZ9ImJ.js";
85
86
  import { b as ensureSkillsWatcher, i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames, x as getSkillsSnapshotVersion } from "./skill-commands-Bz5sreu5.js";
86
87
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-C87_fedd.js";
87
88
  import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o as derivePromptTokens, r as loadSessionCostSummary, s as deriveSessionTotalTokens } from "./session-cost-usage-RPrhIvZF.js";
88
- import { a as normalizeIMessageHandle, c as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, i as isAllowedIMessageSender, o as parseIMessageTarget, r as formatIMessageChatTarget, s as createIMessageRpcClient, t as sendMessageIMessage } from "./send-SF7x1UHb.js";
89
- import { r as detectBinary } from "./onboard-helpers-CBxazphs.js";
89
+ import { a as normalizeIMessageHandle, c as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, i as isAllowedIMessageSender, o as parseIMessageTarget, r as formatIMessageChatTarget, s as createIMessageRpcClient, t as sendMessageIMessage } from "./send-DanpvmZQ.js";
90
+ import { r as detectBinary } from "./onboard-helpers-BiCrYw-N.js";
90
91
  import { t as resolvePairingIdLabel } from "./pairing-labels-CTL1gXZb.js";
91
92
  import { i as resolveModelCostConfig, n as formatTokenCount$2, r as formatUsd, t as estimateUsageCost } from "./usage-format-D4P4IiJ6.js";
92
93
  import { t as getActiveWebListener } from "./active-listener-Cif6x8mY.js";
@@ -94,8 +95,8 @@ import { _ as getTrustedSafeBinDirs, b as buildSafeShellCommand, d as resolveExe
94
95
  import { a as canvasSnapshotTempPath, c as parseCameraClipPayload, d as writeCameraClipPayloadToFile, f as writeUrlToFile, g as normalizePathPrepend, h as mergePathPrepend, i as parseEnvPairs, l as parseCameraSnapPayload, m as applyPathPrepend, n as screenRecordTempPath, o as parseCanvasSnapshotPayload, p as buildNodeShellCommand, r as writeScreenRecordToFile, s as cameraTempPath, t as parseScreenRecordPayload, u as writeBase64ToFile } from "./nodes-screen-BZS89z6C.js";
95
96
  import { n as parseNodeList, r as parsePairingList, t as resolveNodeIdFromCandidates } from "./node-match-D3rffA64.js";
96
97
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-CjL9F9WT.js";
97
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-Bx5zp45n.js";
98
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-C0pRqIFv.js";
98
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-54ABEJtH.js";
99
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-BkyH7qkF.js";
99
100
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-CZ1Rrj7O.js";
100
101
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-DF8wPn-_.js";
101
102
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-9fIQGtZy.js";
@@ -10502,7 +10503,7 @@ async function routeReply(params) {
10502
10503
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10503
10504
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10504
10505
  try {
10505
- const { deliverOutboundPayloads } = await import("./deliver-D7BQXt0l.js").then((n) => n.n);
10506
+ const { deliverOutboundPayloads } = await import("./deliver-DrgHcdVo.js").then((n) => n.n);
10506
10507
  return {
10507
10508
  ok: true,
10508
10509
  messageId: (await deliverOutboundPayloads({
@@ -13052,7 +13053,7 @@ async function describeStickerImage(params) {
13052
13053
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
13053
13054
  try {
13054
13055
  const buffer = await fs$1.readFile(imagePath);
13055
- const { describeImageWithModel } = await import("./image-6RZuWKy5.js").then((n) => n.n);
13056
+ const { describeImageWithModel } = await import("./image-GaF72sln.js").then((n) => n.n);
13056
13057
  return (await describeImageWithModel({
13057
13058
  buffer,
13058
13059
  fileName: "sticker.webp",
@@ -13475,7 +13476,7 @@ function createWhatsAppLoginTool() {
13475
13476
  force: Type.Optional(Type.Boolean())
13476
13477
  }),
13477
13478
  execute: async (_toolCallId, args) => {
13478
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-DML5LgsI.js");
13479
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-Xgw7JPYo.js");
13479
13480
  if ((args?.action ?? "start") === "wait") {
13480
13481
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
13481
13482
  return {
@@ -15691,7 +15692,7 @@ async function preflightDiscordMessage(params) {
15691
15692
  let preflightTranscript;
15692
15693
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
15693
15694
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
15694
- const { transcribeFirstAudio } = await import("./audio-preflight-C2EgDXSo.js");
15695
+ const { transcribeFirstAudio } = await import("./audio-preflight-8UNY1akA.js");
15695
15696
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
15696
15697
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
15697
15698
  ctx: {
@@ -22469,6 +22470,38 @@ async function runWithImageModelFallback(params) {
22469
22470
  //#endregion
22470
22471
  //#region src/config/model-profiles-builtin.ts
22471
22472
  /**
22473
+ * Shared safety + output-style additions applied to most built-in profiles
22474
+ * and the Generic fallback. These rules came from a long history of
22475
+ * model-specific bugs (verification-monologue padding, "I have addressed"
22476
+ * preambles, post-answer assessment lists). Keeping them in one place
22477
+ * means a new profile inherits sane defaults instead of starting empty.
22478
+ *
22479
+ * Stage 2.4 of the prompt-reduction plan: rules that ALL profiles need
22480
+ * live here; profile-specific rules (control-token stripping, tool-arg
22481
+ * cleanup, reasoning hints) live in their own per-profile additions.
22482
+ *
22483
+ * Exported so resolve-model-profile.ts can apply the same additions to
22484
+ * the Generic fallback profile — no model resolves to "Generic" without
22485
+ * inheriting the safety/style rules.
22486
+ */
22487
+ const SAFETY_AND_STYLE_ADDITIONS = [
22488
+ "CRITICAL OUTPUT RULES:",
22489
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
22490
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22491
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22492
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22493
+ "- If you need to verify your work, do so before writing your response, not after.",
22494
+ "- Send brief progress updates on long tasks so the user knows you are active."
22495
+ ];
22496
+ /** Hint for native-reasoning models (Nemotron, Qwen 3.5/3.6) to keep
22497
+ * planning internal. Not applied to Gemma/Ollama because those models
22498
+ * don't have structured thinking and the rule confuses them. */
22499
+ const REASONING_DISCIPLINE_ADDITION = "- Keep planning and reasoning internal. Only speak when you have a result or need user input.";
22500
+ /** Hint for models that leak Gemma-style control tokens (Gemma family,
22501
+ * Ollama hosting any uncensored open model). Forces tool-arg cleanup and
22502
+ * forbids leaking turn markers in user-visible text. */
22503
+ 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."];
22504
+ /**
22472
22505
  * Built-in model profiles. Ordered from most-specific to least-specific so
22473
22506
  * that `resolveModelProfile` can return the first match.
22474
22507
  *
@@ -22502,17 +22535,7 @@ const BUILTIN_PROFILES = [
22502
22535
  hasStructuredThinking: false,
22503
22536
  validateToolArgs: true
22504
22537
  },
22505
- promptAdditions: [
22506
- "CRITICAL OUTPUT RULES:",
22507
- "- Your response ends when you have delivered the answer. Do not append anything after.",
22508
- "- Do not output raw control tokens, channel tags, or turn markers.",
22509
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22510
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22511
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22512
- "- If you need to verify your work, do so before writing your response, not after.",
22513
- "- Send brief progress updates on long tasks so the user knows you are active.",
22514
- "- 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."
22515
- ],
22538
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
22516
22539
  ui: {
22517
22540
  badge: "Local",
22518
22541
  watchdogMs: 9e5,
@@ -22539,16 +22562,7 @@ const BUILTIN_PROFILES = [
22539
22562
  hasStructuredThinking: true,
22540
22563
  validateToolArgs: false
22541
22564
  },
22542
- promptAdditions: [
22543
- "CRITICAL OUTPUT RULES:",
22544
- "- Your response ends when you have delivered the answer. Do not append anything after.",
22545
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22546
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22547
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22548
- "- If you need to verify your work, do so before writing your response, not after.",
22549
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
22550
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
22551
- ],
22565
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
22552
22566
  ui: {
22553
22567
  badge: "Local",
22554
22568
  watchdogMs: 9e5,
@@ -22574,7 +22588,7 @@ const BUILTIN_PROFILES = [
22574
22588
  hasStructuredThinking: true,
22575
22589
  validateToolArgs: false
22576
22590
  },
22577
- promptAdditions: [],
22591
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
22578
22592
  ui: {
22579
22593
  badge: "API",
22580
22594
  watchdogMs: 3e5,
@@ -22607,15 +22621,7 @@ const BUILTIN_PROFILES = [
22607
22621
  hasStructuredThinking: true,
22608
22622
  validateToolArgs: false
22609
22623
  },
22610
- promptAdditions: [
22611
- "CRITICAL OUTPUT RULES:",
22612
- "- Your response ends when you have delivered the answer. Do not append anything after.",
22613
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22614
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22615
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22616
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
22617
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
22618
- ],
22624
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
22619
22625
  ui: {
22620
22626
  badge: "Spider",
22621
22627
  watchdogMs: 9e5,
@@ -22648,16 +22654,7 @@ const BUILTIN_PROFILES = [
22648
22654
  hasStructuredThinking: false,
22649
22655
  validateToolArgs: true
22650
22656
  },
22651
- promptAdditions: [
22652
- "CRITICAL OUTPUT RULES:",
22653
- "- Your response ends when you have delivered the answer. Do not append anything after.",
22654
- "- Do not output raw control tokens, channel tags, or turn markers.",
22655
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22656
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22657
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22658
- "- Send brief progress updates on long tasks so the user knows you are active.",
22659
- "- 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."
22660
- ],
22657
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
22661
22658
  ui: {
22662
22659
  badge: "Spider",
22663
22660
  watchdogMs: 6e5,
@@ -22689,16 +22686,7 @@ const BUILTIN_PROFILES = [
22689
22686
  hasStructuredThinking: true,
22690
22687
  validateToolArgs: false
22691
22688
  },
22692
- promptAdditions: [
22693
- "CRITICAL OUTPUT RULES:",
22694
- "- Your response ends when you have delivered the answer. Do not append anything after.",
22695
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22696
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22697
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22698
- "- If you need to verify your work, do so before writing your response, not after.",
22699
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
22700
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
22701
- ],
22689
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
22702
22690
  ui: {
22703
22691
  badge: "CoreWeave",
22704
22692
  watchdogMs: 9e5,
@@ -22709,7 +22697,15 @@ const BUILTIN_PROFILES = [
22709
22697
 
22710
22698
  //#endregion
22711
22699
  //#region src/config/resolve-model-profile.ts
22712
- /** Default profile returned when no match is found. */
22700
+ /**
22701
+ * Default profile returned when no match is found.
22702
+ *
22703
+ * Stage 2.4 of the prompt-reduction plan: the Generic fallback now ships
22704
+ * the same safety+style additions as every named profile, so newly-added
22705
+ * models without a profile entry inherit sane defaults instead of
22706
+ * starting empty (which would silently regress safety rules until someone
22707
+ * notices and adds a profile).
22708
+ */
22713
22709
  const FALLBACK_PROFILE = {
22714
22710
  match: "*",
22715
22711
  label: "Generic",
@@ -22728,7 +22724,7 @@ const FALLBACK_PROFILE = {
22728
22724
  hasStructuredThinking: false,
22729
22725
  validateToolArgs: false
22730
22726
  },
22731
- promptAdditions: [],
22727
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
22732
22728
  ui: {
22733
22729
  watchdogMs: 3e5,
22734
22730
  armWatchdogOnSend: true
@@ -29225,6 +29221,376 @@ async function prepareSessionManagerForRun(params) {
29225
29221
  }
29226
29222
  }
29227
29223
 
29224
+ //#endregion
29225
+ //#region src/agents/system-prompt-skills-autoload.ts
29226
+ const FRONTMATTER_RE = /^---\s*\n[\s\S]*?\n---\s*\n?/;
29227
+ let cachedPackageRoot$1;
29228
+ function getPackageRoot$1() {
29229
+ if (cachedPackageRoot$1 === void 0) cachedPackageRoot$1 = resolveSymiPackageRootSync({});
29230
+ return cachedPackageRoot$1;
29231
+ }
29232
+ function safeSkillName(name) {
29233
+ return /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/.test(name);
29234
+ }
29235
+ function tryLoadSkill(skillName, root) {
29236
+ const skillPath = path.join(root, "skills", skillName, "SKILL.md");
29237
+ try {
29238
+ if (!fs.statSync(skillPath).isFile()) return null;
29239
+ } catch {
29240
+ return null;
29241
+ }
29242
+ try {
29243
+ return fs.readFileSync(skillPath, "utf8");
29244
+ } catch {
29245
+ return null;
29246
+ }
29247
+ }
29248
+ function stripFrontmatter(body) {
29249
+ return body.replace(FRONTMATTER_RE, "").trimStart();
29250
+ }
29251
+ /**
29252
+ * Resolves and loads each named skill. Returns the inlinable Markdown block,
29253
+ * or empty string when no skills loaded / minimal mode / no names supplied.
29254
+ */
29255
+ function buildAutoLoadedSkillsBlock(opts) {
29256
+ if (opts.minimalMode) return "";
29257
+ const names = opts.skillNames.filter((n) => typeof n === "string" && n.trim().length > 0);
29258
+ if (names.length === 0) return "";
29259
+ const packageRoot = getPackageRoot$1();
29260
+ const loaded = [];
29261
+ for (const rawName of names) {
29262
+ const name = rawName.trim();
29263
+ if (!safeSkillName(name)) {
29264
+ logWarn(`autoLoadInline: skipping invalid skill name '${rawName}'`);
29265
+ continue;
29266
+ }
29267
+ let body = null;
29268
+ let source = "bundled";
29269
+ if (opts.workspaceDir) {
29270
+ body = tryLoadSkill(name, opts.workspaceDir);
29271
+ source = "workspace";
29272
+ }
29273
+ if (body === null && packageRoot) {
29274
+ body = tryLoadSkill(name, packageRoot);
29275
+ source = "bundled";
29276
+ }
29277
+ if (body === null) {
29278
+ logWarn(`autoLoadInline: skill '${name}' not found in workspace or bundled skills`);
29279
+ continue;
29280
+ }
29281
+ const stripped = stripFrontmatter(body).trim();
29282
+ if (!stripped) {
29283
+ logWarn(`autoLoadInline: skill '${name}' has empty body after frontmatter strip; skipping`);
29284
+ continue;
29285
+ }
29286
+ loaded.push({
29287
+ name,
29288
+ body: stripped,
29289
+ source
29290
+ });
29291
+ }
29292
+ if (loaded.length === 0) return "";
29293
+ return [
29294
+ "",
29295
+ "---",
29296
+ "",
29297
+ "## Auto-loaded Skills",
29298
+ "",
29299
+ loaded.map((skill) => `<!-- auto-loaded: ${skill.name} (${skill.source}) -->\n${skill.body}`).join("\n\n---\n\n"),
29300
+ ""
29301
+ ].join("\n");
29302
+ }
29303
+
29304
+ //#endregion
29305
+ //#region src/agents/skills/triggers.ts
29306
+ const QUOTE_RE = /^["'`](.*)["'`]$/;
29307
+ const ARRAY_FORM_RE = /^\[(.*)\]$/s;
29308
+ function stripWrappingQuotes(s) {
29309
+ const m = s.trim().match(QUOTE_RE);
29310
+ return m ? m[1] : s.trim();
29311
+ }
29312
+ /** Parse a single trigger value, dropping empty / whitespace-only entries. */
29313
+ function cleanTrigger(raw) {
29314
+ const trimmed = stripWrappingQuotes(raw).toLowerCase();
29315
+ return trimmed.length > 0 ? trimmed : null;
29316
+ }
29317
+ /**
29318
+ * Parse the value of a `triggers:` frontmatter field into a string[].
29319
+ * Accepts both inline-array form `[a, b, "c d"]` and YAML-list form
29320
+ * (multiline with leading hyphens). Returns deduped lowercased trigger
29321
+ * strings, or empty array on unparseable / missing input.
29322
+ */
29323
+ function parseTriggersValue(raw) {
29324
+ if (typeof raw !== "string") return [];
29325
+ const trimmed = raw.trim();
29326
+ if (!trimmed) return [];
29327
+ const items = [];
29328
+ const arrayMatch = trimmed.match(ARRAY_FORM_RE);
29329
+ if (arrayMatch) {
29330
+ const inner = arrayMatch[1];
29331
+ let buf = "";
29332
+ let inQuote = null;
29333
+ for (const ch of inner) {
29334
+ if (inQuote) {
29335
+ if (ch === inQuote) inQuote = null;
29336
+ else buf += ch;
29337
+ continue;
29338
+ }
29339
+ if (ch === "\"" || ch === "'") {
29340
+ inQuote = ch;
29341
+ continue;
29342
+ }
29343
+ if (ch === ",") {
29344
+ const cleaned = cleanTrigger(buf);
29345
+ if (cleaned) items.push(cleaned);
29346
+ buf = "";
29347
+ continue;
29348
+ }
29349
+ buf += ch;
29350
+ }
29351
+ const cleaned = cleanTrigger(buf);
29352
+ if (cleaned) items.push(cleaned);
29353
+ } else for (const line of trimmed.split("\n")) {
29354
+ const ltrim = line.trimStart();
29355
+ if (ltrim.startsWith("- ")) {
29356
+ const cleaned = cleanTrigger(ltrim.slice(2));
29357
+ if (cleaned) items.push(cleaned);
29358
+ } else if (ltrim && !ltrim.startsWith("#")) {
29359
+ const cleaned = cleanTrigger(ltrim);
29360
+ if (cleaned) items.push(cleaned);
29361
+ }
29362
+ }
29363
+ const seen = /* @__PURE__ */ new Set();
29364
+ const out = [];
29365
+ for (const t of items) if (!seen.has(t)) {
29366
+ seen.add(t);
29367
+ out.push(t);
29368
+ }
29369
+ return out;
29370
+ }
29371
+ /**
29372
+ * Extract triggers from a parsed frontmatter record. Returns empty array
29373
+ * when the field is absent or unparseable.
29374
+ */
29375
+ function getSkillTriggers(frontmatter) {
29376
+ return parseTriggersValue(frontmatter.triggers);
29377
+ }
29378
+
29379
+ //#endregion
29380
+ //#region src/agents/tools/skill-search-tool.ts
29381
+ const SkillSearchToolSchema = Type.Object({
29382
+ query: Type.String({
29383
+ minLength: 1,
29384
+ description: "Intent description (2-8 words). Match by trigger keywords first, then description text."
29385
+ }),
29386
+ limit: Type.Optional(Type.Number({
29387
+ minimum: 1,
29388
+ maximum: 10,
29389
+ description: "Max results to return (default 5, capped at 10)."
29390
+ }))
29391
+ });
29392
+ const CACHE_TTL_MS = 6e4;
29393
+ const SAFE_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
29394
+ function loadSkillFromDir(dir, source) {
29395
+ const name = path.basename(dir);
29396
+ if (!SAFE_NAME_RE.test(name)) return null;
29397
+ const file = path.join(dir, "SKILL.md");
29398
+ let raw;
29399
+ try {
29400
+ if (!fs.statSync(file).isFile()) return null;
29401
+ raw = fs.readFileSync(file, "utf8");
29402
+ } catch {
29403
+ return null;
29404
+ }
29405
+ const fm = parseFrontmatterBlock(raw);
29406
+ return {
29407
+ name,
29408
+ description: (fm.description ?? "").trim(),
29409
+ path: file,
29410
+ triggers: getSkillTriggers(fm),
29411
+ source
29412
+ };
29413
+ }
29414
+ function listSkillDirs(root) {
29415
+ const skillsDir = path.join(root, "skills");
29416
+ let entries;
29417
+ try {
29418
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
29419
+ } catch {
29420
+ return [];
29421
+ }
29422
+ return entries.filter((e) => e.isDirectory()).map((e) => path.join(skillsDir, e.name));
29423
+ }
29424
+ let cachedPackageRoot;
29425
+ const cachePerWorkspace = /* @__PURE__ */ new Map();
29426
+ function getPackageRoot() {
29427
+ if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
29428
+ return cachedPackageRoot;
29429
+ }
29430
+ function loadAllSkills(workspaceDir) {
29431
+ const cacheKey = workspaceDir ?? "";
29432
+ const now = Date.now();
29433
+ const existing = cachePerWorkspace.get(cacheKey);
29434
+ if (existing && now - existing.loadedAt < CACHE_TTL_MS) return existing.skills;
29435
+ const seen = /* @__PURE__ */ new Map();
29436
+ if (workspaceDir) for (const dir of listSkillDirs(workspaceDir)) {
29437
+ const skill = loadSkillFromDir(dir, "workspace");
29438
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
29439
+ }
29440
+ const packageRoot = getPackageRoot();
29441
+ if (packageRoot) for (const dir of listSkillDirs(packageRoot)) {
29442
+ const skill = loadSkillFromDir(dir, "bundled");
29443
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
29444
+ }
29445
+ const skills = [...seen.values()];
29446
+ cachePerWorkspace.set(cacheKey, {
29447
+ skills,
29448
+ loadedAt: now
29449
+ });
29450
+ return skills;
29451
+ }
29452
+ const TOKEN_SPLIT_RE = /[^\w/]+/;
29453
+ function tokenizeQuery(raw) {
29454
+ return raw.toLowerCase().split(TOKEN_SPLIT_RE).filter((t) => t.length >= 2);
29455
+ }
29456
+ /**
29457
+ * Score a query against one skill's triggers + description.
29458
+ * - Trigger score: ratio of query tokens that appear in the trigger set.
29459
+ * - FTS score: 0.4 × ratio of query tokens that appear in the description
29460
+ * (case-insensitive substring match).
29461
+ * - Final = max(trigger, fts) so trigger matches always beat descriptions.
29462
+ * - Returns 0 for "no signal at all" (caller should drop these).
29463
+ */
29464
+ function scoreSkillMatch(skill, queryTokens) {
29465
+ if (queryTokens.length === 0) return 0;
29466
+ const triggerSet = new Set(skill.triggers.map((t) => t.toLowerCase()));
29467
+ const description = skill.description.toLowerCase();
29468
+ let triggerHits = 0;
29469
+ let ftsHits = 0;
29470
+ for (const token of queryTokens) if (triggerSet.has(token)) triggerHits += 1;
29471
+ else if (description.includes(token)) ftsHits += 1;
29472
+ const triggerScore = triggerHits / queryTokens.length;
29473
+ const ftsScore = ftsHits / queryTokens.length * .4;
29474
+ return Math.max(triggerScore, ftsScore);
29475
+ }
29476
+ /**
29477
+ * Pure-function search; exported for testing without going through the
29478
+ * tool execute wrapper.
29479
+ */
29480
+ function searchSkills(query, limit, workspaceDir) {
29481
+ const tokens = tokenizeQuery(query);
29482
+ if (tokens.length === 0) return [];
29483
+ const all = loadAllSkills(workspaceDir);
29484
+ const scored = [];
29485
+ for (const skill of all) {
29486
+ const score = scoreSkillMatch(skill, tokens);
29487
+ if (score > 0) scored.push({
29488
+ name: skill.name,
29489
+ description: skill.description,
29490
+ path: skill.path,
29491
+ score
29492
+ });
29493
+ }
29494
+ scored.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
29495
+ return scored.slice(0, limit);
29496
+ }
29497
+ function createSkillSearchTool(opts) {
29498
+ return {
29499
+ name: "skill_search",
29500
+ label: "skill_search",
29501
+ 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.",
29502
+ parameters: SkillSearchToolSchema,
29503
+ execute: async (_toolCallId, args) => {
29504
+ const params = args;
29505
+ const query = typeof params.query === "string" ? params.query.trim() : "";
29506
+ if (!query) return jsonResult({
29507
+ ok: false,
29508
+ error: "skill_search requires a non-empty `query` string."
29509
+ });
29510
+ const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.min(10, Math.max(1, Math.floor(params.limit))) : 5;
29511
+ try {
29512
+ return jsonResult({
29513
+ ok: true,
29514
+ query,
29515
+ matches: searchSkills(query, limit, opts?.workspaceDir)
29516
+ });
29517
+ } catch (err) {
29518
+ const message = err instanceof Error ? err.message : String(err);
29519
+ logWarn(`skill_search failed: ${message}`);
29520
+ return jsonResult({
29521
+ ok: false,
29522
+ error: message
29523
+ });
29524
+ }
29525
+ }
29526
+ };
29527
+ }
29528
+
29529
+ //#endregion
29530
+ //#region src/agents/system-prompt-skills-jit.ts
29531
+ const MAX_ANCHOR_DESCRIPTION_CHARS = 100;
29532
+ const MAX_AUTO_INJECT_RESULTS = 3;
29533
+ const MAX_AUTO_INJECT_TOTAL_CHARS = 600;
29534
+ /**
29535
+ * Build the anchor list block. Returns "" when no anchor list configured
29536
+ * or in preload mode (anchor list adds value only in jit/hybrid).
29537
+ */
29538
+ function buildAnchorListBlock(opts) {
29539
+ if (opts.minimalMode) return "";
29540
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
29541
+ const names = (opts.anchorList ?? []).filter((n) => typeof n === "string" && n.trim().length > 0);
29542
+ if (names.length === 0) return "";
29543
+ const lines = [];
29544
+ for (const name of names) {
29545
+ const description = searchSkills(name, 1, opts.workspaceDir)[0]?.description.trim() ?? "";
29546
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
29547
+ lines.push(truncated ? `- ${name}: ${truncated}` : `- ${name}`);
29548
+ }
29549
+ return [
29550
+ "",
29551
+ "## Anchor Skills",
29552
+ "These skills are always available. Read their SKILL.md via `read` if relevant. For full discovery use the `skill_search` tool.",
29553
+ lines.join("\n"),
29554
+ ""
29555
+ ].join("\n");
29556
+ }
29557
+ /**
29558
+ * Build the auto-injected matches block based on the user message triggers.
29559
+ * Returns "" when discoveryMode doesn't ask for it, no message available,
29560
+ * no matches found, or in minimal mode.
29561
+ */
29562
+ function buildAutoInjectBlock(opts) {
29563
+ if (opts.minimalMode) return "";
29564
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
29565
+ const message = (opts.userMessage ?? "").trim();
29566
+ if (!message) return "";
29567
+ const matches = searchSkills(message, MAX_AUTO_INJECT_RESULTS, opts.workspaceDir);
29568
+ if (matches.length === 0) return "";
29569
+ const lines = [];
29570
+ let total = 0;
29571
+ for (const match of matches) {
29572
+ const description = match.description.trim();
29573
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
29574
+ const skillRef = path.basename(path.dirname(match.path));
29575
+ const line = truncated ? `- ${skillRef}: ${truncated}` : `- ${skillRef}`;
29576
+ if (total + line.length > MAX_AUTO_INJECT_TOTAL_CHARS) break;
29577
+ lines.push(line);
29578
+ total += line.length + 1;
29579
+ }
29580
+ if (lines.length === 0) return "";
29581
+ return [
29582
+ "",
29583
+ "## Possibly Relevant Skills (auto-suggested for this request)",
29584
+ "These skills' triggers matched keywords in your message. Read the SKILL.md if it applies; otherwise ignore and proceed.",
29585
+ lines.join("\n"),
29586
+ ""
29587
+ ].join("\n");
29588
+ }
29589
+ /** Convenience: build both blocks concatenated. */
29590
+ function buildSkillsJitBlocks(opts) {
29591
+ return `${buildAnchorListBlock(opts)}${buildAutoInjectBlock(opts)}`;
29592
+ }
29593
+
29228
29594
  //#endregion
29229
29595
  //#region src/agents/tool-summaries.ts
29230
29596
  function buildToolSummaryMap(tools) {
@@ -29240,7 +29606,7 @@ function buildToolSummaryMap(tools) {
29240
29606
  //#endregion
29241
29607
  //#region src/agents/pi-embedded-runner/system-prompt.ts
29242
29608
  function buildEmbeddedSystemPrompt(params) {
29243
- return buildAgentSystemPrompt({
29609
+ const corePrompt = buildAgentSystemPrompt({
29244
29610
  workspaceDir: params.workspaceDir,
29245
29611
  defaultThinkLevel: params.defaultThinkLevel,
29246
29612
  reasoningLevel: params.reasoningLevel,
@@ -29268,6 +29634,19 @@ function buildEmbeddedSystemPrompt(params) {
29268
29634
  contextFiles: params.contextFiles,
29269
29635
  memoryCitationsMode: params.memoryCitationsMode
29270
29636
  });
29637
+ const promptMode = params.promptMode ?? "full";
29638
+ const isMinimal = promptMode === "minimal" || promptMode === "none";
29639
+ return `${corePrompt}${buildAutoLoadedSkillsBlock({
29640
+ skillNames: params.autoLoadInlineSkills ?? [],
29641
+ workspaceDir: params.workspaceDir,
29642
+ minimalMode: isMinimal
29643
+ })}${buildSkillsJitBlocks({
29644
+ discoveryMode: params.skillsDiscoveryMode,
29645
+ anchorList: params.skillsAnchorList,
29646
+ userMessage: params.currentUserMessage,
29647
+ workspaceDir: params.workspaceDir,
29648
+ minimalMode: isMinimal
29649
+ })}`;
29271
29650
  }
29272
29651
  function createSystemPromptOverride(systemPrompt) {
29273
29652
  const override = systemPrompt.trim();
@@ -30055,7 +30434,11 @@ async function runEmbeddedAttempt(params) {
30055
30434
  userTime,
30056
30435
  userTimeFormat,
30057
30436
  contextFiles,
30058
- memoryCitationsMode: params.config?.memory?.citations
30437
+ memoryCitationsMode: params.config?.memory?.citations,
30438
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
30439
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
30440
+ skillsAnchorList: params.config?.skills?.anchorList,
30441
+ currentUserMessage: params.prompt
30059
30442
  });
30060
30443
  const systemPromptReport = buildSystemPromptReport({
30061
30444
  source: "run",
@@ -31935,27 +32318,27 @@ async function runAgentTurn(params) {
31935
32318
  function createDefaultDeps() {
31936
32319
  return {
31937
32320
  sendMessageWhatsApp: async (...args) => {
31938
- const { sendMessageWhatsApp } = await import("./web-DmgQtLx3.js");
32321
+ const { sendMessageWhatsApp } = await import("./web-C-E-O8iP.js");
31939
32322
  return await sendMessageWhatsApp(...args);
31940
32323
  },
31941
32324
  sendMessageTelegram: async (...args) => {
31942
- const { sendMessageTelegram } = await import("./send-DpMnSIi5.js").then((n) => n.l);
32325
+ const { sendMessageTelegram } = await import("./send-aXMPprv9.js").then((n) => n.l);
31943
32326
  return await sendMessageTelegram(...args);
31944
32327
  },
31945
32328
  sendMessageDiscord: async (...args) => {
31946
- const { sendMessageDiscord } = await import("./send-COVVt64P.js").then((n) => n.t);
32329
+ const { sendMessageDiscord } = await import("./send-BbZtP8GJ.js").then((n) => n.t);
31947
32330
  return await sendMessageDiscord(...args);
31948
32331
  },
31949
32332
  sendMessageSlack: async (...args) => {
31950
- const { sendMessageSlack } = await import("./send-BqOhAhRS.js").then((n) => n.n);
32333
+ const { sendMessageSlack } = await import("./send-nRhkxbqX.js").then((n) => n.n);
31951
32334
  return await sendMessageSlack(...args);
31952
32335
  },
31953
32336
  sendMessageSignal: async (...args) => {
31954
- const { sendMessageSignal } = await import("./send-DvbOiJ-I.js").then((n) => n.i);
32337
+ const { sendMessageSignal } = await import("./send-D5Siw6wn.js").then((n) => n.i);
31955
32338
  return await sendMessageSignal(...args);
31956
32339
  },
31957
32340
  sendMessageIMessage: async (...args) => {
31958
- const { sendMessageIMessage } = await import("./send-SF7x1UHb.js").then((n) => n.n);
32341
+ const { sendMessageIMessage } = await import("./send-DanpvmZQ.js").then((n) => n.n);
31959
32342
  return await sendMessageIMessage(...args);
31960
32343
  }
31961
32344
  };
@@ -43506,7 +43889,7 @@ async function registerSlackMonitorSlashCommands(params) {
43506
43889
  });
43507
43890
  const deliverSlashPayloads = async (replies) => {
43508
43891
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
43509
- import("./replies-CZH45dMt.js").then((n) => n.r),
43892
+ import("./replies-CsNZ9ImJ.js").then((n) => n.r),
43510
43893
  import("./chunk-DIi9uyC6.js").then((n) => n.s),
43511
43894
  import("./markdown-tables-kCfKPOgH.js").then((n) => n.t)
43512
43895
  ]);
@@ -48200,7 +48583,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
48200
48583
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
48201
48584
  let preflightTranscript;
48202
48585
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
48203
- const { transcribeFirstAudio } = await import("./audio-preflight-C2EgDXSo.js");
48586
+ const { transcribeFirstAudio } = await import("./audio-preflight-8UNY1akA.js");
48204
48587
  preflightTranscript = await transcribeFirstAudio({
48205
48588
  ctx: {
48206
48589
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -50354,23 +50737,23 @@ let webLoginQrPromise = null;
50354
50737
  let webChannelPromise = null;
50355
50738
  let whatsappActionsPromise = null;
50356
50739
  function loadWebOutbound() {
50357
- webOutboundPromise ??= import("./outbound-B5OgOn1h.js").then((n) => n.t);
50740
+ webOutboundPromise ??= import("./outbound-CPcVipU-.js").then((n) => n.t);
50358
50741
  return webOutboundPromise;
50359
50742
  }
50360
50743
  function loadWebLogin() {
50361
- webLoginPromise ??= import("./login-F4pbdnF5.js").then((n) => n.n);
50744
+ webLoginPromise ??= import("./login-Cd4DTmg6.js").then((n) => n.n);
50362
50745
  return webLoginPromise;
50363
50746
  }
50364
50747
  function loadWebLoginQr() {
50365
- webLoginQrPromise ??= import("./login-qr-DML5LgsI.js");
50748
+ webLoginQrPromise ??= import("./login-qr-Xgw7JPYo.js");
50366
50749
  return webLoginQrPromise;
50367
50750
  }
50368
50751
  function loadWebChannel() {
50369
- webChannelPromise ??= import("./web-DmgQtLx3.js");
50752
+ webChannelPromise ??= import("./web-C-E-O8iP.js");
50370
50753
  return webChannelPromise;
50371
50754
  }
50372
50755
  function loadWhatsAppActions() {
50373
- whatsappActionsPromise ??= import("./whatsapp-actions-DEn0NRir.js");
50756
+ whatsappActionsPromise ??= import("./whatsapp-actions-CJkCiI_n.js");
50374
50757
  return whatsappActionsPromise;
50375
50758
  }
50376
50759
  function createPluginRuntime() {
@@ -54470,6 +54853,22 @@ function wrapToolParamNormalization(tool, requiredParamGroups) {
54470
54853
  }
54471
54854
  };
54472
54855
  }
54856
+ /**
54857
+ * Override a tool's description while preserving execute, parameters, and
54858
+ * other properties. Used by Stage 2.5 of the prompt-reduction plan to move
54859
+ * usage docs from the system prompt into tool descriptions where they
54860
+ * belong contextually.
54861
+ *
54862
+ * The replacement description should include the upstream's tool-purpose
54863
+ * sentence so models that only read the description (without the prompt
54864
+ * section) still have the same baseline understanding.
54865
+ */
54866
+ function wrapToolWithDescriptionOverride(tool, description) {
54867
+ return {
54868
+ ...tool,
54869
+ description
54870
+ };
54871
+ }
54473
54872
  function wrapToolWorkspaceRootGuard(tool, root) {
54474
54873
  return {
54475
54874
  ...tool,
@@ -65125,6 +65524,7 @@ function createSymiTools(options) {
65125
65524
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
65126
65525
  createTaskListTool({ workspaceDir }),
65127
65526
  createTaskCancelTool({ workspaceDir }),
65527
+ createSkillSearchTool({ workspaceDir }),
65128
65528
  ...messageTool ? [messageTool] : [],
65129
65529
  createTtsTool({
65130
65530
  agentChannel: options?.agentChannel,
@@ -65320,6 +65720,26 @@ function resolveToolLoopDetectionConfig(params) {
65320
65720
  }
65321
65721
  };
65322
65722
  }
65723
+ /**
65724
+ * Edit tool description. Replaces the upstream's terse one-liner with
65725
+ * usage notes migrated from the system prompt's "Edit Tool Best Practices"
65726
+ * section in Stage 2.5 of the prompt-reduction plan. Co-locating these
65727
+ * notes with the tool means they ship only when edit is in palette, and
65728
+ * the system prompt section can be deleted in Stage 4 without losing the
65729
+ * guidance.
65730
+ *
65731
+ * Combined with the read-before-edit guard (Stage 1.3) and the model's
65732
+ * own discipline, this should kill the hallucinated-oldText failure class
65733
+ * for any well-intentioned model.
65734
+ */
65735
+ const EDIT_TOOL_DESCRIPTION = [
65736
+ "Edit a file by replacing exact text. The oldText must match the file EXACTLY (whitespace, indentation, and all).",
65737
+ "Best practices to avoid match failures:",
65738
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
65739
+ "- 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.",
65740
+ "- 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.",
65741
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines)."
65742
+ ].join(" ");
65323
65743
  function createSymiCodingTools(options) {
65324
65744
  const execToolName = "exec";
65325
65745
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -65408,7 +65828,7 @@ function createSymiCodingTools(options) {
65408
65828
  }
65409
65829
  if (tool.name === "edit") {
65410
65830
  if (sandboxRoot) return [];
65411
- const guarded = wrapEditToolWithGuard(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), readEditTracker);
65831
+ const guarded = wrapEditToolWithGuard(wrapToolWithDescriptionOverride(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), EDIT_TOOL_DESCRIPTION), readEditTracker);
65412
65832
  return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
65413
65833
  }
65414
65834
  return [tool];
@@ -65829,7 +66249,11 @@ async function compactEmbeddedPiSessionDirect(params) {
65829
66249
  userTime,
65830
66250
  userTimeFormat,
65831
66251
  contextFiles,
65832
- memoryCitationsMode: params.config?.memory?.citations
66252
+ memoryCitationsMode: params.config?.memory?.citations,
66253
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
66254
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
66255
+ skillsAnchorList: params.config?.skills?.anchorList,
66256
+ currentUserMessage: void 0
65833
66257
  }));
65834
66258
  const sessionLock = await acquireSessionWriteLock({
65835
66259
  sessionFile: params.sessionFile,
@@ -73505,7 +73929,7 @@ async function deliverSessionMaintenanceWarning(params) {
73505
73929
  return;
73506
73930
  }
73507
73931
  try {
73508
- const { deliverOutboundPayloads } = await import("./deliver-D7BQXt0l.js").then((n) => n.n);
73932
+ const { deliverOutboundPayloads } = await import("./deliver-DrgHcdVo.js").then((n) => n.n);
73509
73933
  await deliverOutboundPayloads({
73510
73934
  cfg: params.cfg,
73511
73935
  channel,