@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
@@ -8,12 +8,12 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-ChYu
8
8
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-CUNoPTKm.js";
9
9
  import { $ as isRich, A as normalizeE164, D as isRecord$1, E as formatTerminalLink, H as isPlainObject, I as shortenHomeInString, J as setVerbose, K as logVerbose, L as shortenHomePath, P as resolveUserPath, Q as colorize, R as sleep$1, S as clampInt, T as escapeRegExp, U as danger, V as truncateUtf16Safe, Y as shouldLogVerbose, Z as warn, _ as matchPluginCommand, a as normalizeAnyChannelId, b as CONFIG_DIR, ct as normalizeLogLevel, d as createPluginRegistry, et as theme, f as normalizePluginHttpPath, g as listPluginCommands, h as getPluginCommandSpecs, l as requireActivePluginRegistry, m as executePluginCommand, n as CHAT_CHANNEL_ORDER, o as normalizeChannelId$1, p as clearPluginCommands, r as DEFAULT_CHAT_CHANNEL, tt as getChildLogger, u as setActivePluginRegistry, ut as resolvePreferredSymiTmpDir, v as createInternalHookEvent, w as ensureDir$3, y as triggerInternalHook, z as sliceUtf16Safe } from "./registry--_pGht6S.js";
10
10
  import { n as retryAsync } from "./retry-ilSJqnz9.js";
11
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, At as fetchDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, E as listThreadsDiscord, Et as normalizeChannelSlug, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as buildChannelKeyCandidates, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as applyChannelMatchMeta, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-ZhAe1nXO.js";
12
- import { B as getConfigOverrides, C as resolveIMessageRemoteAttachmentRoots, G as parseConfigPath, H as setConfigOverride, J as isSafeExecutableValue, K as setConfigValueAtPath, R as parseDurationMs, S as resolveIMessageAttachmentRoots, U as unsetConfigOverride, V as resetConfigOverrides, W as getConfigValueAtPath, X as resolveAgentMaxConcurrent, Y as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, Z as VERSION, _ as normalizeTelegramCommandName, a as writeConfigFile, b as isInboundPathAllowed, g as TELEGRAM_COMMAND_NAME_PATTERN, i as resolveConfigSnapshotHash, n as loadConfig, o as validateConfigObjectWithPlugins, q as unsetConfigValueAtPath, r as readConfigFileSnapshot, v as resolveTelegramCustomCommands, w as normalizeScpRemoteHost, z as validateJsonSchemaValue } from "./config-BzupW6LN.js";
11
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, At as fetchDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, E as listThreadsDiscord, Et as normalizeChannelSlug, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as buildChannelKeyCandidates, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as applyChannelMatchMeta, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-CF7BhO8B.js";
12
+ import { B as getConfigOverrides, C as resolveIMessageRemoteAttachmentRoots, G as parseConfigPath, H as setConfigOverride, J as isSafeExecutableValue, K as setConfigValueAtPath, R as parseDurationMs, S as resolveIMessageAttachmentRoots, U as unsetConfigOverride, V as resetConfigOverrides, W as getConfigValueAtPath, X as resolveAgentMaxConcurrent, Y as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, Z as VERSION, _ as normalizeTelegramCommandName, a as writeConfigFile, b as isInboundPathAllowed, g as TELEGRAM_COMMAND_NAME_PATTERN, i as resolveConfigSnapshotHash, n as loadConfig, o as validateConfigObjectWithPlugins, q as unsetConfigValueAtPath, r as readConfigFileSnapshot, v as resolveTelegramCustomCommands, w as normalizeScpRemoteHost, z as validateJsonSchemaValue } from "./config-Cf-PzD3r.js";
13
13
  import { a as clearActiveProgressLine, i as defaultRuntime, o as registerActiveProgressLine, r as createNonExitingRuntime, s as unregisterActiveProgressLine, t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
14
14
  import { i as parseBooleanValue$1, n as resolveCliName, r as isTruthyEnvValue, t as formatCliCommand } from "./command-format-DSdvQ_M5.js";
15
15
  import { $ as resolveShellEnvFallbackTimeoutMs, A as getSoonestCooldownExpiry, B as resolveSymiAgentDir, C as getCustomProviderApiKey, D as resolveModelAuthMode, E as resolveEnvApiKey, F as dedupeProfileIds, H as withFileLock, I as listProfilesForProvider, J as DEFAULT_CONTEXT_TOKENS, K as normalizeSecretInput, L as markAuthProfileGood, M as markAuthProfileFailure, N as markAuthProfileUsed, P as resolveApiKeyForProfile, R as ensureAuthProfileStore, S as getApiKeyForModel, T as resolveApiKeyForProvider, X as DEFAULT_PROVIDER, Y as DEFAULT_MODEL, Z as getShellPathFromLoginShell, a as isCliProvider, b as OLLAMA_NATIVE_BASE_URL, c as normalizeProviderId, d as resolveDefaultModelForAgent, f as resolveModelRefFromString, i as findNormalizedProviderValue, j as isProfileInCooldown, k as resolveAuthProfileOrder, m as resolveThinkingDefault, n as buildConfiguredAllowlistKeys, o as modelKey, p as resolveSubagentSpawnModelSelection, q as resolveAuthProfileDisplayLabel, r as buildModelAliasIndex, s as normalizeModelRef$2, t as buildAllowedModelSet, u as resolveConfiguredModelRef, w as requireApiKey, x as createOllamaStreamFn, z as resolveAuthStorePathForDisplay } from "./model-selection-CtVwtb6y.js";
16
- import { A as logInfo, C as resolveSymiPackageRoot, D as spawnWithFallback, E as runExec, O as logDebug, S as loadWorkspaceBootstrapFiles, T as runCommandWithTimeout, a as resolveAgentModelPrimary, b as ensureAgentWorkspace, c as resolveDefaultAgentId, d as resolveSessionAgentIds, h as DEFAULT_IDENTITY_FILENAME, i as resolveAgentModelFallbacksOverride, j as logWarn, k as logError, l as resolveEffectiveModelFallbacks, m as DEFAULT_BOOTSTRAP_FILENAME, n as resolveAgentConfig, o as resolveAgentSkillsFilter, p as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId, x as filterBootstrapFilesForSession } from "./agent-scope-C3gMMKCU.js";
16
+ import { A as logInfo, C as resolveSymiPackageRoot, D as spawnWithFallback, E as runExec, O as logDebug, S as loadWorkspaceBootstrapFiles, T as runCommandWithTimeout, a as resolveAgentModelPrimary, b as ensureAgentWorkspace, c as resolveDefaultAgentId, d as resolveSessionAgentIds, h as DEFAULT_IDENTITY_FILENAME, i as resolveAgentModelFallbacksOverride, j as logWarn, k as logError, l as resolveEffectiveModelFallbacks, m as DEFAULT_BOOTSTRAP_FILENAME, n as resolveAgentConfig, o as resolveAgentSkillsFilter, p as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId, w as resolveSymiPackageRootSync, x as filterBootstrapFilesForSession } from "./agent-scope-C3gMMKCU.js";
17
17
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverSymiPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-hy3Bn-r9.js";
18
18
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-Bv8oZiTO.js";
19
19
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-Ji7f0gqq.js";
@@ -27,38 +27,38 @@ import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel
27
27
  import { t as normalizeChatType } from "./chat-type-CEMQNtWX.js";
28
28
  import { n as resolveMarkdownTableMode } from "./markdown-tables-Dfaqilz6.js";
29
29
  import { t as convertMarkdownTables } from "./tables-DR0NmBeH.js";
30
- import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-jsofmTfJ.js";
30
+ import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-CJIEYVXL.js";
31
31
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-D7Lno-TE.js";
32
32
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-B7YyMnIi.js";
33
- import { a as createSlackWebClient, c as validateSlackBlocksArray, i as buildSlackBlocksFallbackText, o as resolveSlackWebClientOptions, s as parseSlackBlocksInput, t as sendMessageSlack } from "./send-BP5pSPaZ.js";
34
- import { $ as parseTelegramTarget, A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as readChannelAllowFromStore, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as upsertChannelPairingRequest, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, Q as isVoiceCompatibleAudio, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as addChannelAllowFromStoreEntry, X as listPairingChannels, Y as getPairingAdapter, Z as withTelegramApiErrorLogging, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, et as resolveTelegramTargetChatType, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, nt as toLocationContext, o as sendMessageTelegram, p as markdownToTelegramChunks, q as removeChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as formatLocationText, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-DLO_yV5_.js";
35
- import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as registerUnhandledRejectionHandler, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as buildRandomTempFilePath } from "./runner-BhifC1J_.js";
33
+ import { a as createSlackWebClient, c as validateSlackBlocksArray, i as buildSlackBlocksFallbackText, o as resolveSlackWebClientOptions, s as parseSlackBlocksInput, t as sendMessageSlack } from "./send-DDpZS9jb.js";
34
+ import { $ as parseTelegramTarget, A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as readChannelAllowFromStore, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as upsertChannelPairingRequest, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, Q as isVoiceCompatibleAudio, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as addChannelAllowFromStoreEntry, X as listPairingChannels, Y as getPairingAdapter, Z as withTelegramApiErrorLogging, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, et as resolveTelegramTargetChatType, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, nt as toLocationContext, o as sendMessageTelegram, p as markdownToTelegramChunks, q as removeChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as formatLocationText, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-BAzimHH-.js";
35
+ import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as registerUnhandledRejectionHandler, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as buildRandomTempFilePath } from "./runner-D9c_MNRa.js";
36
36
  import { a as resolveAckReaction, c as resolveHumanDelayConfig, i as resolveResponsePrefixTemplate, n as createReplyPrefixOptions, o as resolveAgentIdentity, s as resolveEffectiveMessagesConfig } from "./reply-prefix-BHuV5t70.js";
37
37
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-CWMflosr.js";
38
- import { c as getSkillsSnapshotVersion, d as resolvePairingPaths, f as createAsyncLock, i as resolveSkillCommandInvocation, l as generatePairingToken, m as writeJsonAtomic, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as readJsonFile, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as pruneExpiredPending } from "./skill-commands-DEfqC_kJ.js";
39
- import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-C9DbB-Kp.js";
40
- import { M as isSecureWebSocketUrl, N as rawDataToString, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, x as ensureChromeExtensionRelayServer } from "./chrome-D9kN9org.js";
38
+ import { c as getSkillsSnapshotVersion, d as resolvePairingPaths, f as createAsyncLock, i as resolveSkillCommandInvocation, l as generatePairingToken, m as writeJsonAtomic, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as readJsonFile, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as pruneExpiredPending } from "./skill-commands-C70yD9PL.js";
39
+ import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, h as parseFrontmatterBlock, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-DuQ-xGok.js";
40
+ import { M as isSecureWebSocketUrl, N as rawDataToString, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, x as ensureChromeExtensionRelayServer } from "./chrome-CdjVSHtz.js";
41
41
  import { A as normalizeHyphenSlug, F as resolveChannelGroupRequireMention, I as resolveChannelGroupToolsPolicy, M as normalizeStringEntriesLower, P as resolveChannelGroupPolicy, a as normalizeReasoningLevel, c as normalizeVerboseLevel, d as getChannelDock, f as listChannelDocks, i as normalizeElevatedLevel, j as normalizeStringEntries, k as normalizeAtHashSlug, l as resolveResponseUsageMode, m as normalizeSignalMessagingTarget, n as formatXHighModelHint, o as normalizeThinkLevel, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking } from "./thinking-DCNUIAHY.js";
42
42
  import { r as resolveIMessageAccount } from "./accounts-Dtszw3Zn.js";
43
43
  import { i as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-BToL3HlP.js";
44
- 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-CKgFosI5.js";
45
- import { $ as normalizeToolName, A as isTransientHttpError, At as countToolResults, B as resolveProfile, Bt as resolveChannelResetConfig, C as isContextOverflowError, Ct as deliveryContextKey, D as isRateLimitAssistantError, Dt as normalizeAccountId$3, E as isLikelyContextOverflowError, Et as normalizeSessionDeliveryFields, F as resolveSandboxContext, Ft as normalizeInputProvenance, G as resolveBrowserControlAuth, Gt as resolveFreshSessionTotalTokens, H as resolveExistingPathsWithinRoot, Ht as resolveSessionResetType, I as resolveSandboxRuntimeStatus, It as acquireSessionWriteLock, J as buildPluginToolGroups, Jt as resolveMainSessionKey, K as resolveSandboxConfigForAgent, Kt as canonicalizeMainSessionAlias, L as createBrowserRouteContext, Lt as resolveSessionLockMaxHoldFromTimeout, M as parseImageSizeError, Mt as INPUT_PROVENANCE_KIND_VALUES, N as sanitizeUserFacingText, Nt as applyInputProvenanceToUserMessage, O as isRawApiErrorPayload, Ot as archiveSessionTranscripts, P as ensureSandboxWorkspaceForSession, Pt as hasInterSessionUserProvenance, Q as mergeAlsoAllowPolicy, R as registerBrowserRoutes, Rt as resolveSessionKey, S as isCompactionFailureError, St as deliveryContextFromSession, T as isFailoverErrorMessage, Tt as normalizeDeliveryContext, U as getBridgeAuthForPort, Ut as resolveThreadFlag, V as DEFAULT_UPLOAD_DIR, Vt as resolveSessionResetPolicy, W as ensureBrowserControlAuth, Wt as DEFAULT_RESET_TRIGGERS, X as expandPolicyWithPluginGroups, Xt as resolveGroupSessionKey, Y as collectExplicitAllowlist, Yt as deriveSessionMetaPatch, Z as expandToolGroups, _ as formatRawAssistantErrorForUi, _t as updateLastRoute, a as isMessagingToolDuplicateNormalized, at as ensureSessionHeader, b as isBillingAssistantError, bt as isCacheEnabled, c as extractToolCallsFromAssistant, ct as sanitizeGoogleTurnOrdering, d as isAntigravityClaude, dt as appendAssistantMessageToSessionTranscript, et as resolveToolProfilePolicy, f as isGoogleModelApi, g as formatBillingErrorMessage, gt as recordSessionMetaFromInbound, h as formatAssistantErrorText, ht as readSessionUpdatedAt, it as buildBootstrapContextFiles, j as parseImageDimensionError, jt as extractToolCallNames, k as isTimeoutErrorMessage, kt as capArrayByJsonBytes, l as extractToolResultId, lt as extractDeliveryInfo, m as classifyFailoverReason, mt as loadSessionStore, n as validateGeminiTurns, nt as compileGlobPatterns, o as normalizeTextForComparison, ot as resolveBootstrapMaxChars, p as BILLING_ERROR_USER_MESSAGE, pt as resolveAndPersistSessionFile, q as applyOwnerOnlyToolPolicy, qt as resolveExplicitAgentSessionKey, r as pickFallbackThinkingLevel, rt as matchesAnyGlobPattern, s as sanitizeSessionMessagesImages, st as resolveBootstrapTotalMaxChars, t as validateAnthropicTurns, tt as stripPluginOnlyAllowlist, u as downgradeOpenAIReasoningBlocks, ut as parseSessionThreadInfo, v as getApiErrorPayloadFingerprint, vt as updateSessionStore, w as isFailoverAssistantError, wt as mergeDeliveryContext, x as isCloudCodeAssistFormatError, xt as resolveCacheTtlMs$1, y as isAuthAssistantError, yt as updateSessionStoreEntry, z as resolveBrowserConfig, zt as evaluateSessionFreshness } from "./pi-embedded-helpers-BL7ZRhGv.js";
44
+ 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-hjUeDZ7e.js";
45
+ import { $ as normalizeToolName, A as isTransientHttpError, At as countToolResults, B as resolveProfile, Bt as resolveChannelResetConfig, C as isContextOverflowError, Ct as deliveryContextKey, D as isRateLimitAssistantError, Dt as normalizeAccountId$3, E as isLikelyContextOverflowError, Et as normalizeSessionDeliveryFields, F as resolveSandboxContext, Ft as normalizeInputProvenance, G as resolveBrowserControlAuth, Gt as resolveFreshSessionTotalTokens, H as resolveExistingPathsWithinRoot, Ht as resolveSessionResetType, I as resolveSandboxRuntimeStatus, It as acquireSessionWriteLock, J as buildPluginToolGroups, Jt as resolveMainSessionKey, K as resolveSandboxConfigForAgent, Kt as canonicalizeMainSessionAlias, L as createBrowserRouteContext, Lt as resolveSessionLockMaxHoldFromTimeout, M as parseImageSizeError, Mt as INPUT_PROVENANCE_KIND_VALUES, N as sanitizeUserFacingText, Nt as applyInputProvenanceToUserMessage, O as isRawApiErrorPayload, Ot as archiveSessionTranscripts, P as ensureSandboxWorkspaceForSession, Pt as hasInterSessionUserProvenance, Q as mergeAlsoAllowPolicy, R as registerBrowserRoutes, Rt as resolveSessionKey, S as isCompactionFailureError, St as deliveryContextFromSession, T as isFailoverErrorMessage, Tt as normalizeDeliveryContext, U as getBridgeAuthForPort, Ut as resolveThreadFlag, V as DEFAULT_UPLOAD_DIR, Vt as resolveSessionResetPolicy, W as ensureBrowserControlAuth, Wt as DEFAULT_RESET_TRIGGERS, X as expandPolicyWithPluginGroups, Xt as resolveGroupSessionKey, Y as collectExplicitAllowlist, Yt as deriveSessionMetaPatch, Z as expandToolGroups, _ as formatRawAssistantErrorForUi, _t as updateLastRoute, a as isMessagingToolDuplicateNormalized, at as ensureSessionHeader, b as isBillingAssistantError, bt as isCacheEnabled, c as extractToolCallsFromAssistant, ct as sanitizeGoogleTurnOrdering, d as isAntigravityClaude, dt as appendAssistantMessageToSessionTranscript, et as resolveToolProfilePolicy, f as isGoogleModelApi, g as formatBillingErrorMessage, gt as recordSessionMetaFromInbound, h as formatAssistantErrorText, ht as readSessionUpdatedAt, it as buildBootstrapContextFiles, j as parseImageDimensionError, jt as extractToolCallNames, k as isTimeoutErrorMessage, kt as capArrayByJsonBytes, l as extractToolResultId, lt as extractDeliveryInfo, m as classifyFailoverReason, mt as loadSessionStore, n as validateGeminiTurns, nt as compileGlobPatterns, o as normalizeTextForComparison, ot as resolveBootstrapMaxChars, p as BILLING_ERROR_USER_MESSAGE, pt as resolveAndPersistSessionFile, q as applyOwnerOnlyToolPolicy, qt as resolveExplicitAgentSessionKey, r as pickFallbackThinkingLevel, rt as matchesAnyGlobPattern, s as sanitizeSessionMessagesImages, st as resolveBootstrapTotalMaxChars, t as validateAnthropicTurns, tt as stripPluginOnlyAllowlist, u as downgradeOpenAIReasoningBlocks, ut as parseSessionThreadInfo, v as getApiErrorPayloadFingerprint, vt as updateSessionStore, w as isFailoverAssistantError, wt as mergeDeliveryContext, x as isCloudCodeAssistFormatError, xt as resolveCacheTtlMs$1, y as isAuthAssistantError, yt as updateSessionStoreEntry, z as resolveBrowserConfig, zt as evaluateSessionFreshness } from "./pi-embedded-helpers-6EL59cK1.js";
46
46
  import { n as resolveConversationLabel } from "./conversation-label-yNSj43Jt.js";
47
47
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-A0xdf3yk.js";
48
48
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-x1D4Vniz.js";
49
49
  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-_oc91gNi.js";
50
50
  import { i as saveMediaBuffer, r as getMediaDir } from "./store-Do3t33-c.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-D5EzMeL_.js";
52
- import { S as minimaxUnderstandImage, _ as stripThinkingTagsFromText, a as decodeDataUrl, b as extractTextFromChatContent, 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 resolveToolDisplay, x as ensureSymiModelsJson, y as stripReasoningTagsFromText } from "./image-DFyINnvE.js";
52
+ import { S as minimaxUnderstandImage, _ as stripThinkingTagsFromText, a as decodeDataUrl, b as extractTextFromChatContent, 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 resolveToolDisplay, x as ensureSymiModelsJson, y as stripReasoningTagsFromText } from "./image-CS95I-I5.js";
53
53
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-LbcEa65a.js";
54
54
  import { c as normalizeExtraMemoryPaths, m as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-Qi-tyvHh.js";
55
55
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Wd5tNeQG.js";
56
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-DdOb0Em2.js";
56
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-DZ5-lr4s.js";
57
57
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-BuYpmEx-.js";
58
- import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-CGhw9mO3.js";
58
+ import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-BfqyNBU1.js";
59
59
  import { t as makeProxyFetch } from "./proxy-D27OUbrW.js";
60
60
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-CHQ7BTlU.js";
61
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-BR2TPTVW.js";
61
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-B4fizDsZ.js";
62
62
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-DiyK6bgV.js";
63
63
  import { t as getActiveWebListener } from "./active-listener-CJuvR4C2.js";
64
64
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-CP722fTK.js";
@@ -11638,7 +11638,7 @@ async function getMemorySearchManager(params) {
11638
11638
  const wrapper = new FallbackMemoryManager({
11639
11639
  primary,
11640
11640
  fallbackFactory: async () => {
11641
- const { MemoryIndexManager } = await import("./manager-DdOb0Em2.js").then((n) => n.n);
11641
+ const { MemoryIndexManager } = await import("./manager-DZ5-lr4s.js").then((n) => n.n);
11642
11642
  return await MemoryIndexManager.get(params);
11643
11643
  }
11644
11644
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -11651,7 +11651,7 @@ async function getMemorySearchManager(params) {
11651
11651
  }
11652
11652
  }
11653
11653
  try {
11654
- const { MemoryIndexManager } = await import("./manager-DdOb0Em2.js").then((n) => n.n);
11654
+ const { MemoryIndexManager } = await import("./manager-DZ5-lr4s.js").then((n) => n.n);
11655
11655
  return { manager: await MemoryIndexManager.get(params) };
11656
11656
  } catch (err) {
11657
11657
  return {
@@ -15653,7 +15653,7 @@ async function routeReply(params) {
15653
15653
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
15654
15654
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
15655
15655
  try {
15656
- const { deliverOutboundPayloads } = await import("./deliver-CKgFosI5.js").then((n) => n.n);
15656
+ const { deliverOutboundPayloads } = await import("./deliver-hjUeDZ7e.js").then((n) => n.n);
15657
15657
  return {
15658
15658
  ok: true,
15659
15659
  messageId: (await deliverOutboundPayloads({
@@ -18127,7 +18127,7 @@ async function describeStickerImage(params) {
18127
18127
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
18128
18128
  try {
18129
18129
  const buffer = await fs$1.readFile(imagePath);
18130
- const { describeImageWithModel } = await import("./image-DFyINnvE.js").then((n) => n.n);
18130
+ const { describeImageWithModel } = await import("./image-CS95I-I5.js").then((n) => n.n);
18131
18131
  return (await describeImageWithModel({
18132
18132
  buffer,
18133
18133
  fileName: "sticker.webp",
@@ -18538,7 +18538,7 @@ function createWhatsAppLoginTool() {
18538
18538
  force: Type.Optional(Type.Boolean())
18539
18539
  }),
18540
18540
  execute: async (_toolCallId, args) => {
18541
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-lMl_OqDj.js");
18541
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-B4dxH543.js");
18542
18542
  if ((args?.action ?? "start") === "wait") {
18543
18543
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
18544
18544
  return {
@@ -20693,7 +20693,7 @@ async function preflightDiscordMessage(params) {
20693
20693
  let preflightTranscript;
20694
20694
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
20695
20695
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
20696
- const { transcribeFirstAudio } = await import("./audio-preflight-DucGa8w7.js");
20696
+ const { transcribeFirstAudio } = await import("./audio-preflight-CoKYDdd4.js");
20697
20697
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
20698
20698
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
20699
20699
  ctx: {
@@ -27382,6 +27382,38 @@ async function runWithImageModelFallback(params) {
27382
27382
  //#endregion
27383
27383
  //#region src/config/model-profiles-builtin.ts
27384
27384
  /**
27385
+ * Shared safety + output-style additions applied to most built-in profiles
27386
+ * and the Generic fallback. These rules came from a long history of
27387
+ * model-specific bugs (verification-monologue padding, "I have addressed"
27388
+ * preambles, post-answer assessment lists). Keeping them in one place
27389
+ * means a new profile inherits sane defaults instead of starting empty.
27390
+ *
27391
+ * Stage 2.4 of the prompt-reduction plan: rules that ALL profiles need
27392
+ * live here; profile-specific rules (control-token stripping, tool-arg
27393
+ * cleanup, reasoning hints) live in their own per-profile additions.
27394
+ *
27395
+ * Exported so resolve-model-profile.ts can apply the same additions to
27396
+ * the Generic fallback profile — no model resolves to "Generic" without
27397
+ * inheriting the safety/style rules.
27398
+ */
27399
+ const SAFETY_AND_STYLE_ADDITIONS = [
27400
+ "CRITICAL OUTPUT RULES:",
27401
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
27402
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
27403
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
27404
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
27405
+ "- If you need to verify your work, do so before writing your response, not after.",
27406
+ "- Send brief progress updates on long tasks so the user knows you are active."
27407
+ ];
27408
+ /** Hint for native-reasoning models (Nemotron, Qwen 3.5/3.6) to keep
27409
+ * planning internal. Not applied to Gemma/Ollama because those models
27410
+ * don't have structured thinking and the rule confuses them. */
27411
+ const REASONING_DISCIPLINE_ADDITION = "- Keep planning and reasoning internal. Only speak when you have a result or need user input.";
27412
+ /** Hint for models that leak Gemma-style control tokens (Gemma family,
27413
+ * Ollama hosting any uncensored open model). Forces tool-arg cleanup and
27414
+ * forbids leaking turn markers in user-visible text. */
27415
+ 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."];
27416
+ /**
27385
27417
  * Built-in model profiles. Ordered from most-specific to least-specific so
27386
27418
  * that `resolveModelProfile` can return the first match.
27387
27419
  *
@@ -27415,17 +27447,7 @@ const BUILTIN_PROFILES = [
27415
27447
  hasStructuredThinking: false,
27416
27448
  validateToolArgs: true
27417
27449
  },
27418
- promptAdditions: [
27419
- "CRITICAL OUTPUT RULES:",
27420
- "- Your response ends when you have delivered the answer. Do not append anything after.",
27421
- "- Do not output raw control tokens, channel tags, or turn markers.",
27422
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
27423
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
27424
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
27425
- "- If you need to verify your work, do so before writing your response, not after.",
27426
- "- Send brief progress updates on long tasks so the user knows you are active.",
27427
- "- 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."
27428
- ],
27450
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
27429
27451
  ui: {
27430
27452
  badge: "Local",
27431
27453
  watchdogMs: 9e5,
@@ -27452,16 +27474,7 @@ const BUILTIN_PROFILES = [
27452
27474
  hasStructuredThinking: true,
27453
27475
  validateToolArgs: false
27454
27476
  },
27455
- promptAdditions: [
27456
- "CRITICAL OUTPUT RULES:",
27457
- "- Your response ends when you have delivered the answer. Do not append anything after.",
27458
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
27459
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
27460
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
27461
- "- If you need to verify your work, do so before writing your response, not after.",
27462
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
27463
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
27464
- ],
27477
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
27465
27478
  ui: {
27466
27479
  badge: "Local",
27467
27480
  watchdogMs: 9e5,
@@ -27487,7 +27500,7 @@ const BUILTIN_PROFILES = [
27487
27500
  hasStructuredThinking: true,
27488
27501
  validateToolArgs: false
27489
27502
  },
27490
- promptAdditions: [],
27503
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
27491
27504
  ui: {
27492
27505
  badge: "API",
27493
27506
  watchdogMs: 3e5,
@@ -27520,15 +27533,7 @@ const BUILTIN_PROFILES = [
27520
27533
  hasStructuredThinking: true,
27521
27534
  validateToolArgs: false
27522
27535
  },
27523
- promptAdditions: [
27524
- "CRITICAL OUTPUT RULES:",
27525
- "- Your response ends when you have delivered the answer. Do not append anything after.",
27526
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
27527
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
27528
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
27529
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
27530
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
27531
- ],
27536
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
27532
27537
  ui: {
27533
27538
  badge: "Spider",
27534
27539
  watchdogMs: 9e5,
@@ -27561,16 +27566,7 @@ const BUILTIN_PROFILES = [
27561
27566
  hasStructuredThinking: false,
27562
27567
  validateToolArgs: true
27563
27568
  },
27564
- promptAdditions: [
27565
- "CRITICAL OUTPUT RULES:",
27566
- "- Your response ends when you have delivered the answer. Do not append anything after.",
27567
- "- Do not output raw control tokens, channel tags, or turn markers.",
27568
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
27569
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
27570
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
27571
- "- Send brief progress updates on long tasks so the user knows you are active.",
27572
- "- 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."
27573
- ],
27569
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
27574
27570
  ui: {
27575
27571
  badge: "Spider",
27576
27572
  watchdogMs: 6e5,
@@ -27602,16 +27598,7 @@ const BUILTIN_PROFILES = [
27602
27598
  hasStructuredThinking: true,
27603
27599
  validateToolArgs: false
27604
27600
  },
27605
- promptAdditions: [
27606
- "CRITICAL OUTPUT RULES:",
27607
- "- Your response ends when you have delivered the answer. Do not append anything after.",
27608
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
27609
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
27610
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
27611
- "- If you need to verify your work, do so before writing your response, not after.",
27612
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
27613
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
27614
- ],
27601
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
27615
27602
  ui: {
27616
27603
  badge: "CoreWeave",
27617
27604
  watchdogMs: 9e5,
@@ -27622,7 +27609,15 @@ const BUILTIN_PROFILES = [
27622
27609
 
27623
27610
  //#endregion
27624
27611
  //#region src/config/resolve-model-profile.ts
27625
- /** Default profile returned when no match is found. */
27612
+ /**
27613
+ * Default profile returned when no match is found.
27614
+ *
27615
+ * Stage 2.4 of the prompt-reduction plan: the Generic fallback now ships
27616
+ * the same safety+style additions as every named profile, so newly-added
27617
+ * models without a profile entry inherit sane defaults instead of
27618
+ * starting empty (which would silently regress safety rules until someone
27619
+ * notices and adds a profile).
27620
+ */
27626
27621
  const FALLBACK_PROFILE = {
27627
27622
  match: "*",
27628
27623
  label: "Generic",
@@ -27641,7 +27636,7 @@ const FALLBACK_PROFILE = {
27641
27636
  hasStructuredThinking: false,
27642
27637
  validateToolArgs: false
27643
27638
  },
27644
- promptAdditions: [],
27639
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
27645
27640
  ui: {
27646
27641
  watchdogMs: 3e5,
27647
27642
  armWatchdogOnSend: true
@@ -34191,6 +34186,376 @@ async function prepareSessionManagerForRun(params) {
34191
34186
  }
34192
34187
  }
34193
34188
 
34189
+ //#endregion
34190
+ //#region src/agents/system-prompt-skills-autoload.ts
34191
+ const FRONTMATTER_RE = /^---\s*\n[\s\S]*?\n---\s*\n?/;
34192
+ let cachedPackageRoot$1;
34193
+ function getPackageRoot$1() {
34194
+ if (cachedPackageRoot$1 === void 0) cachedPackageRoot$1 = resolveSymiPackageRootSync({});
34195
+ return cachedPackageRoot$1;
34196
+ }
34197
+ function safeSkillName(name) {
34198
+ return /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/.test(name);
34199
+ }
34200
+ function tryLoadSkill(skillName, root) {
34201
+ const skillPath = path.join(root, "skills", skillName, "SKILL.md");
34202
+ try {
34203
+ if (!fs.statSync(skillPath).isFile()) return null;
34204
+ } catch {
34205
+ return null;
34206
+ }
34207
+ try {
34208
+ return fs.readFileSync(skillPath, "utf8");
34209
+ } catch {
34210
+ return null;
34211
+ }
34212
+ }
34213
+ function stripFrontmatter(body) {
34214
+ return body.replace(FRONTMATTER_RE, "").trimStart();
34215
+ }
34216
+ /**
34217
+ * Resolves and loads each named skill. Returns the inlinable Markdown block,
34218
+ * or empty string when no skills loaded / minimal mode / no names supplied.
34219
+ */
34220
+ function buildAutoLoadedSkillsBlock(opts) {
34221
+ if (opts.minimalMode) return "";
34222
+ const names = opts.skillNames.filter((n) => typeof n === "string" && n.trim().length > 0);
34223
+ if (names.length === 0) return "";
34224
+ const packageRoot = getPackageRoot$1();
34225
+ const loaded = [];
34226
+ for (const rawName of names) {
34227
+ const name = rawName.trim();
34228
+ if (!safeSkillName(name)) {
34229
+ logWarn(`autoLoadInline: skipping invalid skill name '${rawName}'`);
34230
+ continue;
34231
+ }
34232
+ let body = null;
34233
+ let source = "bundled";
34234
+ if (opts.workspaceDir) {
34235
+ body = tryLoadSkill(name, opts.workspaceDir);
34236
+ source = "workspace";
34237
+ }
34238
+ if (body === null && packageRoot) {
34239
+ body = tryLoadSkill(name, packageRoot);
34240
+ source = "bundled";
34241
+ }
34242
+ if (body === null) {
34243
+ logWarn(`autoLoadInline: skill '${name}' not found in workspace or bundled skills`);
34244
+ continue;
34245
+ }
34246
+ const stripped = stripFrontmatter(body).trim();
34247
+ if (!stripped) {
34248
+ logWarn(`autoLoadInline: skill '${name}' has empty body after frontmatter strip; skipping`);
34249
+ continue;
34250
+ }
34251
+ loaded.push({
34252
+ name,
34253
+ body: stripped,
34254
+ source
34255
+ });
34256
+ }
34257
+ if (loaded.length === 0) return "";
34258
+ return [
34259
+ "",
34260
+ "---",
34261
+ "",
34262
+ "## Auto-loaded Skills",
34263
+ "",
34264
+ loaded.map((skill) => `<!-- auto-loaded: ${skill.name} (${skill.source}) -->\n${skill.body}`).join("\n\n---\n\n"),
34265
+ ""
34266
+ ].join("\n");
34267
+ }
34268
+
34269
+ //#endregion
34270
+ //#region src/agents/skills/triggers.ts
34271
+ const QUOTE_RE = /^["'`](.*)["'`]$/;
34272
+ const ARRAY_FORM_RE = /^\[(.*)\]$/s;
34273
+ function stripWrappingQuotes(s) {
34274
+ const m = s.trim().match(QUOTE_RE);
34275
+ return m ? m[1] : s.trim();
34276
+ }
34277
+ /** Parse a single trigger value, dropping empty / whitespace-only entries. */
34278
+ function cleanTrigger(raw) {
34279
+ const trimmed = stripWrappingQuotes(raw).toLowerCase();
34280
+ return trimmed.length > 0 ? trimmed : null;
34281
+ }
34282
+ /**
34283
+ * Parse the value of a `triggers:` frontmatter field into a string[].
34284
+ * Accepts both inline-array form `[a, b, "c d"]` and YAML-list form
34285
+ * (multiline with leading hyphens). Returns deduped lowercased trigger
34286
+ * strings, or empty array on unparseable / missing input.
34287
+ */
34288
+ function parseTriggersValue(raw) {
34289
+ if (typeof raw !== "string") return [];
34290
+ const trimmed = raw.trim();
34291
+ if (!trimmed) return [];
34292
+ const items = [];
34293
+ const arrayMatch = trimmed.match(ARRAY_FORM_RE);
34294
+ if (arrayMatch) {
34295
+ const inner = arrayMatch[1];
34296
+ let buf = "";
34297
+ let inQuote = null;
34298
+ for (const ch of inner) {
34299
+ if (inQuote) {
34300
+ if (ch === inQuote) inQuote = null;
34301
+ else buf += ch;
34302
+ continue;
34303
+ }
34304
+ if (ch === "\"" || ch === "'") {
34305
+ inQuote = ch;
34306
+ continue;
34307
+ }
34308
+ if (ch === ",") {
34309
+ const cleaned = cleanTrigger(buf);
34310
+ if (cleaned) items.push(cleaned);
34311
+ buf = "";
34312
+ continue;
34313
+ }
34314
+ buf += ch;
34315
+ }
34316
+ const cleaned = cleanTrigger(buf);
34317
+ if (cleaned) items.push(cleaned);
34318
+ } else for (const line of trimmed.split("\n")) {
34319
+ const ltrim = line.trimStart();
34320
+ if (ltrim.startsWith("- ")) {
34321
+ const cleaned = cleanTrigger(ltrim.slice(2));
34322
+ if (cleaned) items.push(cleaned);
34323
+ } else if (ltrim && !ltrim.startsWith("#")) {
34324
+ const cleaned = cleanTrigger(ltrim);
34325
+ if (cleaned) items.push(cleaned);
34326
+ }
34327
+ }
34328
+ const seen = /* @__PURE__ */ new Set();
34329
+ const out = [];
34330
+ for (const t of items) if (!seen.has(t)) {
34331
+ seen.add(t);
34332
+ out.push(t);
34333
+ }
34334
+ return out;
34335
+ }
34336
+ /**
34337
+ * Extract triggers from a parsed frontmatter record. Returns empty array
34338
+ * when the field is absent or unparseable.
34339
+ */
34340
+ function getSkillTriggers(frontmatter) {
34341
+ return parseTriggersValue(frontmatter.triggers);
34342
+ }
34343
+
34344
+ //#endregion
34345
+ //#region src/agents/tools/skill-search-tool.ts
34346
+ const SkillSearchToolSchema = Type.Object({
34347
+ query: Type.String({
34348
+ minLength: 1,
34349
+ description: "Intent description (2-8 words). Match by trigger keywords first, then description text."
34350
+ }),
34351
+ limit: Type.Optional(Type.Number({
34352
+ minimum: 1,
34353
+ maximum: 10,
34354
+ description: "Max results to return (default 5, capped at 10)."
34355
+ }))
34356
+ });
34357
+ const CACHE_TTL_MS = 6e4;
34358
+ const SAFE_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
34359
+ function loadSkillFromDir(dir, source) {
34360
+ const name = path.basename(dir);
34361
+ if (!SAFE_NAME_RE.test(name)) return null;
34362
+ const file = path.join(dir, "SKILL.md");
34363
+ let raw;
34364
+ try {
34365
+ if (!fs.statSync(file).isFile()) return null;
34366
+ raw = fs.readFileSync(file, "utf8");
34367
+ } catch {
34368
+ return null;
34369
+ }
34370
+ const fm = parseFrontmatterBlock(raw);
34371
+ return {
34372
+ name,
34373
+ description: (fm.description ?? "").trim(),
34374
+ path: file,
34375
+ triggers: getSkillTriggers(fm),
34376
+ source
34377
+ };
34378
+ }
34379
+ function listSkillDirs(root) {
34380
+ const skillsDir = path.join(root, "skills");
34381
+ let entries;
34382
+ try {
34383
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
34384
+ } catch {
34385
+ return [];
34386
+ }
34387
+ return entries.filter((e) => e.isDirectory()).map((e) => path.join(skillsDir, e.name));
34388
+ }
34389
+ let cachedPackageRoot;
34390
+ const cachePerWorkspace = /* @__PURE__ */ new Map();
34391
+ function getPackageRoot() {
34392
+ if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
34393
+ return cachedPackageRoot;
34394
+ }
34395
+ function loadAllSkills(workspaceDir) {
34396
+ const cacheKey = workspaceDir ?? "";
34397
+ const now = Date.now();
34398
+ const existing = cachePerWorkspace.get(cacheKey);
34399
+ if (existing && now - existing.loadedAt < CACHE_TTL_MS) return existing.skills;
34400
+ const seen = /* @__PURE__ */ new Map();
34401
+ if (workspaceDir) for (const dir of listSkillDirs(workspaceDir)) {
34402
+ const skill = loadSkillFromDir(dir, "workspace");
34403
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
34404
+ }
34405
+ const packageRoot = getPackageRoot();
34406
+ if (packageRoot) for (const dir of listSkillDirs(packageRoot)) {
34407
+ const skill = loadSkillFromDir(dir, "bundled");
34408
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
34409
+ }
34410
+ const skills = [...seen.values()];
34411
+ cachePerWorkspace.set(cacheKey, {
34412
+ skills,
34413
+ loadedAt: now
34414
+ });
34415
+ return skills;
34416
+ }
34417
+ const TOKEN_SPLIT_RE = /[^\w/]+/;
34418
+ function tokenizeQuery(raw) {
34419
+ return raw.toLowerCase().split(TOKEN_SPLIT_RE).filter((t) => t.length >= 2);
34420
+ }
34421
+ /**
34422
+ * Score a query against one skill's triggers + description.
34423
+ * - Trigger score: ratio of query tokens that appear in the trigger set.
34424
+ * - FTS score: 0.4 × ratio of query tokens that appear in the description
34425
+ * (case-insensitive substring match).
34426
+ * - Final = max(trigger, fts) so trigger matches always beat descriptions.
34427
+ * - Returns 0 for "no signal at all" (caller should drop these).
34428
+ */
34429
+ function scoreSkillMatch(skill, queryTokens) {
34430
+ if (queryTokens.length === 0) return 0;
34431
+ const triggerSet = new Set(skill.triggers.map((t) => t.toLowerCase()));
34432
+ const description = skill.description.toLowerCase();
34433
+ let triggerHits = 0;
34434
+ let ftsHits = 0;
34435
+ for (const token of queryTokens) if (triggerSet.has(token)) triggerHits += 1;
34436
+ else if (description.includes(token)) ftsHits += 1;
34437
+ const triggerScore = triggerHits / queryTokens.length;
34438
+ const ftsScore = ftsHits / queryTokens.length * .4;
34439
+ return Math.max(triggerScore, ftsScore);
34440
+ }
34441
+ /**
34442
+ * Pure-function search; exported for testing without going through the
34443
+ * tool execute wrapper.
34444
+ */
34445
+ function searchSkills(query, limit, workspaceDir) {
34446
+ const tokens = tokenizeQuery(query);
34447
+ if (tokens.length === 0) return [];
34448
+ const all = loadAllSkills(workspaceDir);
34449
+ const scored = [];
34450
+ for (const skill of all) {
34451
+ const score = scoreSkillMatch(skill, tokens);
34452
+ if (score > 0) scored.push({
34453
+ name: skill.name,
34454
+ description: skill.description,
34455
+ path: skill.path,
34456
+ score
34457
+ });
34458
+ }
34459
+ scored.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
34460
+ return scored.slice(0, limit);
34461
+ }
34462
+ function createSkillSearchTool(opts) {
34463
+ return {
34464
+ name: "skill_search",
34465
+ label: "skill_search",
34466
+ 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.",
34467
+ parameters: SkillSearchToolSchema,
34468
+ execute: async (_toolCallId, args) => {
34469
+ const params = args;
34470
+ const query = typeof params.query === "string" ? params.query.trim() : "";
34471
+ if (!query) return jsonResult({
34472
+ ok: false,
34473
+ error: "skill_search requires a non-empty `query` string."
34474
+ });
34475
+ const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.min(10, Math.max(1, Math.floor(params.limit))) : 5;
34476
+ try {
34477
+ return jsonResult({
34478
+ ok: true,
34479
+ query,
34480
+ matches: searchSkills(query, limit, opts?.workspaceDir)
34481
+ });
34482
+ } catch (err) {
34483
+ const message = err instanceof Error ? err.message : String(err);
34484
+ logWarn(`skill_search failed: ${message}`);
34485
+ return jsonResult({
34486
+ ok: false,
34487
+ error: message
34488
+ });
34489
+ }
34490
+ }
34491
+ };
34492
+ }
34493
+
34494
+ //#endregion
34495
+ //#region src/agents/system-prompt-skills-jit.ts
34496
+ const MAX_ANCHOR_DESCRIPTION_CHARS = 100;
34497
+ const MAX_AUTO_INJECT_RESULTS = 3;
34498
+ const MAX_AUTO_INJECT_TOTAL_CHARS = 600;
34499
+ /**
34500
+ * Build the anchor list block. Returns "" when no anchor list configured
34501
+ * or in preload mode (anchor list adds value only in jit/hybrid).
34502
+ */
34503
+ function buildAnchorListBlock(opts) {
34504
+ if (opts.minimalMode) return "";
34505
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
34506
+ const names = (opts.anchorList ?? []).filter((n) => typeof n === "string" && n.trim().length > 0);
34507
+ if (names.length === 0) return "";
34508
+ const lines = [];
34509
+ for (const name of names) {
34510
+ const description = searchSkills(name, 1, opts.workspaceDir)[0]?.description.trim() ?? "";
34511
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
34512
+ lines.push(truncated ? `- ${name}: ${truncated}` : `- ${name}`);
34513
+ }
34514
+ return [
34515
+ "",
34516
+ "## Anchor Skills",
34517
+ "These skills are always available. Read their SKILL.md via `read` if relevant. For full discovery use the `skill_search` tool.",
34518
+ lines.join("\n"),
34519
+ ""
34520
+ ].join("\n");
34521
+ }
34522
+ /**
34523
+ * Build the auto-injected matches block based on the user message triggers.
34524
+ * Returns "" when discoveryMode doesn't ask for it, no message available,
34525
+ * no matches found, or in minimal mode.
34526
+ */
34527
+ function buildAutoInjectBlock(opts) {
34528
+ if (opts.minimalMode) return "";
34529
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
34530
+ const message = (opts.userMessage ?? "").trim();
34531
+ if (!message) return "";
34532
+ const matches = searchSkills(message, MAX_AUTO_INJECT_RESULTS, opts.workspaceDir);
34533
+ if (matches.length === 0) return "";
34534
+ const lines = [];
34535
+ let total = 0;
34536
+ for (const match of matches) {
34537
+ const description = match.description.trim();
34538
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
34539
+ const skillRef = path.basename(path.dirname(match.path));
34540
+ const line = truncated ? `- ${skillRef}: ${truncated}` : `- ${skillRef}`;
34541
+ if (total + line.length > MAX_AUTO_INJECT_TOTAL_CHARS) break;
34542
+ lines.push(line);
34543
+ total += line.length + 1;
34544
+ }
34545
+ if (lines.length === 0) return "";
34546
+ return [
34547
+ "",
34548
+ "## Possibly Relevant Skills (auto-suggested for this request)",
34549
+ "These skills' triggers matched keywords in your message. Read the SKILL.md if it applies; otherwise ignore and proceed.",
34550
+ lines.join("\n"),
34551
+ ""
34552
+ ].join("\n");
34553
+ }
34554
+ /** Convenience: build both blocks concatenated. */
34555
+ function buildSkillsJitBlocks(opts) {
34556
+ return `${buildAnchorListBlock(opts)}${buildAutoInjectBlock(opts)}`;
34557
+ }
34558
+
34194
34559
  //#endregion
34195
34560
  //#region src/agents/tool-summaries.ts
34196
34561
  function buildToolSummaryMap(tools) {
@@ -34206,7 +34571,7 @@ function buildToolSummaryMap(tools) {
34206
34571
  //#endregion
34207
34572
  //#region src/agents/pi-embedded-runner/system-prompt.ts
34208
34573
  function buildEmbeddedSystemPrompt(params) {
34209
- return buildAgentSystemPrompt({
34574
+ const corePrompt = buildAgentSystemPrompt({
34210
34575
  workspaceDir: params.workspaceDir,
34211
34576
  defaultThinkLevel: params.defaultThinkLevel,
34212
34577
  reasoningLevel: params.reasoningLevel,
@@ -34234,6 +34599,19 @@ function buildEmbeddedSystemPrompt(params) {
34234
34599
  contextFiles: params.contextFiles,
34235
34600
  memoryCitationsMode: params.memoryCitationsMode
34236
34601
  });
34602
+ const promptMode = params.promptMode ?? "full";
34603
+ const isMinimal = promptMode === "minimal" || promptMode === "none";
34604
+ return `${corePrompt}${buildAutoLoadedSkillsBlock({
34605
+ skillNames: params.autoLoadInlineSkills ?? [],
34606
+ workspaceDir: params.workspaceDir,
34607
+ minimalMode: isMinimal
34608
+ })}${buildSkillsJitBlocks({
34609
+ discoveryMode: params.skillsDiscoveryMode,
34610
+ anchorList: params.skillsAnchorList,
34611
+ userMessage: params.currentUserMessage,
34612
+ workspaceDir: params.workspaceDir,
34613
+ minimalMode: isMinimal
34614
+ })}`;
34237
34615
  }
34238
34616
  function createSystemPromptOverride(systemPrompt) {
34239
34617
  const override = systemPrompt.trim();
@@ -35021,7 +35399,11 @@ async function runEmbeddedAttempt(params) {
35021
35399
  userTime,
35022
35400
  userTimeFormat,
35023
35401
  contextFiles,
35024
- memoryCitationsMode: params.config?.memory?.citations
35402
+ memoryCitationsMode: params.config?.memory?.citations,
35403
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
35404
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
35405
+ skillsAnchorList: params.config?.skills?.anchorList,
35406
+ currentUserMessage: params.prompt
35025
35407
  });
35026
35408
  const systemPromptReport = buildSystemPromptReport({
35027
35409
  source: "run",
@@ -36901,27 +37283,27 @@ async function runAgentTurn(params) {
36901
37283
  function createDefaultDeps() {
36902
37284
  return {
36903
37285
  sendMessageWhatsApp: async (...args) => {
36904
- const { sendMessageWhatsApp } = await import("./web-B8upqMUo.js");
37286
+ const { sendMessageWhatsApp } = await import("./web-7u3fdT2S.js");
36905
37287
  return await sendMessageWhatsApp(...args);
36906
37288
  },
36907
37289
  sendMessageTelegram: async (...args) => {
36908
- const { sendMessageTelegram } = await import("./send-DLO_yV5_.js").then((n) => n.l);
37290
+ const { sendMessageTelegram } = await import("./send-BAzimHH-.js").then((n) => n.l);
36909
37291
  return await sendMessageTelegram(...args);
36910
37292
  },
36911
37293
  sendMessageDiscord: async (...args) => {
36912
- const { sendMessageDiscord } = await import("./send-ZhAe1nXO.js").then((n) => n.t);
37294
+ const { sendMessageDiscord } = await import("./send-CF7BhO8B.js").then((n) => n.t);
36913
37295
  return await sendMessageDiscord(...args);
36914
37296
  },
36915
37297
  sendMessageSlack: async (...args) => {
36916
- const { sendMessageSlack } = await import("./send-BP5pSPaZ.js").then((n) => n.n);
37298
+ const { sendMessageSlack } = await import("./send-DDpZS9jb.js").then((n) => n.n);
36917
37299
  return await sendMessageSlack(...args);
36918
37300
  },
36919
37301
  sendMessageSignal: async (...args) => {
36920
- const { sendMessageSignal } = await import("./send-CGhw9mO3.js").then((n) => n.i);
37302
+ const { sendMessageSignal } = await import("./send-BfqyNBU1.js").then((n) => n.i);
36921
37303
  return await sendMessageSignal(...args);
36922
37304
  },
36923
37305
  sendMessageIMessage: async (...args) => {
36924
- const { sendMessageIMessage } = await import("./send-jsofmTfJ.js").then((n) => n.n);
37306
+ const { sendMessageIMessage } = await import("./send-CJIEYVXL.js").then((n) => n.n);
36925
37307
  return await sendMessageIMessage(...args);
36926
37308
  }
36927
37309
  };
@@ -47476,7 +47858,7 @@ async function registerSlackMonitorSlashCommands(params) {
47476
47858
  });
47477
47859
  const deliverSlashPayloads = async (replies) => {
47478
47860
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
47479
- import("./replies-BR2TPTVW.js").then((n) => n.r),
47861
+ import("./replies-B4fizDsZ.js").then((n) => n.r),
47480
47862
  import("./chunk-jvk9axTQ.js").then((n) => n.s),
47481
47863
  import("./markdown-tables-Dfaqilz6.js").then((n) => n.t)
47482
47864
  ]);
@@ -47531,7 +47913,7 @@ async function registerSlackMonitorSlashCommands(params) {
47531
47913
  let nativeCommands = [];
47532
47914
  if (nativeEnabled) {
47533
47915
  reg = await getCommandsRegistry();
47534
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DEfqC_kJ.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
47916
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-C70yD9PL.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
47535
47917
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
47536
47918
  skillCommands,
47537
47919
  provider: "slack"
@@ -52182,7 +52564,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
52182
52564
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
52183
52565
  let preflightTranscript;
52184
52566
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
52185
- const { transcribeFirstAudio } = await import("./audio-preflight-DucGa8w7.js");
52567
+ const { transcribeFirstAudio } = await import("./audio-preflight-CoKYDdd4.js");
52186
52568
  preflightTranscript = await transcribeFirstAudio({
52187
52569
  ctx: {
52188
52570
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -54327,23 +54709,23 @@ let webLoginQrPromise = null;
54327
54709
  let webChannelPromise = null;
54328
54710
  let whatsappActionsPromise = null;
54329
54711
  function loadWebOutbound() {
54330
- webOutboundPromise ??= import("./outbound-DW3cqlQW.js").then((n) => n.t);
54712
+ webOutboundPromise ??= import("./outbound-D7yJKgEX.js").then((n) => n.t);
54331
54713
  return webOutboundPromise;
54332
54714
  }
54333
54715
  function loadWebLogin() {
54334
- webLoginPromise ??= import("./login-K1YB_7-t.js").then((n) => n.n);
54716
+ webLoginPromise ??= import("./login-BhLw-aw1.js").then((n) => n.n);
54335
54717
  return webLoginPromise;
54336
54718
  }
54337
54719
  function loadWebLoginQr() {
54338
- webLoginQrPromise ??= import("./login-qr-lMl_OqDj.js");
54720
+ webLoginQrPromise ??= import("./login-qr-B4dxH543.js");
54339
54721
  return webLoginQrPromise;
54340
54722
  }
54341
54723
  function loadWebChannel() {
54342
- webChannelPromise ??= import("./web-B8upqMUo.js");
54724
+ webChannelPromise ??= import("./web-7u3fdT2S.js");
54343
54725
  return webChannelPromise;
54344
54726
  }
54345
54727
  function loadWhatsAppActions() {
54346
- whatsappActionsPromise ??= import("./whatsapp-actions-eTefsWhW.js");
54728
+ whatsappActionsPromise ??= import("./whatsapp-actions-B_3do0s7.js");
54347
54729
  return whatsappActionsPromise;
54348
54730
  }
54349
54731
  function createPluginRuntime() {
@@ -60231,6 +60613,22 @@ function wrapToolParamNormalization(tool, requiredParamGroups) {
60231
60613
  }
60232
60614
  };
60233
60615
  }
60616
+ /**
60617
+ * Override a tool's description while preserving execute, parameters, and
60618
+ * other properties. Used by Stage 2.5 of the prompt-reduction plan to move
60619
+ * usage docs from the system prompt into tool descriptions where they
60620
+ * belong contextually.
60621
+ *
60622
+ * The replacement description should include the upstream's tool-purpose
60623
+ * sentence so models that only read the description (without the prompt
60624
+ * section) still have the same baseline understanding.
60625
+ */
60626
+ function wrapToolWithDescriptionOverride(tool, description) {
60627
+ return {
60628
+ ...tool,
60629
+ description
60630
+ };
60631
+ }
60234
60632
  function wrapToolWorkspaceRootGuard(tool, root) {
60235
60633
  return {
60236
60634
  ...tool,
@@ -70447,6 +70845,7 @@ function createSymiTools(options) {
70447
70845
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
70448
70846
  createTaskListTool({ workspaceDir }),
70449
70847
  createTaskCancelTool({ workspaceDir }),
70848
+ createSkillSearchTool({ workspaceDir }),
70450
70849
  ...messageTool ? [messageTool] : [],
70451
70850
  createTtsTool({
70452
70851
  agentChannel: options?.agentChannel,
@@ -70642,6 +71041,26 @@ function resolveToolLoopDetectionConfig(params) {
70642
71041
  }
70643
71042
  };
70644
71043
  }
71044
+ /**
71045
+ * Edit tool description. Replaces the upstream's terse one-liner with
71046
+ * usage notes migrated from the system prompt's "Edit Tool Best Practices"
71047
+ * section in Stage 2.5 of the prompt-reduction plan. Co-locating these
71048
+ * notes with the tool means they ship only when edit is in palette, and
71049
+ * the system prompt section can be deleted in Stage 4 without losing the
71050
+ * guidance.
71051
+ *
71052
+ * Combined with the read-before-edit guard (Stage 1.3) and the model's
71053
+ * own discipline, this should kill the hallucinated-oldText failure class
71054
+ * for any well-intentioned model.
71055
+ */
71056
+ const EDIT_TOOL_DESCRIPTION = [
71057
+ "Edit a file by replacing exact text. The oldText must match the file EXACTLY (whitespace, indentation, and all).",
71058
+ "Best practices to avoid match failures:",
71059
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
71060
+ "- 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.",
71061
+ "- 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.",
71062
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines)."
71063
+ ].join(" ");
70645
71064
  function createSymiCodingTools(options) {
70646
71065
  const execToolName = "exec";
70647
71066
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -70730,7 +71149,7 @@ function createSymiCodingTools(options) {
70730
71149
  }
70731
71150
  if (tool.name === "edit") {
70732
71151
  if (sandboxRoot) return [];
70733
- const guarded = wrapEditToolWithGuard(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), readEditTracker);
71152
+ const guarded = wrapEditToolWithGuard(wrapToolWithDescriptionOverride(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), EDIT_TOOL_DESCRIPTION), readEditTracker);
70734
71153
  return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
70735
71154
  }
70736
71155
  return [tool];
@@ -71173,7 +71592,11 @@ async function compactEmbeddedPiSessionDirect(params) {
71173
71592
  userTime,
71174
71593
  userTimeFormat,
71175
71594
  contextFiles,
71176
- memoryCitationsMode: params.config?.memory?.citations
71595
+ memoryCitationsMode: params.config?.memory?.citations,
71596
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
71597
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
71598
+ skillsAnchorList: params.config?.skills?.anchorList,
71599
+ currentUserMessage: void 0
71177
71600
  }));
71178
71601
  const sessionLock = await acquireSessionWriteLock({
71179
71602
  sessionFile: params.sessionFile,
@@ -79235,7 +79658,7 @@ async function deliverSessionMaintenanceWarning(params) {
79235
79658
  return;
79236
79659
  }
79237
79660
  try {
79238
- const { deliverOutboundPayloads } = await import("./deliver-CKgFosI5.js").then((n) => n.n);
79661
+ const { deliverOutboundPayloads } = await import("./deliver-hjUeDZ7e.js").then((n) => n.n);
79239
79662
  await deliverOutboundPayloads({
79240
79663
  cfg: params.cfg,
79241
79664
  channel,