@organizaone/o1-code 0.6.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +10 -0
  2. package/bundled/qc-helper/docs/quickstart.md +1 -1
  3. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +42 -36
  4. package/chunks/{MaxSizedBox-5EOREWNX.js → MaxSizedBox-YRO4IP7D.js} +23 -23
  5. package/chunks/{StandaloneSessionPicker-3OCB32JD.js → StandaloneSessionPicker-HM6FRRNB.js} +39 -39
  6. package/chunks/{acp-subagent-executor-JTNA5F4Q.js → acp-subagent-executor-GKUWPZ3X.js} +24 -24
  7. package/chunks/{acpAgent-IS2JKYZV.js → acpAgent-NM2GJZPA.js} +65 -65
  8. package/chunks/{agent-U5KE7R4X.js → agent-VI6IBJKP.js} +11 -11
  9. package/chunks/{agent-headless-VL764VUV.js → agent-headless-RG2RANBY.js} +11 -11
  10. package/chunks/{anthropicContentGenerator-I7B3ZJTH.js → anthropicContentGenerator-OUXKGYR3.js} +5 -5
  11. package/chunks/{bridge-4GFWUTJN.js → bridge-ASDRIBGU.js} +24 -24
  12. package/chunks/{build-RFEU7TIS.js → build-HLEIVF4Y.js} +1 -1
  13. package/chunks/{chunk-WVEKU4MO.js → chunk-2R42INUX.js} +2 -2
  14. package/chunks/{chunk-KCIKBXEW.js → chunk-2S3QOYP4.js} +4 -4
  15. package/chunks/{chunk-SHDHN4UM.js → chunk-2TURUYOS.js} +1 -1
  16. package/chunks/{chunk-XNOIGECT.js → chunk-33RS64W5.js} +10 -10
  17. package/chunks/{chunk-4ZTCFNSU.js → chunk-3HBUBIMD.js} +1 -1
  18. package/chunks/{chunk-IF22E34Z.js → chunk-3LIB2FAU.js} +3 -3
  19. package/chunks/{chunk-GKX63AXY.js → chunk-3ODGANQH.js} +2 -2
  20. package/chunks/{chunk-7UG5NBEG.js → chunk-3T5ZVERP.js} +1 -1
  21. package/chunks/{chunk-IFJUYGAZ.js → chunk-4FEIAOCC.js} +1 -1
  22. package/chunks/{chunk-X2RYRNAP.js → chunk-4IDJJ4KI.js} +2 -2
  23. package/chunks/{chunk-JY65SH65.js → chunk-5W2RZUTF.js} +3 -3
  24. package/chunks/{chunk-TUQWDNKR.js → chunk-656G544G.js} +2 -2
  25. package/chunks/{chunk-A6R5ERJF.js → chunk-6CNTKWVU.js} +4 -4
  26. package/chunks/{chunk-NEG6TBRH.js → chunk-7QFVAEBE.js} +1 -1
  27. package/chunks/{chunk-KQRLWGYH.js → chunk-7UK4SIHI.js} +1 -1
  28. package/chunks/{chunk-C2RMEAXF.js → chunk-AC75ZC3R.js} +1 -1
  29. package/chunks/{chunk-SJLUEEH6.js → chunk-BMWNSOKM.js} +2 -2
  30. package/chunks/{chunk-VEFKFFT5.js → chunk-CK53F45C.js} +1 -1
  31. package/chunks/{chunk-DD5QAE42.js → chunk-CLYICZHJ.js} +4 -4
  32. package/chunks/{chunk-KPGPUSJ4.js → chunk-CPQGFFDW.js} +5 -5
  33. package/chunks/{chunk-4YYRPA6G.js → chunk-CS7C2L7J.js} +5 -5
  34. package/chunks/{chunk-XMR45LXQ.js → chunk-CVAGYXMP.js} +1 -1
  35. package/chunks/{chunk-3VVXMGS2.js → chunk-CWSGGQLH.js} +91 -26
  36. package/chunks/{chunk-L2OTZN7G.js → chunk-D4GF3Z3J.js} +1 -1
  37. package/chunks/{chunk-35XZ5JAH.js → chunk-DEULKIEJ.js} +1 -1
  38. package/chunks/{chunk-HFBSP3VC.js → chunk-EIPBVTYB.js} +1 -1
  39. package/chunks/{chunk-3RRITSOA.js → chunk-EQQUC6HX.js} +2 -2
  40. package/chunks/{chunk-73JQWXED.js → chunk-F477I5JN.js} +2 -2
  41. package/chunks/{chunk-DIVWC7JL.js → chunk-FIIOIJX6.js} +5 -5
  42. package/chunks/{chunk-VL3VAUJC.js → chunk-FRRKENS6.js} +3 -3
  43. package/chunks/{chunk-G7HMFP3U.js → chunk-GKCZEQC7.js} +270 -581
  44. package/chunks/{chunk-PVQB3PSU.js → chunk-GLKPKVRO.js} +1 -1
  45. package/chunks/{chunk-NWQPYJVP.js → chunk-GTNYSOQ2.js} +3 -3
  46. package/chunks/{chunk-LKTMEG3O.js → chunk-HFW4YMBT.js} +2 -2
  47. package/chunks/{chunk-WFUXHQZO.js → chunk-IBPY5AJI.js} +31 -9
  48. package/chunks/{chunk-Y2DKG24P.js → chunk-IPTVBAQ5.js} +1 -1
  49. package/chunks/{chunk-2TR3LXCO.js → chunk-IUHFMWMV.js} +4 -4
  50. package/chunks/{chunk-HWHXSAP6.js → chunk-J2OKRT7N.js} +10 -10
  51. package/chunks/{chunk-LDZQTXZL.js → chunk-JGEPZYTM.js} +4 -4
  52. package/chunks/{chunk-FNOLXMFM.js → chunk-JVFO6PPS.js} +1 -1
  53. package/chunks/{chunk-OCUQJADH.js → chunk-KAF4RHGK.js} +1 -1
  54. package/chunks/{chunk-XPFD45HB.js → chunk-KAW6TQNC.js} +6 -6
  55. package/chunks/{chunk-25B3YO64.js → chunk-KDS2IANW.js} +1 -1
  56. package/chunks/{chunk-ZCCCPNWD.js → chunk-KM2K4ERE.js} +1 -1
  57. package/chunks/{chunk-J5XJUCP6.js → chunk-L66MHJW7.js} +3 -3
  58. package/chunks/{chunk-NCYMEGY4.js → chunk-L6HTWOTF.js} +5 -5
  59. package/chunks/{chunk-SNSYYPUE.js → chunk-LBT6PT4Z.js} +7 -7
  60. package/chunks/{chunk-ZJYMX7GI.js → chunk-LIM5RBA5.js} +3 -3
  61. package/chunks/{chunk-FVXJFEVA.js → chunk-LQELD265.js} +1 -1
  62. package/chunks/{chunk-4D3AFN6X.js → chunk-LQWYK66V.js} +3 -3
  63. package/chunks/{chunk-OUANBR2O.js → chunk-LTQLCF23.js} +1 -1
  64. package/chunks/{chunk-ADSXYGOQ.js → chunk-LU2Z7WRX.js} +1 -1
  65. package/chunks/{chunk-KWUNXWMZ.js → chunk-MFSMNYXY.js} +8 -8
  66. package/chunks/{chunk-SRM5ACHK.js → chunk-MUX4EKXE.js} +1 -1
  67. package/chunks/{chunk-NIIG7L3H.js → chunk-N335XRGH.js} +1 -1
  68. package/chunks/{chunk-PIMJCQZQ.js → chunk-OOLEXGWB.js} +1 -1
  69. package/chunks/{chunk-ZOZJOC2D.js → chunk-OU5QAYET.js} +2 -2
  70. package/chunks/{chunk-5OZ6R5FD.js → chunk-OZ2OT5BC.js} +3 -3
  71. package/chunks/{chunk-YPHLY3RQ.js → chunk-PCCUFQHX.js} +5 -5
  72. package/chunks/{chunk-2XWTDVCK.js → chunk-PL7VG3H5.js} +2 -2
  73. package/chunks/{chunk-YNYV52Z4.js → chunk-Q2SEZDMU.js} +14 -3
  74. package/chunks/{chunk-PZG6YNNW.js → chunk-Q7ZF32SN.js} +1 -1
  75. package/chunks/{chunk-DGB4GDUC.js → chunk-QBCC6DDB.js} +15 -15
  76. package/chunks/{chunk-SRUCOHM3.js → chunk-QG6AA2EE.js} +6 -6
  77. package/chunks/{chunk-SD4FTFLM.js → chunk-QLXCD56R.js} +2 -2
  78. package/chunks/{chunk-OYF5BLWF.js → chunk-QP3UCTAH.js} +1 -1
  79. package/chunks/{chunk-B5RUUS5Z.js → chunk-R4FAETL7.js} +1 -1
  80. package/chunks/{chunk-TA5SQUCP.js → chunk-R5ILEKY4.js} +1 -1
  81. package/chunks/{chunk-2ZZOVOXT.js → chunk-RCVRWBNS.js} +2 -2
  82. package/chunks/{chunk-DFHGNP5W.js → chunk-RQ2LQ5RB.js} +17 -17
  83. package/chunks/{chunk-CXL3KGXN.js → chunk-RZQASTZP.js} +7 -7
  84. package/chunks/{chunk-MRDWUFJ3.js → chunk-SB7HLYND.js} +3 -3
  85. package/chunks/{chunk-NHVJTPZA.js → chunk-SRJTWTB2.js} +33 -33
  86. package/chunks/{chunk-B74GMYXF.js → chunk-SVMEPMAZ.js} +30 -30
  87. package/chunks/{chunk-YK4BICUN.js → chunk-SX5AXFZV.js} +3 -3
  88. package/chunks/{chunk-WI4BVBZO.js → chunk-SYR2YWGQ.js} +1 -1
  89. package/chunks/{chunk-SALGNBVH.js → chunk-U2A23HJU.js} +3 -3
  90. package/chunks/{chunk-V2WRTFQU.js → chunk-UFUFCLDL.js} +5 -5
  91. package/chunks/{chunk-QKJBBOEM.js → chunk-UKUAUI76.js} +2 -2
  92. package/chunks/{chunk-ZTD5FNCI.js → chunk-UUPZUWG5.js} +1 -1
  93. package/chunks/{chunk-UDJURQZ6.js → chunk-VCKGH2UF.js} +3 -3
  94. package/chunks/{chunk-BXRUYSL6.js → chunk-W3T7KUBS.js} +1 -1
  95. package/chunks/{chunk-AT74D3S6.js → chunk-WWRYYBOB.js} +12 -3
  96. package/chunks/{chunk-NHRNNWWS.js → chunk-XAVVXBNC.js} +1 -1
  97. package/chunks/{chunk-BBH77V6I.js → chunk-XCO4NKA5.js} +1 -1
  98. package/chunks/{chunk-N2PY5BWY.js → chunk-XJPQ7YBB.js} +1 -1
  99. package/chunks/{chunk-UQ6BHHFA.js → chunk-XLMO7VIH.js} +4 -4
  100. package/chunks/{chunk-IKDFLXTG.js → chunk-YB735VNN.js} +4 -4
  101. package/chunks/{chunk-CLRPG355.js → chunk-YBIK7JBH.js} +3 -3
  102. package/chunks/{chunk-GT5QP7HM.js → chunk-YLMKYLNH.js} +2 -2
  103. package/chunks/{chunk-HXLT4YHM.js → chunk-YNFJLMGL.js} +9 -9
  104. package/chunks/{chunk-KFOL4KHG.js → chunk-YQP3ETMA.js} +8 -8
  105. package/chunks/{chunk-5KLD2C2A.js → chunk-Z32ZO4N2.js} +1 -1
  106. package/chunks/{chunk-BO53R5FT.js → chunk-ZEVIKHNQ.js} +3 -3
  107. package/chunks/{chunk-XQGFM4KU.js → chunk-ZT4BSBY4.js} +5 -5
  108. package/chunks/{codex-subagent-executor-H23KDM2L.js → codex-subagent-executor-RHTAEFXD.js} +24 -24
  109. package/chunks/{contextCommand-FTM7H7IU.js → contextCommand-CQFH75BZ.js} +23 -23
  110. package/chunks/{core-runtime-EOPJ5NTV.js → core-runtime-5SGS3SVD.js} +21 -21
  111. package/chunks/{create-sub-session-TYQLJBIC.js → create-sub-session-G7VWSOXC.js} +22 -22
  112. package/chunks/{daemon-git-worktree-guard-XYJOCQD4.js → daemon-git-worktree-guard-IUFLX2O4.js} +21 -21
  113. package/chunks/{daemon-status-provider-WSERMTQ3.js → daemon-status-provider-6ZTLYNNK.js} +29 -29
  114. package/chunks/{daemon-trust-policy-2TLIJCGQ.js → daemon-trust-policy-254OGOCS.js} +27 -27
  115. package/chunks/{daemon-trust-policy-monitor-5WZ6JDKZ.js → daemon-trust-policy-monitor-LGXXCQEP.js} +27 -27
  116. package/chunks/{deferred-core-runtime-55WMDAXO.js → deferred-core-runtime-7OORZHNH.js} +21 -21
  117. package/chunks/{edit-UPV3RDKW.js → edit-V46XHSY7.js} +13 -13
  118. package/chunks/{en-S424EGDF.js → en-VJBVNTY4.js} +13 -0
  119. package/chunks/{enterPlanMode-IFHOH44O.js → enterPlanMode-ZPTXYQMB.js} +11 -11
  120. package/chunks/{environment-YEQIXHG6.js → environment-4JNOLQYX.js} +23 -23
  121. package/chunks/{errors-X2UJSPQL.js → errors-XFCASXKU.js} +23 -23
  122. package/chunks/{execution-tool-EXIGBLTL.js → execution-tool-45FRLDNU.js} +13 -13
  123. package/chunks/{execution-worker-6PKEW2P6.js → execution-worker-YUQGSB2E.js} +16 -16
  124. package/chunks/{exitPlanMode-7NRDPCOW.js → exitPlanMode-IVJH3OXX.js} +11 -11
  125. package/chunks/{fast-path-I65CU5I2.js → fast-path-XN7NK4CH.js} +2 -2
  126. package/chunks/{glob-XTHACKUG.js → glob-NHZYR52J.js} +11 -11
  127. package/chunks/{goal-tools-KL2MBM6T.js → goal-tools-GKFYH6GK.js} +11 -11
  128. package/chunks/{handleAutoUpdate-AN36IGA3.js → handleAutoUpdate-SLCHZHWT.js} +24 -24
  129. package/chunks/{i18n-ZOWYH5SP.js → i18n-4AFHUMG2.js} +22 -22
  130. package/chunks/{initializer-7VQKSVVS.js → initializer-CDFNNZPN.js} +27 -27
  131. package/chunks/{installationInfo-L6JLTT7O.js → installationInfo-WUQTTZHB.js} +21 -21
  132. package/chunks/{list-HZEUOA3H.js → list-K2EIWBPE.js} +29 -29
  133. package/chunks/{llm-VIAH4AFT.js → llm-TLNZYLXJ.js} +53 -53
  134. package/chunks/{llm-content-generator-AE3URFE7.js → llm-content-generator-OXL4S7KY.js} +3 -3
  135. package/chunks/{loadedSettingsAdapter-LLENP2KA.js → loadedSettingsAdapter-AUILEI5N.js} +27 -27
  136. package/chunks/{local-execution-environment-B2UY3HMI.js → local-execution-environment-OSK4IEYP.js} +16 -16
  137. package/chunks/{loggingContentGenerator-5I5NLC6I.js → loggingContentGenerator-FINQP2Y4.js} +12 -12
  138. package/chunks/{managed-npm-update-6XAPVQBT.js → managed-npm-update-5DFVQ475.js} +21 -21
  139. package/chunks/{mcp-PIYFXVT4.js → mcp-ZFQGAZRK.js} +27 -27
  140. package/chunks/{model-call-collection-7DIS7C2G.js → model-call-collection-3WVMJQ5M.js} +1 -1
  141. package/chunks/{model-configuration-J7N3CHD5.js → model-configuration-TCLVVCJS.js} +28 -28
  142. package/chunks/{modelConfigUtils-6YYQJIHD.js → modelConfigUtils-LNDNXLJV.js} +23 -23
  143. package/chunks/{monitor-5GBFRXN7.js → monitor-DVKR4R64.js} +11 -11
  144. package/chunks/{nonInteractiveCli-YFE2ILFH.js → nonInteractiveCli-JNH7PLWY.js} +56 -56
  145. package/chunks/{nonInteractiveToolExecutor-BRFDL2BK.js → nonInteractiveToolExecutor-L2K4LU2P.js} +12 -12
  146. package/chunks/{notebook-edit-ORYWDEMK.js → notebook-edit-LLJZI52V.js} +12 -12
  147. package/chunks/{omni-ANTNX2XB.js → omni-4T23JD65.js} +9 -9
  148. package/chunks/{openaiContentGenerator-AIWBAUPV.js → openaiContentGenerator-Y5AW2S3K.js} +7 -7
  149. package/chunks/{openaiResponsesContentGenerator-SABJHG34.js → openaiResponsesContentGenerator-VHLQZH36.js} +3 -3
  150. package/chunks/{processUtils-UAADVXTD.js → processUtils-OGQTTYVO.js} +2 -2
  151. package/chunks/{prompt-terminal-ledger-I7POO7OK.js → prompt-terminal-ledger-M23SMYZS.js} +22 -22
  152. package/chunks/{pt-OHD6RIUC.js → pt-7ZZUXID3.js} +13 -0
  153. package/chunks/{reactive-degrade-VHPS7U44.js → reactive-degrade-CQ7ALF7Z.js} +8 -8
  154. package/chunks/{read-file-SERUEXAP.js → read-file-TGXV7LRJ.js} +2 -2
  155. package/chunks/{resumeHistoryUtils-B6GT4AOO.js → resumeHistoryUtils-5UTZ2RZE.js} +26 -26
  156. package/chunks/{ripGrep-2NTNXBII.js → ripGrep-MJXCIT62.js} +3 -3
  157. package/chunks/{run-o1-code-serve-WROVR5TA.js → run-o1-code-serve-NFPIVOYJ.js} +32 -32
  158. package/chunks/{sandboxConfig-UVIRIBNM.js → sandboxConfig-UOAIYSNY.js} +21 -21
  159. package/chunks/{scheduled-tasks-ILH3HQXS.js → scheduled-tasks-4MX5JTOU.js} +27 -27
  160. package/chunks/{scheduler-Y2TYB53M.js → scheduler-ZZCLKFWM.js} +23 -23
  161. package/chunks/{serve-YUVXMXLS.js → serve-DGO6JMBA.js} +27 -27
  162. package/chunks/{server-K75VXRXS.js → server-N6BPWDPD.js} +57 -57
  163. package/chunks/{session-KZSKLSES.js → session-4YPHCRFC.js} +57 -57
  164. package/chunks/{session-attachments-root-MYYIOBTM.js → session-attachments-root-RSL2YSFZ.js} +21 -21
  165. package/chunks/{session-pr-refresh-33KB2JND.js → session-pr-refresh-RPM3VLUQ.js} +26 -26
  166. package/chunks/{settings-HVF3IJ2I.js → settings-GSPRMMOT.js} +26 -26
  167. package/chunks/{shell-PN27CAHY.js → shell-HWIE3YJY.js} +11 -11
  168. package/chunks/{skill-L6CRUQRR.js → skill-PAU4TRSD.js} +3 -3
  169. package/chunks/{skill-settings-3Y3SG5O5.js → skill-settings-UFOTSN37.js} +27 -27
  170. package/chunks/{spawnChannel-XSDXM46P.js → spawnChannel-7IQPYOPP.js} +23 -23
  171. package/chunks/{standalone-update-3LDGOGBF.js → standalone-update-U7HGJB2O.js} +23 -23
  172. package/chunks/{startInteractiveUI-GIDY23D3.js → startInteractiveUI-N7XQZNFX.js} +2780 -2438
  173. package/chunks/{team-create-LFN7HQGC.js → team-create-4QRHJTSV.js} +11 -11
  174. package/chunks/{team-plan-approval-EFVOZVSP.js → team-plan-approval-U6QCZ3I7.js} +11 -11
  175. package/chunks/{terminal-image-renderer-GOF6SZEL.js → terminal-image-renderer-QRYTSBBI.js} +21 -21
  176. package/chunks/{theme-manager-MQ7UIBL2.js → theme-manager-VFNWDS5X.js} +21 -21
  177. package/chunks/{tool-result-media-NQAPMXYD.js → tool-result-media-NLHN7JZU.js} +9 -9
  178. package/chunks/{tool-search-JJ7KQQ5S.js → tool-search-QGTV2ON5.js} +2 -2
  179. package/chunks/{total-session-admission-GTFQVE5J.js → total-session-admission-PUJHR6FR.js} +24 -24
  180. package/chunks/{trustedFolders-W3AE6S4D.js → trustedFolders-CLVE6DRI.js} +22 -22
  181. package/chunks/{update-relaunch-VIWAZWCG.js → update-relaunch-IPSN33OR.js} +5 -5
  182. package/chunks/{updateCheck-EHHLVFT3.js → updateCheck-REWSU2AC.js} +23 -23
  183. package/chunks/{upload-config-6Z3CPQTV.js → upload-config-W3AEV3WP.js} +6 -6
  184. package/chunks/{useAutoAcceptIndicator-2BDM2ZLG.js → useAutoAcceptIndicator-2JODXT2R.js} +30 -30
  185. package/chunks/{validateNonInterActiveAuth-SBUIY7JB.js → validateNonInterActiveAuth-P5P5SI6T.js} +53 -53
  186. package/chunks/{version-LJX5EMFD.js → version-KCTVVQ6T.js} +1 -1
  187. package/chunks/{web-fetch-NMKFGF5A.js → web-fetch-3Z32TKL7.js} +2 -2
  188. package/chunks/{web-search-FT3NC3MF.js → web-search-T7R5BOOJ.js} +7 -7
  189. package/chunks/{workflow-5WQJENZ6.js → workflow-XFMT6MFA.js} +12 -12
  190. package/chunks/{workspace-providers-status-U3G2IL7D.js → workspace-providers-status-E2DKABEG.js} +33 -33
  191. package/chunks/{workspace-registration-store-XGN5KM7D.js → workspace-registration-store-FWU3W65M.js} +1 -1
  192. package/chunks/{workspace-registry-V7Z7GRVC.js → workspace-registry-EX6Q35BY.js} +24 -24
  193. package/chunks/{workspace-runtime-coordinator-TEWHWJZI.js → workspace-runtime-coordinator-RIA3VIAY.js} +25 -25
  194. package/chunks/{workspace-service-JM6TECMD.js → workspace-service-DDCBDEWZ.js} +31 -31
  195. package/chunks/{workspace-skills-status-ESUOVYAN.js → workspace-skills-status-B4J7CHRJ.js} +30 -30
  196. package/chunks/{workspace-trust-reconciler-PGZAZMT3.js → workspace-trust-reconciler-HMJYGYMS.js} +30 -30
  197. package/chunks/{write-file-AHGK3PK4.js → write-file-HVNSGPXF.js} +13 -13
  198. package/chunks/{zoom-image-IU5DRM6D.js → zoom-image-WLBUTVWK.js} +2 -2
  199. package/cli.js +12 -12
  200. package/execution-worker.js +1 -1
  201. package/export-transcript-document.js +1 -1
  202. package/locales/en.js +19 -0
  203. package/locales/pt.js +19 -0
  204. package/package.json +2 -2
  205. package/release-notes.json +21 -0
  206. package/vendor/o1-connect/.lintstagedrc.mjs +7 -0
  207. package/vendor/o1-connect/README.md +15 -7
  208. package/vendor/o1-connect/VENDOR.json +4 -4
  209. package/vendor/o1-connect/lib.d.mts +9 -1
  210. package/vendor/o1-connect/lib.mjs +444 -861
  211. package/web-shell/assets/{abnfDiagram-VCTEODGH-PVbSspuv.js → abnfDiagram-VCTEODGH-x0S71JE3.js} +1 -1
  212. package/web-shell/assets/{arc-VsWasC21.js → arc-Cz75q_IV.js} +1 -1
  213. package/web-shell/assets/{architectureDiagram-5GKGNRK7-CQGJih80.js → architectureDiagram-5GKGNRK7-C_dL06R0.js} +1 -1
  214. package/web-shell/assets/{blockDiagram-NRAW4CY4-Df9FTUp0.js → blockDiagram-NRAW4CY4-Vs4QVgsM.js} +1 -1
  215. package/web-shell/assets/{c4Diagram-UCG6FXSJ-Cq2wSg56.js → c4Diagram-UCG6FXSJ-CgRK6Jz0.js} +1 -1
  216. package/web-shell/assets/channel-pE79vspw.js +1 -0
  217. package/web-shell/assets/{chunk-2Q5K7J3B-Chp7JPzQ.js → chunk-2Q5K7J3B-6wq4aY1J.js} +1 -1
  218. package/web-shell/assets/{chunk-5VM5RSS4-gml5kfyF.js → chunk-5VM5RSS4-Bo9m0SiQ.js} +1 -1
  219. package/web-shell/assets/{chunk-F27PBJKO-By_hW2gT.js → chunk-F27PBJKO-C4L0MjFe.js} +1 -1
  220. package/web-shell/assets/{chunk-G27WJ6UU-8NLL7TjL.js → chunk-G27WJ6UU-BDQDTWF7.js} +1 -1
  221. package/web-shell/assets/{chunk-JWPE2WC7-Bz8c6lcT.js → chunk-JWPE2WC7-DT5_JHb_.js} +1 -1
  222. package/web-shell/assets/{chunk-LCL6LL3I-ZkGZaXXw.js → chunk-LCL6LL3I-1yVri9gU.js} +1 -1
  223. package/web-shell/assets/{chunk-POPQ4Y6H-B8iYNlKK.js → chunk-POPQ4Y6H-CryAaWS9.js} +1 -1
  224. package/web-shell/assets/{chunk-SVP7TREG-DwVdGXs4.js → chunk-SVP7TREG-D0mJDzI7.js} +1 -1
  225. package/web-shell/assets/{chunk-XXDRQBXY-CsCbtvRS.js → chunk-XXDRQBXY-C5ffwsCM.js} +1 -1
  226. package/web-shell/assets/classDiagram-DTDB5LWJ-0QITOU6l.js +1 -0
  227. package/web-shell/assets/classDiagram-v2-JRS7N3AN-0QITOU6l.js +1 -0
  228. package/web-shell/assets/{cose-bilkent-JH36ORCC-DwnxQIaV.js → cose-bilkent-JH36ORCC-DHE8Zr-F.js} +1 -1
  229. package/web-shell/assets/{cynefin-OW5HDTMX-BvGw520V.js → cynefin-OW5HDTMX-BnL4xySG.js} +1 -1
  230. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DErV7NUm.js → cynefinDiagram-5FMLGOSQ-C_Vfdoz6.js} +1 -1
  231. package/web-shell/assets/{dagre-3AP2YEHR-DUKJascy.js → dagre-3AP2YEHR-DYpnUd3X.js} +1 -1
  232. package/web-shell/assets/{diagram-S7CK7UJ4-DC2A1fK2.js → diagram-S7CK7UJ4-Oar04chd.js} +1 -1
  233. package/web-shell/assets/{diagram-UQ7AKVKN-Dv3eUqcO.js → diagram-UQ7AKVKN-CdWEMvLi.js} +1 -1
  234. package/web-shell/assets/{diagram-VSXAHHWV-B_k7qlTN.js → diagram-VSXAHHWV-Bir5CZNv.js} +1 -1
  235. package/web-shell/assets/{diagram-VX7I27RA-DH7Bx528.js → diagram-VX7I27RA-Bm1O69Id.js} +1 -1
  236. package/web-shell/assets/{diagram-Z3DM3KII-CtOVvMVx.js → diagram-Z3DM3KII-r1AOVQ0e.js} +1 -1
  237. package/web-shell/assets/{ebnfDiagram-PWID7BFC-DrkkLJdI.js → ebnfDiagram-PWID7BFC-DevtH3i5.js} +1 -1
  238. package/web-shell/assets/{erDiagram-SSCWMZ5O-C0uNwMNd.js → erDiagram-SSCWMZ5O-SFNjhQIj.js} +1 -1
  239. package/web-shell/assets/{flowDiagram-A5DVABFB-B3sbye5k.js → flowDiagram-A5DVABFB-DgJ1KxI-.js} +1 -1
  240. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-D3Ms91Ay.js → ganttDiagram-EL5Y4UJY-oAT0EGwX.js} +1 -1
  241. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-BHrKQ3iH.js → gitGraphDiagram-WWUBYQGX-vCX1mSs_.js} +1 -1
  242. package/web-shell/assets/{index-DvuDn2OC.js → index-BEFE9XEw.js} +1 -1
  243. package/web-shell/assets/{index-BL5DGwqU.js → index-Cqj9WNLr.js} +3 -3
  244. package/web-shell/assets/{infoDiagram-RXCK75RN-DWyT73_I.js → infoDiagram-RXCK75RN-_NepfAGI.js} +1 -1
  245. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DybYyMJT.js → ishikawaDiagram-5VMMS53U-Bk3wYLfy.js} +1 -1
  246. package/web-shell/assets/{journeyDiagram-EYS64GPL-D-v8PiYH.js → journeyDiagram-EYS64GPL-DUUHuAKD.js} +1 -1
  247. package/web-shell/assets/{kanban-definition-3QL26DDD-BUWrNJxx.js → kanban-definition-3QL26DDD-BYaNwMqV.js} +1 -1
  248. package/web-shell/assets/{layout-DTXwh-A4.js → layout-CH_OWxT7.js} +1 -1
  249. package/web-shell/assets/{linear-C8iFKFtJ.js → linear-BEpGEQC7.js} +1 -1
  250. package/web-shell/assets/{mermaid.core-DZcsifbF.js → mermaid.core-DhaXOJnx.js} +6 -6
  251. package/web-shell/assets/{mindmap-definition-FBJOCRG2-D1OyJM6T.js → mindmap-definition-FBJOCRG2-Ci7nWQV9.js} +1 -1
  252. package/web-shell/assets/{pegDiagram-XKGWAZYB-b2dM3687.js → pegDiagram-XKGWAZYB-CgNvWMe-.js} +1 -1
  253. package/web-shell/assets/{pieDiagram-E7YTZNPT-n-qlKbdF.js → pieDiagram-E7YTZNPT-4V5XLQqW.js} +1 -1
  254. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-DbiRHm_L.js → quadrantDiagram-AXDQQJYC-DPdypjO1.js} +1 -1
  255. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CAUM_6wo.js → railroadDiagram-O6MQD6OU-BjXTf6pU.js} +1 -1
  256. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-D_YoabOy.js → requirementDiagram-EFPCY7ZU-DJss5V5T.js} +1 -1
  257. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-C17c2F-F.js → sankeyDiagram-P5KCCOFB-D75QSw7n.js} +1 -1
  258. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DtEF8IM9.js → sequenceDiagram-WJ2MYXX4-BDhXaEt_.js} +1 -1
  259. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CEayyeYf.js → sizeCapture-X5ZJPWSS-fFMG4DvB.js} +1 -1
  260. package/web-shell/assets/{stateDiagram-HBIQ2CUA-D34ANpKU.js → stateDiagram-HBIQ2CUA-B1p5bjb3.js} +1 -1
  261. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CSbHD2Wn.js +1 -0
  262. package/web-shell/assets/{swimlanes-XN3QIQJK-CxuDoZvW.js → swimlanes-XN3QIQJK-bPx7cEqz.js} +1 -1
  263. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-DTnMbaNo.js +8 -0
  264. package/web-shell/assets/{timeline-definition-24CTP7MA-ewm8t6bY.js → timeline-definition-24CTP7MA-B3LCneiU.js} +1 -1
  265. package/web-shell/assets/{vennDiagram-4TSXK5OY-J5Luz0Pz.js → vennDiagram-4TSXK5OY-CFmjd4GT.js} +1 -1
  266. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-g9-5UNQz.js → wardleyDiagram-VM6X3IG4-DXyVTjgN.js} +1 -1
  267. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-Dy0uNlVX.js → xychartDiagram-S5SC5T6Z-y2w_UoEl.js} +1 -1
  268. package/web-shell/index.html +1 -1
  269. package/web-shell/sw.js +1 -1
  270. package/web-shell/assets/channel-8zIIJdbY.js +0 -1
  271. package/web-shell/assets/classDiagram-DTDB5LWJ-BZiDhVAk.js +0 -1
  272. package/web-shell/assets/classDiagram-v2-JRS7N3AN-BZiDhVAk.js +0 -1
  273. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BkgMHPaH.js +0 -1
  274. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-B_dlOslo.js +0 -8
@@ -121,7 +121,7 @@ import {
121
121
  stringify,
122
122
  validateGoalProposalReason,
123
123
  validateSkillName
124
- } from "./chunk-TA5SQUCP.js";
124
+ } from "./chunk-R5ILEKY4.js";
125
125
  import {
126
126
  canUseRipgrep
127
127
  } from "./chunk-35RKSP4A.js";
@@ -168,7 +168,7 @@ import {
168
168
  import {
169
169
  buildModelIdContext,
170
170
  resolveModelId
171
- } from "./chunk-PVQB3PSU.js";
171
+ } from "./chunk-GLKPKVRO.js";
172
172
  import {
173
173
  glob,
174
174
  globSync
@@ -246,7 +246,7 @@ import {
246
246
  } from "./chunk-SQX3PXHY.js";
247
247
  import {
248
248
  isOmniDeliveryActive
249
- } from "./chunk-NIIG7L3H.js";
249
+ } from "./chunk-N335XRGH.js";
250
250
  import {
251
251
  MediaResourceRegistry,
252
252
  evaluateMediaPolicyToolCall,
@@ -336,7 +336,7 @@ import {
336
336
  import {
337
337
  DashScopeOpenAICompatibleProvider,
338
338
  selectDashScopeThinkingKnob
339
- } from "./chunk-A6R5ERJF.js";
339
+ } from "./chunk-6CNTKWVU.js";
340
340
  import {
341
341
  childLaunchDepth,
342
342
  getCurrentAgentConfiguredToolAllowlist,
@@ -408,7 +408,7 @@ import {
408
408
  resolveSavedModelApiKey,
409
409
  stripRuntimeSnapshotPrefix,
410
410
  validateReasoningCapabilities
411
- } from "./chunk-SHDHN4UM.js";
411
+ } from "./chunk-2TURUYOS.js";
412
412
  import {
413
413
  BaseTokenStorage,
414
414
  KeychainTokenStorage
@@ -508,7 +508,7 @@ import {
508
508
  updateMCPServerStatus,
509
509
  writeLine,
510
510
  writeLineSync
511
- } from "./chunk-HFBSP3VC.js";
511
+ } from "./chunk-EIPBVTYB.js";
512
512
  import {
513
513
  Mutex
514
514
  } from "./chunk-242JUBPM.js";
@@ -599,7 +599,7 @@ import {
599
599
  resolveContentGeneratorConfigWithSources,
600
600
  setGeneratorReasoningEffort,
601
601
  tokenLimit
602
- } from "./chunk-4YYRPA6G.js";
602
+ } from "./chunk-CS7C2L7J.js";
603
603
  import {
604
604
  getOrCreateMcpDispatcher,
605
605
  loadUndici,
@@ -9933,11 +9933,7 @@ import https from "node:https";
9933
9933
  import { isIP } from "node:net";
9934
9934
  import { Duplex } from "node:stream";
9935
9935
  import tls from "node:tls";
9936
- import {
9937
- createHash as createHash3,
9938
- randomBytes as randomBytes3,
9939
- timingSafeEqual
9940
- } from "node:crypto";
9936
+ import { createHash as createHash3, randomBytes as randomBytes3, timingSafeEqual } from "node:crypto";
9941
9937
  import http5 from "node:http";
9942
9938
  import http4 from "node:http";
9943
9939
  import http6 from "node:http";
@@ -9951,6 +9947,7 @@ var PIN = /^sha256\/[A-Za-z0-9+/]{43}=$/;
9951
9947
  var TOKEN = /^[0-9a-f]{64}$/;
9952
9948
  var DEVICE = /^[a-z0-9][a-z0-9_-]{0,31}$/i;
9953
9949
  var MAX_PINS = 4;
9950
+ var MAX_HOSTS = 4;
9954
9951
  var ConnectionCodeError = class extends Error {
9955
9952
  static {
9956
9953
  __name(this, "ConnectionCodeError");
@@ -9979,52 +9976,50 @@ function isLoopbackHost(hostname4) {
9979
9976
  return hostname4 === "127.0.0.1" || hostname4 === "localhost" || hostname4 === "[::1]";
9980
9977
  }
9981
9978
  __name(isLoopbackHost, "isLoopbackHost");
9982
- function validateCode(c) {
9983
- if (!c || typeof c !== "object")
9984
- throw new ConnectionCodeError("the code does not hold a connection");
9985
- const o = c;
9979
+ function originOf(value, what) {
9986
9980
  let url4;
9987
9981
  try {
9988
- url4 = new URL(String(o.url));
9982
+ url4 = new URL(value);
9989
9983
  } catch {
9990
- throw new ConnectionCodeError("the proxy URL is not a URL");
9984
+ throw new ConnectionCodeError(`the proxy ${what} is not a URL`);
9991
9985
  }
9992
9986
  if (!(url4.protocol === "https:" || url4.protocol === "http:" && isLoopbackHost(url4.hostname))) {
9993
- throw new ConnectionCodeError("the proxy URL must be https");
9987
+ throw new ConnectionCodeError(`the proxy ${what} must be https`);
9994
9988
  }
9995
9989
  if (url4.pathname !== "/" || url4.search || url4.hash || url4.username || url4.password) {
9996
- throw new ConnectionCodeError("the proxy URL must be the proxy's base URL");
9990
+ throw new ConnectionCodeError(`the proxy ${what} must be the proxy's base URL`);
9997
9991
  }
9998
- if (typeof o.device !== "string" || !DEVICE.test(o.device))
9999
- throw new ConnectionCodeError("the device name is not valid");
9992
+ return url4.origin;
9993
+ }
9994
+ __name(originOf, "originOf");
9995
+ function validateCode(c) {
9996
+ if (!c || typeof c !== "object") throw new ConnectionCodeError("the code does not hold a connection");
9997
+ const o = c;
9998
+ const url4 = originOf(String(o.url), "URL");
9999
+ if (typeof o.device !== "string" || !DEVICE.test(o.device)) throw new ConnectionCodeError("the device name is not valid");
10000
10000
  if (!Array.isArray(o.pins) || o.pins.length === 0 || o.pins.length > MAX_PINS || !o.pins.every((p2) => typeof p2 === "string" && isPin(p2))) {
10001
10001
  throw new ConnectionCodeError("the pin list is not valid");
10002
10002
  }
10003
- if (typeof o.token !== "string" || !TOKEN.test(o.token))
10004
- throw new ConnectionCodeError("the device token is not valid");
10005
- return {
10006
- url: url4.origin,
10007
- device: o.device,
10008
- pins: [...o.pins],
10009
- token: o.token
10010
- };
10003
+ if (typeof o.token !== "string" || !TOKEN.test(o.token)) throw new ConnectionCodeError("the device token is not valid");
10004
+ let urls;
10005
+ if (o.urls !== void 0) {
10006
+ if (!Array.isArray(o.urls) || o.urls.length === 0 || o.urls.some((u2) => typeof u2 !== "string")) throw new ConnectionCodeError("the failover host list is not valid");
10007
+ urls = o.urls.map((u2, i) => originOf(u2, `failover host ${i + 1}`));
10008
+ const all = [url4, ...urls];
10009
+ if (new Set(all).size !== all.length) throw new ConnectionCodeError("the failover host list repeats a host");
10010
+ if (all.length > MAX_HOSTS) throw new ConnectionCodeError(`the code names more than ${MAX_HOSTS} hosts`);
10011
+ }
10012
+ return { url: url4, ...urls === void 0 ? {} : { urls }, device: o.device, pins: [...o.pins], token: o.token };
10011
10013
  }
10012
10014
  __name(validateCode, "validateCode");
10013
10015
  function decodeConnectionCode(s3) {
10014
10016
  const text = s3.trim();
10015
- if (!text.startsWith(CODE_PREFIX))
10016
- throw new ConnectionCodeError(
10017
- "this is not an o1-connect code (it starts with o1gw1.)"
10018
- );
10017
+ if (!text.startsWith(CODE_PREFIX)) throw new ConnectionCodeError("this is not an o1-connect code (it starts with o1gw1.)");
10019
10018
  let parsed;
10020
10019
  try {
10021
- parsed = JSON.parse(
10022
- Buffer.from(text.slice(CODE_PREFIX.length), "base64url").toString("utf8")
10023
- );
10020
+ parsed = JSON.parse(Buffer.from(text.slice(CODE_PREFIX.length), "base64url").toString("utf8"));
10024
10021
  } catch {
10025
- throw new ConnectionCodeError(
10026
- "the code is damaged: copy it again from the console"
10027
- );
10022
+ throw new ConnectionCodeError("the code is damaged: copy it again from the console");
10028
10023
  }
10029
10024
  return validateCode(parsed);
10030
10025
  }
@@ -10058,33 +10053,28 @@ var PollFormatError = class extends Error {
10058
10053
  };
10059
10054
  var ZERO_SESSION = Buffer.alloc(SESSION_BYTES);
10060
10055
  function sessionOf(id) {
10061
- if (id.length !== SESSION_BYTES)
10062
- throw new PollFormatError("the session id must be 32 bytes");
10056
+ if (id.length !== SESSION_BYTES) throw new PollFormatError("the session id must be 32 bytes");
10063
10057
  return id;
10064
10058
  }
10065
10059
  __name(sessionOf, "sessionOf");
10066
10060
  function requestSession(id) {
10067
- if (sessionOf(id).equals(ZERO_SESSION))
10068
- throw new PollFormatError("the session id must not be all zero");
10061
+ if (sessionOf(id).equals(ZERO_SESSION)) throw new PollFormatError("the session id must not be all zero");
10069
10062
  return id;
10070
10063
  }
10071
10064
  __name(requestSession, "requestSession");
10072
10065
  function toU64(n, what) {
10073
- if (!Number.isSafeInteger(n) || n < 0)
10074
- throw new PollFormatError(`${what} is out of range`);
10066
+ if (!Number.isSafeInteger(n) || n < 0) throw new PollFormatError(`${what} is out of range`);
10075
10067
  return BigInt(n);
10076
10068
  }
10077
10069
  __name(toU64, "toU64");
10078
10070
  function fromU64(b2, at2, what) {
10079
10071
  const v2 = b2.readBigUInt64BE(at2);
10080
- if (v2 > BigInt(Number.MAX_SAFE_INTEGER))
10081
- throw new PollFormatError(`${what} is out of range`);
10072
+ if (v2 > BigInt(Number.MAX_SAFE_INTEGER)) throw new PollFormatError(`${what} is out of range`);
10082
10073
  return Number(v2);
10083
10074
  }
10084
10075
  __name(fromU64, "fromU64");
10085
10076
  function encodeRequest(r) {
10086
- if (r.data.length > MAX_UP)
10087
- throw new PollFormatError("the request carries too much data");
10077
+ if (r.data.length > MAX_UP) throw new PollFormatError("the request carries too much data");
10088
10078
  const head = Buffer.alloc(REQUEST_HEAD);
10089
10079
  head[0] = POLL_VERSION;
10090
10080
  requestSession(r.session).copy(head, 1);
@@ -10095,12 +10085,9 @@ function encodeRequest(r) {
10095
10085
  }
10096
10086
  __name(encodeRequest, "encodeRequest");
10097
10087
  function decodeResponse(b2) {
10098
- if (b2.length < RESPONSE_HEAD)
10099
- throw new PollFormatError("the answer is too short");
10100
- if (b2[0] !== POLL_VERSION)
10101
- throw new PollFormatError("the answer is not a tunnel's");
10102
- if (b2.length - RESPONSE_HEAD > MAX_DOWN)
10103
- throw new PollFormatError("the answer carries too much data");
10088
+ if (b2.length < RESPONSE_HEAD) throw new PollFormatError("the answer is too short");
10089
+ if (b2[0] !== POLL_VERSION) throw new PollFormatError("the answer is not a tunnel's");
10090
+ if (b2.length - RESPONSE_HEAD > MAX_DOWN) throw new PollFormatError("the answer carries too much data");
10104
10091
  return {
10105
10092
  session: Buffer.from(b2.subarray(1, 33)),
10106
10093
  downOffset: fromU64(b2, 33, "downOffset"),
@@ -10111,9 +10098,7 @@ function decodeResponse(b2) {
10111
10098
  __name(decodeResponse, "decodeResponse");
10112
10099
  var LOOPBACK = /^(localhost|127(?:\.\d{1,3}){3}|::1)$/i;
10113
10100
  function bypassed(host, list2) {
10114
- return list2.split(",").map((s3) => s3.trim().toLowerCase()).filter(Boolean).some(
10115
- (entry) => entry === "*" || entry === host || entry.startsWith(".") && host.endsWith(entry)
10116
- );
10101
+ return list2.split(",").map((s3) => s3.trim().toLowerCase()).filter(Boolean).some((entry) => entry === "*" || entry === host || entry.startsWith(".") && host.endsWith(entry));
10117
10102
  }
10118
10103
  __name(bypassed, "bypassed");
10119
10104
  function proxyFor(target, env = process.env) {
@@ -10128,16 +10113,13 @@ function proxyFor(target, env = process.env) {
10128
10113
  } catch {
10129
10114
  throw new Error("HTTPS_PROXY is not a valid URL");
10130
10115
  }
10131
- if (url4.protocol !== "http:")
10132
- throw new Error("HTTPS_PROXY must be an http:// proxy URL");
10116
+ if (url4.protocol !== "http:") throw new Error("HTTPS_PROXY must be an http:// proxy URL");
10133
10117
  const user = decodeURIComponent(url4.username);
10134
10118
  const pass = decodeURIComponent(url4.password);
10135
10119
  return {
10136
10120
  host: url4.hostname.replace(/^\[|\]$/g, ""),
10137
10121
  port: Number(url4.port || 80),
10138
- ...user || pass ? {
10139
- authorization: `Basic ${Buffer.from(`${user}:${pass}`).toString("base64")}`
10140
- } : {}
10122
+ ...user || pass ? { authorization: `Basic ${Buffer.from(`${user}:${pass}`).toString("base64")}` } : {}
10141
10123
  };
10142
10124
  }
10143
10125
  __name(proxyFor, "proxyFor");
@@ -10146,9 +10128,7 @@ var ProxyRefusedError = class extends Error {
10146
10128
  __name(this, "ProxyRefusedError");
10147
10129
  }
10148
10130
  constructor(status) {
10149
- super(
10150
- status === 407 ? "the network's proxy needs credentials (HTTP 407): put them in HTTPS_PROXY as http://user:password@host:port" : `the network's proxy refused the connection (HTTP ${status})`
10151
- );
10131
+ super(status === 407 ? "the network's proxy needs credentials (HTTP 407): put them in HTTPS_PROXY as http://user:password@host:port" : `the network's proxy refused the connection (HTTP ${status})`);
10152
10132
  this.status = status;
10153
10133
  }
10154
10134
  status;
@@ -10161,10 +10141,7 @@ function connectVia(route, host, port) {
10161
10141
  method: "CONNECT",
10162
10142
  path: authority,
10163
10143
  agent: false,
10164
- headers: {
10165
- Host: authority,
10166
- ...route.authorization ? { "Proxy-Authorization": route.authorization } : {}
10167
- }
10144
+ headers: { Host: authority, ...route.authorization ? { "Proxy-Authorization": route.authorization } : {} }
10168
10145
  });
10169
10146
  const socket = new Promise((resolve34, reject) => {
10170
10147
  req.on("connect", (res, sock, head) => {
@@ -10228,8 +10205,7 @@ var FrameParser = class {
10228
10205
  const b0 = this.buf[0];
10229
10206
  const b1 = this.buf[1];
10230
10207
  if (b0 & 112) throw new WsProtocolError("reserved bits set");
10231
- if (b1 & 128)
10232
- throw new WsProtocolError("a server frame must not be masked");
10208
+ if (b1 & 128) throw new WsProtocolError("a server frame must not be masked");
10233
10209
  const opcode = b0 & 15;
10234
10210
  const fin = (b0 & 128) !== 0;
10235
10211
  let n = b1 & 127;
@@ -10241,14 +10217,12 @@ var FrameParser = class {
10241
10217
  } else if (n === 127) {
10242
10218
  if (this.buf.length < 10) return out;
10243
10219
  const big = this.buf.readBigUInt64BE(2);
10244
- if (big > BigInt(this.maxPayload))
10245
- throw new WsProtocolError("frame too large");
10220
+ if (big > BigInt(this.maxPayload)) throw new WsProtocolError("frame too large");
10246
10221
  n = Number(big);
10247
10222
  off = 10;
10248
10223
  }
10249
10224
  if (n > this.maxPayload) throw new WsProtocolError("frame too large");
10250
- if (opcode >= 8 && (n > 125 || !fin))
10251
- throw new WsProtocolError("bad control frame");
10225
+ if (opcode >= 8 && (n > 125 || !fin)) throw new WsProtocolError("bad control frame");
10252
10226
  if (this.buf.length < off + n) return out;
10253
10227
  out.push({ fin, opcode, payload: this.buf.subarray(off, off + n) });
10254
10228
  this.buf = this.buf.subarray(off + n);
@@ -10260,9 +10234,7 @@ var TunnelBlockedError = class extends Error {
10260
10234
  __name(this, "TunnelBlockedError");
10261
10235
  }
10262
10236
  constructor(status, detail) {
10263
- super(
10264
- detail ? `tunnel blocked: ${detail}` : `tunnel blocked (HTTP ${status})`
10265
- );
10237
+ super(detail ? `tunnel blocked: ${detail}` : `tunnel blocked (HTTP ${status})`);
10266
10238
  this.status = status;
10267
10239
  }
10268
10240
  status;
@@ -10315,20 +10287,13 @@ function openWebSocket(url4, opts) {
10315
10287
  ...opts.userAgent ? { "User-Agent": opts.userAgent } : {}
10316
10288
  }
10317
10289
  };
10318
- const outerTls = {
10319
- ...isIP(hostname4) ? {} : { servername: hostname4 },
10320
- rejectUnauthorized: false,
10321
- ca: opts.ca ?? defaultCa()
10322
- };
10290
+ const outerTls = { ...isIP(hostname4) ? {} : { servername: hostname4 }, rejectUnauthorized: false, ca: opts.ca ?? defaultCa() };
10323
10291
  const upgrade = /* @__PURE__ */ __name((tunnelled) => {
10324
10292
  if (done) {
10325
10293
  tunnelled?.destroy();
10326
10294
  return;
10327
10295
  }
10328
- const r = tunnelled ? http2.request({
10329
- ...common,
10330
- createConnection: /* @__PURE__ */ __name(() => secure ? tls.connect({ ...outerTls, socket: tunnelled }) : tunnelled, "createConnection")
10331
- }) : secure ? https.request({ ...common, ...outerTls, agent: false }) : http2.request({ ...common, agent: false });
10296
+ const r = tunnelled ? http2.request({ ...common, createConnection: /* @__PURE__ */ __name(() => secure ? tls.connect({ ...outerTls, socket: tunnelled }) : tunnelled, "createConnection") }) : secure ? https.request({ ...common, ...outerTls, agent: false }) : http2.request({ ...common, agent: false });
10332
10297
  req = r;
10333
10298
  r.on("response", (res) => {
10334
10299
  res.resume();
@@ -10345,11 +10310,7 @@ function openWebSocket(url4, opts) {
10345
10310
  const tlsSock = sock;
10346
10311
  const outer = !secure ? "plain" : tlsSock.authorized ? "verified" : "intercepted";
10347
10312
  const outerError = secure && !tlsSock.authorized && tlsSock.authorizationError ? String(tlsSock.authorizationError) : void 0;
10348
- settle(null, {
10349
- stream: wrap(sock, head, opts.pingMs ?? 3e4),
10350
- outer,
10351
- ...outerError ? { outerError } : {}
10352
- });
10313
+ settle(null, { stream: wrap(sock, head, opts.pingMs ?? 3e4), outer, ...outerError ? { outerError } : {} });
10353
10314
  });
10354
10315
  r.end();
10355
10316
  }, "upgrade");
@@ -10366,12 +10327,7 @@ function openWebSocket(url4, opts) {
10366
10327
  }
10367
10328
  const via = connectVia(route, hostname4, port);
10368
10329
  connecting.abort = via.abort;
10369
- via.socket.then(
10370
- upgrade,
10371
- (err) => settle(
10372
- err instanceof ProxyRefusedError ? new TunnelBlockedError(err.status, err.message) : err
10373
- )
10374
- );
10330
+ via.socket.then(upgrade, (err) => settle(err instanceof ProxyRefusedError ? new TunnelBlockedError(err.status, err.message) : err));
10375
10331
  });
10376
10332
  }
10377
10333
  __name(openWebSocket, "openWebSocket");
@@ -10410,9 +10366,7 @@ function wrap(sock, head, pingMs) {
10410
10366
  try {
10411
10367
  frames = parser2.push(chunk);
10412
10368
  } catch (err) {
10413
- failFrame(
10414
- err instanceof WsProtocolError ? err : new WsProtocolError(String(err))
10415
- );
10369
+ failFrame(err instanceof WsProtocolError ? err : new WsProtocolError(String(err)));
10416
10370
  return;
10417
10371
  }
10418
10372
  for (const f2 of frames) {
@@ -10467,24 +10421,14 @@ function isBusy(r) {
10467
10421
  }
10468
10422
  __name(isBusy, "isBusy");
10469
10423
  function settings(o) {
10470
- return {
10471
- timeoutMs: o.timeoutMs ?? 15e3,
10472
- waitMs: o.waitMs ?? POLL_WAIT_MS,
10473
- retryForMs: o.retryForMs ?? 3e4,
10474
- busyForMs: o.busyForMs ?? 3e5,
10475
- coalesceMs: o.coalesceMs ?? 5
10476
- };
10424
+ return { timeoutMs: o.timeoutMs ?? 15e3, waitMs: o.waitMs ?? POLL_WAIT_MS, retryForMs: o.retryForMs ?? 3e4, busyForMs: o.busyForMs ?? 3e5, coalesceMs: o.coalesceMs ?? 5 };
10477
10425
  }
10478
10426
  __name(settings, "settings");
10479
10427
  function makeExchanger(base, o) {
10480
10428
  const secure = base.protocol === "https:";
10481
10429
  const hostname4 = base.hostname.replace(/^\[|\]$/g, "");
10482
10430
  const port = Number(base.port || (secure ? 443 : 80));
10483
- const outerTls = {
10484
- ...isIP2(hostname4) ? {} : { servername: hostname4 },
10485
- rejectUnauthorized: false,
10486
- ca: o.ca ?? defaultCa()
10487
- };
10431
+ const outerTls = { ...isIP2(hostname4) ? {} : { servername: hostname4 }, rejectUnauthorized: false, ca: o.ca ?? defaultCa() };
10488
10432
  const route = proxyFor(base, o.env ?? process.env);
10489
10433
  const connectMs = o.timeoutMs ?? 15e3;
10490
10434
  const agent = secure ? new https2.Agent({ keepAlive: true, maxSockets: 2, ...outerTls }) : new http3.Agent({ keepAlive: true, maxSockets: 2 });
@@ -10506,63 +10450,44 @@ function makeExchanger(base, o) {
10506
10450
  via.abort();
10507
10451
  }, connectMs);
10508
10452
  via.socket.then(
10509
- (sock) => once(
10510
- null,
10511
- secure ? tls2.connect({ ...outerTls, socket: sock }) : sock
10512
- ),
10513
- (err) => once(
10514
- err instanceof ProxyRefusedError ? new TunnelBlockedError(err.status, err.message) : err
10515
- )
10453
+ (sock) => once(null, secure ? tls2.connect({ ...outerTls, socket: sock }) : sock),
10454
+ (err) => once(err instanceof ProxyRefusedError ? new TunnelBlockedError(err.status, err.message) : err)
10516
10455
  );
10517
10456
  return void 0;
10518
10457
  };
10519
10458
  }
10520
10459
  const post = /* @__PURE__ */ __name((body, timeoutMs) => new Promise((resolve34, reject) => {
10521
- const req = (secure ? https2 : http3).request(
10522
- {
10523
- host: hostname4,
10524
- port,
10525
- path: POLL_PATH,
10526
- method: "POST",
10527
- agent,
10528
- ...secure ? outerTls : {},
10529
- headers: {
10530
- Host: base.host,
10531
- "Content-Type": "application/octet-stream",
10532
- "Content-Length": String(body.length),
10533
- ...o.userAgent ? { "User-Agent": o.userAgent } : {}
10460
+ const req = (secure ? https2 : http3).request({
10461
+ host: hostname4,
10462
+ port,
10463
+ path: POLL_PATH,
10464
+ method: "POST",
10465
+ agent,
10466
+ ...secure ? outerTls : {},
10467
+ headers: {
10468
+ Host: base.host,
10469
+ "Content-Type": "application/octet-stream",
10470
+ "Content-Length": String(body.length),
10471
+ ...o.userAgent ? { "User-Agent": o.userAgent } : {}
10472
+ }
10473
+ }, (res) => {
10474
+ const sock = res.socket;
10475
+ const outer = !secure ? "plain" : sock?.authorized ? "verified" : "intercepted";
10476
+ const outerError = secure && !sock?.authorized && sock?.authorizationError ? String(sock.authorizationError) : void 0;
10477
+ const chunks = [];
10478
+ let size = 0;
10479
+ res.on("data", (c) => {
10480
+ size += c.length;
10481
+ if (size > MAX_ANSWER) {
10482
+ req.destroy(new Error("tunnel answer too large"));
10483
+ return;
10534
10484
  }
10535
- },
10536
- (res) => {
10537
- const sock = res.socket;
10538
- const outer = !secure ? "plain" : sock?.authorized ? "verified" : "intercepted";
10539
- const outerError = secure && !sock?.authorized && sock?.authorizationError ? String(sock.authorizationError) : void 0;
10540
- const chunks = [];
10541
- let size = 0;
10542
- res.on("data", (c) => {
10543
- size += c.length;
10544
- if (size > MAX_ANSWER) {
10545
- req.destroy(new Error("tunnel answer too large"));
10546
- return;
10547
- }
10548
- chunks.push(c);
10549
- });
10550
- res.on(
10551
- "end",
10552
- () => resolve34({
10553
- status: res.statusCode ?? 0,
10554
- body: Buffer.concat(chunks),
10555
- outer,
10556
- ...outerError ? { outerError } : {}
10557
- })
10558
- );
10559
- res.on("error", reject);
10560
- }
10561
- );
10562
- req.setTimeout(
10563
- timeoutMs,
10564
- () => req.destroy(new Error("tunnel exchange timeout"))
10565
- );
10485
+ chunks.push(c);
10486
+ });
10487
+ res.on("end", () => resolve34({ status: res.statusCode ?? 0, body: Buffer.concat(chunks), outer, ...outerError ? { outerError } : {} }));
10488
+ res.on("error", reject);
10489
+ });
10490
+ req.setTimeout(timeoutMs, () => req.destroy(new Error("tunnel exchange timeout")));
10566
10491
  req.on("error", reject);
10567
10492
  req.end(body);
10568
10493
  }), "post");
@@ -10621,24 +10546,11 @@ var PollStream = class {
10621
10546
  await delay2(this.o.coalesceMs);
10622
10547
  while (!this.closed && this.pendingSize > 0) {
10623
10548
  const data = this.takePending();
10624
- await this.exchange(
10625
- {
10626
- session: this.session,
10627
- upOffset: this.sent,
10628
- ack: this.received,
10629
- close: false,
10630
- poll: false,
10631
- open: false,
10632
- data
10633
- },
10634
- this.o.timeoutMs
10635
- );
10549
+ await this.exchange({ session: this.session, upOffset: this.sent, ack: this.received, close: false, poll: false, open: false, data }, this.o.timeoutMs);
10636
10550
  this.sent += data.length;
10637
- while (this.held.length > 0 && this.pendingSize <= MAX_UP)
10638
- this.held.shift()();
10551
+ while (this.held.length > 0 && this.pendingSize <= MAX_UP) this.held.shift()();
10639
10552
  }
10640
- if (this.finishing && !this.closed && this.pendingSize === 0)
10641
- this.shutdown(true);
10553
+ if (this.finishing && !this.closed && this.pendingSize === 0) this.shutdown(true);
10642
10554
  } catch (err) {
10643
10555
  this.fail(err);
10644
10556
  } finally {
@@ -10657,21 +10569,9 @@ var PollStream = class {
10657
10569
  async downLoop() {
10658
10570
  try {
10659
10571
  while (!this.closed) {
10660
- const r = await this.exchange(
10661
- {
10662
- session: this.session,
10663
- upOffset: this.sent,
10664
- ack: this.received,
10665
- close: false,
10666
- poll: true,
10667
- open: false,
10668
- data: EMPTY
10669
- },
10670
- this.o.waitMs + this.o.timeoutMs
10671
- );
10572
+ const r = await this.exchange({ session: this.session, upOffset: this.sent, ack: this.received, close: false, poll: true, open: false, data: EMPTY }, this.o.waitMs + this.o.timeoutMs);
10672
10573
  if (this.closed) return;
10673
- if (r.downOffset > this.received)
10674
- throw new Error("tunnel stream out of order");
10574
+ if (r.downOffset > this.received) throw new Error("tunnel stream out of order");
10675
10575
  const skip = this.received - r.downOffset;
10676
10576
  if (skip < r.data.length) {
10677
10577
  const fresh = Buffer.from(r.data.subarray(skip));
@@ -10705,10 +10605,8 @@ var PollStream = class {
10705
10605
  if (FATAL_STATUS.has(r.status)) throw failure;
10706
10606
  busy = isBusy(r);
10707
10607
  } catch (err) {
10708
- if (err instanceof SessionGoneError || err instanceof PollFormatError)
10709
- throw err;
10710
- if (err instanceof TunnelBlockedError && FATAL_STATUS.has(err.status))
10711
- throw err;
10608
+ if (err instanceof SessionGoneError || err instanceof PollFormatError) throw err;
10609
+ if (err instanceof TunnelBlockedError && FATAL_STATUS.has(err.status)) throw err;
10712
10610
  failure = err;
10713
10611
  }
10714
10612
  if (busy) {
@@ -10737,15 +10635,7 @@ var PollStream = class {
10737
10635
  if (this.closed) return;
10738
10636
  this.closed = true;
10739
10637
  if (sendClose) {
10740
- const bye = encodeRequest({
10741
- session: this.session,
10742
- upOffset: this.sent,
10743
- ack: this.received,
10744
- close: true,
10745
- poll: false,
10746
- open: false,
10747
- data: EMPTY
10748
- });
10638
+ const bye = encodeRequest({ session: this.session, upOffset: this.sent, ack: this.received, close: true, poll: false, open: false, data: EMPTY });
10749
10639
  this.ex.post(bye, 5e3).catch(() => void 0).finally(() => this.ex.destroy());
10750
10640
  } else {
10751
10641
  this.ex.destroy();
@@ -10756,15 +10646,7 @@ var PollStream = class {
10756
10646
  async function openPollStream(base, opts = {}) {
10757
10647
  const ex = makeExchanger(base, opts);
10758
10648
  const session = randomBytes2(SESSION_BYTES);
10759
- const open22 = encodeRequest({
10760
- session,
10761
- upOffset: 0,
10762
- ack: 0,
10763
- close: false,
10764
- poll: false,
10765
- open: true,
10766
- data: EMPTY
10767
- });
10649
+ const open22 = encodeRequest({ session, upOffset: 0, ack: 0, close: false, poll: false, open: true, data: EMPTY });
10768
10650
  const o = settings(opts);
10769
10651
  let first;
10770
10652
  let firstFailure = 0;
@@ -10794,17 +10676,10 @@ async function openPollStream(base, opts = {}) {
10794
10676
  }
10795
10677
  if (!answered?.equals(session)) {
10796
10678
  ex.destroy();
10797
- throw new TunnelBlockedError(
10798
- 200,
10799
- "the answer is not the tunnel's (a filter's page?)"
10800
- );
10679
+ throw new TunnelBlockedError(200, "the answer is not the tunnel's (a filter's page?)");
10801
10680
  }
10802
10681
  const stream = new PollStream(ex, session, opts).duplex;
10803
- return {
10804
- stream,
10805
- outer: first.outer,
10806
- ...first.outerError ? { outerError: first.outerError } : {}
10807
- };
10682
+ return { stream, outer: first.outer, ...first.outerError ? { outerError: first.outerError } : {} };
10808
10683
  }
10809
10684
  __name(openPollStream, "openPollStream");
10810
10685
  var IdentityMismatchError = class extends Error {
@@ -10818,29 +10693,12 @@ var IdentityMismatchError = class extends Error {
10818
10693
  received;
10819
10694
  };
10820
10695
  async function connectInner(base, pins, opts = {}) {
10821
- const outerOpts = {
10822
- timeoutMs: opts.timeoutMs,
10823
- ca: opts.ca,
10824
- userAgent: opts.userAgent,
10825
- env: opts.env
10826
- };
10827
- const ws2 = opts.transport === "post" ? await openPollStream(base, outerOpts) : await openWebSocket(new URL(TUNNEL_PATH, base), {
10828
- protocol: TUNNEL_PROTOCOL,
10829
- ...outerOpts
10830
- });
10831
- opts.onOuter?.({
10832
- outer: ws2.outer,
10833
- ...ws2.outerError ? { outerError: ws2.outerError } : {}
10834
- });
10696
+ const outerOpts = { timeoutMs: opts.timeoutMs, ca: opts.ca, userAgent: opts.userAgent, env: opts.env };
10697
+ const ws2 = opts.transport === "post" ? await openPollStream(base, outerOpts) : await openWebSocket(new URL(TUNNEL_PATH, base), { protocol: TUNNEL_PROTOCOL, ...outerOpts });
10698
+ opts.onOuter?.({ outer: ws2.outer, ...ws2.outerError ? { outerError: ws2.outerError } : {} });
10835
10699
  const preferred = pins.at(-1);
10836
10700
  const servername = preferred && isPin(preferred) ? sniOfPin(preferred) : TUNNEL_SERVERNAME;
10837
- const socket = tls3.connect({
10838
- socket: ws2.stream,
10839
- servername,
10840
- minVersion: "TLSv1.3",
10841
- rejectUnauthorized: false,
10842
- ALPNProtocols: ["http/1.1"]
10843
- });
10701
+ const socket = tls3.connect({ socket: ws2.stream, servername, minVersion: "TLSv1.3", rejectUnauthorized: false, ALPNProtocols: ["http/1.1"] });
10844
10702
  ws2.stream.on("close", () => socket.destroy());
10845
10703
  ws2.stream.on("end", () => socket.destroy());
10846
10704
  ws2.stream.on("error", () => socket.destroy());
@@ -10865,10 +10723,7 @@ async function connectInner(base, pins, opts = {}) {
10865
10723
  const onError = /* @__PURE__ */ __name((err) => finish(err), "onError");
10866
10724
  const onClose = /* @__PURE__ */ __name(() => finish(new Error("tunnel closed during handshake")), "onClose");
10867
10725
  const onSecure = /* @__PURE__ */ __name(() => finish(null), "onSecure");
10868
- const timer = setTimeout(
10869
- () => finish(new Error("tunnel handshake timeout")),
10870
- opts.timeoutMs ?? 15e3
10871
- );
10726
+ const timer = setTimeout(() => finish(new Error("tunnel handshake timeout")), opts.timeoutMs ?? 15e3);
10872
10727
  timer.unref();
10873
10728
  socket.on("error", onError);
10874
10729
  socket.on("close", onClose);
@@ -10890,16 +10745,13 @@ async function connectInner(base, pins, opts = {}) {
10890
10745
  __name(connectInner, "connectInner");
10891
10746
  var TUNNEL_AGENT_MAX_SOCKETS = 4;
10892
10747
  function canSwitch(err) {
10893
- if (err instanceof IdentityMismatchError || err instanceof BackoffError)
10894
- return false;
10895
- if (err instanceof TunnelBlockedError && (err.status === 429 || err.status === 503))
10896
- return false;
10748
+ if (err instanceof IdentityMismatchError || err instanceof BackoffError) return false;
10749
+ if (err instanceof TunnelBlockedError && (err.status === 429 || err.status === 503)) return false;
10897
10750
  return true;
10898
10751
  }
10899
10752
  __name(canSwitch, "canSwitch");
10900
10753
  function reasonOf(err) {
10901
- if (err instanceof TunnelBlockedError)
10902
- return err.status === 101 || err.status === 200 ? err.message : `HTTP ${err.status}`;
10754
+ if (err instanceof TunnelBlockedError) return err.status === 101 || err.status === 200 ? err.message : `HTTP ${err.status}`;
10903
10755
  return err instanceof Error ? err.message : String(err);
10904
10756
  }
10905
10757
  __name(reasonOf, "reasonOf");
@@ -10919,11 +10771,7 @@ var TunnelAgent = class extends http4.Agent {
10919
10771
  __name(this, "TunnelAgent");
10920
10772
  }
10921
10773
  constructor(target, backoff, events = {}) {
10922
- super({
10923
- keepAlive: true,
10924
- maxSockets: TUNNEL_AGENT_MAX_SOCKETS,
10925
- maxFreeSockets: TUNNEL_AGENT_MAX_SOCKETS
10926
- });
10774
+ super({ keepAlive: true, maxSockets: TUNNEL_AGENT_MAX_SOCKETS, maxFreeSockets: TUNNEL_AGENT_MAX_SOCKETS });
10927
10775
  this.target = target;
10928
10776
  this.backoff = backoff;
10929
10777
  this.events = events;
@@ -10931,6 +10779,7 @@ var TunnelAgent = class extends http4.Agent {
10931
10779
  this.using = this.mode === "post" ? "post" : "ws";
10932
10780
  this.connect = target.connect ?? connectInner;
10933
10781
  this.pins = [...target.pins];
10782
+ this.targets = [target.url, ...target.urls ?? []];
10934
10783
  this.on("free", () => this.drain());
10935
10784
  }
10936
10785
  target;
@@ -10944,6 +10793,9 @@ var TunnelAgent = class extends http4.Agent {
10944
10793
  mode;
10945
10794
  connect;
10946
10795
  pins;
10796
+ /** Every host the code names, first one first; `preferred` indexes it. */
10797
+ targets;
10798
+ preferred = 0;
10947
10799
  /** Destroyed: no tunnel is opened any more, and one still opening is closed when it arrives. */
10948
10800
  closed = false;
10949
10801
  /**
@@ -10964,9 +10816,7 @@ var TunnelAgent = class extends http4.Agent {
10964
10816
  return n;
10965
10817
  }
10966
10818
  hasFree() {
10967
- return Object.values(this.freeSockets).some(
10968
- (list2) => list2?.some((s3) => !s3.destroyed)
10969
- );
10819
+ return Object.values(this.freeSockets).some((list2) => list2?.some((s3) => !s3.destroyed));
10970
10820
  }
10971
10821
  canServe() {
10972
10822
  return this.hasFree() || this.live() < TUNNEL_AGENT_MAX_SOCKETS;
@@ -11017,33 +10867,31 @@ var TunnelAgent = class extends http4.Agent {
11017
10867
  return void 0;
11018
10868
  }
11019
10869
  this.opening += 1;
11020
- const attempt = /* @__PURE__ */ __name((t) => this.connect(this.target.url, this.pins, {
11021
- ca: this.target.ca,
11022
- userAgent: this.target.userAgent,
11023
- env: this.target.env,
11024
- transport: t,
11025
- onOuter: /* @__PURE__ */ __name((i) => this.events.onOuter?.(i), "onOuter")
11026
- }), "attempt");
11027
- const first = this.using;
11028
- attempt(first).catch((err) => {
11029
- if (this.mode !== "auto" || first !== "ws" || !canSwitch(err))
11030
- throw err;
11031
- return attempt("post").then(
10870
+ const dial = /* @__PURE__ */ __name((host, transport) => this.connect(this.targets[host], this.pins, { ca: this.target.ca, userAgent: this.target.userAgent, env: this.target.env, transport, onOuter: /* @__PURE__ */ __name((i) => this.events.onOuter?.(i), "onOuter") }), "dial");
10871
+ const hosts = this.targets.map((_2, i) => (this.preferred + i) % this.targets.length);
10872
+ const transports = this.mode === "auto" ? this.using === "ws" ? ["ws", "post"] : ["post"] : [this.using === "post" ? "post" : "ws"];
10873
+ const chain = transports.flatMap((transport) => hosts.map((host) => ({ host, transport })));
10874
+ let firstErr = null;
10875
+ const run = /* @__PURE__ */ __name((i) => {
10876
+ const at2 = chain[i];
10877
+ return dial(at2.host, at2.transport).then(
11032
10878
  (socket) => {
11033
- if (this.using !== "post") {
10879
+ if (this.preferred !== at2.host) this.preferred = at2.host;
10880
+ if (this.mode === "auto" && this.using !== "post" && at2.transport === "post") {
11034
10881
  this.using = "post";
11035
- this.events.onTransport?.(
11036
- "post",
11037
- `websocket blocked: ${reasonOf(err)}`
11038
- );
10882
+ this.events.onTransport?.("post", firstErr === null ? null : `websocket blocked: ${reasonOf(firstErr)}`);
11039
10883
  }
11040
10884
  return socket;
11041
10885
  },
11042
- (postErr) => {
11043
- throw postErr instanceof IdentityMismatchError ? postErr : err;
10886
+ (err) => {
10887
+ if (!(err instanceof Error)) throw err;
10888
+ if (firstErr === null) firstErr = err;
10889
+ if (i + 1 < chain.length && canSwitch(err)) return run(i + 1);
10890
+ throw err instanceof IdentityMismatchError ? err : firstErr;
11044
10891
  }
11045
10892
  );
11046
- }).then(
10893
+ }, "run");
10894
+ run(0).then(
11047
10895
  (socket) => {
11048
10896
  this.opening -= 1;
11049
10897
  if (this.closed) {
@@ -11077,35 +10925,15 @@ function hashLocalKey(key) {
11077
10925
  return createHash3("sha256").update(key, "utf8").digest("hex");
11078
10926
  }
11079
10927
  __name(hashLocalKey, "hashLocalKey");
11080
- var HOP = /* @__PURE__ */ new Set([
11081
- "connection",
11082
- "keep-alive",
11083
- "proxy-authorization",
11084
- "proxy-connection",
11085
- "te",
11086
- "trailer",
11087
- "transfer-encoding",
11088
- "upgrade",
11089
- "host",
11090
- "authorization",
11091
- "x-api-key"
11092
- ]);
10928
+ var HOP = /* @__PURE__ */ new Set(["connection", "keep-alive", "proxy-authorization", "proxy-connection", "te", "trailer", "transfer-encoding", "upgrade", "host", "authorization", "x-api-key"]);
11093
10929
  var LOOPBACK2 = /* @__PURE__ */ new Set(["127.0.0.1", "localhost", "[::1]"]);
11094
10930
  function send(res, status, message) {
11095
- const body = JSON.stringify({
11096
- type: "error",
11097
- error: { type: "tunnel_error", message }
11098
- });
11099
- res.writeHead(status, {
11100
- "content-type": "application/json",
11101
- "content-length": Buffer.byteLength(body)
11102
- }).end(body);
10931
+ const body = JSON.stringify({ type: "error", error: { type: "tunnel_error", message } });
10932
+ res.writeHead(status, { "content-type": "application/json", "content-length": Buffer.byteLength(body) }).end(body);
11103
10933
  }
11104
10934
  __name(send, "send");
11105
10935
  function keyOf(req) {
11106
- const bearer = /^Bearer\s+(.+)$/i.exec(
11107
- String(req.headers.authorization ?? "").trim()
11108
- );
10936
+ const bearer = /^Bearer\s+(.+)$/i.exec(String(req.headers.authorization ?? "").trim());
11109
10937
  if (bearer) return bearer[1].trim();
11110
10938
  const k2 = req.headers["x-api-key"];
11111
10939
  return typeof k2 === "string" && k2.trim() ? k2.trim() : void 0;
@@ -11125,8 +10953,7 @@ function deadTunnel(err, reusedSocket) {
11125
10953
  }
11126
10954
  __name(deadTunnel, "deadTunnel");
11127
10955
  function describeError(err) {
11128
- if (err instanceof BackoffError)
11129
- return `tunnel identity mismatch - waiting before retry (${Math.ceil(err.waitMs / 6e4)} min)`;
10956
+ if (err instanceof BackoffError) return `tunnel identity mismatch - waiting before retry (${Math.ceil(err.waitMs / 6e4)} min)`;
11130
10957
  if (err instanceof IdentityMismatchError) return "tunnel identity mismatch";
11131
10958
  if (err instanceof TunnelBlockedError) return err.message;
11132
10959
  return "tunnel unavailable";
@@ -11137,16 +10964,12 @@ function startLocalServer(o) {
11137
10964
  const started = Date.now();
11138
10965
  const route = (req.url ?? "/").split("?")[0].slice(0, 200);
11139
10966
  const hostname4 = String(req.headers.host ?? "").toLowerCase().replace(/:\d+$/, "");
11140
- if (!LOOPBACK2.has(hostname4))
11141
- return send(res, 403, "this endpoint answers on 127.0.0.1 only");
11142
- if (req.headers.origin !== void 0)
11143
- return send(res, 403, "browser requests are not accepted");
10967
+ if (!LOOPBACK2.has(hostname4)) return send(res, 403, "this endpoint answers on 127.0.0.1 only");
10968
+ if (req.headers.origin !== void 0) return send(res, 403, "browser requests are not accepted");
11144
10969
  const key = keyOf(req);
11145
- if (!key || !sameHash(hashLocalKey(key), o.localKeyHash))
11146
- return send(res, 401, "invalid or missing local key");
10970
+ if (!key || !sameHash(hashLocalKey(key), o.localKeyHash)) return send(res, 401, "invalid or missing local key");
11147
10971
  const headers = {};
11148
- for (const [name, value] of Object.entries(req.headers))
11149
- if (!HOP.has(name) && value !== void 0) headers[name] = value;
10972
+ for (const [name, value] of Object.entries(req.headers)) if (!HOP.has(name) && value !== void 0) headers[name] = value;
11150
10973
  headers.host = o.target.host;
11151
10974
  headers.authorization = `Bearer ${o.deviceToken}`;
11152
10975
  let kept = [];
@@ -11160,23 +10983,14 @@ function startLocalServer(o) {
11160
10983
  let upstream;
11161
10984
  const forward = /* @__PURE__ */ __name((replay) => {
11162
10985
  const via = replay ? { createConnection: /* @__PURE__ */ __name((opts, cb) => o.agent.createConnection(opts, cb), "createConnection") } : { agent: o.agent };
11163
- const current = http5.request(
11164
- { ...via, method: req.method, path: req.url, headers, setHost: false },
11165
- (up) => {
11166
- const out = {};
11167
- for (const [name, value] of Object.entries(up.headers))
11168
- if (!HOP.has(name) && value !== void 0) out[name] = value;
11169
- res.writeHead(up.statusCode ?? 502, out);
11170
- up.pipe(res);
11171
- up.on("error", () => res.destroy());
11172
- up.on(
11173
- "end",
11174
- () => o.log?.(
11175
- `${req.method} ${route} status=${up.statusCode} total=${Date.now() - started}ms`
11176
- )
11177
- );
11178
- }
11179
- );
10986
+ const current = http5.request({ ...via, method: req.method, path: req.url, headers, setHost: false }, (up) => {
10987
+ const out = {};
10988
+ for (const [name, value] of Object.entries(up.headers)) if (!HOP.has(name) && value !== void 0) out[name] = value;
10989
+ res.writeHead(up.statusCode ?? 502, out);
10990
+ up.pipe(res);
10991
+ up.on("error", () => res.destroy());
10992
+ up.on("end", () => o.log?.(`${req.method} ${route} status=${up.statusCode} total=${Date.now() - started}ms`));
10993
+ });
11180
10994
  upstream = current;
11181
10995
  current.on("error", (err) => {
11182
10996
  if (!replay && !res.headersSent && kept && deadTunnel(err, current.reusedSocket)) {
@@ -11194,8 +11008,7 @@ function startLocalServer(o) {
11194
11008
  }
11195
11009
  o.log?.(`${req.method} ${route} failed: ${describeError(err)}`);
11196
11010
  if (res.headersSent) res.destroy();
11197
- else if (err instanceof TunnelBlockedError && err.status === 429)
11198
- send(res, 429, "Too many attempts");
11011
+ else if (err instanceof TunnelBlockedError && err.status === 429) send(res, 429, "Too many attempts");
11199
11012
  else send(res, 502, describeError(err));
11200
11013
  });
11201
11014
  if (replay) current.end(Buffer.concat(kept ?? []));
@@ -11249,18 +11062,13 @@ var IdentityBackoff = class {
11249
11062
  this.since = null;
11250
11063
  }
11251
11064
  snapshot() {
11252
- return {
11253
- mismatches: this.count,
11254
- since: this.since,
11255
- waitMs: this.blockedMs()
11256
- };
11065
+ return { mismatches: this.count, since: this.since, waitMs: this.blockedMs() };
11257
11066
  }
11258
11067
  };
11259
11068
  function mergePins(own, listed, via) {
11260
11069
  const unchanged = { pins: [...own], added: [], dropped: [] };
11261
11070
  if (via === null || !own.includes(via)) return unchanged;
11262
- if (!Array.isArray(listed) || listed.length === 0 || listed.length > MAX_PINS || !listed.every((p2) => typeof p2 === "string" && isPin(p2)))
11263
- return unchanged;
11071
+ if (!Array.isArray(listed) || listed.length === 0 || listed.length > MAX_PINS || !listed.every((p2) => typeof p2 === "string" && isPin(p2))) return unchanged;
11264
11072
  const list2 = [...new Set(listed)];
11265
11073
  const added = list2.filter((p2) => !own.includes(p2));
11266
11074
  if (list2.includes(via)) {
@@ -11310,11 +11118,7 @@ var PinSync = class {
11310
11118
  const now = (this.o.now ?? Date.now)();
11311
11119
  if (this.running || now - this.last < (this.o.intervalMs ?? 36e5)) return;
11312
11120
  this.last = now;
11313
- this.syncNow().catch(
11314
- (err) => this.o.log?.(
11315
- `pin check failed: ${err instanceof Error ? err.message : String(err)}`
11316
- )
11317
- );
11121
+ this.syncNow().catch((err) => this.o.log?.(`pin check failed: ${err instanceof Error ? err.message : String(err)}`));
11318
11122
  }
11319
11123
  async run() {
11320
11124
  this.last = (this.o.now ?? Date.now)();
@@ -11324,24 +11128,18 @@ var PinSync = class {
11324
11128
  if (changed) {
11325
11129
  this.current = merged.pins;
11326
11130
  this.o.onChange?.(this.pins);
11327
- this.o.log?.(
11328
- `proxy keys updated through the pinned tunnel: ${merged.added.map((p2) => `+${short(p2)}`).concat(merged.dropped.map((p2) => `-${short(p2)}`)).join(" ")}`
11329
- );
11131
+ this.o.log?.(`proxy keys updated through the pinned tunnel: ${merged.added.map((p2) => `+${short(p2)}`).concat(merged.dropped.map((p2) => `-${short(p2)}`)).join(" ")}`);
11330
11132
  }
11331
11133
  if ((changed || this.unsaved) && !this.saveStopped) {
11332
11134
  try {
11333
11135
  if (await this.o.save(this.pins) === false) {
11334
11136
  this.saveStopped = true;
11335
- this.o.log?.(
11336
- this.o.stoppedLine ?? "config.bin now holds another configuration (setup ran since): the proxy keys learned by this run are no longer saved"
11337
- );
11137
+ this.o.log?.(this.o.stoppedLine ?? "config.bin now holds another configuration (setup ran since): the proxy keys learned by this run are no longer saved");
11338
11138
  }
11339
11139
  this.unsaved = false;
11340
11140
  } catch (err) {
11341
11141
  this.unsaved = true;
11342
- this.o.log?.(
11343
- `could not save the proxy keys (tried again at the next check): ${err instanceof Error ? err.message : String(err)}`
11344
- );
11142
+ this.o.log?.(`could not save the proxy keys (tried again at the next check): ${err instanceof Error ? err.message : String(err)}`);
11345
11143
  }
11346
11144
  }
11347
11145
  return { ...merged, via };
@@ -11349,52 +11147,34 @@ var PinSync = class {
11349
11147
  fetch() {
11350
11148
  const { target } = this.o;
11351
11149
  return new Promise((resolve34, reject) => {
11352
- const req = http6.request(
11353
- {
11354
- host: target.hostname,
11355
- port: target.port,
11356
- method: "GET",
11357
- path: TUNNEL_PINS_PATH,
11358
- agent: this.o.agent,
11359
- setHost: false,
11360
- headers: {
11361
- host: target.host,
11362
- authorization: `Bearer ${this.o.deviceToken}`,
11363
- accept: "application/json"
11150
+ const req = http6.request({
11151
+ host: target.hostname,
11152
+ port: target.port,
11153
+ method: "GET",
11154
+ path: TUNNEL_PINS_PATH,
11155
+ agent: this.o.agent,
11156
+ setHost: false,
11157
+ headers: { host: target.host, authorization: `Bearer ${this.o.deviceToken}`, accept: "application/json" }
11158
+ }, (res) => {
11159
+ const via = pinOfSocket(res.socket);
11160
+ const chunks = [];
11161
+ let size = 0;
11162
+ res.on("data", (c) => {
11163
+ size += c.length;
11164
+ if (size > MAX_BODY) req.destroy(new Error("pin list too large"));
11165
+ else chunks.push(c);
11166
+ });
11167
+ res.on("error", reject);
11168
+ res.on("end", () => {
11169
+ if (res.statusCode !== 200) return reject(new Error(`the proxy answered ${res.statusCode ?? 0} for its pins`));
11170
+ try {
11171
+ resolve34({ listed: JSON.parse(Buffer.concat(chunks).toString("utf8")).pins, via });
11172
+ } catch {
11173
+ reject(new Error("the proxy's pin list is not JSON"));
11364
11174
  }
11365
- },
11366
- (res) => {
11367
- const via = pinOfSocket(res.socket);
11368
- const chunks = [];
11369
- let size = 0;
11370
- res.on("data", (c) => {
11371
- size += c.length;
11372
- if (size > MAX_BODY) req.destroy(new Error("pin list too large"));
11373
- else chunks.push(c);
11374
- });
11375
- res.on("error", reject);
11376
- res.on("end", () => {
11377
- if (res.statusCode !== 200)
11378
- return reject(
11379
- new Error(
11380
- `the proxy answered ${res.statusCode ?? 0} for its pins`
11381
- )
11382
- );
11383
- try {
11384
- resolve34({
11385
- listed: JSON.parse(Buffer.concat(chunks).toString("utf8")).pins,
11386
- via
11387
- });
11388
- } catch {
11389
- reject(new Error("the proxy's pin list is not JSON"));
11390
- }
11391
- });
11392
- }
11393
- );
11394
- req.setTimeout(
11395
- this.o.timeoutMs ?? 3e4,
11396
- () => req.destroy(new Error("pin check timeout"))
11397
- );
11175
+ });
11176
+ });
11177
+ req.setTimeout(this.o.timeoutMs ?? 3e4, () => req.destroy(new Error("pin check timeout")));
11398
11178
  req.on("error", reject);
11399
11179
  req.end();
11400
11180
  });
@@ -11402,27 +11182,19 @@ var PinSync = class {
11402
11182
  };
11403
11183
  async function startTunnelSession(o) {
11404
11184
  const target = new URL(o.url);
11185
+ const failover = (o.urls ?? []).map((u2) => new URL(u2));
11405
11186
  const backoff = o.backoff ?? new IdentityBackoff();
11406
- const agent = new TunnelAgent(
11407
- {
11408
- url: target,
11409
- pins: o.pins,
11410
- userAgent: o.userAgent,
11411
- transport: o.transport
11412
- },
11413
- backoff,
11414
- {
11415
- onOuter: o.onOuter,
11416
- onConnected: /* @__PURE__ */ __name(() => {
11417
- setImmediate(() => {
11418
- if (!agent.destroyed) pinSync.maybeSync();
11419
- });
11420
- o.onConnected?.();
11421
- }, "onConnected"),
11422
- onMismatch: o.onMismatch,
11423
- onTransport: o.onTransport
11424
- }
11425
- );
11187
+ const agent = new TunnelAgent({ url: target, urls: failover, pins: o.pins, userAgent: o.userAgent, transport: o.transport }, backoff, {
11188
+ onOuter: o.onOuter,
11189
+ onConnected: /* @__PURE__ */ __name(() => {
11190
+ setImmediate(() => {
11191
+ if (!agent.destroyed) pinSync.maybeSync();
11192
+ });
11193
+ o.onConnected?.();
11194
+ }, "onConnected"),
11195
+ onMismatch: o.onMismatch,
11196
+ onTransport: o.onTransport
11197
+ });
11426
11198
  const pinSync = new PinSync({
11427
11199
  agent,
11428
11200
  target,
@@ -11435,14 +11207,7 @@ async function startTunnelSession(o) {
11435
11207
  });
11436
11208
  let server;
11437
11209
  try {
11438
- server = await startLocalServer({
11439
- port: o.port,
11440
- localKeyHash: o.localKeyHash,
11441
- deviceToken: o.deviceToken,
11442
- target,
11443
- agent,
11444
- log: o.log
11445
- });
11210
+ server = await startLocalServer({ port: o.port, localKeyHash: o.localKeyHash, deviceToken: o.deviceToken, target, agent, log: o.log });
11446
11211
  } catch (err) {
11447
11212
  agent.destroy();
11448
11213
  throw err;
@@ -11460,7 +11225,7 @@ async function startTunnelSession(o) {
11460
11225
  return { agent, pinSync, server, target, port: server.address().port, close };
11461
11226
  }
11462
11227
  __name(startTunnelSession, "startTunnelSession");
11463
- var VERSION = true ? "9.0.0" : "dev";
11228
+ var VERSION = true ? "9.4.0" : "dev";
11464
11229
  var O1ConnectError = class extends Error {
11465
11230
  static {
11466
11231
  __name(this, "O1ConnectError");
@@ -11476,8 +11241,7 @@ var DEFAULT_NAME = "aipp-connect";
11476
11241
  var TRANSPORTS = ["auto", "websocket", "post"];
11477
11242
  function entryName(name) {
11478
11243
  if (name === void 0) return DEFAULT_NAME;
11479
- if (typeof name !== "string" || name.trim() === "")
11480
- throw new TypeError("name must be a non-empty string");
11244
+ if (typeof name !== "string" || name.trim() === "") throw new TypeError("name must be a non-empty string");
11481
11245
  return name;
11482
11246
  }
11483
11247
  __name(entryName, "entryName");
@@ -11498,10 +11262,7 @@ function withEntry(store, name, fn) {
11498
11262
  }
11499
11263
  const map2 = byName;
11500
11264
  const run = (map2.get(name) ?? Promise.resolve()).then(fn);
11501
- const tail = run.then(
11502
- () => void 0,
11503
- () => void 0
11504
- );
11265
+ const tail = run.then(() => void 0, () => void 0);
11505
11266
  map2.set(name, tail);
11506
11267
  void tail.then(() => {
11507
11268
  if (map2.get(name) === tail) map2.delete(name);
@@ -11513,11 +11274,7 @@ async function viaStore(what, call) {
11513
11274
  try {
11514
11275
  return await call();
11515
11276
  } catch (err) {
11516
- throw new O1ConnectError(
11517
- "store_failed",
11518
- `the secret store failed to ${what}`,
11519
- { cause: err }
11520
- );
11277
+ throw new O1ConnectError("store_failed", `the secret store failed to ${what}`, { cause: err });
11521
11278
  }
11522
11279
  }
11523
11280
  __name(viaStore, "viaStore");
@@ -11526,70 +11283,39 @@ function parseSaved(raw) {
11526
11283
  try {
11527
11284
  o = JSON.parse(String(raw));
11528
11285
  } catch {
11529
- throw new O1ConnectError(
11530
- "invalid_config",
11531
- "the saved configuration is not JSON: run setup again"
11532
- );
11286
+ throw new O1ConnectError("invalid_config", "the saved configuration is not JSON: run setup again");
11533
11287
  }
11534
- if (!o || typeof o !== "object" || o.v !== 1)
11535
- throw new O1ConnectError(
11536
- "invalid_config",
11537
- "the saved configuration is not one this library knows: run setup again"
11538
- );
11288
+ if (!o || typeof o !== "object" || o.v !== 1) throw new O1ConnectError("invalid_config", "the saved configuration is not one this library knows: run setup again");
11539
11289
  let code;
11540
11290
  try {
11541
11291
  code = validateCode(o);
11542
11292
  } catch (err) {
11543
- throw new O1ConnectError(
11544
- "invalid_config",
11545
- `the saved configuration is not valid (${err instanceof Error ? err.message : String(err)}): run setup again`
11546
- );
11293
+ throw new O1ConnectError("invalid_config", `the saved configuration is not valid (${err instanceof Error ? err.message : String(err)}): run setup again`);
11547
11294
  }
11548
11295
  const transport = o.transport ?? "auto";
11549
- if (!TRANSPORTS.includes(transport))
11550
- throw new O1ConnectError(
11551
- "invalid_config",
11552
- "the saved transport is not auto, websocket or post: run setup again"
11553
- );
11296
+ if (!TRANSPORTS.includes(transport)) throw new O1ConnectError("invalid_config", "the saved transport is not auto, websocket or post: run setup again");
11554
11297
  return { v: 1, ...code, transport };
11555
11298
  }
11556
11299
  __name(parseSaved, "parseSaved");
11557
11300
  async function setup(code, opts) {
11558
11301
  const store = checkStore(opts?.store);
11559
- if (typeof opts.onFingerprint !== "function")
11560
- throw new TypeError(
11561
- "onFingerprint is required: every key's fingerprint must be confirmed by the user"
11562
- );
11302
+ if (typeof opts.onFingerprint !== "function") throw new TypeError("onFingerprint is required: every key's fingerprint must be confirmed by the user");
11563
11303
  const name = entryName(opts.name);
11564
11304
  const transport = opts.transport ?? "auto";
11565
- if (!TRANSPORTS.includes(transport))
11566
- throw new TypeError("transport must be auto, websocket or post");
11305
+ if (!TRANSPORTS.includes(transport)) throw new TypeError("transport must be auto, websocket or post");
11567
11306
  let decoded;
11568
11307
  try {
11569
11308
  decoded = decodeConnectionCode(String(code ?? ""));
11570
11309
  } catch (err) {
11571
- throw new O1ConnectError(
11572
- "invalid_code",
11573
- err instanceof ConnectionCodeError ? err.message : "the connection code is not valid"
11574
- );
11310
+ throw new O1ConnectError("invalid_code", err instanceof ConnectionCodeError ? err.message : "the connection code is not valid");
11575
11311
  }
11576
11312
  const fingerprints = decoded.pins.map((p2) => fingerprint(p2));
11577
- const info = { device: decoded.device, url: decoded.url };
11313
+ const info = { device: decoded.device, url: decoded.url, ...decoded.urls ? { urls: [...decoded.urls] } : {} };
11578
11314
  if (await opts.onFingerprint([...fingerprints], { ...info }) !== true) {
11579
- throw new O1ConnectError(
11580
- "fingerprint_rejected",
11581
- "the proxy keys were not confirmed: nothing was saved"
11582
- );
11315
+ throw new O1ConnectError("fingerprint_rejected", "the proxy keys were not confirmed: nothing was saved");
11583
11316
  }
11584
11317
  const saved = { v: 1, ...decoded, transport };
11585
- await withEntry(
11586
- store,
11587
- name,
11588
- () => viaStore(
11589
- "save the configuration",
11590
- () => store.set(name, JSON.stringify(saved))
11591
- )
11592
- );
11318
+ await withEntry(store, name, () => viaStore("save the configuration", () => store.set(name, JSON.stringify(saved))));
11593
11319
  return { ...info, fingerprints };
11594
11320
  }
11595
11321
  __name(setup, "setup");
@@ -11597,14 +11323,9 @@ async function open(opts) {
11597
11323
  const store = checkStore(opts?.store);
11598
11324
  const name = entryName(opts.name);
11599
11325
  const port = opts.port ?? 0;
11600
- if (!Number.isInteger(port) || port < 0 || port > 65535)
11601
- throw new TypeError("port must be an integer from 0 to 65535");
11326
+ if (!Number.isInteger(port) || port < 0 || port > 65535) throw new TypeError("port must be an integer from 0 to 65535");
11602
11327
  const raw = await viaStore("read the configuration", () => store.get(name));
11603
- if (raw === null || raw === void 0)
11604
- throw new O1ConnectError(
11605
- "not_set_up",
11606
- "no o1-connect configuration in the store: run setup with a connection code"
11607
- );
11328
+ if (raw === null || raw === void 0) throw new O1ConnectError("not_set_up", "no o1-connect configuration in the store: run setup with a connection code");
11608
11329
  const cfg = parseSaved(raw);
11609
11330
  const log = opts.log ? (line) => {
11610
11331
  try {
@@ -11617,17 +11338,17 @@ async function open(opts) {
11617
11338
  try {
11618
11339
  session = await startTunnelSession({
11619
11340
  url: cfg.url,
11341
+ urls: cfg.urls,
11620
11342
  pins: cfg.pins,
11621
11343
  deviceToken: cfg.token,
11622
11344
  transport: cfg.transport,
11623
11345
  port,
11624
11346
  localKeyHash: hashLocalKey(apiKey),
11625
- userAgent: `o1-connect-lib/${VERSION}`,
11347
+ // Only when the app asks (like the CLI's identify): absent, nothing about the client goes on the wire.
11348
+ userAgent: opts.identify === true ? `o1-connect-lib/${VERSION}` : void 0,
11626
11349
  log,
11627
11350
  onMismatch: /* @__PURE__ */ __name((received) => {
11628
- log?.(
11629
- `TUNNEL IDENTITY MISMATCH: received ${received}; possible interception`
11630
- );
11351
+ log?.(`TUNNEL IDENTITY MISMATCH: received ${received}; possible interception`);
11631
11352
  try {
11632
11353
  opts.onMismatch?.(received);
11633
11354
  } catch {
@@ -11639,10 +11360,7 @@ async function open(opts) {
11639
11360
  // tried again by this connection) once setup replaced it or forget deleted it.
11640
11361
  savePinsStoppedLine: "the store now holds another configuration, or none (setup or forget ran since): the proxy keys learned by this connection are no longer saved",
11641
11362
  savePins: /* @__PURE__ */ __name((pins) => withEntry(store, name, async () => {
11642
- const raw2 = await viaStore(
11643
- "read the configuration",
11644
- () => store.get(name)
11645
- );
11363
+ const raw2 = await viaStore("read the configuration", () => store.get(name));
11646
11364
  if (raw2 === null || raw2 === void 0) return false;
11647
11365
  let current;
11648
11366
  try {
@@ -11650,25 +11368,15 @@ async function open(opts) {
11650
11368
  } catch {
11651
11369
  return false;
11652
11370
  }
11653
- if (current.url !== cfg.url || current.device !== cfg.device || current.token !== cfg.token)
11654
- return false;
11655
- await viaStore(
11656
- "save the configuration",
11657
- () => store.set(name, JSON.stringify({ ...current, pins }))
11658
- );
11371
+ if (current.url !== cfg.url || current.device !== cfg.device || current.token !== cfg.token) return false;
11372
+ await viaStore("save the configuration", () => store.set(name, JSON.stringify({ ...current, pins })));
11659
11373
  return true;
11660
11374
  }), "savePins")
11661
11375
  });
11662
11376
  } catch (err) {
11663
11377
  const code = err.code;
11664
- if (code === "EADDRINUSE")
11665
- throw new O1ConnectError("port_in_use", `port ${port} is in use`);
11666
- if (code === "EACCES" || code === "EADDRNOTAVAIL")
11667
- throw new O1ConnectError(
11668
- "port_unavailable",
11669
- `cannot listen on 127.0.0.1:${port} (${code})`,
11670
- { cause: err }
11671
- );
11378
+ if (code === "EADDRINUSE") throw new O1ConnectError("port_in_use", `port ${port} is in use`);
11379
+ if (code === "EACCES" || code === "EADDRNOTAVAIL") throw new O1ConnectError("port_unavailable", `cannot listen on 127.0.0.1:${port} (${code})`, { cause: err });
11672
11380
  throw err;
11673
11381
  }
11674
11382
  if (opts.check !== false) {
@@ -11677,39 +11385,20 @@ async function open(opts) {
11677
11385
  } catch (err) {
11678
11386
  await session.close();
11679
11387
  if (err instanceof IdentityMismatchError || err instanceof BackoffError) {
11680
- throw new O1ConnectError(
11681
- "identity_mismatch",
11682
- "the proxy presented a key that is not pinned: possible interception (nothing was sent)"
11683
- );
11388
+ throw new O1ConnectError("identity_mismatch", "the proxy presented a key that is not pinned: possible interception (nothing was sent)");
11684
11389
  }
11685
- throw new O1ConnectError(
11686
- "tunnel_unavailable",
11687
- `the tunnel did not answer: ${err instanceof Error ? err.message : String(err)}`
11688
- );
11390
+ throw new O1ConnectError("tunnel_unavailable", `the tunnel did not answer: ${err instanceof Error ? err.message : String(err)}`);
11689
11391
  }
11690
11392
  }
11691
11393
  const baseUrl = `http://127.0.0.1:${session.port}`;
11692
- log?.(
11693
- `o1-connect library ${VERSION} for ${cfg.device} listening on ${baseUrl} (transport ${cfg.transport})`
11694
- );
11695
- return {
11696
- baseUrl,
11697
- openaiBaseUrl: `${baseUrl}/v1`,
11698
- apiKey,
11699
- port: session.port,
11700
- device: cfg.device,
11701
- close: session.close
11702
- };
11394
+ log?.(`o1-connect library ${VERSION} for ${cfg.device} listening on ${baseUrl} (transport ${cfg.transport})`);
11395
+ return { baseUrl, openaiBaseUrl: `${baseUrl}/v1`, apiKey, port: session.port, device: cfg.device, close: session.close };
11703
11396
  }
11704
11397
  __name(open, "open");
11705
11398
  async function forget(opts) {
11706
11399
  const store = checkStore(opts?.store);
11707
11400
  const name = entryName(opts.name);
11708
- await withEntry(
11709
- store,
11710
- name,
11711
- () => viaStore("delete the configuration", () => store.delete(name))
11712
- );
11401
+ await withEntry(store, name, () => viaStore("delete the configuration", () => store.delete(name)));
11713
11402
  }
11714
11403
  __name(forget, "forget");
11715
11404
 
@@ -36772,7 +36461,7 @@ var LlmChat = class {
36772
36461
  const degradeAttempt = omniMediaDegradeAttempts++;
36773
36462
  let degradeOutcome;
36774
36463
  try {
36775
- const { degradeOmniMediaAfterServerReject } = await import("./reactive-degrade-VHPS7U44.js");
36464
+ const { degradeOmniMediaAfterServerReject } = await import("./reactive-degrade-CQ7ALF7Z.js");
36776
36465
  degradeOutcome = await degradeOmniMediaAfterServerReject(
36777
36466
  self2.config,
36778
36467
  self2.history,
@@ -74426,7 +74115,7 @@ var CoreToolScheduler = class _CoreToolScheduler {
74426
74115
  const notices = [];
74427
74116
  let omniProcessed = responseParts;
74428
74117
  if (this.config.isOmniEnabled?.()) {
74429
- const { processToolResultOmniMedia } = await import("./tool-result-media-NQAPMXYD.js");
74118
+ const { processToolResultOmniMedia } = await import("./tool-result-media-NLHN7JZU.js");
74430
74119
  omniProcessed = await processToolResultOmniMedia(
74431
74120
  responseParts,
74432
74121
  this.config,
@@ -77584,7 +77273,7 @@ ${body}
77584
77273
  artifacts: toolResult.artifacts
77585
77274
  } : void 0;
77586
77275
  if (policyArtifacts && policyArtifacts.executionOrigin.kind !== "fixed_policy" && scheduledCall.tool.mediaPolicyDescriptor) {
77587
- const { collectModelPolicyCall } = await import("./model-call-collection-7DIS7C2G.js");
77276
+ const { collectModelPolicyCall } = await import("./model-call-collection-3WVMJQ5M.js");
77588
77277
  await collectModelPolicyCall({
77589
77278
  config: this.config,
77590
77279
  batch: policyArtifacts,
@@ -171536,7 +171225,7 @@ var Config = class _Config {
171536
171225
  await this.proxyDispatcherReady;
171537
171226
  options2?.signal?.throwIfAborted();
171538
171227
  if (this.isOmniEnabled()) {
171539
- const { normalizeDedicatedOmniUploadConfig } = await import("./upload-config-6Z3CPQTV.js");
171228
+ const { normalizeDedicatedOmniUploadConfig } = await import("./upload-config-W3AEV3WP.js");
171540
171229
  this.omniUploadConfig = normalizeDedicatedOmniUploadConfig({
171541
171230
  baseUrl: this.omniUploadBaseUrl,
171542
171231
  apiKeyEnv: this.omniUploadApiKeyEnv,
@@ -175436,7 +175125,7 @@ var Config = class _Config {
175436
175125
  return this.omniPolicyTools;
175437
175126
  }
175438
175127
  async loadOmniMediaReader() {
175439
- return import("./omni-ANTNX2XB.js");
175128
+ return import("./omni-4T23JD65.js");
175440
175129
  }
175441
175130
  /** Normalized `omni.processing` view. Undefined until tool warmup
175442
175131
  * completes (or when omni is disabled). */
@@ -177012,7 +176701,7 @@ var Config = class _Config {
177012
176701
  async registerWorkflowTool(registry4) {
177013
176702
  if (registry4.getAllToolNames().includes(ToolNames.WORKFLOW)) return true;
177014
176703
  await this.registerLazyTool(registry4, ToolNames.WORKFLOW, async () => {
177015
- const { WorkflowTool } = await import("./workflow-5WQJENZ6.js");
176704
+ const { WorkflowTool } = await import("./workflow-XFMT6MFA.js");
177016
176705
  return new WorkflowTool(this);
177017
176706
  });
177018
176707
  return registry4.getAllToolNames().includes(ToolNames.WORKFLOW);
@@ -177092,16 +176781,16 @@ var Config = class _Config {
177092
176781
  const registerGoalWorkerTools = /* @__PURE__ */ __name(async () => {
177093
176782
  if (options2?.forSubAgent) return;
177094
176783
  await registerLazy(ToolNames.GET_GOAL, async () => {
177095
- const { GetGoalTool: GetGoalTool2 } = await import("./goal-tools-KL2MBM6T.js");
176784
+ const { GetGoalTool: GetGoalTool2 } = await import("./goal-tools-GKFYH6GK.js");
177096
176785
  return new GetGoalTool2(this);
177097
176786
  });
177098
176787
  await registerLazy(ToolNames.UPDATE_GOAL, async () => {
177099
- const { UpdateGoalTool: UpdateGoalTool2 } = await import("./goal-tools-KL2MBM6T.js");
176788
+ const { UpdateGoalTool: UpdateGoalTool2 } = await import("./goal-tools-GKFYH6GK.js");
177100
176789
  return new UpdateGoalTool2(this);
177101
176790
  });
177102
176791
  if (this.getModelProposedGoals() !== "disabled" && (resolveInteractionMode(this) === "interactive" || this.goalProposalHostSupported)) {
177103
176792
  await registerLazy(ToolNames.PROPOSE_GOAL, async () => {
177104
- const { ProposeGoalTool: ProposeGoalTool2 } = await import("./goal-tools-KL2MBM6T.js");
176793
+ const { ProposeGoalTool: ProposeGoalTool2 } = await import("./goal-tools-GKFYH6GK.js");
177105
176794
  return new ProposeGoalTool2(this);
177106
176795
  });
177107
176796
  }
@@ -177121,16 +176810,16 @@ var Config = class _Config {
177121
176810
  });
177122
176811
  }
177123
176812
  await registerLazy(ToolNames.WEB_FETCH, async () => {
177124
- const { WebFetchTool } = await import("./web-fetch-NMKFGF5A.js");
176813
+ const { WebFetchTool } = await import("./web-fetch-3Z32TKL7.js");
177125
176814
  return new WebFetchTool(this);
177126
176815
  });
177127
176816
  const hasExplicitWebSearchBackend = !!this.webSearchSettings?.model?.trim() || !!this.webSearchSettings?.baseUrl;
177128
176817
  if (!this.getBareMode() && !this.isSafeMode() && this.webSearchSettings?.enabled !== false && (this.webSearchSettings?.enabled === true || !hasExplicitWebSearchBackend)) {
177129
- const { evaluateWebSearchGate } = await import("./web-search-FT3NC3MF.js");
176818
+ const { evaluateWebSearchGate } = await import("./web-search-T7R5BOOJ.js");
177130
176819
  const gate = evaluateWebSearchGate(this);
177131
176820
  if (gate.ok) {
177132
176821
  await registerLazy(ToolNames.WEB_SEARCH, async () => {
177133
- const { WebSearchTool } = await import("./web-search-FT3NC3MF.js");
176822
+ const { WebSearchTool } = await import("./web-search-T7R5BOOJ.js");
177134
176823
  return new WebSearchTool(this);
177135
176824
  });
177136
176825
  } else if (!gate.silent && !this.webSearchNoticeEmitted && !options2?.forSubAgent) {
@@ -177147,8 +176836,8 @@ var Config = class _Config {
177147
176836
  );
177148
176837
  }
177149
176838
  const [{ createExecutionTools }, { wrapExecutionTool }] = await Promise.all([
177150
- import("./local-execution-environment-B2UY3HMI.js"),
177151
- import("./execution-tool-EXIGBLTL.js")
176839
+ import("./local-execution-environment-OSK4IEYP.js"),
176840
+ import("./execution-tool-45FRLDNU.js")
177152
176841
  ]);
177153
176842
  for (const [name, tool] of createExecutionTools(this)) {
177154
176843
  if (environment.toolNames && !environment.toolNames.has(name)) continue;
@@ -177163,7 +176852,7 @@ var Config = class _Config {
177163
176852
  return new ToolCallTool(registry4);
177164
176853
  });
177165
176854
  await registerLazy(ToolNames.TOOL_SEARCH, async () => {
177166
- const { ToolSearchTool } = await import("./tool-search-JJ7KQQ5S.js");
176855
+ const { ToolSearchTool } = await import("./tool-search-QGTV2ON5.js");
177167
176856
  return new ToolSearchTool(this);
177168
176857
  });
177169
176858
  if (this.executionEnvironment && !options2?.forSubAgent) {
@@ -177175,7 +176864,7 @@ var Config = class _Config {
177175
176864
  }
177176
176865
  if (this.shellExecutionSandbox) {
177177
176866
  await registerLazy(ToolNames.SHELL, async () => {
177178
- const { ShellTool: ShellTool2 } = await import("./shell-PN27CAHY.js");
176867
+ const { ShellTool: ShellTool2 } = await import("./shell-HWIE3YJY.js");
177179
176868
  return new ShellTool2(this);
177180
176869
  });
177181
176870
  await registerLazy(ToolNames.TASK_STOP, async () => {
@@ -177183,27 +176872,27 @@ var Config = class _Config {
177183
176872
  return new TaskStopTool(this);
177184
176873
  });
177185
176874
  await registerLazy(ToolNames.READ_FILE, async () => {
177186
- const { ReadFileTool } = await import("./read-file-SERUEXAP.js");
176875
+ const { ReadFileTool } = await import("./read-file-TGXV7LRJ.js");
177187
176876
  return new ReadFileTool(this);
177188
176877
  });
177189
176878
  await registerLazy(ToolNames.WRITE_FILE, async () => {
177190
- const { WriteFileTool } = await import("./write-file-AHGK3PK4.js");
176879
+ const { WriteFileTool } = await import("./write-file-HVNSGPXF.js");
177191
176880
  return new WriteFileTool(this);
177192
176881
  });
177193
176882
  await registerLazy(ToolNames.EDIT, async () => {
177194
- const { EditTool } = await import("./edit-UPV3RDKW.js");
176883
+ const { EditTool } = await import("./edit-V46XHSY7.js");
177195
176884
  return new EditTool(this);
177196
176885
  });
177197
176886
  await registerLazy(ToolNames.MONITOR, async () => {
177198
- const { MonitorTool } = await import("./monitor-5GBFRXN7.js");
176887
+ const { MonitorTool } = await import("./monitor-DVKR4R64.js");
177199
176888
  return new MonitorTool(this);
177200
176889
  });
177201
176890
  await registerLazy(ToolNames.AGENT, async () => {
177202
- const { AgentTool: AgentTool2 } = await import("./agent-U5KE7R4X.js");
176891
+ const { AgentTool: AgentTool2 } = await import("./agent-VI6IBJKP.js");
177203
176892
  return new AgentTool2(this);
177204
176893
  });
177205
176894
  await registerLazy(ToolNames.GLOB, async () => {
177206
- const { GlobTool } = await import("./glob-XTHACKUG.js");
176895
+ const { GlobTool } = await import("./glob-NHZYR52J.js");
177207
176896
  return new GlobTool(this);
177208
176897
  });
177209
176898
  await registerLazy(ToolNames.LS, async () => {
@@ -177222,19 +176911,19 @@ var Config = class _Config {
177222
176911
  }
177223
176912
  if (this.getBareMode()) {
177224
176913
  await registerLazy(ToolNames.READ_FILE, async () => {
177225
- const { ReadFileTool } = await import("./read-file-SERUEXAP.js");
176914
+ const { ReadFileTool } = await import("./read-file-TGXV7LRJ.js");
177226
176915
  return new ReadFileTool(this);
177227
176916
  });
177228
176917
  await registerLazy(ToolNames.EDIT, async () => {
177229
- const { EditTool } = await import("./edit-UPV3RDKW.js");
176918
+ const { EditTool } = await import("./edit-V46XHSY7.js");
177230
176919
  return new EditTool(this);
177231
176920
  });
177232
176921
  await registerLazy(ToolNames.NOTEBOOK_EDIT, async () => {
177233
- const { NotebookEditTool } = await import("./notebook-edit-ORYWDEMK.js");
176922
+ const { NotebookEditTool } = await import("./notebook-edit-LLJZI52V.js");
177234
176923
  return new NotebookEditTool(this);
177235
176924
  });
177236
176925
  await registerLazy(ToolNames.SHELL, async () => {
177237
- const { ShellTool: ShellTool2 } = await import("./shell-PN27CAHY.js");
176926
+ const { ShellTool: ShellTool2 } = await import("./shell-HWIE3YJY.js");
177238
176927
  return new ShellTool2(this);
177239
176928
  });
177240
176929
  await registerGoalWorkerTools();
@@ -177253,7 +176942,7 @@ var Config = class _Config {
177253
176942
  return new ToolCallTool(registry4);
177254
176943
  });
177255
176944
  await registerLazy(ToolNames.TOOL_SEARCH, async () => {
177256
- const { ToolSearchTool } = await import("./tool-search-JJ7KQQ5S.js");
176945
+ const { ToolSearchTool } = await import("./tool-search-QGTV2ON5.js");
177257
176946
  return new ToolSearchTool(this);
177258
176947
  });
177259
176948
  await registerLazy(ToolNames.READ_MCP_RESOURCE, async () => {
@@ -177261,7 +176950,7 @@ var Config = class _Config {
177261
176950
  return new ReadMcpResourceTool(this);
177262
176951
  });
177263
176952
  await registerLazy(ToolNames.AGENT, async () => {
177264
- const { AgentTool: AgentTool2 } = await import("./agent-U5KE7R4X.js");
176953
+ const { AgentTool: AgentTool2 } = await import("./agent-VI6IBJKP.js");
177265
176954
  return new AgentTool2(this);
177266
176955
  });
177267
176956
  await registerLazy(ToolNames.LIST_AGENTS, async () => {
@@ -177277,7 +176966,7 @@ var Config = class _Config {
177277
176966
  return new SendMessageTool(this);
177278
176967
  });
177279
176968
  await registerLazy(ToolNames.SKILL, async () => {
177280
- const { SkillTool } = await import("./skill-L6CRUQRR.js");
176969
+ const { SkillTool } = await import("./skill-PAU4TRSD.js");
177281
176970
  return new SkillTool(this);
177282
176971
  });
177283
176972
  if (this.isLsToolEnabled()) {
@@ -177287,11 +176976,11 @@ var Config = class _Config {
177287
176976
  });
177288
176977
  }
177289
176978
  await registerLazy(ToolNames.READ_FILE, async () => {
177290
- const { ReadFileTool } = await import("./read-file-SERUEXAP.js");
176979
+ const { ReadFileTool } = await import("./read-file-TGXV7LRJ.js");
177291
176980
  return new ReadFileTool(this);
177292
176981
  });
177293
176982
  await registerLazy(ToolNames.ZOOM_IMAGE, async () => {
177294
- const { ZoomImageTool } = await import("./zoom-image-IU5DRM6D.js");
176983
+ const { ZoomImageTool } = await import("./zoom-image-WLBUTVWK.js");
177295
176984
  return new ZoomImageTool(this);
177296
176985
  });
177297
176986
  if (this.getUseRipgrep()) {
@@ -177306,7 +176995,7 @@ var Config = class _Config {
177306
176995
  recordStartupEvent("config_initialize_ripgrep_probe_end");
177307
176996
  if (useRipgrep) {
177308
176997
  await registerLazy(ToolNames.GREP, async () => {
177309
- const { RipGrepTool } = await import("./ripGrep-2NTNXBII.js");
176998
+ const { RipGrepTool } = await import("./ripGrep-MJXCIT62.js");
177310
176999
  return new RipGrepTool(this);
177311
177000
  });
177312
177001
  } else {
@@ -177332,23 +177021,23 @@ var Config = class _Config {
177332
177021
  });
177333
177022
  }
177334
177023
  await registerLazy(ToolNames.GLOB, async () => {
177335
- const { GlobTool } = await import("./glob-XTHACKUG.js");
177024
+ const { GlobTool } = await import("./glob-NHZYR52J.js");
177336
177025
  return new GlobTool(this);
177337
177026
  });
177338
177027
  await registerLazy(ToolNames.EDIT, async () => {
177339
- const { EditTool } = await import("./edit-UPV3RDKW.js");
177028
+ const { EditTool } = await import("./edit-V46XHSY7.js");
177340
177029
  return new EditTool(this);
177341
177030
  });
177342
177031
  await registerLazy(ToolNames.NOTEBOOK_EDIT, async () => {
177343
- const { NotebookEditTool } = await import("./notebook-edit-ORYWDEMK.js");
177032
+ const { NotebookEditTool } = await import("./notebook-edit-LLJZI52V.js");
177344
177033
  return new NotebookEditTool(this);
177345
177034
  });
177346
177035
  await registerLazy(ToolNames.WRITE_FILE, async () => {
177347
- const { WriteFileTool } = await import("./write-file-AHGK3PK4.js");
177036
+ const { WriteFileTool } = await import("./write-file-HVNSGPXF.js");
177348
177037
  return new WriteFileTool(this);
177349
177038
  });
177350
177039
  await registerLazy(ToolNames.SHELL, async () => {
177351
- const { ShellTool: ShellTool2 } = await import("./shell-PN27CAHY.js");
177040
+ const { ShellTool: ShellTool2 } = await import("./shell-HWIE3YJY.js");
177352
177041
  return new ShellTool2(this);
177353
177042
  });
177354
177043
  await registerLazy(ToolNames.REPORT_FINDINGS, async () => {
@@ -177364,13 +177053,13 @@ var Config = class _Config {
177364
177053
  }
177365
177054
  if (!this.sdkMode && (supportsUserInteraction || options2?.forSubAgent)) {
177366
177055
  await registerLazy(ToolNames.EXIT_PLAN_MODE, async () => {
177367
- const { ExitPlanModeTool: ExitPlanModeTool2 } = await import("./exitPlanMode-7NRDPCOW.js");
177056
+ const { ExitPlanModeTool: ExitPlanModeTool2 } = await import("./exitPlanMode-IVJH3OXX.js");
177368
177057
  return new ExitPlanModeTool2(this);
177369
177058
  });
177370
177059
  }
177371
177060
  if (!this.sdkMode && supportsUserInteraction) {
177372
177061
  await registerLazy(ToolNames.ENTER_PLAN_MODE, async () => {
177373
- const { EnterPlanModeTool } = await import("./enterPlanMode-IFHOH44O.js");
177062
+ const { EnterPlanModeTool } = await import("./enterPlanMode-ZPTXYQMB.js");
177374
177063
  return new EnterPlanModeTool(this);
177375
177064
  });
177376
177065
  }
@@ -177437,7 +177126,7 @@ var Config = class _Config {
177437
177126
  }
177438
177127
  if (this.isAgentTeamEnabled()) {
177439
177128
  await registerLazy(ToolNames.TEAM_CREATE, async () => {
177440
- const { TeamCreateTool } = await import("./team-create-LFN7HQGC.js");
177129
+ const { TeamCreateTool } = await import("./team-create-4QRHJTSV.js");
177441
177130
  return new TeamCreateTool(this);
177442
177131
  });
177443
177132
  await registerLazy(ToolNames.TEAM_DELETE, async () => {
@@ -177445,7 +177134,7 @@ var Config = class _Config {
177445
177134
  return new TeamDeleteTool(this);
177446
177135
  });
177447
177136
  await registerLazy(ToolNames.TEAM_PLAN_APPROVAL, async () => {
177448
- const { TeamPlanApprovalTool } = await import("./team-plan-approval-EFVOZVSP.js");
177137
+ const { TeamPlanApprovalTool } = await import("./team-plan-approval-U6QCZ3I7.js");
177449
177138
  return new TeamPlanApprovalTool(this);
177450
177139
  });
177451
177140
  if (!options2?.forSubAgent) {
@@ -177541,7 +177230,7 @@ var Config = class _Config {
177541
177230
  }
177542
177231
  }
177543
177232
  await registerLazy(ToolNames.MONITOR, async () => {
177544
- const { MonitorTool } = await import("./monitor-5GBFRXN7.js");
177233
+ const { MonitorTool } = await import("./monitor-DVKR4R64.js");
177545
177234
  return new MonitorTool(this);
177546
177235
  });
177547
177236
  if (this.pendingMcpBudgetCallback) {