@symerian/symi 2.9.0 → 2.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/dist/{acp-cli-Bav1bRj2.js → acp-cli-Bc6ZQZ4f.js} +2 -2
  2. package/dist/{acp-cli-BTu3_kZ1.js → acp-cli-Dy9QuDBN.js} +2 -2
  3. package/dist/{agents-CvNeiuSB.js → agents-DTl30WoB.js} +7 -7
  4. package/dist/{agents.config-BCgY5FjE.js → agents.config-CO8F9mkD.js} +1 -1
  5. package/dist/{agents.config-Ct64cGQ8.js → agents.config-CZ3GFxPg.js} +1 -1
  6. package/dist/{audio-preflight-C2EgDXSo.js → audio-preflight-8UNY1akA.js} +11 -11
  7. package/dist/{audio-preflight-1dv3T5Zx.js → audio-preflight-By0dnw-T.js} +11 -11
  8. package/dist/{audio-preflight-Cb-T0r6e.js → audio-preflight-DQR2Ivi-.js} +5 -5
  9. package/dist/{audio-preflight-C6vpFnOG.js → audio-preflight-Dtsvq6Hj.js} +6 -6
  10. package/dist/{audit-CuKP86d_.js → audit-DGwhL71Q.js} +5 -5
  11. package/dist/{audit-C9nq99IR.js → audit-OPWWS900.js} +5 -5
  12. package/dist/{auth-choice-DmMyKZX4.js → auth-choice-BYDGn7lJ.js} +4 -4
  13. package/dist/{auth-choice-ChFU9OCF.js → auth-choice-BoOyy-ZT.js} +4 -4
  14. package/dist/{banner-Bf46tqiY.js → banner-D4MiyUnv.js} +1 -1
  15. package/dist/{browser-cli-ClgQ-C8E.js → browser-cli-CGLTZ9KQ.js} +3 -3
  16. package/dist/{browser-cli-DuPPIcuV.js → browser-cli-qpJlsofO.js} +3 -3
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +14 -14
  19. package/dist/bundled/session-memory/handler.js +14 -14
  20. package/dist/{call-M4YyUnwu.js → call-BCTAmPye.js} +1 -1
  21. package/dist/{call-DYfKEdwh.js → call-BIETyST6.js} +1 -1
  22. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  23. package/dist/{channel-options-Bqc2VCgt.js → channel-options-B6qP-vR-.js} +1 -1
  24. package/dist/{channel-options-D4a0ZJ72.js → channel-options-BiSSYYQC.js} +1 -1
  25. package/dist/{channel-web-YNC2xS5K.js → channel-web-DP97EUhx.js} +7 -7
  26. package/dist/{channels-cli-BFJcNLbB.js → channels-cli-6LNvJQPb.js} +30 -30
  27. package/dist/{channels-cli-h3GnmmM9.js → channels-cli-CE_A3Hai.js} +31 -31
  28. package/dist/{chrome-B14NNyfm.js → chrome-B-hW5hrK.js} +1 -1
  29. package/dist/{chrome-ROtrXlNs.js → chrome-BaMQiegP.js} +1 -1
  30. package/dist/{chrome-D2ohnA09.js → chrome-CO5ZhkcZ.js} +1 -1
  31. package/dist/{chrome-BJvuH-NZ.js → chrome-CtTba9sH.js} +1 -1
  32. package/dist/cli/daemon-cli.js +1 -1
  33. package/dist/{cli-BX54CAM7.js → cli-D4j_JTug.js} +27 -27
  34. package/dist/{cli-BpQlSGVs.js → cli-DwQ3mqhI.js} +26 -26
  35. package/dist/{command-registry-BiRjJ2Sy.js → command-registry-b62Qpsi2.js} +11 -11
  36. package/dist/{completion-cli-BYXofVqv.js → completion-cli-DUT2XYgK.js} +2 -2
  37. package/dist/{completion-cli-C8K5J1ld.js → completion-cli-RQyC3L-t.js} +1 -1
  38. package/dist/{config-PXAJCHa5.js → config-CitI_jxW.js} +8 -0
  39. package/dist/{config-BAVNLbja.js → config-D7Zr88dI.js} +8 -0
  40. package/dist/{config-BkZ9HOKT.js → config-Do4JxgLI.js} +8 -0
  41. package/dist/{config-DXt3pc08.js → config-Gfhqs66L.js} +8 -0
  42. package/dist/{config-cli-BPPD3xqE.js → config-cli-Di8VOhbp.js} +2 -2
  43. package/dist/{config-cli-Deoo6r2K.js → config-cli-H52N8rp1.js} +2 -2
  44. package/dist/{config-guard-BvqCjFPk.js → config-guard-BLcbR_sH.js} +2 -2
  45. package/dist/{config-guard-CaP-V3tf.js → config-guard-CgPPAm7S.js} +3 -3
  46. package/dist/{config-validation-B6Fa3VmF.js → config-validation-B6GnatLw.js} +1 -1
  47. package/dist/{config-validation-EmHZVnuz.js → config-validation-UMq2H_tR.js} +1 -1
  48. package/dist/{configure-D4f0P3bH.js → configure-BF9crM5K.js} +10 -10
  49. package/dist/{configure-BKHxUAAh.js → configure-DQxuawe-.js} +10 -10
  50. package/dist/{control-service-C0pRqIFv.js → control-service-BkyH7qkF.js} +4 -4
  51. package/dist/{control-service-Bujr5pk7.js → control-service-DnNPjFvU.js} +4 -4
  52. package/dist/{cron-cli-C8-Gv5dd.js → cron-cli-CcgewYtp.js} +3 -3
  53. package/dist/{cron-cli-BEdmHCWZ.js → cron-cli-DEcQk1bb.js} +3 -3
  54. package/dist/{daemon-cli-D6wyb9bo.js → daemon-cli-BNZu5unw.js} +6 -6
  55. package/dist/{daemon-cli-BFoJGCHZ.js → daemon-cli-BiBjGGfw.js} +6 -6
  56. package/dist/daemon-cli.js +8 -0
  57. package/dist/{daemon-runtime-Cp7obV7Q.js → daemon-runtime-C-Mwepv_.js} +1 -1
  58. package/dist/{daemon-runtime-D_elkkFW.js → daemon-runtime-C86WnKU5.js} +1 -1
  59. package/dist/{deliver-Bdk_R0pQ.js → deliver-DaRQn5Ai.js} +3 -3
  60. package/dist/{deliver-D7BQXt0l.js → deliver-DrgHcdVo.js} +3 -3
  61. package/dist/{deliver-B0OUq6RP.js → deliver-Dx39g9ey.js} +2 -2
  62. package/dist/{deliver-D0bWiRCg.js → deliver-XYF4JahT.js} +2 -2
  63. package/dist/{devices-cli-CHt4I-7e.js → devices-cli-Wb4H-vyx.js} +2 -2
  64. package/dist/{devices-cli-BXc6DPkC.js → devices-cli-hX2lrsCy.js} +2 -2
  65. package/dist/{directory-cli-CQTzAhw1.js → directory-cli-CLIYvXkV.js} +1 -1
  66. package/dist/{directory-cli-DRWJsAT6.js → directory-cli-C_vm-dsr.js} +1 -1
  67. package/dist/{dns-cli-BBVIay6Z.js → dns-cli-BJuUZ4pr.js} +1 -1
  68. package/dist/{dns-cli-BCKPibb8.js → dns-cli-CTCAHPcB.js} +1 -1
  69. package/dist/{doctor-completion-gMWymNcA.js → doctor-completion-BKXQ50ee.js} +1 -1
  70. package/dist/{doctor-completion-woDYSVtY.js → doctor-completion-BS2JEeZy.js} +1 -1
  71. package/dist/{doctor-config-flow-BCMxS2lf.js → doctor-config-flow-BFHsvL2k.js} +2 -2
  72. package/dist/{doctor-config-flow-B2dVxbL7.js → doctor-config-flow-l2aPNzHP.js} +2 -2
  73. package/dist/entry.js +1 -1
  74. package/dist/{exec-approvals-cli-BBKVrFTj.js → exec-approvals-cli-BXDSu2Ze.js} +4 -4
  75. package/dist/{exec-approvals-cli-CKRDAo17.js → exec-approvals-cli-uAM6-swA.js} +4 -4
  76. package/dist/extensionAPI.js +16 -16
  77. package/dist/{gateway-cli-DsnkTUOp.js → gateway-cli-Do9KUPqe.js} +42 -42
  78. package/dist/{gateway-cli-Bnh42-56.js → gateway-cli-moPf-zP5.js} +43 -43
  79. package/dist/{gateway-rpc-BEfosIsg.js → gateway-rpc-DMEPdgmc.js} +1 -1
  80. package/dist/{gateway-rpc-DZrB7Sl_.js → gateway-rpc-Wa_4MrZb.js} +1 -1
  81. package/dist/{glass-ui-ws-0Y0KsBvU.js → glass-ui-ws-D53pvIov.js} +35 -35
  82. package/dist/{glass-ui-ws-uj3DRmL8.js → glass-ui-ws-Dfro-3R8.js} +34 -34
  83. package/dist/{health-Dl2WRoTa.js → health-BQGRC0xh.js} +5 -5
  84. package/dist/{health-CcV5nKIK.js → health-CV741PBg.js} +5 -5
  85. package/dist/{hooks-cli-CTcHtm_0.js → hooks-cli-CG-PDY2U.js} +28 -28
  86. package/dist/{hooks-cli-DEJe3dUH.js → hooks-cli-CWXGIL9L.js} +27 -27
  87. package/dist/{image-MNvheU8U.js → image-BjyeKf1c.js} +2 -2
  88. package/dist/{image-BuVL0jHI.js → image-C-JvPPpM.js} +2 -2
  89. package/dist/{image-6RZuWKy5.js → image-GaF72sln.js} +2 -2
  90. package/dist/{image-CnEFsKgw.js → image-dYtWZNKT.js} +2 -2
  91. package/dist/index.js +35 -35
  92. package/dist/{lifecycle-core-Uucs6Wz6.js → lifecycle-core-BMVHLJi_.js} +2 -2
  93. package/dist/{lifecycle-core-v3lT0Ymo.js → lifecycle-core-HOQrbQ-_.js} +2 -2
  94. package/dist/llm-slug-generator.js +14 -14
  95. package/dist/{login-F4pbdnF5.js → login-Cd4DTmg6.js} +2 -2
  96. package/dist/{login-EYdkb0dH.js → login-Cv_LYGzG.js} +2 -2
  97. package/dist/{login-C7EdfiAr.js → login-D4OYfM0U.js} +2 -2
  98. package/dist/{login-D4rZWBXe.js → login-DqhTprwd.js} +2 -2
  99. package/dist/{login-qr-Apnag5S6.js → login-qr-CZXIrzvh.js} +2 -2
  100. package/dist/{login-qr-DdAVHOEC.js → login-qr-DiyxAHpv.js} +2 -2
  101. package/dist/{login-qr-BElXRp6T.js → login-qr-Dq_hs3eJ.js} +2 -2
  102. package/dist/{login-qr-DML5LgsI.js → login-qr-Xgw7JPYo.js} +2 -2
  103. package/dist/{logs-cli-N5jQvJTm.js → logs-cli-DZTxEhiM.js} +3 -3
  104. package/dist/{logs-cli-CsHpYc2M.js → logs-cli-Dh-aAqF3.js} +3 -3
  105. package/dist/{manager-9Mni2AA9.js → manager-B_2KzUSI.js} +1 -1
  106. package/dist/{manager-CjW8kPVc.js → manager-Bc-MeMho.js} +1 -1
  107. package/dist/{manager-C-H0XXJq.js → manager-CLPHK-qG.js} +1 -1
  108. package/dist/{manager-QPF0UtOC.js → manager-yrUe0KOT.js} +1 -1
  109. package/dist/{memory-cli-OW9XfyYu.js → memory-cli-3RSIw4no.js} +4 -4
  110. package/dist/{memory-cli-BTByRgM0.js → memory-cli-BKNnDIdx.js} +4 -4
  111. package/dist/{model-catalog-D7k3dDQq.js → model-catalog-BFJW_s3i.js} +2 -2
  112. package/dist/{model-catalog-BuYrTTBn.js → model-catalog-DRqmevpR.js} +2 -2
  113. package/dist/{model-picker-BNWV-jU4.js → model-picker-BT8MumhL.js} +2 -2
  114. package/dist/{model-picker-n7beL1F5.js → model-picker-DhsG4iZa.js} +2 -2
  115. package/dist/{models-Q1jV8ArL.js → models-D_C2JFPw.js} +8 -8
  116. package/dist/{models-cli-Cy6H1sFq.js → models-cli-DQE60EtL.js} +30 -30
  117. package/dist/{models-cli-pfVmmgpv.js → models-cli-j2O4e1Lu.js} +29 -29
  118. package/dist/{models-config-B91ShhoT.js → models-config-DdK8uWQW.js} +1 -1
  119. package/dist/{models-config-J1x_DaPn.js → models-config-frWb8fDT.js} +1 -1
  120. package/dist/{node-cli-CwnTjFkG.js → node-cli-DB4Z23h8.js} +9 -9
  121. package/dist/{node-cli-BD4E-Y8a.js → node-cli-DcRlL2Np.js} +9 -9
  122. package/dist/{nodes-cli-Dv0NXhCO.js → nodes-cli-B42u9UxB.js} +3 -3
  123. package/dist/{nodes-cli-DUD8_q_Q.js → nodes-cli-DQ9YsQmy.js} +3 -3
  124. package/dist/{onboard-CvpyaUQd.js → onboard-Ckw89oRF.js} +7 -7
  125. package/dist/{onboard-EL8foMiP.js → onboard-DUIZfWqa.js} +7 -7
  126. package/dist/{onboard-channels-BRoSUijQ.js → onboard-channels-B8Ouc5sR.js} +1 -1
  127. package/dist/{onboard-channels-Bupbm6zh.js → onboard-channels-Oa9IlsGt.js} +1 -1
  128. package/dist/{onboard-custom-Dk9cL3Uu.js → onboard-custom-7TON2w6b.js} +2 -2
  129. package/dist/{onboard-custom-CJGSIPt3.js → onboard-custom-Bb3xuH0G.js} +2 -2
  130. package/dist/{onboard-helpers-CBxazphs.js → onboard-helpers-BiCrYw-N.js} +2 -2
  131. package/dist/{onboard-helpers-DWDNKmkJ.js → onboard-helpers-Ca4KojJF.js} +2 -2
  132. package/dist/{onboard-remote-cZrkePlK.js → onboard-remote-B8MQTgX-.js} +1 -1
  133. package/dist/{onboard-remote-DoIKLWXA.js → onboard-remote-IMqgmH78.js} +1 -1
  134. package/dist/{onboard-skills-BjGYTueQ.js → onboard-skills-BP1P7f-w.js} +1 -1
  135. package/dist/{onboard-skills-zauvnEui.js → onboard-skills-BcvPjVfl.js} +1 -1
  136. package/dist/{onboarding-Ch8WSJ3j.js → onboarding-Cjh-Y8ha.js} +10 -10
  137. package/dist/{onboarding-Dg5ydWSh.js → onboarding-JFWHlqAb.js} +10 -10
  138. package/dist/{onboarding.finalize-Bo8-8TtH.js → onboarding.finalize-CkGLgiEA.js} +32 -32
  139. package/dist/{onboarding.finalize-CCTaCp2s.js → onboarding.finalize-spzEoVkm.js} +34 -34
  140. package/dist/{onboarding.gateway-config-Dg12RcXA.js → onboarding.gateway-config-Cp8mV8S9.js} +4 -4
  141. package/dist/{onboarding.gateway-config-uIRsaxMy.js → onboarding.gateway-config-tmzsyFbT.js} +4 -4
  142. package/dist/{outbound-mG1crIsY.js → outbound-BD7PNRhC.js} +1 -1
  143. package/dist/{outbound-Zmd7UyQH.js → outbound-BaF9dF-H.js} +1 -1
  144. package/dist/{outbound-CW8eNbCh.js → outbound-CDuo0JH3.js} +1 -1
  145. package/dist/{outbound-B5OgOn1h.js → outbound-CPcVipU-.js} +1 -1
  146. package/dist/{pairing-cli-Cl4t3cDV.js → pairing-cli-CfuG75IW.js} +1 -1
  147. package/dist/{pairing-cli-7X1qlhzF.js → pairing-cli-K09J3MIl.js} +1 -1
  148. package/dist/{pi-embedded-Bl3YkBkI.js → pi-embedded-D6Zi01El.js} +517 -94
  149. package/dist/{pi-embedded-helpers-D1_Sab0M.js → pi-embedded-helpers-B1P8lkqj.js} +5 -5
  150. package/dist/{pi-embedded-helpers-YD1JQ5xV.js → pi-embedded-helpers-BlL08R8g.js} +1 -1
  151. package/dist/{pi-embedded-helpers-DHAJW99p.js → pi-embedded-helpers-CmY04lZ7.js} +1 -1
  152. package/dist/{pi-embedded-helpers-TcYQOZAY.js → pi-embedded-helpers-DuZtk5SK.js} +6 -6
  153. package/dist/{pi-tools.policy-Bx5zp45n.js → pi-tools.policy-54ABEJtH.js} +2 -2
  154. package/dist/{pi-tools.policy-o0ytjRqu.js → pi-tools.policy-BFsWV2pS.js} +2 -2
  155. package/dist/{plugin-registry-BVYZLxmo.js → plugin-registry-CYglC746.js} +2 -2
  156. package/dist/{plugin-registry-Bn9Mj8mP.js → plugin-registry-zGF6HUkQ.js} +2 -2
  157. package/dist/plugin-sdk/agents/pi-embedded-runner/system-prompt.d.ts +21 -0
  158. package/dist/plugin-sdk/agents/pi-tools.read.d.ts +11 -0
  159. package/dist/plugin-sdk/agents/skills/triggers.d.ts +12 -0
  160. package/dist/plugin-sdk/agents/system-prompt-skills-autoload.d.ts +21 -0
  161. package/dist/plugin-sdk/agents/system-prompt-skills-jit.d.ts +28 -0
  162. package/dist/plugin-sdk/agents/tools/skill-search-tool.d.ts +30 -0
  163. package/dist/plugin-sdk/{audio-preflight-DucGa8w7.js → audio-preflight-CoKYDdd4.js} +6 -6
  164. package/dist/plugin-sdk/{channel-web-BhqGIC7q.js → channel-web-eeGSjU9N.js} +7 -7
  165. package/dist/plugin-sdk/{chrome-D9kN9org.js → chrome-CdjVSHtz.js} +1 -1
  166. package/dist/plugin-sdk/config/model-profiles-builtin.d.ts +16 -0
  167. package/dist/plugin-sdk/config/resolve-model-profile.d.ts +9 -1
  168. package/dist/plugin-sdk/config/types.skills.d.ts +22 -0
  169. package/dist/plugin-sdk/config/zod-schema.d.ts +6 -0
  170. package/dist/plugin-sdk/{config-BzupW6LN.js → config-Cf-PzD3r.js} +8 -0
  171. package/dist/plugin-sdk/{deliver-CKgFosI5.js → deliver-hjUeDZ7e.js} +2 -2
  172. package/dist/plugin-sdk/{image-DFyINnvE.js → image-CS95I-I5.js} +2 -2
  173. package/dist/plugin-sdk/index.js +20 -20
  174. package/dist/plugin-sdk/{login-K1YB_7-t.js → login-BhLw-aw1.js} +2 -2
  175. package/dist/plugin-sdk/{login-qr-lMl_OqDj.js → login-qr-B4dxH543.js} +2 -2
  176. package/dist/plugin-sdk/{manager-DdOb0Em2.js → manager-DZ5-lr4s.js} +1 -1
  177. package/dist/plugin-sdk/{outbound-DW3cqlQW.js → outbound-D7yJKgEX.js} +1 -1
  178. package/dist/plugin-sdk/{pi-embedded-helpers-BL7ZRhGv.js → pi-embedded-helpers-6EL59cK1.js} +6 -6
  179. package/dist/plugin-sdk/{pw-ai-B3T0mTHr.js → pw-ai-DWcXZkbZ.js} +2 -2
  180. package/dist/plugin-sdk/{replies-BR2TPTVW.js → replies-B4fizDsZ.js} +1 -1
  181. package/dist/plugin-sdk/{reply-Cjjf4VYT.js → reply-BRGoceel.js} +517 -94
  182. package/dist/plugin-sdk/{runner-BhifC1J_.js → runner-D9c_MNRa.js} +2 -2
  183. package/dist/plugin-sdk/{send-DLO_yV5_.js → send-BAzimHH-.js} +1 -1
  184. package/dist/plugin-sdk/{send-CGhw9mO3.js → send-BfqyNBU1.js} +1 -1
  185. package/dist/plugin-sdk/{send-ZhAe1nXO.js → send-CF7BhO8B.js} +1 -1
  186. package/dist/plugin-sdk/{send-jsofmTfJ.js → send-CJIEYVXL.js} +1 -1
  187. package/dist/plugin-sdk/{send-BP5pSPaZ.js → send-DDpZS9jb.js} +1 -1
  188. package/dist/plugin-sdk/{session-BfyK_04G.js → session-BfTQAyNx.js} +1 -1
  189. package/dist/plugin-sdk/{skill-commands-DEfqC_kJ.js → skill-commands-C70yD9PL.js} +1 -1
  190. package/dist/plugin-sdk/{skills-C9DbB-Kp.js → skills-DuQ-xGok.js} +1 -1
  191. package/dist/plugin-sdk/{synthesis-CZ8BYNXP.js → synthesis-DVsG2Tbp.js} +16 -16
  192. package/dist/plugin-sdk/{web-B8upqMUo.js → web-7u3fdT2S.js} +20 -20
  193. package/dist/plugin-sdk/{whatsapp-actions-eTefsWhW.js → whatsapp-actions-B_3do0s7.js} +2 -2
  194. package/dist/{plugins-cli-CYOQh2DM.js → plugins-cli-CLb_0vH6.js} +27 -27
  195. package/dist/{plugins-cli-3h1N5N8n.js → plugins-cli-ndIGvW38.js} +28 -28
  196. package/dist/{program-D3_xE9BL.js → program-BovNsUAh.js} +34 -34
  197. package/dist/{program-context-COwsYCbf.js → program-context-mFSRQPMm.js} +38 -38
  198. package/dist/{prompt-select-styled-rKPBDv7n.js → prompt-select-styled-DlKhnnDV.js} +15 -15
  199. package/dist/{prompt-select-styled-D88AWCeM.js → prompt-select-styled-vhI0kQYd.js} +15 -15
  200. package/dist/{provider-auth-helpers-rff7s_gC.js → provider-auth-helpers-DXlKD0hY.js} +2 -2
  201. package/dist/{provider-auth-helpers-CyZyVx-V.js → provider-auth-helpers-U0t5YhCn.js} +2 -2
  202. package/dist/{push-apns-BNzgqUl3.js → push-apns-hN0N3Wcu.js} +1 -1
  203. package/dist/{push-apns-d9qKGKPe.js → push-apns-rDsc17-c.js} +1 -1
  204. package/dist/{pw-ai-D9fCYPe7.js → pw-ai-B8IypzYb.js} +2 -2
  205. package/dist/{pw-ai-DYZonrPL.js → pw-ai-BYRvpqBg.js} +2 -2
  206. package/dist/{pw-ai-DWkC5eGA.js → pw-ai-BlWK9Tr3.js} +2 -2
  207. package/dist/{pw-ai-40Jf9QIb.js → pw-ai-BwKx4yAQ.js} +2 -2
  208. package/dist/{qr-cli-6eVyM6ek.js → qr-cli-B7hz3Zj2.js} +1 -1
  209. package/dist/{qr-cli-CCWM_3Nb.js → qr-cli-Zf3abH3y.js} +1 -1
  210. package/dist/{register.agent-D_MON8p-.js → register.agent-B1liWWB3.js} +35 -35
  211. package/dist/{register.agent-BjaqQA02.js → register.agent-Cyij2g-g.js} +33 -33
  212. package/dist/{register.configure-BWkkQhpH.js → register.configure-CoYKlH75.js} +37 -37
  213. package/dist/{register.configure-UJi9sfNv.js → register.configure-keWh1w1p.js} +38 -38
  214. package/dist/{register.maintenance-ChskcWGz.js → register.maintenance-CsA9QQRE.js} +37 -37
  215. package/dist/{register.maintenance-DJptz3DR.js → register.maintenance-CvY-Yar9.js} +35 -35
  216. package/dist/{register.message-CiadI_oS.js → register.message-D7815_7Y.js} +28 -28
  217. package/dist/{register.message-BDTsiyrW.js → register.message-DltuBwIg.js} +27 -27
  218. package/dist/{register.onboard-KR_-4TLY.js → register.onboard-CY50To_-.js} +33 -33
  219. package/dist/{register.onboard-BflOE1jy.js → register.onboard-FcZymlrx.js} +34 -34
  220. package/dist/{register.setup-Cl0sD25T.js → register.setup-8dkIizGs.js} +34 -34
  221. package/dist/{register.setup-W-oNfOp0.js → register.setup-X011Evir.js} +33 -33
  222. package/dist/{register.status-health-sessions-CCQs235z.js → register.status-health-sessions-DRkIaw1q.js} +32 -32
  223. package/dist/{register.status-health-sessions-CT_SmmOH.js → register.status-health-sessions-u9ZbWWea.js} +30 -30
  224. package/dist/{register.subclis-ByZAz4st.js → register.subclis-vTS3UwIU.js} +28 -28
  225. package/dist/{replies-CUWXgyx2.js → replies-A6SltFjk.js} +1 -1
  226. package/dist/{replies-CZH45dMt.js → replies-CsNZ9ImJ.js} +1 -1
  227. package/dist/{replies-Sxbew659.js → replies-Dk0cnpHa.js} +1 -1
  228. package/dist/{replies-D0NFBbd-.js → replies-Dmo0pSSf.js} +1 -1
  229. package/dist/{reply-CgyjcoxC.js → reply-Dx9DWIO2.js} +524 -100
  230. package/dist/{routes-c86p9MPH.js → routes-B3wAMCSw.js} +3 -3
  231. package/dist/{routes-wmFRpLa9.js → routes-DH2Da7TP.js} +3 -3
  232. package/dist/{rpc-BKlQ97aZ.js → rpc-BPtq6BO7.js} +1 -1
  233. package/dist/{rpc-DC4ol5Xa.js → rpc-DCB41PXt.js} +1 -1
  234. package/dist/{run-main-xmWpjZL9.js → run-main-BQKf71Kt.js} +45 -45
  235. package/dist/{runner-ecX1WzDt.js → runner-C4opGXAA.js} +2 -2
  236. package/dist/{runner-Cbz8g76d.js → runner-CY_8vnxU.js} +3 -3
  237. package/dist/{runner-DFuAePEr.js → runner-Dbs3i8HW.js} +2 -2
  238. package/dist/{runner-BBYms6g4.js → runner-Im1oOE3i.js} +3 -3
  239. package/dist/{sandbox-WWVXeHlA.js → sandbox-BTziorto.js} +5 -5
  240. package/dist/{sandbox-cli-momxce7H.js → sandbox-cli-BVpVuidu.js} +6 -6
  241. package/dist/{sandbox-cli-BtGgnGrs.js → sandbox-cli-rOwF1Yuh.js} +6 -6
  242. package/dist/{sandbox-CCHQuSja.js → sandbox-wUKYI3zy.js} +5 -5
  243. package/dist/{security-cli-BfiJ3e0Y.js → security-cli-Bb4vR6LY.js} +9 -9
  244. package/dist/{security-cli-CIB7kqEk.js → security-cli-Cg7KhJC7.js} +9 -9
  245. package/dist/{send-BaFD3lZ7.js → send-8Gw3YmOh.js} +1 -1
  246. package/dist/{send-Bb4it0te.js → send-90t8KM2a.js} +1 -1
  247. package/dist/{send-C0QjmPaf.js → send-9ktd0CBZ.js} +1 -1
  248. package/dist/{send-Iocbaltq.js → send-B0szkIfv.js} +1 -1
  249. package/dist/{send-BKo1T3HF.js → send-B7kMNQ-T.js} +1 -1
  250. package/dist/{send-COVVt64P.js → send-BbZtP8GJ.js} +1 -1
  251. package/dist/{send-DFtnbzqy.js → send-CQj8FBE3.js} +1 -1
  252. package/dist/{send-Dz656vcm.js → send-Cxr6CgGf.js} +1 -1
  253. package/dist/{send-DLVrnezL.js → send-D27q8Oqo.js} +1 -1
  254. package/dist/{send-9sVK0zP4.js → send-D4GfXudZ.js} +1 -1
  255. package/dist/{send-DvbOiJ-I.js → send-D5Siw6wn.js} +1 -1
  256. package/dist/{send-SF7x1UHb.js → send-DanpvmZQ.js} +1 -1
  257. package/dist/{send-5GrSqB6v.js → send-DbJsN7Lj.js} +1 -1
  258. package/dist/{send-DGbBPbV0.js → send-Dj6_LS_W.js} +1 -1
  259. package/dist/{send-BaBv1rAU.js → send-F2Cpm-SJ.js} +1 -1
  260. package/dist/{send-DpMnSIi5.js → send-aXMPprv9.js} +1 -1
  261. package/dist/{send-B5kAnKqP.js → send-depbZ9aA.js} +1 -1
  262. package/dist/{send-BqOhAhRS.js → send-nRhkxbqX.js} +1 -1
  263. package/dist/{send-CJJuN-Fg.js → send-t_DoGd2Y.js} +1 -1
  264. package/dist/{send-Cpk3Ti6-.js → send-zMHWALCW.js} +1 -1
  265. package/dist/{server-context-DefCxQsB.js → server-context-BPuBLXYG.js} +5 -5
  266. package/dist/{server-context-C66bI8ZM.js → server-context-DQIkGNj2.js} +5 -5
  267. package/dist/{server-methods-DDpCXuOU.js → server-methods-1TzYth88.js} +17 -17
  268. package/dist/{server-methods-CBn954AO.js → server-methods-DeIwhdBv.js} +16 -16
  269. package/dist/{server-node-events-BBEMSKVE.js → server-node-events-CFMtnBFU.js} +28 -28
  270. package/dist/{server-node-events-BUEZ3py9.js → server-node-events-DF_ks0oa.js} +27 -27
  271. package/dist/{session-BTeY6Gn2.js → session-C4odFBc2.js} +1 -1
  272. package/dist/{session-BpaF8fzk.js → session-CTTpxOx1.js} +1 -1
  273. package/dist/{session-mFiujXaP.js → session-Cs58by4_.js} +1 -1
  274. package/dist/{session-BtL_LuWh.js → session-d5_vMl76.js} +1 -1
  275. package/dist/{session-utils-DaBIs243.js → session-utils--1xVj2BC.js} +3 -3
  276. package/dist/{sessions-B2KSRtKQ.js → sessions-BikjOqQs.js} +3 -3
  277. package/dist/{sessions-BeYHj0gr.js → sessions-CVWGQEWu.js} +1 -1
  278. package/dist/{sessions-BPD85pWA.js → sessions-CpDbQNFu.js} +1 -1
  279. package/dist/{shared-C9vLT1Vj.js → shared-DHpMu95O.js} +1 -1
  280. package/dist/{shared-PtB96PLH.js → shared-NCp143fJ.js} +1 -1
  281. package/dist/{skill-commands-CSF7Poen.js → skill-commands-QmLQo8Tj.js} +1 -1
  282. package/dist/{skills-XEbTRNYL.js → skills-D0hfZgFz.js} +1 -1
  283. package/dist/{skills-cli-dTks7st0.js → skills-cli-6wYY0Xes.js} +1 -1
  284. package/dist/{skills-cli-DiND94Um.js → skills-cli-CkTThcTU.js} +1 -1
  285. package/dist/{status-BjMiGq0n.js → status-CvElSWg2.js} +2 -2
  286. package/dist/{status-PfvX-BjO.js → status-CwZgLSfx.js} +10 -10
  287. package/dist/{status-CpvzoCOC.js → status-DEQAH4oA.js} +2 -2
  288. package/dist/{status-CG5iHUJ6.js → status-vO4-v0vI.js} +9 -9
  289. package/dist/{status.update-8HXdAdwz.js → status.update-BSaVYFQv.js} +1 -1
  290. package/dist/{status.update-B5zI1_Id.js → status.update-DoXJrRh6.js} +1 -1
  291. package/dist/{subagent-registry-D0IYimMO.js → subagent-registry-K1lQH7iR.js} +525 -101
  292. package/dist/{synthesis-D55QrjAJ.js → synthesis-AYqn8_O8.js} +27 -27
  293. package/dist/{synthesis-CBwKBuLy.js → synthesis-CZhOC8n4.js} +14 -14
  294. package/dist/{synthesis-BVZ5RJLg.js → synthesis-DazoL-DI.js} +26 -26
  295. package/dist/{synthesis-itgrzpuj.js → synthesis-DhxkkJq7.js} +16 -16
  296. package/dist/{system-cli-BERSpUjO.js → system-cli-BmccUOcE.js} +3 -3
  297. package/dist/{system-cli-C61hzNPk.js → system-cli-DJIrqTFB.js} +3 -3
  298. package/dist/{systemd-hints-Ct8ebNeC.js → systemd-hints-BbqPFaZ2.js} +1 -1
  299. package/dist/{systemd-hints-vhJS1sOh.js → systemd-hints-CfnF9j3s.js} +1 -1
  300. package/dist/{tui-Dg_cvgVP.js → tui-Cc1L4YuN.js} +4 -4
  301. package/dist/{tui-CI_zqapL.js → tui-D5we2kr7.js} +4 -4
  302. package/dist/{tui-cli-BD1cbShC.js → tui-cli-BHBp8e8w.js} +9 -9
  303. package/dist/{tui-cli-DtBW_VCL.js → tui-cli-CmVmkEzr.js} +9 -9
  304. package/dist/{unified-runner-BhnvjB1J.js → unified-runner-CavADnkK.js} +515 -91
  305. package/dist/{update-cli-CL1_LPBS.js → update-cli-DPf2vrJK.js} +40 -40
  306. package/dist/{update-cli-D3K4mhrr.js → update-cli-DmxFKAmJ.js} +38 -38
  307. package/dist/{update-runner-Bmq67eos.js → update-runner-D4UIv_1p.js} +1 -1
  308. package/dist/{update-runner-DMucmRlv.js → update-runner-XU-jPEg_.js} +1 -1
  309. package/dist/{web-B0lZdBBl.js → web-BBbVbRTg.js} +30 -30
  310. package/dist/{web-DCO_YCRw.js → web-BJIv_6uQ.js} +17 -17
  311. package/dist/{web-DmgQtLx3.js → web-C-E-O8iP.js} +30 -30
  312. package/dist/{web-C1HPdY_D.js → web-CIj8erCe.js} +19 -19
  313. package/dist/{webhooks-cli-BEk3Xj9r.js → webhooks-cli-BPWIcZ4r.js} +1 -1
  314. package/dist/{webhooks-cli-B7WTF3ao.js → webhooks-cli-DCw-yCzR.js} +1 -1
  315. package/dist/{whatsapp-actions-BUZuNBin.js → whatsapp-actions-B5o7eFIc.js} +2 -2
  316. package/dist/{whatsapp-actions-DEn0NRir.js → whatsapp-actions-CJkCiI_n.js} +2 -2
  317. package/dist/{whatsapp-actions-uEcDLORc.js → whatsapp-actions-CkT3dnmD.js} +2 -2
  318. package/dist/{whatsapp-actions-DmVpLXmh.js → whatsapp-actions-DRvUrapa.js} +2 -2
  319. package/dist/{with-timeout-DwriPEWn.js → with-timeout-7M4c248g.js} +1 -1
  320. package/dist/{with-timeout-BuIx7QnX.js → with-timeout-BWETfI9T.js} +1 -1
  321. package/extensions/bluebubbles/package.json +1 -1
  322. package/extensions/copilot-proxy/package.json +1 -1
  323. package/extensions/diagnostics-otel/package.json +1 -1
  324. package/extensions/discord/package.json +1 -1
  325. package/extensions/feishu/package.json +1 -1
  326. package/extensions/google-antigravity-auth/package.json +1 -1
  327. package/extensions/google-gemini-cli-auth/package.json +1 -1
  328. package/extensions/googlechat/package.json +1 -1
  329. package/extensions/imessage/package.json +1 -1
  330. package/extensions/irc/package.json +1 -1
  331. package/extensions/learning-loop/package.json +1 -1
  332. package/extensions/line/package.json +1 -1
  333. package/extensions/llm-task/package.json +1 -1
  334. package/extensions/matrix/CHANGELOG.md +12 -0
  335. package/extensions/matrix/package.json +1 -1
  336. package/extensions/mattermost/package.json +1 -1
  337. package/extensions/memory-core/package.json +1 -1
  338. package/extensions/memory-lancedb/package.json +1 -1
  339. package/extensions/minimax-portal-auth/package.json +1 -1
  340. package/extensions/msteams/CHANGELOG.md +12 -0
  341. package/extensions/msteams/package.json +1 -1
  342. package/extensions/nextcloud-talk/package.json +1 -1
  343. package/extensions/nostr/CHANGELOG.md +12 -0
  344. package/extensions/nostr/package.json +1 -1
  345. package/extensions/open-prose/package.json +1 -1
  346. package/extensions/outlook/package.json +1 -1
  347. package/extensions/pipeline/package.json +1 -1
  348. package/extensions/signal/package.json +1 -1
  349. package/extensions/slack/package.json +1 -1
  350. package/extensions/telegram/package.json +1 -1
  351. package/extensions/tlon/package.json +1 -1
  352. package/extensions/twitch/CHANGELOG.md +12 -0
  353. package/extensions/twitch/package.json +1 -1
  354. package/extensions/voice-call/CHANGELOG.md +12 -0
  355. package/extensions/voice-call/package.json +1 -1
  356. package/extensions/whatsapp/package.json +1 -1
  357. package/extensions/zalo/CHANGELOG.md +12 -0
  358. package/extensions/zalo/package.json +1 -1
  359. package/extensions/zalouser/CHANGELOG.md +12 -0
  360. package/extensions/zalouser/package.json +1 -1
  361. package/package.json +1 -1
  362. package/skills/1password/SKILL.md +1 -0
  363. package/skills/apple-notes/SKILL.md +1 -0
  364. package/skills/apple-reminders/SKILL.md +1 -0
  365. package/skills/bear-notes/SKILL.md +1 -0
  366. package/skills/blogwatcher/SKILL.md +1 -0
  367. package/skills/blucli/SKILL.md +1 -0
  368. package/skills/bluebubbles/SKILL.md +1 -0
  369. package/skills/camsnap/SKILL.md +1 -0
  370. package/skills/canvas/SKILL.md +6 -0
  371. package/skills/coding-agent/SKILL.md +1 -0
  372. package/skills/connect-email/SKILL.md +1 -0
  373. package/skills/discord/SKILL.md +1 -0
  374. package/skills/eightctl/SKILL.md +1 -0
  375. package/skills/food-order/SKILL.md +1 -0
  376. package/skills/gemini/SKILL.md +1 -0
  377. package/skills/gh-issues/SKILL.md +1 -0
  378. package/skills/gifgrep/SKILL.md +1 -0
  379. package/skills/github/SKILL.md +1 -0
  380. package/skills/gog/SKILL.md +1 -0
  381. package/skills/goplaces/SKILL.md +1 -0
  382. package/skills/healthcheck/SKILL.md +1 -0
  383. package/skills/himalaya/SKILL.md +1 -0
  384. package/skills/imsg/SKILL.md +1 -0
  385. package/skills/long-task/SKILL.md +1 -0
  386. package/skills/mcporter/SKILL.md +1 -0
  387. package/skills/model-usage/SKILL.md +1 -0
  388. package/skills/nano-banana-pro/SKILL.md +1 -0
  389. package/skills/nano-pdf/SKILL.md +1 -0
  390. package/skills/notion/SKILL.md +1 -0
  391. package/skills/obsidian/SKILL.md +1 -0
  392. package/skills/openai-image-gen/SKILL.md +1 -0
  393. package/skills/openai-whisper/SKILL.md +1 -0
  394. package/skills/openai-whisper-api/SKILL.md +1 -0
  395. package/skills/openhue/SKILL.md +1 -0
  396. package/skills/oracle/SKILL.md +1 -0
  397. package/skills/ordercli/SKILL.md +1 -0
  398. package/skills/peekaboo/SKILL.md +1 -0
  399. package/skills/sag/SKILL.md +1 -0
  400. package/skills/session-logs/SKILL.md +1 -0
  401. package/skills/sherpa-onnx-tts/SKILL.md +1 -0
  402. package/skills/skill-creator/SKILL.md +1 -0
  403. package/skills/slack/SKILL.md +1 -0
  404. package/skills/songsee/SKILL.md +1 -0
  405. package/skills/sonoscli/SKILL.md +1 -0
  406. package/skills/spotify-player/SKILL.md +1 -0
  407. package/skills/summarize/SKILL.md +1 -0
  408. package/skills/symihub/SKILL.md +1 -0
  409. package/skills/things-mac/SKILL.md +1 -0
  410. package/skills/tmux/SKILL.md +1 -0
  411. package/skills/trello/SKILL.md +1 -0
  412. package/skills/video-frames/SKILL.md +1 -0
  413. package/skills/voice-call/SKILL.md +1 -0
  414. package/skills/wacli/SKILL.md +1 -0
  415. package/skills/weather/SKILL.md +1 -0
  416. package/skills/xurl/SKILL.md +1 -0
@@ -3,7 +3,7 @@ import { $t as triggerInternalHook, A as normalizeChannelId, B as getPluginComma
3
3
  import { A as buildConfiguredAllowlistKeys, At as resolveShellEnvFallbackTimeoutMs, Ct as resolveEnvApiKey, E as withFileLock, Et as normalizeSecretInput, F as modelKey, H as resolveDefaultModelForAgent, Ht as DEFAULT_MODEL, I as normalizeModelRef$2, K as resolveSubagentSpawnModelSelection, L as normalizeProviderId, M as findNormalizedProviderValue, Ot as getShellPathFromLoginShell, P as isCliProvider, T as resolveSymiAgentDir, Ut as DEFAULT_PROVIDER, V as resolveConfiguredModelRef, Vt as DEFAULT_CONTEXT_TOKENS, W as resolveModelRefFromString, Wt as resolveAuthProfileDisplayLabel, _t as createOllamaStreamFn, a as markAuthProfileFailure, b as ensureAuthProfileStore, bt as requireApiKey, c as resolveApiKeyForProfile, g as markAuthProfileGood, gt as OLLAMA_NATIVE_BASE_URL, h as listProfilesForProvider, i as isProfileInCooldown, j as buildModelAliasIndex, k as buildAllowedModelSet, m as dedupeProfileIds, n as resolveAuthProfileOrder, o as markAuthProfileUsed, q as resolveThinkingDefault, r as getSoonestCooldownExpiry, vt as getApiKeyForModel, w as resolveAuthStorePathForDisplay, wt as resolveModelAuthMode, xt as resolveApiKeyForProvider, yt as getCustomProviderApiKey } from "./auth-profiles-BBniPGeS.js";
4
4
  import { t as formatCliCommand } from "./command-format-BtYOfWxC.js";
5
5
  import { C as resolveThreadParentSessionKey, S as parseAgentSessionKey, _ as getSubagentDepth, b as isCronSessionKey, c as normalizeMainKey, d as sanitizeAgentId, h as normalizeAccountId$2, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, o as classifySessionKeyShape, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isAcpSessionKey, x as isSubagentSessionKey } from "./session-key-DjZ7Z1hW.js";
6
- import { t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
6
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
7
7
  import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
8
8
  import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, a as resolveAgentModelFallbacksOverride, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, g as DEFAULT_IDENTITY_FILENAME, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, n as listAgentIds, o as resolveAgentModelPrimary, r as resolveAgentConfig, s as resolveAgentSkillsFilter, u as resolveEffectiveModelFallbacks, w as filterBootstrapFilesForSession } from "./agent-scope-D-jRCY0d.js";
9
9
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-DuFIqfeC.js";
@@ -11,32 +11,33 @@ import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-po
11
11
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-CnvkCEt-.js";
12
12
  import { a as buildModelAliasLines, n as resolveModel } from "./model-yI45t1OQ.js";
13
13
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-Do3xMEtM.js";
14
+ import { l as parseFrontmatterBlock } from "./frontmatter-B8duUx_6.js";
14
15
  import { r as isPathInsideWithRealpath } from "./scan-paths-ppKrtZ9U.js";
15
16
  import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-D_oCiaQn.js";
16
17
  import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-D5bnO5uA.js";
17
- import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-DXt3pc08.js";
18
+ import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-Gfhqs66L.js";
18
19
  import { Rt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-CJIMV1WD.js";
19
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-M4YyUnwu.js";
20
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-BCTAmPye.js";
20
21
  import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, d as resolveMessageChannel, h as GATEWAY_CLIENT_NAMES, i as isGatewayMessageChannel, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-C9dERklz.js";
21
22
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-D0lNkCf6.js";
22
- import { A as DEFAULT_RESET_TRIGGERS, B as resolveGroupSessionKey, D as resolveSessionResetPolicy, E as resolveChannelResetConfig, F as resolveMainSessionKey, G as deliveryContextKey, J as normalizeSessionDeliveryFields, K as mergeDeliveryContext, L as deriveSessionMetaPatch, O as resolveSessionResetType, P as resolveExplicitAgentSessionKey, T as evaluateSessionFreshness, U as resolveSessionLockMaxHoldFromTimeout, V as acquireSessionWriteLock, W as deliveryContextFromSession, Y as normalizeAccountId$3, _ as capArrayByJsonBytes, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as archiveSessionTranscripts, j as resolveFreshSessionTotalTokens, k as resolveThreadFlag, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as normalizeDeliveryContext, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, w as resolveSessionKey } from "./sessions-BPD85pWA.js";
23
+ import { A as DEFAULT_RESET_TRIGGERS, B as resolveGroupSessionKey, D as resolveSessionResetPolicy, E as resolveChannelResetConfig, F as resolveMainSessionKey, G as deliveryContextKey, J as normalizeSessionDeliveryFields, K as mergeDeliveryContext, L as deriveSessionMetaPatch, O as resolveSessionResetType, P as resolveExplicitAgentSessionKey, T as evaluateSessionFreshness, U as resolveSessionLockMaxHoldFromTimeout, V as acquireSessionWriteLock, W as deliveryContextFromSession, Y as normalizeAccountId$3, _ as capArrayByJsonBytes, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as archiveSessionTranscripts, j as resolveFreshSessionTotalTokens, k as resolveThreadFlag, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as normalizeDeliveryContext, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, w as resolveSessionKey } from "./sessions-CpDbQNFu.js";
23
24
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-Csntmwwn.js";
24
25
  import { _ as listEnabledDiscordAccounts, a as isWhatsAppGroupJid, c as listEnabledTelegramAccounts, d as resolveTelegramToken, f as resolveSlackAccount, g as createDiscordActionGate, h as resolveSlackBotToken, l as listTelegramAccountIds, m as resolveSlackAppToken, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId$1, s as createTelegramActionGate, t as getChannelPlugin, u as resolveTelegramAccount, v as resolveDiscordAccount, y as normalizeDiscordToken } from "./plugins-CwSlLxM8.js";
25
26
  import { a as logWebSelfId, i as getWebAuthAgeMs, m as webAuthExists, n as resolveWhatsAppAccount, o as logoutWeb, u as readWebSelfId } from "./accounts-D9ITgITj.js";
26
27
  import { t as normalizeChatType } from "./chat-type-CeFzWU-6.js";
27
- import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-CJJuN-Fg.js";
28
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-BaFD3lZ7.js";
29
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-BuIx7QnX.js";
30
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-Bdk_R0pQ.js";
28
+ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-t_DoGd2Y.js";
29
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-8Gw3YmOh.js";
30
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-BWETfI9T.js";
31
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-DaRQn5Ai.js";
31
32
  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-Ci8Xsc_Y.js";
32
33
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-CIjIGxEE.js";
33
34
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-D1eLj5t8.js";
34
- import { A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as parseTelegramTarget, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-Dz656vcm.js";
35
+ import { A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as parseTelegramTarget, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-Cxr6CgGf.js";
35
36
  import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-CUkaZz2F.js";
36
- import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-YD1JQ5xV.js";
37
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-WWVXeHlA.js";
38
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-D2ohnA09.js";
39
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-C66bI8ZM.js";
37
+ import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-BlL08R8g.js";
38
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-BTziorto.js";
39
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-CO5ZhkcZ.js";
40
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-DQIkGNj2.js";
40
41
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-Ba_ROWsq.js";
41
42
  import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-OWKu4tXF.js";
42
43
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-Ixuyn7h8.js";
@@ -48,10 +49,10 @@ import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveS
48
49
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-D5O01TlD.js";
49
50
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-CVLISeRT.js";
50
51
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-8sKPnzpp.js";
51
- import { t as ensureSymiModelsJson } from "./models-config-J1x_DaPn.js";
52
+ import { t as ensureSymiModelsJson } from "./models-config-frWb8fDT.js";
52
53
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BUN71nd5.js";
53
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-OW9XfyYu.js";
54
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-QPF0UtOC.js";
54
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-3RSIw4no.js";
55
+ import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-yrUe0KOT.js";
55
56
  import { f as runTasksWithConcurrency } from "./internal-C2jxeHS9.js";
56
57
  import { n as retryAsync } from "./retry-C4Q_VPOo.js";
57
58
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-Co0LcWKH.js";
@@ -63,13 +64,13 @@ import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMedia
63
64
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-BRlF7czi.js";
64
65
  import { a as resolveNativeSkillsEnabled, i as resolveNativeCommandsEnabled, n as isNativeCommandsExplicitlyDisabled, r as isRestartEnabled, t as isCommandFlagEnabled } from "./commands-Ee-evDmm.js";
65
66
  import { a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, i as listChatCommands, l as parseCommandArgs, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices } from "./commands-registry-CsxsFveo.js";
66
- import { _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as extractTextFromChatContent, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, y as stripReasoningTagsFromText } from "./image-CnEFsKgw.js";
67
+ import { _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as extractTextFromChatContent, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, y as stripReasoningTagsFromText } from "./image-dYtWZNKT.js";
67
68
  import { n as resolveToolDisplay } from "./tool-display-I4rDxv8J.js";
68
69
  import { n as formatTimeAgo } from "./format-relative-BDwAggS5.js";
69
70
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-DZozDZN-.js";
70
- import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-Cbz8g76d.js";
71
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-BuYrTTBn.js";
72
- import { a as loadCombinedSessionStoreForGateway, u as lookupContextTokens } from "./session-utils-DaBIs243.js";
71
+ import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CY_8vnxU.js";
72
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-DRqmevpR.js";
73
+ import { a as loadCombinedSessionStoreForGateway, u as lookupContextTokens } from "./session-utils--1xVj2BC.js";
73
74
  import { b as ensureSkillsWatcher, i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames, x as getSkillsSnapshotVersion } from "./skill-commands-DrX4xCNq.js";
74
75
  import { i as readChannelAllowFromStore, l as listPairingChannels, o as removeChannelAllowFromStoreEntry, s as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-B2viSnRj.js";
75
76
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-Bsts3MRD.js";
@@ -83,19 +84,19 @@ import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChan
83
84
  import { n as normalizePollInput } from "./polls-Cm1-n4jF.js";
84
85
  import { t as convertMarkdownTables } from "./tables-DL_wkymg.js";
85
86
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-l9TQg-aP.js";
86
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-Bujr5pk7.js";
87
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-DnNPjFvU.js";
87
88
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BDqsqTKI.js";
88
89
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-CmPVNjnf.js";
89
- import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-5GrSqB6v.js";
90
- 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-9sVK0zP4.js";
90
+ import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-DbJsN7Lj.js";
91
+ 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-D4GfXudZ.js";
91
92
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-BFA2RukR.js";
92
93
  import { t as parseTimeoutMs } from "./parse-timeout-FUO1ff14.js";
93
94
  import { t as makeProxyFetch } from "./proxy-GY5xhMp0.js";
94
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-Sxbew659.js";
95
- import { r as detectBinary } from "./onboard-helpers-DWDNKmkJ.js";
95
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-Dk0cnpHa.js";
96
+ import { r as detectBinary } from "./onboard-helpers-Ca4KojJF.js";
96
97
  import { t as resolvePairingIdLabel } from "./pairing-labels-BHx_CdbP.js";
97
98
  import { t as getActiveWebListener } from "./active-listener-DEi7sEFa.js";
98
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-o0ytjRqu.js";
99
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-BFsWV2pS.js";
99
100
  import { createRequire } from "node:module";
100
101
  import { execFileSync, spawn, spawnSync } from "node:child_process";
101
102
  import os, { homedir } from "node:os";
@@ -20470,7 +20471,7 @@ async function routeReply(params) {
20470
20471
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
20471
20472
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
20472
20473
  try {
20473
- const { deliverOutboundPayloads } = await import("./deliver-Bdk_R0pQ.js").then((n) => n.n);
20474
+ const { deliverOutboundPayloads } = await import("./deliver-DaRQn5Ai.js").then((n) => n.n);
20474
20475
  return {
20475
20476
  ok: true,
20476
20477
  messageId: (await deliverOutboundPayloads({
@@ -29482,6 +29483,231 @@ function createSessionsSpawnTool(opts) {
29482
29483
  };
29483
29484
  }
29484
29485
 
29486
+ //#endregion
29487
+ //#region src/agents/skills/triggers.ts
29488
+ const QUOTE_RE = /^["'`](.*)["'`]$/;
29489
+ const ARRAY_FORM_RE = /^\[(.*)\]$/s;
29490
+ function stripWrappingQuotes(s) {
29491
+ const m = s.trim().match(QUOTE_RE);
29492
+ return m ? m[1] : s.trim();
29493
+ }
29494
+ /** Parse a single trigger value, dropping empty / whitespace-only entries. */
29495
+ function cleanTrigger(raw) {
29496
+ const trimmed = stripWrappingQuotes(raw).toLowerCase();
29497
+ return trimmed.length > 0 ? trimmed : null;
29498
+ }
29499
+ /**
29500
+ * Parse the value of a `triggers:` frontmatter field into a string[].
29501
+ * Accepts both inline-array form `[a, b, "c d"]` and YAML-list form
29502
+ * (multiline with leading hyphens). Returns deduped lowercased trigger
29503
+ * strings, or empty array on unparseable / missing input.
29504
+ */
29505
+ function parseTriggersValue(raw) {
29506
+ if (typeof raw !== "string") return [];
29507
+ const trimmed = raw.trim();
29508
+ if (!trimmed) return [];
29509
+ const items = [];
29510
+ const arrayMatch = trimmed.match(ARRAY_FORM_RE);
29511
+ if (arrayMatch) {
29512
+ const inner = arrayMatch[1];
29513
+ let buf = "";
29514
+ let inQuote = null;
29515
+ for (const ch of inner) {
29516
+ if (inQuote) {
29517
+ if (ch === inQuote) inQuote = null;
29518
+ else buf += ch;
29519
+ continue;
29520
+ }
29521
+ if (ch === "\"" || ch === "'") {
29522
+ inQuote = ch;
29523
+ continue;
29524
+ }
29525
+ if (ch === ",") {
29526
+ const cleaned = cleanTrigger(buf);
29527
+ if (cleaned) items.push(cleaned);
29528
+ buf = "";
29529
+ continue;
29530
+ }
29531
+ buf += ch;
29532
+ }
29533
+ const cleaned = cleanTrigger(buf);
29534
+ if (cleaned) items.push(cleaned);
29535
+ } else for (const line of trimmed.split("\n")) {
29536
+ const ltrim = line.trimStart();
29537
+ if (ltrim.startsWith("- ")) {
29538
+ const cleaned = cleanTrigger(ltrim.slice(2));
29539
+ if (cleaned) items.push(cleaned);
29540
+ } else if (ltrim && !ltrim.startsWith("#")) {
29541
+ const cleaned = cleanTrigger(ltrim);
29542
+ if (cleaned) items.push(cleaned);
29543
+ }
29544
+ }
29545
+ const seen = /* @__PURE__ */ new Set();
29546
+ const out = [];
29547
+ for (const t of items) if (!seen.has(t)) {
29548
+ seen.add(t);
29549
+ out.push(t);
29550
+ }
29551
+ return out;
29552
+ }
29553
+ /**
29554
+ * Extract triggers from a parsed frontmatter record. Returns empty array
29555
+ * when the field is absent or unparseable.
29556
+ */
29557
+ function getSkillTriggers(frontmatter) {
29558
+ return parseTriggersValue(frontmatter.triggers);
29559
+ }
29560
+
29561
+ //#endregion
29562
+ //#region src/agents/tools/skill-search-tool.ts
29563
+ const SkillSearchToolSchema = Type.Object({
29564
+ query: Type.String({
29565
+ minLength: 1,
29566
+ description: "Intent description (2-8 words). Match by trigger keywords first, then description text."
29567
+ }),
29568
+ limit: Type.Optional(Type.Number({
29569
+ minimum: 1,
29570
+ maximum: 10,
29571
+ description: "Max results to return (default 5, capped at 10)."
29572
+ }))
29573
+ });
29574
+ const CACHE_TTL_MS = 6e4;
29575
+ const SAFE_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
29576
+ function loadSkillFromDir(dir, source) {
29577
+ const name = path.basename(dir);
29578
+ if (!SAFE_NAME_RE.test(name)) return null;
29579
+ const file = path.join(dir, "SKILL.md");
29580
+ let raw;
29581
+ try {
29582
+ if (!fs.statSync(file).isFile()) return null;
29583
+ raw = fs.readFileSync(file, "utf8");
29584
+ } catch {
29585
+ return null;
29586
+ }
29587
+ const fm = parseFrontmatterBlock(raw);
29588
+ return {
29589
+ name,
29590
+ description: (fm.description ?? "").trim(),
29591
+ path: file,
29592
+ triggers: getSkillTriggers(fm),
29593
+ source
29594
+ };
29595
+ }
29596
+ function listSkillDirs(root) {
29597
+ const skillsDir = path.join(root, "skills");
29598
+ let entries;
29599
+ try {
29600
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
29601
+ } catch {
29602
+ return [];
29603
+ }
29604
+ return entries.filter((e) => e.isDirectory()).map((e) => path.join(skillsDir, e.name));
29605
+ }
29606
+ let cachedPackageRoot$1;
29607
+ const cachePerWorkspace = /* @__PURE__ */ new Map();
29608
+ function getPackageRoot$1() {
29609
+ if (cachedPackageRoot$1 === void 0) cachedPackageRoot$1 = resolveSymiPackageRootSync({});
29610
+ return cachedPackageRoot$1;
29611
+ }
29612
+ function loadAllSkills(workspaceDir) {
29613
+ const cacheKey = workspaceDir ?? "";
29614
+ const now = Date.now();
29615
+ const existing = cachePerWorkspace.get(cacheKey);
29616
+ if (existing && now - existing.loadedAt < CACHE_TTL_MS) return existing.skills;
29617
+ const seen = /* @__PURE__ */ new Map();
29618
+ if (workspaceDir) for (const dir of listSkillDirs(workspaceDir)) {
29619
+ const skill = loadSkillFromDir(dir, "workspace");
29620
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
29621
+ }
29622
+ const packageRoot = getPackageRoot$1();
29623
+ if (packageRoot) for (const dir of listSkillDirs(packageRoot)) {
29624
+ const skill = loadSkillFromDir(dir, "bundled");
29625
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
29626
+ }
29627
+ const skills = [...seen.values()];
29628
+ cachePerWorkspace.set(cacheKey, {
29629
+ skills,
29630
+ loadedAt: now
29631
+ });
29632
+ return skills;
29633
+ }
29634
+ const TOKEN_SPLIT_RE = /[^\w/]+/;
29635
+ function tokenizeQuery(raw) {
29636
+ return raw.toLowerCase().split(TOKEN_SPLIT_RE).filter((t) => t.length >= 2);
29637
+ }
29638
+ /**
29639
+ * Score a query against one skill's triggers + description.
29640
+ * - Trigger score: ratio of query tokens that appear in the trigger set.
29641
+ * - FTS score: 0.4 × ratio of query tokens that appear in the description
29642
+ * (case-insensitive substring match).
29643
+ * - Final = max(trigger, fts) so trigger matches always beat descriptions.
29644
+ * - Returns 0 for "no signal at all" (caller should drop these).
29645
+ */
29646
+ function scoreSkillMatch(skill, queryTokens) {
29647
+ if (queryTokens.length === 0) return 0;
29648
+ const triggerSet = new Set(skill.triggers.map((t) => t.toLowerCase()));
29649
+ const description = skill.description.toLowerCase();
29650
+ let triggerHits = 0;
29651
+ let ftsHits = 0;
29652
+ for (const token of queryTokens) if (triggerSet.has(token)) triggerHits += 1;
29653
+ else if (description.includes(token)) ftsHits += 1;
29654
+ const triggerScore = triggerHits / queryTokens.length;
29655
+ const ftsScore = ftsHits / queryTokens.length * .4;
29656
+ return Math.max(triggerScore, ftsScore);
29657
+ }
29658
+ /**
29659
+ * Pure-function search; exported for testing without going through the
29660
+ * tool execute wrapper.
29661
+ */
29662
+ function searchSkills(query, limit, workspaceDir) {
29663
+ const tokens = tokenizeQuery(query);
29664
+ if (tokens.length === 0) return [];
29665
+ const all = loadAllSkills(workspaceDir);
29666
+ const scored = [];
29667
+ for (const skill of all) {
29668
+ const score = scoreSkillMatch(skill, tokens);
29669
+ if (score > 0) scored.push({
29670
+ name: skill.name,
29671
+ description: skill.description,
29672
+ path: skill.path,
29673
+ score
29674
+ });
29675
+ }
29676
+ scored.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
29677
+ return scored.slice(0, limit);
29678
+ }
29679
+ function createSkillSearchTool(opts) {
29680
+ return {
29681
+ name: "skill_search",
29682
+ label: "skill_search",
29683
+ 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.",
29684
+ parameters: SkillSearchToolSchema,
29685
+ execute: async (_toolCallId, args) => {
29686
+ const params = args;
29687
+ const query = typeof params.query === "string" ? params.query.trim() : "";
29688
+ if (!query) return jsonResult({
29689
+ ok: false,
29690
+ error: "skill_search requires a non-empty `query` string."
29691
+ });
29692
+ const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.min(10, Math.max(1, Math.floor(params.limit))) : 5;
29693
+ try {
29694
+ return jsonResult({
29695
+ ok: true,
29696
+ query,
29697
+ matches: searchSkills(query, limit, opts?.workspaceDir)
29698
+ });
29699
+ } catch (err) {
29700
+ const message = err instanceof Error ? err.message : String(err);
29701
+ logWarn(`skill_search failed: ${message}`);
29702
+ return jsonResult({
29703
+ ok: false,
29704
+ error: message
29705
+ });
29706
+ }
29707
+ }
29708
+ };
29709
+ }
29710
+
29485
29711
  //#endregion
29486
29712
  //#region src/agents/tools/subagents-tool.ts
29487
29713
  const SUBAGENT_ACTIONS = [
@@ -31542,6 +31768,7 @@ function createSymiTools(options) {
31542
31768
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
31543
31769
  createTaskListTool({ workspaceDir }),
31544
31770
  createTaskCancelTool({ workspaceDir }),
31771
+ createSkillSearchTool({ workspaceDir }),
31545
31772
  ...messageTool ? [messageTool] : [],
31546
31773
  createTtsTool({
31547
31774
  agentChannel: options?.agentChannel,
@@ -32723,6 +32950,38 @@ function setCliSessionId(entry, provider, sessionId) {
32723
32950
  //#endregion
32724
32951
  //#region src/config/model-profiles-builtin.ts
32725
32952
  /**
32953
+ * Shared safety + output-style additions applied to most built-in profiles
32954
+ * and the Generic fallback. These rules came from a long history of
32955
+ * model-specific bugs (verification-monologue padding, "I have addressed"
32956
+ * preambles, post-answer assessment lists). Keeping them in one place
32957
+ * means a new profile inherits sane defaults instead of starting empty.
32958
+ *
32959
+ * Stage 2.4 of the prompt-reduction plan: rules that ALL profiles need
32960
+ * live here; profile-specific rules (control-token stripping, tool-arg
32961
+ * cleanup, reasoning hints) live in their own per-profile additions.
32962
+ *
32963
+ * Exported so resolve-model-profile.ts can apply the same additions to
32964
+ * the Generic fallback profile — no model resolves to "Generic" without
32965
+ * inheriting the safety/style rules.
32966
+ */
32967
+ const SAFETY_AND_STYLE_ADDITIONS = [
32968
+ "CRITICAL OUTPUT RULES:",
32969
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
32970
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32971
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32972
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32973
+ "- If you need to verify your work, do so before writing your response, not after.",
32974
+ "- Send brief progress updates on long tasks so the user knows you are active."
32975
+ ];
32976
+ /** Hint for native-reasoning models (Nemotron, Qwen 3.5/3.6) to keep
32977
+ * planning internal. Not applied to Gemma/Ollama because those models
32978
+ * don't have structured thinking and the rule confuses them. */
32979
+ const REASONING_DISCIPLINE_ADDITION = "- Keep planning and reasoning internal. Only speak when you have a result or need user input.";
32980
+ /** Hint for models that leak Gemma-style control tokens (Gemma family,
32981
+ * Ollama hosting any uncensored open model). Forces tool-arg cleanup and
32982
+ * forbids leaking turn markers in user-visible text. */
32983
+ 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."];
32984
+ /**
32726
32985
  * Built-in model profiles. Ordered from most-specific to least-specific so
32727
32986
  * that `resolveModelProfile` can return the first match.
32728
32987
  *
@@ -32756,17 +33015,7 @@ const BUILTIN_PROFILES = [
32756
33015
  hasStructuredThinking: false,
32757
33016
  validateToolArgs: true
32758
33017
  },
32759
- promptAdditions: [
32760
- "CRITICAL OUTPUT RULES:",
32761
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32762
- "- Do not output raw control tokens, channel tags, or turn markers.",
32763
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32764
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32765
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32766
- "- If you need to verify your work, do so before writing your response, not after.",
32767
- "- Send brief progress updates on long tasks so the user knows you are active.",
32768
- "- 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."
32769
- ],
33018
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
32770
33019
  ui: {
32771
33020
  badge: "Local",
32772
33021
  watchdogMs: 9e5,
@@ -32793,16 +33042,7 @@ const BUILTIN_PROFILES = [
32793
33042
  hasStructuredThinking: true,
32794
33043
  validateToolArgs: false
32795
33044
  },
32796
- promptAdditions: [
32797
- "CRITICAL OUTPUT RULES:",
32798
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32799
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32800
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32801
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32802
- "- If you need to verify your work, do so before writing your response, not after.",
32803
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
32804
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
32805
- ],
33045
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
32806
33046
  ui: {
32807
33047
  badge: "Local",
32808
33048
  watchdogMs: 9e5,
@@ -32828,7 +33068,7 @@ const BUILTIN_PROFILES = [
32828
33068
  hasStructuredThinking: true,
32829
33069
  validateToolArgs: false
32830
33070
  },
32831
- promptAdditions: [],
33071
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
32832
33072
  ui: {
32833
33073
  badge: "API",
32834
33074
  watchdogMs: 3e5,
@@ -32861,15 +33101,7 @@ const BUILTIN_PROFILES = [
32861
33101
  hasStructuredThinking: true,
32862
33102
  validateToolArgs: false
32863
33103
  },
32864
- promptAdditions: [
32865
- "CRITICAL OUTPUT RULES:",
32866
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32867
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32868
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32869
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32870
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
32871
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
32872
- ],
33104
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
32873
33105
  ui: {
32874
33106
  badge: "Spider",
32875
33107
  watchdogMs: 9e5,
@@ -32902,16 +33134,7 @@ const BUILTIN_PROFILES = [
32902
33134
  hasStructuredThinking: false,
32903
33135
  validateToolArgs: true
32904
33136
  },
32905
- promptAdditions: [
32906
- "CRITICAL OUTPUT RULES:",
32907
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32908
- "- Do not output raw control tokens, channel tags, or turn markers.",
32909
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32910
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32911
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32912
- "- Send brief progress updates on long tasks so the user knows you are active.",
32913
- "- 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."
32914
- ],
33137
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
32915
33138
  ui: {
32916
33139
  badge: "Spider",
32917
33140
  watchdogMs: 6e5,
@@ -32943,16 +33166,7 @@ const BUILTIN_PROFILES = [
32943
33166
  hasStructuredThinking: true,
32944
33167
  validateToolArgs: false
32945
33168
  },
32946
- promptAdditions: [
32947
- "CRITICAL OUTPUT RULES:",
32948
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32949
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32950
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32951
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32952
- "- If you need to verify your work, do so before writing your response, not after.",
32953
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
32954
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
32955
- ],
33169
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
32956
33170
  ui: {
32957
33171
  badge: "CoreWeave",
32958
33172
  watchdogMs: 9e5,
@@ -32963,7 +33177,15 @@ const BUILTIN_PROFILES = [
32963
33177
 
32964
33178
  //#endregion
32965
33179
  //#region src/config/resolve-model-profile.ts
32966
- /** Default profile returned when no match is found. */
33180
+ /**
33181
+ * Default profile returned when no match is found.
33182
+ *
33183
+ * Stage 2.4 of the prompt-reduction plan: the Generic fallback now ships
33184
+ * the same safety+style additions as every named profile, so newly-added
33185
+ * models without a profile entry inherit sane defaults instead of
33186
+ * starting empty (which would silently regress safety rules until someone
33187
+ * notices and adds a profile).
33188
+ */
32967
33189
  const FALLBACK_PROFILE = {
32968
33190
  match: "*",
32969
33191
  label: "Generic",
@@ -32982,7 +33204,7 @@ const FALLBACK_PROFILE = {
32982
33204
  hasStructuredThinking: false,
32983
33205
  validateToolArgs: false
32984
33206
  },
32985
- promptAdditions: [],
33207
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
32986
33208
  ui: {
32987
33209
  watchdogMs: 3e5,
32988
33210
  armWatchdogOnSend: true
@@ -39571,10 +39793,155 @@ async function prepareSessionManagerForRun(params) {
39571
39793
  }
39572
39794
  }
39573
39795
 
39796
+ //#endregion
39797
+ //#region src/agents/system-prompt-skills-autoload.ts
39798
+ const FRONTMATTER_RE = /^---\s*\n[\s\S]*?\n---\s*\n?/;
39799
+ let cachedPackageRoot;
39800
+ function getPackageRoot() {
39801
+ if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
39802
+ return cachedPackageRoot;
39803
+ }
39804
+ function safeSkillName(name) {
39805
+ return /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/.test(name);
39806
+ }
39807
+ function tryLoadSkill(skillName, root) {
39808
+ const skillPath = path.join(root, "skills", skillName, "SKILL.md");
39809
+ try {
39810
+ if (!fs.statSync(skillPath).isFile()) return null;
39811
+ } catch {
39812
+ return null;
39813
+ }
39814
+ try {
39815
+ return fs.readFileSync(skillPath, "utf8");
39816
+ } catch {
39817
+ return null;
39818
+ }
39819
+ }
39820
+ function stripFrontmatter(body) {
39821
+ return body.replace(FRONTMATTER_RE, "").trimStart();
39822
+ }
39823
+ /**
39824
+ * Resolves and loads each named skill. Returns the inlinable Markdown block,
39825
+ * or empty string when no skills loaded / minimal mode / no names supplied.
39826
+ */
39827
+ function buildAutoLoadedSkillsBlock(opts) {
39828
+ if (opts.minimalMode) return "";
39829
+ const names = opts.skillNames.filter((n) => typeof n === "string" && n.trim().length > 0);
39830
+ if (names.length === 0) return "";
39831
+ const packageRoot = getPackageRoot();
39832
+ const loaded = [];
39833
+ for (const rawName of names) {
39834
+ const name = rawName.trim();
39835
+ if (!safeSkillName(name)) {
39836
+ logWarn(`autoLoadInline: skipping invalid skill name '${rawName}'`);
39837
+ continue;
39838
+ }
39839
+ let body = null;
39840
+ let source = "bundled";
39841
+ if (opts.workspaceDir) {
39842
+ body = tryLoadSkill(name, opts.workspaceDir);
39843
+ source = "workspace";
39844
+ }
39845
+ if (body === null && packageRoot) {
39846
+ body = tryLoadSkill(name, packageRoot);
39847
+ source = "bundled";
39848
+ }
39849
+ if (body === null) {
39850
+ logWarn(`autoLoadInline: skill '${name}' not found in workspace or bundled skills`);
39851
+ continue;
39852
+ }
39853
+ const stripped = stripFrontmatter(body).trim();
39854
+ if (!stripped) {
39855
+ logWarn(`autoLoadInline: skill '${name}' has empty body after frontmatter strip; skipping`);
39856
+ continue;
39857
+ }
39858
+ loaded.push({
39859
+ name,
39860
+ body: stripped,
39861
+ source
39862
+ });
39863
+ }
39864
+ if (loaded.length === 0) return "";
39865
+ return [
39866
+ "",
39867
+ "---",
39868
+ "",
39869
+ "## Auto-loaded Skills",
39870
+ "",
39871
+ loaded.map((skill) => `<!-- auto-loaded: ${skill.name} (${skill.source}) -->\n${skill.body}`).join("\n\n---\n\n"),
39872
+ ""
39873
+ ].join("\n");
39874
+ }
39875
+
39876
+ //#endregion
39877
+ //#region src/agents/system-prompt-skills-jit.ts
39878
+ const MAX_ANCHOR_DESCRIPTION_CHARS = 100;
39879
+ const MAX_AUTO_INJECT_RESULTS = 3;
39880
+ const MAX_AUTO_INJECT_TOTAL_CHARS = 600;
39881
+ /**
39882
+ * Build the anchor list block. Returns "" when no anchor list configured
39883
+ * or in preload mode (anchor list adds value only in jit/hybrid).
39884
+ */
39885
+ function buildAnchorListBlock(opts) {
39886
+ if (opts.minimalMode) return "";
39887
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
39888
+ const names = (opts.anchorList ?? []).filter((n) => typeof n === "string" && n.trim().length > 0);
39889
+ if (names.length === 0) return "";
39890
+ const lines = [];
39891
+ for (const name of names) {
39892
+ const description = searchSkills(name, 1, opts.workspaceDir)[0]?.description.trim() ?? "";
39893
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
39894
+ lines.push(truncated ? `- ${name}: ${truncated}` : `- ${name}`);
39895
+ }
39896
+ return [
39897
+ "",
39898
+ "## Anchor Skills",
39899
+ "These skills are always available. Read their SKILL.md via `read` if relevant. For full discovery use the `skill_search` tool.",
39900
+ lines.join("\n"),
39901
+ ""
39902
+ ].join("\n");
39903
+ }
39904
+ /**
39905
+ * Build the auto-injected matches block based on the user message triggers.
39906
+ * Returns "" when discoveryMode doesn't ask for it, no message available,
39907
+ * no matches found, or in minimal mode.
39908
+ */
39909
+ function buildAutoInjectBlock(opts) {
39910
+ if (opts.minimalMode) return "";
39911
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
39912
+ const message = (opts.userMessage ?? "").trim();
39913
+ if (!message) return "";
39914
+ const matches = searchSkills(message, MAX_AUTO_INJECT_RESULTS, opts.workspaceDir);
39915
+ if (matches.length === 0) return "";
39916
+ const lines = [];
39917
+ let total = 0;
39918
+ for (const match of matches) {
39919
+ const description = match.description.trim();
39920
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
39921
+ const skillRef = path.basename(path.dirname(match.path));
39922
+ const line = truncated ? `- ${skillRef}: ${truncated}` : `- ${skillRef}`;
39923
+ if (total + line.length > MAX_AUTO_INJECT_TOTAL_CHARS) break;
39924
+ lines.push(line);
39925
+ total += line.length + 1;
39926
+ }
39927
+ if (lines.length === 0) return "";
39928
+ return [
39929
+ "",
39930
+ "## Possibly Relevant Skills (auto-suggested for this request)",
39931
+ "These skills' triggers matched keywords in your message. Read the SKILL.md if it applies; otherwise ignore and proceed.",
39932
+ lines.join("\n"),
39933
+ ""
39934
+ ].join("\n");
39935
+ }
39936
+ /** Convenience: build both blocks concatenated. */
39937
+ function buildSkillsJitBlocks(opts) {
39938
+ return `${buildAnchorListBlock(opts)}${buildAutoInjectBlock(opts)}`;
39939
+ }
39940
+
39574
39941
  //#endregion
39575
39942
  //#region src/agents/pi-embedded-runner/system-prompt.ts
39576
39943
  function buildEmbeddedSystemPrompt(params) {
39577
- return buildAgentSystemPrompt({
39944
+ const corePrompt = buildAgentSystemPrompt({
39578
39945
  workspaceDir: params.workspaceDir,
39579
39946
  defaultThinkLevel: params.defaultThinkLevel,
39580
39947
  reasoningLevel: params.reasoningLevel,
@@ -39602,6 +39969,19 @@ function buildEmbeddedSystemPrompt(params) {
39602
39969
  contextFiles: params.contextFiles,
39603
39970
  memoryCitationsMode: params.memoryCitationsMode
39604
39971
  });
39972
+ const promptMode = params.promptMode ?? "full";
39973
+ const isMinimal = promptMode === "minimal" || promptMode === "none";
39974
+ return `${corePrompt}${buildAutoLoadedSkillsBlock({
39975
+ skillNames: params.autoLoadInlineSkills ?? [],
39976
+ workspaceDir: params.workspaceDir,
39977
+ minimalMode: isMinimal
39978
+ })}${buildSkillsJitBlocks({
39979
+ discoveryMode: params.skillsDiscoveryMode,
39980
+ anchorList: params.skillsAnchorList,
39981
+ userMessage: params.currentUserMessage,
39982
+ workspaceDir: params.workspaceDir,
39983
+ minimalMode: isMinimal
39984
+ })}`;
39605
39985
  }
39606
39986
  function createSystemPromptOverride(systemPrompt) {
39607
39987
  const override = systemPrompt.trim();
@@ -40389,7 +40769,11 @@ async function runEmbeddedAttempt(params) {
40389
40769
  userTime,
40390
40770
  userTimeFormat,
40391
40771
  contextFiles,
40392
- memoryCitationsMode: params.config?.memory?.citations
40772
+ memoryCitationsMode: params.config?.memory?.citations,
40773
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
40774
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
40775
+ skillsAnchorList: params.config?.skills?.anchorList,
40776
+ currentUserMessage: params.prompt
40393
40777
  });
40394
40778
  const systemPromptReport = buildSystemPromptReport({
40395
40779
  source: "run",
@@ -44878,7 +45262,7 @@ async function deliverSessionMaintenanceWarning(params) {
44878
45262
  return;
44879
45263
  }
44880
45264
  try {
44881
- const { deliverOutboundPayloads } = await import("./deliver-Bdk_R0pQ.js").then((n) => n.n);
45265
+ const { deliverOutboundPayloads } = await import("./deliver-DaRQn5Ai.js").then((n) => n.n);
44882
45266
  await deliverOutboundPayloads({
44883
45267
  cfg: params.cfg,
44884
45268
  channel,
@@ -48332,7 +48716,7 @@ async function describeStickerImage(params) {
48332
48716
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
48333
48717
  try {
48334
48718
  const buffer = await fs$1.readFile(imagePath);
48335
- const { describeImageWithModel } = await import("./image-CnEFsKgw.js").then((n) => n.n);
48719
+ const { describeImageWithModel } = await import("./image-dYtWZNKT.js").then((n) => n.n);
48336
48720
  return (await describeImageWithModel({
48337
48721
  buffer,
48338
48722
  fileName: "sticker.webp",
@@ -48755,7 +49139,7 @@ function createWhatsAppLoginTool() {
48755
49139
  force: Type.Optional(Type.Boolean())
48756
49140
  }),
48757
49141
  execute: async (_toolCallId, args) => {
48758
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-BElXRp6T.js");
49142
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-Dq_hs3eJ.js");
48759
49143
  if ((args?.action ?? "start") === "wait") {
48760
49144
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
48761
49145
  return {
@@ -50131,7 +50515,7 @@ async function preflightDiscordMessage(params) {
50131
50515
  let preflightTranscript;
50132
50516
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
50133
50517
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
50134
- const { transcribeFirstAudio } = await import("./audio-preflight-1dv3T5Zx.js");
50518
+ const { transcribeFirstAudio } = await import("./audio-preflight-By0dnw-T.js");
50135
50519
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
50136
50520
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
50137
50521
  ctx: {
@@ -53914,27 +54298,27 @@ function isVoiceChannelType(type) {
53914
54298
  function createDefaultDeps() {
53915
54299
  return {
53916
54300
  sendMessageWhatsApp: async (...args) => {
53917
- const { sendMessageWhatsApp } = await import("./web-B0lZdBBl.js");
54301
+ const { sendMessageWhatsApp } = await import("./web-BBbVbRTg.js");
53918
54302
  return await sendMessageWhatsApp(...args);
53919
54303
  },
53920
54304
  sendMessageTelegram: async (...args) => {
53921
- const { sendMessageTelegram } = await import("./send-Dz656vcm.js").then((n) => n.l);
54305
+ const { sendMessageTelegram } = await import("./send-Cxr6CgGf.js").then((n) => n.l);
53922
54306
  return await sendMessageTelegram(...args);
53923
54307
  },
53924
54308
  sendMessageDiscord: async (...args) => {
53925
- const { sendMessageDiscord } = await import("./send-BaFD3lZ7.js").then((n) => n.t);
54309
+ const { sendMessageDiscord } = await import("./send-8Gw3YmOh.js").then((n) => n.t);
53926
54310
  return await sendMessageDiscord(...args);
53927
54311
  },
53928
54312
  sendMessageSlack: async (...args) => {
53929
- const { sendMessageSlack } = await import("./send-CJJuN-Fg.js").then((n) => n.n);
54313
+ const { sendMessageSlack } = await import("./send-t_DoGd2Y.js").then((n) => n.n);
53930
54314
  return await sendMessageSlack(...args);
53931
54315
  },
53932
54316
  sendMessageSignal: async (...args) => {
53933
- const { sendMessageSignal } = await import("./send-5GrSqB6v.js").then((n) => n.i);
54317
+ const { sendMessageSignal } = await import("./send-DbJsN7Lj.js").then((n) => n.i);
53934
54318
  return await sendMessageSignal(...args);
53935
54319
  },
53936
54320
  sendMessageIMessage: async (...args) => {
53937
- const { sendMessageIMessage } = await import("./send-9sVK0zP4.js").then((n) => n.n);
54321
+ const { sendMessageIMessage } = await import("./send-D4GfXudZ.js").then((n) => n.n);
53938
54322
  return await sendMessageIMessage(...args);
53939
54323
  }
53940
54324
  };
@@ -64789,7 +65173,7 @@ async function registerSlackMonitorSlashCommands(params) {
64789
65173
  });
64790
65174
  const deliverSlashPayloads = async (replies) => {
64791
65175
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
64792
- import("./replies-Sxbew659.js").then((n) => n.r),
65176
+ import("./replies-Dk0cnpHa.js").then((n) => n.r),
64793
65177
  import("./chunk-CBaqrC3-.js").then((n) => n.s),
64794
65178
  import("./markdown-tables-Xw0UrL4I.js").then((n) => n.t)
64795
65179
  ]);
@@ -67062,7 +67446,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
67062
67446
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
67063
67447
  let preflightTranscript;
67064
67448
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
67065
- const { transcribeFirstAudio } = await import("./audio-preflight-1dv3T5Zx.js");
67449
+ const { transcribeFirstAudio } = await import("./audio-preflight-By0dnw-T.js");
67066
67450
  preflightTranscript = await transcribeFirstAudio({
67067
67451
  ctx: {
67068
67452
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -69216,23 +69600,23 @@ let webLoginQrPromise = null;
69216
69600
  let webChannelPromise = null;
69217
69601
  let whatsappActionsPromise = null;
69218
69602
  function loadWebOutbound() {
69219
- webOutboundPromise ??= import("./outbound-CW8eNbCh.js").then((n) => n.t);
69603
+ webOutboundPromise ??= import("./outbound-CDuo0JH3.js").then((n) => n.t);
69220
69604
  return webOutboundPromise;
69221
69605
  }
69222
69606
  function loadWebLogin() {
69223
- webLoginPromise ??= import("./login-C7EdfiAr.js").then((n) => n.n);
69607
+ webLoginPromise ??= import("./login-D4OYfM0U.js").then((n) => n.n);
69224
69608
  return webLoginPromise;
69225
69609
  }
69226
69610
  function loadWebLoginQr() {
69227
- webLoginQrPromise ??= import("./login-qr-BElXRp6T.js");
69611
+ webLoginQrPromise ??= import("./login-qr-Dq_hs3eJ.js");
69228
69612
  return webLoginQrPromise;
69229
69613
  }
69230
69614
  function loadWebChannel() {
69231
- webChannelPromise ??= import("./web-B0lZdBBl.js");
69615
+ webChannelPromise ??= import("./web-BBbVbRTg.js");
69232
69616
  return webChannelPromise;
69233
69617
  }
69234
69618
  function loadWhatsAppActions() {
69235
- whatsappActionsPromise ??= import("./whatsapp-actions-BUZuNBin.js");
69619
+ whatsappActionsPromise ??= import("./whatsapp-actions-B5o7eFIc.js");
69236
69620
  return whatsappActionsPromise;
69237
69621
  }
69238
69622
  function createPluginRuntime() {
@@ -70900,6 +71284,22 @@ function wrapToolParamNormalization(tool, requiredParamGroups) {
70900
71284
  }
70901
71285
  };
70902
71286
  }
71287
+ /**
71288
+ * Override a tool's description while preserving execute, parameters, and
71289
+ * other properties. Used by Stage 2.5 of the prompt-reduction plan to move
71290
+ * usage docs from the system prompt into tool descriptions where they
71291
+ * belong contextually.
71292
+ *
71293
+ * The replacement description should include the upstream's tool-purpose
71294
+ * sentence so models that only read the description (without the prompt
71295
+ * section) still have the same baseline understanding.
71296
+ */
71297
+ function wrapToolWithDescriptionOverride(tool, description) {
71298
+ return {
71299
+ ...tool,
71300
+ description
71301
+ };
71302
+ }
70903
71303
  function wrapToolWorkspaceRootGuard(tool, root) {
70904
71304
  return {
70905
71305
  ...tool,
@@ -71140,6 +71540,26 @@ function resolveToolLoopDetectionConfig(params) {
71140
71540
  }
71141
71541
  };
71142
71542
  }
71543
+ /**
71544
+ * Edit tool description. Replaces the upstream's terse one-liner with
71545
+ * usage notes migrated from the system prompt's "Edit Tool Best Practices"
71546
+ * section in Stage 2.5 of the prompt-reduction plan. Co-locating these
71547
+ * notes with the tool means they ship only when edit is in palette, and
71548
+ * the system prompt section can be deleted in Stage 4 without losing the
71549
+ * guidance.
71550
+ *
71551
+ * Combined with the read-before-edit guard (Stage 1.3) and the model's
71552
+ * own discipline, this should kill the hallucinated-oldText failure class
71553
+ * for any well-intentioned model.
71554
+ */
71555
+ const EDIT_TOOL_DESCRIPTION = [
71556
+ "Edit a file by replacing exact text. The oldText must match the file EXACTLY (whitespace, indentation, and all).",
71557
+ "Best practices to avoid match failures:",
71558
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
71559
+ "- 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.",
71560
+ "- 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.",
71561
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines)."
71562
+ ].join(" ");
71143
71563
  function createSymiCodingTools(options) {
71144
71564
  const execToolName = "exec";
71145
71565
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -71228,7 +71648,7 @@ function createSymiCodingTools(options) {
71228
71648
  }
71229
71649
  if (tool.name === "edit") {
71230
71650
  if (sandboxRoot) return [];
71231
- const guarded = wrapEditToolWithGuard(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), readEditTracker);
71651
+ const guarded = wrapEditToolWithGuard(wrapToolWithDescriptionOverride(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), EDIT_TOOL_DESCRIPTION), readEditTracker);
71232
71652
  return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
71233
71653
  }
71234
71654
  return [tool];
@@ -71649,7 +72069,11 @@ async function compactEmbeddedPiSessionDirect(params) {
71649
72069
  userTime,
71650
72070
  userTimeFormat,
71651
72071
  contextFiles,
71652
- memoryCitationsMode: params.config?.memory?.citations
72072
+ memoryCitationsMode: params.config?.memory?.citations,
72073
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
72074
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
72075
+ skillsAnchorList: params.config?.skills?.anchorList,
72076
+ currentUserMessage: void 0
71653
72077
  }));
71654
72078
  const sessionLock = await acquireSessionWriteLock({
71655
72079
  sessionFile: params.sessionFile,