@symerian/symi 2.5.7 → 2.6.0

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 (229) hide show
  1. package/dist/{accounts-qtxJ-6em.js → accounts-3dCrO3oZ.js} +1 -1
  2. package/dist/{accounts-tNElYrCH.js → accounts-BRw8yhIW.js} +21 -21
  3. package/dist/{accounts-CWktKM8a.js → accounts-BuZxOb3B.js} +1 -1
  4. package/dist/{active-listener-C9r8ZB9m.js → active-listener-CfHHV2SU.js} +1 -1
  5. package/dist/{agent-scope-BxoUQqgM.js → agent-scope-CpEJ0B88.js} +3 -3
  6. package/dist/{agents-CXloh6n_.js → agents-Bi50kp6u.js} +4 -4
  7. package/dist/{agents.config-BhAJXAtA.js → agents.config-BcTeP94V.js} +1 -1
  8. package/dist/{agents.config-BuTzBaXf.js → agents.config-Duce7lam.js} +1 -1
  9. package/dist/{audio-preflight-CPBOQV4I.js → audio-preflight-C40mKAp7.js} +4 -4
  10. package/dist/{audio-preflight-D02HwB-I.js → audio-preflight-DHTaS5U1.js} +34 -34
  11. package/dist/{auth-choice-DvaVrSwn.js → auth-choice-BFIBR4l9.js} +1 -1
  12. package/dist/{auth-choice-Br6zT8iS.js → auth-choice-Dyq-0MNq.js} +1 -1
  13. package/dist/{model-auth-DK43VicI.js → auth-profiles-DdK1Hxaa.js} +412 -412
  14. package/dist/{banner-BtqKaQZr.js → banner-D50f_0qf.js} +1 -1
  15. package/dist/{bindings-B7Ke6LJi.js → bindings-BsHoBLIE.js} +2 -2
  16. package/dist/build-info.json +3 -3
  17. package/dist/bundled/boot-md/handler.js +60 -60
  18. package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
  19. package/dist/bundled/command-logger/handler.js +3 -3
  20. package/dist/bundled/session-memory/handler.js +61 -61
  21. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  22. package/dist/{channel-activity-CsM_hJ_s.js → channel-activity-B6G1jnQT.js} +2 -2
  23. package/dist/{channel-options-DFHEgad5.js → channel-options-BFqaanEt.js} +1 -1
  24. package/dist/{channel-options-CfLxsV76.js → channel-options-BvBcjqyk.js} +1 -1
  25. package/dist/{channel-web-D-jDDmWN.js → channel-web-BQtFg4IP.js} +1 -1
  26. package/dist/{channels-cli-BEZORT4N.js → channels-cli-BYFQdWnL.js} +4 -4
  27. package/dist/{channels-cli-CT6wdGT8.js → channels-cli-BuTH-iVi.js} +4 -4
  28. package/dist/{chrome-EyvdASWt.js → chrome-CDJYxX5a.js} +24 -24
  29. package/dist/{chrome-D2SKJnR7.js → chrome-DYZwl5Gv.js} +5 -5
  30. package/dist/{chunk-BW5f05BR.js → chunk-09egQapi.js} +1 -1
  31. package/dist/{cli-CkxvN9Cb.js → cli-eOBlVLcC.js} +1 -1
  32. package/dist/{cli-kxxM9xT0.js → cli-r2L-UK6y.js} +1 -1
  33. package/dist/{command-registry-C0Ht_h4u.js → command-registry-D-pwcAIW.js} +9 -9
  34. package/dist/{commands-registry-D7CTCQPm.js → commands-registry-Bfc7Uz0o.js} +4 -4
  35. package/dist/{completion-cli-DeieEaoW.js → completion-cli-DIx7KyOG.js} +2 -2
  36. package/dist/{completion-cli-BEzbCT8h.js → completion-cli-DMO2OGTm.js} +1 -1
  37. package/dist/{config-DRbjHIwD.js → config-5SdHIcHU.js} +6 -6
  38. package/dist/{config-cli-CS_0o9LY.js → config-cli-BsDxqYDU.js} +1 -1
  39. package/dist/{config-cli-DLsLPE4o.js → config-cli-seaVWVru.js} +1 -1
  40. package/dist/{configure-T9J4bw0H.js → configure-BmPwuHXL.js} +3 -3
  41. package/dist/{configure-BX4aNf3w.js → configure-CqbKA0_V.js} +3 -3
  42. package/dist/control-ui/js/app.js +1 -1
  43. package/dist/{conversation-label-DXUkoKcB.js → conversation-label-Onz2hiJh.js} +1 -1
  44. package/dist/{deliver-C-37cZUe.js → deliver-BH0l3UKW.js} +1 -1
  45. package/dist/{deliver-D1ZN6-fl.js → deliver-dODxSv3b.js} +11 -11
  46. package/dist/{diagnostic-CI0kRQkt.js → diagnostic-rPhsBoZz.js} +2 -2
  47. package/dist/{doctor-completion-C_0iVIQ2.js → doctor-completion-C2IV3lKi.js} +1 -1
  48. package/dist/{doctor-completion-D7oTPU1N.js → doctor-completion-DMjs7-Qa.js} +1 -1
  49. package/dist/entry.js +1 -1
  50. package/dist/{command-format-BaxDnULz.js → env-BDXYbTKj.js} +10 -10
  51. package/dist/{errors-BoQgnc8X.js → errors-XIsvXeC-.js} +1 -1
  52. package/dist/extensionAPI.js +6 -6
  53. package/dist/{frontmatter-C_bv_0P8.js → frontmatter-CTR5f_Ez.js} +2 -2
  54. package/dist/{gateway-cli-DvJ_O7kb.js → gateway-cli-BanaeKQ_.js} +22 -19
  55. package/dist/{gateway-cli-DDFydH8b.js → gateway-cli-C-J_s559.js} +22 -19
  56. package/dist/{gemini-auth-CdSPHuLl.js → gemini-auth-Dy12ZAH3.js} +2 -2
  57. package/dist/{github-copilot-token-C_qUP7p5.js → github-copilot-token-cCYzSU9h.js} +1 -1
  58. package/dist/{glass-ui-ws-KbKXJGb5.js → glass-ui-ws-DK7x3Tz7.js} +7 -7
  59. package/dist/{glass-ui-ws-BdBSYcsf.js → glass-ui-ws-DUzp9m0D.js} +7 -7
  60. package/dist/{health-z-YCZRhf.js → health-BpHgCv-u.js} +1 -1
  61. package/dist/{health-DQmyj-7z.js → health-DK6rAOhC.js} +1 -1
  62. package/dist/{hooks-cli-4d-QhgRs.js → hooks-cli-Cin_3tFg.js} +2 -2
  63. package/dist/{hooks-cli-BRehYEXJ.js → hooks-cli-D-75G_66.js} +2 -2
  64. package/dist/{image-DcpMiprB.js → image-CHzdaNJ4.js} +1 -1
  65. package/dist/{image-Cp3JDEBB.js → image-CXu8W39c.js} +7 -7
  66. package/dist/{image-ops-CvJzsyvE.js → image-ops-C7CauEK8.js} +99 -99
  67. package/dist/{inbound-context-BlHX0H3E.js → inbound-context-DSDTl6Kj.js} +2 -2
  68. package/dist/index.js +6 -6
  69. package/dist/{ir-DccrnjsE.js → ir-CTiz95Vb.js} +5 -5
  70. package/dist/llm-slug-generator.js +64 -84
  71. package/dist/{local-roots-DMwIh5cS.js → local-roots-DhZz0Ybs.js} +6 -6
  72. package/dist/{login-qr-Batf3PT5.js → login-qr-AP9agO-i.js} +13 -13
  73. package/dist/{login-CwCoxapk.js → login-ul8zaw_S.js} +7 -7
  74. package/dist/{manager-D_LwXbc6.js → manager-PprhCvO_.js} +25 -25
  75. package/dist/{manifest-registry-D0IQ3WuX.js → manifest-registry-yb7sAlu4.js} +2 -2
  76. package/dist/{markdown-tables-iMQQZu4Q.js → markdown-tables-C-BmIap8.js} +1 -1
  77. package/dist/{message-channel-Dz5lr5b0.js → message-channel-OlFBYAw8.js} +1 -1
  78. package/dist/{models-CPlSSoV0.js → models-CeKIXf5B.js} +7 -8
  79. package/dist/{models-cli-BM2RWTmM.js → models-cli-2NcPKR9A.js} +7 -8
  80. package/dist/{models-cli-DDhpJuX3.js → models-cli-DN4AVlpI.js} +3 -3
  81. package/dist/{onboard-BlrojL3G.js → onboard-BcxDiUl_.js} +2 -2
  82. package/dist/{onboard-Bq2VEBrl.js → onboard-BukRqcRH.js} +2 -2
  83. package/dist/{onboard-channels-S0FbC25u.js → onboard-channels-DS6s341R.js} +1 -1
  84. package/dist/{onboard-channels-DjfS9mS6.js → onboard-channels-HPxu77wp.js} +1 -1
  85. package/dist/{onboarding-CwU-Uyo6.js → onboarding-B8uz24jt.js} +3 -3
  86. package/dist/{onboarding-Dg49kkBF.js → onboarding-DI-o_sax.js} +3 -3
  87. package/dist/{onboarding.finalize-CsBYKFAW.js → onboarding.finalize-Bn2e61yb.js} +5 -5
  88. package/dist/{onboarding.finalize-BaMs5pR4.js → onboarding.finalize-CfE_AEto.js} +6 -6
  89. package/dist/{outbound-D4fN_ZlE.js → outbound-CtMCmwxR.js} +7 -7
  90. package/dist/{outbound-attachment-DjNDa3zn.js → outbound-attachment-DJldbweZ.js} +2 -2
  91. package/dist/{paths-DLyHUt31.js → paths-CbQV9WEg.js} +2 -2
  92. package/dist/{pi-auth-json-0SYBFZTt.js → pi-auth-json-Bk8ERadJ.js} +10 -10
  93. package/dist/{pi-embedded-CKf4PxhQ.js → pi-embedded-B5qBa69e.js} +20143 -20044
  94. package/dist/{pi-embedded-helpers-B8kqLWns.js → pi-embedded-helpers-lgx_U5KS.js} +4 -4
  95. package/dist/{pi-embedded-helpers-ag2bosuj.js → pi-embedded-helpers-pubKo8HQ.js} +81 -81
  96. package/dist/{plugin-registry-VhRGXCLQ.js → plugin-registry-NIUxULTk.js} +1 -1
  97. package/dist/{plugin-registry-Dxo1iUfJ.js → plugin-registry-cj99EI0k.js} +1 -1
  98. package/dist/plugin-sdk/agents/pi-embedded-runner.d.ts +1 -1
  99. package/dist/plugin-sdk/agents/unified-runner.d.ts +69 -1
  100. package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +2 -2
  101. package/dist/plugin-sdk/{channel-web-Bc8Fmiy7.js → channel-web-CSd16cDi.js} +1 -1
  102. package/dist/plugin-sdk/index.js +2 -2
  103. package/dist/plugin-sdk/{reply-BSW3CdwW.js → reply-CkqSfQZN.js} +419 -320
  104. package/dist/plugin-sdk/{web-CvCo9ULq.js → web-DdTTil50.js} +2 -2
  105. package/dist/{plugins-DQYI3Fr-.js → plugins-BzmbgY7s.js} +5 -5
  106. package/dist/{plugins-cli-zNr1ThAO.js → plugins-cli-CcjxxESJ.js} +2 -2
  107. package/dist/{plugins-cli-DeDSnKlr.js → plugins-cli-D8hhTHZD.js} +2 -2
  108. package/dist/{program-C4whW2Oi.js → program-D09h71pS.js} +7 -7
  109. package/dist/{program-context-1jbNznxI.js → program-context-CLJSWBZr.js} +17 -17
  110. package/dist/{prompt-select-styled-B7VjdRNk.js → prompt-select-styled-DQqZEGoo.js} +4 -4
  111. package/dist/{prompt-select-styled-B7nwl6rd.js → prompt-select-styled-zRUqu0c8.js} +4 -4
  112. package/dist/{provider-auth-helpers-BmH4oHwJ.js → provider-auth-helpers-16r2WHNe.js} +1 -1
  113. package/dist/{provider-auth-helpers-C8cO9DLi.js → provider-auth-helpers-LzJ2WQIc.js} +1 -1
  114. package/dist/{push-apns-CoqskfCc.js → push-apns-B5xZKIxK.js} +1 -1
  115. package/dist/{push-apns-CJtWrkQV.js → push-apns-DJddAK3u.js} +1 -1
  116. package/dist/{pw-ai-Ch7liUOW.js → pw-ai-B5asscAD.js} +16 -16
  117. package/dist/{pw-ai-1htA-NnS.js → pw-ai-De-KR9_s.js} +1 -1
  118. package/dist/{qmd-manager-QHUP-_em.js → qmd-manager-iDLSiI4Z.js} +10 -10
  119. package/dist/{register.agent-fK3vOCU5.js → register.agent-CP_sigRh.js} +6 -6
  120. package/dist/{register.agent-C1Is84Q1.js → register.agent-D7NKuUkY.js} +5 -5
  121. package/dist/{register.configure-CIwwqqt9.js → register.configure-BEsGd0PR.js} +6 -6
  122. package/dist/{register.configure-DFJeKFFK.js → register.configure-BjRLNatb.js} +6 -6
  123. package/dist/{register.maintenance-CfQRUUM5.js → register.maintenance-CN6KUuX7.js} +7 -7
  124. package/dist/{register.maintenance-CRnXZTDk.js → register.maintenance-DD6TNFtV.js} +8 -8
  125. package/dist/{register.message-DYnXMP4c.js → register.message-DEUcNly1.js} +2 -2
  126. package/dist/{register.message-Ce57RPK8.js → register.message-DMVC_Sqm.js} +2 -2
  127. package/dist/{register.onboard-BJxCO8W7.js → register.onboard-CP6RP90V.js} +4 -4
  128. package/dist/{register.onboard-If50a0yL.js → register.onboard-J1pgV7lz.js} +4 -4
  129. package/dist/{register.setup-sdzsXVrS.js → register.setup-BeHpW3xI.js} +4 -4
  130. package/dist/{register.setup-DZipmOBQ.js → register.setup-Dhc3jKpK.js} +4 -4
  131. package/dist/{register.status-health-sessions-BncpB9Vw.js → register.status-health-sessions-DDkC0aoW.js} +3 -3
  132. package/dist/{register.status-health-sessions-DBXMyrNP.js → register.status-health-sessions-b-lWNsTM.js} +3 -3
  133. package/dist/{register.subclis-JthXJSly.js → register.subclis-BJqiT8Q2.js} +9 -9
  134. package/dist/{registry-CK4e9hn8.js → registry-DYq1AYOv.js} +2 -2
  135. package/dist/{replies-BIX_isV7.js → replies-LSmuwOhA.js} +3 -3
  136. package/dist/{reply-BfZzgC9H.js → reply-D40cmAci.js} +420 -321
  137. package/dist/{reply-prefix-XlyuyChD.js → reply-prefix-DpqZu44Z.js} +1 -1
  138. package/dist/{resolve-route-CZ-1eqw0.js → resolve-route-C4_I4GFI.js} +5 -5
  139. package/dist/{retry-Cly39XZB.js → retry-BBVXkKBV.js} +1 -1
  140. package/dist/{run-main-Dl1Kbmx0.js → run-main-BruREeZ6.js} +14 -14
  141. package/dist/{runner-BcQ0sF9T.js → runner-DUBExAb5.js} +1 -1
  142. package/dist/{runner-D0QUGA_X.js → runner-WAG0M5s9.js} +46 -46
  143. package/dist/{send-WyRqb4WD.js → send-CQAKg_12.js} +7 -7
  144. package/dist/{send-DeFniOjh.js → send-CVMyYPQw.js} +7 -7
  145. package/dist/{send-CiTGOvEc.js → send-CvhXrdgS.js} +12 -12
  146. package/dist/{send-DW96zgDL.js → send-DAN9hA5h.js} +6 -6
  147. package/dist/{send-B1u-LrcS.js → send-DYj_o4_F.js} +14 -14
  148. package/dist/{server-methods-xXv4ObXK.js → server-methods-Cyw_WS3A.js} +7 -7
  149. package/dist/{server-methods-D5zcFhng.js → server-methods-K-0MHs8x.js} +7 -7
  150. package/dist/{server-node-events-BN7H6wBM.js → server-node-events-89R9Ryky.js} +2 -2
  151. package/dist/{server-node-events-D4At7-pe.js → server-node-events-RA8RurtC.js} +2 -2
  152. package/dist/{session-SM36BTsl.js → session-DSU1vxxi.js} +4 -4
  153. package/dist/{skill-commands-BJMb_psG.js → skill-commands-DcVwOafC.js} +17 -17
  154. package/dist/{skills-BFekKL7i.js → skills-Bs0AW1g3.js} +25 -25
  155. package/dist/{sqlite-DRbx2dhW.js → sqlite-D_mz1_-y.js} +17 -17
  156. package/dist/{status-Nhvf_TEN.js → status-BSMEjz4q.js} +1 -1
  157. package/dist/{status-PbQwO8SV.js → status-CtNKWuzg.js} +2 -2
  158. package/dist/{status-XJTqV-CC.js → status-DHJLMwQN.js} +2 -2
  159. package/dist/{status-C5rGEkur.js → status-Kv_hsY8N.js} +1 -1
  160. package/dist/{store-C0wvOkae.js → store-01F_JM7O.js} +6 -6
  161. package/dist/{subagent-registry-DvCrN2PQ.js → subagent-registry-Cb5e_x99.js} +19342 -19243
  162. package/dist/{subsystem-Bs9YvKLa.js → subsystem-BjyjJF-d.js} +1 -1
  163. package/dist/{tables-DuZspiBu.js → tables-qMwbq29u.js} +1 -1
  164. package/dist/{target-errors-Be1SwYlW.js → target-errors-Bbr9rlzN.js} +2 -2
  165. package/dist/{thinking-CdlENGRW.js → thinking-BprCy23Z.js} +5 -5
  166. package/dist/{tokens-H1H1LiSQ.js → tokens-Bux9Y_xD.js} +1 -1
  167. package/dist/{tool-images-DXB7tqWi.js → tool-images-SqqWIT22.js} +2 -2
  168. package/dist/{tool-loop-detection-Cs8_HCsx.js → tool-loop-detection-D0kUzUGu.js} +3 -3
  169. package/dist/{pi-embedded-o9vOF9wB.js → unified-runner-CkJLTsTK.js} +69840 -69741
  170. package/dist/{update-cli-CckGzVRg.js → update-cli-Bl66LJZ4.js} +7 -7
  171. package/dist/{update-cli-pkg2BEbj.js → update-cli-CrRBoiVU.js} +8 -8
  172. package/dist/{update-runner-BuoOzUcX.js → update-runner-DxpSPK-f.js} +1 -1
  173. package/dist/{update-runner-BFwirE1P.js → update-runner-FgrqoxvV.js} +1 -1
  174. package/dist/{web-Cr6E8Ych.js → web-BYRKX5Ln.js} +2 -2
  175. package/dist/{web-C4CDNJmR.js → web-Czp0JS6-.js} +1 -1
  176. package/dist/{web-BjuBp_oj.js → web-D99WHLTL.js} +6 -6
  177. package/dist/{web-ofRAH4R_.js → web-RePh7lRy.js} +64 -64
  178. package/dist/{whatsapp-actions-D1RsnX7P.js → whatsapp-actions-BIeSWsCF.js} +25 -25
  179. package/dist/{workspace-wAaHI8-5.js → workspace-DscDraUb.js} +28 -28
  180. package/extensions/bluebubbles/node_modules/.bin/symi +0 -0
  181. package/extensions/copilot-proxy/node_modules/.bin/symi +0 -0
  182. package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -0
  183. package/extensions/diagnostics-otel/node_modules/.bin/symi +0 -0
  184. package/extensions/discord/node_modules/.bin/symi +0 -0
  185. package/extensions/feishu/node_modules/.bin/symi +0 -0
  186. package/extensions/google-antigravity-auth/node_modules/.bin/symi +0 -0
  187. package/extensions/google-gemini-cli-auth/node_modules/.bin/symi +0 -0
  188. package/extensions/googlechat/node_modules/.bin/symi +0 -0
  189. package/extensions/imessage/node_modules/.bin/symi +0 -0
  190. package/extensions/irc/node_modules/.bin/symi +0 -0
  191. package/extensions/learning-loop/node_modules/.bin/symi +0 -0
  192. package/extensions/line/node_modules/.bin/symi +0 -0
  193. package/extensions/matrix/node_modules/.bin/markdown-it +0 -0
  194. package/extensions/matrix/node_modules/.bin/symi +0 -0
  195. package/extensions/mattermost/node_modules/.bin/symi +0 -0
  196. package/extensions/memory-core/node_modules/.bin/symi +0 -0
  197. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -0
  198. package/extensions/memory-lancedb/node_modules/.bin/openai +0 -0
  199. package/extensions/memory-lancedb/node_modules/.bin/symi +0 -0
  200. package/extensions/minimax-portal-auth/node_modules/.bin/symi +0 -0
  201. package/extensions/msteams/node_modules/.bin/symi +0 -0
  202. package/extensions/nextcloud-talk/node_modules/.bin/symi +0 -0
  203. package/extensions/nostr/node_modules/.bin/symi +0 -0
  204. package/extensions/nostr/node_modules/.bin/tsc +0 -0
  205. package/extensions/nostr/node_modules/.bin/tsserver +0 -0
  206. package/extensions/signal/node_modules/.bin/symi +0 -0
  207. package/extensions/slack/node_modules/.bin/symi +0 -0
  208. package/extensions/telegram/node_modules/.bin/symi +0 -0
  209. package/extensions/tlon/node_modules/.bin/symi +0 -0
  210. package/extensions/twitch/node_modules/.bin/symi +0 -0
  211. package/extensions/voice-call/node_modules/.bin/symi +0 -0
  212. package/extensions/whatsapp/node_modules/.bin/symi +0 -0
  213. package/extensions/zalo/node_modules/.bin/symi +0 -0
  214. package/extensions/zalouser/node_modules/.bin/symi +0 -0
  215. package/package.json +83 -113
  216. package/skills/nano-banana-pro/scripts/generate_image.py +0 -0
  217. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -0
  218. package/skills/tmux/scripts/find-sessions.sh +0 -0
  219. package/skills/tmux/scripts/wait-for-text.sh +0 -0
  220. package/dist/paths-Cce4PUkG.js +0 -212
  221. /package/dist/{boolean-B8-BqKGQ.js → boolean-CE7i9tBR.js} +0 -0
  222. /package/dist/{chat-type-C_KiWNAH.js → chat-type-3FRbbjbq.js} +0 -0
  223. /package/dist/{diagnostic-session-state-Bxo4UHOL.js → diagnostic-session-state-Zw87xFym.js} +0 -0
  224. /package/dist/{legacy-names-BHV4AoFT.js → legacy-names-CePMUvus.js} +0 -0
  225. /package/dist/{pi-model-discovery-DaNAekda.js → pi-model-discovery-Bv5YDJc8.js} +0 -0
  226. /package/dist/{redact-jSxx6Ep2.js → redact-BDMXB06K.js} +0 -0
  227. /package/dist/{ssrf-BTMDZjHT.js → ssrf-DpUUUgkK.js} +0 -0
  228. /package/dist/{targets-CFovdgJI.js → targets-DGkXkFPj.js} +0 -0
  229. /package/dist/{transcript-events-DDYvbmRV.js → transcript-events-BBh3Gsrx.js} +0 -0
@@ -35832,7 +35832,8 @@ async function runAgentTurn(params) {
35832
35832
  const cb = params.callbacks;
35833
35833
  const sessionFile = resolveSessionFilePath(params.sessionId, void 0, { agentId });
35834
35834
  const profile = resolveModelProfile(params.provider && params.modelId ? `${params.provider}/${params.modelId}` : params.config.agents?.defaults?.model?.primary ?? "", params.config.models?.profiles);
35835
- const result = await runEmbeddedPiAgent({
35835
+ const toolsUsed = [];
35836
+ const buildInternalParams = (providerOverride, modelOverride) => ({
35836
35837
  sessionId: params.sessionId,
35837
35838
  sessionKey: params.sessionKey,
35838
35839
  agentId,
@@ -35847,14 +35848,28 @@ async function runAgentTurn(params) {
35847
35848
  extraSystemPrompt: params.extraSystemPrompt,
35848
35849
  clientTools: params.clientTools,
35849
35850
  disableTools: params.disableTools,
35850
- provider: params.provider,
35851
- model: params.modelId,
35851
+ provider: providerOverride ?? params.provider,
35852
+ model: modelOverride ?? params.modelId,
35852
35853
  authProfileId: params.authProfileId,
35853
35854
  authProfileIdSource: params.authProfileIdSource,
35854
35855
  thinkLevel: params.thinkLevel,
35855
35856
  reasoningLevel: params.reasoningLevel,
35856
35857
  timeoutMs: params.timeoutMs,
35857
35858
  abortSignal: params.abortSignal,
35859
+ lane: params.lane,
35860
+ toolResultFormat: params.toolResultFormat,
35861
+ verboseLevel: params.verboseLevel,
35862
+ ownerNumbers: params.ownerNumbers,
35863
+ enforceFinalTag: params.enforceFinalTag,
35864
+ execOverrides: params.execOverrides,
35865
+ bashElevated: params.bashElevated,
35866
+ suppressToolErrorWarnings: params.suppressToolErrorWarnings,
35867
+ streamParams: params.streamParams,
35868
+ blockReplyBreak: params.blockReplyBreak,
35869
+ blockReplyChunking: params.blockReplyChunking,
35870
+ requireExplicitMessageTarget: params.requireExplicitMessageTarget,
35871
+ disableMessageTool: params.disableMessageTool,
35872
+ symipulseMs: params.symipulseMs,
35858
35873
  messageChannel: ch?.messageChannel,
35859
35874
  messageProvider: ch?.messageProvider,
35860
35875
  agentAccountId: ch?.agentAccountId,
@@ -35876,26 +35891,92 @@ async function runAgentTurn(params) {
35876
35891
  onPartialReply: cb?.onDelta ? (payload) => {
35877
35892
  if (payload.text) cb.onDelta(payload.text);
35878
35893
  } : void 0,
35894
+ onAssistantMessageStart: cb?.onTypingStart ? () => {
35895
+ cb.onTypingStart();
35896
+ cb?.onLifecycle?.("streaming");
35897
+ } : cb?.onLifecycle ? () => {
35898
+ cb.onLifecycle("streaming");
35899
+ } : void 0,
35879
35900
  onToolResult: cb?.onToolResult ? (payload) => {
35880
35901
  if (payload.text) cb.onToolResult("tool", payload.text);
35881
35902
  } : void 0,
35882
35903
  onReasoningStream: cb?.onThinking ? (payload) => {
35883
35904
  if (payload.text) cb.onThinking(payload.text);
35884
35905
  } : void 0,
35885
- onAgentEvent: cb?.onAgentEvent
35906
+ onBlockReply: cb?.onBlockReply ? (payload) => {
35907
+ cb.onBlockReply({
35908
+ ...payload,
35909
+ isFinal: false
35910
+ });
35911
+ } : void 0,
35912
+ onBlockReplyFlush: cb?.onBlockReplyFlush,
35913
+ onAgentEvent: (evt) => {
35914
+ cb?.onAgentEvent?.(evt);
35915
+ const stream = evt.stream;
35916
+ const data = evt.data;
35917
+ const phase = typeof data?.phase === "string" ? data.phase : "";
35918
+ if (stream === "lifecycle") {
35919
+ if (phase === "start") {
35920
+ cb?.onLifecycle?.("start");
35921
+ cb?.onTypingStart?.();
35922
+ } else if (phase === "end") cb?.onTypingStop?.();
35923
+ else if (phase === "error") {
35924
+ cb?.onLifecycle?.("error");
35925
+ cb?.onTypingStop?.();
35926
+ if (cb?.onError && typeof data?.error === "string") cb.onError(new Error(data.error));
35927
+ }
35928
+ }
35929
+ if (stream === "tool") {
35930
+ const toolName = typeof data?.name === "string" ? data.name : "";
35931
+ if (phase === "start" && toolName) {
35932
+ toolsUsed.push(toolName);
35933
+ cb?.onToolStart?.(toolName, data?.args ?? {});
35934
+ cb?.onTypingStart?.();
35935
+ }
35936
+ }
35937
+ if (stream === "compaction" && phase === "end") cb?.onCompaction?.({
35938
+ tokensBefore: typeof data?.tokensBefore === "number" ? data.tokensBefore : 0,
35939
+ tokensAfter: typeof data?.tokensAfter === "number" ? data.tokensAfter : 0
35940
+ });
35941
+ }
35886
35942
  });
35943
+ let result;
35944
+ let fallbackProvider;
35945
+ let fallbackModel;
35946
+ const TRANSIENT_RETRY_DELAY_MS = 2500;
35947
+ const maxAttempts = params.retryOnTransientError ? 2 : 1;
35948
+ for (let attempt = 0; attempt < maxAttempts; attempt++) try {
35949
+ if (params.fallbackModels?.length) {
35950
+ const fallbackResult = await runWithModelFallback({
35951
+ cfg: params.config,
35952
+ provider: params.provider ?? "",
35953
+ model: params.modelId ?? "",
35954
+ agentDir,
35955
+ fallbacksOverride: params.fallbackModels,
35956
+ run: (provider, model) => runEmbeddedPiAgent(buildInternalParams(provider, model)),
35957
+ onError: async (fallbackAttempt) => {
35958
+ const fromModel = `${fallbackAttempt.provider}/${fallbackAttempt.model}`;
35959
+ cb?.onFallback?.(fromModel, "(next)", String(fallbackAttempt.error));
35960
+ }
35961
+ });
35962
+ result = fallbackResult.result;
35963
+ fallbackProvider = fallbackResult.provider;
35964
+ fallbackModel = fallbackResult.model;
35965
+ } else result = await runEmbeddedPiAgent(buildInternalParams());
35966
+ break;
35967
+ } catch (err) {
35968
+ const errMsg = err instanceof Error ? err.message : String(err);
35969
+ if (params.retryOnTransientError && attempt < maxAttempts - 1 && isTransientHttpError(errMsg)) {
35970
+ await new Promise((resolve) => setTimeout(resolve, TRANSIENT_RETRY_DELAY_MS));
35971
+ continue;
35972
+ }
35973
+ throw err;
35974
+ }
35975
+ result = result;
35887
35976
  const responseText = (result.payloads ?? []).filter((p) => p.text && !p.isError).map((p) => p.text).join("\n").trim();
35888
- const resolvedProvider = result.meta.agentMeta?.provider ?? params.provider ?? "";
35889
- const resolvedModel = result.meta.agentMeta?.model ?? params.modelId ?? "";
35890
- if (cb?.onFinal) await cb.onFinal(responseText, {
35891
- provider: resolvedProvider,
35892
- modelId: resolvedModel,
35893
- tokenCount: result.meta.agentMeta?.usage?.total ?? 0,
35894
- durationMs: Date.now() - startTime,
35895
- toolsUsed: []
35896
- });
35897
- if (cb?.onLifecycle) await cb.onLifecycle(result.meta.error ? "error" : "end");
35898
- return {
35977
+ const resolvedProvider = fallbackProvider ?? result.meta.agentMeta?.provider ?? params.provider ?? "";
35978
+ const resolvedModel = fallbackModel ?? result.meta.agentMeta?.model ?? params.modelId ?? "";
35979
+ const turnResult = {
35899
35980
  text: responseText,
35900
35981
  durationMs: Date.now() - startTime,
35901
35982
  provider: resolvedProvider,
@@ -35904,6 +35985,23 @@ async function runAgentTurn(params) {
35904
35985
  didSendViaMessagingTool: result.didSendViaMessagingTool ?? false,
35905
35986
  rawResult: result
35906
35987
  };
35988
+ if (params.postRunHooks?.length) {
35989
+ for (const hook of params.postRunHooks) if (hook.shouldRun(turnResult)) try {
35990
+ await hook.execute(turnResult, params);
35991
+ } catch (hookErr) {
35992
+ if (cb?.onError && hookErr instanceof Error) cb.onError(hookErr);
35993
+ }
35994
+ turnResult.durationMs = Date.now() - startTime;
35995
+ }
35996
+ if (cb?.onFinal) await cb.onFinal(responseText, {
35997
+ provider: resolvedProvider,
35998
+ modelId: resolvedModel,
35999
+ tokenCount: result.meta.agentMeta?.usage?.total ?? 0,
36000
+ durationMs: turnResult.durationMs,
36001
+ toolsUsed
36002
+ });
36003
+ if (cb?.onLifecycle) await cb.onLifecycle(result.meta.error ? "error" : "end");
36004
+ return turnResult;
35907
36005
  }
35908
36006
 
35909
36007
  //#endregion
@@ -35911,7 +36009,7 @@ async function runAgentTurn(params) {
35911
36009
  function createDefaultDeps() {
35912
36010
  return {
35913
36011
  sendMessageWhatsApp: async (...args) => {
35914
- const { sendMessageWhatsApp } = await import("./web-CvCo9ULq.js");
36012
+ const { sendMessageWhatsApp } = await import("./web-DdTTil50.js");
35915
36013
  return await sendMessageWhatsApp(...args);
35916
36014
  },
35917
36015
  sendMessageTelegram: async (...args) => {
@@ -53349,7 +53447,7 @@ function loadWebLoginQr() {
53349
53447
  return webLoginQrPromise;
53350
53448
  }
53351
53449
  function loadWebChannel() {
53352
- webChannelPromise ??= import("./web-CvCo9ULq.js");
53450
+ webChannelPromise ??= import("./web-DdTTil50.js");
53353
53451
  return webChannelPromise;
53354
53452
  }
53355
53453
  function loadWhatsAppActions() {
@@ -75711,7 +75809,6 @@ function createBlockReplyDeliveryHandler(params) {
75711
75809
  //#endregion
75712
75810
  //#region src/auto-reply/reply/agent-runner-execution.ts
75713
75811
  async function runAgentTurnWithFallback(params) {
75714
- const TRANSIENT_HTTP_RETRY_DELAY_MS = 2500;
75715
75812
  let didLogHeartbeatStrip = false;
75716
75813
  let autoCompactionCompleted = false;
75717
75814
  const directlySentBlockKeys = /* @__PURE__ */ new Set();
@@ -75732,199 +75829,216 @@ async function runAgentTurnWithFallback(params) {
75732
75829
  let fallbackModel = params.followupRun.run.model;
75733
75830
  let fallbackAttempts = [];
75734
75831
  let didResetAfterCompactionFailure = false;
75735
- let didRetryTransientHttpError = false;
75736
- while (true) try {
75737
- const normalizeStreamingText = (payload) => {
75738
- let text = payload.text;
75739
- if (!params.isHeartbeat && text?.includes("SYMIPULSE_OK")) {
75740
- const stripped = stripHeartbeatToken(text, { mode: "message" });
75741
- if (stripped.didStrip && !didLogHeartbeatStrip) {
75742
- didLogHeartbeatStrip = true;
75743
- logVerbose("Stripped stray SYMIPULSE_OK token from reply");
75744
- }
75745
- if (stripped.shouldSkip && (payload.mediaUrls?.length ?? 0) === 0) return { skip: true };
75746
- text = stripped.text;
75747
- }
75748
- if (isSilentReplyText(text, SILENT_REPLY_TOKEN)) return { skip: true };
75749
- if (!text) {
75750
- if ((payload.mediaUrls?.length ?? 0) > 0) return {
75751
- text: void 0,
75752
- skip: false
75753
- };
75754
- return { skip: true };
75832
+ const normalizeStreamingText = (payload) => {
75833
+ let text = payload.text;
75834
+ if (!params.isHeartbeat && text?.includes("SYMIPULSE_OK")) {
75835
+ const stripped = stripHeartbeatToken(text, { mode: "message" });
75836
+ if (stripped.didStrip && !didLogHeartbeatStrip) {
75837
+ didLogHeartbeatStrip = true;
75838
+ logVerbose("Stripped stray SYMIPULSE_OK token from reply");
75755
75839
  }
75756
- const sanitized = sanitizeUserFacingText(text, { errorContext: Boolean(payload.isError) });
75757
- if (!sanitized.trim()) return { skip: true };
75758
- return {
75759
- text: sanitized,
75840
+ if (stripped.shouldSkip && (payload.mediaUrls?.length ?? 0) === 0) return { skip: true };
75841
+ text = stripped.text;
75842
+ }
75843
+ if (isSilentReplyText(text, SILENT_REPLY_TOKEN)) return { skip: true };
75844
+ if (!text) {
75845
+ if ((payload.mediaUrls?.length ?? 0) > 0) return {
75846
+ text: void 0,
75760
75847
  skip: false
75761
75848
  };
75849
+ return { skip: true };
75850
+ }
75851
+ const sanitized = sanitizeUserFacingText(text, { errorContext: Boolean(payload.isError) });
75852
+ if (!sanitized.trim()) return { skip: true };
75853
+ return {
75854
+ text: sanitized,
75855
+ skip: false
75762
75856
  };
75763
- const handlePartialForTyping = async (payload) => {
75764
- if (isSilentReplyPrefixText(payload.text, SILENT_REPLY_TOKEN)) return;
75765
- const { text, skip } = normalizeStreamingText(payload);
75766
- if (skip || !text) return;
75857
+ };
75858
+ const blockReplyPipeline = params.blockReplyPipeline;
75859
+ const onToolResult = params.opts?.onToolResult;
75860
+ let toolResultChain = Promise.resolve();
75861
+ const serializedOnToolResult = onToolResult ? (name, resultText) => {
75862
+ toolResultChain = toolResultChain.then(async () => {
75863
+ const { text, skip } = normalizeStreamingText({ text: resultText });
75864
+ if (skip) return;
75767
75865
  await params.typingSignals.signalTextDelta(text);
75768
- return text;
75769
- };
75770
- const blockReplyPipeline = params.blockReplyPipeline;
75771
- const onToolResult = params.opts?.onToolResult;
75772
- const fallbackResult = await runWithModelFallback({
75773
- ...resolveModelFallbackOptions(params.followupRun.run),
75774
- run: (provider, model) => {
75775
- params.opts?.onModelSelected?.({
75776
- provider,
75777
- model,
75778
- thinkLevel: params.followupRun.run.thinkLevel
75779
- });
75780
- if (isCliProvider(provider, params.followupRun.run.config)) {
75781
- const startedAt = Date.now();
75782
- notifyAgentRunStart();
75783
- emitAgentEvent({
75784
- runId,
75785
- stream: "lifecycle",
75786
- data: {
75787
- phase: "start",
75788
- startedAt
75789
- }
75790
- });
75791
- const cliSessionId = getCliSessionId(params.getActiveSessionEntry(), provider);
75792
- return (async () => {
75793
- let lifecycleTerminalEmitted = false;
75794
- try {
75795
- const result = await runCliAgent({
75796
- sessionId: params.followupRun.run.sessionId,
75797
- sessionKey: params.sessionKey,
75798
- agentId: params.followupRun.run.agentId,
75799
- sessionFile: params.followupRun.run.sessionFile,
75800
- workspaceDir: params.followupRun.run.workspaceDir,
75801
- config: params.followupRun.run.config,
75802
- prompt: params.commandBody,
75803
- provider,
75804
- model,
75805
- thinkLevel: params.followupRun.run.thinkLevel,
75806
- timeoutMs: params.followupRun.run.timeoutMs,
75807
- runId,
75808
- extraSystemPrompt: params.followupRun.run.extraSystemPrompt,
75809
- ownerNumbers: params.followupRun.run.ownerNumbers,
75810
- cliSessionId,
75811
- images: params.opts?.images
75812
- });
75813
- const cliText = result.payloads?.[0]?.text?.trim();
75814
- if (cliText) emitAgentEvent({
75815
- runId,
75816
- stream: "assistant",
75817
- data: { text: cliText }
75818
- });
75819
- emitAgentEvent({
75820
- runId,
75821
- stream: "lifecycle",
75822
- data: {
75823
- phase: "end",
75824
- startedAt,
75825
- endedAt: Date.now()
75826
- }
75827
- });
75828
- lifecycleTerminalEmitted = true;
75829
- return result;
75830
- } catch (err) {
75831
- emitAgentEvent({
75832
- runId,
75833
- stream: "lifecycle",
75834
- data: {
75835
- phase: "error",
75836
- startedAt,
75837
- endedAt: Date.now(),
75838
- error: String(err)
75839
- }
75840
- });
75841
- lifecycleTerminalEmitted = true;
75842
- throw err;
75843
- } finally {
75844
- if (!lifecycleTerminalEmitted) emitAgentEvent({
75845
- runId,
75846
- stream: "lifecycle",
75847
- data: {
75848
- phase: "error",
75849
- startedAt,
75850
- endedAt: Date.now(),
75851
- error: "CLI run completed without lifecycle terminal event"
75852
- }
75853
- });
75854
- }
75855
- })();
75866
+ await onToolResult({
75867
+ text,
75868
+ mediaUrls: void 0
75869
+ });
75870
+ }).catch((err) => {
75871
+ logVerbose(`tool result delivery failed: ${String(err)}`);
75872
+ });
75873
+ const task = toolResultChain.finally(() => {
75874
+ params.pendingToolTasks.delete(task);
75875
+ });
75876
+ params.pendingToolTasks.add(task);
75877
+ } : void 0;
75878
+ while (true) try {
75879
+ const run = params.followupRun.run;
75880
+ const resolvedProvider = run.provider;
75881
+ const resolvedModel = run.model;
75882
+ if (isCliProvider(resolvedProvider, run.config)) {
75883
+ const startedAt = Date.now();
75884
+ notifyAgentRunStart();
75885
+ emitAgentEvent({
75886
+ runId,
75887
+ stream: "lifecycle",
75888
+ data: {
75889
+ phase: "start",
75890
+ startedAt
75856
75891
  }
75857
- const { authProfile, embeddedContext, senderContext } = buildEmbeddedRunContexts({
75858
- run: params.followupRun.run,
75859
- sessionCtx: params.sessionCtx,
75860
- hasRepliedRef: params.opts?.hasRepliedRef,
75861
- provider
75892
+ });
75893
+ const cliSessionId = getCliSessionId(params.getActiveSessionEntry(), resolvedProvider);
75894
+ let lifecycleTerminalEmitted = false;
75895
+ try {
75896
+ const cliResult = await runCliAgent({
75897
+ sessionId: run.sessionId,
75898
+ sessionKey: params.sessionKey,
75899
+ agentId: run.agentId,
75900
+ sessionFile: run.sessionFile,
75901
+ workspaceDir: run.workspaceDir,
75902
+ config: run.config,
75903
+ prompt: params.commandBody,
75904
+ provider: resolvedProvider,
75905
+ model: resolvedModel,
75906
+ thinkLevel: run.thinkLevel,
75907
+ timeoutMs: run.timeoutMs,
75908
+ runId,
75909
+ extraSystemPrompt: run.extraSystemPrompt,
75910
+ ownerNumbers: run.ownerNumbers,
75911
+ cliSessionId,
75912
+ images: params.opts?.images
75862
75913
  });
75863
- const runBaseParams = buildEmbeddedRunBaseParams({
75864
- run: params.followupRun.run,
75865
- provider,
75866
- model,
75914
+ const cliText = cliResult.payloads?.[0]?.text?.trim();
75915
+ if (cliText) emitAgentEvent({
75867
75916
  runId,
75868
- authProfile
75917
+ stream: "assistant",
75918
+ data: { text: cliText }
75869
75919
  });
75870
- return runEmbeddedPiAgent({
75871
- ...embeddedContext,
75872
- groupId: resolveGroupSessionKey(params.sessionCtx)?.id,
75873
- groupChannel: params.sessionCtx.GroupChannel?.trim() ?? params.sessionCtx.GroupSubject?.trim(),
75874
- groupSpace: params.sessionCtx.GroupSpace?.trim() ?? void 0,
75875
- ...senderContext,
75876
- ...runBaseParams,
75877
- prompt: params.commandBody,
75878
- extraSystemPrompt: params.followupRun.run.extraSystemPrompt,
75879
- toolResultFormat: (() => {
75880
- const channel = resolveMessageChannel(params.sessionCtx.Surface, params.sessionCtx.Provider);
75881
- if (!channel) return "markdown";
75882
- return isMarkdownCapableMessageChannel(channel) ? "markdown" : "plain";
75883
- })(),
75884
- suppressToolErrorWarnings: params.opts?.suppressToolErrorWarnings,
75885
- images: params.opts?.images,
75886
- abortSignal: params.opts?.abortSignal,
75887
- blockReplyBreak: params.resolvedBlockStreamingBreak,
75888
- blockReplyChunking: params.blockReplyChunking,
75889
- onPartialReply: async (payload) => {
75890
- const textForTyping = await handlePartialForTyping(payload);
75891
- if (!params.opts?.onPartialReply || textForTyping === void 0) return;
75892
- await params.opts.onPartialReply({
75893
- text: textForTyping,
75894
- mediaUrls: payload.mediaUrls
75895
- });
75896
- },
75897
- onAssistantMessageStart: async () => {
75898
- await params.typingSignals.signalMessageStart();
75899
- await params.opts?.onAssistantMessageStart?.();
75900
- },
75901
- onReasoningStream: params.typingSignals.shouldStartOnReasoning || params.opts?.onReasoningStream ? async (payload) => {
75902
- await params.typingSignals.signalReasoningDelta();
75903
- await params.opts?.onReasoningStream?.({
75904
- text: payload.text,
75905
- mediaUrls: payload.mediaUrls
75906
- });
75907
- } : void 0,
75908
- onReasoningEnd: params.opts?.onReasoningEnd,
75909
- onAgentEvent: async (evt) => {
75910
- const hasLifecyclePhase = evt.stream === "lifecycle" && typeof evt.data.phase === "string";
75911
- if (evt.stream !== "lifecycle" || hasLifecyclePhase) notifyAgentRunStart();
75912
- if (evt.stream === "tool") {
75913
- const phase = typeof evt.data.phase === "string" ? evt.data.phase : "";
75914
- const name = typeof evt.data.name === "string" ? evt.data.name : void 0;
75915
- if (phase === "start" || phase === "update") {
75916
- await params.typingSignals.signalToolStart();
75917
- await params.opts?.onToolStart?.({
75918
- name,
75919
- phase
75920
- });
75921
- }
75922
- }
75923
- if (evt.stream === "compaction") {
75924
- if ((typeof evt.data.phase === "string" ? evt.data.phase : "") === "end") autoCompactionCompleted = true;
75925
- }
75926
- },
75927
- onBlockReply: params.opts?.onBlockReply ? createBlockReplyDeliveryHandler({
75920
+ emitAgentEvent({
75921
+ runId,
75922
+ stream: "lifecycle",
75923
+ data: {
75924
+ phase: "end",
75925
+ startedAt,
75926
+ endedAt: Date.now()
75927
+ }
75928
+ });
75929
+ lifecycleTerminalEmitted = true;
75930
+ runResult = cliResult;
75931
+ break;
75932
+ } catch (err) {
75933
+ emitAgentEvent({
75934
+ runId,
75935
+ stream: "lifecycle",
75936
+ data: {
75937
+ phase: "error",
75938
+ startedAt,
75939
+ endedAt: Date.now(),
75940
+ error: String(err)
75941
+ }
75942
+ });
75943
+ lifecycleTerminalEmitted = true;
75944
+ throw err;
75945
+ } finally {
75946
+ if (!lifecycleTerminalEmitted) emitAgentEvent({
75947
+ runId,
75948
+ stream: "lifecycle",
75949
+ data: {
75950
+ phase: "error",
75951
+ startedAt,
75952
+ endedAt: Date.now(),
75953
+ error: "CLI run completed without lifecycle terminal event"
75954
+ }
75955
+ });
75956
+ }
75957
+ }
75958
+ params.opts?.onModelSelected?.({
75959
+ provider: resolvedProvider,
75960
+ model: resolvedModel,
75961
+ thinkLevel: run.thinkLevel
75962
+ });
75963
+ const toolResultFormat = (() => {
75964
+ const channel = resolveMessageChannel(params.sessionCtx.Surface, params.sessionCtx.Provider);
75965
+ return !channel || isMarkdownCapableMessageChannel(channel) ? "markdown" : "plain";
75966
+ })();
75967
+ const turnResult = await runAgentTurn({
75968
+ sessionId: run.sessionId,
75969
+ sessionKey: params.sessionKey ?? run.sessionKey ?? run.sessionId,
75970
+ agentId: run.agentId,
75971
+ workspaceDir: run.workspaceDir,
75972
+ agentDir: run.agentDir,
75973
+ config: run.config,
75974
+ skillsSnapshot: run.skillsSnapshot,
75975
+ prompt: params.commandBody,
75976
+ extraSystemPrompt: run.extraSystemPrompt,
75977
+ images: params.opts?.images,
75978
+ provider: resolvedProvider,
75979
+ modelId: resolvedModel,
75980
+ authProfileId: run.authProfileId,
75981
+ authProfileIdSource: run.authProfileIdSource,
75982
+ thinkLevel: run.thinkLevel,
75983
+ verboseLevel: run.verboseLevel,
75984
+ reasoningLevel: run.reasoningLevel,
75985
+ timeoutMs: run.timeoutMs,
75986
+ runId,
75987
+ abortSignal: params.opts?.abortSignal,
75988
+ toolResultFormat,
75989
+ ownerNumbers: run.ownerNumbers,
75990
+ enforceFinalTag: run.enforceFinalTag,
75991
+ execOverrides: run.execOverrides,
75992
+ bashElevated: run.bashElevated,
75993
+ suppressToolErrorWarnings: params.opts?.suppressToolErrorWarnings,
75994
+ blockReplyBreak: params.resolvedBlockStreamingBreak,
75995
+ blockReplyChunking: params.blockReplyChunking,
75996
+ retryOnTransientError: true,
75997
+ fallbackModels: resolveModelFallbackOptions(run).fallbacksOverride,
75998
+ channel: {
75999
+ messageChannel: resolveMessageChannel(params.sessionCtx.Surface, params.sessionCtx.Provider) ?? void 0,
76000
+ messageProvider: params.sessionCtx.Provider?.trim().toLowerCase() || void 0,
76001
+ agentAccountId: params.sessionCtx.AccountId,
76002
+ messageTo: params.sessionCtx.OriginatingTo ?? params.sessionCtx.To,
76003
+ messageThreadId: params.sessionCtx.MessageThreadId ?? void 0,
76004
+ groupId: resolveGroupSessionKey(params.sessionCtx)?.id,
76005
+ groupChannel: params.sessionCtx.GroupChannel?.trim() ?? params.sessionCtx.GroupSubject?.trim(),
76006
+ groupSpace: params.sessionCtx.GroupSpace?.trim() ?? void 0,
76007
+ senderId: params.sessionCtx.SenderId?.trim() || void 0,
76008
+ senderName: params.sessionCtx.SenderName?.trim() || void 0,
76009
+ senderUsername: params.sessionCtx.SenderUsername?.trim() || void 0,
76010
+ senderE164: params.sessionCtx.SenderE164?.trim() || void 0,
76011
+ senderIsOwner: run.senderIsOwner,
76012
+ currentChannelId: params.sessionCtx.CurrentChannelId,
76013
+ currentThreadTs: params.sessionCtx.CurrentThreadTs,
76014
+ hasRepliedRef: params.opts?.hasRepliedRef
76015
+ },
76016
+ callbacks: {
76017
+ onDelta: async (text) => {
76018
+ if (isSilentReplyPrefixText(text, SILENT_REPLY_TOKEN)) return;
76019
+ const { text: normalized, skip } = normalizeStreamingText({ text });
76020
+ if (skip || !normalized) return;
76021
+ await params.typingSignals.signalTextDelta(normalized);
76022
+ await params.opts?.onPartialReply?.({ text: normalized });
76023
+ },
76024
+ onToolStart: async (name) => {
76025
+ notifyAgentRunStart();
76026
+ await params.typingSignals.signalToolStart();
76027
+ await params.opts?.onToolStart?.({
76028
+ name,
76029
+ phase: "start"
76030
+ });
76031
+ },
76032
+ onToolResult: serializedOnToolResult,
76033
+ onThinking: params.typingSignals.shouldStartOnReasoning || params.opts?.onReasoningStream ? async (text) => {
76034
+ await params.typingSignals.signalReasoningDelta();
76035
+ await params.opts?.onReasoningStream?.({ text });
76036
+ } : void 0,
76037
+ onLifecycle: async (phase) => {
76038
+ if (phase === "start" || phase === "streaming") notifyAgentRunStart();
76039
+ },
76040
+ onBlockReply: params.opts?.onBlockReply ? async (payload) => {
76041
+ await createBlockReplyDeliveryHandler({
75928
76042
  onBlockReply: params.opts.onBlockReply,
75929
76043
  currentMessageId: params.sessionCtx.MessageSidFull ?? params.sessionCtx.MessageSid,
75930
76044
  normalizeStreamingText,
@@ -75933,46 +76047,22 @@ async function runAgentTurnWithFallback(params) {
75933
76047
  blockStreamingEnabled: params.blockStreamingEnabled,
75934
76048
  blockReplyPipeline,
75935
76049
  directlySentBlockKeys
75936
- }) : void 0,
75937
- onBlockReplyFlush: params.blockStreamingEnabled && blockReplyPipeline ? async () => {
75938
- await blockReplyPipeline.flush({ force: true });
75939
- } : void 0,
75940
- shouldEmitToolResult: params.shouldEmitToolResult,
75941
- shouldEmitToolOutput: params.shouldEmitToolOutput,
75942
- onToolResult: onToolResult ? (() => {
75943
- let toolResultChain = Promise.resolve();
75944
- return (payload) => {
75945
- toolResultChain = toolResultChain.then(async () => {
75946
- const { text, skip } = normalizeStreamingText(payload);
75947
- if (skip) return;
75948
- await params.typingSignals.signalTextDelta(text);
75949
- await onToolResult({
75950
- text,
75951
- mediaUrls: payload.mediaUrls
75952
- });
75953
- }).catch((err) => {
75954
- logVerbose(`tool result delivery failed: ${String(err)}`);
75955
- });
75956
- const task = toolResultChain.finally(() => {
75957
- params.pendingToolTasks.delete(task);
75958
- });
75959
- params.pendingToolTasks.add(task);
75960
- };
75961
- })() : void 0
75962
- });
76050
+ })(payload);
76051
+ } : void 0,
76052
+ onBlockReplyFlush: params.blockStreamingEnabled && blockReplyPipeline ? async () => {
76053
+ await blockReplyPipeline.flush({ force: true });
76054
+ } : void 0,
76055
+ onCompaction: () => {
76056
+ autoCompactionCompleted = true;
76057
+ },
76058
+ onAgentEvent: (evt) => {
76059
+ if (evt.stream !== "lifecycle") notifyAgentRunStart();
76060
+ }
75963
76061
  }
75964
76062
  });
75965
- runResult = fallbackResult.result;
75966
- fallbackProvider = fallbackResult.provider;
75967
- fallbackModel = fallbackResult.model;
75968
- fallbackAttempts = Array.isArray(fallbackResult.attempts) ? fallbackResult.attempts.map((attempt) => ({
75969
- provider: String(attempt.provider ?? ""),
75970
- model: String(attempt.model ?? ""),
75971
- error: String(attempt.error ?? ""),
75972
- reason: attempt.reason ? String(attempt.reason) : void 0,
75973
- status: typeof attempt.status === "number" ? attempt.status : void 0,
75974
- code: attempt.code ? String(attempt.code) : void 0
75975
- })) : [];
76063
+ runResult = turnResult.rawResult;
76064
+ fallbackProvider = turnResult.provider;
76065
+ fallbackModel = turnResult.modelId;
75976
76066
  const embeddedError = runResult.meta?.error;
75977
76067
  if (embeddedError && isContextOverflowError(embeddedError.message) && !didResetAfterCompactionFailure && await params.resetSessionAfterCompactionFailure(embeddedError.message)) {
75978
76068
  didResetAfterCompactionFailure = true;
@@ -76031,14 +76121,6 @@ async function runAgentTurnWithFallback(params) {
76031
76121
  payload: { text: "⚠️ Session history was corrupted. I've reset the conversation - please try again!" }
76032
76122
  };
76033
76123
  }
76034
- if (isTransientHttp && !didRetryTransientHttpError) {
76035
- didRetryTransientHttpError = true;
76036
- defaultRuntime.error(`Transient HTTP provider error before reply (${message}). Retrying once in ${TRANSIENT_HTTP_RETRY_DELAY_MS}ms.`);
76037
- await new Promise((resolve) => {
76038
- setTimeout(resolve, TRANSIENT_HTTP_RETRY_DELAY_MS);
76039
- });
76040
- continue;
76041
- }
76042
76124
  defaultRuntime.error(`Embedded agent failed before reply: ${message}`);
76043
76125
  const trimmedMessage = (isTransientHttp ? sanitizeUserFacingText(message, { errorContext: true }) : message).replace(/\.\s*$/, "");
76044
76126
  return {
@@ -76211,7 +76293,7 @@ async function runMemoryFlushIfNeeded(params) {
76211
76293
  try {
76212
76294
  await runWithModelFallback({
76213
76295
  ...resolveModelFallbackOptions(params.followupRun.run),
76214
- run: (provider, model) => {
76296
+ run: async (provider, model) => {
76215
76297
  const { authProfile, embeddedContext, senderContext } = buildEmbeddedRunContexts({
76216
76298
  run: params.followupRun.run,
76217
76299
  sessionCtx: params.sessionCtx,
@@ -76225,21 +76307,46 @@ async function runMemoryFlushIfNeeded(params) {
76225
76307
  runId: flushRunId,
76226
76308
  authProfile
76227
76309
  });
76228
- return runEmbeddedPiAgent({
76229
- ...embeddedContext,
76230
- ...senderContext,
76231
- ...runBaseParams,
76310
+ return (await runAgentTurn({
76311
+ sessionId: embeddedContext.sessionId,
76312
+ sessionKey: embeddedContext.sessionKey ?? embeddedContext.sessionId ?? "",
76313
+ workspaceDir: runBaseParams.workspaceDir,
76314
+ agentDir: runBaseParams.agentDir,
76315
+ config: runBaseParams.config ?? params.cfg,
76316
+ skillsSnapshot: runBaseParams.skillsSnapshot,
76232
76317
  prompt: resolveMemoryFlushPromptForRun({
76233
76318
  prompt: memoryFlushSettings.prompt,
76234
76319
  cfg: params.cfg
76235
76320
  }),
76236
76321
  extraSystemPrompt: flushSystemPrompt,
76237
- onAgentEvent: (evt) => {
76238
- if (evt.stream === "compaction") {
76239
- if ((typeof evt.data.phase === "string" ? evt.data.phase : "") === "end") memoryCompactionCompleted = true;
76240
- }
76241
- }
76242
- });
76322
+ provider,
76323
+ modelId: model,
76324
+ authProfileId: runBaseParams.authProfileId,
76325
+ authProfileIdSource: runBaseParams.authProfileIdSource,
76326
+ thinkLevel: runBaseParams.thinkLevel,
76327
+ verboseLevel: runBaseParams.verboseLevel,
76328
+ reasoningLevel: runBaseParams.reasoningLevel,
76329
+ timeoutMs: runBaseParams.timeoutMs,
76330
+ runId: runBaseParams.runId,
76331
+ ownerNumbers: runBaseParams.ownerNumbers,
76332
+ enforceFinalTag: runBaseParams.enforceFinalTag,
76333
+ execOverrides: runBaseParams.execOverrides,
76334
+ bashElevated: runBaseParams.bashElevated,
76335
+ channel: {
76336
+ messageProvider: embeddedContext.messageProvider,
76337
+ agentAccountId: embeddedContext.agentAccountId,
76338
+ messageTo: embeddedContext.messageTo,
76339
+ messageThreadId: embeddedContext.messageThreadId,
76340
+ senderId: senderContext.senderId,
76341
+ senderName: senderContext.senderName,
76342
+ senderUsername: senderContext.senderUsername,
76343
+ senderE164: senderContext.senderE164,
76344
+ senderIsOwner: runBaseParams.senderIsOwner
76345
+ },
76346
+ callbacks: { onCompaction: () => {
76347
+ memoryCompactionCompleted = true;
76348
+ } }
76349
+ })).rawResult;
76243
76350
  }
76244
76351
  });
76245
76352
  let memoryFlushCompactionCount = activeSessionEntry?.compactionCount ?? (params.sessionKey ? activeSessionStore?.[params.sessionKey]?.compactionCount : 0) ?? 0;
@@ -76554,81 +76661,73 @@ function createFollowupRunner(params) {
76554
76661
  let fallbackProvider = queued.run.provider;
76555
76662
  let fallbackModel = queued.run.model;
76556
76663
  try {
76557
- const fallbackResult = await runWithModelFallback({
76558
- cfg: queued.run.config,
76559
- provider: queued.run.provider,
76560
- model: queued.run.model,
76664
+ runResult = await runAgentTurn({
76665
+ sessionId: queued.run.sessionId,
76666
+ sessionKey: queued.run.sessionKey ?? queued.run.sessionId,
76667
+ workspaceDir: queued.run.workspaceDir,
76561
76668
  agentDir: queued.run.agentDir,
76562
- fallbacksOverride: resolveAgentModelFallbacksOverride(queued.run.config, resolveAgentIdFromSessionKey(queued.run.sessionKey)),
76563
- run: (provider, model) => {
76564
- const authProfile = resolveRunAuthProfile(queued.run, provider);
76565
- return runEmbeddedPiAgent({
76566
- sessionId: queued.run.sessionId,
76567
- sessionKey: queued.run.sessionKey,
76568
- agentId: queued.run.agentId,
76569
- messageProvider: queued.run.messageProvider,
76570
- agentAccountId: queued.run.agentAccountId,
76571
- messageTo: queued.originatingTo,
76572
- messageThreadId: queued.originatingThreadId,
76573
- groupId: queued.run.groupId,
76574
- groupChannel: queued.run.groupChannel,
76575
- groupSpace: queued.run.groupSpace,
76576
- senderId: queued.run.senderId,
76577
- senderName: queued.run.senderName,
76578
- senderUsername: queued.run.senderUsername,
76579
- senderE164: queued.run.senderE164,
76580
- senderIsOwner: queued.run.senderIsOwner,
76581
- sessionFile: queued.run.sessionFile,
76582
- workspaceDir: queued.run.workspaceDir,
76583
- config: queued.run.config,
76584
- skillsSnapshot: queued.run.skillsSnapshot,
76585
- prompt: queued.prompt,
76586
- extraSystemPrompt: queued.run.extraSystemPrompt,
76587
- ownerNumbers: queued.run.ownerNumbers,
76588
- enforceFinalTag: queued.run.enforceFinalTag,
76589
- provider,
76590
- model,
76591
- ...authProfile,
76592
- thinkLevel: queued.run.thinkLevel,
76593
- verboseLevel: queued.run.verboseLevel,
76594
- reasoningLevel: queued.run.reasoningLevel,
76595
- suppressToolErrorWarnings: opts?.suppressToolErrorWarnings,
76596
- execOverrides: queued.run.execOverrides,
76597
- bashElevated: queued.run.bashElevated,
76598
- timeoutMs: queued.run.timeoutMs,
76599
- runId,
76600
- blockReplyBreak: queued.run.blockReplyBreak,
76601
- onAgentEvent: (evt) => {
76602
- if (evt.stream !== "compaction") return;
76603
- if ((typeof evt.data.phase === "string" ? evt.data.phase : "") === "end") autoCompactionCompleted = true;
76604
- }
76605
- });
76606
- }
76669
+ config: queued.run.config,
76670
+ skillsSnapshot: queued.run.skillsSnapshot,
76671
+ prompt: queued.prompt,
76672
+ extraSystemPrompt: queued.run.extraSystemPrompt,
76673
+ provider: queued.run.provider,
76674
+ modelId: queued.run.model,
76675
+ authProfileId: queued.run.authProfileId,
76676
+ authProfileIdSource: queued.run.authProfileIdSource,
76677
+ thinkLevel: queued.run.thinkLevel,
76678
+ verboseLevel: queued.run.verboseLevel,
76679
+ reasoningLevel: queued.run.reasoningLevel,
76680
+ timeoutMs: queued.run.timeoutMs,
76681
+ runId,
76682
+ ownerNumbers: queued.run.ownerNumbers,
76683
+ enforceFinalTag: queued.run.enforceFinalTag,
76684
+ execOverrides: queued.run.execOverrides,
76685
+ bashElevated: queued.run.bashElevated,
76686
+ suppressToolErrorWarnings: opts?.suppressToolErrorWarnings,
76687
+ blockReplyBreak: queued.run.blockReplyBreak,
76688
+ fallbackModels: resolveAgentModelFallbacksOverride(queued.run.config, resolveAgentIdFromSessionKey(queued.run.sessionKey)),
76689
+ channel: {
76690
+ messageProvider: queued.run.messageProvider,
76691
+ agentAccountId: queued.run.agentAccountId,
76692
+ messageTo: queued.originatingTo,
76693
+ messageThreadId: queued.originatingThreadId,
76694
+ groupId: queued.run.groupId,
76695
+ groupChannel: queued.run.groupChannel,
76696
+ groupSpace: queued.run.groupSpace,
76697
+ senderId: queued.run.senderId,
76698
+ senderName: queued.run.senderName,
76699
+ senderUsername: queued.run.senderUsername,
76700
+ senderE164: queued.run.senderE164,
76701
+ senderIsOwner: queued.run.senderIsOwner
76702
+ },
76703
+ callbacks: { onCompaction: () => {
76704
+ autoCompactionCompleted = true;
76705
+ } }
76607
76706
  });
76608
- runResult = fallbackResult.result;
76609
- fallbackProvider = fallbackResult.provider;
76610
- fallbackModel = fallbackResult.model;
76707
+ fallbackProvider = runResult.provider;
76708
+ fallbackModel = runResult.modelId;
76611
76709
  } catch (err) {
76612
76710
  const message = err instanceof Error ? err.message : String(err);
76613
76711
  defaultRuntime.error?.(`Followup agent failed before reply: ${message}`);
76614
76712
  return;
76615
76713
  }
76616
- const usage = runResult.meta?.agentMeta?.usage;
76617
- const promptTokens = runResult.meta?.agentMeta?.promptTokens;
76618
- const modelUsed = runResult.meta?.agentMeta?.model ?? fallbackModel ?? defaultModel;
76714
+ const rawResult = runResult.rawResult;
76715
+ const usage = rawResult.meta?.agentMeta?.usage;
76716
+ const promptTokens = rawResult.meta?.agentMeta?.promptTokens;
76717
+ const modelUsed = rawResult.meta?.agentMeta?.model ?? fallbackModel ?? defaultModel;
76619
76718
  const contextTokensUsed = agentCfgContextTokens ?? lookupContextTokens(modelUsed) ?? sessionEntry?.contextTokens ?? DEFAULT_CONTEXT_TOKENS;
76620
76719
  if (storePath && sessionKey) await persistRunSessionUsage({
76621
76720
  storePath,
76622
76721
  sessionKey,
76623
76722
  usage,
76624
- lastCallUsage: runResult.meta?.agentMeta?.lastCallUsage,
76723
+ lastCallUsage: rawResult.meta?.agentMeta?.lastCallUsage,
76625
76724
  promptTokens,
76626
76725
  modelUsed,
76627
76726
  providerUsed: fallbackProvider,
76628
76727
  contextTokensUsed,
76629
76728
  logLabel: "followup"
76630
76729
  });
76631
- const payloadArray = runResult.payloads ?? [];
76730
+ const payloadArray = rawResult.payloads ?? [];
76632
76731
  if (payloadArray.length === 0) return;
76633
76732
  const sanitizedPayloads = payloadArray.flatMap((payload) => {
76634
76733
  const text = payload.text;
@@ -76649,13 +76748,13 @@ function createFollowupRunner(params) {
76649
76748
  replyToMode: resolveReplyToMode(queued.run.config, replyToChannel, queued.originatingAccountId, queued.originatingChatType),
76650
76749
  replyToChannel
76651
76750
  }),
76652
- sentTexts: runResult.messagingToolSentTexts ?? []
76751
+ sentTexts: rawResult.messagingToolSentTexts ?? []
76653
76752
  }),
76654
- sentMediaUrls: runResult.messagingToolSentMediaUrls ?? []
76753
+ sentMediaUrls: rawResult.messagingToolSentMediaUrls ?? []
76655
76754
  });
76656
76755
  const finalPayloads = shouldSuppressMessagingToolReplies({
76657
76756
  messageProvider: queued.run.messageProvider,
76658
- messagingToolSentTargets: runResult.messagingToolSentTargets,
76757
+ messagingToolSentTargets: rawResult.messagingToolSentTargets,
76659
76758
  originatingTo: queued.originatingTo,
76660
76759
  accountId: queued.run.agentAccountId
76661
76760
  }) ? [] : mediaFilteredPayloads;
@@ -76666,7 +76765,7 @@ function createFollowupRunner(params) {
76666
76765
  sessionStore,
76667
76766
  sessionKey,
76668
76767
  storePath,
76669
- lastCallUsage: runResult.meta?.agentMeta?.lastCallUsage,
76768
+ lastCallUsage: rawResult.meta?.agentMeta?.lastCallUsage,
76670
76769
  contextTokensUsed
76671
76770
  });
76672
76771
  if (queued.run.verboseLevel && queued.run.verboseLevel !== "off") {