squidclaw 3.3.3 → 3.3.6

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 (422) 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-BC9OAf3z.js → acp-cli-BDUN_3hr.js} +8 -8
  5. package/dist/{agent-scope-CfsErfyG.js → agent-scope-DipdnGE4.js} +17 -17
  6. package/dist/{agents-CCBxQ9aq.js → agents-Dp7Z49KS.js} +14 -14
  7. package/dist/{agents.config-BLyNI6Wo.js → agents.config-BiYGJTBo.js} +2 -2
  8. package/dist/{api-key-rotation-D8zY84vq.js → api-key-rotation-ijs2sHFd.js} +1 -1
  9. package/dist/{audio-preflight-D2V9uUvO.js → audio-preflight-BdE85axf.js} +34 -34
  10. package/dist/{audio-transcription-runner-Caxzri8M.js → audio-transcription-runner-t9ywC3Mg.js} +23 -23
  11. package/dist/{audit-C-YgUaul.js → audit-DLLdL6Gd.js} +29 -29
  12. package/dist/{auth-BLnmRBQV.js → auth-CgVB2OQr.js} +1 -1
  13. package/dist/{auth-choice-gdt59E8k.js → auth-choice-BJBbpLg9.js} +13 -13
  14. package/dist/{auth-choice-BtLMBliK.js → auth-choice-DFMaBDZ1.js} +11 -11
  15. package/dist/{auth-choice.apply-helpers-CjGIIfKh.js → auth-choice.apply-helpers-C-L13mHO.js} +1 -1
  16. package/dist/{auth-profiles-ByQNLJzP.js → auth-profiles-BiJk4pUv.js} +16 -16
  17. package/dist/{auth-token-Gu6sWtZS.js → auth-token-B3--XmAN.js} +1 -1
  18. package/dist/{banner-C9hwqM49.js → banner-BR76eqqR.js} +2 -2
  19. package/dist/{bonjour-discovery-Bh8Ao0vC.js → bonjour-discovery-B_XMK5ai.js} +1 -1
  20. package/dist/{browser-cli-CGjcwRKx.js → browser-cli-B45YlTHC.js} +12 -12
  21. package/dist/build-info.json +3 -3
  22. package/dist/{call-BPIaCRGe.js → call-G7vZ_wCI.js} +10 -10
  23. package/dist/{channel-account-context-DJ3rHgVO.js → channel-account-context-CQ6rCiGI.js} +5 -5
  24. package/dist/{channel-activity-CNDuTc8D.js → channel-activity-CGBzdEGf.js} +1 -1
  25. package/dist/{channel-options-D0gk9W37.js → channel-options-CAVwZvHb.js} +3 -3
  26. package/dist/{channel-selection-DAoy4Z1P.js → channel-selection-D_NFb2hE.js} +1 -1
  27. package/dist/{channel-web-Duua4ZPa.js → channel-web-CmwN58t5.js} +17 -17
  28. package/dist/{channels-cli-D15lUa6m.js → channels-cli-BvI7PrnS.js} +93 -93
  29. package/dist/{channels-status-issues-DPzsKH4n.js → channels-status-issues-B87XQLLd.js} +1 -1
  30. package/dist/{chrome-Bs3-hdWP.js → chrome-fM6BTTNA.js} +4 -4
  31. package/dist/{clawbot-cli-ClfRwHPU.js → clawbot-cli-jwxDns9G.js} +11 -11
  32. package/dist/cli/daemon-cli.js +1 -1
  33. package/dist/{cli-zfxNQ-Jj.js → cli-IgnHd9vV.js} +73 -73
  34. package/dist/{client-DFgW99bv.js → client-X5m1ssRl.js} +2 -2
  35. package/dist/{command-registry-okNPqigX.js → command-registry-D-1yrjO5.js} +11 -11
  36. package/dist/{command-secret-targets-Blzote2A.js → command-secret-targets-DElQTuoe.js} +4 -4
  37. package/dist/{commands-Bn-GGRiA.js → commands-Di_crduW.js} +1 -1
  38. package/dist/{commands-registry-DOyhmv7L.js → commands-registry-CvlKGwPE.js} +3 -3
  39. package/dist/{completion-cli-C_kX-zqx.js → completion-cli-DDG6rQHB.js} +13 -13
  40. package/dist/{completion-cli-DMPoKYSD.js → completion-cli-YquOT8ke.js} +1 -1
  41. package/dist/{config-cli-KQxg7BTe.js → config-cli-BIaTdZ_7.js} +7 -7
  42. package/dist/{config-guard-CTKbpGkQ.js → config-guard-CDl-VzWM.js} +3 -3
  43. package/dist/{config-validation-xBuowa-r.js → config-validation-BAFa1Cym.js} +3 -3
  44. package/dist/{configure-B3Nlvr4W.js → configure-BXLSTN8m.js} +17 -17
  45. package/dist/{control-ui-assets-d6VtDSeo.js → control-ui-assets-BYEy341x.js} +1 -1
  46. package/dist/{cron-cli-i7RdrGzx.js → cron-cli-DeHX-jJX.js} +11 -11
  47. package/dist/{daemon-cli-Ot9TBJ_l.js → daemon-cli-Cc8upFpL.js} +15 -15
  48. package/dist/{daemon-install-CbPLNiIP.js → daemon-install-Chxlu9Kv.js} +4 -4
  49. package/dist/{daemon-install-helpers-CZDVO_MU.js → daemon-install-helpers-CJtiW2RE.js} +11 -11
  50. package/dist/{deliver-DYffOszC.js → deliver-CyR05tXq.js} +7 -7
  51. package/dist/deliver-runtime-BY48Cyf6.js +61 -0
  52. package/dist/deps-send-discord.runtime-CiS_YGKd.js +36 -0
  53. package/dist/deps-send-imessage.runtime-h5CDiZZu.js +35 -0
  54. package/dist/deps-send-signal.runtime-C9s3Y1Zu.js +34 -0
  55. package/dist/deps-send-slack.runtime-Dqb-9qwc.js +32 -0
  56. package/dist/{deps-send-telegram.runtime-C7I8qHRq.js → deps-send-telegram.runtime-aNU8_XlK.js} +16 -16
  57. package/dist/deps-send-whatsapp.runtime-0tUP9kuA.js +119 -0
  58. package/dist/{devices-cli-CEW04UTp.js → devices-cli-DVV5P4ZJ.js} +8 -8
  59. package/dist/{diagnostic-CT4BKCiT.js → diagnostic-Du3b17ba.js} +1 -1
  60. package/dist/{diagnostics-m7hHHbuE.js → diagnostics--O6mo6KH.js} +5 -5
  61. package/dist/{directory-cli-4K5ehIEb.js → directory-cli-DaE3Quiv.js} +7 -7
  62. package/dist/{dns-cli-Cwgde6km.js → dns-cli-waaEVY0o.js} +5 -5
  63. package/dist/{dock-0fXeq35m.js → dock-gKJjfuaV.js} +4 -4
  64. package/dist/{docs-cli-BpZtes_j.js → docs-cli--gGxz79Z.js} +4 -4
  65. package/dist/{doctor-completion-Dzzgvaw-.js → doctor-completion-B63lREru.js} +2 -2
  66. package/dist/{doctor-completion-D6js0phx.js → doctor-completion-CoKUBmAB.js} +1 -1
  67. package/dist/{doctor-config-flow-CjyicsHv.js → doctor-config-flow-BtioG6ZI.js} +15 -15
  68. package/dist/{enable-DMJvBRPK.js → enable-Cbwq508X.js} +1 -1
  69. package/dist/entry.js +2 -2
  70. package/dist/{exec-approvals-allowlist--CDwsotI.js → exec-approvals-allowlist-Bl6dLcC4.js} +1 -1
  71. package/dist/{exec-approvals-cli-Bni7tZhv.js → exec-approvals-cli-_eztu6zG.js} +16 -16
  72. package/dist/{exec-safe-bin-runtime-policy-BOmyNeKa.js → exec-safe-bin-runtime-policy-CYHAJAOy.js} +2 -2
  73. package/dist/{fetch-CODl9dwL.js → fetch-BWLAZtR0.js} +3 -3
  74. package/dist/{fetch-guard-C9XQ9W19.js → fetch-guard-aHbB2ECM.js} +1 -1
  75. package/dist/{fs-safe-BPQ-per2.js → fs-safe-DPYj7h8A.js} +24 -24
  76. package/dist/{gateway-cli-C_bDC15s.js → gateway-cli-BP1USKKw.js} +153 -153
  77. package/dist/{gateway-cli-DZSjLGTJ.js → gateway-cli-CIhENRqY.js} +1 -1
  78. package/dist/{gateway-rpc-mBKSbosL.js → gateway-rpc-CyI4qv4e.js} +1 -1
  79. package/dist/{health-L85P9rRI.js → health-CxqVSgKj.js} +11 -11
  80. package/dist/{hooks-cli-JUGj7_IF.js → hooks-cli-C-8A82OA.js} +81 -81
  81. package/dist/{hooks-status-BlgSVDvN.js → hooks-status-DMFBAUq8.js} +1 -1
  82. package/dist/{image-C3rClBur.js → image-Czt09HO2.js} +5 -5
  83. package/dist/{image-ops-LFsSCTyI.js → image-ops-B2uuLIGD.js} +10 -10
  84. package/dist/image-runtime-C_sKgCPT.js +55 -0
  85. package/dist/index.js +1 -1
  86. package/dist/{inspect-CzsXBsew.js → inspect-4c1uL0x5.js} +4 -4
  87. package/dist/{install-safe-path-DqI19VEv.js → install-safe-path-3muwy3fu.js} +25 -25
  88. package/dist/{installs-P-pYAJm1.js → installs-BiQDtPF0.js} +9 -9
  89. package/dist/{ipv4-Bx85fwxr.js → ipv4-B1l08IQ5.js} +1 -1
  90. package/dist/{ir-CLdz27UA.js → ir-Cg5iUcsz.js} +8 -8
  91. package/dist/{issue-format-DzzpkEKh.js → issue-format-NbalyyoF.js} +1 -1
  92. package/dist/{json-files-rR19q30D.js → json-files-CuJjdF_0.js} +8 -8
  93. package/dist/{lifecycle-core-DAOEq9od.js → lifecycle-core-BDDTVhGJ.js} +5 -5
  94. package/dist/{login-B6agIh-B.js → login-BtteffgM.js} +3 -3
  95. package/dist/{login-qr-eRvH4Sfc.js → login-qr-CL3cPNm6.js} +6 -6
  96. package/dist/{logs-cli-DjsOTLd0.js → logs-cli-_68C9pAz.js} +9 -9
  97. package/dist/{manager-CFg5CNjB.js → manager-D-epQZzu.js} +14 -14
  98. package/dist/{manager-runtime-BucyWusE.js → manager-runtime-dxiaLn0X.js} +9 -9
  99. package/dist/{manifest-registry-1ACGW3OR.js → manifest-registry-7kwtbCH-.js} +1 -1
  100. package/dist/{memory-cli-K8RTw22V.js → memory-cli-DdlNObR_.js} +12 -12
  101. package/dist/{model-D3QKHUD9.js → model-CLOEFgm1.js} +2 -2
  102. package/dist/{model-catalog-INp1o1zX.js → model-catalog-cPBfdmCZ.js} +3 -3
  103. package/dist/{model-picker-DNBHh9Px.js → model-picker-k5b4kcsx.js} +4 -4
  104. package/dist/{models-BpPghvyy.js → models-Bf5dNlFg.js} +17 -17
  105. package/dist/{models-cli-DotYKjDq.js → models-cli-DHlY3RwP.js} +78 -78
  106. package/dist/{models-config-BNIPxtHv.js → models-config-C7GR26HJ.js} +6 -6
  107. package/dist/{net-QB4dfP4-.js → net-CggAM2eK.js} +2 -2
  108. package/dist/{node-cli-tuLexrKG.js → node-cli-CF6bOApq.js} +33 -33
  109. package/dist/{node-command-policy-X4KnAuD8.js → node-command-policy--2bsadiu.js} +1 -1
  110. package/dist/{node-service-OVe0_CIs.js → node-service-Z0JprJda.js} +1 -1
  111. package/dist/{nodes-cli-BtHrRe7o.js → nodes-cli-DdF0Apr8.js} +16 -16
  112. package/dist/{nodes-screen-CKhKFccI.js → nodes-screen-Cihyp_1V.js} +7 -7
  113. package/dist/{npm-pack-install-Dn3FiWXB.js → npm-pack-install-B887us7R.js} +18 -18
  114. package/dist/{npm-resolution-BTi5J55i.js → npm-resolution-2sjQlpdP.js} +4 -4
  115. package/dist/{onboard-qnQqEy5h.js → onboard-BYwFqDe-.js} +1 -1
  116. package/dist/{onboard-channels-CUpUBnOj.js → onboard-channels-Bw372mQX.js} +21 -21
  117. package/dist/{onboard-custom-DIM8V39k.js → onboard-custom-XW3Q4ERz.js} +4 -4
  118. package/dist/{onboard-CaDp4p48.js → onboard-gmbrf0mc.js} +6 -6
  119. package/dist/{onboard-helpers-D10-c0nt.js → onboard-helpers-DfWsh9P_.js} +10 -10
  120. package/dist/{onboard-hooks-DW4qt57e.js → onboard-hooks-7zSvhf8S.js} +4 -4
  121. package/dist/{onboard-remote-PNWR1AHo.js → onboard-remote-qJCXQTPO.js} +4 -4
  122. package/dist/{onboard-skills-DRzcoNmr.js → onboard-skills-DFMLJn-8.js} +4 -4
  123. package/dist/{onboarding-mo7rwJC-.js → onboarding-C7eyvBep.js} +1 -1
  124. package/dist/{onboarding-D1z3JAaB.js → onboarding-OrcdwciM.js} +14 -14
  125. package/dist/{onboarding.finalize-CWzwBDG8.js → onboarding.finalize-Bf3EExjS.js} +142 -145
  126. package/dist/{onboarding.finalize-D8igsmtY.js → onboarding.finalize-DZBXbwYe.js} +55 -58
  127. package/dist/{onboarding.gateway-config-BzzDFZhl.js → onboarding.gateway-config-CeOavTRn.js} +18 -18
  128. package/dist/{onboarding.secret-input-ajPT5cjy.js → onboarding.secret-input-h4sXfwga.js} +1 -1
  129. package/dist/{openai-model-default-lBZZvWbf.js → openai-model-default-BIEWI0T4.js} +2 -2
  130. package/dist/{outbound-yJzuZMJK.js → outbound-DrmXuI1w.js} +3 -3
  131. package/dist/{outbound-attachment-BRjY-xU5.js → outbound-attachment-ELXt01nc.js} +2 -2
  132. package/dist/{pairing-cli-BHW9JIfG.js → pairing-cli-BPn6V6ca.js} +8 -8
  133. package/dist/{pairing-labels-DGiyVpfH.js → pairing-labels-ieaV5SBV.js} +1 -1
  134. package/dist/{pairing-store-BWvzmAq8.js → pairing-store-BNRzMsGf.js} +3 -3
  135. package/dist/{path-alias-guards-DeOVetT7.js → path-alias-guards-vfYYQFIg.js} +3 -3
  136. package/dist/{path-safety-D7CjFQvf.js → path-safety-C95DzArw.js} +1 -1
  137. package/dist/{paths-D6mnO6Ni.js → paths-DfuVHiHu.js} +9 -9
  138. package/dist/{pi-embedded-helpers-13zhzo1T.js → pi-embedded-helpers-DQHj960w.js} +6 -6
  139. package/dist/{pi-model-discovery-Cj7zDFgN.js → pi-model-discovery-D4t0ZFCY.js} +1 -1
  140. package/dist/{pi-model-discovery-runtime-CylBYw6s.js → pi-model-discovery-runtime-SKeRi7Gx.js} +5 -5
  141. package/dist/{pi-tools.before-tool-call.runtime-CEWBYhqI.js → pi-tools.before-tool-call.runtime-DjzR6iNJ.js} +5 -5
  142. package/dist/{pi-tools.policy-Bhg8uG0h.js → pi-tools.policy-DgElG9m2.js} +5 -5
  143. package/dist/{plugin-auto-enable-D_3GnV1a.js → plugin-auto-enable-BLhZ9NWX.js} +3 -3
  144. package/dist/{plugin-registry-CY6rt9xp.js → plugin-registry-BgKtjZBZ.js} +3 -3
  145. package/dist/plugin-sdk/{accounts-BhCAa-05.js → accounts-BLOLIF6Q.js} +2 -2
  146. package/dist/plugin-sdk/accounts-BXFDqY90.js +288 -0
  147. package/dist/plugin-sdk/{accounts-DKXGC2Vu.js → accounts-BvzvDHNx.js} +3 -3
  148. package/dist/plugin-sdk/{accounts-BChIl5as.js → accounts-ByCKM_Y3.js} +2 -2
  149. package/dist/plugin-sdk/accounts-DU7Js54-.js +46 -0
  150. package/dist/plugin-sdk/accounts-DxiB_4z4.js +35 -0
  151. package/dist/plugin-sdk/{active-listener-TTbK9PGk.js → active-listener-Ccj2fSCa.js} +2 -2
  152. package/dist/plugin-sdk/active-listener-DRKcesNb.js +50 -0
  153. package/dist/plugin-sdk/{api-key-rotation-BqhYVBBK.js → api-key-rotation-0Xm0okk5.js} +2 -2
  154. package/dist/plugin-sdk/api-key-rotation-k1ZNheUH.js +181 -0
  155. package/dist/plugin-sdk/{audio-preflight-DAf0ptAM.js → audio-preflight-B_pcDw8d.js} +26 -26
  156. package/dist/plugin-sdk/audio-preflight-Be1sKsob.js +69 -0
  157. package/dist/plugin-sdk/audio-transcription-runner-jhHyCc_7.js +2176 -0
  158. package/dist/plugin-sdk/{audio-transcription-runner-CBASOlbc.js → audio-transcription-runner-u6tijzUS.js} +11 -11
  159. package/dist/plugin-sdk/audit-membership-runtime-B9b-zRwg.js +58 -0
  160. package/dist/plugin-sdk/{audit-membership-runtime-Xl20kCBe.js → audit-membership-runtime-DHQDvH4u.js} +2 -2
  161. package/dist/plugin-sdk/{channel-activity-95JVLzNY.js → channel-activity-BVUdxSNs.js} +3 -3
  162. package/dist/plugin-sdk/channel-activity-Bq1Y9RiB.js +94 -0
  163. package/dist/plugin-sdk/channel-web-AsdjtnvN.js +2256 -0
  164. package/dist/plugin-sdk/{channel-web-DCkC6Ydu.js → channel-web-BX2s-JXF.js} +18 -18
  165. package/dist/plugin-sdk/{chrome-BlXpNOQu.js → chrome-6EkqVcyR.js} +6 -6
  166. package/dist/plugin-sdk/chrome-DOnBMnlx.js +2415 -0
  167. package/dist/plugin-sdk/{commands-registry-C9y_w3eW.js → commands-registry-CDHo6SSs.js} +4 -4
  168. package/dist/plugin-sdk/commands-registry-D0py59pz.js +1125 -0
  169. package/dist/plugin-sdk/{common-CEwMUbms.js → common-Emz6EPQM.js} +2 -2
  170. package/dist/plugin-sdk/config-B16xKqSo.js +17912 -0
  171. package/dist/plugin-sdk/{config-sMifxgre.js → config-CMjn_DSB.js} +7 -7
  172. package/dist/plugin-sdk/deliver-BqXXtIuw.js +1694 -0
  173. package/dist/plugin-sdk/{deliver-2zt3NeFA.js → deliver-Cz6GluMN.js} +10 -10
  174. package/dist/plugin-sdk/deliver-runtime-CjCJkoFM.js +32 -0
  175. package/dist/plugin-sdk/deliver-runtime-D0xZkt8n.js +32 -0
  176. package/dist/plugin-sdk/deps-send-discord.runtime-BM6ppx2Q.js +23 -0
  177. package/dist/plugin-sdk/deps-send-discord.runtime-C4AEwjGl.js +23 -0
  178. package/dist/plugin-sdk/deps-send-imessage.runtime-3w5PhXGu.js +22 -0
  179. package/dist/plugin-sdk/deps-send-imessage.runtime-DCdEe-_E.js +22 -0
  180. package/dist/plugin-sdk/deps-send-signal.runtime-BNO6SPmR.js +21 -0
  181. package/dist/plugin-sdk/deps-send-signal.runtime-yH9cQl3_.js +21 -0
  182. package/dist/plugin-sdk/deps-send-slack.runtime-BChVBURL.js +19 -0
  183. package/dist/plugin-sdk/deps-send-slack.runtime-Bh4gw-L5.js +19 -0
  184. package/dist/plugin-sdk/deps-send-telegram.runtime-C_CtsWgt.js +24 -0
  185. package/dist/plugin-sdk/deps-send-telegram.runtime-DyCorUw2.js +24 -0
  186. package/dist/plugin-sdk/deps-send-whatsapp.runtime-BF4vx9Ho.js +57 -0
  187. package/dist/plugin-sdk/deps-send-whatsapp.runtime-DoOYrpKa.js +57 -0
  188. package/dist/plugin-sdk/diagnostic-DUbajFSl.js +319 -0
  189. package/dist/plugin-sdk/{diagnostic-CU_mni6m.js → diagnostic-DhO2TqL_.js} +2 -2
  190. package/dist/plugin-sdk/discord.js +6 -6
  191. package/dist/plugin-sdk/{errors-CgRPdp3o.js → errors-9oVz7reJ.js} +1 -1
  192. package/dist/plugin-sdk/errors-B8oJXuCF.js +54 -0
  193. package/dist/plugin-sdk/{fetch-guard-BxMLJbqt.js → fetch-guard-CGQ35-A_.js} +2 -2
  194. package/dist/plugin-sdk/fetch-guard-Cgyq6Jv9.js +156 -0
  195. package/dist/plugin-sdk/{fs-safe-5aQcM_qM.js → fs-safe-B26UxJny.js} +3 -3
  196. package/dist/plugin-sdk/fs-safe-BW1ypSDS.js +352 -0
  197. package/dist/plugin-sdk/image-BPXnvxYL.js +2310 -0
  198. package/dist/plugin-sdk/{image-BJXV9IMV.js → image-DPgEp54d.js} +6 -6
  199. package/dist/plugin-sdk/image-ops-BBY2fn9x.js +584 -0
  200. package/dist/plugin-sdk/{image-ops-DovJMvdf.js → image-ops-CbKrfi-N.js} +2 -2
  201. package/dist/plugin-sdk/image-runtime-DN6PHT8G.js +25 -0
  202. package/dist/plugin-sdk/image-runtime-S-TzaJpg.js +25 -0
  203. package/dist/plugin-sdk/index.js +50 -50
  204. package/dist/plugin-sdk/{ir-DE2ewdq5.js → ir-4JdLS2Hz.js} +7 -7
  205. package/dist/plugin-sdk/ir-BJsqyZfm.js +1296 -0
  206. package/dist/plugin-sdk/local-roots-C1ETRlaC.js +186 -0
  207. package/dist/plugin-sdk/{local-roots-CIwDgpY2.js → local-roots-T6lXDGzr.js} +4 -4
  208. package/dist/plugin-sdk/{logger-DIb2cGHp.js → logger-Bg4vIUJn.js} +2 -2
  209. package/dist/plugin-sdk/logger-DDdrdbDu.js +1163 -0
  210. package/dist/plugin-sdk/{login-CLIcsAVy.js → login-BNCjks0C.js} +4 -4
  211. package/dist/plugin-sdk/login-DtS9DDnV.js +57 -0
  212. package/dist/plugin-sdk/login-qr-B9YeeJ37.js +320 -0
  213. package/dist/plugin-sdk/{login-qr-BlxjA0vQ.js → login-qr-CTjNgxhl.js} +5 -5
  214. package/dist/plugin-sdk/{manager-CpAGPHeX.js → manager-D__CoDGL.js} +8 -8
  215. package/dist/plugin-sdk/manager-Dn7j3n0d.js +3917 -0
  216. package/dist/plugin-sdk/manager-runtime-B9aBGLrF.js +15 -0
  217. package/dist/plugin-sdk/manager-runtime-UK1-iA2B.js +15 -0
  218. package/dist/plugin-sdk/mattermost.js +3 -3
  219. package/dist/plugin-sdk/outbound-B8ca8vE3.js +212 -0
  220. package/dist/plugin-sdk/{outbound-DDpRevO_.js → outbound-DTQ-9Cjw.js} +5 -5
  221. package/dist/plugin-sdk/outbound-attachment-BppFIMQa.js +19 -0
  222. package/dist/plugin-sdk/{outbound-attachment-CVavq5II.js → outbound-attachment-CdHX9v0q.js} +2 -2
  223. package/dist/plugin-sdk/{path-alias-guards-BfpU4lAT.js → path-alias-guards-BX-3FprC.js} +1 -1
  224. package/dist/plugin-sdk/path-alias-guards-DSCFtpsd.js +43 -0
  225. package/dist/plugin-sdk/{paths-CK3lTJYw.js → paths-BQHqKGA8.js} +1 -1
  226. package/dist/plugin-sdk/paths-CjFcHB_C.js +166 -0
  227. package/dist/plugin-sdk/{pi-embedded-helpers-Cb_h9zSJ.js → pi-embedded-helpers-B7nmCbf7.js} +16 -16
  228. package/dist/plugin-sdk/pi-embedded-helpers-BeYjP1MW.js +9627 -0
  229. package/dist/plugin-sdk/pi-model-discovery-B_qCKuSW.js +134 -0
  230. package/dist/plugin-sdk/{pi-model-discovery-B3B3R7L9.js → pi-model-discovery-DyDwYiK3.js} +1 -1
  231. package/dist/plugin-sdk/pi-model-discovery-runtime-CN6ZaL0W.js +8 -0
  232. package/dist/plugin-sdk/pi-model-discovery-runtime-CZNiNFlm.js +8 -0
  233. package/dist/plugin-sdk/{pi-tools.before-tool-call.runtime-DivpBAM0.js → pi-tools.before-tool-call.runtime-D_f6TDo7.js} +4 -4
  234. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-cZdrrV27.js +354 -0
  235. package/dist/plugin-sdk/{plugins-BlTrm4bw.js → plugins-BSPvol4w.js} +4 -4
  236. package/dist/plugin-sdk/plugins-rivB8KaQ.js +864 -0
  237. package/dist/plugin-sdk/{proxy-env-Cdh-OQYk.js → proxy-env-D-iVYTBk.js} +1 -1
  238. package/dist/plugin-sdk/{proxy-fetch-Dt5BedH8.js → proxy-fetch-Cf3IUSDw.js} +1 -1
  239. package/dist/plugin-sdk/proxy-fetch-ZPEvp58f.js +38 -0
  240. package/dist/plugin-sdk/{pw-ai-DEDRpMlY.js → pw-ai-BO445UDA.js} +9 -9
  241. package/dist/plugin-sdk/pw-ai-qaWZD0yx.js +1938 -0
  242. package/dist/plugin-sdk/{qmd-manager-Ct9rtJjd.js → qmd-manager-81ezWnIN.js} +7 -7
  243. package/dist/plugin-sdk/qmd-manager-izn0N9V3.js +1448 -0
  244. package/dist/plugin-sdk/{query-expansion-OdwWuN1S.js → query-expansion-C1Nx0XAb.js} +5 -5
  245. package/dist/plugin-sdk/query-expansion-DxTmIU4K.js +1011 -0
  246. package/dist/plugin-sdk/{redact-9WsNyb7S.js → redact-BoNEjbpF.js} +1 -1
  247. package/dist/plugin-sdk/redact-DfACyt0X.js +319 -0
  248. package/dist/plugin-sdk/{reply-wZhosbPd.js → reply-DJ3rbbnv.js} +73 -73
  249. package/dist/plugin-sdk/reply-DNSpho0-.js +98763 -0
  250. package/dist/plugin-sdk/{resolve-outbound-target-BJmCIkW_.js → resolve-outbound-target-DtQd8TzZ.js} +2 -2
  251. package/dist/plugin-sdk/resolve-outbound-target-YiPIGXVN.js +40 -0
  252. package/dist/plugin-sdk/{run-with-concurrency-EUEKeAa8.js → run-with-concurrency-CYcPpb5E.js} +1 -1
  253. package/dist/plugin-sdk/run-with-concurrency-vfuRiXdY.js +2023 -0
  254. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-BgwMJs4X.js +10 -0
  255. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-ai8hcGi_.js +10 -0
  256. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-BzvoaI1G.js +19 -0
  257. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-Y7maoii7.js +19 -0
  258. package/dist/plugin-sdk/{send-Drs4JqVD.js → send-B9GVkvTk.js} +5 -5
  259. package/dist/plugin-sdk/{send-BMWyVUhm.js → send-BPEn9L0o.js} +13 -13
  260. package/dist/plugin-sdk/send-BSD6Pkrk.js +414 -0
  261. package/dist/plugin-sdk/send-C4KxEJe1.js +503 -0
  262. package/dist/plugin-sdk/{send-0C4KdD-T.js → send-CGjI0pJn.js} +7 -7
  263. package/dist/plugin-sdk/{send-oo6mQbab.js → send-CZ6HDwDu.js} +8 -8
  264. package/dist/plugin-sdk/send-D3XVKGvq.js +540 -0
  265. package/dist/plugin-sdk/{send-BGWGV_mz.js → send-D6nUI0S3.js} +6 -6
  266. package/dist/plugin-sdk/send-DFrnRiWm.js +3135 -0
  267. package/dist/plugin-sdk/send-Dh1f5xjE.js +2587 -0
  268. package/dist/plugin-sdk/{session-CXVARKFK.js → session-Bwjlseuf.js} +3 -3
  269. package/dist/plugin-sdk/session-D5c0BIEo.js +169 -0
  270. package/dist/plugin-sdk/{skill-commands-CoqGFLfM.js → skill-commands-BpB2Oe8e.js} +4 -4
  271. package/dist/plugin-sdk/skill-commands-CnqkEfhS.js +342 -0
  272. package/dist/plugin-sdk/{skills-di-5uS9y.js → skills-CaQpr1kx.js} +6 -6
  273. package/dist/plugin-sdk/skills-DSbDUvmU.js +1428 -0
  274. package/dist/plugin-sdk/slash-commands.runtime-BH06o3dH.js +13 -0
  275. package/dist/plugin-sdk/slash-commands.runtime-Dbtq7ppF.js +13 -0
  276. package/dist/plugin-sdk/slash-dispatch.runtime-BhAks953.js +52 -0
  277. package/dist/plugin-sdk/slash-dispatch.runtime-BotYesgY.js +52 -0
  278. package/dist/plugin-sdk/slash-skill-commands.runtime-CzPvxiUD.js +16 -0
  279. package/dist/plugin-sdk/slash-skill-commands.runtime-QGNWVO9S.js +16 -0
  280. package/dist/plugin-sdk/ssrf-DvsjfpC2.js +202 -0
  281. package/dist/plugin-sdk/store-DG90hxe6.js +81 -0
  282. package/dist/plugin-sdk/{store-Dn_E3uaN.js → store-K6C7eOpg.js} +2 -2
  283. package/dist/plugin-sdk/subagent-registry-runtime-BbcgUYOO.js +52 -0
  284. package/dist/plugin-sdk/subagent-registry-runtime-Db83OZ3_.js +52 -0
  285. package/dist/plugin-sdk/{tables-_e9wMygc.js → tables-CeWt6UjS.js} +1 -1
  286. package/dist/plugin-sdk/tables-DNlQ8oQ3.js +55 -0
  287. package/dist/{target-errors-C_rnMuJ2.js → plugin-sdk/target-errors-BlVYPwVC.js} +4 -4
  288. package/dist/plugin-sdk/thinking-DT2ZR60x.js +1206 -0
  289. package/dist/plugin-sdk/{thinking-Cih_nxDY.js → thinking-gpcjIDQZ.js} +7 -7
  290. package/dist/plugin-sdk/{tokens-CLE20fRI.js → tokens-CTIYTLWu.js} +1 -1
  291. package/dist/plugin-sdk/tokens-DAL_5WHL.js +52 -0
  292. package/dist/plugin-sdk/{tool-images-D6a1Ua4p.js → tool-images-DroS1EaM.js} +2 -2
  293. package/dist/plugin-sdk/tool-images-l3TE_qXt.js +274 -0
  294. package/dist/plugin-sdk/web-42d5VBZj.js +56 -0
  295. package/dist/plugin-sdk/web-DZ7nBzZy.js +56 -0
  296. package/dist/plugin-sdk/{whatsapp-actions-UAnHjKbE.js → whatsapp-actions-CbzdjX4B.js} +17 -17
  297. package/dist/plugin-sdk/whatsapp-actions-DR2aYq5f.js +80 -0
  298. package/dist/plugin-sdk/whatsapp.js +50 -50
  299. package/dist/{plugins-DFPxMLnR.js → plugins-DuLOFZmO.js} +2 -2
  300. package/dist/{plugins-cli-Bfq4OJMG.js → plugins-cli-CKr9IyQL.js} +83 -83
  301. package/dist/{ports-DMeUt80n.js → ports-0jLyYbvQ.js} +2 -2
  302. package/dist/{ports-BzfeaNjw.js → ports-Be82TlEg.js} +1 -1
  303. package/dist/{program-Crlu6-Fd.js → program-D5HYdN0q.js} +81 -81
  304. package/dist/{program-context-BUiGRFn1.js → program-context-CWU-LWnL.js} +6 -6
  305. package/dist/{prompt-select-styled-DPnXlfvv.js → prompt-select-styled-C_C2Ae8a.js} +40 -40
  306. package/dist/{prompt-select-styled-BeIW1IXq.js → prompt-select-styled-CjkK2AWX.js} +1 -1
  307. package/dist/{provider-auth-helpers-C_1HJDfj.js → provider-auth-helpers-DG7hKvxV.js} +5 -5
  308. package/dist/{proxy-env-CNlcVWhf.js → proxy-env-D16ubrT6.js} +1 -1
  309. package/dist/{push-apns-C4uEslA7.js → push-apns-BZeUZhYN.js} +5 -5
  310. package/dist/{pw-ai-Dg9fGMve.js → pw-ai-BrmQq6dp.js} +18 -18
  311. package/dist/{qmd-manager-D4nXiiAn.js → qmd-manager-CToc7FPg.js} +20 -20
  312. package/dist/{qr-cli-CN6kEeE-.js → qr-cli-23hgWtLn.js} +2 -2
  313. package/dist/{query-expansion-C0HUJbRn.js → query-expansion-DI9INxTg.js} +12 -12
  314. package/dist/{redact-snapshot-CiS6G7vm.js → redact-snapshot-B8W0RynI.js} +1 -1
  315. package/dist/{register.agent-BMr61y_S.js → register.agent-C9tZejQm.js} +94 -94
  316. package/dist/register.configure-DJj2p4b3.js +165 -0
  317. package/dist/{register.maintenance-BETLfpr3.js → register.maintenance-BnT8sF7e.js} +4 -4
  318. package/dist/{register.maintenance-DWquSvC1.js → register.maintenance-CVWvM_w8.js} +95 -95
  319. package/dist/{register.message-CqqQmFqh.js → register.message-DexwH4xh.js} +74 -74
  320. package/dist/{register.onboard-FYANtcb-.js → register.onboard-B68iwPcU.js} +2 -2
  321. package/dist/{register.onboard-CJqPKqea.js → register.onboard-Bx2xxYE0.js} +18 -18
  322. package/dist/{register.setup-DzAgPerh.js → register.setup-BgRFFdoH.js} +21 -21
  323. package/dist/{register.setup-_38deeF2.js → register.setup-DkztcYGa.js} +2 -2
  324. package/dist/{register.status-health-sessions-CHCnEwLO.js → register.status-health-sessions-CmNMtNSk.js} +88 -88
  325. package/dist/{register.subclis-DX9OFUYu.js → register.subclis-Bb6WLUhM.js} +31 -31
  326. package/dist/{rpc-DFxhwitx.js → rpc-BquITS9w.js} +1 -1
  327. package/dist/{run-main-BjSdMh29.js → run-main-CApmG6CS.js} +93 -93
  328. package/dist/{runtime-By5SpbLU.js → runtime-_Vk5eISV.js} +3 -3
  329. package/dist/{runtime-config-collectors-B104qPur.js → runtime-config-collectors-wQYiGNzB.js} +1 -1
  330. package/dist/{runtime-whatsapp-login.runtime-B4XQqxLZ.js → runtime-whatsapp-login.runtime-Cf3JhAPA.js} +7 -7
  331. package/dist/{runtime-whatsapp-outbound.runtime-CTfBy0k0.js → runtime-whatsapp-outbound.runtime-bw4l8Cm5.js} +15 -15
  332. package/dist/{sandbox-DaQ1ruwH.js → sandbox-CbGxVENW.js} +18 -18
  333. package/dist/{sandbox-cli-BzmKYlDs.js → sandbox-cli-WvgvhVoi.js} +25 -25
  334. package/dist/{secrets-cli-C2iidz4Q.js → secrets-cli-BJFHNFFa.js} +11 -11
  335. package/dist/{security-cli-D3PfmNhS.js → security-cli-BVezJLE_.js} +42 -42
  336. package/dist/{send-BWMSp9_W.js → send-Bu3eP6CW.js} +4 -4
  337. package/dist/{send-BdZJcfei.js → send-C2ol3xJd.js} +8 -8
  338. package/dist/{send-DHmaiFb3.js → send-Cj7csKER.js} +6 -6
  339. package/dist/{send-BcCUXoKV.js → send-D8WRsTcF.js} +5 -5
  340. package/dist/{send-BbUl6LvV.js → send-DynShEUL.js} +11 -11
  341. package/dist/{server-BThRQKrb.js → server-TkeA4LLX.js} +20 -20
  342. package/dist/{server-context-D9dHt5TX.js → server-context-C56AfkmJ.js} +12 -12
  343. package/dist/{server-lifecycle-DwoqIphm.js → server-lifecycle-CUR6g-z-.js} +2 -2
  344. package/dist/{server-middleware-i-VrGsvO.js → server-middleware-Dxlv5GU2.js} +1 -1
  345. package/dist/{server-node-events-67QUoOob.js → server-node-events-EsqtDPMI.js} +74 -74
  346. package/dist/{service-B5T42CWZ.js → service-DSqxS6_D.js} +15 -15
  347. package/dist/{session-eXSdl5mb.js → session-D0jodcgT.js} +1 -1
  348. package/dist/{session-utils-PIpg5nvE.js → session-utils-CZALjD6h.js} +6 -6
  349. package/dist/{sessions-CDicf15r.js → sessions-BLTjLVQT.js} +4 -4
  350. package/dist/{sessions-A97O0F1f.js → sessions-gTKLgF0i.js} +15 -15
  351. package/dist/{shared-CJet4A6J.js → shared-4aGIUkwm.js} +3 -3
  352. package/dist/{shared-By6_qr_R.js → shared-D5DTxBPH.js} +1 -1
  353. package/dist/{skill-commands-DBT6aOGs.js → skill-commands-CigVnmMu.js} +5 -5
  354. package/dist/{skill-scanner--QKHR8U0.js → skill-scanner-CvS725eQ.js} +6 -6
  355. package/dist/{skills-EwyaIyKC.js → skills-C85azDXm.js} +3 -3
  356. package/dist/{skills-cli-CblUgygP.js → skills-cli-B2fk0u1F.js} +5 -5
  357. package/dist/{skills-install-Bg63KYLo.js → skills-install-_Qv7iwIj.js} +6 -6
  358. package/dist/{skills-status-Bv8Xt7Lc.js → skills-status-DkO7rxE8.js} +1 -1
  359. package/dist/{slash-commands.runtime-BueY2Beh.js → slash-commands.runtime-CF70sEb6.js} +11 -11
  360. package/dist/slash-dispatch.runtime-BpDcu-GU.js +114 -0
  361. package/dist/{slash-skill-commands.runtime-ByvvwWOf.js → slash-skill-commands.runtime-6s4Ap-WA.js} +15 -15
  362. package/dist/{squidclaw-root-JXyRbQLJ.js → squidclaw-root-BQfLymzj.js} +8 -8
  363. package/dist/{status-Doe6Z9h6.js → status-yDvMiWJC.js} +27 -27
  364. package/dist/{status.update-BGIm6we4.js → status.update-CiLU9RPF.js} +2 -2
  365. package/dist/{store-BTkIx401.js → store-BEIcnlgx.js} +5 -5
  366. package/dist/{subagent-registry-o5rZt_4e.js → subagent-registry-BE1B0_sO.js} +149 -149
  367. package/dist/subagent-registry-runtime-DNx1w9Cr.js +114 -0
  368. package/dist/{system-cli-BGFIr82s.js → system-cli-DAKISNim.js} +9 -9
  369. package/dist/{system-run-command-BqoUyRkT.js → system-run-command-BOHXAwW8.js} +1 -1
  370. package/dist/{systemd-B86VePXs.js → systemd-Cj2cX_ZP.js} +9 -9
  371. package/dist/{systemd-hints-BmFWZu_j.js → systemd-hints-46PqJfaq.js} +6 -6
  372. package/dist/{systemd-linger-w7fvBU-1.js → systemd-linger-6Jd9K5p2.js} +1 -1
  373. package/dist/{tables-Cw6nUurn.js → tables-DOgKzkCQ.js} +1 -1
  374. package/dist/{tailnet-QKMSnz19.js → tailnet-BlV0IR7G.js} +1 -1
  375. package/dist/target-errors-CRQlPF1u.js +195 -0
  376. package/dist/{tool-images-D6mmxuWS.js → tool-images-CyzWvDUu.js} +1 -1
  377. package/dist/{tui-BxsFozJB.js → tui-DN34soFB.js} +6 -6
  378. package/dist/{tui-cli-Bf1E1ENY.js → tui-cli-CG0r8wIF.js} +32 -32
  379. package/dist/{update-BhRrb6BI.js → update-1JhjCqjy.js} +3 -3
  380. package/dist/{update-cli-Bh_QpVMZ.js → update-cli-DoKsKvCz.js} +4 -4
  381. package/dist/{update-cli-yUlN0mCs.js → update-cli-VQSBFHlu.js} +104 -104
  382. package/dist/{update-runner-DCLBBKeT.js → update-runner-EXHdNkfq.js} +16 -16
  383. package/dist/web-DfVBXj7E.js +118 -0
  384. package/dist/{webhooks-cli-BCqXOihQ.js → webhooks-cli-CJpcVOhV.js} +6 -6
  385. package/dist/{whatsapp-actions-I7z57XJA.js → whatsapp-actions-BYzAF3jo.js} +17 -17
  386. package/dist/{with-timeout-CX0CGi5G.js → with-timeout-D8mIrgj5.js} +3 -3
  387. package/dist/{workspace-BbO-M3Jv.js → workspace-D5vNjk5G.js} +1 -1
  388. package/dist/{workspace-dirs-DJbX0g4E.js → workspace-dirs-CKrd0E4k.js} +1 -1
  389. package/dist/{wsl-CsGe5QCP.js → wsl-CvQfS6aU.js} +2 -2
  390. package/extensions/googlechat/node_modules/.bin/squidclaw +2 -2
  391. package/extensions/memory-core/node_modules/.bin/squidclaw +2 -2
  392. package/package.json +1 -1
  393. package/dist/deliver-runtime-CCCnLu1l.js +0 -61
  394. package/dist/deps-send-discord.runtime-C1qYROSU.js +0 -36
  395. package/dist/deps-send-imessage.runtime-Dz14pqUt.js +0 -35
  396. package/dist/deps-send-signal.runtime-BxlxMy_x.js +0 -34
  397. package/dist/deps-send-slack.runtime-BoIAdT0Z.js +0 -32
  398. package/dist/deps-send-whatsapp.runtime-NrQGDJy9.js +0 -119
  399. package/dist/image-runtime-BawEM2qj.js +0 -55
  400. package/dist/plugin-sdk/deliver-runtime-Dx0Sg-lg.js +0 -32
  401. package/dist/plugin-sdk/deps-send-discord.runtime-bKwjojX0.js +0 -23
  402. package/dist/plugin-sdk/deps-send-imessage.runtime-DcxfdKGE.js +0 -22
  403. package/dist/plugin-sdk/deps-send-signal.runtime-79rGat6V.js +0 -21
  404. package/dist/plugin-sdk/deps-send-slack.runtime-DfMO701H.js +0 -19
  405. package/dist/plugin-sdk/deps-send-telegram.runtime-Bnjwm6SU.js +0 -24
  406. package/dist/plugin-sdk/deps-send-whatsapp.runtime-CS50_Jgh.js +0 -57
  407. package/dist/plugin-sdk/image-runtime-f-WKB3Bx.js +0 -25
  408. package/dist/plugin-sdk/manager-runtime-DAKJEbuY.js +0 -15
  409. package/dist/plugin-sdk/pi-model-discovery-runtime-Bm4bHwpO.js +0 -8
  410. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-D74eZbH7.js +0 -10
  411. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-BidSddX5.js +0 -19
  412. package/dist/plugin-sdk/slash-commands.runtime-CseiMacz.js +0 -13
  413. package/dist/plugin-sdk/slash-dispatch.runtime-88gX6CLk.js +0 -52
  414. package/dist/plugin-sdk/slash-skill-commands.runtime-BNrQNIZ7.js +0 -16
  415. package/dist/plugin-sdk/subagent-registry-runtime-Cv8RHTjT.js +0 -52
  416. package/dist/plugin-sdk/web-C4tTN9Xu.js +0 -56
  417. package/dist/register.configure-7_PUrx8F.js +0 -165
  418. package/dist/slash-dispatch.runtime-B3gbmyOu.js +0 -114
  419. package/dist/subagent-registry-runtime-C0GbHEOo.js +0 -114
  420. package/dist/web-1FVB4fsI.js +0 -118
  421. package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -21
  422. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -21
@@ -0,0 +1,319 @@
1
+ import { n as loadConfig } from "./config-B16xKqSo.js";
2
+ import { a as createSubsystemLogger } from "./logger-DDdrdbDu.js";
3
+
4
+ //#region src/infra/diagnostic-events.ts
5
+ function getDiagnosticEventsState() {
6
+ const globalStore = globalThis;
7
+ if (!globalStore.__squidclawDiagnosticEventsState) globalStore.__squidclawDiagnosticEventsState = {
8
+ seq: 0,
9
+ listeners: /* @__PURE__ */ new Set(),
10
+ dispatchDepth: 0
11
+ };
12
+ return globalStore.__squidclawDiagnosticEventsState;
13
+ }
14
+ function isDiagnosticsEnabled(config) {
15
+ return config?.diagnostics?.enabled === true;
16
+ }
17
+ function emitDiagnosticEvent(event) {
18
+ const state = getDiagnosticEventsState();
19
+ if (state.dispatchDepth > 100) {
20
+ console.error(`[diagnostic-events] recursion guard tripped at depth=${state.dispatchDepth}, dropping type=${event.type}`);
21
+ return;
22
+ }
23
+ const enriched = {
24
+ ...event,
25
+ seq: state.seq += 1,
26
+ ts: Date.now()
27
+ };
28
+ state.dispatchDepth += 1;
29
+ for (const listener of state.listeners) try {
30
+ listener(enriched);
31
+ } catch (err) {
32
+ const errorMessage = err instanceof Error ? err.stack ?? err.message : typeof err === "string" ? err : String(err);
33
+ console.error(`[diagnostic-events] listener error type=${enriched.type} seq=${enriched.seq}: ${errorMessage}`);
34
+ }
35
+ state.dispatchDepth -= 1;
36
+ }
37
+ function onDiagnosticEvent(listener) {
38
+ const state = getDiagnosticEventsState();
39
+ state.listeners.add(listener);
40
+ return () => {
41
+ state.listeners.delete(listener);
42
+ };
43
+ }
44
+
45
+ //#endregion
46
+ //#region src/logging/diagnostic-session-state.ts
47
+ const diagnosticSessionStates = /* @__PURE__ */ new Map();
48
+ const SESSION_STATE_TTL_MS = 1800 * 1e3;
49
+ const SESSION_STATE_PRUNE_INTERVAL_MS = 60 * 1e3;
50
+ const SESSION_STATE_MAX_ENTRIES = 2e3;
51
+ let lastSessionPruneAt = 0;
52
+ function pruneDiagnosticSessionStates(now = Date.now(), force = false) {
53
+ const shouldPruneForSize = diagnosticSessionStates.size > SESSION_STATE_MAX_ENTRIES;
54
+ if (!force && !shouldPruneForSize && now - lastSessionPruneAt < SESSION_STATE_PRUNE_INTERVAL_MS) return;
55
+ lastSessionPruneAt = now;
56
+ for (const [key, state] of diagnosticSessionStates.entries()) {
57
+ const ageMs = now - state.lastActivity;
58
+ if (state.state === "idle" && state.queueDepth <= 0 && ageMs > SESSION_STATE_TTL_MS) diagnosticSessionStates.delete(key);
59
+ }
60
+ if (diagnosticSessionStates.size <= SESSION_STATE_MAX_ENTRIES) return;
61
+ const excess = diagnosticSessionStates.size - SESSION_STATE_MAX_ENTRIES;
62
+ const ordered = Array.from(diagnosticSessionStates.entries()).toSorted((a, b) => a[1].lastActivity - b[1].lastActivity);
63
+ for (let i = 0; i < excess; i += 1) {
64
+ const key = ordered[i]?.[0];
65
+ if (!key) break;
66
+ diagnosticSessionStates.delete(key);
67
+ }
68
+ }
69
+ function resolveSessionKey({ sessionKey, sessionId }) {
70
+ return sessionKey ?? sessionId ?? "unknown";
71
+ }
72
+ function findStateBySessionId(sessionId) {
73
+ for (const state of diagnosticSessionStates.values()) if (state.sessionId === sessionId) return state;
74
+ }
75
+ function getDiagnosticSessionState(ref) {
76
+ pruneDiagnosticSessionStates();
77
+ const key = resolveSessionKey(ref);
78
+ const existing = diagnosticSessionStates.get(key) ?? (ref.sessionId && findStateBySessionId(ref.sessionId));
79
+ if (existing) {
80
+ if (ref.sessionId) existing.sessionId = ref.sessionId;
81
+ if (ref.sessionKey) existing.sessionKey = ref.sessionKey;
82
+ return existing;
83
+ }
84
+ const created = {
85
+ sessionId: ref.sessionId,
86
+ sessionKey: ref.sessionKey,
87
+ lastActivity: Date.now(),
88
+ state: "idle",
89
+ queueDepth: 0
90
+ };
91
+ diagnosticSessionStates.set(key, created);
92
+ pruneDiagnosticSessionStates(Date.now(), true);
93
+ return created;
94
+ }
95
+
96
+ //#endregion
97
+ //#region src/logging/diagnostic.ts
98
+ const diag = createSubsystemLogger("diagnostic");
99
+ const webhookStats = {
100
+ received: 0,
101
+ processed: 0,
102
+ errors: 0,
103
+ lastReceived: 0
104
+ };
105
+ let lastActivityAt = 0;
106
+ const DEFAULT_STUCK_SESSION_WARN_MS = 12e4;
107
+ const MIN_STUCK_SESSION_WARN_MS = 1e3;
108
+ const MAX_STUCK_SESSION_WARN_MS = 1440 * 60 * 1e3;
109
+ let commandPollBackoffRuntimePromise = null;
110
+ function loadCommandPollBackoffRuntime() {
111
+ commandPollBackoffRuntimePromise ??= import("./command-poll-backoff.runtime-BrAQqJqT.js");
112
+ return commandPollBackoffRuntimePromise;
113
+ }
114
+ function markActivity() {
115
+ lastActivityAt = Date.now();
116
+ }
117
+ function resolveStuckSessionWarnMs(config) {
118
+ const raw = config?.diagnostics?.stuckSessionWarnMs;
119
+ if (typeof raw !== "number" || !Number.isFinite(raw)) return DEFAULT_STUCK_SESSION_WARN_MS;
120
+ const rounded = Math.floor(raw);
121
+ if (rounded < MIN_STUCK_SESSION_WARN_MS || rounded > MAX_STUCK_SESSION_WARN_MS) return DEFAULT_STUCK_SESSION_WARN_MS;
122
+ return rounded;
123
+ }
124
+ function logWebhookReceived(params) {
125
+ webhookStats.received += 1;
126
+ webhookStats.lastReceived = Date.now();
127
+ if (diag.isEnabled("debug")) diag.debug(`webhook received: channel=${params.channel} type=${params.updateType ?? "unknown"} chatId=${params.chatId ?? "unknown"} total=${webhookStats.received}`);
128
+ emitDiagnosticEvent({
129
+ type: "webhook.received",
130
+ channel: params.channel,
131
+ updateType: params.updateType,
132
+ chatId: params.chatId
133
+ });
134
+ markActivity();
135
+ }
136
+ function logWebhookProcessed(params) {
137
+ webhookStats.processed += 1;
138
+ if (diag.isEnabled("debug")) diag.debug(`webhook processed: channel=${params.channel} type=${params.updateType ?? "unknown"} chatId=${params.chatId ?? "unknown"} duration=${params.durationMs ?? 0}ms processed=${webhookStats.processed}`);
139
+ emitDiagnosticEvent({
140
+ type: "webhook.processed",
141
+ channel: params.channel,
142
+ updateType: params.updateType,
143
+ chatId: params.chatId,
144
+ durationMs: params.durationMs
145
+ });
146
+ markActivity();
147
+ }
148
+ function logWebhookError(params) {
149
+ webhookStats.errors += 1;
150
+ diag.error(`webhook error: channel=${params.channel} type=${params.updateType ?? "unknown"} chatId=${params.chatId ?? "unknown"} error="${params.error}" errors=${webhookStats.errors}`);
151
+ emitDiagnosticEvent({
152
+ type: "webhook.error",
153
+ channel: params.channel,
154
+ updateType: params.updateType,
155
+ chatId: params.chatId,
156
+ error: params.error
157
+ });
158
+ markActivity();
159
+ }
160
+ function logMessageQueued(params) {
161
+ const state = getDiagnosticSessionState(params);
162
+ state.queueDepth += 1;
163
+ state.lastActivity = Date.now();
164
+ if (diag.isEnabled("debug")) diag.debug(`message queued: sessionId=${state.sessionId ?? "unknown"} sessionKey=${state.sessionKey ?? "unknown"} source=${params.source} queueDepth=${state.queueDepth} sessionState=${state.state}`);
165
+ emitDiagnosticEvent({
166
+ type: "message.queued",
167
+ sessionId: state.sessionId,
168
+ sessionKey: state.sessionKey,
169
+ channel: params.channel,
170
+ source: params.source,
171
+ queueDepth: state.queueDepth
172
+ });
173
+ markActivity();
174
+ }
175
+ function logMessageProcessed(params) {
176
+ if (params.outcome === "error" ? diag.isEnabled("error") : diag.isEnabled("debug")) {
177
+ const payload = `message processed: channel=${params.channel} chatId=${params.chatId ?? "unknown"} messageId=${params.messageId ?? "unknown"} sessionId=${params.sessionId ?? "unknown"} sessionKey=${params.sessionKey ?? "unknown"} outcome=${params.outcome} duration=${params.durationMs ?? 0}ms${params.reason ? ` reason=${params.reason}` : ""}${params.error ? ` error="${params.error}"` : ""}`;
178
+ if (params.outcome === "error") diag.error(payload);
179
+ else diag.debug(payload);
180
+ }
181
+ emitDiagnosticEvent({
182
+ type: "message.processed",
183
+ channel: params.channel,
184
+ chatId: params.chatId,
185
+ messageId: params.messageId,
186
+ sessionId: params.sessionId,
187
+ sessionKey: params.sessionKey,
188
+ durationMs: params.durationMs,
189
+ outcome: params.outcome,
190
+ reason: params.reason,
191
+ error: params.error
192
+ });
193
+ markActivity();
194
+ }
195
+ function logSessionStateChange(params) {
196
+ const state = getDiagnosticSessionState(params);
197
+ const isProbeSession = state.sessionId?.startsWith("probe-") ?? false;
198
+ const prevState = state.state;
199
+ state.state = params.state;
200
+ state.lastActivity = Date.now();
201
+ if (params.state === "idle") state.queueDepth = Math.max(0, state.queueDepth - 1);
202
+ if (!isProbeSession && diag.isEnabled("debug")) diag.debug(`session state: sessionId=${state.sessionId ?? "unknown"} sessionKey=${state.sessionKey ?? "unknown"} prev=${prevState} new=${params.state} reason="${params.reason ?? ""}" queueDepth=${state.queueDepth}`);
203
+ emitDiagnosticEvent({
204
+ type: "session.state",
205
+ sessionId: state.sessionId,
206
+ sessionKey: state.sessionKey,
207
+ prevState,
208
+ state: params.state,
209
+ reason: params.reason,
210
+ queueDepth: state.queueDepth
211
+ });
212
+ markActivity();
213
+ }
214
+ function logSessionStuck(params) {
215
+ const state = getDiagnosticSessionState(params);
216
+ diag.warn(`stuck session: sessionId=${state.sessionId ?? "unknown"} sessionKey=${state.sessionKey ?? "unknown"} state=${params.state} age=${Math.round(params.ageMs / 1e3)}s queueDepth=${state.queueDepth}`);
217
+ emitDiagnosticEvent({
218
+ type: "session.stuck",
219
+ sessionId: state.sessionId,
220
+ sessionKey: state.sessionKey,
221
+ state: params.state,
222
+ ageMs: params.ageMs,
223
+ queueDepth: state.queueDepth
224
+ });
225
+ markActivity();
226
+ }
227
+ function logLaneEnqueue(lane, queueSize) {
228
+ diag.debug(`lane enqueue: lane=${lane} queueSize=${queueSize}`);
229
+ emitDiagnosticEvent({
230
+ type: "queue.lane.enqueue",
231
+ lane,
232
+ queueSize
233
+ });
234
+ markActivity();
235
+ }
236
+ function logLaneDequeue(lane, waitMs, queueSize) {
237
+ diag.debug(`lane dequeue: lane=${lane} waitMs=${waitMs} queueSize=${queueSize}`);
238
+ emitDiagnosticEvent({
239
+ type: "queue.lane.dequeue",
240
+ lane,
241
+ queueSize,
242
+ waitMs
243
+ });
244
+ markActivity();
245
+ }
246
+ function logToolLoopAction(params) {
247
+ const payload = `tool loop: sessionId=${params.sessionId ?? "unknown"} sessionKey=${params.sessionKey ?? "unknown"} tool=${params.toolName} level=${params.level} action=${params.action} detector=${params.detector} count=${params.count}${params.pairedToolName ? ` pairedTool=${params.pairedToolName}` : ""} message="${params.message}"`;
248
+ if (params.level === "critical") diag.error(payload);
249
+ else diag.warn(payload);
250
+ emitDiagnosticEvent({
251
+ type: "tool.loop",
252
+ sessionId: params.sessionId,
253
+ sessionKey: params.sessionKey,
254
+ toolName: params.toolName,
255
+ level: params.level,
256
+ action: params.action,
257
+ detector: params.detector,
258
+ count: params.count,
259
+ message: params.message,
260
+ pairedToolName: params.pairedToolName
261
+ });
262
+ markActivity();
263
+ }
264
+ let heartbeatInterval = null;
265
+ function startDiagnosticHeartbeat(config) {
266
+ if (heartbeatInterval) return;
267
+ heartbeatInterval = setInterval(() => {
268
+ let heartbeatConfig = config;
269
+ if (!heartbeatConfig) try {
270
+ heartbeatConfig = loadConfig();
271
+ } catch {
272
+ heartbeatConfig = void 0;
273
+ }
274
+ const stuckSessionWarnMs = resolveStuckSessionWarnMs(heartbeatConfig);
275
+ const now = Date.now();
276
+ pruneDiagnosticSessionStates(now, true);
277
+ const activeCount = Array.from(diagnosticSessionStates.values()).filter((s) => s.state === "processing").length;
278
+ const waitingCount = Array.from(diagnosticSessionStates.values()).filter((s) => s.state === "waiting").length;
279
+ const totalQueued = Array.from(diagnosticSessionStates.values()).reduce((sum, s) => sum + s.queueDepth, 0);
280
+ if (!(lastActivityAt > 0 || webhookStats.received > 0 || activeCount > 0 || waitingCount > 0 || totalQueued > 0)) return;
281
+ if (now - lastActivityAt > 12e4 && activeCount === 0 && waitingCount === 0) return;
282
+ diag.debug(`heartbeat: webhooks=${webhookStats.received}/${webhookStats.processed}/${webhookStats.errors} active=${activeCount} waiting=${waitingCount} queued=${totalQueued}`);
283
+ emitDiagnosticEvent({
284
+ type: "diagnostic.heartbeat",
285
+ webhooks: {
286
+ received: webhookStats.received,
287
+ processed: webhookStats.processed,
288
+ errors: webhookStats.errors
289
+ },
290
+ active: activeCount,
291
+ waiting: waitingCount,
292
+ queued: totalQueued
293
+ });
294
+ loadCommandPollBackoffRuntime().then(({ pruneStaleCommandPolls }) => {
295
+ for (const [, state] of diagnosticSessionStates) pruneStaleCommandPolls(state);
296
+ }).catch((err) => {
297
+ diag.debug(`command-poll-backoff prune failed: ${String(err)}`);
298
+ });
299
+ for (const [, state] of diagnosticSessionStates) {
300
+ const ageMs = now - state.lastActivity;
301
+ if (state.state === "processing" && ageMs > stuckSessionWarnMs) logSessionStuck({
302
+ sessionId: state.sessionId,
303
+ sessionKey: state.sessionKey,
304
+ state: state.state,
305
+ ageMs
306
+ });
307
+ }
308
+ }, 3e4);
309
+ heartbeatInterval.unref?.();
310
+ }
311
+ function stopDiagnosticHeartbeat() {
312
+ if (heartbeatInterval) {
313
+ clearInterval(heartbeatInterval);
314
+ heartbeatInterval = null;
315
+ }
316
+ }
317
+
318
+ //#endregion
319
+ export { logMessageQueued as a, logWebhookError as c, startDiagnosticHeartbeat as d, stopDiagnosticHeartbeat as f, onDiagnosticEvent as g, isDiagnosticsEnabled as h, logMessageProcessed as i, logWebhookProcessed as l, emitDiagnosticEvent as m, logLaneDequeue as n, logSessionStateChange as o, getDiagnosticSessionState as p, logLaneEnqueue as r, logToolLoopAction as s, diag as t, logWebhookReceived as u };
@@ -1,5 +1,5 @@
1
- import { n as loadConfig } from "./config-sMifxgre.js";
2
- import { O as createSubsystemLogger } from "./logger-DIb2cGHp.js";
1
+ import { n as loadConfig } from "./config-CMjn_DSB.js";
2
+ import { O as createSubsystemLogger } from "./logger-Bg4vIUJn.js";
3
3
 
4
4
  //#region src/logging/diagnostic-session-state.ts
5
5
  const diagnosticSessionStates = /* @__PURE__ */ new Map();
@@ -4,7 +4,7 @@ import chalk, { Chalk } from "chalk";
4
4
  import fs, { constants } from "node:fs";
5
5
  import { Logger } from "tslog";
6
6
  import os from "node:os";
7
- import json5 from "json5";
7
+ import JSON5 from "json5";
8
8
  import { isDeepStrictEqual, promisify } from "node:util";
9
9
  import fs$1 from "node:fs/promises";
10
10
  import { execFile, execFileSync, spawn } from "node:child_process";
@@ -802,7 +802,7 @@ function readLoggingConfig() {
802
802
  try {
803
803
  if (!fs.existsSync(configPath)) return;
804
804
  const raw = fs.readFileSync(configPath, "utf-8");
805
- const logging = json5.parse(raw)?.logging;
805
+ const logging = JSON5.parse(raw)?.logging;
806
806
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
807
807
  return logging;
808
808
  } catch {
@@ -5861,7 +5861,7 @@ const defaultResolver = {
5861
5861
  resolvedPath,
5862
5862
  rootRealDir
5863
5863
  }),
5864
- parseJson: (raw) => json5.parse(raw)
5864
+ parseJson: (raw) => JSON5.parse(raw)
5865
5865
  };
5866
5866
  /**
5867
5867
  * Resolves all $include directives in a parsed config object.
@@ -13217,7 +13217,7 @@ function resolveConfigPathForDeps(deps) {
13217
13217
  function normalizeDeps(overrides = {}) {
13218
13218
  return {
13219
13219
  fs: overrides.fs ?? fs,
13220
- json5: overrides.json5 ?? json5,
13220
+ json5: overrides.json5 ?? JSON5,
13221
13221
  env: overrides.env ?? process.env,
13222
13222
  homedir: overrides.homedir ?? (() => resolveRequiredHomeDir(overrides.env ?? process.env, os.homedir)),
13223
13223
  configPath: overrides.configPath ?? "",
@@ -13228,11 +13228,11 @@ function maybeLoadDotEnvForConfig(env) {
13228
13228
  if (env !== process.env) return;
13229
13229
  loadDotEnv({ quiet: true });
13230
13230
  }
13231
- function parseConfigJson5(raw, json5$1 = json5) {
13231
+ function parseConfigJson5(raw, json5 = JSON5) {
13232
13232
  try {
13233
13233
  return {
13234
13234
  ok: true,
13235
- parsed: json5$1.parse(raw)
13235
+ parsed: json5.parse(raw)
13236
13236
  };
13237
13237
  } catch (err) {
13238
13238
  return {
@@ -1,4 +1,4 @@
1
- import { t as redactSensitiveText } from "./redact-9WsNyb7S.js";
1
+ import { t as redactSensitiveText } from "./redact-DfACyt0X.js";
2
2
 
3
3
  //#region src/infra/errors.ts
4
4
  function extractErrorCode(err) {
@@ -0,0 +1,54 @@
1
+ import { t as redactSensitiveText } from "./redact-BoNEjbpF.js";
2
+
3
+ //#region src/infra/errors.ts
4
+ function extractErrorCode(err) {
5
+ if (!err || typeof err !== "object") return;
6
+ const code = err.code;
7
+ if (typeof code === "string") return code;
8
+ if (typeof code === "number") return String(code);
9
+ }
10
+ function readErrorName(err) {
11
+ if (!err || typeof err !== "object") return "";
12
+ const name = err.name;
13
+ return typeof name === "string" ? name : "";
14
+ }
15
+ function collectErrorGraphCandidates(err, resolveNested) {
16
+ const queue = [err];
17
+ const seen = /* @__PURE__ */ new Set();
18
+ const candidates = [];
19
+ while (queue.length > 0) {
20
+ const current = queue.shift();
21
+ if (current == null || seen.has(current)) continue;
22
+ seen.add(current);
23
+ candidates.push(current);
24
+ if (!current || typeof current !== "object" || !resolveNested) continue;
25
+ for (const nested of resolveNested(current)) if (nested != null && !seen.has(nested)) queue.push(nested);
26
+ }
27
+ return candidates;
28
+ }
29
+ /**
30
+ * Type guard for NodeJS.ErrnoException (any error with a `code` property).
31
+ */
32
+ function isErrno(err) {
33
+ return Boolean(err && typeof err === "object" && "code" in err);
34
+ }
35
+ function formatErrorMessage(err) {
36
+ let formatted;
37
+ if (err instanceof Error) formatted = err.message || err.name || "Error";
38
+ else if (typeof err === "string") formatted = err;
39
+ else if (typeof err === "number" || typeof err === "boolean" || typeof err === "bigint") formatted = String(err);
40
+ else try {
41
+ formatted = JSON.stringify(err);
42
+ } catch {
43
+ formatted = Object.prototype.toString.call(err);
44
+ }
45
+ return redactSensitiveText(formatted);
46
+ }
47
+ function formatUncaughtError(err) {
48
+ if (extractErrorCode(err) === "INVALID_CONFIG") return formatErrorMessage(err);
49
+ if (err instanceof Error) return redactSensitiveText(err.stack ?? err.message ?? err.name);
50
+ return formatErrorMessage(err);
51
+ }
52
+
53
+ //#endregion
54
+ export { isErrno as a, formatUncaughtError as i, extractErrorCode as n, readErrorName as o, formatErrorMessage as r, collectErrorGraphCandidates as t };
@@ -1,5 +1,5 @@
1
- import { i as logWarn } from "./logger-DIb2cGHp.js";
2
- import { i as createPinnedDispatcher, n as SsrFBlockedError, r as closeDispatcher, s as resolvePinnedHostnameWithPolicy, t as hasProxyEnvConfigured } from "./proxy-env-Cdh-OQYk.js";
1
+ import { i as logWarn } from "./logger-Bg4vIUJn.js";
2
+ import { i as createPinnedDispatcher, n as SsrFBlockedError, r as closeDispatcher, s as resolvePinnedHostnameWithPolicy, t as hasProxyEnvConfigured } from "./proxy-env-D-iVYTBk.js";
3
3
  import { t as bindAbortRelay } from "./fetch-timeout-CR10Uz2k.js";
4
4
  import { EnvHttpProxyAgent } from "undici";
5
5
 
@@ -0,0 +1,156 @@
1
+ import { i as logWarn } from "./logger-DDdrdbDu.js";
2
+ import { t as bindAbortRelay } from "./fetch-timeout-D455O27U.js";
3
+ import { c as resolvePinnedHostnameWithPolicy, n as closeDispatcher, r as createPinnedDispatcher, t as SsrFBlockedError, u as hasProxyEnvConfigured } from "./ssrf-DvsjfpC2.js";
4
+ import { EnvHttpProxyAgent } from "undici";
5
+
6
+ //#region src/infra/net/fetch-guard.ts
7
+ const GUARDED_FETCH_MODE = {
8
+ STRICT: "strict",
9
+ TRUSTED_ENV_PROXY: "trusted_env_proxy"
10
+ };
11
+ const DEFAULT_MAX_REDIRECTS = 3;
12
+ const CROSS_ORIGIN_REDIRECT_SENSITIVE_HEADERS = [
13
+ "authorization",
14
+ "proxy-authorization",
15
+ "cookie",
16
+ "cookie2"
17
+ ];
18
+ function withStrictGuardedFetchMode(params) {
19
+ return {
20
+ ...params,
21
+ mode: GUARDED_FETCH_MODE.STRICT
22
+ };
23
+ }
24
+ function withTrustedEnvProxyGuardedFetchMode(params) {
25
+ return {
26
+ ...params,
27
+ mode: GUARDED_FETCH_MODE.TRUSTED_ENV_PROXY
28
+ };
29
+ }
30
+ function resolveGuardedFetchMode(params) {
31
+ if (params.mode) return params.mode;
32
+ if (params.proxy === "env" && params.dangerouslyAllowEnvProxyWithoutPinnedDns === true) return GUARDED_FETCH_MODE.TRUSTED_ENV_PROXY;
33
+ return GUARDED_FETCH_MODE.STRICT;
34
+ }
35
+ function isRedirectStatus(status) {
36
+ return status === 301 || status === 302 || status === 303 || status === 307 || status === 308;
37
+ }
38
+ function stripSensitiveHeadersForCrossOriginRedirect(init) {
39
+ if (!init?.headers) return init;
40
+ const headers = new Headers(init.headers);
41
+ for (const header of CROSS_ORIGIN_REDIRECT_SENSITIVE_HEADERS) headers.delete(header);
42
+ return {
43
+ ...init,
44
+ headers
45
+ };
46
+ }
47
+ function buildAbortSignal(params) {
48
+ const { timeoutMs, signal } = params;
49
+ if (!timeoutMs && !signal) return {
50
+ signal: void 0,
51
+ cleanup: () => {}
52
+ };
53
+ if (!timeoutMs) return {
54
+ signal,
55
+ cleanup: () => {}
56
+ };
57
+ const controller = new AbortController();
58
+ const timeoutId = setTimeout(controller.abort.bind(controller), timeoutMs);
59
+ const onAbort = bindAbortRelay(controller);
60
+ if (signal) if (signal.aborted) controller.abort();
61
+ else signal.addEventListener("abort", onAbort, { once: true });
62
+ const cleanup = () => {
63
+ clearTimeout(timeoutId);
64
+ if (signal) signal.removeEventListener("abort", onAbort);
65
+ };
66
+ return {
67
+ signal: controller.signal,
68
+ cleanup
69
+ };
70
+ }
71
+ async function fetchWithSsrFGuard(params) {
72
+ const fetcher = params.fetchImpl ?? globalThis.fetch;
73
+ if (!fetcher) throw new Error("fetch is not available");
74
+ const maxRedirects = typeof params.maxRedirects === "number" && Number.isFinite(params.maxRedirects) ? Math.max(0, Math.floor(params.maxRedirects)) : DEFAULT_MAX_REDIRECTS;
75
+ const mode = resolveGuardedFetchMode(params);
76
+ const { signal, cleanup } = buildAbortSignal({
77
+ timeoutMs: params.timeoutMs,
78
+ signal: params.signal
79
+ });
80
+ let released = false;
81
+ const release = async (dispatcher) => {
82
+ if (released) return;
83
+ released = true;
84
+ cleanup();
85
+ await closeDispatcher(dispatcher ?? void 0);
86
+ };
87
+ const visited = /* @__PURE__ */ new Set();
88
+ let currentUrl = params.url;
89
+ let currentInit = params.init ? { ...params.init } : void 0;
90
+ let redirectCount = 0;
91
+ while (true) {
92
+ let parsedUrl;
93
+ try {
94
+ parsedUrl = new URL(currentUrl);
95
+ } catch {
96
+ await release();
97
+ throw new Error("Invalid URL: must be http or https");
98
+ }
99
+ if (!["http:", "https:"].includes(parsedUrl.protocol)) {
100
+ await release();
101
+ throw new Error("Invalid URL: must be http or https");
102
+ }
103
+ let dispatcher = null;
104
+ try {
105
+ const pinned = await resolvePinnedHostnameWithPolicy(parsedUrl.hostname, {
106
+ lookupFn: params.lookupFn,
107
+ policy: params.policy
108
+ });
109
+ if (mode === GUARDED_FETCH_MODE.TRUSTED_ENV_PROXY && hasProxyEnvConfigured()) dispatcher = new EnvHttpProxyAgent();
110
+ else if (params.pinDns !== false) dispatcher = createPinnedDispatcher(pinned);
111
+ const init = {
112
+ ...currentInit ? { ...currentInit } : {},
113
+ redirect: "manual",
114
+ ...dispatcher ? { dispatcher } : {},
115
+ ...signal ? { signal } : {}
116
+ };
117
+ const response = await fetcher(parsedUrl.toString(), init);
118
+ if (isRedirectStatus(response.status)) {
119
+ const location = response.headers.get("location");
120
+ if (!location) {
121
+ await release(dispatcher);
122
+ throw new Error(`Redirect missing location header (${response.status})`);
123
+ }
124
+ redirectCount += 1;
125
+ if (redirectCount > maxRedirects) {
126
+ await release(dispatcher);
127
+ throw new Error(`Too many redirects (limit: ${maxRedirects})`);
128
+ }
129
+ const nextParsedUrl = new URL(location, parsedUrl);
130
+ const nextUrl = nextParsedUrl.toString();
131
+ if (visited.has(nextUrl)) {
132
+ await release(dispatcher);
133
+ throw new Error("Redirect loop detected");
134
+ }
135
+ if (nextParsedUrl.origin !== parsedUrl.origin) currentInit = stripSensitiveHeadersForCrossOriginRedirect(currentInit);
136
+ visited.add(nextUrl);
137
+ response.body?.cancel();
138
+ await closeDispatcher(dispatcher);
139
+ currentUrl = nextUrl;
140
+ continue;
141
+ }
142
+ return {
143
+ response,
144
+ finalUrl: currentUrl,
145
+ release: async () => release(dispatcher)
146
+ };
147
+ } catch (err) {
148
+ if (err instanceof SsrFBlockedError) logWarn(`security: blocked URL fetch (${params.auditContext ?? "url-fetch"}) target=${parsedUrl.origin}${parsedUrl.pathname} reason=${err.message}`);
149
+ await release(dispatcher);
150
+ throw err;
151
+ }
152
+ }
153
+ }
154
+
155
+ //#endregion
156
+ export { withStrictGuardedFetchMode as n, withTrustedEnvProxyGuardedFetchMode as r, fetchWithSsrFGuard as t };
@@ -1,7 +1,7 @@
1
- import { B as isSymlinkOpenError, L as hasNodeErrorCode, N as sameFileIdentity, R as isNotFoundPathError, z as isPathInside } from "./run-with-concurrency-EUEKeAa8.js";
2
- import { i as logWarn } from "./logger-DIb2cGHp.js";
1
+ import { B as isSymlinkOpenError, L as hasNodeErrorCode, N as sameFileIdentity, R as isNotFoundPathError, z as isPathInside } from "./run-with-concurrency-CYcPpb5E.js";
2
+ import { i as logWarn } from "./logger-Bg4vIUJn.js";
3
3
  import { l as expandHomePrefix } from "./paths-Duwviem_.js";
4
- import { n as assertNoPathAliasEscape } from "./path-alias-guards-BfpU4lAT.js";
4
+ import { n as assertNoPathAliasEscape } from "./path-alias-guards-DSCFtpsd.js";
5
5
  import path from "node:path";
6
6
  import { constants } from "node:fs";
7
7
  import os from "node:os";