squidclaw 3.0.24 → 3.0.26

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 (329) hide show
  1. package/dist/{accounts-BH9Qo1sQ.js → accounts-BK8I0Svb.js} +7 -7
  2. package/dist/{accounts-Cuwg9Tan.js → accounts-DeqNOvBo.js} +1 -1
  3. package/dist/{accounts-B1RxFghM.js → accounts-KzgPbLHP.js} +1 -1
  4. package/dist/{acp-cli-Ch55Vzud.js → acp-cli-BwG98FYT.js} +8 -8
  5. package/dist/{agent-scope-nEVgVklg.js → agent-scope-Cq4vDGrK.js} +17 -17
  6. package/dist/{agents-B-ig6ydU.js → agents-DXKtU4Il.js} +14 -14
  7. package/dist/{agents.config-w_Z6Fb4-.js → agents.config-BM-2SLCh.js} +2 -2
  8. package/dist/{api-key-rotation-JPmjv-c0.js → api-key-rotation-6i41mEc9.js} +1 -1
  9. package/dist/{audio-preflight-lT9iRnYi.js → audio-preflight-Bzo_zN4j.js} +4 -4
  10. package/dist/{audio-preflight-CZ--cSZh.js → audio-preflight-C-JCwUKe.js} +34 -34
  11. package/dist/{audio-transcription-runner-YiR1ym3a.js → audio-transcription-runner-Cp_lkLCv.js} +1 -1
  12. package/dist/{audio-transcription-runner-D-uxpkbd.js → audio-transcription-runner-DvQksGUE.js} +23 -23
  13. package/dist/{audit-JLT1FqTt.js → audit-DLTgNDFw.js} +29 -29
  14. package/dist/{auth-BlP9BwaD.js → auth-CuObxnC4.js} +1 -1
  15. package/dist/{auth-choice-Czu7271G.js → auth-choice-BVQQneHM.js} +13 -13
  16. package/dist/{auth-choice-ORZHjbsv.js → auth-choice-CXepQc7c.js} +11 -11
  17. package/dist/{auth-choice.apply-helpers-CdoXMtxm.js → auth-choice.apply-helpers-p1y_DmDT.js} +1 -1
  18. package/dist/{auth-profiles-9T4j6jMy.js → auth-profiles-CX4YYu7Z.js} +16 -16
  19. package/dist/{auth-token-BFc70pes.js → auth-token-Dlk7MMsC.js} +1 -1
  20. package/dist/{banner-CwNmI5G-.js → banner-DMfuBV69.js} +2 -2
  21. package/dist/{bonjour-discovery-eqJcK09r.js → bonjour-discovery-BHz2I6_W.js} +1 -1
  22. package/dist/{browser-cli-DCDPC5sg.js → browser-cli-Dvwk4zAD.js} +12 -12
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/session-memory/handler.js +127 -12
  25. package/dist/{call-D7jOWSFr.js → call-BlWEBz99.js} +10 -10
  26. package/dist/{channel-account-context-DJ3rHgVO.js → channel-account-context-CQ6rCiGI.js} +5 -5
  27. package/dist/{channel-activity-wuB3-cfR.js → channel-activity-BZKeZQH-.js} +1 -1
  28. package/dist/{channel-options-BS7BSU_5.js → channel-options-CQ-gER0J.js} +3 -3
  29. package/dist/{channel-selection-CFWQq1nS.js → channel-selection-BqwS1Rlq.js} +1 -1
  30. package/dist/{channel-web-C1qYz-HK.js → channel-web-LLzBxZrT.js} +17 -17
  31. package/dist/{channels-cli-CVNqp5q7.js → channels-cli-D4xUEYYC.js} +93 -93
  32. package/dist/{channels-status-issues-Erzzhl2e.js → channels-status-issues-Dz1_R7Ah.js} +1 -1
  33. package/dist/{chrome-CuBHInKC.js → chrome-CZQnp4VH.js} +8 -8
  34. package/dist/{chrome-DiktJpMU.js → chrome-CoRiYsNu.js} +4 -4
  35. package/dist/{clawbot-cli-C3bt-FEP.js → clawbot-cli-2Zlim_pH.js} +11 -11
  36. package/dist/cli/daemon-cli.js +1 -1
  37. package/dist/{cli-Jyqv2jm8.js → cli-CAID9zkL.js} +73 -73
  38. package/dist/{client-COy24r9W.js → client-G9E5HGM2.js} +2 -2
  39. package/dist/{command-registry-DCojicSG.js → command-registry-AHS8_9da.js} +11 -11
  40. package/dist/{command-secret-targets-CZjP-Bm5.js → command-secret-targets-DAu5nw-j.js} +4 -4
  41. package/dist/{commands-DDHiW-As.js → commands-CnX9I_l4.js} +1 -1
  42. package/dist/{commands-registry--ITOJ-cM.js → commands-registry-_r_JONI4.js} +3 -3
  43. package/dist/{completion-cli-DCTv7Ejv.js → completion-cli-BR1r9_h4.js} +13 -13
  44. package/dist/{config-cli-CSPSSP_R.js → config-cli-D0A8Awoo.js} +7 -7
  45. package/dist/{config-guard-CFauJm79.js → config-guard-BHy2f0hU.js} +3 -3
  46. package/dist/{config-validation-Bt3LfFJ0.js → config-validation-BkvDORAk.js} +3 -3
  47. package/dist/{configure-DAol2gT6.js → configure-XmOqwwy9.js} +17 -17
  48. package/dist/{control-ui-assets-d6VtDSeo.js → control-ui-assets-BYEy341x.js} +1 -1
  49. package/dist/{cron-cli-yS1ww1k2.js → cron-cli-QwZcnjJc.js} +11 -11
  50. package/dist/{daemon-cli-B-yZvTqZ.js → daemon-cli-kJfDhzr8.js} +15 -15
  51. package/dist/{daemon-install-CbPLNiIP.js → daemon-install-Chxlu9Kv.js} +4 -4
  52. package/dist/{daemon-install-helpers-CZDVO_MU.js → daemon-install-helpers-CJtiW2RE.js} +11 -11
  53. package/dist/{deliver-6zfT7daI.js → deliver-B4WWPQvt.js} +1 -1
  54. package/dist/{deliver-D-IQEJ52.js → deliver-CL2RW5UB.js} +7 -7
  55. package/dist/deliver-runtime-C08pF1_3.js +61 -0
  56. package/dist/{deliver-runtime-MBexxUuG.js → deliver-runtime-CeE1X9si.js} +3 -3
  57. package/dist/deps-send-discord.runtime-r80y9aXF.js +36 -0
  58. package/dist/deps-send-imessage.runtime-BmocBgPM.js +35 -0
  59. package/dist/deps-send-signal.runtime-ByJt6qz-.js +34 -0
  60. package/dist/deps-send-slack.runtime-C3UUEG9J.js +32 -0
  61. package/dist/{deps-send-telegram.runtime-Irv0ky5l.js → deps-send-telegram.runtime-BHaZAs2h.js} +16 -16
  62. package/dist/{deps-send-whatsapp.runtime-CrxkfP31.js → deps-send-whatsapp.runtime-COv_qoD2.js} +7 -7
  63. package/dist/deps-send-whatsapp.runtime-__ogpmJj.js +119 -0
  64. package/dist/{devices-cli-CPgutgUT.js → devices-cli-DlQGTogF.js} +8 -8
  65. package/dist/{diagnostic-B4w80e4D.js → diagnostic-CLEtu0MC.js} +1 -1
  66. package/dist/{diagnostics-m7hHHbuE.js → diagnostics--O6mo6KH.js} +5 -5
  67. package/dist/{directory-cli-DqObADBL.js → directory-cli-K9qIwxYa.js} +7 -7
  68. package/dist/{dns-cli-CKbwsWBv.js → dns-cli-qtX-WNMF.js} +5 -5
  69. package/dist/{dock-W3cGg46W.js → dock-DJJAj46v.js} +4 -4
  70. package/dist/{docs-cli-BpZtes_j.js → docs-cli--gGxz79Z.js} +4 -4
  71. package/dist/{doctor-completion--7PR_Vqz.js → doctor-completion-CZoEdMS-.js} +2 -2
  72. package/dist/{doctor-config-flow-BDF7TR6O.js → doctor-config-flow-C-h3yV4z.js} +15 -15
  73. package/dist/{enable--Q7yLTZm.js → enable-C8FNY18p.js} +1 -1
  74. package/dist/entry.js +2 -2
  75. package/dist/{exec-approvals-allowlist-B9bcJkGP.js → exec-approvals-allowlist-CtSREgYh.js} +1 -1
  76. package/dist/{exec-approvals-cli-homtziYt.js → exec-approvals-cli-BmM4RpVn.js} +16 -16
  77. package/dist/{exec-safe-bin-runtime-policy-DECo77U6.js → exec-safe-bin-runtime-policy-CfQeDABF.js} +2 -2
  78. package/dist/extensionAPI.js +6 -6
  79. package/dist/{fetch-lq0SDLLE.js → fetch-CtoC2wgs.js} +3 -3
  80. package/dist/{fetch-guard-CbtWqa1E.js → fetch-guard-Dvzi3MjK.js} +1 -1
  81. package/dist/{plugin-sdk/fs-safe-Dqmpk-Fr.js → fs-safe-DPYj7h8A.js} +6 -6
  82. package/dist/{gateway-cli-B3oqskb4.js → gateway-cli-BJHBChfI.js} +153 -153
  83. package/dist/{gateway-rpc-BBBN9ZJk.js → gateway-rpc-D0AmaBzR.js} +1 -1
  84. package/dist/{health-CjXrJkCb.js → health-XFKFZ7ZJ.js} +11 -11
  85. package/dist/{hooks-cli--aKmd8c9.js → hooks-cli-CXsZK8H9.js} +81 -81
  86. package/dist/{hooks-status-BlgSVDvN.js → hooks-status-DMFBAUq8.js} +1 -1
  87. package/dist/{image-VgwN31FZ.js → image-DKkuLtZ4.js} +1 -1
  88. package/dist/{image-BcYt63Jx.js → image-DSWTfuxv.js} +5 -5
  89. package/dist/{image-ops-LFsSCTyI.js → image-ops-B2uuLIGD.js} +10 -10
  90. package/dist/{image-runtime-CwMuTYvd.js → image-runtime-BMavqm9n.js} +3 -3
  91. package/dist/image-runtime-cza2NTiZ.js +55 -0
  92. package/dist/{inspect-CzsXBsew.js → inspect-4c1uL0x5.js} +4 -4
  93. package/dist/{install-safe-path-DqI19VEv.js → install-safe-path-3muwy3fu.js} +25 -25
  94. package/dist/{installs-P-pYAJm1.js → installs-BiQDtPF0.js} +9 -9
  95. package/dist/{ipv4-B95173MB.js → ipv4-sHllwvAI.js} +1 -1
  96. package/dist/{ir-C7He5vmn.js → ir-BukzlgSp.js} +8 -8
  97. package/dist/{issue-format-CbTfB8Hy.js → issue-format-DCcINW-9.js} +1 -1
  98. package/dist/{json-files-rR19q30D.js → json-files-CuJjdF_0.js} +8 -8
  99. package/dist/{lifecycle-core-ChKClWdw.js → lifecycle-core-CqFEhwHn.js} +5 -5
  100. package/dist/{login-qr-CX0rs3A6.js → login-qr-B8P_EAd-.js} +6 -6
  101. package/dist/{login-CjzRATwO.js → login-zoeewfBu.js} +3 -3
  102. package/dist/{logs-cli-DvHsw1WZ.js → logs-cli-D30BUN6y.js} +9 -9
  103. package/dist/{manager-BVfTfggO.js → manager-5OzUkYLf.js} +14 -14
  104. package/dist/{manager-runtime-BXJJSlzC.js → manager-runtime-BxXpVt3x.js} +9 -9
  105. package/dist/{manifest-registry-1ACGW3OR.js → manifest-registry-7kwtbCH-.js} +1 -1
  106. package/dist/{memory-cli-u8eyO3Ec.js → memory-cli-Dj8tyFtt.js} +12 -12
  107. package/dist/{model-D7hZpWTB.js → model-B8p-EsdJ.js} +2 -2
  108. package/dist/{model-catalog-Drh9Rois.js → model-catalog-BWuvEv1x.js} +3 -3
  109. package/dist/{model-picker-DK_vvKCV.js → model-picker-CLhaaagi.js} +4 -4
  110. package/dist/{models-CFXLX9IF.js → models-5VXwJBU2.js} +17 -17
  111. package/dist/{models-cli-PHQyKESa.js → models-cli-Br56IHfy.js} +78 -78
  112. package/dist/{models-config-DAastTau.js → models-config-poV-4Xlx.js} +6 -6
  113. package/dist/{net-CIh5ellr.js → net-CCnbGop3.js} +2 -2
  114. package/dist/{node-cli-o9qcU9GJ.js → node-cli-C8hvYquX.js} +33 -33
  115. package/dist/{node-command-policy-BeTSnoyk.js → node-command-policy-B_D5ucTj.js} +1 -1
  116. package/dist/{node-service-OVe0_CIs.js → node-service-Z0JprJda.js} +1 -1
  117. package/dist/{nodes-cli-kGx_Qa3c.js → nodes-cli-IIc8fTKT.js} +16 -16
  118. package/dist/{nodes-screen-BrMJzhot.js → nodes-screen-DFFmbaXE.js} +7 -7
  119. package/dist/{npm-pack-install-Dn3FiWXB.js → npm-pack-install-B887us7R.js} +18 -18
  120. package/dist/{npm-resolution-ky_uAlXE.js → npm-resolution-CKtyq4FH.js} +4 -4
  121. package/dist/{onboard-channels-oJCC_sJX.js → onboard-channels-_kVo3Apf.js} +21 -21
  122. package/dist/{onboard-custom-CRpsaM3g.js → onboard-custom-CZtjqrY7.js} +4 -4
  123. package/dist/{onboard-helpers-DwEZeaoe.js → onboard-helpers-BP429__H.js} +10 -10
  124. package/dist/{onboard-hooks-DyxckB2C.js → onboard-hooks-CTbjgLDl.js} +4 -4
  125. package/dist/{onboard-D1Qy64JK.js → onboard-lFwpCpC3.js} +6 -6
  126. package/dist/{onboard-remote-ZgpWNq9Z.js → onboard-remote-BlZB0AE9.js} +4 -4
  127. package/dist/{onboard-skills-DEijVfCg.js → onboard-skills-BT2YOXeP.js} +4 -4
  128. package/dist/{onboarding-Mxqy4O1E.js → onboarding-EEd_g8Zg.js} +14 -14
  129. package/dist/{onboarding.finalize-DiOMx6A5.js → onboarding.finalize-Cs1ukjFN.js} +90 -90
  130. package/dist/{onboarding.gateway-config-9wkBCzzO.js → onboarding.gateway-config-C6N8r5Is.js} +18 -18
  131. package/dist/{onboarding.secret-input-DRnoQSlI.js → onboarding.secret-input-BTK1IG-J.js} +1 -1
  132. package/dist/{openai-model-default-DqE4bNtd.js → openai-model-default-COzeuAI4.js} +2 -2
  133. package/dist/{outbound-CwzUo-rx.js → outbound-B7m9Vcd2.js} +3 -3
  134. package/dist/{outbound-attachment-Bedqixj2.js → outbound-attachment-fdEhzyl9.js} +2 -2
  135. package/dist/{pairing-cli-CsYP0at7.js → pairing-cli-NhoRKes6.js} +8 -8
  136. package/dist/{pairing-labels-CX4CtqRa.js → pairing-labels-CnTvFrUT.js} +1 -1
  137. package/dist/{pairing-store-BC4mnG9S.js → pairing-store-D0eOXyby.js} +3 -3
  138. package/dist/{plugin-sdk/path-alias-guards-gBhrAn14.js → path-alias-guards-vfYYQFIg.js} +1 -1
  139. package/dist/{path-safety-D7CjFQvf.js → path-safety-C95DzArw.js} +1 -1
  140. package/dist/{paths-D6mnO6Ni.js → paths-DfuVHiHu.js} +9 -9
  141. package/dist/{pi-embedded-BN8fghaF.js → pi-embedded-BR5y0dLa.js} +24 -24
  142. package/dist/{pi-embedded-helpers-A9VYPVCH.js → pi-embedded-helpers-CEHpGDRs.js} +3 -3
  143. package/dist/{pi-embedded-helpers-DtCOZSv-.js → pi-embedded-helpers-qCAK_a65.js} +6 -6
  144. package/dist/{pi-model-discovery-Cr1q2cJt.js → pi-model-discovery-CKUePiDc.js} +1 -1
  145. package/dist/{pi-model-discovery-runtime-BHmdAKBK.js → pi-model-discovery-runtime-CNLKih0w.js} +5 -5
  146. package/dist/{pi-tools.before-tool-call.runtime-duKHqrMc.js → pi-tools.before-tool-call.runtime-Bba7rXQq.js} +5 -5
  147. package/dist/{pi-tools.policy-D3RA94WF.js → pi-tools.policy-BwWnFLLV.js} +5 -5
  148. package/dist/{plugin-auto-enable-a3TK3OPT.js → plugin-auto-enable-DJkHW_LG.js} +3 -3
  149. package/dist/{plugin-registry-CFqqDqQV.js → plugin-registry-D3PnPE1D.js} +3 -3
  150. package/dist/plugin-sdk/discord.js +6 -6
  151. package/dist/plugin-sdk/index.js +50 -50
  152. package/dist/plugin-sdk/mattermost.js +3 -3
  153. package/dist/plugin-sdk/signal.js +2 -2
  154. package/dist/{plugins-Bc7YM9X-.js → plugins-BDTkSIi7.js} +2 -2
  155. package/dist/{plugins-cli-vQi8tFye.js → plugins-cli-BA_2daJe.js} +83 -83
  156. package/dist/{ports-DMeUt80n.js → ports-0jLyYbvQ.js} +2 -2
  157. package/dist/{ports-BzfeaNjw.js → ports-Be82TlEg.js} +1 -1
  158. package/dist/{program-Nott_VTb.js → program-D_xdLzmM.js} +81 -81
  159. package/dist/{prompt-select-styled-7mnlZgrQ.js → prompt-select-styled-BsheNEnh.js} +40 -40
  160. package/dist/{provider-auth-helpers-_77rN3Zc.js → provider-auth-helpers-B5kD4Lt6.js} +5 -5
  161. package/dist/{proxy-env-BiKHVg2h.js → proxy-env-CQTuxZoS.js} +1 -1
  162. package/dist/{push-apns-Ce1zzNYB.js → push-apns-BbenjEX4.js} +5 -5
  163. package/dist/{pw-ai-CM87tQwG.js → pw-ai-Du22SYoO.js} +1 -1
  164. package/dist/{pw-ai-CAhTwexx.js → pw-ai-wo5t_KO_.js} +18 -18
  165. package/dist/{plugin-sdk/qmd-manager-6bozlfFg.js → qmd-manager-BkSWV1Q1.js} +17 -11
  166. package/dist/{qr-cli-DzjBpGix.js → qr-cli-DSMYIp-D.js} +2 -2
  167. package/dist/{query-expansion-C0HUJbRn.js → query-expansion-DI9INxTg.js} +12 -12
  168. package/dist/{redact-snapshot-C0McNGqh.js → redact-snapshot-B2YFI3cO.js} +1 -1
  169. package/dist/{register.agent-DtjNdvUh.js → register.agent-Dk_5V5oA.js} +94 -94
  170. package/dist/register.configure-C8OFfGln.js +165 -0
  171. package/dist/{register.maintenance-DERKsSgi.js → register.maintenance-CluQOq8b.js} +95 -95
  172. package/dist/{register.message-DkYxt6gZ.js → register.message-BCTXT5yK.js} +74 -74
  173. package/dist/{register.onboard-BtfW83M0.js → register.onboard-C64oXnvq.js} +18 -18
  174. package/dist/{register.setup-Ba9gMkRk.js → register.setup-Dl3nk2Ui.js} +21 -21
  175. package/dist/{register.status-health-sessions-BILdpWJV.js → register.status-health-sessions-BHtbPeCO.js} +88 -88
  176. package/dist/{register.subclis-Dfm_Zu31.js → register.subclis-CDMFyaKR.js} +31 -31
  177. package/dist/{rpc-mau2U4RG.js → rpc-DA9IhLVG.js} +1 -1
  178. package/dist/{run-main-BF7ybLIy.js → run-main-BcA22Ipv.js} +93 -93
  179. package/dist/{runtime-Bcmv4Epp.js → runtime-BnbzNRr6.js} +3 -3
  180. package/dist/{runtime-config-collectors-Bsjz4isf.js → runtime-config-collectors-CXJdhHRo.js} +1 -1
  181. package/dist/{runtime-whatsapp-login.runtime-COUEKxmy.js → runtime-whatsapp-login.runtime-DRoK8G8H.js} +7 -7
  182. package/dist/{runtime-whatsapp-outbound.runtime-BaWH6-ns.js → runtime-whatsapp-outbound.runtime-C9OiwkWh.js} +15 -15
  183. package/dist/{sandbox-ixDhkfHu.js → sandbox-C3TbYIHd.js} +18 -18
  184. package/dist/{sandbox-cli-DOxm7fjR.js → sandbox-cli-BwK2slfh.js} +25 -25
  185. package/dist/{secrets-cli-DvXznMUb.js → secrets-cli-Beu2lcrf.js} +11 -11
  186. package/dist/{security-cli-3WOXvJR-.js → security-cli-CcpKH_lC.js} +42 -42
  187. package/dist/{send-BuBTLRMz.js → send-CLI3CiQv.js} +6 -6
  188. package/dist/{send-Do2preUU.js → send-DEs83M9V.js} +11 -11
  189. package/dist/{send-BPgrWmUX.js → send-EVcbFVqn.js} +5 -5
  190. package/dist/{send-BVyLW1cn.js → send-RDqyJwZx.js} +8 -8
  191. package/dist/{send-BpkluEZ5.js → send-z-sMjqvX.js} +4 -4
  192. package/dist/{server-DMAPnkgM.js → server-Bm-IxvZZ.js} +20 -20
  193. package/dist/{server-context-Dd8UynDU.js → server-context-Dw_4lGoI.js} +12 -12
  194. package/dist/{server-lifecycle-BEZ2jsQ6.js → server-lifecycle-DYgHYif9.js} +2 -2
  195. package/dist/{server-middleware-B_LyQkOL.js → server-middleware-BVAEuQs7.js} +1 -1
  196. package/dist/{server-node-events-dr5CaM3M.js → server-node-events-Q0cT2ifj.js} +74 -74
  197. package/dist/{service-B5T42CWZ.js → service-DSqxS6_D.js} +15 -15
  198. package/dist/{session-eXSdl5mb.js → session-D0jodcgT.js} +1 -1
  199. package/dist/{session-utils-D12gSo5W.js → session-utils-XY6JwRhT.js} +6 -6
  200. package/dist/{sessions-DgnXAQCc.js → sessions-BWptzMw0.js} +15 -15
  201. package/dist/{sessions-C16G7L5c.js → sessions-CMqv9JEu.js} +4 -4
  202. package/dist/{shared-BYny1RCF.js → shared-BbVxcRzb.js} +3 -3
  203. package/dist/{shared-By6_qr_R.js → shared-D5DTxBPH.js} +1 -1
  204. package/dist/{skill-commands-BcigmiOW.js → skill-commands-fU-Mejn9.js} +5 -5
  205. package/dist/{skill-scanner--QKHR8U0.js → skill-scanner-CvS725eQ.js} +6 -6
  206. package/dist/{skills-EwyaIyKC.js → skills-C85azDXm.js} +3 -3
  207. package/dist/{skills-cli-CqEjN0Yj.js → skills-cli-ZXx6BNar.js} +5 -5
  208. package/dist/{skills-install-CXVKvhIE.js → skills-install-KD6dzNoZ.js} +6 -6
  209. package/dist/{skills-status-Bv8Xt7Lc.js → skills-status-DkO7rxE8.js} +1 -1
  210. package/dist/{slash-commands.runtime-Bi99B_EP.js → slash-commands.runtime-CPlXJtuM.js} +11 -11
  211. package/dist/slash-dispatch.runtime-BOMEVFk0.js +114 -0
  212. package/dist/{slash-dispatch.runtime-sXaUYn4v.js → slash-dispatch.runtime-BcecLKcJ.js} +6 -6
  213. package/dist/{slash-skill-commands.runtime-DOXmvOtU.js → slash-skill-commands.runtime-Cnfq_5LN.js} +15 -15
  214. package/dist/{squidclaw-root-JXyRbQLJ.js → squidclaw-root-BQfLymzj.js} +8 -8
  215. package/dist/{status-Dnl-Um1D.js → status-cU9cJReo.js} +27 -27
  216. package/dist/{status.update-BGIm6we4.js → status.update-CiLU9RPF.js} +2 -2
  217. package/dist/{store-BTkIx401.js → store-BEIcnlgx.js} +5 -5
  218. package/dist/{subagent-registry-CQA6P2FO.js → subagent-registry-CIgFD2oi.js} +149 -149
  219. package/dist/{subagent-registry-runtime-232sNNT6.js → subagent-registry-runtime-Cq9I6PwW.js} +6 -6
  220. package/dist/subagent-registry-runtime-DGTjU9Lb.js +114 -0
  221. package/dist/{system-cli-CJAQxYHv.js → system-cli-i1FWZDjn.js} +9 -9
  222. package/dist/{system-run-command-BaSqmSwR.js → system-run-command-COqCNIBg.js} +1 -1
  223. package/dist/{systemd-B86VePXs.js → systemd-Cj2cX_ZP.js} +9 -9
  224. package/dist/{systemd-hints-BmFWZu_j.js → systemd-hints-46PqJfaq.js} +6 -6
  225. package/dist/{systemd-linger-w7fvBU-1.js → systemd-linger-6Jd9K5p2.js} +1 -1
  226. package/dist/{tables-CGh4CW_h.js → tables-CIpKClDV.js} +1 -1
  227. package/dist/{tailnet-DJq7Mi1o.js → tailnet-CZANZjq6.js} +1 -1
  228. package/dist/{plugin-sdk/target-errors-jlLHihbX.js → target-errors-CRQlPF1u.js} +2 -2
  229. package/dist/{tool-images-D6mmxuWS.js → tool-images-CyzWvDUu.js} +1 -1
  230. package/dist/{tui-BbcmzKaA.js → tui-CC_AbfZr.js} +6 -6
  231. package/dist/{tui-cli-Dv3jSm3x.js → tui-cli-DiJ7zKUD.js} +32 -32
  232. package/dist/{update-BhRrb6BI.js → update-1JhjCqjy.js} +3 -3
  233. package/dist/{update-cli-Oe0fP8x9.js → update-cli-DM_dUip_.js} +104 -104
  234. package/dist/{update-runner-DdA6xBa9.js → update-runner-BBJZmfZ4.js} +16 -16
  235. package/dist/{web-Chw1dtKA.js → web-CWxO_flK.js} +6 -6
  236. package/dist/web-CZhZC1EA.js +118 -0
  237. package/dist/{webhooks-cli-CJLug1QH.js → webhooks-cli-CzDd8ikc.js} +6 -6
  238. package/dist/{whatsapp-actions-_ca5OtHq.js → whatsapp-actions-MR_bBjXO.js} +17 -17
  239. package/dist/{with-timeout-CFfRudNc.js → with-timeout-BZ_Teugb.js} +3 -3
  240. package/dist/{workspace-BbO-M3Jv.js → workspace-D5vNjk5G.js} +1 -1
  241. package/dist/{workspace-dirs-D8D-Ghcl.js → workspace-dirs-CjMIsQti.js} +1 -1
  242. package/dist/{wsl-CsGe5QCP.js → wsl-CvQfS6aU.js} +2 -2
  243. package/package.json +1 -1
  244. package/dist/deliver-runtime-zICm26tE.js +0 -61
  245. package/dist/deps-send-discord.runtime-C_9HZQko.js +0 -36
  246. package/dist/deps-send-imessage.runtime-BMhGsWds.js +0 -35
  247. package/dist/deps-send-signal.runtime-BGhjYiu6.js +0 -34
  248. package/dist/deps-send-slack.runtime-DjBCu-RX.js +0 -32
  249. package/dist/deps-send-whatsapp.runtime-CU257URT.js +0 -119
  250. package/dist/fs-safe-BPQ-per2.js +0 -352
  251. package/dist/image-runtime-Cxoxcx04.js +0 -55
  252. package/dist/path-alias-guards-DeOVetT7.js +0 -43
  253. package/dist/plugin-sdk/accounts-CUEuUR3C.js +0 -46
  254. package/dist/plugin-sdk/accounts-D0W2pELU.js +0 -288
  255. package/dist/plugin-sdk/accounts-ucj0odJq.js +0 -35
  256. package/dist/plugin-sdk/active-listener-BO7eBEG_.js +0 -50
  257. package/dist/plugin-sdk/api-key-rotation-C4C_mDsg.js +0 -181
  258. package/dist/plugin-sdk/audio-preflight-Cqdo0JKm.js +0 -69
  259. package/dist/plugin-sdk/audio-transcription-runner-DnEooIyE.js +0 -2176
  260. package/dist/plugin-sdk/audit-membership-runtime-B9b-zRwg.js +0 -58
  261. package/dist/plugin-sdk/channel-activity-BMWLw4o2.js +0 -94
  262. package/dist/plugin-sdk/channel-web-B8bj7MB9.js +0 -2256
  263. package/dist/plugin-sdk/chrome-CV-q0Lmc.js +0 -2415
  264. package/dist/plugin-sdk/commands-registry-e7YoqrbP.js +0 -1125
  265. package/dist/plugin-sdk/config-B2B64aX0.js +0 -17911
  266. package/dist/plugin-sdk/deliver-BkyBtcLR.js +0 -1694
  267. package/dist/plugin-sdk/deliver-runtime-O4lwAWMw.js +0 -32
  268. package/dist/plugin-sdk/deps-send-discord.runtime-BAeeBldY.js +0 -23
  269. package/dist/plugin-sdk/deps-send-imessage.runtime-EL-CfikZ.js +0 -22
  270. package/dist/plugin-sdk/deps-send-signal.runtime-BeemHeUu.js +0 -21
  271. package/dist/plugin-sdk/deps-send-slack.runtime-DTttkC0N.js +0 -19
  272. package/dist/plugin-sdk/deps-send-telegram.runtime-Dsf9Cnka.js +0 -24
  273. package/dist/plugin-sdk/deps-send-whatsapp.runtime-DvdFo6lj.js +0 -57
  274. package/dist/plugin-sdk/diagnostic-DPRVoKTk.js +0 -319
  275. package/dist/plugin-sdk/errors-B8oJXuCF.js +0 -54
  276. package/dist/plugin-sdk/fetch-guard-F0Fnqisy.js +0 -156
  277. package/dist/plugin-sdk/image-cBW8L8pp.js +0 -2310
  278. package/dist/plugin-sdk/image-ops-BP8ix1GC.js +0 -584
  279. package/dist/plugin-sdk/image-runtime-9xkgSlNz.js +0 -25
  280. package/dist/plugin-sdk/ir-DWEc6zOp.js +0 -1296
  281. package/dist/plugin-sdk/local-roots-BIPT8uAO.js +0 -186
  282. package/dist/plugin-sdk/logger-DDdrdbDu.js +0 -1163
  283. package/dist/plugin-sdk/login-BMTiGutN.js +0 -57
  284. package/dist/plugin-sdk/login-qr-BFxqYUkc.js +0 -320
  285. package/dist/plugin-sdk/manager-BD-aYaZ8.js +0 -3917
  286. package/dist/plugin-sdk/manager-runtime-C5bRwUlz.js +0 -15
  287. package/dist/plugin-sdk/outbound-Bm07xvO6.js +0 -212
  288. package/dist/plugin-sdk/outbound-attachment-DLsaxDsc.js +0 -19
  289. package/dist/plugin-sdk/paths-C6W4VHoa.js +0 -166
  290. package/dist/plugin-sdk/pi-embedded-helpers-BExwPvTh.js +0 -9627
  291. package/dist/plugin-sdk/pi-model-discovery-DdctvBeX.js +0 -134
  292. package/dist/plugin-sdk/pi-model-discovery-runtime-DrtpLJjk.js +0 -8
  293. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-rgTz3FBl.js +0 -354
  294. package/dist/plugin-sdk/plugins-BN64HHZA.js +0 -864
  295. package/dist/plugin-sdk/proxy-fetch-ZPEvp58f.js +0 -38
  296. package/dist/plugin-sdk/pw-ai-DBm3RdBK.js +0 -1938
  297. package/dist/plugin-sdk/query-expansion-eeVz_aEm.js +0 -1011
  298. package/dist/plugin-sdk/redact-BoNEjbpF.js +0 -319
  299. package/dist/plugin-sdk/reply-Bp49JV3f.js +0 -98828
  300. package/dist/plugin-sdk/resolve-outbound-target-DXfjGlZQ.js +0 -40
  301. package/dist/plugin-sdk/run-with-concurrency-5DMu9szx.js +0 -1994
  302. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-D2hkJBa-.js +0 -10
  303. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-C06I4adi.js +0 -19
  304. package/dist/plugin-sdk/send-B9xnwtQ-.js +0 -540
  305. package/dist/plugin-sdk/send-BxySs-Cu.js +0 -2587
  306. package/dist/plugin-sdk/send-D9THKp_J.js +0 -414
  307. package/dist/plugin-sdk/send-DCuaaP2w.js +0 -503
  308. package/dist/plugin-sdk/send-Dm_-_xje.js +0 -3135
  309. package/dist/plugin-sdk/session-DDzIZHxt.js +0 -169
  310. package/dist/plugin-sdk/skill-commands-DRvqtuFC.js +0 -342
  311. package/dist/plugin-sdk/skills-BWwlfbVj.js +0 -1428
  312. package/dist/plugin-sdk/slash-commands.runtime-BzYsaTST.js +0 -13
  313. package/dist/plugin-sdk/slash-dispatch.runtime-Cty8EAD9.js +0 -52
  314. package/dist/plugin-sdk/slash-skill-commands.runtime-sg98L8BK.js +0 -16
  315. package/dist/plugin-sdk/ssrf-DOBwjFow.js +0 -202
  316. package/dist/plugin-sdk/store-BKDR_-Qk.js +0 -81
  317. package/dist/plugin-sdk/subagent-registry-runtime-Dz50ieim.js +0 -52
  318. package/dist/plugin-sdk/tables-GIj79us5.js +0 -55
  319. package/dist/plugin-sdk/thinking-BgdUnMZ2.js +0 -1206
  320. package/dist/plugin-sdk/tokens-CTIYTLWu.js +0 -52
  321. package/dist/plugin-sdk/tool-images-GSlvf6RP.js +0 -274
  322. package/dist/plugin-sdk/web-BK9mCTAc.js +0 -56
  323. package/dist/plugin-sdk/whatsapp-actions-DQpK_5Ds.js +0 -80
  324. package/dist/qmd-manager-BsL_hcOB.js +0 -1454
  325. package/dist/register.configure-BkwbM-hb.js +0 -165
  326. package/dist/slash-dispatch.runtime-reuPLnse.js +0 -114
  327. package/dist/subagent-registry-runtime-CqgIWcSl.js +0 -114
  328. package/dist/target-errors-C_rnMuJ2.js +0 -195
  329. package/dist/web-w04Gvwqi.js +0 -118
@@ -1,134 +0,0 @@
1
- import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { Er as ensureAuthProfileStore, jn as normalizeProviderId } from "./config-B2B64aX0.js";
3
- import fs from "node:fs";
4
- import path from "node:path";
5
- import * as PiCodingAgent from "@mariozechner/pi-coding-agent";
6
-
7
- //#region src/agents/pi-auth-credentials.ts
8
- function convertAuthProfileCredentialToPi(cred) {
9
- if (cred.type === "api_key") {
10
- const key = typeof cred.key === "string" ? cred.key.trim() : "";
11
- if (!key) return null;
12
- return {
13
- type: "api_key",
14
- key
15
- };
16
- }
17
- if (cred.type === "token") {
18
- const token = typeof cred.token === "string" ? cred.token.trim() : "";
19
- if (!token) return null;
20
- if (typeof cred.expires === "number" && Number.isFinite(cred.expires) && Date.now() >= cred.expires) return null;
21
- return {
22
- type: "api_key",
23
- key: token
24
- };
25
- }
26
- if (cred.type === "oauth") {
27
- const access = typeof cred.access === "string" ? cred.access.trim() : "";
28
- const refresh = typeof cred.refresh === "string" ? cred.refresh.trim() : "";
29
- if (!access || !refresh || !Number.isFinite(cred.expires) || cred.expires <= 0) return null;
30
- return {
31
- type: "oauth",
32
- access,
33
- refresh,
34
- expires: cred.expires
35
- };
36
- }
37
- return null;
38
- }
39
- function resolvePiCredentialMapFromStore(store) {
40
- const credentials = {};
41
- for (const credential of Object.values(store.profiles)) {
42
- const provider = normalizeProviderId(String(credential.provider ?? "")).trim();
43
- if (!provider || credentials[provider]) continue;
44
- const converted = convertAuthProfileCredentialToPi(credential);
45
- if (converted) credentials[provider] = converted;
46
- }
47
- return credentials;
48
- }
49
-
50
- //#endregion
51
- //#region src/agents/pi-model-discovery.ts
52
- var pi_model_discovery_exports = /* @__PURE__ */ __exportAll({
53
- AuthStorage: () => PiAuthStorageClass,
54
- ModelRegistry: () => PiModelRegistryClass,
55
- discoverAuthStorage: () => discoverAuthStorage,
56
- discoverModels: () => discoverModels
57
- });
58
- const PiAuthStorageClass = PiCodingAgent.AuthStorage;
59
- const PiModelRegistryClass = PiCodingAgent.ModelRegistry;
60
- function createInMemoryAuthStorageBackend(initialData) {
61
- let snapshot = JSON.stringify(initialData, null, 2);
62
- return { withLock(update) {
63
- const { result, next } = update(snapshot);
64
- if (typeof next === "string") snapshot = next;
65
- return result;
66
- } };
67
- }
68
- function isRecord(value) {
69
- return typeof value === "object" && value !== null && !Array.isArray(value);
70
- }
71
- function scrubLegacyStaticAuthJsonEntries(pathname) {
72
- if (process.env.SQUIDCLAW_AUTH_STORE_READONLY === "1") return;
73
- if (!fs.existsSync(pathname)) return;
74
- let parsed;
75
- try {
76
- parsed = JSON.parse(fs.readFileSync(pathname, "utf8"));
77
- } catch {
78
- return;
79
- }
80
- if (!isRecord(parsed)) return;
81
- let changed = false;
82
- for (const [provider, value] of Object.entries(parsed)) {
83
- if (!isRecord(value)) continue;
84
- if (value.type !== "api_key") continue;
85
- delete parsed[provider];
86
- changed = true;
87
- }
88
- if (!changed) return;
89
- if (Object.keys(parsed).length === 0) {
90
- fs.rmSync(pathname, { force: true });
91
- return;
92
- }
93
- fs.writeFileSync(pathname, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
94
- fs.chmodSync(pathname, 384);
95
- }
96
- function createAuthStorage(AuthStorageLike, path, creds) {
97
- const withInMemory = AuthStorageLike;
98
- if (typeof withInMemory.inMemory === "function") return withInMemory.inMemory(creds);
99
- const withFromStorage = AuthStorageLike;
100
- if (typeof withFromStorage.fromStorage === "function") {
101
- const backendCtor = PiCodingAgent.InMemoryAuthStorageBackend;
102
- const backend = typeof backendCtor === "function" ? new backendCtor() : createInMemoryAuthStorageBackend(creds);
103
- backend.withLock(() => ({
104
- result: void 0,
105
- next: JSON.stringify(creds, null, 2)
106
- }));
107
- return withFromStorage.fromStorage(backend);
108
- }
109
- const withFactory = AuthStorageLike;
110
- const withRuntimeOverride = typeof withFactory.create === "function" ? withFactory.create(path) : new AuthStorageLike(path);
111
- if (typeof withRuntimeOverride.setRuntimeApiKey === "function") for (const [provider, credential] of Object.entries(creds)) {
112
- if (credential.type === "api_key") {
113
- withRuntimeOverride.setRuntimeApiKey(provider, credential.key);
114
- continue;
115
- }
116
- withRuntimeOverride.setRuntimeApiKey(provider, credential.access);
117
- }
118
- return withRuntimeOverride;
119
- }
120
- function resolvePiCredentials(agentDir) {
121
- return resolvePiCredentialMapFromStore(ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false }));
122
- }
123
- function discoverAuthStorage(agentDir) {
124
- const credentials = resolvePiCredentials(agentDir);
125
- const authPath = path.join(agentDir, "auth.json");
126
- scrubLegacyStaticAuthJsonEntries(authPath);
127
- return createAuthStorage(PiAuthStorageClass, authPath, credentials);
128
- }
129
- function discoverModels(authStorage, agentDir) {
130
- return new PiModelRegistryClass(authStorage, path.join(agentDir, "models.json"));
131
- }
132
-
133
- //#endregion
134
- export { discoverModels as n, pi_model_discovery_exports as r, discoverAuthStorage as t };
@@ -1,8 +0,0 @@
1
- import "./run-with-concurrency-5DMu9szx.js";
2
- import "./paths-8xF5kDne.js";
3
- import "./github-copilot-token-Dy-0-Kh3.js";
4
- import "./config-B2B64aX0.js";
5
- import "./logger-DDdrdbDu.js";
6
- import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DdctvBeX.js";
7
-
8
- export { discoverAuthStorage, discoverModels };
@@ -1,354 +0,0 @@
1
- import "./run-with-concurrency-5DMu9szx.js";
2
- import "./paths-8xF5kDne.js";
3
- import "./github-copilot-token-Dy-0-Kh3.js";
4
- import "./config-B2B64aX0.js";
5
- import { P as isPlainObject, a as createSubsystemLogger } from "./logger-DDdrdbDu.js";
6
- import { p as getDiagnosticSessionState, s as logToolLoopAction } from "./diagnostic-DPRVoKTk.js";
7
- import { createHash } from "node:crypto";
8
-
9
- //#region src/agents/tool-loop-detection.ts
10
- const log = createSubsystemLogger("agents/loop-detection");
11
- const TOOL_CALL_HISTORY_SIZE = 30;
12
- const WARNING_THRESHOLD = 10;
13
- const CRITICAL_THRESHOLD = 20;
14
- const GLOBAL_CIRCUIT_BREAKER_THRESHOLD = 30;
15
- const DEFAULT_LOOP_DETECTION_CONFIG = {
16
- enabled: false,
17
- historySize: TOOL_CALL_HISTORY_SIZE,
18
- warningThreshold: WARNING_THRESHOLD,
19
- criticalThreshold: CRITICAL_THRESHOLD,
20
- globalCircuitBreakerThreshold: GLOBAL_CIRCUIT_BREAKER_THRESHOLD,
21
- detectors: {
22
- genericRepeat: true,
23
- knownPollNoProgress: true,
24
- pingPong: true
25
- }
26
- };
27
- function asPositiveInt(value, fallback) {
28
- if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) return fallback;
29
- return value;
30
- }
31
- function resolveLoopDetectionConfig(config) {
32
- let warningThreshold = asPositiveInt(config?.warningThreshold, DEFAULT_LOOP_DETECTION_CONFIG.warningThreshold);
33
- let criticalThreshold = asPositiveInt(config?.criticalThreshold, DEFAULT_LOOP_DETECTION_CONFIG.criticalThreshold);
34
- let globalCircuitBreakerThreshold = asPositiveInt(config?.globalCircuitBreakerThreshold, DEFAULT_LOOP_DETECTION_CONFIG.globalCircuitBreakerThreshold);
35
- if (criticalThreshold <= warningThreshold) criticalThreshold = warningThreshold + 1;
36
- if (globalCircuitBreakerThreshold <= criticalThreshold) globalCircuitBreakerThreshold = criticalThreshold + 1;
37
- return {
38
- enabled: config?.enabled ?? DEFAULT_LOOP_DETECTION_CONFIG.enabled,
39
- historySize: asPositiveInt(config?.historySize, DEFAULT_LOOP_DETECTION_CONFIG.historySize),
40
- warningThreshold,
41
- criticalThreshold,
42
- globalCircuitBreakerThreshold,
43
- detectors: {
44
- genericRepeat: config?.detectors?.genericRepeat ?? DEFAULT_LOOP_DETECTION_CONFIG.detectors.genericRepeat,
45
- knownPollNoProgress: config?.detectors?.knownPollNoProgress ?? DEFAULT_LOOP_DETECTION_CONFIG.detectors.knownPollNoProgress,
46
- pingPong: config?.detectors?.pingPong ?? DEFAULT_LOOP_DETECTION_CONFIG.detectors.pingPong
47
- }
48
- };
49
- }
50
- /**
51
- * Hash a tool call for pattern matching.
52
- * Uses tool name + deterministic JSON serialization digest of params.
53
- */
54
- function hashToolCall(toolName, params) {
55
- return `${toolName}:${digestStable(params)}`;
56
- }
57
- function stableStringify(value) {
58
- if (value === null || typeof value !== "object") return JSON.stringify(value);
59
- if (Array.isArray(value)) return `[${value.map(stableStringify).join(",")}]`;
60
- const obj = value;
61
- return `{${Object.keys(obj).toSorted().map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(",")}}`;
62
- }
63
- function digestStable(value) {
64
- const serialized = stableStringifyFallback(value);
65
- return createHash("sha256").update(serialized).digest("hex");
66
- }
67
- function stableStringifyFallback(value) {
68
- try {
69
- return stableStringify(value);
70
- } catch {
71
- if (value === null || value === void 0) return `${value}`;
72
- if (typeof value === "string") return value;
73
- if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") return `${value}`;
74
- if (value instanceof Error) return `${value.name}:${value.message}`;
75
- return Object.prototype.toString.call(value);
76
- }
77
- }
78
- function isKnownPollToolCall(toolName, params) {
79
- if (toolName === "command_status") return true;
80
- if (toolName !== "process" || !isPlainObject(params)) return false;
81
- const action = params.action;
82
- return action === "poll" || action === "log";
83
- }
84
- function extractTextContent(result) {
85
- if (!isPlainObject(result) || !Array.isArray(result.content)) return "";
86
- return result.content.filter((entry) => isPlainObject(entry) && typeof entry.type === "string" && typeof entry.text === "string").map((entry) => entry.text).join("\n").trim();
87
- }
88
- function formatErrorForHash(error) {
89
- if (error instanceof Error) return error.message || error.name;
90
- if (typeof error === "string") return error;
91
- if (typeof error === "number" || typeof error === "boolean" || typeof error === "bigint") return `${error}`;
92
- return stableStringify(error);
93
- }
94
- function hashToolOutcome(toolName, params, result, error) {
95
- if (error !== void 0) return `error:${digestStable(formatErrorForHash(error))}`;
96
- if (!isPlainObject(result)) return result === void 0 ? void 0 : digestStable(result);
97
- const details = isPlainObject(result.details) ? result.details : {};
98
- const text = extractTextContent(result);
99
- if (isKnownPollToolCall(toolName, params) && toolName === "process" && isPlainObject(params)) {
100
- const action = params.action;
101
- if (action === "poll") return digestStable({
102
- action,
103
- status: details.status,
104
- exitCode: details.exitCode ?? null,
105
- exitSignal: details.exitSignal ?? null,
106
- aggregated: details.aggregated ?? null,
107
- text
108
- });
109
- if (action === "log") return digestStable({
110
- action,
111
- status: details.status,
112
- totalLines: details.totalLines ?? null,
113
- totalChars: details.totalChars ?? null,
114
- truncated: details.truncated ?? null,
115
- exitCode: details.exitCode ?? null,
116
- exitSignal: details.exitSignal ?? null,
117
- text
118
- });
119
- }
120
- return digestStable({
121
- details,
122
- text
123
- });
124
- }
125
- function getNoProgressStreak(history, toolName, argsHash) {
126
- let streak = 0;
127
- let latestResultHash;
128
- for (let i = history.length - 1; i >= 0; i -= 1) {
129
- const record = history[i];
130
- if (!record || record.toolName !== toolName || record.argsHash !== argsHash) continue;
131
- if (typeof record.resultHash !== "string" || !record.resultHash) continue;
132
- if (!latestResultHash) {
133
- latestResultHash = record.resultHash;
134
- streak = 1;
135
- continue;
136
- }
137
- if (record.resultHash !== latestResultHash) break;
138
- streak += 1;
139
- }
140
- return {
141
- count: streak,
142
- latestResultHash
143
- };
144
- }
145
- function getPingPongStreak(history, currentSignature) {
146
- const last = history.at(-1);
147
- if (!last) return {
148
- count: 0,
149
- noProgressEvidence: false
150
- };
151
- let otherSignature;
152
- let otherToolName;
153
- for (let i = history.length - 2; i >= 0; i -= 1) {
154
- const call = history[i];
155
- if (!call) continue;
156
- if (call.argsHash !== last.argsHash) {
157
- otherSignature = call.argsHash;
158
- otherToolName = call.toolName;
159
- break;
160
- }
161
- }
162
- if (!otherSignature || !otherToolName) return {
163
- count: 0,
164
- noProgressEvidence: false
165
- };
166
- let alternatingTailCount = 0;
167
- for (let i = history.length - 1; i >= 0; i -= 1) {
168
- const call = history[i];
169
- if (!call) continue;
170
- const expected = alternatingTailCount % 2 === 0 ? last.argsHash : otherSignature;
171
- if (call.argsHash !== expected) break;
172
- alternatingTailCount += 1;
173
- }
174
- if (alternatingTailCount < 2) return {
175
- count: 0,
176
- noProgressEvidence: false
177
- };
178
- if (currentSignature !== otherSignature) return {
179
- count: 0,
180
- noProgressEvidence: false
181
- };
182
- const tailStart = Math.max(0, history.length - alternatingTailCount);
183
- let firstHashA;
184
- let firstHashB;
185
- let noProgressEvidence = true;
186
- for (let i = tailStart; i < history.length; i += 1) {
187
- const call = history[i];
188
- if (!call) continue;
189
- if (!call.resultHash) {
190
- noProgressEvidence = false;
191
- break;
192
- }
193
- if (call.argsHash === last.argsHash) {
194
- if (!firstHashA) firstHashA = call.resultHash;
195
- else if (firstHashA !== call.resultHash) {
196
- noProgressEvidence = false;
197
- break;
198
- }
199
- continue;
200
- }
201
- if (call.argsHash === otherSignature) {
202
- if (!firstHashB) firstHashB = call.resultHash;
203
- else if (firstHashB !== call.resultHash) {
204
- noProgressEvidence = false;
205
- break;
206
- }
207
- continue;
208
- }
209
- noProgressEvidence = false;
210
- break;
211
- }
212
- if (!firstHashA || !firstHashB) noProgressEvidence = false;
213
- return {
214
- count: alternatingTailCount + 1,
215
- pairedToolName: last.toolName,
216
- pairedSignature: last.argsHash,
217
- noProgressEvidence
218
- };
219
- }
220
- function canonicalPairKey(signatureA, signatureB) {
221
- return [signatureA, signatureB].toSorted().join("|");
222
- }
223
- /**
224
- * Detect if an agent is stuck in a repetitive tool call loop.
225
- * Checks if the same tool+params combination has been called excessively.
226
- */
227
- function detectToolCallLoop(state, toolName, params, config) {
228
- const resolvedConfig = resolveLoopDetectionConfig(config);
229
- if (!resolvedConfig.enabled) return { stuck: false };
230
- const history = state.toolCallHistory ?? [];
231
- const currentHash = hashToolCall(toolName, params);
232
- const noProgress = getNoProgressStreak(history, toolName, currentHash);
233
- const noProgressStreak = noProgress.count;
234
- const knownPollTool = isKnownPollToolCall(toolName, params);
235
- const pingPong = getPingPongStreak(history, currentHash);
236
- if (noProgressStreak >= resolvedConfig.globalCircuitBreakerThreshold) {
237
- log.error(`Global circuit breaker triggered: ${toolName} repeated ${noProgressStreak} times with no progress`);
238
- return {
239
- stuck: true,
240
- level: "critical",
241
- detector: "global_circuit_breaker",
242
- count: noProgressStreak,
243
- message: `CRITICAL: ${toolName} has repeated identical no-progress outcomes ${noProgressStreak} times. Session execution blocked by global circuit breaker to prevent runaway loops.`,
244
- warningKey: `global:${toolName}:${currentHash}:${noProgress.latestResultHash ?? "none"}`
245
- };
246
- }
247
- if (knownPollTool && resolvedConfig.detectors.knownPollNoProgress && noProgressStreak >= resolvedConfig.criticalThreshold) {
248
- log.error(`Critical polling loop detected: ${toolName} repeated ${noProgressStreak} times`);
249
- return {
250
- stuck: true,
251
- level: "critical",
252
- detector: "known_poll_no_progress",
253
- count: noProgressStreak,
254
- message: `CRITICAL: Called ${toolName} with identical arguments and no progress ${noProgressStreak} times. This appears to be a stuck polling loop. Session execution blocked to prevent resource waste.`,
255
- warningKey: `poll:${toolName}:${currentHash}:${noProgress.latestResultHash ?? "none"}`
256
- };
257
- }
258
- if (knownPollTool && resolvedConfig.detectors.knownPollNoProgress && noProgressStreak >= resolvedConfig.warningThreshold) {
259
- log.warn(`Polling loop warning: ${toolName} repeated ${noProgressStreak} times`);
260
- return {
261
- stuck: true,
262
- level: "warning",
263
- detector: "known_poll_no_progress",
264
- count: noProgressStreak,
265
- message: `WARNING: You have called ${toolName} ${noProgressStreak} times with identical arguments and no progress. Stop polling and either (1) increase wait time between checks, or (2) report the task as failed if the process is stuck.`,
266
- warningKey: `poll:${toolName}:${currentHash}:${noProgress.latestResultHash ?? "none"}`
267
- };
268
- }
269
- const pingPongWarningKey = pingPong.pairedSignature ? `pingpong:${canonicalPairKey(currentHash, pingPong.pairedSignature)}` : `pingpong:${toolName}:${currentHash}`;
270
- if (resolvedConfig.detectors.pingPong && pingPong.count >= resolvedConfig.criticalThreshold && pingPong.noProgressEvidence) {
271
- log.error(`Critical ping-pong loop detected: alternating calls count=${pingPong.count} currentTool=${toolName}`);
272
- return {
273
- stuck: true,
274
- level: "critical",
275
- detector: "ping_pong",
276
- count: pingPong.count,
277
- message: `CRITICAL: You are alternating between repeated tool-call patterns (${pingPong.count} consecutive calls) with no progress. This appears to be a stuck ping-pong loop. Session execution blocked to prevent resource waste.`,
278
- pairedToolName: pingPong.pairedToolName,
279
- warningKey: pingPongWarningKey
280
- };
281
- }
282
- if (resolvedConfig.detectors.pingPong && pingPong.count >= resolvedConfig.warningThreshold) {
283
- log.warn(`Ping-pong loop warning: alternating calls count=${pingPong.count} currentTool=${toolName}`);
284
- return {
285
- stuck: true,
286
- level: "warning",
287
- detector: "ping_pong",
288
- count: pingPong.count,
289
- message: `WARNING: You are alternating between repeated tool-call patterns (${pingPong.count} consecutive calls). This looks like a ping-pong loop; stop retrying and report the task as failed.`,
290
- pairedToolName: pingPong.pairedToolName,
291
- warningKey: pingPongWarningKey
292
- };
293
- }
294
- const recentCount = history.filter((h) => h.toolName === toolName && h.argsHash === currentHash).length;
295
- if (!knownPollTool && resolvedConfig.detectors.genericRepeat && recentCount >= resolvedConfig.warningThreshold) {
296
- log.warn(`Loop warning: ${toolName} called ${recentCount} times with identical arguments`);
297
- return {
298
- stuck: true,
299
- level: "warning",
300
- detector: "generic_repeat",
301
- count: recentCount,
302
- message: `WARNING: You have called ${toolName} ${recentCount} times with identical arguments. If this is not making progress, stop retrying and report the task as failed.`,
303
- warningKey: `generic:${toolName}:${currentHash}`
304
- };
305
- }
306
- return { stuck: false };
307
- }
308
- /**
309
- * Record a tool call in the session's history for loop detection.
310
- * Maintains sliding window of last N calls.
311
- */
312
- function recordToolCall(state, toolName, params, toolCallId, config) {
313
- const resolvedConfig = resolveLoopDetectionConfig(config);
314
- if (!state.toolCallHistory) state.toolCallHistory = [];
315
- state.toolCallHistory.push({
316
- toolName,
317
- argsHash: hashToolCall(toolName, params),
318
- toolCallId,
319
- timestamp: Date.now()
320
- });
321
- if (state.toolCallHistory.length > resolvedConfig.historySize) state.toolCallHistory.shift();
322
- }
323
- /**
324
- * Record a completed tool call outcome so loop detection can identify no-progress repeats.
325
- */
326
- function recordToolCallOutcome(state, params) {
327
- const resolvedConfig = resolveLoopDetectionConfig(params.config);
328
- const resultHash = hashToolOutcome(params.toolName, params.toolParams, params.result, params.error);
329
- if (!resultHash) return;
330
- if (!state.toolCallHistory) state.toolCallHistory = [];
331
- const argsHash = hashToolCall(params.toolName, params.toolParams);
332
- let matched = false;
333
- for (let i = state.toolCallHistory.length - 1; i >= 0; i -= 1) {
334
- const call = state.toolCallHistory[i];
335
- if (!call) continue;
336
- if (params.toolCallId && call.toolCallId !== params.toolCallId) continue;
337
- if (call.toolName !== params.toolName || call.argsHash !== argsHash) continue;
338
- if (call.resultHash !== void 0) continue;
339
- call.resultHash = resultHash;
340
- matched = true;
341
- break;
342
- }
343
- if (!matched) state.toolCallHistory.push({
344
- toolName: params.toolName,
345
- argsHash,
346
- toolCallId: params.toolCallId,
347
- resultHash,
348
- timestamp: Date.now()
349
- });
350
- if (state.toolCallHistory.length > resolvedConfig.historySize) state.toolCallHistory.splice(0, state.toolCallHistory.length - resolvedConfig.historySize);
351
- }
352
-
353
- //#endregion
354
- export { detectToolCallLoop, getDiagnosticSessionState, logToolLoopAction, recordToolCall, recordToolCallOutcome };