@code-yeongyu/senpi 2026.8.24 → 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 (427) hide show
  1. package/CHANGELOG.md +81 -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.map +1 -1
  13. package/dist/core/agent-abort-provenance.js +5 -1
  14. package/dist/core/agent-abort-provenance.js.map +1 -1
  15. package/dist/core/agent-session.d.ts +11 -0
  16. package/dist/core/agent-session.d.ts.map +1 -1
  17. package/dist/core/agent-session.js +125 -29
  18. package/dist/core/agent-session.js.map +1 -1
  19. package/dist/core/auth-storage.d.ts +4 -0
  20. package/dist/core/auth-storage.d.ts.map +1 -1
  21. package/dist/core/auth-storage.js +35 -8
  22. package/dist/core/auth-storage.js.map +1 -1
  23. package/dist/core/brand.d.ts +2 -0
  24. package/dist/core/brand.d.ts.map +1 -1
  25. package/dist/core/brand.js +1 -0
  26. package/dist/core/brand.js.map +1 -1
  27. package/dist/core/compaction/compaction.d.ts +1 -0
  28. package/dist/core/compaction/compaction.d.ts.map +1 -1
  29. package/dist/core/compaction/compaction.js +24 -8
  30. package/dist/core/compaction/compaction.js.map +1 -1
  31. package/dist/core/defaults.d.ts +1 -0
  32. package/dist/core/defaults.d.ts.map +1 -1
  33. package/dist/core/defaults.js +9 -0
  34. package/dist/core/defaults.js.map +1 -1
  35. package/dist/core/extensions/builtin/goal/terminal-provider-error.js +1 -1
  36. package/dist/core/extensions/builtin/goal/terminal-provider-error.js.map +1 -1
  37. package/dist/core/extensions/builtin/loop-guard/notice.d.ts.map +1 -1
  38. package/dist/core/extensions/builtin/loop-guard/notice.js +5 -1
  39. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
  40. package/dist/core/extensions/builtin/mcp/config-schema.d.ts +2 -2
  41. package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
  42. package/dist/core/extensions/builtin/ttsr/index.js +6 -6
  43. package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
  44. package/dist/core/extensions/builtin/ttsr/message-update.d.ts +10 -0
  45. package/dist/core/extensions/builtin/ttsr/message-update.d.ts.map +1 -0
  46. package/dist/core/extensions/builtin/ttsr/message-update.js +38 -0
  47. package/dist/core/extensions/builtin/ttsr/message-update.js.map +1 -0
  48. package/dist/core/extensions/builtin/ttsr/remediation.d.ts +5 -10
  49. package/dist/core/extensions/builtin/ttsr/remediation.d.ts.map +1 -1
  50. package/dist/core/extensions/builtin/ttsr/remediation.js +19 -3
  51. package/dist/core/extensions/builtin/ttsr/remediation.js.map +1 -1
  52. package/dist/core/extensions/builtin/ttsr/stream-remediation.d.ts +1 -1
  53. package/dist/core/extensions/builtin/ttsr/stream-remediation.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/ttsr/stream-remediation.js.map +1 -1
  55. package/dist/core/extensions/builtin/ttsr/types.d.ts +1 -1
  56. package/dist/core/extensions/builtin/ttsr/types.d.ts.map +1 -1
  57. package/dist/core/extensions/builtin/ttsr/types.js.map +1 -1
  58. package/dist/core/extensions/builtin/ttsr/watch.d.ts +1 -1
  59. package/dist/core/extensions/builtin/ttsr/watch.d.ts.map +1 -1
  60. package/dist/core/extensions/builtin/ttsr/watch.js +2 -2
  61. package/dist/core/extensions/builtin/ttsr/watch.js.map +1 -1
  62. package/dist/core/extensions/index.d.ts +2 -2
  63. package/dist/core/extensions/index.d.ts.map +1 -1
  64. package/dist/core/extensions/index.js +1 -1
  65. package/dist/core/extensions/index.js.map +1 -1
  66. package/dist/core/extensions/loader.d.ts.map +1 -1
  67. package/dist/core/extensions/loader.js +107 -45
  68. package/dist/core/extensions/loader.js.map +1 -1
  69. package/dist/core/extensions/types.d.ts +17 -6
  70. package/dist/core/extensions/types.d.ts.map +1 -1
  71. package/dist/core/extensions/types.js +3 -0
  72. package/dist/core/extensions/types.js.map +1 -1
  73. package/dist/core/footer-data-provider.d.ts +1 -1
  74. package/dist/core/footer-data-provider.js +1 -1
  75. package/dist/core/footer-data-provider.js.map +1 -1
  76. package/dist/core/keybindings.d.ts +20 -19
  77. package/dist/core/keybindings.d.ts.map +1 -1
  78. package/dist/core/keybindings.js +26 -5
  79. package/dist/core/keybindings.js.map +1 -1
  80. package/dist/core/model-config-schema.d.ts +17 -5
  81. package/dist/core/model-config-schema.d.ts.map +1 -1
  82. package/dist/core/model-config-schema.js +1 -1
  83. package/dist/core/model-config-schema.js.map +1 -1
  84. package/dist/core/model-config.d.ts.map +1 -1
  85. package/dist/core/model-config.js +7 -5
  86. package/dist/core/model-config.js.map +1 -1
  87. package/dist/core/model-resolver.d.ts +3 -2
  88. package/dist/core/model-resolver.d.ts.map +1 -1
  89. package/dist/core/model-resolver.js +3 -2
  90. package/dist/core/model-resolver.js.map +1 -1
  91. package/dist/core/model-runtime.d.ts +0 -1
  92. package/dist/core/model-runtime.d.ts.map +1 -1
  93. package/dist/core/model-runtime.js +0 -18
  94. package/dist/core/model-runtime.js.map +1 -1
  95. package/dist/core/models-store.d.ts.map +1 -1
  96. package/dist/core/models-store.js +2 -1
  97. package/dist/core/models-store.js.map +1 -1
  98. package/dist/core/package-manager.d.ts.map +1 -1
  99. package/dist/core/package-manager.js +14 -10
  100. package/dist/core/package-manager.js.map +1 -1
  101. package/dist/core/pi-manifest.d.ts.map +1 -1
  102. package/dist/core/pi-manifest.js +2 -1
  103. package/dist/core/pi-manifest.js.map +1 -1
  104. package/dist/core/provider-composer.d.ts +2 -0
  105. package/dist/core/provider-composer.d.ts.map +1 -1
  106. package/dist/core/provider-composer.js +3 -6
  107. package/dist/core/provider-composer.js.map +1 -1
  108. package/dist/core/provider-display-names.d.ts.map +1 -1
  109. package/dist/core/provider-display-names.js +0 -1
  110. package/dist/core/provider-display-names.js.map +1 -1
  111. package/dist/core/provider-timeout-retry.d.ts.map +1 -1
  112. package/dist/core/provider-timeout-retry.js +8 -12
  113. package/dist/core/provider-timeout-retry.js.map +1 -1
  114. package/dist/core/resource-loader.d.ts.map +1 -1
  115. package/dist/core/resource-loader.js +3 -2
  116. package/dist/core/resource-loader.js.map +1 -1
  117. package/dist/core/retry-fallback/profile-override.d.ts +24 -0
  118. package/dist/core/retry-fallback/profile-override.d.ts.map +1 -0
  119. package/dist/core/retry-fallback/profile-override.js +138 -0
  120. package/dist/core/retry-fallback/profile-override.js.map +1 -0
  121. package/dist/core/retry-fallback/settings.d.ts +1 -0
  122. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  123. package/dist/core/retry-fallback/settings.js.map +1 -1
  124. package/dist/core/sdk.d.ts +2 -2
  125. package/dist/core/sdk.d.ts.map +1 -1
  126. package/dist/core/sdk.js +20 -5
  127. package/dist/core/sdk.js.map +1 -1
  128. package/dist/core/session-export.d.ts +4 -0
  129. package/dist/core/session-export.d.ts.map +1 -0
  130. package/dist/core/session-export.js +32 -0
  131. package/dist/core/session-export.js.map +1 -0
  132. package/dist/core/session-manager.d.ts.map +1 -1
  133. package/dist/core/session-manager.js +2 -1
  134. package/dist/core/session-manager.js.map +1 -1
  135. package/dist/core/settings-diagnostics.d.ts +9 -0
  136. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  137. package/dist/core/settings-diagnostics.js +21 -0
  138. package/dist/core/settings-diagnostics.js.map +1 -0
  139. package/dist/core/settings-manager.d.ts +18 -0
  140. package/dist/core/settings-manager.d.ts.map +1 -1
  141. package/dist/core/settings-manager.js +88 -7
  142. package/dist/core/settings-manager.js.map +1 -1
  143. package/dist/core/slash-commands.d.ts.map +1 -1
  144. package/dist/core/slash-commands.js +2 -1
  145. package/dist/core/slash-commands.js.map +1 -1
  146. package/dist/core/system-prompt.d.ts.map +1 -1
  147. package/dist/core/system-prompt.js +11 -2
  148. package/dist/core/system-prompt.js.map +1 -1
  149. package/dist/core/tools/bash.d.ts +14 -1
  150. package/dist/core/tools/bash.d.ts.map +1 -1
  151. package/dist/core/tools/bash.js +35 -19
  152. package/dist/core/tools/bash.js.map +1 -1
  153. package/dist/core/tools/edit-diff.d.ts +0 -5
  154. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  155. package/dist/core/tools/edit-diff.js +2 -5
  156. package/dist/core/tools/edit-diff.js.map +1 -1
  157. package/dist/core/tools/edit.d.ts.map +1 -1
  158. package/dist/core/tools/edit.js +3 -2
  159. package/dist/core/tools/edit.js.map +1 -1
  160. package/dist/core/tools/index.d.ts +4 -1
  161. package/dist/core/tools/index.d.ts.map +1 -1
  162. package/dist/core/tools/index.js +13 -1
  163. package/dist/core/tools/index.js.map +1 -1
  164. package/dist/core/tools/powershell.d.ts +16 -0
  165. package/dist/core/tools/powershell.d.ts.map +1 -0
  166. package/dist/core/tools/powershell.js +39 -0
  167. package/dist/core/tools/powershell.js.map +1 -0
  168. package/dist/core/trust-manager.d.ts.map +1 -1
  169. package/dist/core/trust-manager.js +2 -1
  170. package/dist/core/trust-manager.js.map +1 -1
  171. package/dist/extensions/llama/client.d.ts +6 -0
  172. package/dist/extensions/llama/client.d.ts.map +1 -1
  173. package/dist/extensions/llama/client.js +7 -0
  174. package/dist/extensions/llama/client.js.map +1 -1
  175. package/dist/extensions/llama/provider.d.ts +3 -1
  176. package/dist/extensions/llama/provider.d.ts.map +1 -1
  177. package/dist/extensions/llama/provider.js +27 -6
  178. package/dist/extensions/llama/provider.js.map +1 -1
  179. package/dist/index.d.ts +5 -4
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +4 -3
  182. package/dist/index.js.map +1 -1
  183. package/dist/main.d.ts.map +1 -1
  184. package/dist/main.js +13 -2
  185. package/dist/main.js.map +1 -1
  186. package/dist/migrations.d.ts.map +1 -1
  187. package/dist/migrations.js +4 -3
  188. package/dist/migrations.js.map +1 -1
  189. package/dist/modes/app-server/daemon/probe.js +1 -1
  190. package/dist/modes/app-server/daemon/probe.js.map +1 -1
  191. package/dist/modes/app-server/daemon.js +13 -2
  192. package/dist/modes/app-server/daemon.js.map +1 -1
  193. package/dist/modes/app-server/transports/websocket-connection-handler.d.ts.map +1 -1
  194. package/dist/modes/app-server/transports/websocket-connection-handler.js +4 -0
  195. package/dist/modes/app-server/transports/websocket-connection-handler.js.map +1 -1
  196. package/dist/modes/interactive/aborted-error-label.d.ts +2 -0
  197. package/dist/modes/interactive/aborted-error-label.d.ts.map +1 -1
  198. package/dist/modes/interactive/aborted-error-label.js +7 -0
  199. package/dist/modes/interactive/aborted-error-label.js.map +1 -1
  200. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  201. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  202. package/dist/modes/interactive/components/thinking-selector.js +68 -17
  203. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  204. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  205. package/dist/modes/interactive/external-editor.js +2 -1
  206. package/dist/modes/interactive/external-editor.js.map +1 -1
  207. package/dist/modes/interactive/interactive-mode.d.ts +6 -0
  208. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  209. package/dist/modes/interactive/interactive-mode.js +19 -12
  210. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  211. package/dist/modes/json-event.d.ts +16 -13
  212. package/dist/modes/json-event.d.ts.map +1 -1
  213. package/dist/modes/json-event.js +20 -6
  214. package/dist/modes/json-event.js.map +1 -1
  215. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  216. package/dist/modes/rpc/connection-handler.js +3 -0
  217. package/dist/modes/rpc/connection-handler.js.map +1 -1
  218. package/dist/modes/rpc/rpc-client.d.ts +7 -0
  219. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  220. package/dist/modes/rpc/rpc-client.js +7 -0
  221. package/dist/modes/rpc/rpc-client.js.map +1 -1
  222. package/dist/modes/rpc/rpc-types.d.ts +12 -0
  223. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  224. package/dist/modes/rpc/rpc-types.js.map +1 -1
  225. package/dist/package-manager-cli.d.ts +1 -0
  226. package/dist/package-manager-cli.d.ts.map +1 -1
  227. package/dist/package-manager-cli.js +186 -2
  228. package/dist/package-manager-cli.js.map +1 -1
  229. package/dist/utils/frontmatter.d.ts.map +1 -1
  230. package/dist/utils/frontmatter.js +2 -1
  231. package/dist/utils/frontmatter.js.map +1 -1
  232. package/dist/utils/shell.d.ts +3 -0
  233. package/dist/utils/shell.d.ts.map +1 -1
  234. package/dist/utils/shell.js +17 -5
  235. package/dist/utils/shell.js.map +1 -1
  236. package/dist/utils/syntax-highlight.d.ts +1 -0
  237. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  238. package/dist/utils/syntax-highlight.js +60 -1
  239. package/dist/utils/syntax-highlight.js.map +1 -1
  240. package/dist/utils/text.d.ts +8 -0
  241. package/dist/utils/text.d.ts.map +1 -0
  242. package/dist/utils/text.js +9 -0
  243. package/dist/utils/text.js.map +1 -0
  244. package/docs/compaction.md +0 -2
  245. package/docs/custom-provider.md +6 -6
  246. package/docs/environment-variables.md +8 -8
  247. package/docs/extensions.md +6 -5
  248. package/docs/json.md +7 -2
  249. package/docs/keybindings.md +1 -1
  250. package/docs/packages.md +2 -2
  251. package/docs/rpc.md +32 -3
  252. package/docs/sdk.md +7 -2
  253. package/docs/settings.md +9 -1
  254. package/docs/terminal-setup.md +11 -9
  255. package/docs/usage.md +4 -1
  256. package/docs/windows.md +24 -2
  257. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
  258. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  259. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager-proxy.ts +39 -5
  260. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  261. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +7 -4
  262. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  263. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +2 -3
  264. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  265. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +7 -6
  266. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  267. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts +4 -0
  268. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  269. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +8 -0
  270. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
  271. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +1 -0
  272. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  273. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -0
  274. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  275. package/node_modules/@earendil-works/pi-agent-core/package.json +5 -5
  276. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +1 -5
  277. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  278. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +25 -13
  279. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  280. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.d.ts.map +1 -1
  281. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +2 -1
  282. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  283. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  284. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +91 -5
  285. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
  286. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.d.ts.map +1 -1
  287. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +4 -2
  288. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
  289. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.d.ts.map +1 -1
  290. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +4 -2
  291. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
  292. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
  293. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +2 -0
  294. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
  295. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  296. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +93 -54
  297. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  298. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +2 -5
  299. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  300. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +1 -1
  301. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  302. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.d.ts.map +1 -1
  303. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.js +97 -46
  304. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.js.map +1 -1
  305. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
  306. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js +1 -14
  307. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js.map +1 -1
  308. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts +50 -0
  309. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts.map +1 -0
  310. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js +129 -0
  311. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js.map +1 -0
  312. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
  313. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +3 -1
  314. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
  315. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +8 -1
  316. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  317. package/node_modules/@earendil-works/pi-ai/dist/models.js +16 -3
  318. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  319. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts +3 -1
  320. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  321. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js +10 -1
  322. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  323. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  324. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  325. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  326. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  327. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  328. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  329. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
  330. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  331. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  332. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  333. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  334. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts +1 -0
  335. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  336. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js +1 -0
  337. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  338. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.d.ts.map +1 -1
  339. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js +4 -0
  340. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js.map +1 -1
  341. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +8 -1
  342. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  343. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  344. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +16 -0
  345. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  346. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +17 -1
  347. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  348. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.d.ts +14 -0
  349. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.d.ts.map +1 -0
  350. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.js +24 -0
  351. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/backoff.js.map +1 -0
  352. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.d.ts +36 -0
  353. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.d.ts.map +1 -0
  354. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.js +109 -0
  355. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/classifiers.js.map +1 -0
  356. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.d.ts +12 -0
  357. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.d.ts.map +1 -0
  358. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.js +109 -0
  359. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/failure.js.map +1 -0
  360. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.d.ts +9 -0
  361. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.d.ts.map +1 -0
  362. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.js +6 -0
  363. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/index.js.map +1 -0
  364. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.d.ts +46 -0
  365. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.d.ts.map +1 -0
  366. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.js +41 -0
  367. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/planner.js.map +1 -0
  368. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.d.ts +4 -0
  369. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.d.ts.map +1 -0
  370. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.js +93 -0
  371. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.js.map +1 -0
  372. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.d.ts +121 -0
  373. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.d.ts.map +1 -0
  374. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.js +11 -0
  375. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.js.map +1 -0
  376. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +12 -0
  377. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  378. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +25 -5
  379. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  380. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.d.ts +2 -0
  381. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.d.ts.map +1 -0
  382. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.js +15 -0
  383. package/node_modules/@earendil-works/pi-ai/dist/utils/sleep.js.map +1 -0
  384. package/node_modules/@earendil-works/pi-ai/package.json +20 -16
  385. package/node_modules/@earendil-works/pi-pty/dist/index.d.ts +1 -0
  386. package/node_modules/@earendil-works/pi-pty/dist/index.d.ts.map +1 -1
  387. package/node_modules/@earendil-works/pi-pty/dist/index.js +1 -0
  388. package/node_modules/@earendil-works/pi-pty/dist/index.js.map +1 -1
  389. package/node_modules/@earendil-works/pi-pty/dist/session-bun.d.ts +30 -0
  390. package/node_modules/@earendil-works/pi-pty/dist/session-bun.d.ts.map +1 -0
  391. package/node_modules/@earendil-works/pi-pty/dist/session-bun.js +76 -0
  392. package/node_modules/@earendil-works/pi-pty/dist/session-bun.js.map +1 -0
  393. package/node_modules/@earendil-works/pi-pty/dist/session-types.d.ts +3 -1
  394. package/node_modules/@earendil-works/pi-pty/dist/session-types.d.ts.map +1 -1
  395. package/node_modules/@earendil-works/pi-pty/dist/session-types.js.map +1 -1
  396. package/node_modules/@earendil-works/pi-pty/dist/session.d.ts +2 -0
  397. package/node_modules/@earendil-works/pi-pty/dist/session.d.ts.map +1 -1
  398. package/node_modules/@earendil-works/pi-pty/dist/session.js +19 -9
  399. package/node_modules/@earendil-works/pi-pty/dist/session.js.map +1 -1
  400. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  401. package/node_modules/@earendil-works/pi-telemetry/package.json +3 -3
  402. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  403. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +9 -4
  404. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  405. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts +8 -2
  406. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  407. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js +24 -4
  408. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  409. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts +2 -2
  410. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js +2 -2
  411. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  412. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -1
  413. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +2 -8
  414. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  415. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.d.ts +7 -0
  416. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.d.ts.map +1 -0
  417. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js +19 -0
  418. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js.map +1 -0
  419. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  420. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +4 -10
  421. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  422. package/node_modules/@earendil-works/pi-tui/package.json +5 -5
  423. package/package.json +90 -88
  424. package/dist/core/radius.d.ts +0 -2
  425. package/dist/core/radius.d.ts.map +0 -1
  426. package/dist/core/radius.js +0 -2
  427. package/dist/core/radius.js.map +0 -1
@@ -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.
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"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","sourcesContent":["// allow: SIZE_OK - extension loading, bundled aliases, and discovery are pre-existing cohesive runtime glue; this branch only scopes the extension cache by cwd.\n/**\n * Extension loader - loads TypeScript extension modules using jiti.\n *\n */\n\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport * as _bundledPiAgentCore from \"@earendil-works/pi-agent-core\";\nimport type { Provider } from \"@earendil-works/pi-ai\";\nimport * as _bundledPiAiCompat from \"@earendil-works/pi-ai/compat\";\nimport * as _bundledPiAiOauth from \"@earendil-works/pi-ai/oauth\";\nimport * as _bundledPiAiProviders from \"@earendil-works/pi-ai/providers/all\";\nimport type { KeyId } from \"@earendil-works/pi-tui\";\nimport * as _bundledPiTui from \"@earendil-works/pi-tui\";\nimport { createJiti } from \"jiti/static\";\n// Static imports of packages that extensions may use.\n// These MUST be static so Bun bundles them into the compiled binary.\n// The virtualModules option then makes them available to extensions.\nimport * as _bundledTypebox from \"typebox\";\nimport * as _bundledTypeboxCompile from \"typebox/compile\";\nimport * as _bundledTypeboxValue from \"typebox/value\";\nimport { CONFIG_DIR_NAME, getAgentDir, isBunBinary } from \"../../config.ts\";\n// NOTE: This import works because loader.ts exports are NOT re-exported from index.ts,\n// avoiding a circular dependency. Extensions can import from @code-yeongyu/senpi.\nimport * as _bundledPiCodingAgent from \"../../index.ts\";\nimport { resolvePath } from \"../../utils/paths.ts\";\nimport { createEventBus, type EventBus, EXTENSION_RPC_EVENT_CHANNEL, type ExtensionRpcEvent } from \"../event-bus.ts\";\nimport type { ExecOptions } from \"../exec.ts\";\nimport { execCommand } from \"../exec.ts\";\nimport { readPiManifest } from \"../pi-manifest.ts\";\nimport { createSyntheticSourceInfo } from \"../source-info.ts\";\nimport { time } from \"../timings.ts\";\nimport { validateMcpServerDeclaration } from \"./builtin/mcp/config-schema.ts\";\nimport type {\n\tEntryRenderer,\n\tExtension,\n\tExtensionAPI,\n\tExtensionFactory,\n\tExtensionRuntime,\n\tFilesystemPolicy,\n\tLazyToolActivator,\n\tLoadExtensionsResult,\n\tMarkdownTransformer,\n\tMessageRenderer,\n\tPendingProviderRegistration,\n\tProviderConfig,\n\tRegisteredCommand,\n\tRegisteredMcpServerDeclaration,\n\tToolDefinition,\n} from \"./types.ts\";\n\n/** Modules available to extensions via virtualModules (for compiled binaries) */\nconst VIRTUAL_MODULES: Record<string, unknown> = {\n\ttypebox: _bundledTypebox,\n\t\"typebox/compile\": _bundledTypeboxCompile,\n\t\"typebox/value\": _bundledTypeboxValue,\n\t\"@sinclair/typebox\": _bundledTypebox,\n\t\"@sinclair/typebox/compile\": _bundledTypeboxCompile,\n\t\"@sinclair/typebox/value\": _bundledTypeboxValue,\n\t\"@earendil-works/pi-agent-core\": _bundledPiAgentCore,\n\t\"@earendil-works/pi-tui\": _bundledPiTui,\n\t// Extensions resolve the pi-ai root to the compat entrypoint (a strict\n\t// superset of the core entrypoint): existing extensions using the old\n\t// global API keep working at runtime until compat is removed.\n\t\"@earendil-works/pi-ai\": _bundledPiAiCompat,\n\t\"@earendil-works/pi-ai/compat\": _bundledPiAiCompat,\n\t\"@earendil-works/pi-ai/oauth\": _bundledPiAiOauth,\n\t\"@earendil-works/pi-ai/providers/all\": _bundledPiAiProviders,\n\t\"@earendil-works/pi-coding-agent\": _bundledPiCodingAgent,\n\t\"@mariozechner/pi-agent-core\": _bundledPiAgentCore,\n\t\"@mariozechner/pi-tui\": _bundledPiTui,\n\t\"@mariozechner/pi-ai\": _bundledPiAiCompat,\n\t\"@mariozechner/pi-ai/compat\": _bundledPiAiCompat,\n\t\"@mariozechner/pi-ai/oauth\": _bundledPiAiOauth,\n\t\"@mariozechner/pi-ai/providers/all\": _bundledPiAiProviders,\n\t\"@mariozechner/pi-coding-agent\": _bundledPiCodingAgent,\n\t\"@code-yeongyu/senpi\": _bundledPiCodingAgent,\n};\n\nconst require = createRequire(import.meta.url);\n\nconst isNodeSeaBinary =\n\t(\"sea\" in process.features && process.features.sea === true) ||\n\tprocess.getBuiltinModule(\"node:sea\")?.isSea() === true;\nconst isTypeScriptSourceRuntime = !isBunBinary && path.extname(fileURLToPath(import.meta.url)) === \".ts\";\n\n/**\n * Get aliases for jiti (used in built Node.js mode).\n * In compiled binary mode, virtualModules is used instead.\n */\nlet _aliases: Record<string, string> | null = null;\n\nfunction getAliases(): Record<string, string> {\n\tif (_aliases) return _aliases;\n\n\tconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\tconst typeboxEntry = require.resolve(\"typebox\");\n\tconst typeboxCompileEntry = require.resolve(\"typebox/compile\");\n\tconst typeboxValueEntry = require.resolve(\"typebox/value\");\n\n\tconst codingAgentPackageRoot = path.resolve(__dirname, \"../../..\");\n\tconst packagesRoot = path.dirname(codingAgentPackageRoot);\n\tconst resolveWorkspaceOrBundled = (\n\t\tpackageName: string,\n\t\tpackageEntryRelativePath: string,\n\t\tworkspaceRelativePath: string,\n\t\tsourceRelativePath: string,\n\t\tspecifier: string,\n\t): string => {\n\t\tconst bundledPath = path.join(codingAgentPackageRoot, \"node_modules\", packageName, packageEntryRelativePath);\n\t\tif (fs.existsSync(bundledPath)) {\n\t\t\treturn bundledPath;\n\t\t}\n\t\tconst workspacePath = path.join(packagesRoot, workspaceRelativePath);\n\t\tif (fs.existsSync(workspacePath)) {\n\t\t\treturn workspacePath;\n\t\t}\n\t\tconst sourcePath = path.join(packagesRoot, sourceRelativePath);\n\t\tif (fs.existsSync(sourcePath)) {\n\t\t\treturn sourcePath;\n\t\t}\n\t\treturn typeof import.meta.resolve === \"function\"\n\t\t\t? fileURLToPath(import.meta.resolve(specifier))\n\t\t\t: require.resolve(specifier);\n\t};\n\n\tconst piCodingAgentDistEntry = path.join(codingAgentPackageRoot, \"dist/index.js\");\n\tconst piCodingAgentSourceEntry = path.join(codingAgentPackageRoot, \"src/index.ts\");\n\tconst piCodingAgentEntry = fs.existsSync(piCodingAgentDistEntry) ? piCodingAgentDistEntry : piCodingAgentSourceEntry;\n\tconst piAgentCoreEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-agent-core\",\n\t\t\"dist/index.js\",\n\t\t\"agent/dist/index.js\",\n\t\t\"agent/src/index.ts\",\n\t\t\"@earendil-works/pi-agent-core\",\n\t);\n\tconst piTuiEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-tui\",\n\t\t\"dist/index.js\",\n\t\t\"tui/dist/index.js\",\n\t\t\"tui/src/index.ts\",\n\t\t\"@earendil-works/pi-tui\",\n\t);\n\tconst piAiCompatEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-ai\",\n\t\t\"dist/compat.js\",\n\t\t\"ai/dist/compat.js\",\n\t\t\"ai/src/compat.ts\",\n\t\t\"@earendil-works/pi-ai/compat\",\n\t);\n\tconst piAiOauthEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-ai\",\n\t\t\"dist/oauth.js\",\n\t\t\"ai/dist/oauth.js\",\n\t\t\"ai/src/oauth.ts\",\n\t\t\"@earendil-works/pi-ai/oauth\",\n\t);\n\tconst piAiProvidersEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-ai\",\n\t\t\"dist/providers/all.js\",\n\t\t\"ai/dist/providers/all.js\",\n\t\t\"ai/src/providers/all.ts\",\n\t\t\"@earendil-works/pi-ai/providers/all\",\n\t);\n\n\t_aliases = {\n\t\t\"@earendil-works/pi-coding-agent\": piCodingAgentEntry,\n\t\t\"@earendil-works/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@earendil-works/pi-tui\": piTuiEntry,\n\t\t\"@earendil-works/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@earendil-works/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@earendil-works/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@earendil-works/pi-ai\": piAiCompatEntry,\n\t\t\"@code-yeongyu/senpi\": piCodingAgentEntry,\n\t\t\"@mariozechner/pi-coding-agent\": piCodingAgentEntry,\n\t\t\"@mariozechner/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@mariozechner/pi-tui\": piTuiEntry,\n\t\t\"@mariozechner/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@mariozechner/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@mariozechner/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@mariozechner/pi-ai\": piAiCompatEntry,\n\t\ttypebox: typeboxEntry,\n\t\t\"typebox/compile\": typeboxCompileEntry,\n\t\t\"typebox/value\": typeboxValueEntry,\n\t\t\"@sinclair/typebox\": typeboxEntry,\n\t\t\"@sinclair/typebox/compile\": typeboxCompileEntry,\n\t\t\"@sinclair/typebox/value\": typeboxValueEntry,\n\t};\n\n\treturn _aliases;\n}\n\ntype HandlerFn = (...args: unknown[]) => Promise<unknown>;\ntype ExtensionModuleImporter = ReturnType<typeof createJiti>;\nexport type ExtensionFactoryResolver = (extensionPath: string, resolvedPath: string) => ExtensionFactory | undefined;\n\nconst MAX_EXTENSION_CACHE_CWD_ENTRIES = 16;\nlet nextExtensionCacheGeneration = 0;\nconst extensionCacheByCwd = new Map<string, ExtensionCacheEntry>();\n\ninterface ExtensionCacheToken {\n\tcwd: string;\n\tgeneration: number;\n}\n\ninterface ExtensionCacheEntry {\n\tcwd: string;\n\tgeneration: number;\n\tfactories: Map<string, ExtensionFactory>;\n}\n\nexport function clearExtensionCache(): void {\n\textensionCacheByCwd.clear();\n}\n\nfunction useExtensionCacheCwd(cwd: string): ExtensionCacheToken {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst existingEntry = extensionCacheByCwd.get(resolvedCwd);\n\tif (existingEntry) {\n\t\textensionCacheByCwd.delete(resolvedCwd);\n\t\textensionCacheByCwd.set(resolvedCwd, existingEntry);\n\t\treturn { cwd: existingEntry.cwd, generation: existingEntry.generation };\n\t}\n\tif (extensionCacheByCwd.size >= MAX_EXTENSION_CACHE_CWD_ENTRIES) {\n\t\tconst leastRecentlyUsedCwd = extensionCacheByCwd.keys().next().value;\n\t\tif (leastRecentlyUsedCwd !== undefined) {\n\t\t\textensionCacheByCwd.delete(leastRecentlyUsedCwd);\n\t\t}\n\t}\n\tconst entry: ExtensionCacheEntry = {\n\t\tcwd: resolvedCwd,\n\t\tgeneration: nextExtensionCacheGeneration++,\n\t\tfactories: new Map<string, ExtensionFactory>(),\n\t};\n\textensionCacheByCwd.set(resolvedCwd, entry);\n\treturn { cwd: entry.cwd, generation: entry.generation };\n}\n\n/**\n * Create a runtime with throwing stubs for action methods.\n * Runner.bindCore() replaces these with real implementations.\n */\nexport function createExtensionRuntime(): ExtensionRuntime {\n\tconst notInitialized = () => {\n\t\tthrow new Error(\"Extension runtime not initialized. Action methods cannot be called during extension loading.\");\n\t};\n\tconst state: { staleMessage?: string } = {};\n\t// Shared sequence across the legacy and native pre-bind queues so flushers\n\t// can replay registrations in original call order (last-registration-wins).\n\tlet nextProviderRegistrationOrder = 0;\n\tconst eventBusUnsubscribers = new Set<() => void>();\n\tconst assertActive = () => {\n\t\tif (state.staleMessage) {\n\t\t\tthrow new Error(state.staleMessage);\n\t\t}\n\t};\n\n\tconst runtime: ExtensionRuntime = {\n\t\tsendMessage: notInitialized,\n\t\tsendUserMessage: notInitialized,\n\t\tappendEntry: notInitialized,\n\t\tsetSessionName: notInitialized,\n\t\tgetSessionName: notInitialized,\n\t\tsetLabel: notInitialized,\n\t\texecuteTool: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tgetActiveTools: notInitialized,\n\t\tgetAllTools: notInitialized,\n\t\tsetActiveTools: notInitialized,\n\t\t// registerTool() is valid during extension load; refresh is only needed post-bind.\n\t\trefreshTools: () => {},\n\t\tregisterRemovedToolHint: () => {},\n\t\tregisterLazyToolActivator: () => {},\n\t\tgetCommands: notInitialized,\n\t\tsetModel: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tgetThinkingLevel: notInitialized,\n\t\tsetThinkingLevel: notInitialized,\n\t\tsetSessionModel: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tsetSessionThinkingLevel: notInitialized,\n\t\tsetSessionFastMode: notInitialized,\n\t\tflagValues: new Map(),\n\t\tpendingProviderRegistrations: [],\n\t\tpendingNativeProviderRegistrations: [],\n\t\tassertActive,\n\t\tinvalidate: (message) => {\n\t\t\tif (state.staleMessage) return;\n\t\t\tstate.staleMessage =\n\t\t\t\tmessage ??\n\t\t\t\t\"This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().\";\n\t\t\tfor (const unsubscribe of eventBusUnsubscribers) unsubscribe();\n\t\t\teventBusUnsubscribers.clear();\n\t\t},\n\t\ttrackEventBusSubscription: (unsubscribe) => {\n\t\t\tlet active = true;\n\t\t\tconst trackedUnsubscribe = () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tactive = false;\n\t\t\t\teventBusUnsubscribers.delete(trackedUnsubscribe);\n\t\t\t\tunsubscribe();\n\t\t\t};\n\t\t\teventBusUnsubscribers.add(trackedUnsubscribe);\n\t\t\treturn trackedUnsubscribe;\n\t\t},\n\t\t// Pre-bind: queue registrations so bindCore() can flush them once the\n\t\t// model registry is available. bindCore() replaces both with direct calls.\n\t\tregisterProvider: (name, config, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingProviderRegistrations.push({\n\t\t\t\tname,\n\t\t\t\tconfig,\n\t\t\t\textensionPath,\n\t\t\t\torder: nextProviderRegistrationOrder++,\n\t\t\t});\n\t\t},\n\t\tregisterNativeProvider: (provider, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingNativeProviderRegistrations.push({\n\t\t\t\tprovider,\n\t\t\t\textensionPath,\n\t\t\t\torder: nextProviderRegistrationOrder++,\n\t\t\t});\n\t\t},\n\t\tunregisterProvider: (name) => {\n\t\t\truntime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);\n\t\t\truntime.pendingNativeProviderRegistrations = runtime.pendingNativeProviderRegistrations.filter(\n\t\t\t\t(r) => r.provider.id !== name,\n\t\t\t);\n\t\t},\n\t};\n\n\treturn runtime;\n}\n\n/**\n * Drain queued pre-bind provider registrations in original call order.\n *\n * Legacy (name/config) and native registrations queue in separate arrays during\n * extension loading, each stamped with a shared sequence number. Flushers replay\n * entries ordered by that sequence so mixed registerProvider(name, config) /\n * registerProvider(provider) calls keep last-registration-wins. Clears both queues.\n */\nexport function drainPendingProviderRegistrations(runtime: ExtensionRuntime): PendingProviderRegistration[] {\n\tconst drained: PendingProviderRegistration[] = [\n\t\t...runtime.pendingProviderRegistrations.map((entry) => ({ kind: \"config\" as const, ...entry })),\n\t\t...runtime.pendingNativeProviderRegistrations.map((entry) => ({ kind: \"native\" as const, ...entry })),\n\t];\n\tdrained.sort((a, b) => a.order - b.order);\n\truntime.pendingProviderRegistrations = [];\n\truntime.pendingNativeProviderRegistrations = [];\n\treturn drained;\n}\n\n/**\n * Create the ExtensionAPI for an extension.\n * Registration methods write to the extension object.\n * Action methods delegate to the shared runtime.\n */\nfunction createExtensionAPI(\n\textension: Extension,\n\truntime: ExtensionRuntime,\n\tcwd: string,\n\teventBus: EventBus,\n): ExtensionAPI {\n\tconst api = {\n\t\tcwd,\n\n\t\t// Registration methods - write to extension\n\t\ton(event: string, handler: HandlerFn): void {\n\t\t\truntime.assertActive();\n\t\t\tconst list = extension.handlers.get(event) ?? [];\n\t\t\tlist.push(handler);\n\t\t\textension.handlers.set(event, list);\n\t\t},\n\n\t\tregisterTool(tool: ToolDefinition): void {\n\t\t\truntime.assertActive();\n\t\t\tif (tool.name === \"tool_search\" && extension.sourceInfo.source !== \"builtin\") {\n\t\t\t\tthrow new Error('Tool name \"tool_search\" is reserved for the builtin tool-search extension.');\n\t\t\t}\n\t\t\textension.tools.set(tool.name, {\n\t\t\t\tdefinition: tool,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t});\n\t\t\truntime.refreshTools();\n\t\t},\n\n\t\tregisterLazyToolActivator(activator: LazyToolActivator): void {\n\t\t\truntime.assertActive();\n\t\t\tconst activators = extension.lazyToolActivators ?? [];\n\t\t\tactivators.push(activator);\n\t\t\textension.lazyToolActivators = activators;\n\t\t\truntime.registerLazyToolActivator(activator);\n\t\t},\n\n\t\tregisterRemovedToolHint(name: string, hint: string): void {\n\t\t\truntime.assertActive();\n\t\t\tlet hints = extension.removedToolHints;\n\t\t\tif (!hints) {\n\t\t\t\thints = new Map();\n\t\t\t\textension.removedToolHints = hints;\n\t\t\t}\n\t\t\thints.set(name, hint);\n\t\t\truntime.registerRemovedToolHint(name, hint);\n\t\t},\n\n\t\tregisterFilesystemPolicy(policy: FilesystemPolicy): void {\n\t\t\truntime.assertActive();\n\t\t\tconst policies = extension.filesystemPolicies ?? [];\n\t\t\tpolicies.push(policy);\n\t\t\textension.filesystemPolicies = policies;\n\t\t},\n\n\t\tregisterCommand(name: string, options: Omit<RegisteredCommand, \"name\" | \"sourceInfo\">): void {\n\t\t\truntime.assertActive();\n\t\t\textension.commands.set(name, {\n\t\t\t\tname,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t\t...options,\n\t\t\t});\n\t\t},\n\n\t\tregisterShortcut(\n\t\t\tshortcut: KeyId,\n\t\t\toptions: {\n\t\t\t\tdescription?: string;\n\t\t\t\thandler: (ctx: import(\"./types.ts\").ExtensionContext) => Promise<void> | void;\n\t\t\t},\n\t\t): void {\n\t\t\truntime.assertActive();\n\t\t\textension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });\n\t\t},\n\n\t\tregisterFlag(\n\t\t\tname: string,\n\t\t\toptions: { description?: string; type: \"boolean\" | \"string\"; default?: boolean | string },\n\t\t): void {\n\t\t\truntime.assertActive();\n\t\t\tif (options.default !== undefined && typeof options.default !== options.type) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid default for flag \"${name}\": expected ${options.type}, got ${typeof options.default}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\textension.flags.set(name, { name, extensionPath: extension.path, ...options });\n\t\t\tif (options.default !== undefined && !runtime.flagValues.has(name)) {\n\t\t\t\truntime.flagValues.set(name, options.default);\n\t\t\t}\n\t\t},\n\n\t\tregisterMessageRenderer<T>(customType: string, renderer: MessageRenderer<T>): void {\n\t\t\truntime.assertActive();\n\t\t\textension.messageRenderers.set(customType, renderer as MessageRenderer);\n\t\t},\n\n\t\tregisterMarkdownTransformer(transformer: MarkdownTransformer): void {\n\t\t\truntime.assertActive();\n\t\t\textension.markdownTransformer = transformer;\n\t\t},\n\n\t\tregisterEntryRenderer<T>(customType: string, renderer: EntryRenderer<T>): void {\n\t\t\truntime.assertActive();\n\t\t\textension.entryRenderers ??= new Map();\n\t\t\textension.entryRenderers.set(customType, renderer as EntryRenderer);\n\t\t},\n\n\t\tregisterMcpServer(name: string, config: RegisteredMcpServerDeclaration[\"config\"]): void {\n\t\t\truntime.assertActive();\n\t\t\tconst error = validateMcpServerDeclaration(name, config);\n\t\t\tif (error) {\n\t\t\t\tthrow new Error(error);\n\t\t\t}\n\t\t\textension.mcpServers.set(name, {\n\t\t\t\tname,\n\t\t\t\tconfig,\n\t\t\t\textensionPath: extension.path,\n\t\t\t\tregistrationCwd: extension.registrationCwd,\n\t\t\t});\n\t\t},\n\n\t\t// Flag access - checks extension registered it, reads from runtime\n\t\tgetFlag(name: string): boolean | string | undefined {\n\t\t\truntime.assertActive();\n\t\t\tif (!extension.flags.has(name)) return undefined;\n\t\t\treturn runtime.flagValues.get(name);\n\t\t},\n\n\t\t// Action methods - delegate to shared runtime\n\t\tsendMessage(message, options): void {\n\t\t\truntime.assertActive();\n\t\t\truntime.sendMessage(message, options);\n\t\t},\n\n\t\tsendUserMessage(content, options): void {\n\t\t\truntime.assertActive();\n\t\t\truntime.sendUserMessage(content, options);\n\t\t},\n\n\t\tappendEntry(customType: string, data?: unknown): void {\n\t\t\truntime.assertActive();\n\t\t\truntime.appendEntry(customType, data);\n\t\t},\n\n\t\tsetSessionName(name: string): void {\n\t\t\truntime.assertActive();\n\t\t\truntime.setSessionName(name);\n\t\t},\n\n\t\tgetSessionName(): string | undefined {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.getSessionName();\n\t\t},\n\n\t\tsetLabel(entryId: string, label: string | undefined): void {\n\t\t\truntime.assertActive();\n\t\t\truntime.setLabel(entryId, label);\n\t\t},\n\n\t\texec(command: string, args: string[], options?: ExecOptions) {\n\t\t\truntime.assertActive();\n\t\t\treturn execCommand(command, args, options?.cwd ?? cwd, options);\n\t\t},\n\n\t\texecuteTool(toolName, params, options) {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.executeTool(toolName, params, options);\n\t\t},\n\n\t\tgetActiveTools(): string[] {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.getActiveTools();\n\t\t},\n\n\t\tgetAllTools() {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.getAllTools();\n\t\t},\n\n\t\tsetActiveTools(toolNames: string[]): void {\n\t\t\truntime.assertActive();\n\t\t\truntime.setActiveTools(toolNames);\n\t\t},\n\n\t\tgetCommands() {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.getCommands();\n\t\t},\n\n\t\tsetModel(model) {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.setModel(model);\n\t\t},\n\n\t\tgetThinkingLevel() {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.getThinkingLevel();\n\t\t},\n\n\t\tsetThinkingLevel(level) {\n\t\t\truntime.assertActive();\n\t\t\truntime.setThinkingLevel(level);\n\t\t},\n\n\t\tsetSessionModel(model) {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.setSessionModel(model);\n\t\t},\n\n\t\tsetSessionThinkingLevel(level) {\n\t\t\truntime.assertActive();\n\t\t\truntime.setSessionThinkingLevel(level);\n\t\t},\n\n\t\tsetSessionFastMode(enabled) {\n\t\t\truntime.assertActive();\n\t\t\truntime.setSessionFastMode(enabled);\n\t\t},\n\n\t\tregisterProvider(providerOrName: Provider | string, config?: ProviderConfig) {\n\t\t\truntime.assertActive();\n\t\t\tif (typeof providerOrName === \"string\") {\n\t\t\t\tif (!config) throw new Error(\"Provider config is required when registering by name\");\n\t\t\t\truntime.registerProvider(providerOrName, config, extension.path);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\truntime.registerNativeProvider(providerOrName, extension.path);\n\t\t},\n\n\t\tunregisterProvider(name: string) {\n\t\t\truntime.assertActive();\n\t\t\truntime.unregisterProvider(name, extension.path);\n\t\t},\n\n\t\trpc: {\n\t\t\temit(name, data) {\n\t\t\t\truntime.assertActive();\n\t\t\t\tconst normalizedName = name.trim();\n\t\t\t\tif (normalizedName.length === 0) throw new Error(\"RPC extension event name must not be empty\");\n\t\t\t\teventBus.emit(EXTENSION_RPC_EVENT_CHANNEL, {\n\t\t\t\t\tname: normalizedName,\n\t\t\t\t\tdata,\n\t\t\t\t} satisfies ExtensionRpcEvent);\n\t\t\t},\n\t\t\thandle(name, handler) {\n\t\t\t\truntime.assertActive();\n\t\t\t\tconst normalizedName = name.trim();\n\t\t\t\tif (normalizedName.length === 0) throw new Error(\"RPC extension request name must not be empty\");\n\t\t\t\tconst handlers = extension.rpcHandlers ?? new Map();\n\t\t\t\tif (handlers.has(normalizedName)) {\n\t\t\t\t\tthrow new Error(`RPC extension request handler already registered: ${normalizedName}`);\n\t\t\t\t}\n\t\t\t\thandlers.set(normalizedName, handler);\n\t\t\t\textension.rpcHandlers = handlers;\n\t\t\t},\n\t\t},\n\t\tevents: {\n\t\t\temit(channel, data) {\n\t\t\t\truntime.assertActive();\n\t\t\t\teventBus.emit(channel, data);\n\t\t\t},\n\t\t\ton(channel, handler) {\n\t\t\t\truntime.assertActive();\n\t\t\t\treturn runtime.trackEventBusSubscription(eventBus.on(channel, handler));\n\t\t\t},\n\t\t},\n\t} as ExtensionAPI;\n\n\treturn api;\n}\n\nfunction createExtensionModuleImporter(): ExtensionModuleImporter {\n\treturn createJiti(import.meta.url, {\n\t\tmoduleCache: false,\n\t\t// Compiled binaries use modules embedded in the executable. Source TypeScript\n\t\t// reuses host modules and root tsconfig paths. Built Node uses dist aliases.\n\t\t...(isBunBinary || isNodeSeaBinary\n\t\t\t? { virtualModules: VIRTUAL_MODULES, tryNative: false }\n\t\t\t: isTypeScriptSourceRuntime\n\t\t\t\t? { alias: getAliases(), virtualModules: VIRTUAL_MODULES, tsconfigPaths: true }\n\t\t\t\t: { alias: getAliases() }),\n\t});\n}\n\nfunction isCurrentCacheToken(cacheToken: ExtensionCacheToken | undefined): cacheToken is ExtensionCacheToken {\n\tif (cacheToken === undefined) return false;\n\tconst cacheEntry = extensionCacheByCwd.get(cacheToken.cwd);\n\treturn cacheEntry?.generation === cacheToken.generation;\n}\n\nasync function loadExtensionModule(\n\textensionPath: string,\n\timporter: ExtensionModuleImporter,\n\tcacheToken?: ExtensionCacheToken,\n) {\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\tconst cachedFactory = extensionCacheByCwd.get(cacheToken.cwd)?.factories.get(extensionPath);\n\t\tif (cachedFactory) {\n\t\t\treturn cachedFactory;\n\t\t}\n\t}\n\n\tconst module = await importer.import(extensionPath, { default: true });\n\tconst factory = module as ExtensionFactory;\n\tif (typeof factory !== \"function\") {\n\t\treturn undefined;\n\t}\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\textensionCacheByCwd.get(cacheToken.cwd)?.factories.set(extensionPath, factory);\n\t}\n\treturn factory;\n}\n\n/**\n * Create an Extension object with empty collections.\n */\nfunction createExtension(extensionPath: string, resolvedPath: string, registrationCwd: string): Extension {\n\tconst source =\n\t\textensionPath.startsWith(\"<\") && extensionPath.endsWith(\">\")\n\t\t\t? extensionPath.slice(1, -1).split(\":\")[0] || \"temporary\"\n\t\t\t: \"local\";\n\tconst baseDir = extensionPath.startsWith(\"<\") ? undefined : path.dirname(resolvedPath);\n\n\treturn {\n\t\tpath: extensionPath,\n\t\tresolvedPath,\n\t\tsourceInfo: createSyntheticSourceInfo(extensionPath, { source, baseDir }),\n\t\thandlers: new Map(),\n\t\ttools: new Map(),\n\t\tremovedToolHints: new Map(),\n\t\tlazyToolActivators: [],\n\t\tfilesystemPolicies: [],\n\t\tmessageRenderers: new Map(),\n\t\tentryRenderers: undefined,\n\t\tcommands: new Map(),\n\t\trpcHandlers: new Map(),\n\t\tflags: new Map(),\n\t\tshortcuts: new Map(),\n\t\tmcpServers: new Map(),\n\t\tregistrationCwd,\n\t};\n}\n\nasync function loadExtension(\n\textensionPath: string,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\tgetImporter: () => ExtensionModuleImporter,\n\tfactoryResolver?: ExtensionFactoryResolver,\n\tcacheToken?: ExtensionCacheToken,\n): Promise<{ extension: Extension | null; error: string | null }> {\n\tconst resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });\n\n\ttry {\n\t\tconst factory =\n\t\t\tfactoryResolver?.(extensionPath, resolvedPath) ??\n\t\t\t(await loadExtensionModule(resolvedPath, getImporter(), cacheToken));\n\t\ttime(`${extensionPath} module import`, \"extensions\");\n\t\tif (!factory) {\n\t\t\treturn { extension: null, error: `Extension does not export a valid factory function: ${extensionPath}` };\n\t\t}\n\n\t\tconst extension = createExtension(extensionPath, resolvedPath, cwd);\n\t\tconst api = createExtensionAPI(extension, runtime, cwd, eventBus);\n\t\tawait factory(api);\n\t\ttime(`${extensionPath} factory`, \"extensions\");\n\n\t\treturn { extension, error: null };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\treturn { extension: null, error: `Failed to load extension: ${message}` };\n\t}\n}\n\n/**\n * Create an Extension from an inline factory function.\n */\nexport async function loadExtensionFromFactory(\n\tfactory: ExtensionFactory,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\textensionPath = \"<inline>\",\n): Promise<Extension> {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst extension = createExtension(extensionPath, extensionPath, resolvedCwd);\n\tconst api = createExtensionAPI(extension, runtime, resolvedCwd, eventBus);\n\tawait factory(api);\n\ttime(`${extensionPath} factory`, \"extensions\");\n\treturn extension;\n}\n\n/**\n * Load extensions from paths.\n */\nasync function loadExtensionsInternal(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n\toptions?: { factoryResolver?: ExtensionFactoryResolver },\n\tuseCache = false,\n): Promise<LoadExtensionsResult> {\n\tconst extensions: Extension[] = [];\n\tconst errors: Array<{ path: string; error: string }> = [];\n\tconst cacheToken = useCache ? useExtensionCacheCwd(cwd) : undefined;\n\tconst resolvedCwd = cacheToken?.cwd ?? resolvePath(cwd);\n\tconst resolvedEventBus = eventBus ?? createEventBus();\n\tconst resolvedRuntime = runtime ?? createExtensionRuntime();\n\tlet importer: ExtensionModuleImporter | undefined;\n\tconst getImporter = () => {\n\t\timporter ??= createExtensionModuleImporter();\n\t\treturn importer;\n\t};\n\n\tfor (const extPath of paths) {\n\t\tconst { extension, error } = await loadExtension(\n\t\t\textPath,\n\t\t\tresolvedCwd,\n\t\t\tresolvedEventBus,\n\t\t\tresolvedRuntime,\n\t\t\tgetImporter,\n\t\t\toptions?.factoryResolver,\n\t\t\tcacheToken,\n\t\t);\n\n\t\tif (error) {\n\t\t\terrors.push({ path: extPath, error });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (extension) {\n\t\t\textensions.push(extension);\n\t\t}\n\t}\n\n\treturn {\n\t\textensions,\n\t\terrors,\n\t\truntime: resolvedRuntime,\n\t\teventBus: resolvedEventBus,\n\t};\n}\n\nexport async function loadExtensions(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n\toptions?: { factoryResolver?: ExtensionFactoryResolver },\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime, options);\n}\n\nexport async function loadExtensionsCached(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime, undefined, true);\n}\n\nfunction isExtensionFile(name: string): boolean {\n\treturn name.endsWith(\".ts\") || name.endsWith(\".js\");\n}\n\n/**\n * Resolve extension entry points from a directory.\n *\n * Checks for:\n * 1. package.json with \"pi.extensions\" field -> returns declared paths\n * 2. index.ts or index.js -> returns the index file\n *\n * Returns resolved paths or null if no entry points found.\n */\nfunction resolveExtensionEntries(dir: string): string[] | null {\n\t// Check for package.json with \"pi\" field first\n\tconst packageJsonPath = path.join(dir, \"package.json\");\n\tif (fs.existsSync(packageJsonPath)) {\n\t\tconst manifest = readPiManifest(packageJsonPath);\n\t\tif (manifest?.extensions?.length) {\n\t\t\tconst entries: string[] = [];\n\t\t\tfor (const extPath of manifest.extensions) {\n\t\t\t\tconst resolvedExtPath = path.resolve(dir, extPath);\n\t\t\t\tif (fs.existsSync(resolvedExtPath)) {\n\t\t\t\t\tentries.push(resolvedExtPath);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entries.length > 0) {\n\t\t\t\treturn entries;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for index.ts or index.js\n\tconst indexTs = path.join(dir, \"index.ts\");\n\tconst indexJs = path.join(dir, \"index.js\");\n\tif (fs.existsSync(indexTs)) {\n\t\treturn [indexTs];\n\t}\n\tif (fs.existsSync(indexJs)) {\n\t\treturn [indexJs];\n\t}\n\n\treturn null;\n}\n\n/**\n * Discover extensions in a directory.\n *\n * Discovery rules:\n * 1. Direct files: `extensions/*.ts` or `*.js` → load\n * 2. Subdirectory with index: `extensions/* /index.ts` or `index.js` → load\n * 3. Subdirectory with package.json: `extensions/* /package.json` with \"pi\" field → load what it declares\n *\n * No recursion beyond one level. Complex packages must use package.json manifest.\n */\nfunction discoverExtensionsInDir(dir: string): string[] {\n\tif (!fs.existsSync(dir)) {\n\t\treturn [];\n\t}\n\n\tconst discovered: string[] = [];\n\n\ttry {\n\t\tconst entries = fs.readdirSync(dir, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst entryPath = path.join(dir, entry.name);\n\n\t\t\t// 1. Direct files: *.ts or *.js\n\t\t\tif ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {\n\t\t\t\tdiscovered.push(entryPath);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 2 & 3. Subdirectories\n\t\t\tif (entry.isDirectory() || entry.isSymbolicLink()) {\n\t\t\t\tconst entries = resolveExtensionEntries(entryPath);\n\t\t\t\tif (entries) {\n\t\t\t\t\tdiscovered.push(...entries);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\treturn [];\n\t}\n\n\treturn discovered;\n}\n\n/**\n * Discover and load extensions from standard locations.\n */\nexport async function discoverAndLoadExtensions(\n\tconfiguredPaths: string[],\n\tcwd: string,\n\tagentDir: string = getAgentDir(),\n\teventBus?: EventBus,\n): Promise<LoadExtensionsResult> {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst resolvedAgentDir = resolvePath(agentDir);\n\tconst allPaths: string[] = [];\n\tconst seen = new Set<string>();\n\n\tconst addPaths = (paths: string[]) => {\n\t\tfor (const p of paths) {\n\t\t\tconst resolved = path.resolve(p);\n\t\t\tif (!seen.has(resolved)) {\n\t\t\t\tseen.add(resolved);\n\t\t\t\tallPaths.push(p);\n\t\t\t}\n\t\t}\n\t};\n\n\t// 1. Project-local extensions: cwd/${CONFIG_DIR_NAME}/extensions/\n\tconst localExtDir = path.join(resolvedCwd, CONFIG_DIR_NAME, \"extensions\");\n\taddPaths(discoverExtensionsInDir(localExtDir));\n\n\t// 2. Global extensions: agentDir/extensions/\n\tconst globalExtDir = path.join(resolvedAgentDir, \"extensions\");\n\taddPaths(discoverExtensionsInDir(globalExtDir));\n\n\t// 3. Explicitly configured paths\n\tfor (const p of configuredPaths) {\n\t\tconst resolved = resolvePath(p, resolvedCwd, { normalizeUnicodeSpaces: true });\n\t\tif (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {\n\t\t\t// Check for package.json with pi manifest or index.ts\n\t\t\tconst entries = resolveExtensionEntries(resolved);\n\t\t\tif (entries) {\n\t\t\t\taddPaths(entries);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// No explicit entries - discover individual files in directory\n\t\t\taddPaths(discoverExtensionsInDir(resolved));\n\t\t\tcontinue;\n\t\t}\n\n\t\taddPaths([resolved]);\n\t}\n\n\treturn loadExtensions(allPaths, resolvedCwd, eventBus);\n}\n"]}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"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","sourcesContent":["// allow: SIZE_OK - extension loading, bundled aliases, and discovery are pre-existing cohesive runtime glue; this branch only scopes the extension cache by cwd.\n/**\n * Extension loader - loads TypeScript extension modules using jiti.\n *\n */\n\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport * as _bundledPiAgentCore from \"@earendil-works/pi-agent-core\";\nimport type { Provider } from \"@earendil-works/pi-ai\";\nimport * as _bundledPiAiCompat from \"@earendil-works/pi-ai/compat\";\nimport * as _bundledPiAiOauth from \"@earendil-works/pi-ai/oauth\";\nimport * as _bundledPiAiProviders from \"@earendil-works/pi-ai/providers/all\";\nimport type { KeyId } from \"@earendil-works/pi-tui\";\nimport * as _bundledPiTui from \"@earendil-works/pi-tui\";\nimport { createJiti } from \"jiti/static\";\n// Static imports of packages that extensions may use.\n// These MUST be static so Bun bundles them into the compiled binary.\n// The virtualModules option then makes them available to extensions.\nimport * as _bundledTypebox from \"typebox\";\nimport * as _bundledTypeboxCompile from \"typebox/compile\";\nimport * as _bundledTypeboxValue from \"typebox/value\";\nimport { CONFIG_DIR_NAME, getAgentDir, isBunBinary } from \"../../config.ts\";\n// NOTE: This import works because loader.ts exports are NOT re-exported from index.ts,\n// avoiding a circular dependency. Extensions can import from @code-yeongyu/senpi.\nimport * as _bundledPiCodingAgent from \"../../index.ts\";\nimport { resolvePath } from \"../../utils/paths.ts\";\nimport { createEventBus, type EventBus, EXTENSION_RPC_EVENT_CHANNEL, type ExtensionRpcEvent } from \"../event-bus.ts\";\nimport type { ExecOptions } from \"../exec.ts\";\nimport { execCommand } from \"../exec.ts\";\nimport { readPiManifest } from \"../pi-manifest.ts\";\nimport { createSyntheticSourceInfo } from \"../source-info.ts\";\nimport { time } from \"../timings.ts\";\nimport { validateMcpServerDeclaration } from \"./builtin/mcp/config-schema.ts\";\nimport type {\n\tEntryRenderer,\n\tExtension,\n\tExtensionAPI,\n\tExtensionFactory,\n\tExtensionRuntime,\n\tFilesystemPolicy,\n\tLazyToolActivator,\n\tLoadExtensionsResult,\n\tMarkdownTransformer,\n\tMessageRenderer,\n\tPendingProviderRegistration,\n\tProviderConfig,\n\tRegisteredCommand,\n\tRegisteredMcpServerDeclaration,\n\tToolDefinition,\n} from \"./types.ts\";\n\n/** Modules available to extensions via virtualModules (for compiled binaries) */\nconst VIRTUAL_MODULES: Record<string, unknown> = {\n\ttypebox: _bundledTypebox,\n\t\"typebox/compile\": _bundledTypeboxCompile,\n\t\"typebox/value\": _bundledTypeboxValue,\n\t\"@sinclair/typebox\": _bundledTypebox,\n\t\"@sinclair/typebox/compile\": _bundledTypeboxCompile,\n\t\"@sinclair/typebox/value\": _bundledTypeboxValue,\n\t\"@earendil-works/pi-agent-core\": _bundledPiAgentCore,\n\t\"@earendil-works/pi-tui\": _bundledPiTui,\n\t// Extensions resolve the pi-ai root to the compat entrypoint (a strict\n\t// superset of the core entrypoint): existing extensions using the old\n\t// global API keep working at runtime until compat is removed.\n\t\"@earendil-works/pi-ai\": _bundledPiAiCompat,\n\t\"@earendil-works/pi-ai/compat\": _bundledPiAiCompat,\n\t\"@earendil-works/pi-ai/oauth\": _bundledPiAiOauth,\n\t\"@earendil-works/pi-ai/providers/all\": _bundledPiAiProviders,\n\t\"@earendil-works/pi-coding-agent\": _bundledPiCodingAgent,\n\t\"@mariozechner/pi-agent-core\": _bundledPiAgentCore,\n\t\"@mariozechner/pi-tui\": _bundledPiTui,\n\t\"@mariozechner/pi-ai\": _bundledPiAiCompat,\n\t\"@mariozechner/pi-ai/compat\": _bundledPiAiCompat,\n\t\"@mariozechner/pi-ai/oauth\": _bundledPiAiOauth,\n\t\"@mariozechner/pi-ai/providers/all\": _bundledPiAiProviders,\n\t\"@mariozechner/pi-coding-agent\": _bundledPiCodingAgent,\n\t\"@code-yeongyu/senpi\": _bundledPiCodingAgent,\n};\n\nconst require = createRequire(import.meta.url);\n\nconst isNodeSeaBinary =\n\t(\"sea\" in process.features && process.features.sea === true) ||\n\tprocess.getBuiltinModule(\"node:sea\")?.isSea() === true;\ndeclare const PI_BUNDLED_NODE: boolean;\nconst isBundledNode = typeof PI_BUNDLED_NODE !== \"undefined\" && PI_BUNDLED_NODE;\nconst isTypeScriptSourceRuntime = !isBunBinary && path.extname(fileURLToPath(import.meta.url)) === \".ts\";\n\n/**\n * Get aliases for jiti (used in built Node.js mode).\n * In compiled binary mode, virtualModules is used instead.\n */\nlet _aliases: Record<string, string> | null = null;\n\nfunction getAliases(): Record<string, string> {\n\tif (_aliases) return _aliases;\n\n\tconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\tconst typeboxEntry = require.resolve(\"typebox\");\n\tconst typeboxCompileEntry = require.resolve(\"typebox/compile\");\n\tconst typeboxValueEntry = require.resolve(\"typebox/value\");\n\n\tconst codingAgentPackageRoot = path.resolve(__dirname, \"../../..\");\n\tconst packagesRoot = path.dirname(codingAgentPackageRoot);\n\tconst resolveWorkspaceOrBundled = (\n\t\tpackageName: string,\n\t\tpackageEntryRelativePath: string,\n\t\tworkspaceRelativePath: string,\n\t\tsourceRelativePath: string,\n\t\tspecifier: string,\n\t): string => {\n\t\tconst bundledPath = path.join(codingAgentPackageRoot, \"node_modules\", packageName, packageEntryRelativePath);\n\t\tif (fs.existsSync(bundledPath)) {\n\t\t\treturn bundledPath;\n\t\t}\n\t\tconst workspacePath = path.join(packagesRoot, workspaceRelativePath);\n\t\tif (fs.existsSync(workspacePath)) {\n\t\t\treturn workspacePath;\n\t\t}\n\t\tconst sourcePath = path.join(packagesRoot, sourceRelativePath);\n\t\tif (fs.existsSync(sourcePath)) {\n\t\t\treturn sourcePath;\n\t\t}\n\t\treturn typeof import.meta.resolve === \"function\"\n\t\t\t? fileURLToPath(import.meta.resolve(specifier))\n\t\t\t: require.resolve(specifier);\n\t};\n\n\tconst piCodingAgentDistEntry = path.join(codingAgentPackageRoot, \"dist/index.js\");\n\tconst piCodingAgentSourceEntry = path.join(codingAgentPackageRoot, \"src/index.ts\");\n\tconst piCodingAgentEntry = fs.existsSync(piCodingAgentDistEntry) ? piCodingAgentDistEntry : piCodingAgentSourceEntry;\n\tconst piAgentCoreEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-agent-core\",\n\t\t\"dist/index.js\",\n\t\t\"agent/dist/index.js\",\n\t\t\"agent/src/index.ts\",\n\t\t\"@earendil-works/pi-agent-core\",\n\t);\n\tconst piTuiEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-tui\",\n\t\t\"dist/index.js\",\n\t\t\"tui/dist/index.js\",\n\t\t\"tui/src/index.ts\",\n\t\t\"@earendil-works/pi-tui\",\n\t);\n\tconst piAiCompatEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-ai\",\n\t\t\"dist/compat.js\",\n\t\t\"ai/dist/compat.js\",\n\t\t\"ai/src/compat.ts\",\n\t\t\"@earendil-works/pi-ai/compat\",\n\t);\n\tconst piAiOauthEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-ai\",\n\t\t\"dist/oauth.js\",\n\t\t\"ai/dist/oauth.js\",\n\t\t\"ai/src/oauth.ts\",\n\t\t\"@earendil-works/pi-ai/oauth\",\n\t);\n\tconst piAiProvidersEntry = resolveWorkspaceOrBundled(\n\t\t\"@earendil-works/pi-ai\",\n\t\t\"dist/providers/all.js\",\n\t\t\"ai/dist/providers/all.js\",\n\t\t\"ai/src/providers/all.ts\",\n\t\t\"@earendil-works/pi-ai/providers/all\",\n\t);\n\n\t_aliases = {\n\t\t\"@earendil-works/pi-coding-agent\": piCodingAgentEntry,\n\t\t\"@earendil-works/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@earendil-works/pi-tui\": piTuiEntry,\n\t\t\"@earendil-works/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@earendil-works/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@earendil-works/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@earendil-works/pi-ai\": piAiCompatEntry,\n\t\t\"@code-yeongyu/senpi\": piCodingAgentEntry,\n\t\t\"@mariozechner/pi-coding-agent\": piCodingAgentEntry,\n\t\t\"@mariozechner/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@mariozechner/pi-tui\": piTuiEntry,\n\t\t\"@mariozechner/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@mariozechner/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@mariozechner/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@mariozechner/pi-ai\": piAiCompatEntry,\n\t\ttypebox: typeboxEntry,\n\t\t\"typebox/compile\": typeboxCompileEntry,\n\t\t\"typebox/value\": typeboxValueEntry,\n\t\t\"@sinclair/typebox\": typeboxEntry,\n\t\t\"@sinclair/typebox/compile\": typeboxCompileEntry,\n\t\t\"@sinclair/typebox/value\": typeboxValueEntry,\n\t};\n\n\treturn _aliases;\n}\n\ntype HandlerFn = (...args: unknown[]) => Promise<unknown>;\ntype ExtensionModuleImporter = ReturnType<typeof createJiti>;\nexport type ExtensionFactoryResolver = (extensionPath: string, resolvedPath: string) => ExtensionFactory | undefined;\n\nconst MAX_EXTENSION_CACHE_CWD_ENTRIES = 16;\nlet nextExtensionCacheGeneration = 0;\nconst extensionCacheByCwd = new Map<string, ExtensionCacheEntry>();\n\ninterface ExtensionCacheToken {\n\tcwd: string;\n\tgeneration: number;\n}\n\ninterface ExtensionCacheEntry {\n\tcwd: string;\n\tgeneration: number;\n\tfactories: Map<string, ExtensionFactory>;\n}\n\nexport function clearExtensionCache(): void {\n\textensionCacheByCwd.clear();\n}\n\nfunction useExtensionCacheCwd(cwd: string): ExtensionCacheToken {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst existingEntry = extensionCacheByCwd.get(resolvedCwd);\n\tif (existingEntry) {\n\t\textensionCacheByCwd.delete(resolvedCwd);\n\t\textensionCacheByCwd.set(resolvedCwd, existingEntry);\n\t\treturn { cwd: existingEntry.cwd, generation: existingEntry.generation };\n\t}\n\tif (extensionCacheByCwd.size >= MAX_EXTENSION_CACHE_CWD_ENTRIES) {\n\t\tconst leastRecentlyUsedCwd = extensionCacheByCwd.keys().next().value;\n\t\tif (leastRecentlyUsedCwd !== undefined) {\n\t\t\textensionCacheByCwd.delete(leastRecentlyUsedCwd);\n\t\t}\n\t}\n\tconst entry: ExtensionCacheEntry = {\n\t\tcwd: resolvedCwd,\n\t\tgeneration: nextExtensionCacheGeneration++,\n\t\tfactories: new Map<string, ExtensionFactory>(),\n\t};\n\textensionCacheByCwd.set(resolvedCwd, entry);\n\treturn { cwd: entry.cwd, generation: entry.generation };\n}\n\n/**\n * Create a runtime with throwing stubs for action methods.\n * Runner.bindCore() replaces these with real implementations.\n */\nexport function createExtensionRuntime(): ExtensionRuntime {\n\tconst notInitialized = () => {\n\t\tthrow new Error(\"Extension runtime not initialized. Action methods cannot be called during extension loading.\");\n\t};\n\tconst state: { staleMessage?: string } = {};\n\t// Shared sequence across the legacy and native pre-bind queues so flushers\n\t// can replay registrations in original call order (last-registration-wins).\n\tlet nextProviderRegistrationOrder = 0;\n\tconst eventBusUnsubscribers = new Set<() => void>();\n\tconst assertActive = () => {\n\t\tif (state.staleMessage) {\n\t\t\tthrow new Error(state.staleMessage);\n\t\t}\n\t};\n\n\tconst runtime: ExtensionRuntime = {\n\t\tsendMessage: notInitialized,\n\t\tsendUserMessage: notInitialized,\n\t\tappendEntry: notInitialized,\n\t\tsetSessionName: notInitialized,\n\t\tgetSessionName: notInitialized,\n\t\tsetLabel: notInitialized,\n\t\texecuteTool: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tgetActiveTools: notInitialized,\n\t\tgetAllTools: notInitialized,\n\t\tsetActiveTools: notInitialized,\n\t\t// registerTool() is valid during extension load; refresh is only needed post-bind.\n\t\trefreshTools: () => {},\n\t\tregisterRemovedToolHint: () => {},\n\t\tregisterLazyToolActivator: () => {},\n\t\tgetCommands: notInitialized,\n\t\tsetModel: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tgetThinkingLevel: notInitialized,\n\t\tsetThinkingLevel: notInitialized,\n\t\tsetSessionModel: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tsetSessionThinkingLevel: notInitialized,\n\t\tsetSessionFastMode: notInitialized,\n\t\tflagValues: new Map(),\n\t\tpendingProviderRegistrations: [],\n\t\tpendingNativeProviderRegistrations: [],\n\t\tassertActive,\n\t\tinvalidate: (message) => {\n\t\t\tif (state.staleMessage) return;\n\t\t\tstate.staleMessage =\n\t\t\t\tmessage ??\n\t\t\t\t\"This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().\";\n\t\t\tfor (const unsubscribe of eventBusUnsubscribers) unsubscribe();\n\t\t\teventBusUnsubscribers.clear();\n\t\t},\n\t\ttrackEventBusSubscription: (unsubscribe) => {\n\t\t\tlet active = true;\n\t\t\tconst trackedUnsubscribe = () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tactive = false;\n\t\t\t\teventBusUnsubscribers.delete(trackedUnsubscribe);\n\t\t\t\tunsubscribe();\n\t\t\t};\n\t\t\teventBusUnsubscribers.add(trackedUnsubscribe);\n\t\t\treturn trackedUnsubscribe;\n\t\t},\n\t\t// Pre-bind: queue registrations so bindCore() can flush them once the\n\t\t// model registry is available. bindCore() replaces both with direct calls.\n\t\tregisterProvider: (name, config, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingProviderRegistrations.push({\n\t\t\t\tname,\n\t\t\t\tconfig,\n\t\t\t\textensionPath,\n\t\t\t\torder: nextProviderRegistrationOrder++,\n\t\t\t});\n\t\t},\n\t\tregisterNativeProvider: (provider, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingNativeProviderRegistrations.push({\n\t\t\t\tprovider,\n\t\t\t\textensionPath,\n\t\t\t\torder: nextProviderRegistrationOrder++,\n\t\t\t});\n\t\t},\n\t\tunregisterProvider: (name) => {\n\t\t\truntime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);\n\t\t\truntime.pendingNativeProviderRegistrations = runtime.pendingNativeProviderRegistrations.filter(\n\t\t\t\t(r) => r.provider.id !== name,\n\t\t\t);\n\t\t},\n\t};\n\n\treturn runtime;\n}\n\n/**\n * Drain queued pre-bind provider registrations in original call order.\n *\n * Legacy (name/config) and native registrations queue in separate arrays during\n * extension loading, each stamped with a shared sequence number. Flushers replay\n * entries ordered by that sequence so mixed registerProvider(name, config) /\n * registerProvider(provider) calls keep last-registration-wins. Clears both queues.\n */\nexport function drainPendingProviderRegistrations(runtime: ExtensionRuntime): PendingProviderRegistration[] {\n\tconst drained: PendingProviderRegistration[] = [\n\t\t...runtime.pendingProviderRegistrations.map((entry) => ({ kind: \"config\" as const, ...entry })),\n\t\t...runtime.pendingNativeProviderRegistrations.map((entry) => ({ kind: \"native\" as const, ...entry })),\n\t];\n\tdrained.sort((a, b) => a.order - b.order);\n\truntime.pendingProviderRegistrations = [];\n\truntime.pendingNativeProviderRegistrations = [];\n\treturn drained;\n}\n\n/**\n * Create the ExtensionAPI for an extension.\n * Registration methods write to the extension object.\n * Action methods delegate to the shared runtime.\n */\nfunction createExtensionAPI(\n\textension: Extension,\n\truntime: ExtensionRuntime,\n\tcwd: string,\n\teventBus: EventBus,\n): { api: ExtensionAPI; commit: () => void; discard: () => void } {\n\tconst pendingFlagValues = new Map<string, boolean | string>();\n\tconst pendingRuntimeChanges: Array<() => void> = [];\n\tconst loadingUnsubscribers: Array<() => void> = [];\n\tlet state: \"loading\" | \"active\" | \"failed\" = \"loading\";\n\tconst assertActive = () => {\n\t\tif (state === \"failed\") {\n\t\t\tthrow new Error(`Extension \"${extension.path}\" failed to load and its API is no longer active.`);\n\t\t}\n\t\truntime.assertActive();\n\t};\n\tconst applyRuntimeChange = (change: () => void) => {\n\t\tif (state === \"loading\") pendingRuntimeChanges.push(change);\n\t\telse change();\n\t};\n\tconst clearPending = () => {\n\t\tpendingFlagValues.clear();\n\t\tpendingRuntimeChanges.length = 0;\n\t\tloadingUnsubscribers.length = 0;\n\t};\n\n\tconst api = {\n\t\tcwd,\n\n\t\t// Registration methods - write to extension\n\t\ton(event: string, handler: HandlerFn): void {\n\t\t\tassertActive();\n\t\t\tconst list = extension.handlers.get(event) ?? [];\n\t\t\tlist.push(handler);\n\t\t\textension.handlers.set(event, list);\n\t\t},\n\n\t\tregisterTool(tool: ToolDefinition): void {\n\t\t\truntime.assertActive();\n\t\t\tif (tool.name === \"tool_search\" && extension.sourceInfo.source !== \"builtin\") {\n\t\t\t\tthrow new Error('Tool name \"tool_search\" is reserved for the builtin tool-search extension.');\n\t\t\t}\n\t\t\textension.tools.set(tool.name, {\n\t\t\t\tdefinition: tool,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t});\n\t\t\truntime.refreshTools();\n\t\t},\n\n\t\tregisterLazyToolActivator(activator: LazyToolActivator): void {\n\t\t\truntime.assertActive();\n\t\t\tconst activators = extension.lazyToolActivators ?? [];\n\t\t\tactivators.push(activator);\n\t\t\textension.lazyToolActivators = activators;\n\t\t\truntime.registerLazyToolActivator(activator);\n\t\t},\n\n\t\tregisterRemovedToolHint(name: string, hint: string): void {\n\t\t\truntime.assertActive();\n\t\t\tlet hints = extension.removedToolHints;\n\t\t\tif (!hints) {\n\t\t\t\thints = new Map();\n\t\t\t\textension.removedToolHints = hints;\n\t\t\t}\n\t\t\thints.set(name, hint);\n\t\t\truntime.registerRemovedToolHint(name, hint);\n\t\t},\n\n\t\tregisterFilesystemPolicy(policy: FilesystemPolicy): void {\n\t\t\truntime.assertActive();\n\t\t\tconst policies = extension.filesystemPolicies ?? [];\n\t\t\tpolicies.push(policy);\n\t\t\textension.filesystemPolicies = policies;\n\t\t},\n\n\t\tregisterCommand(name: string, options: Omit<RegisteredCommand, \"name\" | \"sourceInfo\">): void {\n\t\t\tassertActive();\n\t\t\textension.commands.set(name, {\n\t\t\t\tname,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t\t...options,\n\t\t\t});\n\t\t},\n\n\t\tregisterShortcut(\n\t\t\tshortcut: KeyId,\n\t\t\toptions: {\n\t\t\t\tdescription?: string;\n\t\t\t\thandler: (ctx: import(\"./types.ts\").ExtensionContext) => Promise<void> | void;\n\t\t\t},\n\t\t): void {\n\t\t\tassertActive();\n\t\t\textension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });\n\t\t},\n\n\t\tregisterFlag(\n\t\t\tname: string,\n\t\t\toptions: { description?: string; type: \"boolean\" | \"string\"; default?: boolean | string },\n\t\t): void {\n\t\t\tassertActive();\n\t\t\tif (options.default !== undefined && typeof options.default !== options.type) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid default for flag \"${name}\": expected ${options.type}, got ${typeof options.default}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\textension.flags.set(name, { name, extensionPath: extension.path, ...options });\n\t\t\tif (options.default !== undefined && !runtime.flagValues.has(name)) {\n\t\t\t\tif (state === \"loading\") {\n\t\t\t\t\tif (!pendingFlagValues.has(name)) pendingFlagValues.set(name, options.default);\n\t\t\t\t} else {\n\t\t\t\t\truntime.flagValues.set(name, options.default);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tregisterMessageRenderer<T>(customType: string, renderer: MessageRenderer<T>): void {\n\t\t\tassertActive();\n\t\t\textension.messageRenderers.set(customType, renderer as MessageRenderer);\n\t\t},\n\n\t\tregisterMarkdownTransformer(transformer: MarkdownTransformer): void {\n\t\t\tassertActive();\n\t\t\textension.markdownTransformer = transformer;\n\t\t},\n\n\t\tregisterEntryRenderer<T>(customType: string, renderer: EntryRenderer<T>): void {\n\t\t\tassertActive();\n\t\t\textension.entryRenderers ??= new Map();\n\t\t\textension.entryRenderers.set(customType, renderer as EntryRenderer);\n\t\t},\n\n\t\tregisterMcpServer(name: string, config: RegisteredMcpServerDeclaration[\"config\"]): void {\n\t\t\truntime.assertActive();\n\t\t\tconst error = validateMcpServerDeclaration(name, config);\n\t\t\tif (error) {\n\t\t\t\tthrow new Error(error);\n\t\t\t}\n\t\t\textension.mcpServers.set(name, {\n\t\t\t\tname,\n\t\t\t\tconfig,\n\t\t\t\textensionPath: extension.path,\n\t\t\t\tregistrationCwd: extension.registrationCwd,\n\t\t\t});\n\t\t},\n\n\t\t// Flag access - checks extension registered it, reads from runtime\n\t\tgetFlag(name: string): boolean | string | undefined {\n\t\t\tassertActive();\n\t\t\tif (!extension.flags.has(name)) return undefined;\n\t\t\treturn runtime.flagValues.has(name) ? runtime.flagValues.get(name) : pendingFlagValues.get(name);\n\t\t},\n\n\t\t// Action methods - delegate to shared runtime\n\t\tsendMessage(message, options): void {\n\t\t\tassertActive();\n\t\t\truntime.sendMessage(message, options);\n\t\t},\n\n\t\tsendUserMessage(content, options): void {\n\t\t\tassertActive();\n\t\t\truntime.sendUserMessage(content, options);\n\t\t},\n\n\t\tappendEntry(customType: string, data?: unknown): void {\n\t\t\tassertActive();\n\t\t\truntime.appendEntry(customType, data);\n\t\t},\n\n\t\tsetSessionName(name: string): void {\n\t\t\tassertActive();\n\t\t\truntime.setSessionName(name);\n\t\t},\n\n\t\tgetSessionName(): string | undefined {\n\t\t\tassertActive();\n\t\t\treturn runtime.getSessionName();\n\t\t},\n\n\t\tsetLabel(entryId: string, label: string | undefined): void {\n\t\t\tassertActive();\n\t\t\truntime.setLabel(entryId, label);\n\t\t},\n\n\t\texec(command: string, args: string[], options?: ExecOptions) {\n\t\t\tassertActive();\n\t\t\treturn execCommand(command, args, options?.cwd ?? cwd, options);\n\t\t},\n\n\t\texecuteTool(toolName, params, options) {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.executeTool(toolName, params, options);\n\t\t},\n\n\t\tgetActiveTools(): string[] {\n\t\t\tassertActive();\n\t\t\treturn runtime.getActiveTools();\n\t\t},\n\n\t\tgetAllTools() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getAllTools();\n\t\t},\n\n\t\tsetActiveTools(toolNames: string[]): void {\n\t\t\tassertActive();\n\t\t\truntime.setActiveTools(toolNames);\n\t\t},\n\n\t\tgetCommands() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getCommands();\n\t\t},\n\n\t\tsetModel(model) {\n\t\t\tassertActive();\n\t\t\treturn runtime.setModel(model);\n\t\t},\n\n\t\tgetThinkingLevel() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getThinkingLevel();\n\t\t},\n\n\t\tsetThinkingLevel(level) {\n\t\t\tassertActive();\n\t\t\truntime.setThinkingLevel(level);\n\t\t},\n\n\t\tsetSessionModel(model) {\n\t\t\truntime.assertActive();\n\t\t\treturn runtime.setSessionModel(model);\n\t\t},\n\n\t\tsetSessionThinkingLevel(level) {\n\t\t\truntime.assertActive();\n\t\t\truntime.setSessionThinkingLevel(level);\n\t\t},\n\n\t\tsetSessionFastMode(enabled) {\n\t\t\truntime.assertActive();\n\t\t\truntime.setSessionFastMode(enabled);\n\t\t},\n\n\t\tregisterProvider(providerOrName: Provider | string, config?: ProviderConfig) {\n\t\t\tassertActive();\n\t\t\tif (typeof providerOrName === \"string\") {\n\t\t\t\tif (!config) throw new Error(\"Provider config is required when registering by name\");\n\t\t\t\tapplyRuntimeChange(() => runtime.registerProvider(providerOrName, config, extension.path));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tapplyRuntimeChange(() => runtime.registerNativeProvider(providerOrName, extension.path));\n\t\t},\n\n\t\tunregisterProvider(name: string) {\n\t\t\tassertActive();\n\t\t\tapplyRuntimeChange(() => runtime.unregisterProvider(name, extension.path));\n\t\t},\n\n\t\trpc: {\n\t\t\temit(name, data) {\n\t\t\t\truntime.assertActive();\n\t\t\t\tconst normalizedName = name.trim();\n\t\t\t\tif (normalizedName.length === 0) throw new Error(\"RPC extension event name must not be empty\");\n\t\t\t\teventBus.emit(EXTENSION_RPC_EVENT_CHANNEL, {\n\t\t\t\t\tname: normalizedName,\n\t\t\t\t\tdata,\n\t\t\t\t} satisfies ExtensionRpcEvent);\n\t\t\t},\n\t\t\thandle(name, handler) {\n\t\t\t\truntime.assertActive();\n\t\t\t\tconst normalizedName = name.trim();\n\t\t\t\tif (normalizedName.length === 0) throw new Error(\"RPC extension request name must not be empty\");\n\t\t\t\tconst handlers = extension.rpcHandlers ?? new Map();\n\t\t\t\tif (handlers.has(normalizedName)) {\n\t\t\t\t\tthrow new Error(`RPC extension request handler already registered: ${normalizedName}`);\n\t\t\t\t}\n\t\t\t\thandlers.set(normalizedName, handler);\n\t\t\t\textension.rpcHandlers = handlers;\n\t\t\t},\n\t\t},\n\t\tevents: {\n\t\t\temit(channel, data) {\n\t\t\t\tassertActive();\n\t\t\t\teventBus.emit(channel, data);\n\t\t\t},\n\t\t\ton(channel, handler) {\n\t\t\t\tassertActive();\n\t\t\t\tconst unsubscribe = runtime.trackEventBusSubscription(eventBus.on(channel, handler));\n\t\t\t\tif (state === \"loading\") loadingUnsubscribers.push(unsubscribe);\n\t\t\t\treturn unsubscribe;\n\t\t\t},\n\t\t},\n\t} as ExtensionAPI;\n\n\treturn {\n\t\tapi,\n\t\tcommit: () => {\n\t\t\tif (state !== \"loading\") return;\n\t\t\truntime.assertActive();\n\t\t\tfor (const [name, value] of pendingFlagValues) {\n\t\t\t\tif (!runtime.flagValues.has(name)) runtime.flagValues.set(name, value);\n\t\t\t}\n\t\t\tfor (const apply of pendingRuntimeChanges) apply();\n\t\t\tstate = \"active\";\n\t\t\tclearPending();\n\t\t},\n\t\tdiscard: () => {\n\t\t\tif (state !== \"loading\") return;\n\t\t\tstate = \"failed\";\n\t\t\tfor (const unsubscribe of loadingUnsubscribers) unsubscribe();\n\t\t\tclearPending();\n\t\t},\n\t};\n}\n\nfunction createExtensionModuleImporter(): ExtensionModuleImporter {\n\treturn createJiti(import.meta.url, {\n\t\tmoduleCache: false,\n\t\t// Compiled binaries and the bundled Node distribution use embedded modules.\n\t\t// Source TypeScript reuses host modules and root tsconfig paths. Unbundled\n\t\t// Node builds use dist aliases.\n\t\t...(isBunBinary || isNodeSeaBinary || isBundledNode\n\t\t\t? { virtualModules: VIRTUAL_MODULES, tryNative: false }\n\t\t\t: isTypeScriptSourceRuntime\n\t\t\t\t? { alias: getAliases(), virtualModules: VIRTUAL_MODULES, tsconfigPaths: true }\n\t\t\t\t: { alias: getAliases() }),\n\t});\n}\n\nfunction isCurrentCacheToken(cacheToken: ExtensionCacheToken | undefined): cacheToken is ExtensionCacheToken {\n\tif (cacheToken === undefined) return false;\n\tconst cacheEntry = extensionCacheByCwd.get(cacheToken.cwd);\n\treturn cacheEntry?.generation === cacheToken.generation;\n}\n\nasync function loadExtensionModule(\n\textensionPath: string,\n\timporter: ExtensionModuleImporter,\n\tcacheToken?: ExtensionCacheToken,\n) {\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\tconst cachedFactory = extensionCacheByCwd.get(cacheToken.cwd)?.factories.get(extensionPath);\n\t\tif (cachedFactory) {\n\t\t\treturn cachedFactory;\n\t\t}\n\t}\n\n\tconst module = await importer.import(extensionPath, { default: true });\n\tconst factory = module as ExtensionFactory;\n\tif (typeof factory !== \"function\") {\n\t\treturn undefined;\n\t}\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\textensionCacheByCwd.get(cacheToken.cwd)?.factories.set(extensionPath, factory);\n\t}\n\treturn factory;\n}\n\n/**\n * Create an Extension object with empty collections.\n */\nfunction createExtension(extensionPath: string, resolvedPath: string, registrationCwd: string): Extension {\n\tconst source =\n\t\textensionPath.startsWith(\"<\") && extensionPath.endsWith(\">\")\n\t\t\t? extensionPath.slice(1, -1).split(\":\")[0] || \"temporary\"\n\t\t\t: \"local\";\n\tconst baseDir = extensionPath.startsWith(\"<\") ? undefined : path.dirname(resolvedPath);\n\n\treturn {\n\t\tpath: extensionPath,\n\t\tresolvedPath,\n\t\tsourceInfo: createSyntheticSourceInfo(extensionPath, { source, baseDir }),\n\t\thandlers: new Map(),\n\t\ttools: new Map(),\n\t\tremovedToolHints: new Map(),\n\t\tlazyToolActivators: [],\n\t\tfilesystemPolicies: [],\n\t\tmessageRenderers: new Map(),\n\t\tentryRenderers: undefined,\n\t\tcommands: new Map(),\n\t\trpcHandlers: new Map(),\n\t\tflags: new Map(),\n\t\tshortcuts: new Map(),\n\t\tmcpServers: new Map(),\n\t\tregistrationCwd,\n\t};\n}\n\nasync function initializeExtension(\n\tfactory: ExtensionFactory,\n\textensionPath: string,\n\tresolvedPath: string,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n): Promise<Extension> {\n\tconst extension = createExtension(extensionPath, resolvedPath, cwd);\n\tconst load = createExtensionAPI(extension, runtime, cwd, eventBus);\n\ttry {\n\t\tawait factory(load.api);\n\t\tload.commit();\n\t} catch (error) {\n\t\tload.discard();\n\t\tthrow error;\n\t}\n\ttime(`${extensionPath} factory`, \"extensions\");\n\treturn extension;\n}\n\nasync function loadExtension(\n\textensionPath: string,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\tgetImporter: () => ExtensionModuleImporter,\n\tfactoryResolver?: ExtensionFactoryResolver,\n\tcacheToken?: ExtensionCacheToken,\n): Promise<{ extension: Extension | null; error: string | null }> {\n\tconst resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });\n\n\ttry {\n\t\tconst factory =\n\t\t\tfactoryResolver?.(extensionPath, resolvedPath) ??\n\t\t\t(await loadExtensionModule(resolvedPath, getImporter(), cacheToken));\n\t\ttime(`${extensionPath} module import`, \"extensions\");\n\t\tif (!factory) {\n\t\t\treturn { extension: null, error: `Extension does not export a valid factory function: ${extensionPath}` };\n\t\t}\n\n\t\tconst extension = await initializeExtension(factory, extensionPath, resolvedPath, cwd, eventBus, runtime);\n\t\treturn { extension, error: null };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\treturn { extension: null, error: `Failed to load extension: ${message}` };\n\t}\n}\n\n/**\n * Create an Extension from an inline factory function.\n */\nexport async function loadExtensionFromFactory(\n\tfactory: ExtensionFactory,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\textensionPath = \"<inline>\",\n): Promise<Extension> {\n\tconst resolvedCwd = resolvePath(cwd);\n\treturn initializeExtension(factory, extensionPath, extensionPath, resolvedCwd, eventBus, runtime);\n}\n\n/**\n * Load extensions from paths.\n */\nasync function loadExtensionsInternal(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n\toptions?: { factoryResolver?: ExtensionFactoryResolver },\n\tuseCache = false,\n): Promise<LoadExtensionsResult> {\n\tconst extensions: Extension[] = [];\n\tconst errors: Array<{ path: string; error: string }> = [];\n\tconst cacheToken = useCache ? useExtensionCacheCwd(cwd) : undefined;\n\tconst resolvedCwd = cacheToken?.cwd ?? resolvePath(cwd);\n\tconst resolvedEventBus = eventBus ?? createEventBus();\n\tconst resolvedRuntime = runtime ?? createExtensionRuntime();\n\tlet importer: ExtensionModuleImporter | undefined;\n\tconst getImporter = () => {\n\t\timporter ??= createExtensionModuleImporter();\n\t\treturn importer;\n\t};\n\n\tfor (const extPath of paths) {\n\t\tconst { extension, error } = await loadExtension(\n\t\t\textPath,\n\t\t\tresolvedCwd,\n\t\t\tresolvedEventBus,\n\t\t\tresolvedRuntime,\n\t\t\tgetImporter,\n\t\t\toptions?.factoryResolver,\n\t\t\tcacheToken,\n\t\t);\n\n\t\tif (error) {\n\t\t\terrors.push({ path: extPath, error });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (extension) {\n\t\t\textensions.push(extension);\n\t\t}\n\t}\n\n\treturn {\n\t\textensions,\n\t\terrors,\n\t\truntime: resolvedRuntime,\n\t\teventBus: resolvedEventBus,\n\t};\n}\n\nexport async function loadExtensions(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n\toptions?: { factoryResolver?: ExtensionFactoryResolver },\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime, options);\n}\n\nexport async function loadExtensionsCached(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime, undefined, true);\n}\n\nfunction isExtensionFile(name: string): boolean {\n\treturn name.endsWith(\".ts\") || name.endsWith(\".js\");\n}\n\n/**\n * Resolve extension entry points from a directory.\n *\n * Checks for:\n * 1. package.json with \"pi.extensions\" field -> returns declared paths\n * 2. index.ts or index.js -> returns the index file\n *\n * Returns resolved paths or null if no entry points found.\n */\nfunction resolveExtensionEntries(dir: string): string[] | null {\n\t// Check for package.json with \"pi\" field first\n\tconst packageJsonPath = path.join(dir, \"package.json\");\n\tif (fs.existsSync(packageJsonPath)) {\n\t\tconst manifest = readPiManifest(packageJsonPath);\n\t\tif (manifest?.extensions?.length) {\n\t\t\tconst entries: string[] = [];\n\t\t\tfor (const extPath of manifest.extensions) {\n\t\t\t\tconst resolvedExtPath = path.resolve(dir, extPath);\n\t\t\t\tif (fs.existsSync(resolvedExtPath)) {\n\t\t\t\t\tentries.push(resolvedExtPath);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entries.length > 0) {\n\t\t\t\treturn entries;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for index.ts or index.js\n\tconst indexTs = path.join(dir, \"index.ts\");\n\tconst indexJs = path.join(dir, \"index.js\");\n\tif (fs.existsSync(indexTs)) {\n\t\treturn [indexTs];\n\t}\n\tif (fs.existsSync(indexJs)) {\n\t\treturn [indexJs];\n\t}\n\n\treturn null;\n}\n\n/**\n * Discover extensions in a directory.\n *\n * Discovery rules:\n * 1. Direct files: `extensions/*.ts` or `*.js` → load\n * 2. Subdirectory with index: `extensions/* /index.ts` or `index.js` → load\n * 3. Subdirectory with package.json: `extensions/* /package.json` with \"pi\" field → load what it declares\n *\n * No recursion beyond one level. Complex packages must use package.json manifest.\n */\nfunction discoverExtensionsInDir(dir: string): string[] {\n\tif (!fs.existsSync(dir)) {\n\t\treturn [];\n\t}\n\n\tconst discovered: string[] = [];\n\n\ttry {\n\t\tconst entries = fs.readdirSync(dir, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst entryPath = path.join(dir, entry.name);\n\n\t\t\t// 1. Direct files: *.ts or *.js\n\t\t\tif ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {\n\t\t\t\tdiscovered.push(entryPath);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 2 & 3. Subdirectories\n\t\t\tif (entry.isDirectory() || entry.isSymbolicLink()) {\n\t\t\t\tconst entries = resolveExtensionEntries(entryPath);\n\t\t\t\tif (entries) {\n\t\t\t\t\tdiscovered.push(...entries);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\treturn [];\n\t}\n\n\treturn discovered;\n}\n\n/**\n * Discover and load extensions from standard locations.\n */\nexport async function discoverAndLoadExtensions(\n\tconfiguredPaths: string[],\n\tcwd: string,\n\tagentDir: string = getAgentDir(),\n\teventBus?: EventBus,\n): Promise<LoadExtensionsResult> {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst resolvedAgentDir = resolvePath(agentDir);\n\tconst allPaths: string[] = [];\n\tconst seen = new Set<string>();\n\n\tconst addPaths = (paths: string[]) => {\n\t\tfor (const p of paths) {\n\t\t\tconst resolved = path.resolve(p);\n\t\t\tif (!seen.has(resolved)) {\n\t\t\t\tseen.add(resolved);\n\t\t\t\tallPaths.push(p);\n\t\t\t}\n\t\t}\n\t};\n\n\t// 1. Project-local extensions: cwd/${CONFIG_DIR_NAME}/extensions/\n\tconst localExtDir = path.join(resolvedCwd, CONFIG_DIR_NAME, \"extensions\");\n\taddPaths(discoverExtensionsInDir(localExtDir));\n\n\t// 2. Global extensions: agentDir/extensions/\n\tconst globalExtDir = path.join(resolvedAgentDir, \"extensions\");\n\taddPaths(discoverExtensionsInDir(globalExtDir));\n\n\t// 3. Explicitly configured paths\n\tfor (const p of configuredPaths) {\n\t\tconst resolved = resolvePath(p, resolvedCwd, { normalizeUnicodeSpaces: true });\n\t\tif (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {\n\t\t\t// Check for package.json with pi manifest or index.ts\n\t\t\tconst entries = resolveExtensionEntries(resolved);\n\t\t\tif (entries) {\n\t\t\t\taddPaths(entries);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// No explicit entries - discover individual files in directory\n\t\t\taddPaths(discoverExtensionsInDir(resolved));\n\t\t\tcontinue;\n\t\t}\n\n\t\taddPaths([resolved]);\n\t}\n\n\treturn loadExtensions(allPaths, resolvedCwd, eventBus);\n}\n"]}