@code-yeongyu/senpi 2026.8.23 → 2026.8.25

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 (563) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/dist/cli/args.d.ts.map +1 -1
  3. package/dist/cli/args.js +24 -9
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/file-processor.d.ts.map +1 -1
  6. package/dist/cli/file-processor.js +2 -1
  7. package/dist/cli/file-processor.js.map +1 -1
  8. package/dist/config.d.ts +6 -3
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +24 -14
  11. package/dist/config.js.map +1 -1
  12. package/dist/core/agent-abort-provenance.d.ts +5 -5
  13. package/dist/core/agent-abort-provenance.d.ts.map +1 -1
  14. package/dist/core/agent-abort-provenance.js +8 -1
  15. package/dist/core/agent-abort-provenance.js.map +1 -1
  16. package/dist/core/agent-session.d.ts +14 -0
  17. package/dist/core/agent-session.d.ts.map +1 -1
  18. package/dist/core/agent-session.js +129 -29
  19. package/dist/core/agent-session.js.map +1 -1
  20. package/dist/core/auth-storage.d.ts +4 -0
  21. package/dist/core/auth-storage.d.ts.map +1 -1
  22. package/dist/core/auth-storage.js +35 -8
  23. package/dist/core/auth-storage.js.map +1 -1
  24. package/dist/core/brand.d.ts +2 -0
  25. package/dist/core/brand.d.ts.map +1 -1
  26. package/dist/core/brand.js +1 -0
  27. package/dist/core/brand.js.map +1 -1
  28. package/dist/core/compaction/compaction.d.ts +1 -0
  29. package/dist/core/compaction/compaction.d.ts.map +1 -1
  30. package/dist/core/compaction/compaction.js +24 -8
  31. package/dist/core/compaction/compaction.js.map +1 -1
  32. package/dist/core/defaults.d.ts +1 -0
  33. package/dist/core/defaults.d.ts.map +1 -1
  34. package/dist/core/defaults.js +9 -0
  35. package/dist/core/defaults.js.map +1 -1
  36. package/dist/core/extensions/builtin/goal/agent-end-continuation.d.ts.map +1 -1
  37. package/dist/core/extensions/builtin/goal/agent-end-continuation.js +10 -0
  38. package/dist/core/extensions/builtin/goal/agent-end-continuation.js.map +1 -1
  39. package/dist/core/extensions/builtin/goal/continuation.d.ts +1 -1
  40. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/goal/continuation.js +1 -1
  42. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  43. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  44. package/dist/core/extensions/builtin/goal/index.js +0 -8
  45. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  46. package/dist/core/extensions/builtin/goal/monitor-continuation-types.d.ts +1 -0
  47. package/dist/core/extensions/builtin/goal/monitor-continuation-types.d.ts.map +1 -1
  48. package/dist/core/extensions/builtin/goal/monitor-continuation-types.js.map +1 -1
  49. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +2 -1
  50. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  51. package/dist/core/extensions/builtin/goal/monitor-continuation.js +31 -3
  52. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  53. package/dist/core/extensions/builtin/goal/terminal-provider-error.js +1 -1
  54. package/dist/core/extensions/builtin/goal/terminal-provider-error.js.map +1 -1
  55. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts.map +1 -1
  56. package/dist/core/extensions/builtin/goal/wait-ticker.js +14 -9
  57. package/dist/core/extensions/builtin/goal/wait-ticker.js.map +1 -1
  58. package/dist/core/extensions/builtin/loop-guard/notice.d.ts.map +1 -1
  59. package/dist/core/extensions/builtin/loop-guard/notice.js +5 -1
  60. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
  61. package/dist/core/extensions/builtin/mcp/config-schema.d.ts +2 -2
  62. package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
  63. package/dist/core/extensions/builtin/ttsr/index.js +6 -6
  64. package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
  65. package/dist/core/extensions/builtin/ttsr/message-update.d.ts +10 -0
  66. package/dist/core/extensions/builtin/ttsr/message-update.d.ts.map +1 -0
  67. package/dist/core/extensions/builtin/ttsr/message-update.js +38 -0
  68. package/dist/core/extensions/builtin/ttsr/message-update.js.map +1 -0
  69. package/dist/core/extensions/builtin/ttsr/remediation.d.ts +5 -10
  70. package/dist/core/extensions/builtin/ttsr/remediation.d.ts.map +1 -1
  71. package/dist/core/extensions/builtin/ttsr/remediation.js +19 -3
  72. package/dist/core/extensions/builtin/ttsr/remediation.js.map +1 -1
  73. package/dist/core/extensions/builtin/ttsr/stream-remediation.d.ts +1 -1
  74. package/dist/core/extensions/builtin/ttsr/stream-remediation.d.ts.map +1 -1
  75. package/dist/core/extensions/builtin/ttsr/stream-remediation.js.map +1 -1
  76. package/dist/core/extensions/builtin/ttsr/types.d.ts +1 -1
  77. package/dist/core/extensions/builtin/ttsr/types.d.ts.map +1 -1
  78. package/dist/core/extensions/builtin/ttsr/types.js.map +1 -1
  79. package/dist/core/extensions/builtin/ttsr/watch.d.ts +1 -1
  80. package/dist/core/extensions/builtin/ttsr/watch.d.ts.map +1 -1
  81. package/dist/core/extensions/builtin/ttsr/watch.js +2 -2
  82. package/dist/core/extensions/builtin/ttsr/watch.js.map +1 -1
  83. package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.d.ts.map +1 -1
  84. package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.js +5 -23
  85. package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.js.map +1 -1
  86. package/dist/core/extensions/builtin/webfetch/webfetch/response-body.d.ts +11 -0
  87. package/dist/core/extensions/builtin/webfetch/webfetch/response-body.d.ts.map +1 -0
  88. package/dist/core/extensions/builtin/webfetch/webfetch/response-body.js +54 -0
  89. package/dist/core/extensions/builtin/webfetch/webfetch/response-body.js.map +1 -0
  90. package/dist/core/extensions/index.d.ts +2 -2
  91. package/dist/core/extensions/index.d.ts.map +1 -1
  92. package/dist/core/extensions/index.js +1 -1
  93. package/dist/core/extensions/index.js.map +1 -1
  94. package/dist/core/extensions/loader.d.ts.map +1 -1
  95. package/dist/core/extensions/loader.js +107 -45
  96. package/dist/core/extensions/loader.js.map +1 -1
  97. package/dist/core/extensions/types.d.ts +17 -6
  98. package/dist/core/extensions/types.d.ts.map +1 -1
  99. package/dist/core/extensions/types.js +3 -0
  100. package/dist/core/extensions/types.js.map +1 -1
  101. package/dist/core/footer-data-provider.d.ts +1 -1
  102. package/dist/core/footer-data-provider.js +1 -1
  103. package/dist/core/footer-data-provider.js.map +1 -1
  104. package/dist/core/keybindings.d.ts +20 -19
  105. package/dist/core/keybindings.d.ts.map +1 -1
  106. package/dist/core/keybindings.js +26 -5
  107. package/dist/core/keybindings.js.map +1 -1
  108. package/dist/core/model-config-schema.d.ts +17 -5
  109. package/dist/core/model-config-schema.d.ts.map +1 -1
  110. package/dist/core/model-config-schema.js +1 -1
  111. package/dist/core/model-config-schema.js.map +1 -1
  112. package/dist/core/model-config.d.ts.map +1 -1
  113. package/dist/core/model-config.js +7 -5
  114. package/dist/core/model-config.js.map +1 -1
  115. package/dist/core/model-resolver.d.ts +3 -2
  116. package/dist/core/model-resolver.d.ts.map +1 -1
  117. package/dist/core/model-resolver.js +3 -2
  118. package/dist/core/model-resolver.js.map +1 -1
  119. package/dist/core/model-runtime.d.ts +0 -1
  120. package/dist/core/model-runtime.d.ts.map +1 -1
  121. package/dist/core/model-runtime.js +0 -18
  122. package/dist/core/model-runtime.js.map +1 -1
  123. package/dist/core/models-store.d.ts.map +1 -1
  124. package/dist/core/models-store.js +2 -1
  125. package/dist/core/models-store.js.map +1 -1
  126. package/dist/core/package-manager.d.ts.map +1 -1
  127. package/dist/core/package-manager.js +14 -10
  128. package/dist/core/package-manager.js.map +1 -1
  129. package/dist/core/pi-manifest.d.ts.map +1 -1
  130. package/dist/core/pi-manifest.js +2 -1
  131. package/dist/core/pi-manifest.js.map +1 -1
  132. package/dist/core/provider-composer.d.ts +2 -0
  133. package/dist/core/provider-composer.d.ts.map +1 -1
  134. package/dist/core/provider-composer.js +3 -6
  135. package/dist/core/provider-composer.js.map +1 -1
  136. package/dist/core/provider-display-names.d.ts.map +1 -1
  137. package/dist/core/provider-display-names.js +0 -1
  138. package/dist/core/provider-display-names.js.map +1 -1
  139. package/dist/core/provider-timeout-retry.d.ts.map +1 -1
  140. package/dist/core/provider-timeout-retry.js +8 -12
  141. package/dist/core/provider-timeout-retry.js.map +1 -1
  142. package/dist/core/resource-loader.d.ts.map +1 -1
  143. package/dist/core/resource-loader.js +3 -2
  144. package/dist/core/resource-loader.js.map +1 -1
  145. package/dist/core/retry-fallback/profile-override.d.ts +24 -0
  146. package/dist/core/retry-fallback/profile-override.d.ts.map +1 -0
  147. package/dist/core/retry-fallback/profile-override.js +138 -0
  148. package/dist/core/retry-fallback/profile-override.js.map +1 -0
  149. package/dist/core/retry-fallback/settings.d.ts +1 -0
  150. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  151. package/dist/core/retry-fallback/settings.js.map +1 -1
  152. package/dist/core/sdk.d.ts +2 -2
  153. package/dist/core/sdk.d.ts.map +1 -1
  154. package/dist/core/sdk.js +20 -5
  155. package/dist/core/sdk.js.map +1 -1
  156. package/dist/core/session-export.d.ts +4 -0
  157. package/dist/core/session-export.d.ts.map +1 -0
  158. package/dist/core/session-export.js +32 -0
  159. package/dist/core/session-export.js.map +1 -0
  160. package/dist/core/session-manager.d.ts.map +1 -1
  161. package/dist/core/session-manager.js +2 -1
  162. package/dist/core/session-manager.js.map +1 -1
  163. package/dist/core/settings-diagnostics.d.ts +9 -0
  164. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  165. package/dist/core/settings-diagnostics.js +21 -0
  166. package/dist/core/settings-diagnostics.js.map +1 -0
  167. package/dist/core/settings-manager.d.ts +18 -0
  168. package/dist/core/settings-manager.d.ts.map +1 -1
  169. package/dist/core/settings-manager.js +88 -7
  170. package/dist/core/settings-manager.js.map +1 -1
  171. package/dist/core/slash-commands.d.ts.map +1 -1
  172. package/dist/core/slash-commands.js +2 -1
  173. package/dist/core/slash-commands.js.map +1 -1
  174. package/dist/core/system-prompt.d.ts.map +1 -1
  175. package/dist/core/system-prompt.js +11 -2
  176. package/dist/core/system-prompt.js.map +1 -1
  177. package/dist/core/tools/bash.d.ts +14 -1
  178. package/dist/core/tools/bash.d.ts.map +1 -1
  179. package/dist/core/tools/bash.js +35 -19
  180. package/dist/core/tools/bash.js.map +1 -1
  181. package/dist/core/tools/edit-diff.d.ts +0 -5
  182. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  183. package/dist/core/tools/edit-diff.js +2 -5
  184. package/dist/core/tools/edit-diff.js.map +1 -1
  185. package/dist/core/tools/edit.d.ts.map +1 -1
  186. package/dist/core/tools/edit.js +3 -2
  187. package/dist/core/tools/edit.js.map +1 -1
  188. package/dist/core/tools/index.d.ts +4 -1
  189. package/dist/core/tools/index.d.ts.map +1 -1
  190. package/dist/core/tools/index.js +13 -1
  191. package/dist/core/tools/index.js.map +1 -1
  192. package/dist/core/tools/powershell.d.ts +16 -0
  193. package/dist/core/tools/powershell.d.ts.map +1 -0
  194. package/dist/core/tools/powershell.js +39 -0
  195. package/dist/core/tools/powershell.js.map +1 -0
  196. package/dist/core/tools/read.d.ts.map +1 -1
  197. package/dist/core/tools/read.js +5 -0
  198. package/dist/core/tools/read.js.map +1 -1
  199. package/dist/core/trust-manager.d.ts.map +1 -1
  200. package/dist/core/trust-manager.js +2 -1
  201. package/dist/core/trust-manager.js.map +1 -1
  202. package/dist/extensions/llama/client.d.ts +6 -0
  203. package/dist/extensions/llama/client.d.ts.map +1 -1
  204. package/dist/extensions/llama/client.js +7 -0
  205. package/dist/extensions/llama/client.js.map +1 -1
  206. package/dist/extensions/llama/provider.d.ts +3 -1
  207. package/dist/extensions/llama/provider.d.ts.map +1 -1
  208. package/dist/extensions/llama/provider.js +27 -6
  209. package/dist/extensions/llama/provider.js.map +1 -1
  210. package/dist/index.d.ts +5 -4
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +4 -3
  213. package/dist/index.js.map +1 -1
  214. package/dist/main.d.ts.map +1 -1
  215. package/dist/main.js +13 -2
  216. package/dist/main.js.map +1 -1
  217. package/dist/migrations.d.ts.map +1 -1
  218. package/dist/migrations.js +4 -3
  219. package/dist/migrations.js.map +1 -1
  220. package/dist/modes/app-server/daemon/probe.js +1 -1
  221. package/dist/modes/app-server/daemon/probe.js.map +1 -1
  222. package/dist/modes/app-server/daemon.js +13 -2
  223. package/dist/modes/app-server/daemon.js.map +1 -1
  224. package/dist/modes/app-server/transports/websocket-connection-handler.d.ts.map +1 -1
  225. package/dist/modes/app-server/transports/websocket-connection-handler.js +4 -0
  226. package/dist/modes/app-server/transports/websocket-connection-handler.js.map +1 -1
  227. package/dist/modes/interactive/aborted-error-label.d.ts +4 -1
  228. package/dist/modes/interactive/aborted-error-label.d.ts.map +1 -1
  229. package/dist/modes/interactive/aborted-error-label.js +27 -5
  230. package/dist/modes/interactive/aborted-error-label.js.map +1 -1
  231. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  232. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  233. package/dist/modes/interactive/components/thinking-selector.js +68 -17
  234. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  235. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  236. package/dist/modes/interactive/external-editor.js +2 -1
  237. package/dist/modes/interactive/external-editor.js.map +1 -1
  238. package/dist/modes/interactive/interactive-mode.d.ts +6 -0
  239. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  240. package/dist/modes/interactive/interactive-mode.js +28 -13
  241. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  242. package/dist/modes/interactive/streaming-reveal.d.ts +8 -0
  243. package/dist/modes/interactive/streaming-reveal.d.ts.map +1 -1
  244. package/dist/modes/interactive/streaming-reveal.js +12 -0
  245. package/dist/modes/interactive/streaming-reveal.js.map +1 -1
  246. package/dist/modes/json-event.d.ts +16 -13
  247. package/dist/modes/json-event.d.ts.map +1 -1
  248. package/dist/modes/json-event.js +20 -6
  249. package/dist/modes/json-event.js.map +1 -1
  250. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  251. package/dist/modes/rpc/connection-handler.js +3 -0
  252. package/dist/modes/rpc/connection-handler.js.map +1 -1
  253. package/dist/modes/rpc/rpc-client.d.ts +7 -0
  254. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  255. package/dist/modes/rpc/rpc-client.js +7 -0
  256. package/dist/modes/rpc/rpc-client.js.map +1 -1
  257. package/dist/modes/rpc/rpc-types.d.ts +12 -0
  258. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  259. package/dist/modes/rpc/rpc-types.js.map +1 -1
  260. package/dist/package-manager-cli.d.ts +1 -0
  261. package/dist/package-manager-cli.d.ts.map +1 -1
  262. package/dist/package-manager-cli.js +186 -2
  263. package/dist/package-manager-cli.js.map +1 -1
  264. package/dist/utils/frontmatter.d.ts.map +1 -1
  265. package/dist/utils/frontmatter.js +2 -1
  266. package/dist/utils/frontmatter.js.map +1 -1
  267. package/dist/utils/shell.d.ts +3 -0
  268. package/dist/utils/shell.d.ts.map +1 -1
  269. package/dist/utils/shell.js +17 -5
  270. package/dist/utils/shell.js.map +1 -1
  271. package/dist/utils/syntax-highlight.d.ts +1 -0
  272. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  273. package/dist/utils/syntax-highlight.js +60 -1
  274. package/dist/utils/syntax-highlight.js.map +1 -1
  275. package/dist/utils/text.d.ts +8 -0
  276. package/dist/utils/text.d.ts.map +1 -0
  277. package/dist/utils/text.js +9 -0
  278. package/dist/utils/text.js.map +1 -0
  279. package/docs/AGENTS.md +3 -1
  280. package/docs/compaction.md +0 -2
  281. package/docs/custom-provider.md +6 -6
  282. package/docs/environment-variables.md +8 -8
  283. package/docs/extensions.md +6 -5
  284. package/docs/json.md +7 -2
  285. package/docs/keybindings.md +1 -1
  286. package/docs/packages.md +2 -2
  287. package/docs/rpc.md +32 -3
  288. package/docs/sdk.md +7 -2
  289. package/docs/settings.md +9 -1
  290. package/docs/terminal-setup.md +11 -9
  291. package/docs/usage.md +4 -1
  292. package/docs/windows.md +24 -2
  293. package/examples/AGENTS.md +21 -6
  294. package/examples/extensions/AGENTS.md +50 -0
  295. package/node_modules/@anthropic-ai/claude-agent-sdk/bridge.mjs +90 -88
  296. package/node_modules/@anthropic-ai/claude-agent-sdk/browser-sdk.js +40 -40
  297. package/node_modules/@anthropic-ai/claude-agent-sdk/manifest.json +20 -21
  298. package/node_modules/@anthropic-ai/claude-agent-sdk/manifest.zst.json +24 -25
  299. package/node_modules/@anthropic-ai/claude-agent-sdk/package.json +2 -2
  300. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk-tools.d.ts +102 -5
  301. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk.d.ts +31 -15
  302. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs +80 -78
  303. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-cjs/index.js +1 -1
  304. package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +13 -13
  305. package/node_modules/@aws-sdk/core/package.json +5 -5
  306. package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
  307. package/node_modules/@aws-sdk/credential-provider-http/package.json +7 -7
  308. package/node_modules/@aws-sdk/credential-provider-ini/package.json +12 -12
  309. package/node_modules/@aws-sdk/credential-provider-login/package.json +6 -6
  310. package/node_modules/@aws-sdk/credential-provider-node/package.json +10 -10
  311. package/node_modules/@aws-sdk/credential-provider-process/package.json +5 -5
  312. package/node_modules/@aws-sdk/credential-provider-sso/package.json +7 -7
  313. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +6 -6
  314. package/node_modules/@aws-sdk/eventstream-handler-node/package.json +4 -4
  315. package/node_modules/@aws-sdk/middleware-eventstream/package.json +4 -4
  316. package/node_modules/@aws-sdk/middleware-websocket/package.json +6 -6
  317. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  318. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  319. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  320. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  321. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  322. package/node_modules/@aws-sdk/nested-clients/package.json +8 -8
  323. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +3 -3
  324. package/node_modules/@aws-sdk/token-providers/package.json +6 -6
  325. package/node_modules/@aws-sdk/types/package.json +2 -2
  326. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  327. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +26 -0
  328. package/node_modules/@code-yeongyu/senpi-codemode/package.json +5 -5
  329. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager-proxy.ts +39 -5
  330. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/AGENTS.md +40 -0
  331. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/AGENTS.md +40 -0
  332. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +1 -1
  333. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +3 -8
  334. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-notification-queue.ts +2 -6
  335. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  336. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +7 -4
  337. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  338. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +2 -3
  339. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  340. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +7 -6
  341. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  342. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts +4 -0
  343. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  344. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +8 -0
  345. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
  346. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +1 -0
  347. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  348. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -0
  349. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  350. package/node_modules/@earendil-works/pi-agent-core/package.json +6 -6
  351. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +1 -5
  352. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  353. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +25 -13
  354. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  355. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.d.ts.map +1 -1
  356. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +2 -1
  357. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  358. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  359. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +91 -5
  360. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
  361. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.d.ts.map +1 -1
  362. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +4 -2
  363. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
  364. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.d.ts.map +1 -1
  365. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +4 -2
  366. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
  367. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
  368. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +2 -0
  369. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
  370. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  371. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +93 -54
  372. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  373. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +2 -5
  374. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  375. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +1 -1
  376. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  377. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.d.ts.map +1 -1
  378. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.js +97 -46
  379. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.js.map +1 -1
  380. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
  381. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js +1 -14
  382. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js.map +1 -1
  383. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts +50 -0
  384. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts.map +1 -0
  385. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js +129 -0
  386. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js.map +1 -0
  387. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
  388. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +3 -1
  389. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
  390. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +8 -1
  391. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  392. package/node_modules/@earendil-works/pi-ai/dist/models.js +16 -3
  393. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  394. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts +3 -1
  395. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  396. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js +10 -1
  397. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  398. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  399. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  400. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  401. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  402. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  403. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  404. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  405. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
  406. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  407. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  408. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  409. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  410. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts +1 -0
  411. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  412. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js +1 -0
  413. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  414. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.d.ts.map +1 -1
  415. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js +4 -0
  416. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js.map +1 -1
  417. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +8 -1
  418. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  419. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  420. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +16 -0
  421. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  422. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +17 -1
  423. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  424. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.d.ts +14 -0
  425. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.d.ts.map +1 -0
  426. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.js +24 -0
  427. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.js.map +1 -0
  428. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.d.ts +36 -0
  429. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.d.ts.map +1 -0
  430. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.js +109 -0
  431. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.js.map +1 -0
  432. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.d.ts +12 -0
  433. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.d.ts.map +1 -0
  434. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.js +109 -0
  435. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.js.map +1 -0
  436. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.d.ts +9 -0
  437. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.d.ts.map +1 -0
  438. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.js +6 -0
  439. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.js.map +1 -0
  440. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.d.ts +46 -0
  441. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.d.ts.map +1 -0
  442. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.js +41 -0
  443. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.js.map +1 -0
  444. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.d.ts +4 -0
  445. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.d.ts.map +1 -0
  446. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.js +93 -0
  447. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.js.map +1 -0
  448. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.d.ts +121 -0
  449. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.d.ts.map +1 -0
  450. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.js +11 -0
  451. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.js.map +1 -0
  452. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +12 -0
  453. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  454. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +25 -5
  455. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  456. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.d.ts +2 -0
  457. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.d.ts.map +1 -0
  458. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.js +15 -0
  459. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.js.map +1 -0
  460. package/node_modules/@earendil-works/pi-ai/package.json +22 -18
  461. package/node_modules/@earendil-works/pi-pty/dist/index.d.ts +1 -0
  462. package/node_modules/@earendil-works/pi-pty/dist/index.d.ts.map +1 -1
  463. package/node_modules/@earendil-works/pi-pty/dist/index.js +1 -0
  464. package/node_modules/@earendil-works/pi-pty/dist/index.js.map +1 -1
  465. package/node_modules/@earendil-works/pi-pty/dist/session-bun.d.ts +30 -0
  466. package/node_modules/@earendil-works/pi-pty/dist/session-bun.d.ts.map +1 -0
  467. package/node_modules/@earendil-works/pi-pty/dist/session-bun.js +76 -0
  468. package/node_modules/@earendil-works/pi-pty/dist/session-bun.js.map +1 -0
  469. package/node_modules/@earendil-works/pi-pty/dist/session-types.d.ts +3 -1
  470. package/node_modules/@earendil-works/pi-pty/dist/session-types.d.ts.map +1 -1
  471. package/node_modules/@earendil-works/pi-pty/dist/session-types.js.map +1 -1
  472. package/node_modules/@earendil-works/pi-pty/dist/session.d.ts +2 -0
  473. package/node_modules/@earendil-works/pi-pty/dist/session.d.ts.map +1 -1
  474. package/node_modules/@earendil-works/pi-pty/dist/session.js +19 -9
  475. package/node_modules/@earendil-works/pi-pty/dist/session.js.map +1 -1
  476. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  477. package/node_modules/@earendil-works/pi-telemetry/package.json +3 -3
  478. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  479. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +9 -4
  480. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  481. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts +8 -2
  482. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  483. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js +24 -4
  484. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  485. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts +2 -2
  486. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js +2 -2
  487. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  488. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -1
  489. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +2 -8
  490. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  491. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.d.ts +7 -0
  492. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.d.ts.map +1 -0
  493. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js +19 -0
  494. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js.map +1 -0
  495. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  496. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +11 -14
  497. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  498. package/node_modules/@earendil-works/pi-tui/package.json +5 -5
  499. package/node_modules/@smithy/signature-v4/dist-cjs/index.js +19 -7
  500. package/node_modules/@smithy/signature-v4/dist-es/HeaderFormatter.js +4 -1
  501. package/node_modules/@smithy/signature-v4/dist-es/getCanonicalQuery.js +4 -1
  502. package/node_modules/@smithy/signature-v4/dist-es/getPayloadHash.js +4 -1
  503. package/node_modules/@smithy/signature-v4/dist-es/headerUtil.js +10 -3
  504. package/node_modules/@smithy/signature-v4/dist-es/moveHeadersToQuery.js +4 -1
  505. package/node_modules/@smithy/signature-v4/dist-es/prepareRequest.js +4 -1
  506. package/node_modules/@smithy/signature-v4/package.json +2 -2
  507. package/node_modules/typebox/build/format/email.mjs +1 -1
  508. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +19 -1
  509. package/node_modules/typebox/build/format/json_pointer.d.mts +2 -2
  510. package/node_modules/typebox/build/format/json_pointer.mjs +2 -2
  511. package/node_modules/typebox/build/format/json_pointer_uri_fragment.d.mts +2 -2
  512. package/node_modules/typebox/build/format/json_pointer_uri_fragment.mjs +2 -2
  513. package/node_modules/typebox/build/format/relative_json_pointer.d.mts +2 -2
  514. package/node_modules/typebox/build/format/relative_json_pointer.mjs +2 -2
  515. package/node_modules/typebox/build/system/memory/assign.mjs +2 -1
  516. package/node_modules/typebox/build/system/memory/create.mjs +3 -4
  517. package/node_modules/typebox/build/system/memory/discard.mjs +2 -2
  518. package/node_modules/typebox/build/system/memory/freeze.d.mts +4 -0
  519. package/node_modules/typebox/build/system/memory/freeze.mjs +6 -0
  520. package/node_modules/typebox/build/system/memory/update.mjs +3 -2
  521. package/node_modules/typebox/package.json +1 -1
  522. package/package.json +110 -108
  523. package/dist/core/radius.d.ts +0 -2
  524. package/dist/core/radius.d.ts.map +0 -1
  525. package/dist/core/radius.js +0 -2
  526. package/dist/core/radius.js.map +0 -1
  527. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/LICENSE +0 -201
  528. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/README.md +0 -62
  529. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-cjs/index.js +0 -154
  530. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/constants.js +0 -2
  531. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromEnvSigningName.js +0 -16
  532. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromSso.js +0 -80
  533. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromStatic.js +0 -8
  534. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getNewSsoOidcToken.js +0 -11
  535. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getSsoOidcClient.js +0 -10
  536. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/index.js +0 -4
  537. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/nodeProvider.js +0 -5
  538. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenExpiry.js +0 -7
  539. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenKey.js +0 -7
  540. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/writeSSOTokenToFile.js +0 -8
  541. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/constants.d.ts +0 -8
  542. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/fromEnvSigningName.d.ts +0 -18
  543. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/fromSso.d.ts +0 -12
  544. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/fromStatic.d.ts +0 -9
  545. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/getNewSsoOidcToken.d.ts +0 -8
  546. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/getSsoOidcClient.d.ts +0 -7
  547. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/index.d.ts +0 -7
  548. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/nodeProvider.d.ts +0 -18
  549. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/constants.d.ts +0 -3
  550. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/fromEnvSigningName.d.ts +0 -8
  551. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/fromSso.d.ts +0 -10
  552. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/fromStatic.d.ts +0 -5
  553. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/getNewSsoOidcToken.d.ts +0 -9
  554. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/getSsoOidcClient.d.ts +0 -7
  555. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/index.d.ts +0 -7
  556. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/nodeProvider.d.ts +0 -3
  557. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/validateTokenExpiry.d.ts +0 -2
  558. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/validateTokenKey.d.ts +0 -1
  559. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/writeSSOTokenToFile.d.ts +0 -2
  560. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/validateTokenExpiry.d.ts +0 -5
  561. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/validateTokenKey.d.ts +0 -4
  562. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/writeSSOTokenToFile.d.ts +0 -5
  563. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +0 -69
@@ -1,5 +1,6 @@
1
1
  import { request } from "undici";
2
2
  import { InvalidWebfetchUrlError, WebfetchAbortError, WebfetchResponseTooLargeError, WebfetchTimeoutError, } from "./errors.js";
3
+ import { discardBody, toUint8Array } from "./response-body.js";
3
4
  export const MAX_RESPONSE_SIZE_BYTES = 5 * 1024 * 1024;
4
5
  export const DEFAULT_TIMEOUT_SECONDS = 30;
5
6
  export const MAX_TIMEOUT_SECONDS = 120;
@@ -110,13 +111,13 @@ async function requestUrl(options) {
110
111
  body: response.body,
111
112
  };
112
113
  }
113
- await discardBody(response.body);
114
+ await discardBody(response.body, MAX_RESPONSE_SIZE_BYTES, options.signal);
114
115
  currentUrl = new URL(location, currentUrl).toString();
115
116
  }
116
117
  throw new WebfetchAbortError("Redirect resolution aborted");
117
118
  }
118
119
  async function readHttpResponse(response, signal, onProgress) {
119
- await rejectOversizedContentLength(response);
120
+ await rejectOversizedContentLength(response, signal);
120
121
  const body = await readResponseBody(response, signal, onProgress);
121
122
  return {
122
123
  url: response.url,
@@ -128,10 +129,10 @@ async function readHttpResponse(response, signal, onProgress) {
128
129
  truncated: body.length === MAX_RESPONSE_SIZE_BYTES,
129
130
  };
130
131
  }
131
- async function rejectOversizedContentLength(response) {
132
+ async function rejectOversizedContentLength(response, signal) {
132
133
  const contentLength = getHeader(response.headers, "content-length");
133
134
  if (contentLength && Number.parseInt(contentLength, 10) > MAX_RESPONSE_SIZE_BYTES) {
134
- await discardBody(response.body);
135
+ await discardBody(response.body, MAX_RESPONSE_SIZE_BYTES, signal);
135
136
  throw new WebfetchResponseTooLargeError("Response too large (exceeds 5MB limit)");
136
137
  }
137
138
  }
@@ -141,18 +142,6 @@ function getHeader(headers, name) {
141
142
  return value.join(", ");
142
143
  return value ?? "";
143
144
  }
144
- async function discardBody(body) {
145
- try {
146
- await body.dump({ limit: 1024 });
147
- }
148
- catch (error) {
149
- if (error instanceof Error) {
150
- body.destroy(error);
151
- return;
152
- }
153
- throw error;
154
- }
155
- }
156
145
  async function readResponseBody(response, signal, onProgress) {
157
146
  const chunks = [];
158
147
  const totalBytes = parseContentLength(response);
@@ -194,13 +183,6 @@ function parseContentLength(response) {
194
183
  const parsed = Number.parseInt(contentLength, 10);
195
184
  return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;
196
185
  }
197
- function toUint8Array(chunk) {
198
- if (chunk instanceof Uint8Array)
199
- return chunk;
200
- if (typeof chunk === "string")
201
- return new TextEncoder().encode(chunk);
202
- throw new Error("Unexpected response body chunk");
203
- }
204
186
  function forwardAbort(signal, controller) {
205
187
  if (!signal)
206
188
  return () => { };
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/fetcher.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IncomingHttpHeaders } from \"node:http\";\nimport { request } from \"undici\";\n\nimport {\n\tInvalidWebfetchUrlError,\n\tWebfetchAbortError,\n\tWebfetchResponseTooLargeError,\n\tWebfetchTimeoutError,\n} from \"./errors.ts\";\n\nexport const MAX_RESPONSE_SIZE_BYTES = 5 * 1024 * 1024;\nexport const DEFAULT_TIMEOUT_SECONDS = 30;\nexport const MAX_TIMEOUT_SECONDS = 120;\nconst MAX_REDIRECTS = 20;\n\nconst BROWSER_USER_AGENT =\n\t\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36\";\nconst CHROME_MAJOR_VERSION = \"143\";\nconst REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\nexport type WebfetchFormat = \"markdown\" | \"text\" | \"html\";\n\nexport interface FetchOptions {\n\turl: string;\n\tformat: WebfetchFormat;\n\ttimeoutSeconds?: number;\n\tsignal?: AbortSignal;\n\tonProgress?: (bytesRead: number, totalBytes?: number) => void;\n}\n\nexport interface FetchResult {\n\turl: string;\n\tstatus: number;\n\tstatusText: string;\n\tcontentType: string;\n\tbytes: number;\n\tbody: Uint8Array;\n\ttruncated: boolean;\n}\n\ninterface HttpResponse {\n\treadonly url: string;\n\treadonly status: number;\n\treadonly statusText: string;\n\treadonly headers: IncomingHttpHeaders;\n\treadonly body: ResponseBodyStream;\n}\n\ninterface ResponseBodyStream extends AsyncIterable<unknown> {\n\tdestroy(error?: Error): void;\n\tdump(options?: { limit: number; signal?: AbortSignal }): Promise<void>;\n}\n\nexport async function fetchUrl(options: FetchOptions): Promise<FetchResult> {\n\tvalidateUrl(options.url);\n\n\tconst timeoutSeconds = clampTimeout(options.timeoutSeconds);\n\tconst timeoutMs = timeoutSeconds * 1000;\n\tconst controller = new AbortController();\n\tconst timeout = setTimeout(\n\t\t() => controller.abort(new WebfetchTimeoutError(`Request timed out after ${timeoutSeconds}s`)),\n\t\ttimeoutMs,\n\t);\n\tconst removeAbortForwarder = forwardAbort(options.signal, controller);\n\n\ttry {\n\t\tconst response = await requestUrl({\n\t\t\turl: options.url,\n\t\t\tformat: options.format,\n\t\t\tsignal: controller.signal,\n\t\t\ttimeoutMs,\n\t\t});\n\n\t\treturn await readHttpResponse(response, controller.signal, options.onProgress);\n\t} finally {\n\t\tclearTimeout(timeout);\n\t\tremoveAbortForwarder();\n\t}\n}\n\nexport function validateUrl(url: string): void {\n\tif (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n\t\tthrow new InvalidWebfetchUrlError(\"URL must start with http:// or https://\");\n\t}\n\n\ttry {\n\t\tnew URL(url);\n\t} catch {\n\t\tthrow new InvalidWebfetchUrlError(`Invalid URL: ${url}`);\n\t}\n}\n\nexport function clampTimeout(timeoutSeconds: number | undefined): number {\n\tif (timeoutSeconds === undefined) return DEFAULT_TIMEOUT_SECONDS;\n\tif (!Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0) return DEFAULT_TIMEOUT_SECONDS;\n\treturn Math.min(Math.ceil(timeoutSeconds), MAX_TIMEOUT_SECONDS);\n}\n\nexport function buildAcceptHeader(format: WebfetchFormat): string {\n\tswitch (format) {\n\t\tcase \"markdown\":\n\t\t\treturn \"text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1\";\n\t\tcase \"text\":\n\t\t\treturn \"text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1\";\n\t\tcase \"html\":\n\t\t\treturn \"text/html;q=1.0, application/xhtml+xml;q=0.9, text/plain;q=0.8, text/markdown;q=0.7, */*;q=0.1\";\n\t}\n}\n\nfunction buildHeaders(format: WebfetchFormat): Record<string, string> {\n\treturn {\n\t\tAccept: buildAcceptHeader(format),\n\t\t\"Accept-Language\": \"en-US,en;q=0.9\",\n\t\t\"Sec-CH-UA\": `\"Google Chrome\";v=\"${CHROME_MAJOR_VERSION}\", \"Chromium\";v=\"${CHROME_MAJOR_VERSION}\", \"Not A(Brand\";v=\"24\"`,\n\t\t\"Sec-CH-UA-Mobile\": \"?0\",\n\t\t\"Sec-CH-UA-Platform\": '\"Windows\"',\n\t\t\"Sec-Fetch-Dest\": \"document\",\n\t\t\"Sec-Fetch-Mode\": \"navigate\",\n\t\t\"Sec-Fetch-Site\": \"none\",\n\t\t\"Sec-Fetch-User\": \"?1\",\n\t\t\"Upgrade-Insecure-Requests\": \"1\",\n\t\t\"User-Agent\": BROWSER_USER_AGENT,\n\t};\n}\n\ninterface RequestUrlOptions {\n\treadonly url: string;\n\treadonly format: WebfetchFormat;\n\treadonly signal: AbortSignal;\n\treadonly timeoutMs: number;\n}\n\nasync function requestUrl(options: RequestUrlOptions): Promise<HttpResponse> {\n\tconst headers = buildHeaders(options.format);\n\tlet currentUrl = options.url;\n\n\tfor (let redirectCount = 0; redirectCount <= MAX_REDIRECTS; redirectCount += 1) {\n\t\tconst response = await request(currentUrl, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders,\n\t\t\tsignal: options.signal,\n\t\t\theadersTimeout: options.timeoutMs,\n\t\t\tbodyTimeout: options.timeoutMs,\n\t\t});\n\n\t\tif (!REDIRECT_STATUSES.has(response.statusCode)) {\n\t\t\treturn {\n\t\t\t\turl: currentUrl,\n\t\t\t\tstatus: response.statusCode,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t\tbody: response.body,\n\t\t\t};\n\t\t}\n\n\t\tconst location = getHeader(response.headers, \"location\");\n\t\tif (!location) {\n\t\t\treturn {\n\t\t\t\turl: currentUrl,\n\t\t\t\tstatus: response.statusCode,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t\tbody: response.body,\n\t\t\t};\n\t\t}\n\n\t\tif (redirectCount === MAX_REDIRECTS) {\n\t\t\treturn {\n\t\t\t\turl: currentUrl,\n\t\t\t\tstatus: response.statusCode,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t\tbody: response.body,\n\t\t\t};\n\t\t}\n\n\t\tawait discardBody(response.body);\n\t\tcurrentUrl = new URL(location, currentUrl).toString();\n\t}\n\n\tthrow new WebfetchAbortError(\"Redirect resolution aborted\");\n}\n\nasync function readHttpResponse(\n\tresponse: HttpResponse,\n\tsignal: AbortSignal,\n\tonProgress: FetchOptions[\"onProgress\"],\n): Promise<FetchResult> {\n\tawait rejectOversizedContentLength(response);\n\tconst body = await readResponseBody(response, signal, onProgress);\n\treturn {\n\t\turl: response.url,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\tcontentType: getHeader(response.headers, \"content-type\"),\n\t\tbytes: body.length,\n\t\tbody,\n\t\ttruncated: body.length === MAX_RESPONSE_SIZE_BYTES,\n\t};\n}\n\nasync function rejectOversizedContentLength(response: HttpResponse): Promise<void> {\n\tconst contentLength = getHeader(response.headers, \"content-length\");\n\tif (contentLength && Number.parseInt(contentLength, 10) > MAX_RESPONSE_SIZE_BYTES) {\n\t\tawait discardBody(response.body);\n\t\tthrow new WebfetchResponseTooLargeError(\"Response too large (exceeds 5MB limit)\");\n\t}\n}\n\nfunction getHeader(headers: IncomingHttpHeaders, name: string): string {\n\tconst value = headers[name.toLowerCase()];\n\tif (Array.isArray(value)) return value.join(\", \");\n\treturn value ?? \"\";\n}\n\nasync function discardBody(body: ResponseBodyStream): Promise<void> {\n\ttry {\n\t\tawait body.dump({ limit: 1024 });\n\t} catch (error) {\n\t\tif (error instanceof Error) {\n\t\t\tbody.destroy(error);\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nasync function readResponseBody(\n\tresponse: HttpResponse,\n\tsignal: AbortSignal,\n\tonProgress: FetchOptions[\"onProgress\"],\n): Promise<Uint8Array> {\n\tconst chunks: Uint8Array[] = [];\n\tconst totalBytes = parseContentLength(response);\n\tlet total = 0;\n\n\ttry {\n\t\tfor await (const chunk of response.body) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tresponse.body.destroy();\n\t\t\t\tthrow new WebfetchAbortError(\"Request aborted\");\n\t\t\t}\n\t\t\tconst bytes = toUint8Array(chunk);\n\t\t\tchunks.push(bytes);\n\t\t\ttotal += bytes.length;\n\t\t\tif (total > MAX_RESPONSE_SIZE_BYTES) {\n\t\t\t\tresponse.body.destroy();\n\t\t\t\tthrow new WebfetchResponseTooLargeError(\"Response too large (exceeds 5MB limit)\");\n\t\t\t}\n\t\t\tonProgress?.(total, totalBytes);\n\t\t}\n\t} catch (error) {\n\t\tif (signal.aborted) {\n\t\t\tthrow new WebfetchAbortError(\"Request aborted\");\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst body = new Uint8Array(total);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tbody.set(chunk, offset);\n\t\toffset += chunk.length;\n\t}\n\treturn body;\n}\n\nfunction parseContentLength(response: HttpResponse): number | undefined {\n\tconst contentLength = getHeader(response.headers, \"content-length\");\n\tif (contentLength === \"\") return undefined;\n\tconst parsed = Number.parseInt(contentLength, 10);\n\treturn Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n\nfunction toUint8Array(chunk: unknown): Uint8Array {\n\tif (chunk instanceof Uint8Array) return chunk;\n\tif (typeof chunk === \"string\") return new TextEncoder().encode(chunk);\n\tthrow new Error(\"Unexpected response body chunk\");\n}\n\nfunction forwardAbort(signal: AbortSignal | undefined, controller: AbortController): () => void {\n\tif (!signal) return () => {};\n\tif (signal.aborted) {\n\t\tcontroller.abort(signal.reason);\n\t\treturn () => {};\n\t}\n\n\tconst listener = (): void => controller.abort(signal.reason);\n\tsignal.addEventListener(\"abort\", listener, { once: true });\n\treturn () => signal.removeEventListener(\"abort\", listener);\n}\n"]}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,OAAO,EACN,uBAAuB,EACvB,kBAAkB,EAClB,6BAA6B,EAC7B,oBAAoB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAA2B,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAExF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,kBAAkB,GACvB,iHAAiH,CAAC;AACnH,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AA8B7D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IACnD,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzB,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CACzB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,2BAA2B,cAAc,GAAG,CAAC,CAAC,EAC9F,SAAS,CACT,CAAC;IACF,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEtE,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC;YACjC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,SAAS;SACT,CAAC,CAAC;QAEH,OAAO,MAAM,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChF,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,oBAAoB,EAAE,CAAC;IACxB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACtC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,uBAAuB,CAAC,yCAAyC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC;QACJ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,cAAkC;IAC9D,IAAI,cAAc,KAAK,SAAS;QAAE,OAAO,uBAAuB,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,IAAI,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAC5F,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACvD,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,UAAU;YACd,OAAO,0FAA0F,CAAC;QACnG,KAAK,MAAM;YACV,OAAO,mEAAmE,CAAC;QAC5E,KAAK,MAAM;YACV,OAAO,gGAAgG,CAAC;IAC1G,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,MAAsB;IAC3C,OAAO;QACN,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC;QACjC,iBAAiB,EAAE,gBAAgB;QACnC,WAAW,EAAE,sBAAsB,oBAAoB,oBAAoB,oBAAoB,yBAAyB;QACxH,kBAAkB,EAAE,IAAI;QACxB,oBAAoB,EAAE,WAAW;QACjC,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,MAAM;QACxB,gBAAgB,EAAE,IAAI;QACtB,2BAA2B,EAAE,GAAG;QAChC,YAAY,EAAE,kBAAkB;KAChC,CAAC;AACH,CAAC;AASD,KAAK,UAAU,UAAU,CAAC,OAA0B;IACnD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAE7B,KAAK,IAAI,aAAa,GAAG,CAAC,EAAE,aAAa,IAAI,aAAa,EAAE,aAAa,IAAI,CAAC,EAAE,CAAC;QAChF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE;YAC1C,MAAM,EAAE,KAAK;YACb,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,OAAO,CAAC,SAAS;YACjC,WAAW,EAAE,OAAO,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,OAAO;gBACN,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,QAAQ,CAAC,UAAU;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACnB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO;gBACN,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,QAAQ,CAAC,UAAU;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACnB,CAAC;QACH,CAAC;QAED,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YACrC,OAAO;gBACN,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,QAAQ,CAAC,UAAU;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACnB,CAAC;QACH,CAAC;QAED,MAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1E,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,IAAI,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,QAAsB,EACtB,MAAmB,EACnB,UAAsC;IAEtC,MAAM,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAClE,OAAO;QACN,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;QACxD,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,MAAM,KAAK,uBAAuB;KAClD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,QAAsB,EAAE,MAAmB;IACtF,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACpE,IAAI,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACnF,MAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,IAAI,6BAA6B,CAAC,wCAAwC,CAAC,CAAC;IACnF,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,OAA4B,EAAE,IAAY;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,KAAK,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,QAAsB,EACtB,MAAmB,EACnB,UAAsC;IAEtC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,CAAC;QACJ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,KAAK,GAAG,uBAAuB,EAAE,CAAC;gBACrC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,IAAI,6BAA6B,CAAC,wCAAwC,CAAC,CAAC;YACnF,CAAC;YACD,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAsB;IACjD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACpE,IAAI,aAAa,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B,EAAE,UAA2B;IACjF,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["import type { IncomingHttpHeaders } from \"node:http\";\nimport { request } from \"undici\";\n\nimport {\n\tInvalidWebfetchUrlError,\n\tWebfetchAbortError,\n\tWebfetchResponseTooLargeError,\n\tWebfetchTimeoutError,\n} from \"./errors.ts\";\nimport { discardBody, type ResponseBodyStream, toUint8Array } from \"./response-body.ts\";\n\nexport const MAX_RESPONSE_SIZE_BYTES = 5 * 1024 * 1024;\nexport const DEFAULT_TIMEOUT_SECONDS = 30;\nexport const MAX_TIMEOUT_SECONDS = 120;\nconst MAX_REDIRECTS = 20;\n\nconst BROWSER_USER_AGENT =\n\t\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36\";\nconst CHROME_MAJOR_VERSION = \"143\";\nconst REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\nexport type WebfetchFormat = \"markdown\" | \"text\" | \"html\";\n\nexport interface FetchOptions {\n\turl: string;\n\tformat: WebfetchFormat;\n\ttimeoutSeconds?: number;\n\tsignal?: AbortSignal;\n\tonProgress?: (bytesRead: number, totalBytes?: number) => void;\n}\n\nexport interface FetchResult {\n\turl: string;\n\tstatus: number;\n\tstatusText: string;\n\tcontentType: string;\n\tbytes: number;\n\tbody: Uint8Array;\n\ttruncated: boolean;\n}\n\ninterface HttpResponse {\n\treadonly url: string;\n\treadonly status: number;\n\treadonly statusText: string;\n\treadonly headers: IncomingHttpHeaders;\n\treadonly body: ResponseBodyStream;\n}\n\nexport async function fetchUrl(options: FetchOptions): Promise<FetchResult> {\n\tvalidateUrl(options.url);\n\n\tconst timeoutSeconds = clampTimeout(options.timeoutSeconds);\n\tconst timeoutMs = timeoutSeconds * 1000;\n\tconst controller = new AbortController();\n\tconst timeout = setTimeout(\n\t\t() => controller.abort(new WebfetchTimeoutError(`Request timed out after ${timeoutSeconds}s`)),\n\t\ttimeoutMs,\n\t);\n\tconst removeAbortForwarder = forwardAbort(options.signal, controller);\n\n\ttry {\n\t\tconst response = await requestUrl({\n\t\t\turl: options.url,\n\t\t\tformat: options.format,\n\t\t\tsignal: controller.signal,\n\t\t\ttimeoutMs,\n\t\t});\n\n\t\treturn await readHttpResponse(response, controller.signal, options.onProgress);\n\t} finally {\n\t\tclearTimeout(timeout);\n\t\tremoveAbortForwarder();\n\t}\n}\n\nexport function validateUrl(url: string): void {\n\tif (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n\t\tthrow new InvalidWebfetchUrlError(\"URL must start with http:// or https://\");\n\t}\n\n\ttry {\n\t\tnew URL(url);\n\t} catch {\n\t\tthrow new InvalidWebfetchUrlError(`Invalid URL: ${url}`);\n\t}\n}\n\nexport function clampTimeout(timeoutSeconds: number | undefined): number {\n\tif (timeoutSeconds === undefined) return DEFAULT_TIMEOUT_SECONDS;\n\tif (!Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0) return DEFAULT_TIMEOUT_SECONDS;\n\treturn Math.min(Math.ceil(timeoutSeconds), MAX_TIMEOUT_SECONDS);\n}\n\nexport function buildAcceptHeader(format: WebfetchFormat): string {\n\tswitch (format) {\n\t\tcase \"markdown\":\n\t\t\treturn \"text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1\";\n\t\tcase \"text\":\n\t\t\treturn \"text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1\";\n\t\tcase \"html\":\n\t\t\treturn \"text/html;q=1.0, application/xhtml+xml;q=0.9, text/plain;q=0.8, text/markdown;q=0.7, */*;q=0.1\";\n\t}\n}\n\nfunction buildHeaders(format: WebfetchFormat): Record<string, string> {\n\treturn {\n\t\tAccept: buildAcceptHeader(format),\n\t\t\"Accept-Language\": \"en-US,en;q=0.9\",\n\t\t\"Sec-CH-UA\": `\"Google Chrome\";v=\"${CHROME_MAJOR_VERSION}\", \"Chromium\";v=\"${CHROME_MAJOR_VERSION}\", \"Not A(Brand\";v=\"24\"`,\n\t\t\"Sec-CH-UA-Mobile\": \"?0\",\n\t\t\"Sec-CH-UA-Platform\": '\"Windows\"',\n\t\t\"Sec-Fetch-Dest\": \"document\",\n\t\t\"Sec-Fetch-Mode\": \"navigate\",\n\t\t\"Sec-Fetch-Site\": \"none\",\n\t\t\"Sec-Fetch-User\": \"?1\",\n\t\t\"Upgrade-Insecure-Requests\": \"1\",\n\t\t\"User-Agent\": BROWSER_USER_AGENT,\n\t};\n}\n\ninterface RequestUrlOptions {\n\treadonly url: string;\n\treadonly format: WebfetchFormat;\n\treadonly signal: AbortSignal;\n\treadonly timeoutMs: number;\n}\n\nasync function requestUrl(options: RequestUrlOptions): Promise<HttpResponse> {\n\tconst headers = buildHeaders(options.format);\n\tlet currentUrl = options.url;\n\n\tfor (let redirectCount = 0; redirectCount <= MAX_REDIRECTS; redirectCount += 1) {\n\t\tconst response = await request(currentUrl, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders,\n\t\t\tsignal: options.signal,\n\t\t\theadersTimeout: options.timeoutMs,\n\t\t\tbodyTimeout: options.timeoutMs,\n\t\t});\n\n\t\tif (!REDIRECT_STATUSES.has(response.statusCode)) {\n\t\t\treturn {\n\t\t\t\turl: currentUrl,\n\t\t\t\tstatus: response.statusCode,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t\tbody: response.body,\n\t\t\t};\n\t\t}\n\n\t\tconst location = getHeader(response.headers, \"location\");\n\t\tif (!location) {\n\t\t\treturn {\n\t\t\t\turl: currentUrl,\n\t\t\t\tstatus: response.statusCode,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t\tbody: response.body,\n\t\t\t};\n\t\t}\n\n\t\tif (redirectCount === MAX_REDIRECTS) {\n\t\t\treturn {\n\t\t\t\turl: currentUrl,\n\t\t\t\tstatus: response.statusCode,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t\tbody: response.body,\n\t\t\t};\n\t\t}\n\n\t\tawait discardBody(response.body, MAX_RESPONSE_SIZE_BYTES, options.signal);\n\t\tcurrentUrl = new URL(location, currentUrl).toString();\n\t}\n\n\tthrow new WebfetchAbortError(\"Redirect resolution aborted\");\n}\n\nasync function readHttpResponse(\n\tresponse: HttpResponse,\n\tsignal: AbortSignal,\n\tonProgress: FetchOptions[\"onProgress\"],\n): Promise<FetchResult> {\n\tawait rejectOversizedContentLength(response, signal);\n\tconst body = await readResponseBody(response, signal, onProgress);\n\treturn {\n\t\turl: response.url,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\tcontentType: getHeader(response.headers, \"content-type\"),\n\t\tbytes: body.length,\n\t\tbody,\n\t\ttruncated: body.length === MAX_RESPONSE_SIZE_BYTES,\n\t};\n}\n\nasync function rejectOversizedContentLength(response: HttpResponse, signal: AbortSignal): Promise<void> {\n\tconst contentLength = getHeader(response.headers, \"content-length\");\n\tif (contentLength && Number.parseInt(contentLength, 10) > MAX_RESPONSE_SIZE_BYTES) {\n\t\tawait discardBody(response.body, MAX_RESPONSE_SIZE_BYTES, signal);\n\t\tthrow new WebfetchResponseTooLargeError(\"Response too large (exceeds 5MB limit)\");\n\t}\n}\n\nfunction getHeader(headers: IncomingHttpHeaders, name: string): string {\n\tconst value = headers[name.toLowerCase()];\n\tif (Array.isArray(value)) return value.join(\", \");\n\treturn value ?? \"\";\n}\n\nasync function readResponseBody(\n\tresponse: HttpResponse,\n\tsignal: AbortSignal,\n\tonProgress: FetchOptions[\"onProgress\"],\n): Promise<Uint8Array> {\n\tconst chunks: Uint8Array[] = [];\n\tconst totalBytes = parseContentLength(response);\n\tlet total = 0;\n\n\ttry {\n\t\tfor await (const chunk of response.body) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tresponse.body.destroy();\n\t\t\t\tthrow new WebfetchAbortError(\"Request aborted\");\n\t\t\t}\n\t\t\tconst bytes = toUint8Array(chunk);\n\t\t\tchunks.push(bytes);\n\t\t\ttotal += bytes.length;\n\t\t\tif (total > MAX_RESPONSE_SIZE_BYTES) {\n\t\t\t\tresponse.body.destroy();\n\t\t\t\tthrow new WebfetchResponseTooLargeError(\"Response too large (exceeds 5MB limit)\");\n\t\t\t}\n\t\t\tonProgress?.(total, totalBytes);\n\t\t}\n\t} catch (error) {\n\t\tif (signal.aborted) {\n\t\t\tthrow new WebfetchAbortError(\"Request aborted\");\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst body = new Uint8Array(total);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tbody.set(chunk, offset);\n\t\toffset += chunk.length;\n\t}\n\treturn body;\n}\n\nfunction parseContentLength(response: HttpResponse): number | undefined {\n\tconst contentLength = getHeader(response.headers, \"content-length\");\n\tif (contentLength === \"\") return undefined;\n\tconst parsed = Number.parseInt(contentLength, 10);\n\treturn Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n\nfunction forwardAbort(signal: AbortSignal | undefined, controller: AbortController): () => void {\n\tif (!signal) return () => {};\n\tif (signal.aborted) {\n\t\tcontroller.abort(signal.reason);\n\t\treturn () => {};\n\t}\n\n\tconst listener = (): void => controller.abort(signal.reason);\n\tsignal.addEventListener(\"abort\", listener, { once: true });\n\treturn () => signal.removeEventListener(\"abort\", listener);\n}\n"]}
@@ -0,0 +1,11 @@
1
+ export interface ResponseBodyStream extends AsyncIterable<unknown> {
2
+ on?(event: "error", listener: (error: Error) => void): unknown;
3
+ destroy(error?: Error): void;
4
+ dump?(options?: {
5
+ limit: number;
6
+ signal?: AbortSignal;
7
+ }): Promise<void>;
8
+ }
9
+ export declare function discardBody(body: ResponseBodyStream, maxBytes: number, signal?: AbortSignal): Promise<void>;
10
+ export declare function toUint8Array(chunk: unknown): Uint8Array;
11
+ //# sourceMappingURL=response-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-body.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/response-body.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAmB,SAAQ,aAAa,CAAC,OAAO,CAAC;IACjE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAajH;AAiCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAIvD"}
@@ -0,0 +1,54 @@
1
+ export async function discardBody(body, maxBytes, signal) {
2
+ body.on?.("error", () => { });
3
+ try {
4
+ if (typeof body.dump === "function") {
5
+ await body.dump(signal ? { limit: 1024, signal } : { limit: 1024 });
6
+ return;
7
+ }
8
+ await drainBody(body, maxBytes, signal);
9
+ }
10
+ catch {
11
+ // no-excuse-ok: catch - discard failures are not actionable for the caller.
12
+ }
13
+ finally {
14
+ body.destroy();
15
+ }
16
+ }
17
+ async function drainBody(body, maxBytes, signal) {
18
+ let drained = 0;
19
+ const iterator = body[Symbol.asyncIterator]();
20
+ while (true) {
21
+ const result = await nextChunk(iterator, signal);
22
+ if (!result || result.done)
23
+ return;
24
+ drained += toUint8Array(result.value).length;
25
+ if (drained > maxBytes)
26
+ return;
27
+ }
28
+ }
29
+ async function nextChunk(iterator, signal) {
30
+ if (!signal)
31
+ return iterator.next();
32
+ if (signal.aborted)
33
+ return undefined;
34
+ let resolveAbort = () => { };
35
+ const aborted = new Promise((resolve) => {
36
+ resolveAbort = () => resolve(undefined);
37
+ });
38
+ const onAbort = () => resolveAbort();
39
+ signal.addEventListener("abort", onAbort, { once: true });
40
+ try {
41
+ return await Promise.race([iterator.next(), aborted]);
42
+ }
43
+ finally {
44
+ signal.removeEventListener("abort", onAbort);
45
+ }
46
+ }
47
+ export function toUint8Array(chunk) {
48
+ if (chunk instanceof Uint8Array)
49
+ return chunk;
50
+ if (typeof chunk === "string")
51
+ return new TextEncoder().encode(chunk);
52
+ throw new Error("Unexpected response body chunk");
53
+ }
54
+ //# sourceMappingURL=response-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-body.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/response-body.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAwB,EAAE,QAAgB,EAAE,MAAoB;IACjG,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC;QACJ,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,OAAO;QACR,CAAC;QACD,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACR,4EAA4E;IAC7E,CAAC;YAAS,CAAC;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;AACF,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAwB,EAAE,QAAgB,EAAE,MAAoB;IACxF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAC9C,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI;YAAE,OAAO;QACnC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC7C,IAAI,OAAO,GAAG,QAAQ;YAAE,OAAO;IAChC,CAAC;AACF,CAAC;AAED,KAAK,UAAU,SAAS,CACvB,QAAgC,EAChC,MAAoB;IAEpB,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAErC,IAAI,YAAY,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE;QAClD,YAAY,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,YAAY,EAAE,CAAC;IAC3C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC;QACJ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACV,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACnD,CAAC","sourcesContent":["export interface ResponseBodyStream extends AsyncIterable<unknown> {\n\ton?(event: \"error\", listener: (error: Error) => void): unknown;\n\tdestroy(error?: Error): void;\n\tdump?(options?: { limit: number; signal?: AbortSignal }): Promise<void>;\n}\n\nexport async function discardBody(body: ResponseBodyStream, maxBytes: number, signal?: AbortSignal): Promise<void> {\n\tbody.on?.(\"error\", () => {});\n\ttry {\n\t\tif (typeof body.dump === \"function\") {\n\t\t\tawait body.dump(signal ? { limit: 1024, signal } : { limit: 1024 });\n\t\t\treturn;\n\t\t}\n\t\tawait drainBody(body, maxBytes, signal);\n\t} catch {\n\t\t// no-excuse-ok: catch - discard failures are not actionable for the caller.\n\t} finally {\n\t\tbody.destroy();\n\t}\n}\n\nasync function drainBody(body: ResponseBodyStream, maxBytes: number, signal?: AbortSignal): Promise<void> {\n\tlet drained = 0;\n\tconst iterator = body[Symbol.asyncIterator]();\n\twhile (true) {\n\t\tconst result = await nextChunk(iterator, signal);\n\t\tif (!result || result.done) return;\n\t\tdrained += toUint8Array(result.value).length;\n\t\tif (drained > maxBytes) return;\n\t}\n}\n\nasync function nextChunk(\n\titerator: AsyncIterator<unknown>,\n\tsignal?: AbortSignal,\n): Promise<IteratorResult<unknown> | undefined> {\n\tif (!signal) return iterator.next();\n\tif (signal.aborted) return undefined;\n\n\tlet resolveAbort: () => void = () => {};\n\tconst aborted = new Promise<undefined>((resolve) => {\n\t\tresolveAbort = () => resolve(undefined);\n\t});\n\tconst onAbort = (): void => resolveAbort();\n\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\ttry {\n\t\treturn await Promise.race([iterator.next(), aborted]);\n\t} finally {\n\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nexport function toUint8Array(chunk: unknown): Uint8Array {\n\tif (chunk instanceof Uint8Array) return chunk;\n\tif (typeof chunk === \"string\") return new TextEncoder().encode(chunk);\n\tthrow new Error(\"Unexpected response body chunk\");\n}\n"]}
@@ -7,7 +7,7 @@ export type { McpServerDeclaration } from "./builtin/mcp/config-schema.ts";
7
7
  export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.ts";
8
8
  export type { ExtensionErrorListener, ExtensionToolHookLifecycleEvent, ExtensionToolHookLifecycleObserver, ExtensionToolHookLifecycleStatus, ExtensionToolHookName, ForkHandler, NavigateTreeHandler, NewSessionHandler, ShutdownHandler, SwitchSessionHandler, } from "./runner.ts";
9
9
  export { ExtensionRunner } from "./runner.ts";
10
- export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactOptions, ContextEvent, ContextEventResult, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, ExecuteToolErrorCode, ExecuteToolHandler, ExecuteToolOptions, ExecuteToolResult, ExecuteToolUpdateCallback, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRpcRequestHandler, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FilesystemOperation, FilesystemPolicy, FilesystemPolicyChecker, FilesystemPolicyDecision, FilesystemPolicyRequest, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputDispositionEvent, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectEventResult, ModelSelectSource, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, SystemPromptChangeEvent, TerminalInputHandler, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
11
- export { defineTool, ExecuteToolError, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, RUNTIME_EXTENSION_PATH, } from "./types.ts";
10
+ export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactOptions, ContextEvent, ContextEventResult, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, ExecuteToolErrorCode, ExecuteToolHandler, ExecuteToolOptions, ExecuteToolResult, ExecuteToolUpdateCallback, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRpcRequestHandler, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FilesystemOperation, FilesystemPolicy, FilesystemPolicyChecker, FilesystemPolicyDecision, FilesystemPolicyRequest, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputDispositionEvent, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectEventResult, ModelSelectSource, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, SystemPromptChangeEvent, TerminalInputHandler, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
11
+ export { defineTool, ExecuteToolError, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isPowerShellToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, RUNTIME_EXTENSION_PATH, } from "./types.ts";
12
12
  export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.ts";
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,6 @@
4
4
  export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.js";
5
5
  export { ExtensionRunner } from "./runner.js";
6
6
  // Type guards
7
- export { defineTool, ExecuteToolError, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, RUNTIME_EXTENSION_PATH, } from "./types.js";
7
+ export { defineTool, ExecuteToolError, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isPowerShellToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, RUNTIME_EXTENSION_PATH, } from "./types.js";
8
8
  export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.js";
9
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwK9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport type { McpServerDeclaration } from \"./builtin/mcp/config-schema.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tExtensionToolHookLifecycleEvent,\n\tExtensionToolHookLifecycleObserver,\n\tExtensionToolHookLifecycleStatus,\n\tExtensionToolHookName,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\t// Context\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExecuteToolErrorCode,\n\tExecuteToolHandler,\n\tExecuteToolOptions,\n\tExecuteToolResult,\n\tExecuteToolUpdateCallback,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\tExtensionRpcRequestHandler,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFilesystemOperation,\n\tFilesystemPolicy,\n\tFilesystemPolicyChecker,\n\tFilesystemPolicyDecision,\n\tFilesystemPolicyRequest,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputDispositionEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectEventResult,\n\tModelSelectSource,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tSystemPromptChangeEvent,\n\tTerminalInputHandler,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tExecuteToolError,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\tRUNTIME_EXTENSION_PATH,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA0K9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport type { McpServerDeclaration } from \"./builtin/mcp/config-schema.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tExtensionToolHookLifecycleEvent,\n\tExtensionToolHookLifecycleObserver,\n\tExtensionToolHookLifecycleStatus,\n\tExtensionToolHookName,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\t// Context\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExecuteToolErrorCode,\n\tExecuteToolHandler,\n\tExecuteToolOptions,\n\tExecuteToolResult,\n\tExecuteToolUpdateCallback,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\tExtensionRpcRequestHandler,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFilesystemOperation,\n\tFilesystemPolicy,\n\tFilesystemPolicyChecker,\n\tFilesystemPolicyDecision,\n\tFilesystemPolicyRequest,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputDispositionEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectEventResult,\n\tModelSelectSource,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tSystemPromptChangeEvent,\n\tTerminalInputHandler,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tExecuteToolError,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\tRUNTIME_EXTENSION_PATH,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AACA;;;GAGG;AAyBH,OAAO,EAAkB,KAAK,QAAQ,EAAuD,MAAM,iBAAiB,CAAC;AAOrH,OAAO,KAAK,EAEX,SAAS,EAET,gBAAgB,EAChB,gBAAgB,EAGhB,oBAAoB,EAGpB,2BAA2B,EAK3B,MAAM,YAAY,CAAC;AAiJpB,MAAM,MAAM,wBAAwB,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;AAiBrH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAyBD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAsFzD;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,gBAAgB,GAAG,2BAA2B,EAAE,CAS1G;AA8XD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAOpB;AAsDD,wBAAsB,cAAc,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,wBAAwB,CAAA;CAAE,GACtD,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA2FD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AACA;;;GAGG;AAyBH,OAAO,EAAkB,KAAK,QAAQ,EAAuD,MAAM,iBAAiB,CAAC;AAOrH,OAAO,KAAK,EAEX,SAAS,EAET,gBAAgB,EAChB,gBAAgB,EAGhB,oBAAoB,EAGpB,2BAA2B,EAK3B,MAAM,YAAY,CAAC;AAmJpB,MAAM,MAAM,wBAAwB,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;AAiBrH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAyBD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAsFzD;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,gBAAgB,GAAG,2BAA2B,EAAE,CAS1G;AA4bD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAGpB;AAsDD,wBAAsB,cAAc,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,wBAAwB,CAAA;CAAE,GACtD,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA2FD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
@@ -60,6 +60,7 @@ const VIRTUAL_MODULES = {
60
60
  const require = createRequire(import.meta.url);
61
61
  const isNodeSeaBinary = ("sea" in process.features && process.features.sea === true) ||
62
62
  process.getBuiltinModule("node:sea")?.isSea() === true;
63
+ const isBundledNode = typeof PI_BUNDLED_NODE !== "undefined" && PI_BUNDLED_NODE;
63
64
  const isTypeScriptSourceRuntime = !isBunBinary && path.extname(fileURLToPath(import.meta.url)) === ".ts";
64
65
  /**
65
66
  * Get aliases for jiti (used in built Node.js mode).
@@ -267,11 +268,32 @@ export function drainPendingProviderRegistrations(runtime) {
267
268
  * Action methods delegate to the shared runtime.
268
269
  */
269
270
  function createExtensionAPI(extension, runtime, cwd, eventBus) {
271
+ const pendingFlagValues = new Map();
272
+ const pendingRuntimeChanges = [];
273
+ const loadingUnsubscribers = [];
274
+ let state = "loading";
275
+ const assertActive = () => {
276
+ if (state === "failed") {
277
+ throw new Error(`Extension "${extension.path}" failed to load and its API is no longer active.`);
278
+ }
279
+ runtime.assertActive();
280
+ };
281
+ const applyRuntimeChange = (change) => {
282
+ if (state === "loading")
283
+ pendingRuntimeChanges.push(change);
284
+ else
285
+ change();
286
+ };
287
+ const clearPending = () => {
288
+ pendingFlagValues.clear();
289
+ pendingRuntimeChanges.length = 0;
290
+ loadingUnsubscribers.length = 0;
291
+ };
270
292
  const api = {
271
293
  cwd,
272
294
  // Registration methods - write to extension
273
295
  on(event, handler) {
274
- runtime.assertActive();
296
+ assertActive();
275
297
  const list = extension.handlers.get(event) ?? [];
276
298
  list.push(handler);
277
299
  extension.handlers.set(event, list);
@@ -311,7 +333,7 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
311
333
  extension.filesystemPolicies = policies;
312
334
  },
313
335
  registerCommand(name, options) {
314
- runtime.assertActive();
336
+ assertActive();
315
337
  extension.commands.set(name, {
316
338
  name,
317
339
  sourceInfo: extension.sourceInfo,
@@ -319,29 +341,35 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
319
341
  });
320
342
  },
321
343
  registerShortcut(shortcut, options) {
322
- runtime.assertActive();
344
+ assertActive();
323
345
  extension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });
324
346
  },
325
347
  registerFlag(name, options) {
326
- runtime.assertActive();
348
+ assertActive();
327
349
  if (options.default !== undefined && typeof options.default !== options.type) {
328
350
  throw new Error(`Invalid default for flag "${name}": expected ${options.type}, got ${typeof options.default}`);
329
351
  }
330
352
  extension.flags.set(name, { name, extensionPath: extension.path, ...options });
331
353
  if (options.default !== undefined && !runtime.flagValues.has(name)) {
332
- runtime.flagValues.set(name, options.default);
354
+ if (state === "loading") {
355
+ if (!pendingFlagValues.has(name))
356
+ pendingFlagValues.set(name, options.default);
357
+ }
358
+ else {
359
+ runtime.flagValues.set(name, options.default);
360
+ }
333
361
  }
334
362
  },
335
363
  registerMessageRenderer(customType, renderer) {
336
- runtime.assertActive();
364
+ assertActive();
337
365
  extension.messageRenderers.set(customType, renderer);
338
366
  },
339
367
  registerMarkdownTransformer(transformer) {
340
- runtime.assertActive();
368
+ assertActive();
341
369
  extension.markdownTransformer = transformer;
342
370
  },
343
371
  registerEntryRenderer(customType, renderer) {
344
- runtime.assertActive();
372
+ assertActive();
345
373
  extension.entryRenderers ??= new Map();
346
374
  extension.entryRenderers.set(customType, renderer);
347
375
  },
@@ -360,38 +388,38 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
360
388
  },
361
389
  // Flag access - checks extension registered it, reads from runtime
362
390
  getFlag(name) {
363
- runtime.assertActive();
391
+ assertActive();
364
392
  if (!extension.flags.has(name))
365
393
  return undefined;
366
- return runtime.flagValues.get(name);
394
+ return runtime.flagValues.has(name) ? runtime.flagValues.get(name) : pendingFlagValues.get(name);
367
395
  },
368
396
  // Action methods - delegate to shared runtime
369
397
  sendMessage(message, options) {
370
- runtime.assertActive();
398
+ assertActive();
371
399
  runtime.sendMessage(message, options);
372
400
  },
373
401
  sendUserMessage(content, options) {
374
- runtime.assertActive();
402
+ assertActive();
375
403
  runtime.sendUserMessage(content, options);
376
404
  },
377
405
  appendEntry(customType, data) {
378
- runtime.assertActive();
406
+ assertActive();
379
407
  runtime.appendEntry(customType, data);
380
408
  },
381
409
  setSessionName(name) {
382
- runtime.assertActive();
410
+ assertActive();
383
411
  runtime.setSessionName(name);
384
412
  },
385
413
  getSessionName() {
386
- runtime.assertActive();
414
+ assertActive();
387
415
  return runtime.getSessionName();
388
416
  },
389
417
  setLabel(entryId, label) {
390
- runtime.assertActive();
418
+ assertActive();
391
419
  runtime.setLabel(entryId, label);
392
420
  },
393
421
  exec(command, args, options) {
394
- runtime.assertActive();
422
+ assertActive();
395
423
  return execCommand(command, args, options?.cwd ?? cwd, options);
396
424
  },
397
425
  executeTool(toolName, params, options) {
@@ -399,31 +427,31 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
399
427
  return runtime.executeTool(toolName, params, options);
400
428
  },
401
429
  getActiveTools() {
402
- runtime.assertActive();
430
+ assertActive();
403
431
  return runtime.getActiveTools();
404
432
  },
405
433
  getAllTools() {
406
- runtime.assertActive();
434
+ assertActive();
407
435
  return runtime.getAllTools();
408
436
  },
409
437
  setActiveTools(toolNames) {
410
- runtime.assertActive();
438
+ assertActive();
411
439
  runtime.setActiveTools(toolNames);
412
440
  },
413
441
  getCommands() {
414
- runtime.assertActive();
442
+ assertActive();
415
443
  return runtime.getCommands();
416
444
  },
417
445
  setModel(model) {
418
- runtime.assertActive();
446
+ assertActive();
419
447
  return runtime.setModel(model);
420
448
  },
421
449
  getThinkingLevel() {
422
- runtime.assertActive();
450
+ assertActive();
423
451
  return runtime.getThinkingLevel();
424
452
  },
425
453
  setThinkingLevel(level) {
426
- runtime.assertActive();
454
+ assertActive();
427
455
  runtime.setThinkingLevel(level);
428
456
  },
429
457
  setSessionModel(model) {
@@ -439,18 +467,18 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
439
467
  runtime.setSessionFastMode(enabled);
440
468
  },
441
469
  registerProvider(providerOrName, config) {
442
- runtime.assertActive();
470
+ assertActive();
443
471
  if (typeof providerOrName === "string") {
444
472
  if (!config)
445
473
  throw new Error("Provider config is required when registering by name");
446
- runtime.registerProvider(providerOrName, config, extension.path);
474
+ applyRuntimeChange(() => runtime.registerProvider(providerOrName, config, extension.path));
447
475
  return;
448
476
  }
449
- runtime.registerNativeProvider(providerOrName, extension.path);
477
+ applyRuntimeChange(() => runtime.registerNativeProvider(providerOrName, extension.path));
450
478
  },
451
479
  unregisterProvider(name) {
452
- runtime.assertActive();
453
- runtime.unregisterProvider(name, extension.path);
480
+ assertActive();
481
+ applyRuntimeChange(() => runtime.unregisterProvider(name, extension.path));
454
482
  },
455
483
  rpc: {
456
484
  emit(name, data) {
@@ -478,23 +506,50 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
478
506
  },
479
507
  events: {
480
508
  emit(channel, data) {
481
- runtime.assertActive();
509
+ assertActive();
482
510
  eventBus.emit(channel, data);
483
511
  },
484
512
  on(channel, handler) {
485
- runtime.assertActive();
486
- return runtime.trackEventBusSubscription(eventBus.on(channel, handler));
513
+ assertActive();
514
+ const unsubscribe = runtime.trackEventBusSubscription(eventBus.on(channel, handler));
515
+ if (state === "loading")
516
+ loadingUnsubscribers.push(unsubscribe);
517
+ return unsubscribe;
487
518
  },
488
519
  },
489
520
  };
490
- return api;
521
+ return {
522
+ api,
523
+ commit: () => {
524
+ if (state !== "loading")
525
+ return;
526
+ runtime.assertActive();
527
+ for (const [name, value] of pendingFlagValues) {
528
+ if (!runtime.flagValues.has(name))
529
+ runtime.flagValues.set(name, value);
530
+ }
531
+ for (const apply of pendingRuntimeChanges)
532
+ apply();
533
+ state = "active";
534
+ clearPending();
535
+ },
536
+ discard: () => {
537
+ if (state !== "loading")
538
+ return;
539
+ state = "failed";
540
+ for (const unsubscribe of loadingUnsubscribers)
541
+ unsubscribe();
542
+ clearPending();
543
+ },
544
+ };
491
545
  }
492
546
  function createExtensionModuleImporter() {
493
547
  return createJiti(import.meta.url, {
494
548
  moduleCache: false,
495
- // Compiled binaries use modules embedded in the executable. Source TypeScript
496
- // reuses host modules and root tsconfig paths. Built Node uses dist aliases.
497
- ...(isBunBinary || isNodeSeaBinary
549
+ // Compiled binaries and the bundled Node distribution use embedded modules.
550
+ // Source TypeScript reuses host modules and root tsconfig paths. Unbundled
551
+ // Node builds use dist aliases.
552
+ ...(isBunBinary || isNodeSeaBinary || isBundledNode
498
553
  ? { virtualModules: VIRTUAL_MODULES, tryNative: false }
499
554
  : isTypeScriptSourceRuntime
500
555
  ? { alias: getAliases(), virtualModules: VIRTUAL_MODULES, tsconfigPaths: true }
@@ -551,6 +606,20 @@ function createExtension(extensionPath, resolvedPath, registrationCwd) {
551
606
  registrationCwd,
552
607
  };
553
608
  }
609
+ async function initializeExtension(factory, extensionPath, resolvedPath, cwd, eventBus, runtime) {
610
+ const extension = createExtension(extensionPath, resolvedPath, cwd);
611
+ const load = createExtensionAPI(extension, runtime, cwd, eventBus);
612
+ try {
613
+ await factory(load.api);
614
+ load.commit();
615
+ }
616
+ catch (error) {
617
+ load.discard();
618
+ throw error;
619
+ }
620
+ time(`${extensionPath} factory`, "extensions");
621
+ return extension;
622
+ }
554
623
  async function loadExtension(extensionPath, cwd, eventBus, runtime, getImporter, factoryResolver, cacheToken) {
555
624
  const resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });
556
625
  try {
@@ -560,10 +629,7 @@ async function loadExtension(extensionPath, cwd, eventBus, runtime, getImporter,
560
629
  if (!factory) {
561
630
  return { extension: null, error: `Extension does not export a valid factory function: ${extensionPath}` };
562
631
  }
563
- const extension = createExtension(extensionPath, resolvedPath, cwd);
564
- const api = createExtensionAPI(extension, runtime, cwd, eventBus);
565
- await factory(api);
566
- time(`${extensionPath} factory`, "extensions");
632
+ const extension = await initializeExtension(factory, extensionPath, resolvedPath, cwd, eventBus, runtime);
567
633
  return { extension, error: null };
568
634
  }
569
635
  catch (err) {
@@ -576,11 +642,7 @@ async function loadExtension(extensionPath, cwd, eventBus, runtime, getImporter,
576
642
  */
577
643
  export async function loadExtensionFromFactory(factory, cwd, eventBus, runtime, extensionPath = "<inline>") {
578
644
  const resolvedCwd = resolvePath(cwd);
579
- const extension = createExtension(extensionPath, extensionPath, resolvedCwd);
580
- const api = createExtensionAPI(extension, runtime, resolvedCwd, eventBus);
581
- await factory(api);
582
- time(`${extensionPath} factory`, "extensions");
583
- return extension;
645
+ return initializeExtension(factory, extensionPath, extensionPath, resolvedCwd, eventBus, runtime);
584
646
  }
585
647
  /**
586
648
  * Load extensions from paths.