zidane 9.1.1 → 9.1.4

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 (279) hide show
  1. package/dist/{acp-Di9WvMDF.js → acp-Cl4gCZN6.js} +7 -7
  2. package/dist/{acp-Di9WvMDF.js.map → acp-Cl4gCZN6.js.map} +1 -1
  3. package/dist/acp-cli.js +5 -5
  4. package/dist/acp.d.ts +2 -2
  5. package/dist/acp.js +1 -1
  6. package/dist/{agent-DJhpTS-B.js → agent-Dh_XZ7fj.js} +74 -19
  7. package/dist/agent-Dh_XZ7fj.js.map +1 -0
  8. package/dist/agent.d.ts +1 -1
  9. package/dist/agent.js +1 -1
  10. package/dist/{auth-store-port-DFgf22oo.js → auth-store-port-DBl2JUC6.js} +2 -2
  11. package/dist/{auth-store-port-DFgf22oo.js.map → auth-store-port-DBl2JUC6.js.map} +1 -1
  12. package/dist/{auto-update-restart-BFB7Ek87.js → auto-update-restart-CF_kjcJd.js} +277 -41
  13. package/dist/auto-update-restart-CF_kjcJd.js.map +1 -0
  14. package/dist/{browser-BcoCCB_n.js → browser-BkdeKnxO.js} +56 -2
  15. package/dist/browser-BkdeKnxO.js.map +1 -0
  16. package/dist/{browser-entry-ypi8CyE-.d.ts → browser-entry-BCwruqNa.d.ts} +10 -10
  17. package/dist/{browser-entry-ypi8CyE-.d.ts.map → browser-entry-BCwruqNa.d.ts.map} +1 -1
  18. package/dist/channels.d.ts +5 -5
  19. package/dist/chat/browser.d.ts +4 -4
  20. package/dist/chat/browser.js +6 -6
  21. package/dist/chat/pure.d.ts +5 -5
  22. package/dist/chat/pure.js +8 -8
  23. package/dist/chat.d.ts +5 -5
  24. package/dist/chat.js +55 -55
  25. package/dist/chat.js.map +1 -1
  26. package/dist/{cli-shared-CabruH8Z.js → cli-shared-DIV9c5Nr.js} +4 -4
  27. package/dist/{cli-shared-CabruH8Z.js.map → cli-shared-DIV9c5Nr.js.map} +1 -1
  28. package/dist/cli-style-DBEm6CyT.js +105 -0
  29. package/dist/cli-style-DBEm6CyT.js.map +1 -0
  30. package/dist/{client-core-CIixwznM.d.ts → client-core-C_4m_oL6.d.ts} +4 -4
  31. package/dist/{client-core-CIixwznM.d.ts.map → client-core-C_4m_oL6.d.ts.map} +1 -1
  32. package/dist/{client-CCaIXWue.d.ts → client-ygTASGis.d.ts} +2 -2
  33. package/dist/{client-CCaIXWue.d.ts.map → client-ygTASGis.d.ts.map} +1 -1
  34. package/dist/codemode-worker.js +8 -5
  35. package/dist/codemode-worker.js.map +1 -1
  36. package/dist/codemode.d.ts +16 -0
  37. package/dist/codemode.d.ts.map +1 -1
  38. package/dist/codemode.js +2 -2
  39. package/dist/{connection-loop-QmWL-fJf.d.ts → connection-loop-D_pRONCr.d.ts} +4 -4
  40. package/dist/{connection-loop-QmWL-fJf.d.ts.map → connection-loop-D_pRONCr.d.ts.map} +1 -1
  41. package/dist/contexts/daytona.d.ts +3 -3
  42. package/dist/contexts/docker.d.ts +1 -1
  43. package/dist/contexts/e2b.d.ts +2 -2
  44. package/dist/contexts/sandbox.d.ts +1 -1
  45. package/dist/{contexts-C72b0mMa.js → contexts-DLZTSRHU.js} +17 -106
  46. package/dist/contexts-DLZTSRHU.js.map +1 -0
  47. package/dist/contexts.d.ts +4 -4
  48. package/dist/contexts.js +2 -2
  49. package/dist/{credentials-wwETW8rI.js → credentials-D71duF64.js} +2 -2
  50. package/dist/{credentials-wwETW8rI.js.map → credentials-D71duF64.js.map} +1 -1
  51. package/dist/{cwd-picker-CcekODCt.js → cwd-picker-BsHA6HKv.js} +4 -4
  52. package/dist/{cwd-picker-CcekODCt.js.map → cwd-picker-BsHA6HKv.js.map} +1 -1
  53. package/dist/daemon-cli.js +4 -3
  54. package/dist/daemon-cli.js.map +1 -1
  55. package/dist/{decisions-CXmK0nz9.js → decisions-hsw5XS2g.js} +3 -1
  56. package/dist/decisions-hsw5XS2g.js.map +1 -0
  57. package/dist/{discovery-DycXFxdA.js → discovery-DD4wPWKS.js} +4 -4
  58. package/dist/{discovery-DycXFxdA.js.map → discovery-DD4wPWKS.js.map} +1 -1
  59. package/dist/durable/sqlite.d.ts +2 -2
  60. package/dist/durable.d.ts +1 -1
  61. package/dist/{engine-VQ86XGdG.js → engine-BDmtgr2O.js} +6 -6
  62. package/dist/{engine-VQ86XGdG.js.map → engine-BDmtgr2O.js.map} +1 -1
  63. package/dist/{eval-Bod0I1W_.js → eval-CfGUDAkN.js} +3 -3
  64. package/dist/{eval-Bod0I1W_.js.map → eval-CfGUDAkN.js.map} +1 -1
  65. package/dist/eval.d.ts +1 -1
  66. package/dist/eval.js +1 -1
  67. package/dist/{executor-C7RQrkEq.js → executor-EWOhLyd9.js} +4 -4
  68. package/dist/{executor-C7RQrkEq.js.map → executor-EWOhLyd9.js.map} +1 -1
  69. package/dist/{extension-mark-BqKdEZwF.js → extension-mark-_rhkDWL5.js} +9 -6
  70. package/dist/extension-mark-_rhkDWL5.js.map +1 -0
  71. package/dist/extensions/testing.d.ts +1 -1
  72. package/dist/extensions/testing.js +2 -2
  73. package/dist/{extensions-BCx4QuGB.js → extensions-DklXPjiq.js} +8 -8
  74. package/dist/{extensions-BCx4QuGB.js.map → extensions-DklXPjiq.js.map} +1 -1
  75. package/dist/{extensions-client-D8tEAcMw.d.ts → extensions-client-D4Q2XRKV.d.ts} +31 -5
  76. package/dist/extensions-client-D4Q2XRKV.d.ts.map +1 -0
  77. package/dist/extensions.d.ts +1 -1
  78. package/dist/extensions.js +6 -6
  79. package/dist/{fold-rules-DvLK8pbf.d.ts → fold-rules-1DpDwG9h.d.ts} +2 -2
  80. package/dist/{fold-rules-DvLK8pbf.d.ts.map → fold-rules-1DpDwG9h.d.ts.map} +1 -1
  81. package/dist/{google-Crva32sk.js → google-BtMW9KzL.js} +2 -2
  82. package/dist/{google-Crva32sk.js.map → google-BtMW9KzL.js.map} +1 -1
  83. package/dist/{headless-CCm-jLLT.js → headless-CQm19BL0.js} +4 -4
  84. package/dist/{headless-CCm-jLLT.js.map → headless-CQm19BL0.js.map} +1 -1
  85. package/dist/headless.d.ts +1 -1
  86. package/dist/headless.js +1 -1
  87. package/dist/history-worker.js +1 -1
  88. package/dist/{host-BHMs9jsN.js → host-DEoEzQal.js} +13 -4
  89. package/dist/host-DEoEzQal.js.map +1 -0
  90. package/dist/{host-scoped-settings-CrbcqOkP.js → host-scoped-settings-WBYaCork.js} +2 -2
  91. package/dist/{host-scoped-settings-CrbcqOkP.js.map → host-scoped-settings-WBYaCork.js.map} +1 -1
  92. package/dist/{host-signals-Jsjd_-4g.js → host-signals-91zyko_i.js} +5 -5
  93. package/dist/{host-signals-Jsjd_-4g.js.map → host-signals-91zyko_i.js.map} +1 -1
  94. package/dist/{host-wO_6GW0y.js → host-uP3t08w8.js} +276 -103
  95. package/dist/host-uP3t08w8.js.map +1 -0
  96. package/dist/{host-version-CNAr9pov.js → host-version-_RHlAB29.js} +2 -2
  97. package/dist/{host-version-CNAr9pov.js.map → host-version-_RHlAB29.js.map} +1 -1
  98. package/dist/{index-C6nnKu32.d.ts → index-B0PLo9jn.d.ts} +4 -4
  99. package/dist/{index-C6nnKu32.d.ts.map → index-B0PLo9jn.d.ts.map} +1 -1
  100. package/dist/{index-Djnc8Peh.d.ts → index-De4x-s76.d.ts} +14 -14
  101. package/dist/{index-Djnc8Peh.d.ts.map → index-De4x-s76.d.ts.map} +1 -1
  102. package/dist/{index-CGbOWa7y.d.ts → index-WlE93Q6d.d.ts} +411 -3
  103. package/dist/index-WlE93Q6d.d.ts.map +1 -0
  104. package/dist/{index-CCf_WeTQ.d.ts → index-f-XWIoYo.d.ts} +2 -2
  105. package/dist/{index-CCf_WeTQ.d.ts.map → index-f-XWIoYo.d.ts.map} +1 -1
  106. package/dist/index.d.ts +5 -5
  107. package/dist/index.js +17 -17
  108. package/dist/ipc/browser-types.d.ts +304 -7
  109. package/dist/ipc/browser-types.d.ts.map +1 -1
  110. package/dist/ipc/browser.d.ts +4 -4
  111. package/dist/ipc/browser.js +2 -2
  112. package/dist/ipc/remote.d.ts +6 -6
  113. package/dist/ipc/remote.js +3 -3
  114. package/dist/{ipc-BzWhIybr.js → ipc-CatnsVEd.js} +4 -4
  115. package/dist/{ipc-BzWhIybr.js.map → ipc-CatnsVEd.js.map} +1 -1
  116. package/dist/ipc.d.ts +10 -10
  117. package/dist/ipc.js +8 -8
  118. package/dist/{json-Dj-YATkZ.js → json-BjClr43H.js} +2 -20
  119. package/dist/json-BjClr43H.js.map +1 -0
  120. package/dist/{links-CJG_rFvf.js → links-a8C9eby4.js} +9 -9
  121. package/dist/{links-CJG_rFvf.js.map → links-a8C9eby4.js.map} +1 -1
  122. package/dist/{loaded-entry-DTURJo_R.js → loaded-entry-D6jzt5HQ.js} +2 -2
  123. package/dist/{loaded-entry-DTURJo_R.js.map → loaded-entry-D6jzt5HQ.js.map} +1 -1
  124. package/dist/mcp.d.ts +1 -1
  125. package/dist/{media-type-BtA0cbfI.d.ts → media-type-ZSmAGHvg.d.ts} +188 -7
  126. package/dist/media-type-ZSmAGHvg.d.ts.map +1 -0
  127. package/dist/{memory-DuVGrzbl.js → memory-CJy52DNi.js} +132 -31
  128. package/dist/memory-CJy52DNi.js.map +1 -0
  129. package/dist/model-test-CAtJ76kM.js.map +1 -1
  130. package/dist/{move-session-kylExJ5H.js → move-session-D7ILECs-.js} +4 -4
  131. package/dist/{move-session-kylExJ5H.js.map → move-session-D7ILECs-.js.map} +1 -1
  132. package/dist/{nested-call-record-DlzPeTB7.js → nested-call-record-OayszZBQ.js} +4 -3
  133. package/dist/nested-call-record-OayszZBQ.js.map +1 -0
  134. package/dist/output/stream-json.d.ts +1 -1
  135. package/dist/output/terminal.d.ts +1 -1
  136. package/dist/{path-display-COVV71Yu.js → path-display-CAWz-sMq.js} +3 -3
  137. package/dist/{path-display-COVV71Yu.js.map → path-display-CAWz-sMq.js.map} +1 -1
  138. package/dist/plugins.d.ts +1 -1
  139. package/dist/{prelude-CVKoUzV8.js → prelude-BwiSR1uA.js} +16 -5
  140. package/dist/prelude-BwiSR1uA.js.map +1 -0
  141. package/dist/{presets-CBt6rFfS.js → presets-CMY43nUP.js} +3 -3
  142. package/dist/{presets-CBt6rFfS.js.map → presets-CMY43nUP.js.map} +1 -1
  143. package/dist/presets.d.ts +1 -1
  144. package/dist/presets.js +1 -1
  145. package/dist/{protocol-CEVqBO-q.d.ts → protocol-C2lqKuMd.d.ts} +50 -7
  146. package/dist/protocol-C2lqKuMd.d.ts.map +1 -0
  147. package/dist/protocol-DOGyHgLQ.js.map +1 -1
  148. package/dist/protocol-NSllElLw.js.map +1 -1
  149. package/dist/providers/anthropic.d.ts +1 -1
  150. package/dist/providers/arcee.d.ts +1 -1
  151. package/dist/providers/baseten.d.ts +1 -1
  152. package/dist/providers/cerebras.d.ts +1 -1
  153. package/dist/providers/google.d.ts +1 -1
  154. package/dist/providers/google.js +1 -1
  155. package/dist/providers/local.d.ts +1 -1
  156. package/dist/providers/neuralwatt.d.ts +1 -1
  157. package/dist/providers/openai-compat.d.ts +1 -1
  158. package/dist/providers/openai.d.ts +1 -1
  159. package/dist/providers/openrouter.d.ts +1 -1
  160. package/dist/providers/xai.d.ts +1 -1
  161. package/dist/{providers-Z0TaBp1O.js → providers-zVRxiJDv.js} +5 -5
  162. package/dist/providers-zVRxiJDv.js.map +1 -0
  163. package/dist/providers.d.ts +1 -1
  164. package/dist/providers.js +1 -1
  165. package/dist/{readonly-db-D7Z-k0pQ.js → readonly-db-DrbT8tX6.js} +2 -2
  166. package/dist/{readonly-db-D7Z-k0pQ.js.map → readonly-db-DrbT8tX6.js.map} +1 -1
  167. package/dist/{registry-BKjeBnoy.js → registry-CBoYDIND.js} +2 -2
  168. package/dist/{registry-BKjeBnoy.js.map → registry-CBoYDIND.js.map} +1 -1
  169. package/dist/{registry-B6Ww76iW.js → registry-CQOU5jvF.js} +2 -2
  170. package/dist/{registry-B6Ww76iW.js.map → registry-CQOU5jvF.js.map} +1 -1
  171. package/dist/{registry-B9INJwJR.js → registry-YUUqbYGr.js} +324 -39
  172. package/dist/registry-YUUqbYGr.js.map +1 -0
  173. package/dist/{remote-hosts-BMWoHCWO.js → remote-hosts-CT8Q95dR.js} +4 -4
  174. package/dist/{remote-hosts-BMWoHCWO.js.map → remote-hosts-CT8Q95dR.js.map} +1 -1
  175. package/dist/{repo-url-D4Dr8NfZ.js → repo-url-DLjjuVk_.js} +169 -2
  176. package/dist/repo-url-DLjjuVk_.js.map +1 -0
  177. package/dist/restate.d.ts +2 -2
  178. package/dist/{sandbox-BwiPGKF7.d.ts → sandbox-B4OW6oNx.d.ts} +2 -2
  179. package/dist/{sandbox-BwiPGKF7.d.ts.map → sandbox-B4OW6oNx.d.ts.map} +1 -1
  180. package/dist/script-progress-CrZ507Qq.js +900 -0
  181. package/dist/script-progress-CrZ507Qq.js.map +1 -0
  182. package/dist/session/sqlite.d.ts +1 -1
  183. package/dist/session.d.ts +1 -1
  184. package/dist/{setting-BQBSyUq0.js → setting-_jh2OtiL.js} +6 -6
  185. package/dist/{setting-BQBSyUq0.js.map → setting-_jh2OtiL.js.map} +1 -1
  186. package/dist/{settings-catalog-4IU2i_jG.js → settings-catalog-DEZlXP51.js} +14 -2
  187. package/dist/settings-catalog-DEZlXP51.js.map +1 -0
  188. package/dist/{settings-keys-iI_Y-7MC.js → settings-keys-BT0_oKjO.js} +3 -3
  189. package/dist/{settings-keys-iI_Y-7MC.js.map → settings-keys-BT0_oKjO.js.map} +1 -1
  190. package/dist/{skills-CFXRItJ6.js → skills-CEbosUlM.js} +2 -2
  191. package/dist/{skills-CFXRItJ6.js.map → skills-CEbosUlM.js.map} +1 -1
  192. package/dist/skills.d.ts +1 -1
  193. package/dist/skills.js +1 -1
  194. package/dist/{source-Bl1Z501r.js → source-3ZnEPOSa.js} +3 -2
  195. package/dist/source-3ZnEPOSa.js.map +1 -0
  196. package/dist/{sqlite-runtime-BZ2L4RaG.d.ts → sqlite-runtime-CS_LBaAN.d.ts} +2 -2
  197. package/dist/sqlite-runtime-CS_LBaAN.d.ts.map +1 -0
  198. package/dist/{src-BY_ND2xn.js → src-BmTXDta8.js} +2 -2
  199. package/dist/{src-BY_ND2xn.js.map → src-BmTXDta8.js.map} +1 -1
  200. package/dist/{store-C6gI7FfZ.js → store-ByCDaKgJ.js} +14 -3
  201. package/dist/store-ByCDaKgJ.js.map +1 -0
  202. package/dist/{system-freeze-m5o1sGIM.js → system-freeze-DxJ-lRhu.js} +3 -3
  203. package/dist/{system-freeze-m5o1sGIM.js.map → system-freeze-DxJ-lRhu.js.map} +1 -1
  204. package/dist/{todo-edits-CbukbjyV.js → todo-edits-Dyj32ds6.js} +4 -3
  205. package/dist/todo-edits-Dyj32ds6.js.map +1 -0
  206. package/dist/tools/fetch-url.d.ts +1 -1
  207. package/dist/tools/web-search.d.ts +1 -1
  208. package/dist/{tools-CVTGhggj.js → tools-BsrGQ8K4.js} +2 -2
  209. package/dist/{tools-CVTGhggj.js.map → tools-BsrGQ8K4.js.map} +1 -1
  210. package/dist/tools.d.ts +1 -1
  211. package/dist/tools.js +3 -3
  212. package/dist/{transcript-anchors-CiSi_UBn.js → transcript-anchors-DMjvyUjk.js} +3 -3
  213. package/dist/{transcript-anchors-CiSi_UBn.js.map → transcript-anchors-DMjvyUjk.js.map} +1 -1
  214. package/dist/{transcript-reconcile-jbSBjLq2.js → transcript-reconcile-DpQO85wl.js} +3 -3
  215. package/dist/{transcript-reconcile-jbSBjLq2.js.map → transcript-reconcile-DpQO85wl.js.map} +1 -1
  216. package/dist/tui.d.ts +9 -9
  217. package/dist/tui.d.ts.map +1 -1
  218. package/dist/tui.js +289 -38
  219. package/dist/tui.js.map +1 -1
  220. package/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +20 -8
  221. package/dist/types-2HrgolQz.d.ts.map +1 -0
  222. package/dist/types-4q1bFG53.js +122 -0
  223. package/dist/types-4q1bFG53.js.map +1 -0
  224. package/dist/{types-DnRd9_cA.d.ts → types-SXqk6hLD.d.ts} +3 -3
  225. package/dist/{types-DnRd9_cA.d.ts.map → types-SXqk6hLD.d.ts.map} +1 -1
  226. package/dist/types-myxheQkw.js.map +1 -1
  227. package/dist/types.d.ts +3 -3
  228. package/dist/{usage-summary-BfcXjiSM.js → usage-summary-BM7B3JdI.js} +2 -2
  229. package/dist/{usage-summary-BfcXjiSM.js.map → usage-summary-BM7B3JdI.js.map} +1 -1
  230. package/dist/{version-DqqqvHDP.js → version-DwQI12WA.js} +2 -2
  231. package/dist/{version-DqqqvHDP.js.map → version-DwQI12WA.js.map} +1 -1
  232. package/dist/{wait-task-BX4NcOOm.js → wait-task-BiI5UaZQ.js} +13 -3
  233. package/dist/wait-task-BiI5UaZQ.js.map +1 -0
  234. package/dist/{wire-CLm2rMK0.js → wire-Dxwxb7QQ.js} +2 -2
  235. package/dist/{wire-CLm2rMK0.js.map → wire-Dxwxb7QQ.js.map} +1 -1
  236. package/dist/{write-file-0E6TUJ9A.js → write-file-Dquu7MzB.js} +5 -3
  237. package/dist/write-file-Dquu7MzB.js.map +1 -0
  238. package/dist/{ws-DfGGYQ4W.js → ws-CA3o2nie.js} +4 -4
  239. package/dist/{ws-DfGGYQ4W.js.map → ws-CA3o2nie.js.map} +1 -1
  240. package/dist/{ws-client-CFMbhsNq.js → ws-client-C0iPAAzc.js} +2 -2
  241. package/dist/{ws-client-CFMbhsNq.js.map → ws-client-C0iPAAzc.js.map} +1 -1
  242. package/docs/CHAT.md +55 -0
  243. package/docs/CODEMODE.md +37 -0
  244. package/docs/EXTENSIONS.md +8 -6
  245. package/docs/RELEASE-NOTES-NEXT.md +48 -1
  246. package/docs/RELEASE.md +9 -1
  247. package/package.json +2 -3
  248. package/dist/agent-DJhpTS-B.js.map +0 -1
  249. package/dist/auto-update-restart-BFB7Ek87.js.map +0 -1
  250. package/dist/browser-BcoCCB_n.js.map +0 -1
  251. package/dist/contexts-C72b0mMa.js.map +0 -1
  252. package/dist/decisions-CXmK0nz9.js.map +0 -1
  253. package/dist/extension-mark-BqKdEZwF.js.map +0 -1
  254. package/dist/extensions-client-D8tEAcMw.d.ts.map +0 -1
  255. package/dist/host-BHMs9jsN.js.map +0 -1
  256. package/dist/host-wO_6GW0y.js.map +0 -1
  257. package/dist/index-CGbOWa7y.d.ts.map +0 -1
  258. package/dist/json-Dj-YATkZ.js.map +0 -1
  259. package/dist/media-type-BtA0cbfI.d.ts.map +0 -1
  260. package/dist/memory-DuVGrzbl.js.map +0 -1
  261. package/dist/nested-call-events-BYk8XvGX.js +0 -182
  262. package/dist/nested-call-events-BYk8XvGX.js.map +0 -1
  263. package/dist/nested-call-record-DlzPeTB7.js.map +0 -1
  264. package/dist/prelude-CVKoUzV8.js.map +0 -1
  265. package/dist/protocol-CEVqBO-q.d.ts.map +0 -1
  266. package/dist/providers-Z0TaBp1O.js.map +0 -1
  267. package/dist/registry-B9INJwJR.js.map +0 -1
  268. package/dist/repo-url-D4Dr8NfZ.js.map +0 -1
  269. package/dist/settings-catalog-4IU2i_jG.js.map +0 -1
  270. package/dist/source-Bl1Z501r.js.map +0 -1
  271. package/dist/sqlite-runtime-BZ2L4RaG.d.ts.map +0 -1
  272. package/dist/store-C6gI7FfZ.js.map +0 -1
  273. package/dist/todo-edits-CbukbjyV.js.map +0 -1
  274. package/dist/types-DTMEhKJO.js +0 -14
  275. package/dist/types-DTMEhKJO.js.map +0 -1
  276. package/dist/types-bDQagoiL.d.ts.map +0 -1
  277. package/dist/wait-task-BX4NcOOm.js.map +0 -1
  278. package/dist/write-file-0E6TUJ9A.js.map +0 -1
  279. package/scripts/eval.ts +0 -179
@@ -209,7 +209,8 @@ async function fetchInstallSource(source, destDir, io = {}, onProgress) {
209
209
  GIT_SSH_COMMAND: sshCommandWithBatchMode(process.env.GIT_SSH_COMMAND)
210
210
  } });
211
211
  if (ssh.ok) res = ssh;
212
- else throw new InstallSourceError("fetch-failed", `Could not clone ${source.owner}/${source.repo}: it does not exist, or it is private and git on this computer has no access to it. ${PRIVATE_REPO_ACCESS} (HTTPS: ${lastLine(res.stderr)} SSH: ${lastLine(ssh.stderr)})`);
212
+ else if (/repository not found|permission denied \(publickey\)|could not read username|authentication failed/i.test(ssh.stderr)) throw new InstallSourceError("fetch-failed", `Could not clone ${source.owner}/${source.repo}: it does not exist, or it is private and git on this computer has no access to it. ${PRIVATE_REPO_ACCESS} (HTTPS: ${lastLine(res.stderr)} SSH: ${lastLine(ssh.stderr)})`);
213
+ else throw new InstallSourceError("fetch-failed", `git clone failed for ${label}: ${lastLine(ssh.stderr)} (HTTPS: ${lastLine(res.stderr)})`);
213
214
  }
214
215
  if (!res.ok) throw new InstallSourceError("fetch-failed", `git clone failed for ${label}: ${lastLine(res.stderr)}`);
215
216
  const head = await exec("git", ["rev-parse", "HEAD"], { cwd: destDir });
@@ -416,4 +417,4 @@ function errorText(err) {
416
417
  //#endregion
417
418
  export { fetchInstallSource as a, resolveNpmVersion as c, defaultWhich as i, resolveSubdirRoot as l, abortableInstallIo as n, lastLine as o, defaultExec as r, parseInstallSource as s, InstallSourceError as t };
418
419
 
419
- //# sourceMappingURL=source-Bl1Z501r.js.map
420
+ //# sourceMappingURL=source-3ZnEPOSa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-3ZnEPOSa.js","names":[],"sources":["../src/install/source.ts"],"sourcesContent":["/**\n * Shared install-source layer — the source-agnostic half of \"install a\n * thing from github/npm\". The extensions installer and the skill installer\n * both use the same spec grammar, fetch pipeline, and hardening, so neither\n * forks them:\n *\n * - Spec grammar: `owner/repo[#ref][:subdir]`, `github:owner/repo`,\n * pasted GitHub URLs (including `/tree/<ref>/<path>`),\n * `pkg[@version]`, `@scope/pkg[@version]`.\n * - Fetch: `git clone --depth 1` (records the exact commit) with a\n * codeload-tarball fallback, npm registry resolve (exact versions +\n * dist-tags) + tarball download. Downloads are double-capped at\n * {@link MAX_DOWNLOAD_BYTES} (content-length header AND post-hoc for\n * chunked responses). Extraction requires `tar` on PATH.\n * - All side effects go through the injectable {@link InstallIo} seams\n * so tests stay offline and hosts can instrument.\n *\n * Flavor-specific concerns stay OUT of this module: candidate\n * enumeration, validation, target roots, provenance files, dependency\n * installs. Flavors subclass {@link InstallSourceError} to widen the\n * error-code union while keeping `.code`-based handling uniform.\n */\n\nimport { execFile } from 'node:child_process'\nimport { lstatSync, mkdirSync, realpathSync, rmSync, writeFileSync } from 'node:fs'\nimport { delimiter, join, resolve, sep } from 'node:path'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type InstallScope = 'project' | 'user'\n\nexport type InstallSource\n = | {\n kind: 'github'\n owner: string\n repo: string\n /** Branch, tag (`#ref` or `@ref`), or the `/tree/<ref>` URL segment. */\n ref?: string\n /** Repo-relative directory to root the search in (`:path` suffix). */\n subdir?: string\n }\n | { kind: 'npm', pkg: string, version?: string }\n\n/**\n * Base error for install pipelines. `code` is a plain string here so\n * flavors (extensions, skills) can widen it with their own codes while\n * callers keep a single `err.code` switch. The base layer itself only\n * throws `'invalid-source'` and `'fetch-failed'`.\n */\nexport class InstallSourceError extends Error {\n readonly code: string\n /** Set for candidate-selection errors — the names the caller can pick from. */\n readonly candidates?: readonly string[]\n constructor(code: string, message: string, candidates?: readonly string[]) {\n super(message)\n this.name = 'InstallSourceError'\n this.code = code\n if (candidates)\n this.candidates = candidates\n }\n}\n\n/**\n * Injectable side-effect seams — tests swap these to stay offline; hosts\n * normally omit the whole object.\n */\nexport interface InstallIo {\n fetch?: typeof fetch\n /** `opts.signal`: the install was stopped; the child is killed (`defaultExec`). */\n exec?: (cmd: string, args: readonly string[], opts: { cwd?: string, env?: Record<string, string>, signal?: AbortSignal }) => Promise<{ ok: boolean, stdout: string, stderr: string }>\n which?: (cmd: string) => string | null\n}\n\n/**\n * `io` stopped by `signal` (a bounded install, `catalog.install` on a\n * server): every exec gets it (the child is killed), every fetch too, and\n * once it fired no further step starts and the current one throws, so the\n * installer's own rollback (staging dir, transactional target) runs.\n */\nexport function abortableInstallIo(io: InstallIo | undefined, signal: AbortSignal): InstallIo {\n const exec = io?.exec ?? defaultExec\n const fetchImpl = io?.fetch ?? fetch\n const stopped = (): void => {\n if (signal.aborted)\n throw new InstallSourceError('fetch-failed', 'The install was stopped.')\n }\n return {\n ...io,\n exec: async (cmd, args, opts) => {\n stopped()\n const result = await exec(cmd, args, { ...opts, signal })\n stopped()\n return result\n },\n fetch: (async (input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) => {\n stopped()\n return fetchImpl(input, { ...init, signal })\n }) as typeof fetch,\n }\n}\n\nexport interface FetchSourceResult {\n /** Human-readable provenance, e.g. `npm:foo@1.2.3` / `github:owner/repo@main`. */\n provenance: string\n /** Exact commit SHA (git clone path only) — anchors update no-op checks. */\n commit?: string\n}\n\n// ---------------------------------------------------------------------------\n// Source spec parsing\n// ---------------------------------------------------------------------------\n\nconst GITHUB_TREE_URL_RE = /^(?:https?:\\/\\/)?(?:www\\.)?github\\.com\\/([^/\\s]+)\\/([^/\\s#@:]+?)(?:\\.git)?\\/tree\\/([^/\\s:]+)(?:\\/([^\\s:]+?))?\\/?$/\nconst GITHUB_URL_RE = /^(?:https?:\\/\\/)?(?:www\\.)?github\\.com\\/([^/\\s]+)\\/([^/\\s#@:]+?)(?:\\.git)?\\/?$/\nconst OWNER_REPO_RE = /^([\\w.-]+)\\/([\\w.-]+)$/\nconst GITHUB_REF_RE = /^[\\w./-]+$/\nconst NPM_NAME_RE = /^(@[\\w.-]+\\/[\\w.-]+|[\\w.-]+)(?:@([\\w.^~><=*-]+))?$/\n\n/** A ref to pin, or none: `HEAD` (as in `/tree/HEAD/…` links) is the default branch, which `git clone --branch` does not take. */\nfunction pinnedRef(ref: string | undefined): string | undefined {\n return ref && ref !== 'HEAD' ? ref : undefined\n}\n\n/** Structural validation for a `:subdir` suffix — repo-relative, no escapes. */\nfunction parseSubdir(rawSubdir: string, raw: string): string {\n const subdir = rawSubdir.replace(/^\\.\\//, '').replace(/\\/+$/, '')\n const segments = subdir.split('/')\n const bad = subdir.length === 0\n || subdir.startsWith('/')\n || subdir.includes('\\\\')\n || segments.some(s => s.length === 0 || s === '.' || s === '..')\n if (bad)\n throw new InstallSourceError('invalid-source', `\"${raw}\" has an invalid subdirectory. Use a repo-relative path (no leading /, no ..).`)\n return subdir\n}\n\n/**\n * Classify a raw source string:\n *\n * - `github:owner/repo`, `owner/repo`, GitHub URLs (including\n * `/tree/<ref>/<path>` links) → GitHub. Optional `#ref` (or\n * `@ref`) pins a branch/tag; optional `:path/to/dir` roots the\n * candidate search in a subdirectory: `owner/repo#branch:packages/x`.\n * - `@scope/pkg[@version]`, `pkg[@version]` → npm (no subdir support —\n * flavors expose their own selector for multi-candidate packages).\n *\n * The one ambiguity — `a/b` — is resolved as GitHub: npm's slash names\n * are always scoped (`@scope/…`), so a bare `owner/repo` can only be a\n * repo. Throws `invalid-source` on anything else.\n */\nexport function parseInstallSource(raw: string): InstallSource {\n const spec = raw.trim()\n if (spec.length === 0)\n throw new InstallSourceError('invalid-source', 'Empty source. Expected `owner/repo`, `github:owner/repo`, a GitHub URL, or an npm package name.')\n\n const explicitGithub = spec.startsWith('github:')\n const body = explicitGithub ? spec.slice('github:'.length) : spec\n\n // Pasted GitHub “tree” links carry both the ref and the subdir. Branch\n // names with slashes are inherently ambiguous in these URLs (GitHub has\n // the same problem) — the first segment after /tree/ is taken as the ref.\n const tree = GITHUB_TREE_URL_RE.exec(body)\n if (tree) {\n const ref = pinnedRef(tree[3])\n return {\n kind: 'github',\n owner: tree[1] as string,\n repo: tree[2] as string,\n ...(ref ? { ref } : {}),\n ...(tree[4] ? { subdir: parseSubdir(tree[4], raw) } : {}),\n }\n }\n\n const url = GITHUB_URL_RE.exec(body)\n if (url)\n return { kind: 'github', owner: url[1] as string, repo: url[2] as string }\n\n if (body.startsWith('@')) {\n if (explicitGithub)\n throw new InstallSourceError('invalid-source', `\"${raw}\" mixes the github: prefix with an npm scoped name.`)\n if (body.includes(':'))\n throw new InstallSourceError('invalid-source', `\"${raw}\": subdirectories (\\`:path\\`) are only supported for GitHub sources.`)\n const m = NPM_NAME_RE.exec(body)\n if (!m)\n throw new InstallSourceError('invalid-source', `\"${raw}\" is not a valid npm package spec.`)\n return { kind: 'npm', pkg: m[1] as string, ...(m[2] ? { version: m[2] } : {}) }\n }\n\n if (body.includes('/')) {\n // Shorthand grammar: owner/repo[#ref | @ref][:subdir]. The subdir is\n // split first (paths may contain `@`), then the ref — `#` preferred,\n // `@` also accepted.\n const colonIdx = body.indexOf(':')\n const specPart = colonIdx === -1 ? body : body.slice(0, colonIdx)\n const subdir = colonIdx === -1 ? undefined : parseSubdir(body.slice(colonIdx + 1), raw)\n const hashIdx = specPart.indexOf('#')\n const refIdx = hashIdx >= 0 ? hashIdx : specPart.indexOf('@')\n const repoPart = refIdx === -1 ? specPart : specPart.slice(0, refIdx)\n const ref = refIdx === -1 ? undefined : specPart.slice(refIdx + 1)\n const m = OWNER_REPO_RE.exec(repoPart)\n if (!m || (ref !== undefined && !GITHUB_REF_RE.test(ref)))\n throw new InstallSourceError('invalid-source', `\"${raw}\" is not a valid GitHub repo spec (expected owner/repo, optionally #ref and :subdir).`)\n const pinned = pinnedRef(ref)\n return {\n kind: 'github',\n owner: m[1] as string,\n repo: m[2] as string,\n ...(pinned ? { ref: pinned } : {}),\n ...(subdir ? { subdir } : {}),\n }\n }\n\n if (explicitGithub)\n throw new InstallSourceError('invalid-source', `\"${raw}\" is missing the repo part (expected github:owner/repo).`)\n if (body.includes(':'))\n throw new InstallSourceError('invalid-source', `\"${raw}\": subdirectories (\\`:path\\`) are only supported for GitHub sources.`)\n const m = NPM_NAME_RE.exec(body)\n if (!m)\n throw new InstallSourceError('invalid-source', `\"${raw}\" is not a valid npm package spec.`)\n return { kind: 'npm', pkg: m[1] as string, ...(m[2] ? { version: m[2] } : {}) }\n}\n\n// ---------------------------------------------------------------------------\n// Fetch\n// ---------------------------------------------------------------------------\n\n/**\n * How to reach a private GitHub repository from an install, which clones\n * with git (HTTPS through git's credential helper, then SSH keys): a token\n * in the environment is not read by git.\n */\nexport const PRIVATE_REPO_ACCESS = 'To install from a private repository, sign in with `gh auth login` and run `gh auth setup-git` (git then uses your gh login), or add an SSH key to your GitHub account. GITHUB_TOKEN alone does not reach git.'\n\n/**\n * Materialize the source into `destDir` (created by the caller, assumed\n * empty). Returns the provenance string plus, for git clones, the exact\n * commit SHA (the tarball fallback can't know it — codeload doesn't\n * expose the resolved commit).\n */\nexport async function fetchInstallSource(\n source: InstallSource,\n destDir: string,\n io: InstallIo = {},\n onProgress?: (message: string) => void,\n): Promise<FetchSourceResult> {\n const exec = io.exec ?? defaultExec\n const which = io.which ?? defaultWhich\n const fetchImpl = io.fetch ?? fetch\n\n if (source.kind === 'github') {\n const label = `${source.owner}/${source.repo}${source.ref ? `@${source.ref}` : ''}${source.subdir ? `:${source.subdir}` : ''}`\n if (which('git')) {\n onProgress?.(`cloning github.com/${label}…`)\n // The whole repo is cloned even for `:subdir` installs — shallow +\n // single-branch keeps that cheap, and only the subdir is copied out.\n const cloneArgs = (url: string): string[] => {\n const args = ['clone', '--depth', '1', '--single-branch']\n if (source.ref)\n args.push('--branch', source.ref)\n args.push(url, destDir)\n return args\n }\n // GIT_TERMINAL_PROMPT=0: a private/nonexistent repo must fail fast\n // with a clear error — git's interactive credential prompt would\n // otherwise leak into the host TUI and hang the install. HTTPS goes\n // first: it needs no keys and covers the public-repo common case.\n let res = await exec('git', cloneArgs(`https://github.com/${source.owner}/${source.repo}.git`), { env: { GIT_TERMINAL_PROMPT: '0' } })\n // `repository not found` is an auth signal too: GitHub 404-masks\n // private repos, so a machine WITH a credential helper (osxkeychain,\n // gh) whose token lacks access gets \"Repository not found.\" instead\n // of a username prompt — a truly nonexistent repo just fails the SSH\n // retry as well, and the combined error reports both outcomes.\n if (!res.ok && /could not read username|terminal prompts disabled|authentication failed|repository not found/i.test(res.stderr)) {\n // Anonymous HTTPS was rejected — likely a private repo. Retry over\n // SSH with the user's own keys before giving up. `BatchMode=yes`\n // keeps SSH as non-interactive as the HTTPS attempt: a missing or\n // passphrase-locked key (with no agent) fails fast instead of\n // hanging the host TUI on a prompt. A failed clone can leave\n // droppings in `destDir` — reset it so git doesn't refuse the\n // retry with \"destination path already exists\".\n rmSync(destDir, { recursive: true, force: true })\n mkdirSync(destDir, { recursive: true })\n onProgress?.(`anonymous clone rejected, retrying over SSH (git@github.com:${source.owner}/${source.repo})…`)\n // Extend — don't replace — any user-configured SSH command: the env\n // var outranks `core.sshCommand`, so overwriting it would break\n // custom-key / agent-wrapper setups (`ssh -i …`, 1Password) in\n // exactly the authenticated path this fallback exists for. See\n // `sshCommandWithBatchMode` for the first-value-wins insertion.\n const ssh = await exec('git', cloneArgs(`git@github.com:${source.owner}/${source.repo}.git`), {\n env: { GIT_TERMINAL_PROMPT: '0', GIT_SSH_COMMAND: sshCommandWithBatchMode(process.env.GIT_SSH_COMMAND) },\n })\n if (ssh.ok) {\n res = ssh\n }\n else if (/repository not found|permission denied \\(publickey\\)|could not read username|authentication failed/i.test(ssh.stderr)) {\n throw new InstallSourceError(\n 'fetch-failed',\n `Could not clone ${source.owner}/${source.repo}: it does not exist, or it is private and git on this computer has no access to it. `\n + `${PRIVATE_REPO_ACCESS} (HTTPS: ${lastLine(res.stderr)} SSH: ${lastLine(ssh.stderr)})`,\n )\n }\n else {\n // Reached over SSH, then failed for another reason (a bad ref, the network): say that, not access.\n throw new InstallSourceError('fetch-failed', `git clone failed for ${label}: ${lastLine(ssh.stderr)} (HTTPS: ${lastLine(res.stderr)})`)\n }\n }\n if (!res.ok)\n throw new InstallSourceError('fetch-failed', `git clone failed for ${label}: ${lastLine(res.stderr)}`)\n // Record the exact commit BEFORE dropping .git — this is what lets\n // a later update detect \"nothing changed\" without re-cloning.\n // Non-fatal: a missing SHA only degrades the no-op check.\n const head = await exec('git', ['rev-parse', 'HEAD'], { cwd: destDir })\n const commit = head.ok && /^[0-9a-f]{40}$/.test(head.stdout.trim()) ? head.stdout.trim() : undefined\n rmSync(join(destDir, '.git'), { recursive: true, force: true })\n return { provenance: `github:${label}`, ...(commit ? { commit } : {}) }\n }\n // No git on PATH — fall back to the codeload tarball (public repos only).\n onProgress?.(`downloading github.com/${label} tarball…`)\n const ref = source.ref ?? 'HEAD'\n const tarUrl = `https://codeload.github.com/${source.owner}/${source.repo}/tar.gz/${ref}`\n await downloadAndExtract(tarUrl, destDir, {\n exec,\n fetchImpl,\n which,\n what: label,\n // codeload answers 404 for a private repository as for a missing one, and takes no credentials.\n refused: `Could not download ${source.owner}/${source.repo}${source.ref ? ` at ${source.ref}` : ''}: it does not exist, or it is private. `\n + `Without git, only public repositories download. Install git, then: ${PRIVATE_REPO_ACCESS}`,\n })\n return { provenance: `github:${label}` }\n }\n\n onProgress?.(`resolving npm:${source.pkg}…`)\n const { version, tarball } = await resolveNpmVersion(source, fetchImpl)\n onProgress?.(`downloading npm:${source.pkg}@${version}…`)\n await downloadAndExtract(tarball, destDir, { exec, fetchImpl, which, what: `${source.pkg}@${version}` })\n return { provenance: `npm:${source.pkg}@${version}` }\n}\n\n/**\n * Registry lookup shared by the fetch path and update no-op checks.\n * Exact versions and dist-tags only — range resolution is out of scope.\n */\nexport async function resolveNpmVersion(\n source: Extract<InstallSource, { kind: 'npm' }>,\n fetchImpl: typeof fetch,\n): Promise<{ version: string, tarball: string }> {\n const registryUrl = `https://registry.npmjs.org/${source.pkg.replace('/', '%2F')}`\n let meta: { 'versions'?: Record<string, { dist?: { tarball?: string } }>, 'dist-tags'?: Record<string, string> }\n try {\n const res = await fetchImpl(registryUrl)\n if (!res.ok)\n throw new Error(`registry returned ${res.status}`)\n meta = await res.json() as typeof meta\n }\n catch (err) {\n throw new InstallSourceError('fetch-failed', `Could not resolve npm package \"${source.pkg}\": ${errorText(err)}`)\n }\n const version = source.version && meta.versions?.[source.version]\n ? source.version\n : meta['dist-tags']?.[source.version ?? 'latest']\n const tarball = version ? meta.versions?.[version]?.dist?.tarball : undefined\n if (!version || !tarball) {\n throw new InstallSourceError(\n 'fetch-failed',\n `npm package \"${source.pkg}\" has no ${source.version ? `version/tag \"${source.version}\"` : 'latest version'} (only exact versions and dist-tags, not ranges).`,\n )\n }\n return { version, tarball }\n}\n\n/**\n * OOM guard: tarballs are buffered in memory before extraction, so an\n * unexpectedly huge (or hostile) URL must fail fast instead of ballooning\n * RSS. Install sources are source trees — 64MB is already generous.\n */\nexport const MAX_DOWNLOAD_BYTES = 64 * 1024 * 1024\n\nasync function downloadAndExtract(\n url: string,\n destDir: string,\n opts: {\n exec: NonNullable<InstallIo['exec']>\n fetchImpl: typeof fetch\n which: NonNullable<InstallIo['which']>\n what: string\n /** The message for a 401, 403 or 404 answer. */\n refused?: string\n },\n): Promise<void> {\n let bytes: ArrayBuffer\n try {\n const res = await opts.fetchImpl(url)\n if (opts.refused && [401, 403, 404].includes(res.status))\n throw new InstallSourceError('fetch-failed', opts.refused)\n if (!res.ok)\n throw new Error(`download returned ${res.status}`)\n const declared = Number(res.headers.get('content-length') ?? '0')\n if (declared > MAX_DOWNLOAD_BYTES)\n throw new Error(`archive is ${Math.round(declared / 1024 / 1024)}MB, over the ${MAX_DOWNLOAD_BYTES / 1024 / 1024}MB limit`)\n bytes = await res.arrayBuffer()\n // Chunked responses carry no content-length — enforce after the fact\n // (bounded harm: one oversized buffer, immediately released on throw).\n if (bytes.byteLength > MAX_DOWNLOAD_BYTES)\n throw new Error(`archive is ${Math.round(bytes.byteLength / 1024 / 1024)}MB, over the ${MAX_DOWNLOAD_BYTES / 1024 / 1024}MB limit`)\n }\n catch (err) {\n if (err instanceof InstallSourceError)\n throw err\n throw new InstallSourceError('fetch-failed', `Download failed for ${opts.what}: ${errorText(err)}`)\n }\n if (!opts.which('tar'))\n throw new InstallSourceError('fetch-failed', `Extracting ${opts.what} requires \\`tar\\` on PATH (or install git for the clone path).`)\n const tarPath = join(destDir, '.zidane-install.tgz')\n mkdirSync(destDir, { recursive: true })\n writeFileSync(tarPath, new Uint8Array(bytes))\n // Both GitHub and npm tarballs wrap contents in one top-level dir\n // (`repo-ref/`, `package/`) — strip it.\n const res = await opts.exec('tar', ['-xzf', tarPath, '-C', destDir, '--strip-components=1'], {})\n rmSync(tarPath, { force: true })\n if (!res.ok)\n throw new InstallSourceError('fetch-failed', `Extracting ${opts.what} failed: ${lastLine(res.stderr)}`)\n}\n\n// ---------------------------------------------------------------------------\n// Subdir containment\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve a `:subdir` inside a fetched tree with PHYSICAL containment:\n * string-level prefix check first, then realpath both sides and re-check\n * so a malicious repo shipping a symlink (`evil -> /`) can't walk the\n * candidate search (and any follow-up validation) onto the local\n * filesystem. Returns the physical directory, or a typed refusal the\n * flavor maps onto its own error vocabulary.\n */\nexport function resolveSubdirRoot(\n fetchedInto: string,\n subdir: string,\n): { ok: true, dir: string } | { ok: false, reason: 'escape' | 'escape-symlink' | 'missing' } {\n const resolved = resolve(fetchedInto, subdir)\n if (!resolved.startsWith(fetchedInto + sep))\n return { ok: false, reason: 'escape' }\n let physical: string | null = null\n try {\n physical = realpathSync(resolved)\n }\n catch {}\n if (physical === null || !isDirectory(physical))\n return { ok: false, reason: 'missing' }\n const physicalRoot = realpathSync(fetchedInto)\n if (physical !== physicalRoot && !physical.startsWith(physicalRoot + sep))\n return { ok: false, reason: 'escape-symlink' }\n return { ok: true, dir: physical }\n}\n\nfunction isDirectory(path: string): boolean {\n try {\n return lstatSync(path).isDirectory()\n }\n catch {\n return false\n }\n}\n\n// ---------------------------------------------------------------------------\n// Default IO\n// ---------------------------------------------------------------------------\n\nexport function defaultExec(cmd: string, args: readonly string[], opts: { cwd?: string, env?: Record<string, string>, signal?: AbortSignal }): Promise<{ ok: boolean, stdout: string, stderr: string }> {\n return new Promise((resolvePromise) => {\n // `env` EXTENDS the inherited environment (execFile's own `env` would\n // replace it, dropping PATH/HOME/SSH_AUTH_SOCK).\n const env = opts.env ? { ...process.env, ...opts.env } : undefined\n // `signal`: an aborted install kills its child (SIGTERM) instead of leaving it running.\n execFile(cmd, [...args], { cwd: opts.cwd, env, maxBuffer: 16 * 1024 * 1024, ...(opts.signal ? { signal: opts.signal } : {}) }, (err, stdout, stderr) => {\n resolvePromise({ ok: !err, stdout: String(stdout), stderr: String(stderr) })\n })\n })\n}\n\nexport function defaultWhich(cmd: string): string | null {\n const exts = process.platform === 'win32' ? ['.exe', '.cmd', '.bat', ''] : ['']\n for (const dir of (process.env.PATH ?? '').split(delimiter)) {\n if (!dir)\n continue\n for (const ext of exts) {\n const full = resolve(dir, cmd + ext)\n try {\n if (lstatSync(full).isFile())\n return full\n }\n catch {\n continue\n }\n }\n }\n return null\n}\n\n// ---------------------------------------------------------------------------\n// Shared helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Insert `-oBatchMode=yes` into a `GIT_SSH_COMMAND` right after the command\n * token. OpenSSH resolves every option to the FIRST obtained value\n * (repeated `-o` included), so insertion-first beats a user-set\n * `-oBatchMode=no` — deliberate: the install flow cannot answer a prompt,\n * and a hang is strictly worse than a fast auth failure. A leading quote\n * (single or double) marks a command path containing spaces\n * (`\"/my tools/ssh\" -i key`) — insert after the CLOSING quote so the path\n * isn't split mid-token; an unterminated quote falls back to appending at\n * the end (mangled input, best-effort semantics).\n */\nexport function sshCommandWithBatchMode(configured: string | undefined): string {\n const base = configured?.trim() || 'ssh'\n const quoteChar = base[0] === '\"' || base[0] === '\\'' ? base[0] : null\n if (quoteChar) {\n const closing = base.indexOf(quoteChar, 1)\n if (closing === -1)\n return `${base} -oBatchMode=yes`\n return `${base.slice(0, closing + 1)} -oBatchMode=yes${base.slice(closing + 1)}`\n }\n return base.replace(/^(\\S+)/, '$1 -oBatchMode=yes')\n}\n\n/** Last non-empty line of a command's output — the useful bit of tool noise. */\nexport function lastLine(text: string): string {\n const lines = text.trim().split('\\n').filter(l => l.trim().length > 0)\n return lines[lines.length - 1]?.trim() ?? ''\n}\n\nfunction errorText(err: unknown): string {\n return err instanceof Error ? err.message : String(err)\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { rI as DurableRuntime } from "./index-CGbOWa7y.js";
1
+ import { RI as DurableRuntime } from "./index-WlE93Q6d.js";
2
2
  //#region src/durable/sqlite-runtime.d.ts
3
3
  /** A runtime whose timers can be stopped; the caller closes the connection. */
4
4
  interface SqliteDurableRuntime extends DurableRuntime {
@@ -7,4 +7,4 @@ interface SqliteDurableRuntime extends DurableRuntime {
7
7
  }
8
8
  //#endregion
9
9
  export { SqliteDurableRuntime as t };
10
- //# sourceMappingURL=sqlite-runtime-BZ2L4RaG.d.ts.map
10
+ //# sourceMappingURL=sqlite-runtime-CS_LBaAN.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-runtime-CS_LBaAN.d.ts","names":[],"sources":["../src/durable/sqlite-runtime.ts"],"mappings":";;;UAgHiB,6BAA6B;;EAE5C"}
@@ -1,6 +1,6 @@
1
1
  import { p as listSessionProcesses, t as listOwnedProcesses } from "./owned-processes-DRuGDRmI.js";
2
2
  import { S as mcpOAuthProviderFor, T as expandMcpConfigEnv, i as sseToJsonFetchIfNeeded, j as startOAuthCallback, s as createTolerantClient, x as isOAuthTokenRejectionError } from "./mcp-nD9bxnl5.js";
3
- import { v as agentExtensionWiringOf } from "./wait-task-BX4NcOOm.js";
3
+ import { v as agentExtensionWiringOf } from "./wait-task-BiI5UaZQ.js";
4
4
  import { n as writeFileAtomic, t as OWNER_ONLY } from "./atomic-write-BewQOXlD.js";
5
5
  import { G as parseGithubState, K as pruneGithubState, U as emptyGithubState, W as mergeGithubState } from "./row-fields-CAYcZogp.js";
6
6
  import { basename, dirname, isAbsolute, join, resolve } from "node:path";
@@ -2671,4 +2671,4 @@ const GEN_AI_ATTRIBUTES = GEN_AI;
2671
2671
  //#endregion
2672
2672
  export { isGhRateLimitError as C, tokenEndingAtCursor as D, resolveInlineSuggestion as E, localReliabilityBehavior as O, createFileGithubStateStore as S, createPathAutocompleteProvider as T, readProcessTree as _, SAMPLE_CAPACITY as a, createMetricsHooks as b, createRing as c, createOwnedProcesses as d, labelSessions as f, ownCommands as g, commandLabel as h, createHostPerf as i, originTotals as l, createGpuReader as m, createTracingHooks as n, SAMPLE_INTERVAL_MS as o, readOsThreads as p, PerfProcessNotFoundError as r, createSampler as s, GEN_AI_ATTRIBUTES as t, treeProcesses as u, createMainThreadMeter as v, rateLimitResetFromJson as w, loginMcpServer as x, createMutationValidationHooks as y };
2673
2673
 
2674
- //# sourceMappingURL=src-BY_ND2xn.js.map
2674
+ //# sourceMappingURL=src-BmTXDta8.js.map