zidane 9.1.1 → 9.1.3

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-CeCavNlg.js} +7 -7
  2. package/dist/{acp-Di9WvMDF.js.map → acp-CeCavNlg.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-BKpjlJ8a.js} +2 -2
  11. package/dist/{auth-store-port-DFgf22oo.js.map → auth-store-port-BKpjlJ8a.js.map} +1 -1
  12. package/dist/{auto-update-restart-BFB7Ek87.js → auto-update-restart-CQJtndMG.js} +277 -41
  13. package/dist/auto-update-restart-CQJtndMG.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-DeRHgYvl.js} +4 -4
  27. package/dist/{cli-shared-CabruH8Z.js.map → cli-shared-DeRHgYvl.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-Bqg-qNBM.js} +2 -2
  50. package/dist/{credentials-wwETW8rI.js.map → credentials-Bqg-qNBM.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-CX7nbMCn.js} +4 -4
  58. package/dist/{discovery-DycXFxdA.js.map → discovery-CX7nbMCn.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-CxBGgU94.js} +6 -6
  62. package/dist/{engine-VQ86XGdG.js.map → engine-CxBGgU94.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-j_LFRBwS.js} +4 -4
  68. package/dist/{executor-C7RQrkEq.js.map → executor-j_LFRBwS.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-ADlhBQ_1.js} +8 -8
  74. package/dist/{extensions-BCx4QuGB.js.map → extensions-ADlhBQ_1.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-B-Dhmzzf.js} +2 -2
  82. package/dist/{google-Crva32sk.js.map → google-B-Dhmzzf.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-wO_6GW0y.js → host-C61ntFBC.js} +276 -103
  89. package/dist/host-C61ntFBC.js.map +1 -0
  90. package/dist/{host-BHMs9jsN.js → host-DEoEzQal.js} +13 -4
  91. package/dist/host-DEoEzQal.js.map +1 -0
  92. package/dist/{host-scoped-settings-CrbcqOkP.js → host-scoped-settings-WBYaCork.js} +2 -2
  93. package/dist/{host-scoped-settings-CrbcqOkP.js.map → host-scoped-settings-WBYaCork.js.map} +1 -1
  94. package/dist/{host-signals-Jsjd_-4g.js → host-signals-Cb2TlGtN.js} +5 -5
  95. package/dist/{host-signals-Jsjd_-4g.js.map → host-signals-Cb2TlGtN.js.map} +1 -1
  96. package/dist/{host-version-CNAr9pov.js → host-version-BIx4CuBM.js} +2 -2
  97. package/dist/{host-version-CNAr9pov.js.map → host-version-BIx4CuBM.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-DiH_P-wr.js} +4 -4
  115. package/dist/{ipc-BzWhIybr.js.map → ipc-DiH_P-wr.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-BbC_lOnn.js} +9 -9
  121. package/dist/{links-CJG_rFvf.js.map → links-BbC_lOnn.js.map} +1 -1
  122. package/dist/{loaded-entry-DTURJo_R.js → loaded-entry-C0vkCVNQ.js} +2 -2
  123. package/dist/{loaded-entry-DTURJo_R.js.map → loaded-entry-C0vkCVNQ.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-C3w8nO8f.js} +132 -31
  128. package/dist/memory-C3w8nO8f.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-DRAEpKOU.js} +3 -3
  137. package/dist/{path-display-COVV71Yu.js.map → path-display-DRAEpKOU.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-CpXV_uLE.js} +5 -5
  162. package/dist/providers-CpXV_uLE.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-CJHvmvaP.js} +2 -2
  168. package/dist/{registry-BKjeBnoy.js.map → registry-CJHvmvaP.js.map} +1 -1
  169. package/dist/{registry-B6Ww76iW.js → registry-CN6JlZKj.js} +2 -2
  170. package/dist/{registry-B6Ww76iW.js.map → registry-CN6JlZKj.js.map} +1 -1
  171. package/dist/{registry-B9INJwJR.js → registry-CnnKaY9s.js} +324 -39
  172. package/dist/registry-CnnKaY9s.js.map +1 -0
  173. package/dist/{remote-hosts-BMWoHCWO.js → remote-hosts-DoO9CJUQ.js} +4 -4
  174. package/dist/{remote-hosts-BMWoHCWO.js.map → remote-hosts-DoO9CJUQ.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-D_FpKFMw.js} +6 -6
  185. package/dist/{setting-BQBSyUq0.js.map → setting-D_FpKFMw.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-CW2UgHgb.js} +3 -3
  189. package/dist/{settings-keys-iI_Y-7MC.js.map → settings-keys-CW2UgHgb.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-XgDPIwQS.js} +3 -3
  203. package/dist/{system-freeze-m5o1sGIM.js.map → system-freeze-XgDPIwQS.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-szdW1Od9.js} +2 -2
  231. package/dist/{version-DqqqvHDP.js.map → version-szdW1Od9.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-C3l9jl9x.js} +2 -2
  235. package/dist/{wire-CLm2rMK0.js.map → wire-C3l9jl9x.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-CEHi0CiB.js} +4 -4
  239. package/dist/{ws-DfGGYQ4W.js.map → ws-CEHi0CiB.js.map} +1 -1
  240. package/dist/{ws-client-CFMbhsNq.js → ws-client-t8XNWxcq.js} +2 -2
  241. package/dist/{ws-client-CFMbhsNq.js.map → ws-client-t8XNWxcq.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
package/dist/agent.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { Aa as RunSummaryError, BP as ReadStateEntry, Bk as CacheDimensionDiff, Da as RunSummaryByModel, Ea as RunSummaryBudget, GP as hydrateReadStateFromSessionAsync, Gk as CacheSystemSection, HP as getReadState, Hk as CacheDimensionSnapshot, Jk as hashMessages, Jo as McpToolWrap, KP as readStateKey, Kk as diffCacheDimensions, Ko as McpConnector, Ma as RunSummaryTokens, Na as RunSummaryValidation, Oa as RunSummaryCollector, Ok as AgentHookMap, Pa as createRunSummaryCollector, Rk as CacheBreakInfo, Ta as RunSummaryBlock, Uk as CacheDriftInfo, VP as ReadStateMap, Vk as CacheDimensionName, WP as hydrateReadStateFromSession, Wk as CachePromptSections, Wo as AgentOptions, Xk as snapshotCacheDimensions, Yk as installCacheBreakLogger, ja as RunSummaryRepeatGuard, ka as RunSummaryCollectorOptions, kk as AgentHooks, ko as createAgent, qP as resolveReadStateMap, qk as fnv1a32, qo as McpToolMeta, wa as RunSummary, zP as HydrateReadStateOptions, zk as CacheBreakLoggerOptions, zo as Agent } from "./index-CGbOWa7y.js";
1
+ import { AA as snapshotCacheDimensions, Aa as RunSummaryError, CA as CacheDriftInfo, CF as getReadState, DA as fnv1a32, DF as readStateKey, Da as RunSummaryByModel, EA as diffCacheDimensions, EF as hydrateReadStateFromSessionAsync, Ea as RunSummaryBudget, Jo as McpToolWrap, Ko as McpConnector, Ma as RunSummaryTokens, Na as RunSummaryValidation, OA as hashMessages, OF as resolveReadStateMap, Oa as RunSummaryCollector, Pa as createRunSummaryCollector, SA as CacheDimensionSnapshot, SF as ReadStateMap, TA as CacheSystemSection, TF as hydrateReadStateFromSession, Ta as RunSummaryBlock, Wo as AgentOptions, bA as CacheDimensionDiff, bF as HydrateReadStateOptions, cA as AgentHookMap, ja as RunSummaryRepeatGuard, kA as installCacheBreakLogger, ka as RunSummaryCollectorOptions, ko as createAgent, lA as AgentHooks, qo as McpToolMeta, vA as CacheBreakInfo, wA as CachePromptSections, wa as RunSummary, xA as CacheDimensionName, xF as ReadStateEntry, yA as CacheBreakLoggerOptions, zo as Agent } from "./index-WlE93Q6d.js";
2
2
  export { type Agent, type AgentHookMap, type AgentHooks, type AgentOptions, type CacheBreakInfo, type CacheBreakLoggerOptions, type CacheDimensionDiff, type CacheDimensionName, type CacheDimensionSnapshot, type CacheDriftInfo, type CachePromptSections, type CacheSystemSection, type HydrateReadStateOptions, type McpConnector, type McpToolMeta, type McpToolWrap, type ReadStateEntry, type ReadStateMap, type RunSummary, type RunSummaryBlock, type RunSummaryBudget, type RunSummaryByModel, type RunSummaryCollector, type RunSummaryCollectorOptions, type RunSummaryError, type RunSummaryRepeatGuard, type RunSummaryTokens, type RunSummaryValidation, createAgent, createRunSummaryCollector, diffCacheDimensions, fnv1a32, getReadState, hashMessages, hydrateReadStateFromSession, hydrateReadStateFromSessionAsync, installCacheBreakLogger, readStateKey, resolveReadStateMap, snapshotCacheDimensions };
package/dist/agent.js CHANGED
@@ -1,4 +1,4 @@
1
- import { D as hashMessages, O as installCacheBreakLogger, T as fnv1a32, k as snapshotCacheDimensions, n as createAgent, w as diffCacheDimensions } from "./agent-DJhpTS-B.js";
1
+ import { D as hashMessages, O as installCacheBreakLogger, T as fnv1a32, k as snapshotCacheDimensions, n as createAgent, w as diffCacheDimensions } from "./agent-Dh_XZ7fj.js";
2
2
  import { a as hydrateReadStateFromSessionAsync, c as readStateKey, i as hydrateReadStateFromSession, l as resolveReadStateMap, t as getReadState } from "./read-state-kgOvuIcp.js";
3
3
  import { t as createRunSummaryCollector } from "./run-summary-2d26oMyQ.js";
4
4
  export { createAgent, createRunSummaryCollector, diffCacheDimensions, fnv1a32, getReadState, hashMessages, hydrateReadStateFromSession, hydrateReadStateFromSessionAsync, installCacheBreakLogger, readStateKey, resolveReadStateMap, snapshotCacheDimensions };
@@ -1,4 +1,4 @@
1
- import { S as writeCredentialEntry, u as readCredentialEntry } from "./credentials-wwETW8rI.js";
1
+ import { S as writeCredentialEntry, u as readCredentialEntry } from "./credentials-Bqg-qNBM.js";
2
2
  //#region src/extensions/integrations/auth-store-port.ts
3
3
  /** Prefix of an integration's key in the credentials file. */
4
4
  const INTEGRATION_CREDENTIAL_PREFIX = "integration:";
@@ -206,4 +206,4 @@ function connection(integrationId, methodId, connectedAt, account, label) {
206
206
  //#endregion
207
207
  export { integrationCredentialKey as i, createCredentialsAuthStore as n, fromEntries as r, DEFAULT_ACCOUNT as t };
208
208
 
209
- //# sourceMappingURL=auth-store-port-DFgf22oo.js.map
209
+ //# sourceMappingURL=auth-store-port-BKpjlJ8a.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-store-port-DFgf22oo.js","names":[],"sources":["../src/extensions/integrations/auth-store-port.ts"],"sourcesContent":["/**\n * The credentials-file {@link AuthStorePort}: integrations live in the same\n * `<dataDir>/credentials.json` as provider sign-ins, each under its own\n * `integration:<id>` key, written with the file's lock, mode and atomic\n * write (`readCredentialEntry` / `writeCredentialEntry` in\n * `src/chat/credentials.ts`, the namespaced-entry API host tokens use).\n *\n * One entry per integration, holding every connection: the entry itself is\n * the default connection (so a reader by key, and an older build, sees it as\n * before), and the others ride in its `connections` list, each shaped like\n * an entry. `#`-qualified keys are provider slots and can't be used.\n *\n * On disk, OAuth connections are `kind: 'oauth'` entries (`access`,\n * `refresh`, `expires`, the same triple the provider refresh code reads)\n * and API keys and tokens are `kind: 'apikey'` entries. The connection\n * fields ride along: on an OAuth entry as an `integration` extra, on an API\n * key entry in `customFields` (strings only).\n *\n * A legacy provider sign-in (`IntegrationSpec.legacyCredentialKey`) is read\n * from its own key and, once adopted, marked with `integrationAdopted`; its\n * tokens stay for a downgrade.\n */\n\nimport type { ApiKeyCredential, OAuthCredential, ProviderCredential } from '../../chat/credentials'\nimport type { Connection, Credential } from '../api/sessions'\nimport type { AuthStorePort, LegacyGrant, StoredIntegration } from './store'\nimport { readCredentialEntry, writeCredentialEntry } from '../../chat/credentials'\n\n/** Prefix of an integration's key in the credentials file. */\nexport const INTEGRATION_CREDENTIAL_PREFIX = 'integration:'\n\n/** Field of an integration entry listing its non-default connections. */\nconst OTHERS_FIELD = 'connections'\n\n/** Field marking a legacy entry an integration adopted. */\nexport const LEGACY_ADOPTED_FIELD = 'integrationAdopted'\n\n/** Account of a connection whose integration names none. */\nexport const DEFAULT_ACCOUNT = 'default'\n\n/**\n * The credentials-file key of an integration.\n *\n * @param integrationId - The integration id.\n */\nexport function integrationCredentialKey(integrationId: string): string {\n return `${INTEGRATION_CREDENTIAL_PREFIX}${integrationId}`\n}\n\n/**\n * An {@link AuthStorePort} over `<dataDir>/credentials.json`.\n *\n * @param dataDir - Directory holding `credentials.json` (the host's `config.paths.dir`).\n */\nexport function createCredentialsAuthStore(dataDir: string): AuthStorePort {\n return {\n read: (id) => {\n const entry = readCredentialEntry(dataDir, integrationCredentialKey(id))\n return entry ? fromEntries(id, entry) : undefined\n },\n write: (id, value) => {\n writeCredentialEntry(dataDir, integrationCredentialKey(id), value?.length ? toEntries(value) : undefined)\n },\n readLegacy: (key) => {\n const entry = readCredentialEntry(dataDir, key)\n return entry ? legacyGrant(entry) : undefined\n },\n markLegacy: (key, integrationId) => {\n const entry = readCredentialEntry(dataDir, key)\n if (entry)\n writeCredentialEntry(dataDir, key, { ...entry, [LEGACY_ADOPTED_FIELD]: integrationId } as ProviderCredential)\n },\n }\n}\n\ninterface OAuthExtra {\n methodId: string\n account?: string\n label?: string\n connectedAt: number\n scopes?: readonly string[]\n extra?: Record<string, unknown>\n}\n\n/**\n * The credentials-file entry of an integration's connections: the default's\n * entry with the others under `connections`.\n *\n * @param value - The connections, the default first. Not empty.\n */\nexport function toEntries(value: readonly StoredIntegration[]): ProviderCredential {\n const [first, ...others] = value\n const entry = toEntry(first!)\n return others.length ? { ...entry, [OTHERS_FIELD]: others.map(toEntry) } as ProviderCredential : entry\n}\n\n/**\n * The connections an integration's entry holds, the default first;\n * `undefined` when it holds none this module wrote.\n *\n * @param integrationId - The integration the entry belongs to.\n * @param entry - The entry read from the file.\n */\nexport function fromEntries(integrationId: string, entry: ProviderCredential): StoredIntegration[] | undefined {\n const others = (entry as { [OTHERS_FIELD]?: unknown })[OTHERS_FIELD]\n const list = [entry, ...(Array.isArray(others) ? others : [])]\n .map(e => (e && typeof e === 'object' ? fromEntry(integrationId, e as ProviderCredential) : undefined))\n .filter((s): s is StoredIntegration => s !== undefined)\n // One connection per account: a hand-edited file could repeat one.\n const seen = new Set<string>()\n const unique = list.filter(s => !seen.has(s.connection.account) && !!seen.add(s.connection.account))\n return unique.length ? unique : undefined\n}\n\n/**\n * The credentials-file entry of one stored connection.\n *\n * @param value - The connection to store.\n */\nexport function toEntry(value: StoredIntegration): ProviderCredential {\n const { connection, credential } = value\n if (credential.type === 'oauth') {\n const integration: OAuthExtra = {\n methodId: connection.methodId,\n connectedAt: connection.connectedAt,\n account: connection.account,\n ...(connection.label !== undefined ? { label: connection.label } : {}),\n ...(credential.scopes ? { scopes: [...credential.scopes] } : {}),\n ...(credential.extra ? { extra: { ...credential.extra } } : {}),\n }\n const entry: OAuthCredential = {\n kind: 'oauth',\n access: credential.accessToken,\n ...(value.refreshToken !== undefined ? { refresh: value.refreshToken } : {}),\n ...(credential.expiresAt !== undefined ? { expires: credential.expiresAt } : {}),\n integration,\n }\n return entry\n }\n const customFields: Record<string, string> = {\n credentialType: credential.type,\n methodId: connection.methodId,\n connectedAt: String(connection.connectedAt),\n account: connection.account,\n }\n if (connection.label !== undefined)\n customFields.label = connection.label\n const entry: ApiKeyCredential = {\n kind: 'apikey',\n value: credential.type === 'apiKey' ? credential.key : credential.token,\n customFields,\n }\n return entry\n}\n\n/**\n * The stored connection a credentials-file entry holds. `undefined` for an\n * entry this module did not write.\n *\n * @param integrationId - The integration the entry belongs to.\n * @param entry - The entry read from the file.\n */\nexport function fromEntry(integrationId: string, entry: ProviderCredential): StoredIntegration | undefined {\n if (entry.kind === 'oauth') {\n const extra = entry.integration as Partial<OAuthExtra> | undefined\n if (!extra || typeof extra.methodId !== 'string' || typeof extra.connectedAt !== 'number' || typeof entry.access !== 'string')\n return undefined\n const credential: Credential = {\n type: 'oauth',\n accessToken: entry.access,\n ...(typeof entry.expires === 'number' ? { expiresAt: entry.expires } : {}),\n ...(Array.isArray(extra.scopes) ? { scopes: extra.scopes.filter((s): s is string => typeof s === 'string') } : {}),\n ...(extra.extra && typeof extra.extra === 'object' && !Array.isArray(extra.extra) ? { extra: extra.extra } : {}),\n }\n return {\n connection: connection(integrationId, extra.methodId, extra.connectedAt, extra.account, extra.label),\n credential,\n ...(typeof entry.refresh === 'string' && entry.refresh ? { refreshToken: entry.refresh } : {}),\n }\n }\n if (entry.kind !== 'apikey' || typeof entry.value !== 'string')\n return undefined\n const fields = entry.customFields ?? {}\n const connectedAt = Number(fields.connectedAt)\n if (typeof fields.methodId !== 'string' || !Number.isFinite(connectedAt))\n return undefined\n const credential: Credential = fields.credentialType === 'token'\n ? { type: 'token', token: entry.value }\n : { type: 'apiKey', key: entry.value }\n return { connection: connection(integrationId, fields.methodId, connectedAt, fields.account, fields.label), credential }\n}\n\n/**\n * The grant of a legacy provider entry, when it was not adopted yet.\n *\n * @param entry - The entry under the legacy key.\n */\nexport function legacyGrant(entry: ProviderCredential): LegacyGrant | undefined {\n const record = entry as unknown as Record<string, unknown>\n if (record[LEGACY_ADOPTED_FIELD] !== undefined)\n return undefined\n const text = (key: string): string | undefined => (typeof record[key] === 'string' && (record[key] as string).trim() ? (record[key] as string).trim() : undefined)\n const account = text('account') ?? text('email')\n const label = text('label') ?? text('email')\n const named = { ...(account ? { account } : {}), ...(label ? { label } : {}) }\n if (entry.kind === 'oauth') {\n if (typeof entry.access !== 'string' || !entry.access)\n return undefined\n const extra: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(entry)) {\n if (!['kind', 'access', 'refresh', 'expires', 'id', 'label', LEGACY_ADOPTED_FIELD].includes(key))\n extra[key] = value\n }\n return {\n credential: {\n type: 'oauth',\n accessToken: entry.access,\n ...(typeof entry.expires === 'number' ? { expiresAt: entry.expires } : {}),\n ...(Object.keys(extra).length ? { extra } : {}),\n },\n ...(typeof entry.refresh === 'string' && entry.refresh ? { refreshToken: entry.refresh } : {}),\n ...named,\n }\n }\n if (entry.kind === 'apikey' && typeof entry.value === 'string' && entry.value)\n return { credential: { type: 'apiKey', key: entry.value }, ...named }\n return undefined\n}\n\nfunction connection(integrationId: string, methodId: string, connectedAt: number, account: unknown, label: unknown): Connection {\n return {\n integrationId,\n methodId,\n account: typeof account === 'string' && account ? account : DEFAULT_ACCOUNT,\n ...(typeof label === 'string' && label ? { label } : {}),\n connectedAt,\n }\n}\n"],"mappings":";;;AA6BA,MAAa,gCAAgC;;AAG7C,MAAM,eAAe;;AAGrB,MAAa,uBAAuB;;AAGpC,MAAa,kBAAkB;;;;;;AAO/B,SAAgB,yBAAyB,eAA+B;CACtE,OAAO,GAAG,gCAAgC;AAC5C;;;;;;AAOA,SAAgB,2BAA2B,SAAgC;CACzE,OAAO;EACL,OAAO,OAAO;GACZ,MAAM,QAAQ,oBAAoB,SAAS,yBAAyB,EAAE,CAAC;GACvE,OAAO,QAAQ,YAAY,IAAI,KAAK,IAAI,KAAA;EAC1C;EACA,QAAQ,IAAI,UAAU;GACpB,qBAAqB,SAAS,yBAAyB,EAAE,GAAG,OAAO,SAAS,UAAU,KAAK,IAAI,KAAA,CAAS;EAC1G;EACA,aAAa,QAAQ;GACnB,MAAM,QAAQ,oBAAoB,SAAS,GAAG;GAC9C,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAA;EACtC;EACA,aAAa,KAAK,kBAAkB;GAClC,MAAM,QAAQ,oBAAoB,SAAS,GAAG;GAC9C,IAAI,OACF,qBAAqB,SAAS,KAAK;IAAE,GAAG;KAAQ,uBAAuB;GAAc,CAAuB;EAChH;CACF;AACF;;;;;;;AAiBA,SAAgB,UAAU,OAAyD;CACjF,MAAM,CAAC,OAAO,GAAG,UAAU;CAC3B,MAAM,QAAQ,QAAQ,KAAM;CAC5B,OAAO,OAAO,SAAS;EAAE,GAAG;GAAQ,eAAe,OAAO,IAAI,OAAO;CAAE,IAA0B;AACnG;;;;;;;;AASA,SAAgB,YAAY,eAAuB,OAA4D;CAC7G,MAAM,SAAU,MAAuC;CACvD,MAAM,OAAO,CAAC,OAAO,GAAI,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,CAAE,CAAC,CAC3D,KAAI,MAAM,KAAK,OAAO,MAAM,WAAW,UAAU,eAAe,CAAuB,IAAI,KAAA,CAAU,CAAC,CACtG,QAAQ,MAA8B,MAAM,KAAA,CAAS;CAExD,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,SAAS,KAAK,QAAO,MAAK,CAAC,KAAK,IAAI,EAAE,WAAW,OAAO,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,WAAW,OAAO,CAAC;CACnG,OAAO,OAAO,SAAS,SAAS,KAAA;AAClC;;;;;;AAOA,SAAgB,QAAQ,OAA8C;CACpE,MAAM,EAAE,YAAY,eAAe;CACnC,IAAI,WAAW,SAAS,SAAS;EAC/B,MAAM,cAA0B;GAC9B,UAAU,WAAW;GACrB,aAAa,WAAW;GACxB,SAAS,WAAW;GACpB,GAAI,WAAW,UAAU,KAAA,IAAY,EAAE,OAAO,WAAW,MAAM,IAAI,CAAC;GACpE,GAAI,WAAW,SAAS,EAAE,QAAQ,CAAC,GAAG,WAAW,MAAM,EAAE,IAAI,CAAC;GAC9D,GAAI,WAAW,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,MAAM,EAAE,IAAI,CAAC;EAC/D;EAQA,OAAO;GANL,MAAM;GACN,QAAQ,WAAW;GACnB,GAAI,MAAM,iBAAiB,KAAA,IAAY,EAAE,SAAS,MAAM,aAAa,IAAI,CAAC;GAC1E,GAAI,WAAW,cAAc,KAAA,IAAY,EAAE,SAAS,WAAW,UAAU,IAAI,CAAC;GAC9E;EAES;CACb;CACA,MAAM,eAAuC;EAC3C,gBAAgB,WAAW;EAC3B,UAAU,WAAW;EACrB,aAAa,OAAO,WAAW,WAAW;EAC1C,SAAS,WAAW;CACtB;CACA,IAAI,WAAW,UAAU,KAAA,GACvB,aAAa,QAAQ,WAAW;CAMlC,OAAO;EAJL,MAAM;EACN,OAAO,WAAW,SAAS,WAAW,WAAW,MAAM,WAAW;EAClE;CAES;AACb;;;;;;;;AASA,SAAgB,UAAU,eAAuB,OAA0D;CACzG,IAAI,MAAM,SAAS,SAAS;EAC1B,MAAM,QAAQ,MAAM;EACpB,IAAI,CAAC,SAAS,OAAO,MAAM,aAAa,YAAY,OAAO,MAAM,gBAAgB,YAAY,OAAO,MAAM,WAAW,UACnH,OAAO,KAAA;EACT,MAAM,aAAyB;GAC7B,MAAM;GACN,aAAa,MAAM;GACnB,GAAI,OAAO,MAAM,YAAY,WAAW,EAAE,WAAW,MAAM,QAAQ,IAAI,CAAC;GACxE,GAAI,MAAM,QAAQ,MAAM,MAAM,IAAI,EAAE,QAAQ,MAAM,OAAO,QAAQ,MAAmB,OAAO,MAAM,QAAQ,EAAE,IAAI,CAAC;GAChH,GAAI,MAAM,SAAS,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,KAAK,IAAI,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;EAChH;EACA,OAAO;GACL,YAAY,WAAW,eAAe,MAAM,UAAU,MAAM,aAAa,MAAM,SAAS,MAAM,KAAK;GACnG;GACA,GAAI,OAAO,MAAM,YAAY,YAAY,MAAM,UAAU,EAAE,cAAc,MAAM,QAAQ,IAAI,CAAC;EAC9F;CACF;CACA,IAAI,MAAM,SAAS,YAAY,OAAO,MAAM,UAAU,UACpD,OAAO,KAAA;CACT,MAAM,SAAS,MAAM,gBAAgB,CAAC;CACtC,MAAM,cAAc,OAAO,OAAO,WAAW;CAC7C,IAAI,OAAO,OAAO,aAAa,YAAY,CAAC,OAAO,SAAS,WAAW,GACrE,OAAO,KAAA;CACT,MAAM,aAAyB,OAAO,mBAAmB,UACrD;EAAE,MAAM;EAAS,OAAO,MAAM;CAAM,IACpC;EAAE,MAAM;EAAU,KAAK,MAAM;CAAM;CACvC,OAAO;EAAE,YAAY,WAAW,eAAe,OAAO,UAAU,aAAa,OAAO,SAAS,OAAO,KAAK;EAAG;CAAW;AACzH;;;;;;AAOA,SAAgB,YAAY,OAAoD;CAC9E,MAAM,SAAS;CACf,IAAI,OAAA,0BAAiC,KAAA,GACnC,OAAO,KAAA;CACT,MAAM,QAAQ,QAAqC,OAAO,OAAO,SAAS,YAAa,OAAO,IAAI,CAAY,KAAK,IAAK,OAAO,IAAI,CAAY,KAAK,IAAI,KAAA;CACxJ,MAAM,UAAU,KAAK,SAAS,KAAK,KAAK,OAAO;CAC/C,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,OAAO;CAC3C,MAAM,QAAQ;EAAE,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAAI,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;CAAG;CAC7E,IAAI,MAAM,SAAS,SAAS;EAC1B,IAAI,OAAO,MAAM,WAAW,YAAY,CAAC,MAAM,QAC7C,OAAO,KAAA;EACT,MAAM,QAAiC,CAAC;EACxC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,GAC7C,IAAI,CAAC;GAAC;GAAQ;GAAU;GAAW;GAAW;GAAM;;EAA6B,CAAC,CAAC,SAAS,GAAG,GAC7F,MAAM,OAAO;EAEjB,OAAO;GACL,YAAY;IACV,MAAM;IACN,aAAa,MAAM;IACnB,GAAI,OAAO,MAAM,YAAY,WAAW,EAAE,WAAW,MAAM,QAAQ,IAAI,CAAC;IACxE,GAAI,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;GAC/C;GACA,GAAI,OAAO,MAAM,YAAY,YAAY,MAAM,UAAU,EAAE,cAAc,MAAM,QAAQ,IAAI,CAAC;GAC5F,GAAG;EACL;CACF;CACA,IAAI,MAAM,SAAS,YAAY,OAAO,MAAM,UAAU,YAAY,MAAM,OACtE,OAAO;EAAE,YAAY;GAAE,MAAM;GAAU,KAAK,MAAM;EAAM;EAAG,GAAG;CAAM;AAExE;AAEA,SAAS,WAAW,eAAuB,UAAkB,aAAqB,SAAkB,OAA4B;CAC9H,OAAO;EACL;EACA;EACA,SAAS,OAAO,YAAY,YAAY,UAAU,UAAU;EAC5D,GAAI,OAAO,UAAU,YAAY,QAAQ,EAAE,MAAM,IAAI,CAAC;EACtD;CACF;AACF"}
1
+ {"version":3,"file":"auth-store-port-BKpjlJ8a.js","names":[],"sources":["../src/extensions/integrations/auth-store-port.ts"],"sourcesContent":["/**\n * The credentials-file {@link AuthStorePort}: integrations live in the same\n * `<dataDir>/credentials.json` as provider sign-ins, each under its own\n * `integration:<id>` key, written with the file's lock, mode and atomic\n * write (`readCredentialEntry` / `writeCredentialEntry` in\n * `src/chat/credentials.ts`, the namespaced-entry API host tokens use).\n *\n * One entry per integration, holding every connection: the entry itself is\n * the default connection (so a reader by key, and an older build, sees it as\n * before), and the others ride in its `connections` list, each shaped like\n * an entry. `#`-qualified keys are provider slots and can't be used.\n *\n * On disk, OAuth connections are `kind: 'oauth'` entries (`access`,\n * `refresh`, `expires`, the same triple the provider refresh code reads)\n * and API keys and tokens are `kind: 'apikey'` entries. The connection\n * fields ride along: on an OAuth entry as an `integration` extra, on an API\n * key entry in `customFields` (strings only).\n *\n * A legacy provider sign-in (`IntegrationSpec.legacyCredentialKey`) is read\n * from its own key and, once adopted, marked with `integrationAdopted`; its\n * tokens stay for a downgrade.\n */\n\nimport type { ApiKeyCredential, OAuthCredential, ProviderCredential } from '../../chat/credentials'\nimport type { Connection, Credential } from '../api/sessions'\nimport type { AuthStorePort, LegacyGrant, StoredIntegration } from './store'\nimport { readCredentialEntry, writeCredentialEntry } from '../../chat/credentials'\n\n/** Prefix of an integration's key in the credentials file. */\nexport const INTEGRATION_CREDENTIAL_PREFIX = 'integration:'\n\n/** Field of an integration entry listing its non-default connections. */\nconst OTHERS_FIELD = 'connections'\n\n/** Field marking a legacy entry an integration adopted. */\nexport const LEGACY_ADOPTED_FIELD = 'integrationAdopted'\n\n/** Account of a connection whose integration names none. */\nexport const DEFAULT_ACCOUNT = 'default'\n\n/**\n * The credentials-file key of an integration.\n *\n * @param integrationId - The integration id.\n */\nexport function integrationCredentialKey(integrationId: string): string {\n return `${INTEGRATION_CREDENTIAL_PREFIX}${integrationId}`\n}\n\n/**\n * An {@link AuthStorePort} over `<dataDir>/credentials.json`.\n *\n * @param dataDir - Directory holding `credentials.json` (the host's `config.paths.dir`).\n */\nexport function createCredentialsAuthStore(dataDir: string): AuthStorePort {\n return {\n read: (id) => {\n const entry = readCredentialEntry(dataDir, integrationCredentialKey(id))\n return entry ? fromEntries(id, entry) : undefined\n },\n write: (id, value) => {\n writeCredentialEntry(dataDir, integrationCredentialKey(id), value?.length ? toEntries(value) : undefined)\n },\n readLegacy: (key) => {\n const entry = readCredentialEntry(dataDir, key)\n return entry ? legacyGrant(entry) : undefined\n },\n markLegacy: (key, integrationId) => {\n const entry = readCredentialEntry(dataDir, key)\n if (entry)\n writeCredentialEntry(dataDir, key, { ...entry, [LEGACY_ADOPTED_FIELD]: integrationId } as ProviderCredential)\n },\n }\n}\n\ninterface OAuthExtra {\n methodId: string\n account?: string\n label?: string\n connectedAt: number\n scopes?: readonly string[]\n extra?: Record<string, unknown>\n}\n\n/**\n * The credentials-file entry of an integration's connections: the default's\n * entry with the others under `connections`.\n *\n * @param value - The connections, the default first. Not empty.\n */\nexport function toEntries(value: readonly StoredIntegration[]): ProviderCredential {\n const [first, ...others] = value\n const entry = toEntry(first!)\n return others.length ? { ...entry, [OTHERS_FIELD]: others.map(toEntry) } as ProviderCredential : entry\n}\n\n/**\n * The connections an integration's entry holds, the default first;\n * `undefined` when it holds none this module wrote.\n *\n * @param integrationId - The integration the entry belongs to.\n * @param entry - The entry read from the file.\n */\nexport function fromEntries(integrationId: string, entry: ProviderCredential): StoredIntegration[] | undefined {\n const others = (entry as { [OTHERS_FIELD]?: unknown })[OTHERS_FIELD]\n const list = [entry, ...(Array.isArray(others) ? others : [])]\n .map(e => (e && typeof e === 'object' ? fromEntry(integrationId, e as ProviderCredential) : undefined))\n .filter((s): s is StoredIntegration => s !== undefined)\n // One connection per account: a hand-edited file could repeat one.\n const seen = new Set<string>()\n const unique = list.filter(s => !seen.has(s.connection.account) && !!seen.add(s.connection.account))\n return unique.length ? unique : undefined\n}\n\n/**\n * The credentials-file entry of one stored connection.\n *\n * @param value - The connection to store.\n */\nexport function toEntry(value: StoredIntegration): ProviderCredential {\n const { connection, credential } = value\n if (credential.type === 'oauth') {\n const integration: OAuthExtra = {\n methodId: connection.methodId,\n connectedAt: connection.connectedAt,\n account: connection.account,\n ...(connection.label !== undefined ? { label: connection.label } : {}),\n ...(credential.scopes ? { scopes: [...credential.scopes] } : {}),\n ...(credential.extra ? { extra: { ...credential.extra } } : {}),\n }\n const entry: OAuthCredential = {\n kind: 'oauth',\n access: credential.accessToken,\n ...(value.refreshToken !== undefined ? { refresh: value.refreshToken } : {}),\n ...(credential.expiresAt !== undefined ? { expires: credential.expiresAt } : {}),\n integration,\n }\n return entry\n }\n const customFields: Record<string, string> = {\n credentialType: credential.type,\n methodId: connection.methodId,\n connectedAt: String(connection.connectedAt),\n account: connection.account,\n }\n if (connection.label !== undefined)\n customFields.label = connection.label\n const entry: ApiKeyCredential = {\n kind: 'apikey',\n value: credential.type === 'apiKey' ? credential.key : credential.token,\n customFields,\n }\n return entry\n}\n\n/**\n * The stored connection a credentials-file entry holds. `undefined` for an\n * entry this module did not write.\n *\n * @param integrationId - The integration the entry belongs to.\n * @param entry - The entry read from the file.\n */\nexport function fromEntry(integrationId: string, entry: ProviderCredential): StoredIntegration | undefined {\n if (entry.kind === 'oauth') {\n const extra = entry.integration as Partial<OAuthExtra> | undefined\n if (!extra || typeof extra.methodId !== 'string' || typeof extra.connectedAt !== 'number' || typeof entry.access !== 'string')\n return undefined\n const credential: Credential = {\n type: 'oauth',\n accessToken: entry.access,\n ...(typeof entry.expires === 'number' ? { expiresAt: entry.expires } : {}),\n ...(Array.isArray(extra.scopes) ? { scopes: extra.scopes.filter((s): s is string => typeof s === 'string') } : {}),\n ...(extra.extra && typeof extra.extra === 'object' && !Array.isArray(extra.extra) ? { extra: extra.extra } : {}),\n }\n return {\n connection: connection(integrationId, extra.methodId, extra.connectedAt, extra.account, extra.label),\n credential,\n ...(typeof entry.refresh === 'string' && entry.refresh ? { refreshToken: entry.refresh } : {}),\n }\n }\n if (entry.kind !== 'apikey' || typeof entry.value !== 'string')\n return undefined\n const fields = entry.customFields ?? {}\n const connectedAt = Number(fields.connectedAt)\n if (typeof fields.methodId !== 'string' || !Number.isFinite(connectedAt))\n return undefined\n const credential: Credential = fields.credentialType === 'token'\n ? { type: 'token', token: entry.value }\n : { type: 'apiKey', key: entry.value }\n return { connection: connection(integrationId, fields.methodId, connectedAt, fields.account, fields.label), credential }\n}\n\n/**\n * The grant of a legacy provider entry, when it was not adopted yet.\n *\n * @param entry - The entry under the legacy key.\n */\nexport function legacyGrant(entry: ProviderCredential): LegacyGrant | undefined {\n const record = entry as unknown as Record<string, unknown>\n if (record[LEGACY_ADOPTED_FIELD] !== undefined)\n return undefined\n const text = (key: string): string | undefined => (typeof record[key] === 'string' && (record[key] as string).trim() ? (record[key] as string).trim() : undefined)\n const account = text('account') ?? text('email')\n const label = text('label') ?? text('email')\n const named = { ...(account ? { account } : {}), ...(label ? { label } : {}) }\n if (entry.kind === 'oauth') {\n if (typeof entry.access !== 'string' || !entry.access)\n return undefined\n const extra: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(entry)) {\n if (!['kind', 'access', 'refresh', 'expires', 'id', 'label', LEGACY_ADOPTED_FIELD].includes(key))\n extra[key] = value\n }\n return {\n credential: {\n type: 'oauth',\n accessToken: entry.access,\n ...(typeof entry.expires === 'number' ? { expiresAt: entry.expires } : {}),\n ...(Object.keys(extra).length ? { extra } : {}),\n },\n ...(typeof entry.refresh === 'string' && entry.refresh ? { refreshToken: entry.refresh } : {}),\n ...named,\n }\n }\n if (entry.kind === 'apikey' && typeof entry.value === 'string' && entry.value)\n return { credential: { type: 'apiKey', key: entry.value }, ...named }\n return undefined\n}\n\nfunction connection(integrationId: string, methodId: string, connectedAt: number, account: unknown, label: unknown): Connection {\n return {\n integrationId,\n methodId,\n account: typeof account === 'string' && account ? account : DEFAULT_ACCOUNT,\n ...(typeof label === 'string' && label ? { label } : {}),\n connectedAt,\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { n as __require } from "./rolldown-runtime-BhDjJH2R.js";
2
- import { $ as interceptProvider, C as resolveTasksDir, E as forgetSessionCacheBaseline, O as installCacheBreakLogger, a as TOOL_USE_CANCELLED_MESSAGE, b as resolveMcpWarningsDir, et as interceptSubmittedPrompt, g as migrateSessionArtifactDirs, n as createAgent, s as turnsToMessages, x as resolvePersistDir } from "./agent-DJhpTS-B.js";
2
+ import { $ as interceptProvider, C as resolveTasksDir, E as forgetSessionCacheBaseline, O as installCacheBreakLogger, a as TOOL_USE_CANCELLED_MESSAGE, b as resolveMcpWarningsDir, et as interceptSubmittedPrompt, g as migrateSessionArtifactDirs, n as createAgent, s as turnsToMessages, x as resolvePersistDir } from "./agent-Dh_XZ7fj.js";
3
3
  import { S as resolveWritableRootsAsync, b as resolveUnreadableDirs, h as DEFAULT_UNREADABLE_DIRS, m as registerSessionProcess, v as isolationAvailability, x as resolveWritableRoots, y as parseAllowWriteSetting } from "./owned-processes-DRuGDRmI.js";
4
4
  import { a as AgentProviderError, p as errorMessage$1, x as runErrorDetail } from "./errors-C3z7pmOx.js";
5
5
  import { g as projectNameOf, x as isThinkingLevel } from "./validate-D--OhUFD.js";
@@ -14,10 +14,11 @@ import { a as facetExtensionOf, c as metadataWithoutFacets, d as storedSessionFa
14
14
  import { splitSystemPrompt } from "./prompt.js";
15
15
  import { a as isRunOwnerHolding, i as isRunOwnerDead, r as currentRunOwner } from "./send-requests-Bpb99rP5.js";
16
16
  import { a as getExtensionSessionState, l as setExtensionSessionState, r as deleteExtensionSessionState, s as loadSession, t as createSession, u as withExtensionSession } from "./session-BORxmqlM.js";
17
- import { n as createDecider } from "./decisions-CXmK0nz9.js";
18
- import { Ft as resolveExtensionKeybindings, Pt as readKeybindingsRaw, jt as mergeKeybindings } from "./registry-B9INJwJR.js";
19
- import { n as createAnsiStripper, r as entryPortOf, t as createProcessContext } from "./contexts-C72b0mMa.js";
17
+ import { n as createDecider } from "./decisions-hsw5XS2g.js";
18
+ import { Lt as readKeybindingsRaw, Pt as mergeKeybindings, Rt as resolveExtensionKeybindings } from "./registry-CnnKaY9s.js";
19
+ import { n as entryPortOf, t as createProcessContext } from "./contexts-DLZTSRHU.js";
20
20
  import { c as terminalProcesses, r as hasLocalPty } from "./local-terminal-lBMwNIZl.js";
21
+ import { n as createAnsiStripper } from "./types-4q1bFG53.js";
21
22
  import { createSandboxContext } from "./contexts/sandbox.js";
22
23
  import { t as createDebugLog } from "./debug-log-DiNRNfzw.js";
23
24
  import { i as StaleEpochError, n as RunLeaseHeldError, t as RUN_TAKEN_OVER_MESSAGE } from "./errors-VVNmJD8V.js";
@@ -26,59 +27,59 @@ import { i as writeJsonFileAtomic, n as writeFileAtomic } from "./atomic-write-B
26
27
  import { n as looksBinary } from "./binary-detect-Dtj5NGns.js";
27
28
  import { a as mainCheckoutRoot, c as projectRootOf, n as findGitRoot$1, r as findProjectRoot, t as cachedRepoKeyOf } from "./project-root-BZcgGJMi.js";
28
29
  import { r as toolErrorText, t as ToolFailure } from "./failure-_rDKdaLk.js";
29
- import { t as createNestedCallRecorder } from "./nested-call-record-DlzPeTB7.js";
30
+ import { t as createNestedCallRecorder } from "./nested-call-record-OayszZBQ.js";
30
31
  import { toolPrompts } from "./tools/prompts.js";
31
32
  import { r as unwrapCallTool } from "./call-tool-6szvNmQR.js";
32
33
  import { t as effectiveInputFromTurn } from "./stats-Bmj46D4h.js";
33
- import { C as isGhRateLimitError, S as createFileGithubStateStore, w as rateLimitResetFromJson } from "./src-BY_ND2xn.js";
34
- import { p as withIsolatedSpawnTool } from "./write-file-0E6TUJ9A.js";
34
+ import { C as isGhRateLimitError, S as createFileGithubStateStore, w as rateLimitResetFromJson } from "./src-BmTXDta8.js";
35
+ import { p as withIsolatedSpawnTool } from "./write-file-Dquu7MzB.js";
35
36
  import { c as formatCount, f as formatTaskSummary, m as shortId, o as fmtTokens, p as previewLine, u as formatElapsed } from "./format-YgaIcuQ5.js";
36
37
  import { a as executeCommand, i as createCommandRunRecord, n as commandBlocksToContent, o as mergeCommands, s as parseCommandInvocation, t as commandBlockToEvent } from "./commands-DN_vVnvh.js";
37
38
  import { a as textBodyOf, n as generateSessionTitle, r as renderTurnsForPrompt } from "./generate-title-Dqoa17Ff.js";
38
39
  import { t as generateStructuredData } from "./generate-data-Cs86LH2u.js";
39
40
  import { t as mergeReplyText } from "./reply-text-Qkc6DtEt.js";
40
41
  import { m as createModelSearchTool } from "./spawn-result-B9j6GARP.js";
41
- import { a as listMarkdownDefFiles, i as loadMarkdownCommands, n as applyMarkdownSubagents, o as markdownDefRoots, r as loadMarkdownAgents } from "./headless-CCm-jLLT.js";
42
+ import { a as listMarkdownDefFiles, i as loadMarkdownCommands, n as applyMarkdownSubagents, o as markdownDefRoots, r as loadMarkdownAgents } from "./headless-CQm19BL0.js";
42
43
  import { t as projectUserPaths } from "./project-user-paths-Chsi83mp.js";
43
44
  import { B as githubTokenSource, F as configureGithubClient, I as createGithubClient, N as clockSkewMs, P as clockTime$1, R as githubClient, V as normalizeGithubHost, r as EMPTY_EXTENSION_REGISTRY } from "./row-fields-CAYcZogp.js";
44
- import { r as artifacts_default } from "./presets-CBt6rFfS.js";
45
- import { t as ZIDANE_VERSION } from "./version-DqqqvHDP.js";
46
- import { n as abortableInstallIo, s as parseInstallSource } from "./source-Bl1Z501r.js";
47
- import { S as withZidaneSkillEditSkill, a as sectionDigest, c as EXTENSION_EDIT_METADATA_KEY, d as ZIDANE_SKILL_EDIT_SKILL_NAME, g as extensionDirForCwd, i as latestSystemSnapshot, l as SKILL_EDIT_METADATA_KEY, n as announcedDigest, o as sectionDigests, r as catalogChangeNotes, s as systemSnapshotTurn, u as ZIDANE_EXTENSION_SKILL_NAME, v as readSkillEditMarker, x as withZidaneExtensionSkill } from "./system-freeze-m5o1sGIM.js";
45
+ import { r as artifacts_default } from "./presets-CMY43nUP.js";
46
+ import { t as ZIDANE_VERSION } from "./version-szdW1Od9.js";
47
+ import { n as abortableInstallIo, s as parseInstallSource } from "./source-3ZnEPOSa.js";
48
+ import { S as withZidaneSkillEditSkill, a as sectionDigest, c as EXTENSION_EDIT_METADATA_KEY, d as ZIDANE_SKILL_EDIT_SKILL_NAME, g as extensionDirForCwd, i as latestSystemSnapshot, l as SKILL_EDIT_METADATA_KEY, n as announcedDigest, o as sectionDigests, r as catalogChangeNotes, s as systemSnapshotTurn, u as ZIDANE_EXTENSION_SKILL_NAME, v as readSkillEditMarker, x as withZidaneExtensionSkill } from "./system-freeze-XgDPIwQS.js";
48
49
  import { d as querySessions } from "./references-DZ5qTYDl.js";
49
50
  import { r as createLogger, t as consoleSink } from "./logger-BQj8QCJp.js";
50
- import { F as extensionRuntimeOf, L as filterRegistryPlugins } from "./extensions-BCx4QuGB.js";
51
+ import { F as extensionRuntimeOf, L as filterRegistryPlugins } from "./extensions-ADlhBQ_1.js";
51
52
  import { t as resolveStorageDirs } from "./xdg-DFSAQQG8.js";
52
53
  import { l as resolveOAuthApiKey } from "./oauth-7IvbubTT.js";
53
54
  import { p as oauthAccountLabel } from "./cred-keys-C0KaSRp7.js";
54
55
  import { n as sanitizeProviderDiagnosticMetadata, o as THINKING_BINDING_SETTING_ENV, s as anthropicEffortForLevel } from "./anthropic-Dp6JSSyY.js";
55
- import { A as getContextWindow, B as restoreModelOptions, D as credKeyOf, F as modelSupportsReasoning, I as modelsForDescriptor, N as modelLabel, O as defaultModelOf, a as ensureCredentialIds, c as providerFactoryOptions, d as readCredentials, i as credentialsPath, k as enabledModelOptions, t as applyApiKeyEnv, w as BUILTIN_PROVIDERS, x as storedCredentialsOf } from "./credentials-wwETW8rI.js";
56
+ import { A as getContextWindow, B as restoreModelOptions, D as credKeyOf, F as modelSupportsReasoning, I as modelsForDescriptor, N as modelLabel, O as defaultModelOf, a as ensureCredentialIds, c as providerFactoryOptions, d as readCredentials, i as credentialsPath, k as enabledModelOptions, t as applyApiKeyEnv, w as BUILTIN_PROVIDERS, x as storedCredentialsOf } from "./credentials-Bqg-qNBM.js";
56
57
  import { n as defaultPluginDataRoot, r as loadAgentPlugin } from "./plugins-CNj4kHpO.js";
57
58
  import { i as sqliteStoreConnection } from "./sqlite-store-D5y70PuL.js";
58
- import { a as createGenerateImageTool } from "./tools-CVTGhggj.js";
59
+ import { a as createGenerateImageTool } from "./tools-BsrGQ8K4.js";
59
60
  import { d as buildBuildSystem, f as buildPlanSystem, h as replaceEnvSection, m as envSectionDate, p as envSection } from "./agent-prompt-BXVwL89Y.js";
60
- import { B as selectActiveTodos, C as profileTools, E as singleAgentRegistry, F as getTodosForRun, I as isTodoTool, R as pruneTodosByRun, T as sessionComposition, V as setTodosForRun, _ as availableAgents, a as deleteSessionData, b as compositionFits, d as BUILTIN_AGENTS, f as DEFAULT_AGENT_ID, g as READ_ONLY_TOOLS, i as createSessionInStore, n as isDurabilityMode, s as forkSession, v as builtInPromptOf, w as resolveAgentId, x as compositionTools, z as sanitizeTodoItems } from "./setting-BQBSyUq0.js";
61
+ import { B as selectActiveTodos, C as profileTools, E as singleAgentRegistry, F as getTodosForRun, I as isTodoTool, R as pruneTodosByRun, T as sessionComposition, V as setTodosForRun, _ as availableAgents, a as deleteSessionData, b as compositionFits, d as BUILTIN_AGENTS, f as DEFAULT_AGENT_ID, g as READ_ONLY_TOOLS, i as createSessionInStore, n as isDurabilityMode, s as forkSession, v as builtInPromptOf, w as resolveAgentId, x as compositionTools, z as sanitizeTodoItems } from "./setting-D_FpKFMw.js";
61
62
  import { _ as verifyEnvironment, c as environmentMetadata, f as readSessionEnvironment, g as teardownSessionEnvironment, h as runSessionEnvironmentAction, i as assertEnvironmentReady, l as environmentTakesBranch, m as resolveExecution, o as createEnvironmentRegistry, p as requireEnvironmentProvider, r as LOCAL_ENVIRONMENT, s as environmentActionSummaries, u as initialEnvironment, v as workspacePath } from "./environment-DWlIhAKo.js";
62
63
  import { E as restoreChainFallbacks, a as replaceTurnTextBlocks, c as SESSION_ACCOUNT_METADATA_KEY, f as buildRunModel, i as referencedRuns, l as modelChainMetadata, n as deleteTurnSafely, o as truncateTurnsAt, u as readSessionAccount } from "./turn-operations-CWoCTC_L.js";
63
64
  import { $ as sessionOrchestrationTools, B as isSideSession, D as MAIN_SESSION_TITLE, E as MAIN_PLAYBOOK_FRAGMENT, F as artifactsFromTurns, G as renderProjectsBriefing, H as parseOrchestrationTools, I as capRequestPayload, J as sessionCreator, K as renderSessionEventXml, L as isBackgroundSession, N as SUBSCRIBE_KEY, O as ORCHESTRATED_BY_KEY, P as WORKER_REPORT_FRAGMENT, R as isMainSession, T as CREATED_BY_KEY, V as orchestratedBy, W as parseSessionScope, Z as sessionEventLabel, c as extensionSpace, dt as formatRunReceiptLine, et as sessionSubscription, gt as runReceiptFromRun, j as SESSION_ROLE_KEY, k as ORCHESTRATION_TOOLS_KEY, m as readSessionSpaceId, mt as hasRunReceipt, nt as sideSessionParent, q as scopeMatches, u as isExtensionSpaceId, w as parseModelSetting, z as isOrchestratorSession } from "./spaces-BaE3ZcBx.js";
64
65
  import { A as readProjects, C as addToSafelistForCwd, E as isOnSafelist, M as safelistProjectKey, N as suggestSafelistEntries, T as getSafelistForCwd, _ as rulerSkillScanPaths, a as renderSystemMdSeed, b as parseClaudeState, c as buildMcpServers, d as discoverProjectMcps, f as parseJsonTolerant, g as rulerInstructionFiles, h as isRulerGenerated, i as discoverSystemMd, m as withSessionStdioCwd, o as userScopeOverridesLoad, p as parseMcpsFile, s as userSystemMdPath, t as createFileEnvironmentSecrets, u as defaultMcpsConfigPaths, v as foreignMcpConfigFiles, y as foreignSkillScanPaths } from "./environment-credentials-C8jkOGQ6.js";
65
- import { a as commandNoteText, c as noteDisplay, i as commandHeaderBlock, n as nestedResultEvent, o as commandStepLabel, r as nestedToolEvent } from "./nested-call-events-BYk8XvGX.js";
66
+ import { C as commandNoteText, E as noteDisplay, S as commandHeaderBlock, b as nestedResultEvent, i as createScriptProgressTracker, w as commandStepLabel, x as nestedToolEvent } from "./script-progress-CrZ507Qq.js";
66
67
  import { C as buildEditOutcomesAnnotation, D as resolveApprovalForPayload, E as parseEditOutcomesFromResult, O as rewriteMultiEditHeader, T as mergeApprovalAndBodyOutcomes, _ as extractEditPayload, a as isDenyChoice, c as inferPromptRefs, i as autoDenyReason, k as stripEditOutcomesAnnotation, r as MODEL_APPROVAL_CHOICES, t as oneLineTitle, y as previewEditPayload } from "./session-title-text-CQvgo3yS.js";
67
- import { T as toolResultText, b as sessionEnvironmentSummary, g as runInProgress, i as deriveSessionTitle, m as readSessionHeader, n as compactSummaryEvent, p as noticeTurnContent, r as createStateStore, s as getSessionMeta, w as toolCallPreview, x as stripSpawnTokensLine, y as serverToolResultSummary } from "./store-C6gI7FfZ.js";
68
+ import { T as toolResultText, b as sessionEnvironmentSummary, g as runInProgress, i as deriveSessionTitle, m as readSessionHeader, n as compactSummaryEvent, p as noticeTurnContent, r as createStateStore, s as getSessionMeta, w as toolCallPreview, x as stripSpawnTokensLine, y as serverToolResultSummary } from "./store-ByCDaKgJ.js";
68
69
  import { n as buildSpawnQueuedEvent, r as buildSpawnStartEvent, t as buildSpawnEndEvent } from "./spawn-markers-Dn8JJJFW.js";
69
- import { $ as machineKind, C as ENTRY_EMPTY_DIRS_LIMIT, K as splitStreamFailure, L as BROWSER_MAX_WAIT_MS, O as createEntryOps, R as BROWSER_OPEN_MOUNT_MS, S as TerminalError, V as BROWSER_REQUEST_SLACK_MS, X as MachineErrorCode, Y as MACHINE_STREAM_CHUNK_BYTES, Z as isValidMachineName, _ as TERMINAL_OUTPUT_WINDOW, at as REASONING_NOTICE_LABEL, et as parseMachineKind, it as EDIT_TOOL_NAMES, m as TERMINAL_HISTORY_MAX_CHARS, mt as promptTurnRefs, n as HOST_TOOLS, o as mediaTypeOfPath, q as MACHINE_IDEMPOTENT_METHODS, rt as CACHE_NOTICE_LABEL, s as OutputHistory, t as parseRepoInput, u as isMouseTracking, v as TERMINAL_READ_MAX_CHARS, y as TERMINAL_TEXT_MAX_LINES } from "./repo-url-D4Dr8NfZ.js";
70
+ import { C as ENTRY_EMPTY_DIRS_LIMIT, J as BLOCK_RUN_TIMEOUT_MS, K as BLOCK_RUNS_METADATA_KEY, L as BROWSER_MAX_WAIT_MS, O as createEntryOps, Ot as promptTurnRefs, Q as blockRunKey, R as BROWSER_OPEN_MOUNT_MS, S as TerminalError, V as BROWSER_REQUEST_SLACK_MS, Z as blockRunCommand, _ as TERMINAL_OUTPUT_WINDOW, _t as CACHE_NOTICE_LABEL, dt as isValidMachineName, et as capBlockOutput, it as withBlockRun, lt as MACHINE_STREAM_CHUNK_BYTES, m as TERMINAL_HISTORY_MAX_CHARS, mt as parseMachineKind, n as HOST_TOOLS, nt as readBlockRuns, o as mediaTypeOfPath, ot as splitStreamFailure, pt as machineKind, q as BLOCK_RUN_OUTPUT_CAP, rt as shellBlockPlan, s as OutputHistory, st as MACHINE_IDEMPOTENT_METHODS, t as parseRepoInput, u as isMouseTracking, ut as MachineErrorCode, v as TERMINAL_READ_MAX_CHARS, vt as EDIT_TOOL_NAMES, y as TERMINAL_TEXT_MAX_LINES, yt as REASONING_NOTICE_LABEL } from "./repo-url-DLjjuVk_.js";
70
71
  import { A as chatWindowBehavior, C as isModelInteraction, D as planRejectionReason, E as pendingInteractionsFromTurns, M as EditOutcomeLedger, _ as PRESENT_PLAN_TOOL, a as TITLE_SOURCE_KEY, b as createInteractionTools, c as inTitleFailureCooldown, f as normalizeLaunchOverrides, g as HOST_INTERACTION_ID_PREFIX, i as TITLE_CHECK_KEY, j as runEndNotice, k as chatAutoCompactBehavior, l as isTitleStale, m as ASK_USER_TOOL, n as createSessionExecutionCache, o as autoTitleAction, p as toTodosSnapshot, r as TITLE_CHECKED_KEY, u as userPromptCount, v as buildResumedToolResultsTurn, w as isRefusedInteraction, x as interactionAwakeableKey, y as createAutomaticInteractionResponse } from "./model-test-CAtJ76kM.js";
71
- import { A as decisionsEnabled, E as DEFAULT_SETTINGS, M as settingsFromStored } from "./settings-catalog-4IU2i_jG.js";
72
+ import { A as decisionsEnabled, E as DEFAULT_SETTINGS, M as settingsFromStored } from "./settings-catalog-DEZlXP51.js";
72
73
  import { i as applySessionBudget, s as sessionPolicyOf } from "./session-policy-Bo7rDcG5.js";
73
- import { At as chatReferenceTokensFromText, Gt as remoteHostsGate, H as providerBrand, Nt as cacheBreakChip, Pt as cacheBreakNoticeText, Q as nativeExtensionByName, St as workedMs, W as DEFAULT_EXTENSION_SOURCE_UNREACHABLE, X as NATIVE_EXTENSIONS_REPO, Y as NATIVE_EXTENSIONS, _t as percentileMs, bt as scoreToMs, mt as estimateLevelLabel, pt as calibrationFactor, q as nativeExtensionListing, rt as classifyMcpTest, ut as ESTIMATE_LEVEL_MINUTES, vt as runEstimateView, wt as buildTextModel } from "./usage-summary-BfcXjiSM.js";
74
+ import { At as chatReferenceTokensFromText, Gt as remoteHostsGate, H as providerBrand, Nt as cacheBreakChip, Pt as cacheBreakNoticeText, Q as nativeExtensionByName, St as workedMs, W as DEFAULT_EXTENSION_SOURCE_UNREACHABLE, X as NATIVE_EXTENSIONS_REPO, Y as NATIVE_EXTENSIONS, _t as percentileMs, bt as scoreToMs, mt as estimateLevelLabel, pt as calibrationFactor, q as nativeExtensionListing, rt as classifyMcpTest, ut as ESTIMATE_LEVEL_MINUTES, vt as runEstimateView, wt as buildTextModel } from "./usage-summary-BM7B3JdI.js";
74
75
  import { t as StreamQueue } from "./stream-queue-Cd9OJxl7.js";
75
76
  import { t as createDaytonaProvider } from "./daytona-CgC8wQzg.js";
76
77
  import { n as hostWorkspaceMounts, t as createDockerContext } from "./docker-D3CARts8.js";
77
78
  import { t as createE2BProvider } from "./e2b-4ByYdO1e.js";
78
- import { g as fieldsReadBy, s as modelKey, t as accountModelKey } from "./providers-Z0TaBp1O.js";
79
+ import { g as fieldsReadBy, s as modelKey, t as accountModelKey } from "./providers-CpXV_uLE.js";
79
80
  import { n as sqliteRuntimeForStore } from "./sqlite-runtime-DUtWWIVu.js";
80
- import { a as integrationCredentialsOf, i as detectAuth, o as isIntegrationCredentialKey, r as activeAccountOf, t as createCliExecution } from "./cli-shared-CabruH8Z.js";
81
- import { d as isEnvironmentEnabled, p as resolveProviderConfig, u as describeEnvironments } from "./host-scoped-settings-CrbcqOkP.js";
81
+ import { a as integrationCredentialsOf, i as detectAuth, o as isIntegrationCredentialKey, r as activeAccountOf, t as createCliExecution } from "./cli-shared-DeRHgYvl.js";
82
+ import { d as isEnvironmentEnabled, p as resolveProviderConfig, u as describeEnvironments } from "./host-scoped-settings-WBYaCork.js";
82
83
  import { Buffer } from "node:buffer";
83
84
  import { basename, delimiter, dirname, isAbsolute, join, normalize, posix, relative, resolve, sep } from "node:path";
84
85
  import { accessSync, appendFileSync, chmodSync, closeSync, constants, cpSync, createReadStream, createWriteStream, existsSync, linkSync, mkdirSync, mkdtempSync, openSync, readFileSync, readSync, readdirSync, realpathSync, renameSync, rmSync, statSync, statfsSync, unlinkSync, watch, writeFileSync } from "node:fs";
@@ -12252,6 +12253,7 @@ function withExtensionInstructions(fragments, runtime, sessionId) {
12252
12253
  function extensionSnapshot(runtime, sessionId) {
12253
12254
  const { catalogs } = runtime;
12254
12255
  return [
12256
+ runtime.withdrawals(),
12255
12257
  runtime.instructions.list(sessionId).join("\0"),
12256
12258
  catalogs.agents.read(),
12257
12259
  catalogs.providers.read(),
@@ -12262,8 +12264,10 @@ function extensionSnapshot(runtime, sessionId) {
12262
12264
  }
12263
12265
  /**
12264
12266
  * `reads`, also stale (`'extensions.runtime'`) once an extension catalog or the
12265
- * session's instructions changed since the build: the next dispatch rebuilds
12266
- * the agent with them, as after a settings change. Returns `reads` itself
12267
+ * session's instructions changed since the build, or registrations were
12268
+ * withdrawn (the registry disposed, an extension unloaded): the next dispatch
12269
+ * rebuilds the agent with them, against the host's live registry, as after a
12270
+ * settings change. Returns `reads` itself
12267
12271
  * when there is no extension runtime.
12268
12272
  *
12269
12273
  * @param reads - The build's settings reads.
@@ -12589,6 +12593,104 @@ function installNestedCallHooks({ sessionId, broadcast, agent }, input) {
12589
12593
  });
12590
12594
  }
12591
12595
  }
12596
+ /** Ended scripts remembered, so a report that lands late starts no tracker. */
12597
+ const MAX_ENDED = 256;
12598
+ function installScriptProgressHooks({ sessionId, broadcast, agent }) {
12599
+ const live = /* @__PURE__ */ new Map();
12600
+ const ended = /* @__PURE__ */ new Set();
12601
+ /** Call ids are only unique within one agent, so keys carry the subagent. */
12602
+ const keyOf = (ctx, callId) => `${ctx.childId ?? ""}\u0000${callId}`;
12603
+ const send = (entry) => {
12604
+ clearTimeout(entry.timer);
12605
+ entry.timer = void 0;
12606
+ entry.sentAt = Date.now();
12607
+ broadcast({
12608
+ kind: "event",
12609
+ sessionId,
12610
+ event: {
12611
+ kind: "tool-progress",
12612
+ text: "",
12613
+ callId: entry.callId,
12614
+ scriptProgress: entry.tracker.snapshot(),
12615
+ ...entry.tag
12616
+ }
12617
+ });
12618
+ };
12619
+ const schedule = (entry) => {
12620
+ if (entry.timer) return;
12621
+ const wait = 150 - (Date.now() - entry.sentAt);
12622
+ if (wait <= 0) {
12623
+ send(entry);
12624
+ return;
12625
+ }
12626
+ entry.timer = setTimeout(send, wait, entry);
12627
+ entry.timer.unref?.();
12628
+ };
12629
+ /** The script `callId` belongs to, started on its first report. None once it ended. */
12630
+ const scriptOf = (ctx, callId) => {
12631
+ const key = keyOf(ctx, callId);
12632
+ let entry = live.get(key);
12633
+ if (!entry) {
12634
+ if (ended.has(key)) return void 0;
12635
+ entry = {
12636
+ tracker: createScriptProgressTracker(),
12637
+ tag: {
12638
+ ...ctx.turnId ? { turnId: ctx.turnId } : {},
12639
+ ...ctx.childId !== void 0 ? { childId: ctx.childId } : {},
12640
+ ...ctx.depth !== void 0 ? { depth: ctx.depth } : {}
12641
+ },
12642
+ callId,
12643
+ sentAt: 0,
12644
+ timer: void 0
12645
+ };
12646
+ live.set(key, entry);
12647
+ }
12648
+ return entry;
12649
+ };
12650
+ const started = (ctx) => {
12651
+ if (ctx.parentToolCallId === void 0 || ctx.scriptLine === void 0) return;
12652
+ const entry = scriptOf(ctx, ctx.parentToolCallId);
12653
+ if (!entry) return;
12654
+ entry.tracker.start(ctx.callId, ctx.scriptLine);
12655
+ schedule(entry);
12656
+ };
12657
+ const finished = (ctx, ok) => {
12658
+ if (ctx.parentToolCallId === void 0) {
12659
+ const key = keyOf(ctx, ctx.callId);
12660
+ ended.add(key);
12661
+ if (ended.size > MAX_ENDED) ended.delete(ended.values().next().value);
12662
+ const entry = live.get(key);
12663
+ if (entry) {
12664
+ live.delete(key);
12665
+ entry.tracker.end(ok);
12666
+ send(entry);
12667
+ }
12668
+ return;
12669
+ }
12670
+ const entry = live.get(keyOf(ctx, ctx.parentToolCallId));
12671
+ if (!entry) return;
12672
+ entry.tracker.finish(ctx.callId, ok);
12673
+ schedule(entry);
12674
+ };
12675
+ for (const prefix of ["", "child:"]) {
12676
+ agent.hooks.hook(`${prefix}tool:before`, (ctx) => started(ctx));
12677
+ agent.hooks.hook(`${prefix}tool:after`, (ctx) => finished(ctx, ctx.isError !== true));
12678
+ agent.hooks.hook(`${prefix}tool:cancelled`, (ctx) => finished(ctx, false));
12679
+ agent.hooks.hook(`${prefix}tool:dispatched`, (ctx) => {
12680
+ if (ctx.outcome === "execute" || ctx.outcome === "gate-substitute" || ctx.parentToolCallId === void 0) return;
12681
+ started(ctx);
12682
+ finished(ctx, false);
12683
+ });
12684
+ agent.hooks.hook(`${prefix}tool:progress`, (ctx) => {
12685
+ const nested = ctx.parentToolCallId !== void 0;
12686
+ if (!nested && ctx.progress.stream !== "output" && ctx.progress.stream !== "console") return;
12687
+ const entry = scriptOf(ctx, nested ? ctx.parentToolCallId : ctx.callId);
12688
+ if (!entry) return;
12689
+ entry.tracker.output(ctx.progress.stream, ctx.progress.text, nested ? ctx.scriptLine : void 0);
12690
+ schedule(entry);
12691
+ });
12692
+ }
12693
+ }
12592
12694
  //#endregion
12593
12695
  //#region src/chat/host/transcript/spawn.ts
12594
12696
  function installSpawnHooks({ sessionId, agent, broadcast }, emitNotice) {
@@ -13299,6 +13401,7 @@ function installSessionHooks(input) {
13299
13401
  readPriorContent
13300
13402
  });
13301
13403
  installNestedCallHooks(hookContext, { readSettings: () => env.readSettings() });
13404
+ installScriptProgressHooks(hookContext);
13302
13405
  installEditAnnotationHooks(agent, ledger);
13303
13406
  installToolResultHooks(hookContext, {
13304
13407
  ledger,
@@ -13698,6 +13801,17 @@ function mergeAgentTools({ settings, interactionTools, orchestrationTools, orche
13698
13801
  */
13699
13802
  const CHAT_PROVIDER_STREAM_IDLE_TIMEOUT_MS = 3e5;
13700
13803
  /**
13804
+ * `behavior.codemode` with codemode on: the preset's own mode (`true` when it
13805
+ * sets none), plus `streamProgress` when the setting asks for live progress.
13806
+ */
13807
+ function codemodeBehavior(preset, streamProgress) {
13808
+ if (!streamProgress) return preset || true;
13809
+ return {
13810
+ ...typeof preset === "object" ? preset : {},
13811
+ streamProgress: true
13812
+ };
13813
+ }
13814
+ /**
13701
13815
  * The behavior a chat session's agent is built with: the preset's, plus the
13702
13816
  * host's settings and defaults.
13703
13817
  */
@@ -13714,7 +13828,7 @@ function composeAgentBehavior({ presetBehavior, persistBehavior, settings, tasks
13714
13828
  mode: settings.stableToolList ? "dispatch" : "unlock",
13715
13829
  ...settings.compactToolCatalog ? { catalog: "names" } : {}
13716
13830
  },
13717
- ...settings.codemode ? { codemode: presetBehavior?.codemode || true } : { codemode: void 0 },
13831
+ ...settings.codemode ? { codemode: codemodeBehavior(presetBehavior?.codemode, settings.codemodeStreamProgress) } : { codemode: void 0 },
13718
13832
  tasksDir
13719
13833
  };
13720
13834
  }
@@ -14839,6 +14953,123 @@ async function maybeAutoTitle(deps, input) {
14839
14953
  }
14840
14954
  }
14841
14955
  //#endregion
14956
+ //#region src/chat/host/block-runs.ts
14957
+ function createBlockRunMethods({ host, store, broadcast, now = Date.now, timeoutMs = BLOCK_RUN_TIMEOUT_MS }) {
14958
+ /** Saves of a session, one after another. */
14959
+ const saving = /* @__PURE__ */ new Map();
14960
+ const queued = (sessionId, work) => {
14961
+ const next = (saving.get(sessionId) ?? Promise.resolve()).then(work, work);
14962
+ const settled = next.catch(() => void 0);
14963
+ saving.set(sessionId, settled);
14964
+ settled.then(() => {
14965
+ if (saving.get(sessionId) === settled) saving.delete(sessionId);
14966
+ });
14967
+ return next;
14968
+ };
14969
+ /** The session's metadata and the ids of its turns (the live session's when it is loaded). */
14970
+ async function read(sessionId) {
14971
+ const live = host().getLiveSession(sessionId);
14972
+ if (live) return {
14973
+ metadata: live.metadata,
14974
+ turnIds: new Set(live.turns.map((turn) => turn.id))
14975
+ };
14976
+ const data = await store.load(sessionId);
14977
+ if (!data) throw new Error(`Session "${sessionId}" not found.`);
14978
+ return {
14979
+ metadata: data.metadata,
14980
+ turnIds: new Set(data.turns.map((turn) => turn.id))
14981
+ };
14982
+ }
14983
+ const write = async (sessionId, runs) => {
14984
+ await host().patchSessionMeta(sessionId, { [BLOCK_RUNS_METADATA_KEY]: Object.keys(runs).length > 0 ? runs : void 0 }, { bumpUpdatedAt: false });
14985
+ broadcast({
14986
+ kind: "block-runs:changed",
14987
+ sessionId
14988
+ });
14989
+ };
14990
+ return {
14991
+ async runBlock(sessionId, request, { onOutput, signal } = {}) {
14992
+ const plan = shellBlockPlan(request.code, request.language);
14993
+ if (!plan) throw new Error("This block does not run: only bash, sh, shell, zsh and console blocks with a command do.");
14994
+ const command = blockRunCommand(plan);
14995
+ const startedAt = now();
14996
+ let output = "";
14997
+ let stopped;
14998
+ const take = (stream, text) => {
14999
+ if (text === "") return;
15000
+ output += text;
15001
+ if (output.length > 131072) output = output.slice(-BLOCK_RUN_OUTPUT_CAP - 1);
15002
+ try {
15003
+ onOutput?.(stream, text);
15004
+ } catch {}
15005
+ };
15006
+ let exitCode = null;
15007
+ const stream = signal?.aborted ? null : await host().workspaceExecStream(sessionId, command);
15008
+ if (signal?.aborted) stopped = "cancelled";
15009
+ else if (stream) {
15010
+ const stop = (why) => {
15011
+ stopped ??= why;
15012
+ stream.kill();
15013
+ };
15014
+ const onAbort = () => stop("cancelled");
15015
+ signal?.addEventListener("abort", onAbort, { once: true });
15016
+ const timer = setTimeout(stop, timeoutMs, "timeout");
15017
+ const drain = async (source, name) => {
15018
+ if (!source) return;
15019
+ const decoder = new TextDecoder();
15020
+ try {
15021
+ for await (const bytes of source) take(name, decoder.decode(bytes, { stream: true }));
15022
+ take(name, decoder.decode());
15023
+ } catch {}
15024
+ };
15025
+ try {
15026
+ const [code] = await Promise.all([
15027
+ stream.exited,
15028
+ drain(stream.stdout, "stdout"),
15029
+ drain(stream.stderr, "stderr")
15030
+ ]);
15031
+ exitCode = code;
15032
+ } finally {
15033
+ clearTimeout(timer);
15034
+ signal?.removeEventListener("abort", onAbort);
15035
+ }
15036
+ } else try {
15037
+ const result = await host().workspaceExec(sessionId, command, { timeoutSeconds: Math.ceil(timeoutMs / 1e3) });
15038
+ take("stdout", result.stdout);
15039
+ take("stderr", result.stderr);
15040
+ exitCode = result.exitCode;
15041
+ } catch (err) {
15042
+ take("stderr", err instanceof Error ? err.message : String(err));
15043
+ }
15044
+ const run = {
15045
+ key: blockRunKey(request.turnId, request.code),
15046
+ turnId: request.turnId,
15047
+ ...capBlockOutput(output),
15048
+ exitCode: stopped ? null : exitCode,
15049
+ ...stopped ? { stopped } : {},
15050
+ durationMs: Math.max(0, now() - startedAt),
15051
+ finishedAt: now()
15052
+ };
15053
+ await queued(sessionId, async () => {
15054
+ const { metadata, turnIds } = await read(sessionId);
15055
+ await write(sessionId, withBlockRun(readBlockRuns(metadata), run, turnIds));
15056
+ });
15057
+ return run;
15058
+ },
15059
+ async listBlockRuns(sessionId) {
15060
+ return readBlockRuns((await read(sessionId)).metadata);
15061
+ },
15062
+ async removeBlockRun(sessionId, key) {
15063
+ await queued(sessionId, async () => {
15064
+ const runs = readBlockRuns((await read(sessionId)).metadata);
15065
+ if (!(key in runs)) return;
15066
+ delete runs[key];
15067
+ await write(sessionId, runs);
15068
+ });
15069
+ }
15070
+ };
15071
+ }
15072
+ //#endregion
14842
15073
  //#region src/chat/host/broadcast.ts
14843
15074
  function createHostBroadcast(env) {
14844
15075
  const debugStream = env.debugStream ?? process.env.ZIDANE_IPC_DEBUG_STREAM === "1";
@@ -19514,12 +19745,8 @@ function createChatHost(env) {
19514
19745
  running: isSessionBusy(sessionId)
19515
19746
  }));
19516
19747
  },
19517
- getLiveTurns(sessionId) {
19518
- return active.get(sessionId)?.agent.session?.turns ?? null;
19519
- },
19520
- getLiveSession(sessionId) {
19521
- return active.get(sessionId)?.agent.session ?? null;
19522
- },
19748
+ getLiveTurns: (sessionId) => active.get(sessionId)?.agent.session?.turns ?? null,
19749
+ getLiveSession: (sessionId) => active.get(sessionId)?.agent.session ?? null,
19523
19750
  hasActiveWork() {
19524
19751
  return hasActiveRuns() || terminals.hasRunningLocal();
19525
19752
  },
@@ -19563,6 +19790,11 @@ function createChatHost(env) {
19563
19790
  active,
19564
19791
  agentSwitchRebuilds: sessionOps.methods.agentSwitchRebuilds
19565
19792
  }),
19793
+ ...createBlockRunMethods({
19794
+ host: () => host,
19795
+ store: env.store,
19796
+ broadcast
19797
+ }),
19566
19798
  compactSessionNow: createCompactSessionNow({
19567
19799
  active,
19568
19800
  broadcast,
@@ -19644,16 +19876,19 @@ function closeAfter(detach, close) {
19644
19876
  /**
19645
19877
  * {@link ChatHost.hasActiveRuns}, background tasks counted only with `tasks`
19646
19878
  * (a forced restart skips them); with `cwd`, only the sessions reading that
19647
- * folder's extensions ({@link ChatHost.hasActiveRunsIn}).
19879
+ * folder's extensions ({@link ChatHost.hasActiveRunsIn}), both sides mapped
19880
+ * through `keyOf`.
19648
19881
  */
19649
- function runsInFlight({ active, dispatches, lifecycleWork }, { tasks, cwd }) {
19882
+ function runsInFlight({ active, dispatches, lifecycleWork }, { tasks, cwd, keyOf = (folder) => folder }) {
19650
19883
  if (lifecycleWork.size > 0) return true;
19884
+ const key = cwd === void 0 ? void 0 : keyOf(cwd);
19885
+ const reads = (entry) => key === void 0 || keyOf(entry.discoveryCwd) === key;
19651
19886
  for (const sessionId of dispatches.keys()) {
19652
19887
  const entry = active.get(sessionId);
19653
- if (cwd === void 0 || !entry || entry.discoveryCwd === cwd) return true;
19888
+ if (!entry || reads(entry)) return true;
19654
19889
  }
19655
19890
  for (const entry of active.values()) {
19656
- if (cwd !== void 0 && entry.discoveryCwd !== cwd) continue;
19891
+ if (!reads(entry)) continue;
19657
19892
  if (entry.agent.isRunning || entry.compacting || entry.commandAbort !== void 0) return true;
19658
19893
  for (const item of entry.work.values()) if (tasks || item.kind !== "task") return true;
19659
19894
  }
@@ -19663,9 +19898,10 @@ function runsInFlight({ active, dispatches, lifecycleWork }, { tasks, cwd }) {
19663
19898
  function activeRunChecks(ctx) {
19664
19899
  return {
19665
19900
  hasActiveRuns: () => runsInFlight(ctx, { tasks: true }),
19666
- hasActiveRunsIn: (cwd) => runsInFlight(ctx, {
19901
+ hasActiveRunsIn: (cwd, keyOf) => runsInFlight(ctx, {
19667
19902
  tasks: true,
19668
- cwd
19903
+ cwd,
19904
+ ...keyOf ? { keyOf } : {}
19669
19905
  })
19670
19906
  };
19671
19907
  }
@@ -20431,7 +20667,7 @@ function pickOAuthSelectOption(options, input) {
20431
20667
  */
20432
20668
  async function runIntegrationSignIn(descriptor, options) {
20433
20669
  if (!descriptor.integration) throw new Error(`${descriptor.label} does not sign in with an integration.`);
20434
- const { signInWithIntegration } = await import("./registry-BKjeBnoy.js").then((n) => n.r);
20670
+ const { signInWithIntegration } = await import("./registry-CJHvmvaP.js").then((n) => n.r);
20435
20671
  return signInWithIntegration(descriptor.integration, loginCallbacks(descriptor, options), options.signal ? { signal: options.signal } : {});
20436
20672
  }
20437
20673
  /**
@@ -27983,4 +28219,4 @@ function hasUpdateAppliedMarker(cacheDir) {
27983
28219
  //#endregion
27984
28220
  export { CLAUDE_IMPORT_NOTES as $, buildPluginContributions as $n, createExtensionMcpHost as $t, clearProviderUsageCache as A, renderAgentsMdBlock as An, writeWorkspaceFile as At, exportFilename as B, prepareWorktree as Bn, mcpsWritePath as Bt, parseSemver as C, discoverProjectSkills as Cn, confineToWorkspace as Ct, resolvePlatformPackage as D, createChatTurnsReadTool as Dn, gitStatusOf as Dt, reinstallHint as E, chatReferenceTokensForPrompt as En, gitStatus as Et, redeemProviderReset as F, insideDeclaredRoots as Fn, supersededTools as Ft, detectOnboardingEnvironment as G, recordAgentHooksFanout as Gn, runIntegrationSignIn as Gt, resolveSessionExportTarget as H, readRemoteSandboxRef as Hn, upsertMcpServer as Ht, usageChecksOptedOut as I, builtinEnvironmentProviders as In, makeToolContext as It, probeLocalModelServers as J, resolveCwdPath as Jn, supportsOAuth as Jt, detectOtherAgents as K, extractEditPayloadForGate as Kn, runOAuthLogin as Kt, usageSourceFor as L, localEnvironmentProvider as Ln, fileEntriesFromPaths as Lt, fetchProviderUsage as M, resolveSessionModel as Mn, invalidateDiagnostics as Mt, fetchProviderUsageAccounts as N, discoverSessionMcpServers as Nn, listDiagnosticsTools as Nt, updateChecksOptedOut as O, installProviderDiagnosticHook as On, listWorkspace as Ot, providerUsageSupported as P, machineDiscoveryCwd as Pn, runDiagnostics as Pt, listExtensionSource as Q, scopeCwd as Qn, createArtifactKindsHost as Qt, fetchGithubUsage as R, WORKTREE_ENVIRONMENT_KIND as Rn, listProjectFiles as Rt, overrideManager as S, defaultSkillScanPaths as Sn, assembleDiff as St, performSelfUpdate as T, applyThinkingBindingSetting as Tn, gitShowHead as Tt, writeSessionExport as U, MachineLinkLostError as Un, oauthUsesManualCodePaste as Ut, renderSession as V, teardownWorktree as Vn, removeMcpServer as Vt, connectorGithubToken as W, createAgentHooksFanout as Wn, pickOAuthSelectOption as Wt, onboardingProviders as X, folderlessCwd as Xn, tryRevealPath as Xt, FEATURED_PROVIDERS as Y, serializePreview as Yn, tryOpenBrowser as Yt, clearExtensionSourceCache as Z, resolveSessionCwd as Zn, createMcpStatusTracker as Zt, checkForUpdate as _, storeHasDurability as _n, liveAgentProfiles as _r, gitOriginUrl as _t, updateAppliedMarkerPath as a, sandboxUnreadableDirs as an, refreshMcpToolsCatalog as ar, createGitWatches as at, detectLibc as b, buildSkillsConfig as bn, createMemoryApprovalsStore as br, WORKSPACE_MAX_ENTRIES as bt, UPDATE_LOCK_FILE as c, patchMcpCredential as cn, imageGenerationTools as cr, forgetGitCaches as ct, describeUpdateLockHolder as d, isInside$1 as dn, listDecisionModels as dr, gitCreateBranch as dt, resolveConfig as en, discoverProjectPlugins as er, claudeImportHostNote as et, isUpdateLockStale as f, createCatalogPorts as fn, parseDecisionModel as fr, gitInfo as ft, SELF_UPDATE_TIMEOUT_MS as g, readPinnedSkills as gn, changedCatalogItems as gr, cloneRepository as gt, findInstalledCompanion as h, pinnedSkillsValue as hn, applyExtensionAgents as hr, gitSwitch as ht, readUpdateAppliedMarker as i, resolveSandboxForRoots as in, mcpToolsCachePath as ir, previewClaudeImport as it, fetchAllProviderUsage as j, createProviderBuilder as jn, resolvePaths as jt, USAGE_CACHE_TTL_MS as k, discoverAgentsMd as kn, readWorkspaceFile as kt, UPDATE_LOCK_STALE_MS as l, provisionSessionEnvironment as ln, imageModelSources as lr, gitBranches as lt, updateLockPath as m, PINNED_SKILLS_META_KEY as mn, testDecisionModel as mr, gitPrList as mt, hasUpdateAppliedMarker as n, createChatHost as nn, clearMcpToolsCache as nr, hasClaudeCodeSetup as nt, watchInstalledVersion as o, createFileMcpCredentialStore as on, saveMcpToolsCache as or, watchGitRepository as ot, readUpdateLock as p, linkCatalogs as pn, resolveDecisionsOption as pr, gitPr as pt, onboardingInstallSignals as q, readFileSafe as qn, signsInWithIntegration as qt, probeInstalledVersion as r, createInteractionHub as rn, loadMcpToolsCache as rr, importFromClaudeCode as rt, writeUpdateAppliedMarker as s, mcpCredentialsPath as sn, subscribeMcpToolsCache as sr, gitSync as st, UPDATE_APPLIED_MARKER as t, resolveStoragePaths as tn, parsePluginScanPathEnv as tr, countClaudeSessionFiles as tt, acquireUpdateLock as u, createWorkspaceConfinement as un, listImageModels as ur, gitCommit as ut, checkTarballAvailable as v, isStaleRunMarker as vn, runCompaction as vr, createCapabilityProbe as vt, performInPlaceSelfUpdate as w, createBuiltinCommands as wn, gitDiff as wt, detectPackageManager as x, createSkillNameProbe as xn, WORKSPACE_MAX_FILE_BYTES as xt, compareSemver as y, createPromptSubmissions as yn, createApprovalHub as yr, searchWorkspace as yt, aggregateUsage as z, createWorktreeEnvironmentProvider as zn, isMcpServerName as zt };
27985
28221
 
27986
- //# sourceMappingURL=auto-update-restart-BFB7Ek87.js.map
28222
+ //# sourceMappingURL=auto-update-restart-CQJtndMG.js.map