@code-yeongyu/senpi 2026.9.26 → 2026.9.27-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/dist/bun-runtime.d.ts +18 -2
  3. package/dist/bun-runtime.d.ts.map +1 -1
  4. package/dist/bun-runtime.js +60 -8
  5. package/dist/bun-runtime.js.map +1 -1
  6. package/dist/bundle/chunks/anthropic-messages-3FGAXYJS.js +8 -0
  7. package/dist/bundle/chunks/{app-server-command-ZRCKWY2X.js → app-server-command-ZVB35UIJ.js} +1 -1
  8. package/dist/bundle/chunks/azure-openai-responses-4SUOOZZ4.js +2 -0
  9. package/dist/bundle/chunks/bun-extension-importer-R4HXF3GD.js +14 -0
  10. package/dist/bundle/chunks/{chunk-KMJXSXRX.js → chunk-357I4IUU.js} +2 -2
  11. package/dist/bundle/chunks/chunk-3SIQIY57.js +8 -0
  12. package/dist/bundle/chunks/chunk-45SZOLCU.js +2 -0
  13. package/dist/bundle/chunks/{chunk-77ACEMYL.js → chunk-6J6RDMBY.js} +1 -1
  14. package/dist/bundle/chunks/{chunk-BSOJHK4W.js → chunk-7FXXRPB3.js} +2 -1
  15. package/dist/bundle/chunks/{chunk-FD34HSJJ.js → chunk-C6LQNMRB.js} +1 -1
  16. package/dist/bundle/chunks/chunk-ELM77A26.js +2 -0
  17. package/dist/bundle/chunks/chunk-GZVCRV7I.js +3 -0
  18. package/dist/bundle/chunks/{chunk-TTY5BHCG.js → chunk-H2SGCPMD.js} +1 -1
  19. package/dist/bundle/chunks/chunk-KLBKUBDV.js +2 -0
  20. package/dist/bundle/chunks/chunk-L6QV7NZI.js +2 -0
  21. package/dist/bundle/chunks/{chunk-ZKZAATFM.js → chunk-LDB5UMH2.js} +2 -2
  22. package/dist/bundle/chunks/{chunk-HZAKOVHN.js → chunk-LGKKU4VM.js} +1 -1
  23. package/dist/bundle/chunks/{chunk-6Q6DGME2.js → chunk-NMDALHXH.js} +1 -1
  24. package/dist/bundle/chunks/chunk-NNILBBOH.js +18 -0
  25. package/dist/bundle/chunks/{chunk-SUQDU5KM.js → chunk-OQRUK2DK.js} +1 -1
  26. package/dist/bundle/chunks/{chunk-OZCB6BP3.js → chunk-OZN2KUPR.js} +7 -7
  27. package/dist/bundle/chunks/{chunk-X3T45623.js → chunk-QK4QKRTF.js} +1 -1
  28. package/dist/bundle/chunks/{chunk-WM5FVFAP.js → chunk-QPZVJQC5.js} +1 -1
  29. package/dist/bundle/chunks/{chunk-Y54V65MS.js → chunk-QYAO24GB.js} +1 -1
  30. package/dist/bundle/chunks/{chunk-MKAM7IRH.js → chunk-RULGEHQM.js} +1 -1
  31. package/dist/bundle/chunks/{chunk-QGC46CGK.js → chunk-RYI6XR6Z.js} +63 -58
  32. package/dist/bundle/chunks/chunk-U3VOXCGP.js +2 -0
  33. package/dist/bundle/chunks/chunk-W3D3ZYDS.js +2 -0
  34. package/dist/bundle/chunks/{chunk-UBPMXBOJ.js → chunk-XKLR7C5B.js} +1 -1
  35. package/dist/bundle/chunks/{chunk-CLZVNQW3.js → chunk-Y7EIVDHZ.js} +1 -1
  36. package/dist/bundle/chunks/chunk-ZIVYE5YK.js +2 -0
  37. package/dist/bundle/chunks/cli-main-RONHLFWZ.js +3 -0
  38. package/dist/bundle/chunks/google-generative-ai-ZTGKZTGU.js +2 -0
  39. package/dist/bundle/chunks/google-vertex-CCZ376YK.js +2 -0
  40. package/dist/bundle/chunks/help-fast-path-5LRG6FCG.js +2 -0
  41. package/dist/bundle/chunks/host-command-JVPGQR74.js +2 -0
  42. package/dist/bundle/chunks/host-lifecycle-R4HLXLBM.js +3 -0
  43. package/dist/bundle/chunks/host-lifecycle.js +4 -4
  44. package/dist/bundle/chunks/interactive-host-runtime-FES2G62G.js +4 -0
  45. package/dist/bundle/chunks/interactive-mode-45EP2FVL.js +2 -0
  46. package/dist/bundle/chunks/{list-tips-EBRNBPBM.js → list-tips-XXMRDHN6.js} +1 -1
  47. package/dist/bundle/chunks/{multi-session-host-7YX2I7UK.js → multi-session-host-EFCMD5OT.js} +6 -6
  48. package/dist/bundle/chunks/{openai-completions-4CLXDDHJ.js → openai-completions-OP6VFNUR.js} +1 -1
  49. package/dist/bundle/chunks/openai-images-6U5FCN5S.js +2 -0
  50. package/dist/bundle/chunks/openai-responses-7PWMBGYX.js +2 -0
  51. package/dist/bundle/chunks/openrouter-images-QIKWQZUD.js +2 -0
  52. package/dist/bundle/chunks/{package-manager-cli-3ISYTEL2.js → package-manager-cli-5XJS3TYM.js} +1 -1
  53. package/dist/bundle/chunks/rotation-stream-KW7PTEC4.js +2 -0
  54. package/dist/bundle/chunks/rpc-mode-ZHYECU24.js +2 -0
  55. package/dist/bundle/chunks/session-picker-QHIYVQP4.js +2 -0
  56. package/dist/bundle/chunks/session-worker.js +281 -270
  57. package/dist/bundle/chunks/{state-store-Q5EWEAFG.js → state-store-D4GGGT3J.js} +1 -1
  58. package/dist/bundle/cli.js +1 -1
  59. package/dist/bundle/index.js +1 -1
  60. package/dist/bundle/rpc-entry.js +1 -1
  61. package/dist/cli/args.d.ts +1 -0
  62. package/dist/cli/args.d.ts.map +1 -1
  63. package/dist/cli/args.js +4 -0
  64. package/dist/cli/args.js.map +1 -1
  65. package/dist/cli/continue-moved.d.ts +15 -0
  66. package/dist/cli/continue-moved.d.ts.map +1 -0
  67. package/dist/cli/continue-moved.js +26 -0
  68. package/dist/cli/continue-moved.js.map +1 -0
  69. package/dist/cli/cross-project-session.d.ts +22 -0
  70. package/dist/cli/cross-project-session.d.ts.map +1 -0
  71. package/dist/cli/cross-project-session.js +38 -0
  72. package/dist/cli/cross-project-session.js.map +1 -0
  73. package/dist/core/agent-session-runtime.d.ts +3 -0
  74. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  75. package/dist/core/agent-session-runtime.js +43 -10
  76. package/dist/core/agent-session-runtime.js.map +1 -1
  77. package/dist/core/agent-session.d.ts.map +1 -1
  78. package/dist/core/agent-session.js +19 -5
  79. package/dist/core/agent-session.js.map +1 -1
  80. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.d.ts.map +1 -1
  81. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.js +5 -1
  82. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.js.map +1 -1
  83. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts +13 -1
  84. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts.map +1 -1
  85. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.js +25 -2
  86. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.js.map +1 -1
  87. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.d.ts +1 -0
  88. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.d.ts.map +1 -1
  89. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.js.map +1 -1
  90. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  91. package/dist/core/extensions/builtin/index.js +2 -0
  92. package/dist/core/extensions/builtin/index.js.map +1 -1
  93. package/dist/core/extensions/builtin/mcp/catalog.d.ts +3 -0
  94. package/dist/core/extensions/builtin/mcp/catalog.d.ts.map +1 -1
  95. package/dist/core/extensions/builtin/mcp/catalog.js +9 -0
  96. package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
  97. package/dist/core/extensions/builtin/mcp/connection-types.d.ts +2 -0
  98. package/dist/core/extensions/builtin/mcp/connection-types.d.ts.map +1 -1
  99. package/dist/core/extensions/builtin/mcp/connection-types.js.map +1 -1
  100. package/dist/core/extensions/builtin/mcp/connection.d.ts +1 -1
  101. package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/mcp/connection.js +3 -2
  103. package/dist/core/extensions/builtin/mcp/connection.js.map +1 -1
  104. package/dist/core/extensions/builtin/mcp/expose/session.d.ts +3 -0
  105. package/dist/core/extensions/builtin/mcp/expose/session.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/mcp/expose/session.js +9 -2
  107. package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
  108. package/dist/core/extensions/builtin/mcp/service-register.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/mcp/service-register.js +7 -1
  110. package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
  111. package/dist/core/extensions/builtin/mcp/service-tools-changed.d.ts +18 -0
  112. package/dist/core/extensions/builtin/mcp/service-tools-changed.d.ts.map +1 -0
  113. package/dist/core/extensions/builtin/mcp/service-tools-changed.js +61 -0
  114. package/dist/core/extensions/builtin/mcp/service-tools-changed.js.map +1 -0
  115. package/dist/core/extensions/builtin/mcp/service-types.d.ts +13 -0
  116. package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
  117. package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
  118. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  119. package/dist/core/extensions/builtin/mcp/service.js +4 -37
  120. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  121. package/dist/core/extensions/builtin/mcp/shared-lease.js +1 -1
  122. package/dist/core/extensions/builtin/mcp/shared-lease.js.map +1 -1
  123. package/dist/core/extensions/builtin/mcp/startup-race.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/mcp/startup-race.js +11 -1
  125. package/dist/core/extensions/builtin/mcp/startup-race.js.map +1 -1
  126. package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/permission-system/index.js +5 -2
  128. package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
  129. package/dist/core/extensions/builtin/permission-system/parsers.d.ts +5 -0
  130. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/permission-system/parsers.js +13 -0
  132. package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
  133. package/dist/core/extensions/builtin/repository-identity.d.ts +6 -0
  134. package/dist/core/extensions/builtin/repository-identity.d.ts.map +1 -0
  135. package/dist/core/extensions/builtin/repository-identity.js +33 -0
  136. package/dist/core/extensions/builtin/repository-identity.js.map +1 -0
  137. package/dist/core/extensions/bun-extension-importer.d.ts.map +1 -1
  138. package/dist/core/extensions/bun-extension-importer.js +10 -4
  139. package/dist/core/extensions/bun-extension-importer.js.map +1 -1
  140. package/dist/core/extensions/bun-extension-registry.js +6 -5
  141. package/dist/core/extensions/bun-extension-registry.js.map +1 -1
  142. package/dist/core/extensions/index.d.ts +1 -1
  143. package/dist/core/extensions/index.d.ts.map +1 -1
  144. package/dist/core/extensions/index.js.map +1 -1
  145. package/dist/core/extensions/kernel-prelude.d.ts +13 -0
  146. package/dist/core/extensions/kernel-prelude.d.ts.map +1 -0
  147. package/dist/core/extensions/kernel-prelude.js +38 -0
  148. package/dist/core/extensions/kernel-prelude.js.map +1 -0
  149. package/dist/core/extensions/types.d.ts +44 -2
  150. package/dist/core/extensions/types.d.ts.map +1 -1
  151. package/dist/core/extensions/types.js.map +1 -1
  152. package/dist/core/messages.d.ts.map +1 -1
  153. package/dist/core/messages.js +4 -2
  154. package/dist/core/messages.js.map +1 -1
  155. package/dist/core/model-resolver.js +1 -1
  156. package/dist/core/model-resolver.js.map +1 -1
  157. package/dist/core/moved-sessions.d.ts +10 -0
  158. package/dist/core/moved-sessions.d.ts.map +1 -0
  159. package/dist/core/moved-sessions.js +84 -0
  160. package/dist/core/moved-sessions.js.map +1 -0
  161. package/dist/core/process-crash-record.d.ts +62 -0
  162. package/dist/core/process-crash-record.d.ts.map +1 -0
  163. package/dist/core/process-crash-record.js +216 -0
  164. package/dist/core/process-crash-record.js.map +1 -0
  165. package/dist/core/provider-rejected-images.d.ts +18 -0
  166. package/dist/core/provider-rejected-images.d.ts.map +1 -0
  167. package/dist/core/provider-rejected-images.js +107 -0
  168. package/dist/core/provider-rejected-images.js.map +1 -0
  169. package/dist/core/repository-identity.d.ts +18 -0
  170. package/dist/core/repository-identity.d.ts.map +1 -0
  171. package/dist/core/repository-identity.js +75 -0
  172. package/dist/core/repository-identity.js.map +1 -0
  173. package/dist/core/resume-target.d.ts +20 -0
  174. package/dist/core/resume-target.d.ts.map +1 -0
  175. package/dist/core/resume-target.js +30 -0
  176. package/dist/core/resume-target.js.map +1 -0
  177. package/dist/core/session-discovery.d.ts.map +1 -1
  178. package/dist/core/session-discovery.js +1 -0
  179. package/dist/core/session-discovery.js.map +1 -1
  180. package/dist/core/session-hold-errors.d.ts +20 -0
  181. package/dist/core/session-hold-errors.d.ts.map +1 -0
  182. package/dist/core/session-hold-errors.js +28 -0
  183. package/dist/core/session-hold-errors.js.map +1 -0
  184. package/dist/core/session-holders.d.ts +22 -0
  185. package/dist/core/session-holders.d.ts.map +1 -0
  186. package/dist/core/session-holders.js +234 -0
  187. package/dist/core/session-holders.js.map +1 -0
  188. package/dist/core/session-manager.d.ts +5 -0
  189. package/dist/core/session-manager.d.ts.map +1 -1
  190. package/dist/core/session-manager.js.map +1 -1
  191. package/dist/core/session-rebind.d.ts +23 -0
  192. package/dist/core/session-rebind.d.ts.map +1 -0
  193. package/dist/core/session-rebind.js +127 -0
  194. package/dist/core/session-rebind.js.map +1 -0
  195. package/dist/core/session-summary-index-file.d.ts.map +1 -1
  196. package/dist/core/session-summary-index-file.js +5 -2
  197. package/dist/core/session-summary-index-file.js.map +1 -1
  198. package/dist/core/session-summary.d.ts +3 -0
  199. package/dist/core/session-summary.d.ts.map +1 -1
  200. package/dist/core/session-summary.js +7 -0
  201. package/dist/core/session-summary.js.map +1 -1
  202. package/dist/core/session-title-generator.d.ts.map +1 -1
  203. package/dist/core/session-title-generator.js +21 -3
  204. package/dist/core/session-title-generator.js.map +1 -1
  205. package/dist/core/session-title-reasoning.d.ts +14 -0
  206. package/dist/core/session-title-reasoning.d.ts.map +1 -0
  207. package/dist/core/session-title-reasoning.js +31 -0
  208. package/dist/core/session-title-reasoning.js.map +1 -0
  209. package/dist/core/tools/path-utils.d.ts.map +1 -1
  210. package/dist/core/tools/path-utils.js +13 -0
  211. package/dist/core/tools/path-utils.js.map +1 -1
  212. package/dist/index.d.ts +1 -1
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js.map +1 -1
  215. package/dist/legacy-dir-copy.d.ts +9 -0
  216. package/dist/legacy-dir-copy.d.ts.map +1 -0
  217. package/dist/legacy-dir-copy.js +69 -0
  218. package/dist/legacy-dir-copy.js.map +1 -0
  219. package/dist/legacy-senpi-dir-migration.d.ts.map +1 -1
  220. package/dist/legacy-senpi-dir-migration.js +64 -48
  221. package/dist/legacy-senpi-dir-migration.js.map +1 -1
  222. package/dist/main.d.ts +6 -0
  223. package/dist/main.d.ts.map +1 -1
  224. package/dist/main.js +129 -22
  225. package/dist/main.js.map +1 -1
  226. package/dist/migrations-state.d.ts +1 -1
  227. package/dist/migrations-state.d.ts.map +1 -1
  228. package/dist/migrations-state.js +5 -1
  229. package/dist/migrations-state.js.map +1 -1
  230. package/dist/migrations.d.ts.map +1 -1
  231. package/dist/migrations.js +4 -0
  232. package/dist/migrations.js.map +1 -1
  233. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  234. package/dist/modes/interactive/components/session-selector.js +5 -3
  235. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  236. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  237. package/dist/modes/interactive/interactive-mode.js +10 -4
  238. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  239. package/dist/modes/interactive/resume-rebind.d.ts +12 -0
  240. package/dist/modes/interactive/resume-rebind.d.ts.map +1 -0
  241. package/dist/modes/interactive/resume-rebind.js +37 -0
  242. package/dist/modes/interactive/resume-rebind.js.map +1 -0
  243. package/dist/modes/interactive/runtime-notice-presenter.d.ts +8 -0
  244. package/dist/modes/interactive/runtime-notice-presenter.d.ts.map +1 -0
  245. package/dist/modes/interactive/runtime-notice-presenter.js +69 -0
  246. package/dist/modes/interactive/runtime-notice-presenter.js.map +1 -0
  247. package/dist/modes/interactive/runtime-notice.d.ts +50 -0
  248. package/dist/modes/interactive/runtime-notice.d.ts.map +1 -0
  249. package/dist/modes/interactive/runtime-notice.js +104 -0
  250. package/dist/modes/interactive/runtime-notice.js.map +1 -0
  251. package/dist/modes/interactive/tips/catalog/computer-tips.d.ts +7 -0
  252. package/dist/modes/interactive/tips/catalog/computer-tips.d.ts.map +1 -0
  253. package/dist/modes/interactive/tips/catalog/computer-tips.js +36 -0
  254. package/dist/modes/interactive/tips/catalog/computer-tips.js.map +1 -0
  255. package/dist/modes/interactive/tips/registry.d.ts.map +1 -1
  256. package/dist/modes/interactive/tips/registry.js +2 -0
  257. package/dist/modes/interactive/tips/registry.js.map +1 -1
  258. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  259. package/dist/modes/rpc/connection-handler.js +3 -0
  260. package/dist/modes/rpc/connection-handler.js.map +1 -1
  261. package/dist/modes/rpc/host-child-exit.d.ts.map +1 -1
  262. package/dist/modes/rpc/host-child-exit.js +4 -0
  263. package/dist/modes/rpc/host-child-exit.js.map +1 -1
  264. package/dist/modes/rpc/host-crash-record.d.ts +8 -0
  265. package/dist/modes/rpc/host-crash-record.d.ts.map +1 -1
  266. package/dist/modes/rpc/host-crash-record.js.map +1 -1
  267. package/dist/modes/rpc/host-crash-record.test.js +11 -0
  268. package/dist/modes/rpc/host-crash-record.test.js.map +1 -1
  269. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  270. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  271. package/dist/modes/rpc/rpc-client.js +14 -6
  272. package/dist/modes/rpc/rpc-client.js.map +1 -1
  273. package/dist/modes/rpc/rpc-request-deadline.d.ts +17 -0
  274. package/dist/modes/rpc/rpc-request-deadline.d.ts.map +1 -0
  275. package/dist/modes/rpc/rpc-request-deadline.js +27 -0
  276. package/dist/modes/rpc/rpc-request-deadline.js.map +1 -0
  277. package/dist/modes/rpc/rpc-types.d.ts +9 -2
  278. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  279. package/dist/modes/rpc/rpc-types.js.map +1 -1
  280. package/dist/modes/rpc/session-command-router.d.ts +3 -6
  281. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  282. package/dist/modes/rpc/session-command-router.js +9 -22
  283. package/dist/modes/rpc/session-command-router.js.map +1 -1
  284. package/dist/modes/rpc/session-path-key.d.ts +10 -0
  285. package/dist/modes/rpc/session-path-key.d.ts.map +1 -0
  286. package/dist/modes/rpc/session-path-key.js +33 -0
  287. package/dist/modes/rpc/session-path-key.js.map +1 -0
  288. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  289. package/dist/modes/rpc/session-registry.js +6 -10
  290. package/dist/modes/rpc/session-registry.js.map +1 -1
  291. package/dist/modes/rpc/session-sweep.d.ts +18 -0
  292. package/dist/modes/rpc/session-sweep.d.ts.map +1 -0
  293. package/dist/modes/rpc/session-sweep.js +32 -0
  294. package/dist/modes/rpc/session-sweep.js.map +1 -0
  295. package/dist/pi-dir-restore.d.ts +4 -0
  296. package/dist/pi-dir-restore.d.ts.map +1 -0
  297. package/dist/pi-dir-restore.js +92 -0
  298. package/dist/pi-dir-restore.js.map +1 -0
  299. package/docs/environment-variables.md +2 -0
  300. package/docs/extensions.md +27 -1
  301. package/docs/quickstart.md +7 -1
  302. package/docs/rpc.md +8 -3
  303. package/docs/sdk.md +29 -0
  304. package/docs/sessions.md +13 -0
  305. package/docs/usage.md +1 -0
  306. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +38 -0
  307. package/node_modules/@code-yeongyu/senpi-codemode/README.md +7 -0
  308. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  309. package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +9 -0
  310. package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/schema-bridge.ts +2 -0
  311. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/kernel-preludes.ts +30 -0
  312. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +15 -1
  313. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +1 -1
  314. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/local-module-loader.ts +16 -2
  315. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +6 -1
  316. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +15 -2
  317. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +7 -1
  318. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/kernel-prelude-plan.ts +19 -0
  319. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +2 -1
  320. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +4 -0
  321. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +11 -1
  322. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +1 -0
  323. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +1 -0
  324. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +3 -1
  325. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +2 -2
  326. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  327. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +7 -0
  328. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  329. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  330. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +3 -1
  331. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
  332. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +3 -1
  333. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  334. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  335. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  336. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  337. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +10 -7
  338. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  339. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  340. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +9 -1
  341. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  342. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
  343. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  344. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
  345. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  346. package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.d.ts +33 -0
  347. package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.d.ts.map +1 -0
  348. package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.js +56 -0
  349. package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.js.map +1 -0
  350. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  351. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  352. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  353. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  354. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  355. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  356. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +3 -0
  357. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  358. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  359. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-carrier.d.ts +5 -0
  360. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-carrier.d.ts.map +1 -0
  361. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-carrier.js +18 -0
  362. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-carrier.js.map +1 -0
  363. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.d.ts +26 -0
  364. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.d.ts.map +1 -0
  365. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.js +103 -0
  366. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.js.map +1 -0
  367. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.d.ts +36 -0
  368. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.d.ts.map +1 -0
  369. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.js +129 -0
  370. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.js.map +1 -0
  371. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts.map +1 -1
  372. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +5 -4
  373. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -1
  374. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  375. package/node_modules/@earendil-works/pi-pty/native/prebuilds/darwin-arm64/senpi_pty.darwin-arm64.node +0 -0
  376. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  377. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  378. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  379. package/package.json +7 -7
  380. package/dist/bundle/chunks/anthropic-messages-UYDVRFAS.js +0 -8
  381. package/dist/bundle/chunks/azure-openai-responses-DODWR4W6.js +0 -2
  382. package/dist/bundle/chunks/bun-extension-importer-H4IJCWWQ.js +0 -14
  383. package/dist/bundle/chunks/chunk-34HMVB33.js +0 -2
  384. package/dist/bundle/chunks/chunk-3WBSBDBX.js +0 -13
  385. package/dist/bundle/chunks/chunk-L6JO4M6J.js +0 -3
  386. package/dist/bundle/chunks/chunk-SFYHCFRO.js +0 -2
  387. package/dist/bundle/chunks/chunk-T3JBT2IK.js +0 -8
  388. package/dist/bundle/chunks/chunk-TTHMOL5G.js +0 -2
  389. package/dist/bundle/chunks/chunk-UYCGOK6M.js +0 -2
  390. package/dist/bundle/chunks/chunk-ZTVQY5V6.js +0 -2
  391. package/dist/bundle/chunks/cli-main-H6JAXAXV.js +0 -3
  392. package/dist/bundle/chunks/google-generative-ai-VIEFECKJ.js +0 -2
  393. package/dist/bundle/chunks/google-vertex-Q64CKFID.js +0 -2
  394. package/dist/bundle/chunks/help-fast-path-ZGKPSDFO.js +0 -2
  395. package/dist/bundle/chunks/host-command-BMHJ4YUD.js +0 -2
  396. package/dist/bundle/chunks/host-lifecycle-2GZAGSGW.js +0 -3
  397. package/dist/bundle/chunks/interactive-host-runtime-YI75GFD5.js +0 -4
  398. package/dist/bundle/chunks/interactive-mode-HM7UQYRC.js +0 -2
  399. package/dist/bundle/chunks/openai-images-JA5N5DUU.js +0 -2
  400. package/dist/bundle/chunks/openai-responses-IBFGBAJP.js +0 -2
  401. package/dist/bundle/chunks/openrouter-images-MW5TXV7L.js +0 -2
  402. package/dist/bundle/chunks/rotation-stream-NATO6IMN.js +0 -2
  403. package/dist/bundle/chunks/rpc-mode-6PY4TN5F.js +0 -2
  404. package/dist/bundle/chunks/session-picker-BP7THCWF.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/parsers.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport { realpathWithoutOpen } from \"../../../../utils/paths.ts\";\nimport { extractPatchedPaths } from \"../gpt-apply-patch/index.ts\";\nimport { BashArity } from \"../permission-system/arity.ts\";\nimport { extractExternalPaths, isExternalPath } from \"../permission-system/external-dir.ts\";\nimport type { Request } from \"../permission-system/types.ts\";\nimport { setApprovedMonitorParent } from \"../terminal/monitor-permission.ts\";\n\n/** Simplified permission request without ID/session metadata */\nexport type PermissionRequest = Pick<Request, \"permission\" | \"patterns\" | \"always\">;\n\n/** Parser function that extracts permission requests from tool input */\nexport type ToolPermissionParser = (\n\ttoolName: string,\n\tinput: Record<string, unknown>,\n\tcwd: string,\n) => PermissionRequest[];\n\nfunction fallbackPermissionRequest(permission: string): PermissionRequest {\n\treturn {\n\t\tpermission,\n\t\tpatterns: [\"*\"],\n\t\talways: [\"*\"],\n\t};\n}\n\nfunction getString(input: Record<string, unknown>, ...keys: string[]): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = input[key];\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\ntype AlwaysScope = \"file\" | \"directory\";\n\nfunction toParentDirectoryPattern(inputPath: string, scope: AlwaysScope): string {\n\tif (inputPath === \"~\" || inputPath === \"$HOME\") {\n\t\treturn `${inputPath}/*`;\n\t}\n\n\tif (scope === \"directory\") {\n\t\treturn inputPath.endsWith(\"/\") || inputPath.endsWith(\"\\\\\") ? `${inputPath}*` : `${inputPath}/*`;\n\t}\n\n\tif (inputPath.endsWith(\"/\") || inputPath.endsWith(\"\\\\\")) {\n\t\treturn `${inputPath}*`;\n\t}\n\n\tconst parentPattern = inputPath.replace(/[\\\\/][^\\\\/]+$/, \"/*\");\n\tif (parentPattern === \"/*\") {\n\t\treturn inputPath;\n\t}\n\treturn parentPattern;\n}\n\nfunction parseFilePath(input: Record<string, unknown>): string | undefined {\n\treturn getString(input, \"path\", \"file_path\");\n}\n\nfunction withExternalDirectoryRequests(\n\trequests: PermissionRequest[],\n\tpaths: string[],\n\tcwd: string,\n\tscope: AlwaysScope,\n): PermissionRequest[] {\n\tconst externalPaths = paths.filter((inputPath) => isExternalPath(inputPath, cwd));\n\tif (externalPaths.length === 0) {\n\t\treturn requests;\n\t}\n\n\treturn [\n\t\t...requests,\n\t\t{\n\t\t\tpermission: \"external_directory\",\n\t\t\tpatterns: externalPaths,\n\t\t\talways: externalPaths.map((externalPath) => toParentDirectoryPattern(externalPath, scope)),\n\t\t},\n\t];\n}\n\n/** Registry for tool-specific permission parsers */\nexport class ParserRegistry {\n\tprivate readonly parsers = new Map<string, ToolPermissionParser>();\n\n\t/** Register a parser for a specific tool */\n\tregister(toolName: string, parser: ToolPermissionParser): void {\n\t\tthis.parsers.set(toolName, parser);\n\t}\n\n\t/** Parse tool input into permission requests */\n\tparse(toolName: string, input: Record<string, unknown>, cwd: string): PermissionRequest[] {\n\t\tconst parser = this.parsers.get(toolName);\n\t\tif (!parser) {\n\t\t\treturn [fallbackPermissionRequest(toolName)];\n\t\t}\n\t\treturn parser(toolName, input, cwd);\n\t}\n}\n\n/** Create registry with built-in parsers for standard tools */\nexport function createBuiltinParserRegistry(): ParserRegistry {\n\tconst registry = new ParserRegistry();\n\n\t// bash_input writes arbitrary stdin to a live shell session = arbitrary command execution,\n\t// so it MUST be gated in the SAME `bash` permission class (via the `input` field), else\n\t// read-only/ask presets would be bypassable through a persistent session. The steering/read\n\t// tools (bash_output/kill_bash/bash_resize) fall back to their own tool-named permissions.\n\tconst parseBashLikePermission =\n\t\t(commandKey: string): ToolPermissionParser =>\n\t\t(_toolName, input, cwd) => {\n\t\t\tconst command = getString(input, commandKey);\n\t\t\tif (!command) {\n\t\t\t\treturn [fallbackPermissionRequest(\"bash\")];\n\t\t\t}\n\n\t\t\tconst tokens = command.split(/\\s+/).filter(Boolean);\n\t\t\tconst prefix = BashArity.prefix(tokens).join(\" \");\n\t\t\tconst always = prefix ? [prefix, `${prefix} *`] : [\"*\"];\n\t\t\tconst requests: PermissionRequest[] = [\n\t\t\t\t{\n\t\t\t\t\tpermission: \"bash\",\n\t\t\t\t\tpatterns: [prefix || command],\n\t\t\t\t\talways,\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tconst externalPaths = extractExternalPaths(command, cwd);\n\t\t\tif (externalPaths.length > 0) {\n\t\t\t\trequests.push({\n\t\t\t\t\tpermission: \"external_directory\",\n\t\t\t\t\tpatterns: externalPaths,\n\t\t\t\t\talways: externalPaths.map((externalPath) => toParentDirectoryPattern(externalPath, \"file\")),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn requests;\n\t\t};\n\n\tregistry.register(\"bash\", parseBashLikePermission(\"command\"));\n\tregistry.register(\"bash_input\", parseBashLikePermission(\"input\"));\n\tregistry.register(\"monitor\", (toolName, input, cwd) => {\n\t\tconst path = getString(input, \"path\");\n\t\tif (path) {\n\t\t\t// This runs on the host main thread: the parent identity must be derived without open(2)\n\t\t\t// (realpath opens directories and blocks forever on a wedged autofs trigger). Registration\n\t\t\t// performs the authoritative access check and re-derives the parent the same way.\n\t\t\tsetApprovedMonitorParent(input, realpathWithoutOpen(dirname(resolve(cwd, path))));\n\t\t\treturn withExternalDirectoryRequests(\n\t\t\t\t[{ permission: \"read\", patterns: [path], always: [path] }],\n\t\t\t\t[path],\n\t\t\t\tcwd,\n\t\t\t\t\"file\",\n\t\t\t);\n\t\t}\n\t\treturn parseBashLikePermission(\"command\")(toolName, input, cwd);\n\t});\n\n\tconst editParser: ToolPermissionParser = () => {\n\t\treturn [fallbackPermissionRequest(\"edit\")];\n\t};\n\n\tconst parseEditPermission: ToolPermissionParser = (_toolName, input, cwd) => {\n\t\tconst filePath = parseFilePath(input);\n\t\tif (filePath) {\n\t\t\treturn withExternalDirectoryRequests(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tpermission: \"edit\",\n\t\t\t\t\t\tpatterns: [filePath],\n\t\t\t\t\t\talways: [filePath],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t[filePath],\n\t\t\t\tcwd,\n\t\t\t\t\"file\",\n\t\t\t);\n\t\t}\n\n\t\tconst patchText = getString(input, \"input\", \"patchText\");\n\t\tif (!patchText) {\n\t\t\treturn editParser(\"edit\", input, \"\");\n\t\t}\n\n\t\tconst patchedPaths = extractPatchedPaths(patchText);\n\t\tif (patchedPaths.length === 0) {\n\t\t\treturn editParser(\"edit\", input, \"\");\n\t\t}\n\n\t\tconst editRequests = patchedPaths.map((patchedPath) => ({\n\t\t\tpermission: \"edit\",\n\t\t\tpatterns: [patchedPath],\n\t\t\talways: [patchedPath],\n\t\t}));\n\n\t\treturn withExternalDirectoryRequests(editRequests, patchedPaths, cwd, \"file\");\n\t};\n\n\tregistry.register(\"edit\", parseEditPermission);\n\tregistry.register(\"write\", parseEditPermission);\n\tregistry.register(\"apply_patch\", parseEditPermission);\n\tregistry.register(\"multiedit\", parseEditPermission);\n\n\tregistry.register(\"read\", (_toolName, input, cwd) => {\n\t\tconst filePath = parseFilePath(input);\n\t\tif (!filePath) {\n\t\t\treturn [fallbackPermissionRequest(\"read\")];\n\t\t}\n\n\t\treturn withExternalDirectoryRequests(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tpermission: \"read\",\n\t\t\t\t\tpatterns: [filePath],\n\t\t\t\t\talways: [filePath],\n\t\t\t\t},\n\t\t\t],\n\t\t\t[filePath],\n\t\t\tcwd,\n\t\t\t\"file\",\n\t\t);\n\t});\n\n\tregistry.register(\"grep\", (_toolName, input, cwd) => {\n\t\tconst searchPath = getString(input, \"path\");\n\t\tconst pattern = getString(input, \"pattern\");\n\t\tconst permissionPattern = searchPath ?? pattern;\n\t\tif (!permissionPattern) {\n\t\t\treturn [fallbackPermissionRequest(\"grep\")];\n\t\t}\n\n\t\tconst grepRequests: PermissionRequest[] = [\n\t\t\t{\n\t\t\t\tpermission: \"grep\",\n\t\t\t\tpatterns: [permissionPattern],\n\t\t\t\talways: [\"*\"],\n\t\t\t},\n\t\t];\n\t\treturn searchPath ? withExternalDirectoryRequests(grepRequests, [searchPath], cwd, \"directory\") : grepRequests;\n\t});\n\n\tconst listParser: ToolPermissionParser = (_toolName, input, cwd) => {\n\t\tconst searchPath = getString(input, \"path\") ?? \".\";\n\t\treturn withExternalDirectoryRequests(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tpermission: \"list\",\n\t\t\t\t\tpatterns: [searchPath],\n\t\t\t\t\talways: [searchPath],\n\t\t\t\t},\n\t\t\t],\n\t\t\t[searchPath],\n\t\t\tcwd,\n\t\t\t\"directory\",\n\t\t);\n\t};\n\n\tregistry.register(\"find\", listParser);\n\tregistry.register(\"ls\", listParser);\n\n\treturn registry;\n}\n"]}
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/parsers.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport { realpathWithoutOpen } from \"../../../../utils/paths.ts\";\nimport type { ToolInfo } from \"../../types.ts\";\nimport { extractPatchedPaths } from \"../gpt-apply-patch/index.ts\";\nimport { BashArity } from \"../permission-system/arity.ts\";\nimport { extractExternalPaths, isExternalPath } from \"../permission-system/external-dir.ts\";\nimport type { Request } from \"../permission-system/types.ts\";\nimport { setApprovedMonitorParent } from \"../terminal/monitor-permission.ts\";\n\n/** Simplified permission request without ID/session metadata */\nexport type PermissionRequest = Pick<Request, \"permission\" | \"patterns\" | \"always\">;\n\n/** Parser function that extracts permission requests from tool input */\nexport type ToolPermissionParser = (\n\ttoolName: string,\n\tinput: Record<string, unknown>,\n\tcwd: string,\n) => PermissionRequest[];\n\nfunction fallbackPermissionRequest(permission: string): PermissionRequest {\n\treturn {\n\t\tpermission,\n\t\tpatterns: [\"*\"],\n\t\talways: [\"*\"],\n\t};\n}\n\nfunction getString(input: Record<string, unknown>, ...keys: string[]): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = input[key];\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\ntype AlwaysScope = \"file\" | \"directory\";\n\nfunction toParentDirectoryPattern(inputPath: string, scope: AlwaysScope): string {\n\tif (inputPath === \"~\" || inputPath === \"$HOME\") {\n\t\treturn `${inputPath}/*`;\n\t}\n\n\tif (scope === \"directory\") {\n\t\treturn inputPath.endsWith(\"/\") || inputPath.endsWith(\"\\\\\") ? `${inputPath}*` : `${inputPath}/*`;\n\t}\n\n\tif (inputPath.endsWith(\"/\") || inputPath.endsWith(\"\\\\\")) {\n\t\treturn `${inputPath}*`;\n\t}\n\n\tconst parentPattern = inputPath.replace(/[\\\\/][^\\\\/]+$/, \"/*\");\n\tif (parentPattern === \"/*\") {\n\t\treturn inputPath;\n\t}\n\treturn parentPattern;\n}\n\nfunction parseFilePath(input: Record<string, unknown>): string | undefined {\n\treturn getString(input, \"path\", \"file_path\");\n}\n\nfunction withExternalDirectoryRequests(\n\trequests: PermissionRequest[],\n\tpaths: string[],\n\tcwd: string,\n\tscope: AlwaysScope,\n): PermissionRequest[] {\n\tconst externalPaths = paths.filter((inputPath) => isExternalPath(inputPath, cwd));\n\tif (externalPaths.length === 0) {\n\t\treturn requests;\n\t}\n\n\treturn [\n\t\t...requests,\n\t\t{\n\t\t\tpermission: \"external_directory\",\n\t\t\tpatterns: externalPaths,\n\t\t\talways: externalPaths.map((externalPath) => toParentDirectoryPattern(externalPath, scope)),\n\t\t},\n\t];\n}\n\n/** The requests a tool's own `permissionParser` derives from this call, or undefined when the tool declares none. */\nexport function toolOwnedPermissionRequests(\n\ttools: readonly ToolInfo[],\n\ttoolName: string,\n\tinput: Record<string, unknown>,\n\tcwd: string,\n): PermissionRequest[] | undefined {\n\tconst parser = tools.find((tool) => tool.name === toolName)?.permissionParser;\n\treturn parser?.(input, cwd).map((request) => ({\n\t\tpermission: request.permission,\n\t\tpatterns: [...request.patterns],\n\t\talways: [...request.always],\n\t}));\n}\n\n/** Registry for tool-specific permission parsers */\nexport class ParserRegistry {\n\tprivate readonly parsers = new Map<string, ToolPermissionParser>();\n\n\t/** Register a parser for a specific tool */\n\tregister(toolName: string, parser: ToolPermissionParser): void {\n\t\tthis.parsers.set(toolName, parser);\n\t}\n\n\t/** Whether a built-in parser owns this tool */\n\thas(toolName: string): boolean {\n\t\treturn this.parsers.has(toolName);\n\t}\n\n\t/** Parse tool input into permission requests */\n\tparse(toolName: string, input: Record<string, unknown>, cwd: string): PermissionRequest[] {\n\t\tconst parser = this.parsers.get(toolName);\n\t\tif (!parser) {\n\t\t\treturn [fallbackPermissionRequest(toolName)];\n\t\t}\n\t\treturn parser(toolName, input, cwd);\n\t}\n}\n\n/** Create registry with built-in parsers for standard tools */\nexport function createBuiltinParserRegistry(): ParserRegistry {\n\tconst registry = new ParserRegistry();\n\n\t// bash_input writes arbitrary stdin to a live shell session = arbitrary command execution,\n\t// so it MUST be gated in the SAME `bash` permission class (via the `input` field), else\n\t// read-only/ask presets would be bypassable through a persistent session. The steering/read\n\t// tools (bash_output/kill_bash/bash_resize) fall back to their own tool-named permissions.\n\tconst parseBashLikePermission =\n\t\t(commandKey: string): ToolPermissionParser =>\n\t\t(_toolName, input, cwd) => {\n\t\t\tconst command = getString(input, commandKey);\n\t\t\tif (!command) {\n\t\t\t\treturn [fallbackPermissionRequest(\"bash\")];\n\t\t\t}\n\n\t\t\tconst tokens = command.split(/\\s+/).filter(Boolean);\n\t\t\tconst prefix = BashArity.prefix(tokens).join(\" \");\n\t\t\tconst always = prefix ? [prefix, `${prefix} *`] : [\"*\"];\n\t\t\tconst requests: PermissionRequest[] = [\n\t\t\t\t{\n\t\t\t\t\tpermission: \"bash\",\n\t\t\t\t\tpatterns: [prefix || command],\n\t\t\t\t\talways,\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tconst externalPaths = extractExternalPaths(command, cwd);\n\t\t\tif (externalPaths.length > 0) {\n\t\t\t\trequests.push({\n\t\t\t\t\tpermission: \"external_directory\",\n\t\t\t\t\tpatterns: externalPaths,\n\t\t\t\t\talways: externalPaths.map((externalPath) => toParentDirectoryPattern(externalPath, \"file\")),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn requests;\n\t\t};\n\n\tregistry.register(\"bash\", parseBashLikePermission(\"command\"));\n\tregistry.register(\"bash_input\", parseBashLikePermission(\"input\"));\n\tregistry.register(\"monitor\", (toolName, input, cwd) => {\n\t\tconst path = getString(input, \"path\");\n\t\tif (path) {\n\t\t\t// This runs on the host main thread: the parent identity must be derived without open(2)\n\t\t\t// (realpath opens directories and blocks forever on a wedged autofs trigger). Registration\n\t\t\t// performs the authoritative access check and re-derives the parent the same way.\n\t\t\tsetApprovedMonitorParent(input, realpathWithoutOpen(dirname(resolve(cwd, path))));\n\t\t\treturn withExternalDirectoryRequests(\n\t\t\t\t[{ permission: \"read\", patterns: [path], always: [path] }],\n\t\t\t\t[path],\n\t\t\t\tcwd,\n\t\t\t\t\"file\",\n\t\t\t);\n\t\t}\n\t\treturn parseBashLikePermission(\"command\")(toolName, input, cwd);\n\t});\n\n\tconst editParser: ToolPermissionParser = () => {\n\t\treturn [fallbackPermissionRequest(\"edit\")];\n\t};\n\n\tconst parseEditPermission: ToolPermissionParser = (_toolName, input, cwd) => {\n\t\tconst filePath = parseFilePath(input);\n\t\tif (filePath) {\n\t\t\treturn withExternalDirectoryRequests(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tpermission: \"edit\",\n\t\t\t\t\t\tpatterns: [filePath],\n\t\t\t\t\t\talways: [filePath],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t[filePath],\n\t\t\t\tcwd,\n\t\t\t\t\"file\",\n\t\t\t);\n\t\t}\n\n\t\tconst patchText = getString(input, \"input\", \"patchText\");\n\t\tif (!patchText) {\n\t\t\treturn editParser(\"edit\", input, \"\");\n\t\t}\n\n\t\tconst patchedPaths = extractPatchedPaths(patchText);\n\t\tif (patchedPaths.length === 0) {\n\t\t\treturn editParser(\"edit\", input, \"\");\n\t\t}\n\n\t\tconst editRequests = patchedPaths.map((patchedPath) => ({\n\t\t\tpermission: \"edit\",\n\t\t\tpatterns: [patchedPath],\n\t\t\talways: [patchedPath],\n\t\t}));\n\n\t\treturn withExternalDirectoryRequests(editRequests, patchedPaths, cwd, \"file\");\n\t};\n\n\tregistry.register(\"edit\", parseEditPermission);\n\tregistry.register(\"write\", parseEditPermission);\n\tregistry.register(\"apply_patch\", parseEditPermission);\n\tregistry.register(\"multiedit\", parseEditPermission);\n\n\tregistry.register(\"read\", (_toolName, input, cwd) => {\n\t\tconst filePath = parseFilePath(input);\n\t\tif (!filePath) {\n\t\t\treturn [fallbackPermissionRequest(\"read\")];\n\t\t}\n\n\t\treturn withExternalDirectoryRequests(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tpermission: \"read\",\n\t\t\t\t\tpatterns: [filePath],\n\t\t\t\t\talways: [filePath],\n\t\t\t\t},\n\t\t\t],\n\t\t\t[filePath],\n\t\t\tcwd,\n\t\t\t\"file\",\n\t\t);\n\t});\n\n\tregistry.register(\"grep\", (_toolName, input, cwd) => {\n\t\tconst searchPath = getString(input, \"path\");\n\t\tconst pattern = getString(input, \"pattern\");\n\t\tconst permissionPattern = searchPath ?? pattern;\n\t\tif (!permissionPattern) {\n\t\t\treturn [fallbackPermissionRequest(\"grep\")];\n\t\t}\n\n\t\tconst grepRequests: PermissionRequest[] = [\n\t\t\t{\n\t\t\t\tpermission: \"grep\",\n\t\t\t\tpatterns: [permissionPattern],\n\t\t\t\talways: [\"*\"],\n\t\t\t},\n\t\t];\n\t\treturn searchPath ? withExternalDirectoryRequests(grepRequests, [searchPath], cwd, \"directory\") : grepRequests;\n\t});\n\n\tconst listParser: ToolPermissionParser = (_toolName, input, cwd) => {\n\t\tconst searchPath = getString(input, \"path\") ?? \".\";\n\t\treturn withExternalDirectoryRequests(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tpermission: \"list\",\n\t\t\t\t\tpatterns: [searchPath],\n\t\t\t\t\talways: [searchPath],\n\t\t\t\t},\n\t\t\t],\n\t\t\t[searchPath],\n\t\t\tcwd,\n\t\t\t\"directory\",\n\t\t);\n\t};\n\n\tregistry.register(\"find\", listParser);\n\tregistry.register(\"ls\", listParser);\n\n\treturn registry;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { type GitRunner } from "../../repository-identity.ts";
2
+ import type { ExtensionAPI } from "../types.ts";
3
+ export declare function createRepositoryIdentityExtension(run?: GitRunner): (pi: ExtensionAPI) => void;
4
+ declare const _default: (pi: ExtensionAPI) => void;
5
+ export default _default;
6
+ //# sourceMappingURL=repository-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-identity.d.ts","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/repository-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EAMd,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,wBAAgB,iCAAiC,CAAC,GAAG,CAAC,EAAE,SAAS,QACpD,YAAY,KAAG,IAAI,CAgB/B;6BAhBY,YAAY,KAAG,IAAI"}
@@ -0,0 +1,33 @@
1
+ import { parseRepositoryIdentity, REPOSITORY_IDENTITY_ENTRY_TYPE, readRepositoryIdentity, sameRepositoryIdentity, } from "../../repository-identity.js";
2
+ // Records which git repository a session's cwd belongs to, so a session whose repository was later
3
+ // moved can still be recognised as the same project from the new path (senpi#2181).
4
+ export function createRepositoryIdentityExtension(run) {
5
+ return (pi) => {
6
+ let generation = 0;
7
+ pi.on("session_start", async (_event, ctx) => {
8
+ const current = ++generation;
9
+ if (ctx.sessionManager.getSessionFile() === undefined)
10
+ return;
11
+ const identity = await readRepositoryIdentity(ctx.cwd, run);
12
+ if (current !== generation || identity === undefined)
13
+ return;
14
+ if (sameRepositoryIdentity(latestRecordedIdentity(ctx.sessionManager), identity))
15
+ return;
16
+ pi.appendEntry(REPOSITORY_IDENTITY_ENTRY_TYPE, identity);
17
+ });
18
+ pi.on("session_shutdown", () => {
19
+ generation++;
20
+ });
21
+ };
22
+ }
23
+ function latestRecordedIdentity(sessionManager) {
24
+ let recorded;
25
+ for (const entry of sessionManager.getEntries()) {
26
+ if (entry.type === "custom" && entry.customType === REPOSITORY_IDENTITY_ENTRY_TYPE) {
27
+ recorded = parseRepositoryIdentity(entry.data) ?? recorded;
28
+ }
29
+ }
30
+ return recorded;
31
+ }
32
+ export default createRepositoryIdentityExtension();
33
+ //# sourceMappingURL=repository-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-identity.js","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/repository-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,uBAAuB,EACvB,8BAA8B,EAE9B,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC;AAItC,mGAAmG;AACnG,oFAAoF;AACpF,MAAM,UAAU,iCAAiC,CAAC,GAAe;IAChE,OAAO,CAAC,EAAgB,EAAQ,EAAE;QACjC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAC5C,MAAM,OAAO,GAAG,EAAE,UAAU,CAAC;YAC7B,IAAI,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,SAAS;gBAAE,OAAO;YAC9D,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,UAAU,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO;YAC7D,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC;gBAAE,OAAO;YACzF,EAAE,CAAC,WAAW,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC9B,UAAU,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,cAAsC;IACrE,IAAI,QAAwC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,8BAA8B,EAAE,CAAC;YACpF,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;QAC5D,CAAC;IACF,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,eAAe,iCAAiC,EAAE,CAAC","sourcesContent":["import {\n\ttype GitRunner,\n\tparseRepositoryIdentity,\n\tREPOSITORY_IDENTITY_ENTRY_TYPE,\n\ttype RepositoryIdentity,\n\treadRepositoryIdentity,\n\tsameRepositoryIdentity,\n} from \"../../repository-identity.ts\";\nimport type { ReadonlySessionManager } from \"../../session-manager.ts\";\nimport type { ExtensionAPI } from \"../types.ts\";\n\n// Records which git repository a session's cwd belongs to, so a session whose repository was later\n// moved can still be recognised as the same project from the new path (senpi#2181).\nexport function createRepositoryIdentityExtension(run?: GitRunner) {\n\treturn (pi: ExtensionAPI): void => {\n\t\tlet generation = 0;\n\n\t\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\t\tconst current = ++generation;\n\t\t\tif (ctx.sessionManager.getSessionFile() === undefined) return;\n\t\t\tconst identity = await readRepositoryIdentity(ctx.cwd, run);\n\t\t\tif (current !== generation || identity === undefined) return;\n\t\t\tif (sameRepositoryIdentity(latestRecordedIdentity(ctx.sessionManager), identity)) return;\n\t\t\tpi.appendEntry(REPOSITORY_IDENTITY_ENTRY_TYPE, identity);\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", () => {\n\t\t\tgeneration++;\n\t\t});\n\t};\n}\n\nfunction latestRecordedIdentity(sessionManager: ReadonlySessionManager): RepositoryIdentity | undefined {\n\tlet recorded: RepositoryIdentity | undefined;\n\tfor (const entry of sessionManager.getEntries()) {\n\t\tif (entry.type === \"custom\" && entry.customType === REPOSITORY_IDENTITY_ENTRY_TYPE) {\n\t\t\trecorded = parseRepositoryIdentity(entry.data) ?? recorded;\n\t\t}\n\t}\n\treturn recorded;\n}\n\nexport default createRepositoryIdentityExtension();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bun-extension-importer.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bun-extension-importer.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAYxE,iFAAiF;AACjF,wBAAgB,0BAA0B,CACzC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IA6HpE,MAAM,OAAO,MAAM,YAAY;QAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAclF,aAAa,IAAI,SAAS,MAAM,EAAE;IAGlC,OAAO;EAQR"}
1
+ {"version":3,"file":"bun-extension-importer.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bun-extension-importer.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAYxE,iFAAiF;AACjF,wBAAgB,0BAA0B,CACzC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAiIpE,MAAM,OAAO,MAAM,YAAY;QAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlF,aAAa,IAAI,SAAS,MAAM,EAAE;IAGlC,OAAO;EAQR"}
@@ -6,7 +6,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
6
6
  }
7
7
  return path;
8
8
  };
9
- import { readFileSync, realpathSync } from "node:fs";
9
+ import { readFileSync, realpathSync, statSync } from "node:fs";
10
10
  import { createRequire, isBuiltin } from "node:module";
11
11
  import { dirname, extname, resolve } from "node:path";
12
12
  import { fileURLToPath } from "node:url";
@@ -30,6 +30,10 @@ export function createBunExtensionImporter(virtualModules) {
30
30
  throw new ExtensionGenerationDisposedError(registration.generation);
31
31
  };
32
32
  const moduleId = (filename) => `${extensionNamespace}:${registration.generation}/${encodeURIComponent(filename)}`;
33
+ // Only source the graph transpiles gets a graph id. Anything else (JSON, TOML, text, native
34
+ // addons) keeps its real path so Bun's own loader handles it: Bun 1.3.x cannot follow a
35
+ // plugin's hand-back to the `file` namespace from a runtime import() or require() (#2164).
36
+ const fileTarget = (resolved) => /\.[cm]?[jt]sx?$/.test(resolved) ? { id: moduleId(resolved), path: resolved } : { id: resolved };
33
37
  const resolveTarget = (specifier, filename) => {
34
38
  assertActive();
35
39
  if (Object.hasOwn(virtualModules, specifier) || isBuiltin(specifier) || specifier.startsWith("bun:"))
@@ -37,8 +41,7 @@ export function createBunExtensionImporter(virtualModules) {
37
41
  if (specifier.startsWith(`${extensionNamespace}:`))
38
42
  return { id: specifier };
39
43
  const path = specifier.startsWith("file:") ? fileURLToPath(specifier) : specifier;
40
- const resolved = realpathSync(Bun.resolveSync(path, dirname(filename)));
41
- return { id: moduleId(resolved), path: resolved };
44
+ return fileTarget(realpathSync(Bun.resolveSync(path, dirname(filename))));
42
45
  };
43
46
  const graph = {
44
47
  assertActive,
@@ -150,7 +153,10 @@ export function createBunExtensionImporter(virtualModules) {
150
153
  return {
151
154
  async import(path, _options) {
152
155
  assertActive();
153
- const id = moduleId(realpathSync(resolve(path)));
156
+ const absolute = realpathSync(resolve(path));
157
+ // A package directory loads through its main or index file, as a native import does.
158
+ const entry = statSync(absolute).isDirectory() ? realpathSync(Bun.resolveSync(absolute, absolute)) : absolute;
159
+ const { id } = fileTarget(entry);
154
160
  const module = await import(__rewriteRelativeImportExtension(id));
155
161
  const factory = module.default;
156
162
  if (typeof factory !== "function")
@@ -1 +1 @@
1
- {"version":3,"file":"bun-extension-importer.js","sourceRoot":"","sources":["../../../src/core/extensions/bun-extension-importer.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, realpathSync } from \"node:fs\";\nimport { createRequire, isBuiltin } from \"node:module\";\nimport { dirname, extname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { parse } from \"es-module-lexer/js\";\nimport { isCommonJsFile, rewriteCommonJsImport } from \"./bun-extension-commonjs.ts\";\nimport { ExtensionSourceError } from \"./bun-extension-error.ts\";\nimport {\n\ttype CommonJsBody,\n\ttype CommonJsModule,\n\tExtensionGenerationDisposedError,\n\textensionNamespace,\n\ttype ModuleSource,\n\tregisterExtensionGraph,\n} from \"./bun-extension-registry.ts\";\n\nexport { bunExtensionImporterStats } from \"./bun-extension-registry.ts\";\n\n// Keep the source/Node build independent of Bun's ambient type declarations.\ndeclare const Bun: {\n\tresolveSync(specifier: string, directory: string): string;\n\tTranspiler: new (options: {\n\t\treadonly loader: \"ts\" | \"tsx\" | \"jsx\";\n\t\treadonly target: \"bun\";\n\t\treadonly define: Readonly<Record<string, string>>;\n\t}) => { transformSync(source: string): string };\n};\n\n/** A generation owns only source bookkeeping; Bun owns evaluation and cycles. */\nexport function createBunExtensionImporter(\n\tvirtualModules: Readonly<Record<string, Readonly<Record<string, unknown>>>>,\n) {\n\tconst sources = new Map<string, ModuleSource>();\n\tconst commonJs = new Set<string>();\n\t// Live `module` objects by id, registered while a CommonJS body runs: a require inside a\n\t// cycle receives the partially built exports, as in Node, instead of an unset ESM default.\n\t// A body that throws is evicted so a later require re-throws instead of seeing a half-built module.\n\tconst commonJsModules = new Map<string, CommonJsModule>();\n\tconst nativeRequire = createRequire(import.meta.url);\n\tlet active = true;\n\tconst assertActive = () => {\n\t\tif (!active) throw new ExtensionGenerationDisposedError(registration.generation);\n\t};\n\tconst moduleId = (filename: string) =>\n\t\t`${extensionNamespace}:${registration.generation}/${encodeURIComponent(filename)}`;\n\tconst resolveTarget = (specifier: string, filename: string): { readonly id: string; readonly path?: string } => {\n\t\tassertActive();\n\t\tif (Object.hasOwn(virtualModules, specifier) || isBuiltin(specifier) || specifier.startsWith(\"bun:\"))\n\t\t\treturn { id: specifier };\n\t\tif (specifier.startsWith(`${extensionNamespace}:`)) return { id: specifier };\n\t\tconst path = specifier.startsWith(\"file:\") ? fileURLToPath(specifier) : specifier;\n\t\tconst resolved = realpathSync(Bun.resolveSync(path, dirname(filename)));\n\t\treturn { id: moduleId(resolved), path: resolved };\n\t};\n\tconst graph = {\n\t\tassertActive,\n\t\tresolve(specifier: string, filename: string): string {\n\t\t\treturn resolveTarget(specifier, filename).id;\n\t\t},\n\t\trequire(specifier: string, filename: string): unknown {\n\t\t\tconst id = graph.resolve(specifier, filename);\n\t\t\tconst evaluating = commonJsModules.get(id);\n\t\t\tif (evaluating !== undefined) return evaluating.exports;\n\t\t\tconst result: { readonly default?: unknown } = nativeRequire(id);\n\t\t\treturn commonJs.has(id) ? result.default : result;\n\t\t},\n\t\tevaluateCommonJs(filename: string, body: CommonJsBody): unknown {\n\t\t\tassertActive();\n\t\t\tconst id = moduleId(filename);\n\t\t\tconst module: CommonJsModule = { exports: {} };\n\t\t\tcommonJsModules.set(id, module);\n\t\t\ttry {\n\t\t\t\tbody.call(module.exports, module.exports, module);\n\t\t\t} catch (error) {\n\t\t\t\tcommonJsModules.delete(id);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn module.exports;\n\t\t},\n\t\tload(filename: string): ModuleSource {\n\t\t\tassertActive();\n\t\t\tconst existing = sources.get(filename);\n\t\t\tif (existing) return existing;\n\t\t\tconst source = readFileSync(filename, \"utf8\");\n\t\t\tlet name = \"__senpiExtensionMeta\";\n\t\t\twhile (source.includes(name)) name += \"_\";\n\t\t\tconst extension = extname(filename);\n\t\t\tconst transpiler = new Bun.Transpiler({\n\t\t\t\tloader: extension === \".tsx\" ? \"tsx\" : extension === \".jsx\" ? \"jsx\" : \"ts\",\n\t\t\t\ttarget: \"bun\",\n\t\t\t\tdefine: {\n\t\t\t\t\t\"import.meta\": name,\n\t\t\t\t\trequire: `${name}.require`,\n\t\t\t\t\t__filename: `${name}.path`,\n\t\t\t\t\t__dirname: `${name}.dir`,\n\t\t\t\t},\n\t\t\t});\n\t\t\tlet contents: string;\n\t\t\ttry {\n\t\t\t\tcontents = transpiler.transformSync(source);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof AggregateError) throw new ExtensionSourceError(filename, error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst [imports, , , hasModuleSyntax] = parse(contents, filename);\n\t\t\tconst edits: { readonly start: number; readonly end: number; readonly text: string }[] = [];\n\t\t\tlet commonJsImports = 0;\n\t\t\tfor (const edge of imports) {\n\t\t\t\tif (edge.type === \"dynamic\") {\n\t\t\t\t\t// Replace the keyword, not its argument: nested expressions, templates,\n\t\t\t\t\t// import attributes, and unavailable optional dependencies stay lazy.\n\t\t\t\t\tedits.push({ start: edge.importStart, end: edge.dynamicStart, text: `${name}.import` });\n\t\t\t\t} else if (edge.type === \"static\" || edge.type === \"reexport-star\") {\n\t\t\t\t\tconst target = resolveTarget(edge.specifier, filename);\n\t\t\t\t\tif (target.path !== undefined && isCommonJsFile(target.path)) {\n\t\t\t\t\t\t// \"import\" and \"export\" are both six characters, so the clause is\n\t\t\t\t\t\t// whatever sits between the keyword and the specifier in either form.\n\t\t\t\t\t\tconst clause = contents\n\t\t\t\t\t\t\t.slice(edge.importStart + \"import\".length, edge.start - 1)\n\t\t\t\t\t\t\t.replace(/\\bfrom\\s*$/, \"\");\n\t\t\t\t\t\t// This branch replaces the whole statement, so the attributes between the\n\t\t\t\t\t\t// specifier and the end of it have to travel with it: they pick the loader.\n\t\t\t\t\t\tconst attributes =\n\t\t\t\t\t\t\tedge.attributesStart < 0 ? \"\" : contents.slice(edge.end + 1, edge.importEnd).replace(/;\\s*$/, \"\");\n\t\t\t\t\t\tedits.push({\n\t\t\t\t\t\t\tstart: edge.importStart,\n\t\t\t\t\t\t\tend: edge.importEnd,\n\t\t\t\t\t\t\ttext: rewriteCommonJsImport(clause, target.id, `${name}Cjs${commonJsImports++}`, attributes),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tedits.push({ start: edge.start - 1, end: edge.end + 1, text: JSON.stringify(target.id) });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const edit of edits.sort((a, b) => b.start - a.start)) {\n\t\t\t\tcontents = contents.slice(0, edit.start) + edit.text + contents.slice(edit.end);\n\t\t\t}\n\t\t\t// A shebang is only a shebang on the first line, so it goes before any prologue.\n\t\t\tcontents = contents.replace(/^#![^\\n]*\\n/, \"\");\n\t\t\t// Runtime plugins load ESM, even for CommonJS source. Node's module\n\t\t\t// function wrapper preserves synchronous export assignment and keeps\n\t\t\t// `exports` and `module` reassignable bindings with `this` as the exports\n\t\t\t// object, as dependencies such as whatwg-url and jsdom require.\n\t\t\tif (!hasModuleSyntax && extension !== \".mjs\" && extension !== \".mts\") {\n\t\t\t\tcommonJs.add(moduleId(filename));\n\t\t\t\tcontents = `export default ${name}.commonJs(function (exports, module) {\\n${contents}\\n});`;\n\t\t\t}\n\t\t\tcontents = `import { metadata as ${name}Factory } from \"${extensionNamespace}:runtime\";\\nconst ${name} = ${name}Factory(${JSON.stringify(registration.generation)}, ${JSON.stringify(filename)});\\n${contents}`;\n\t\t\tconst prepared = { contents, loader: \"js\" } satisfies ModuleSource;\n\t\t\tsources.set(filename, prepared);\n\t\t\treturn prepared;\n\t\t},\n\t};\n\tconst registration = registerExtensionGraph(graph, virtualModules);\n\treturn {\n\t\tasync import(path: string, _options: { readonly default: true }): Promise<unknown> {\n\t\t\tassertActive();\n\t\t\tconst id = moduleId(realpathSync(resolve(path)));\n\t\t\tconst module: { readonly default?: unknown } = await import(id);\n\t\t\tconst factory = module.default;\n\t\t\tif (typeof factory !== \"function\") return factory;\n\t\t\t// This wrapper is not stored in Bun's permanent module registry. A\n\t\t\t// reachable old factory keeps its own computed-import graph alive.\n\t\t\treturn function (this: unknown, ...args: unknown[]) {\n\t\t\t\tgraph.assertActive();\n\t\t\t\treturn factory.apply(this, args);\n\t\t\t};\n\t\t},\n\t\t// The generation's staleness check reads these: every source file it transpiled.\n\t\tcompiledFiles(): readonly string[] {\n\t\t\treturn [...sources.keys()];\n\t\t},\n\t\tdispose() {\n\t\t\tactive = false;\n\t\t\tregistration.dispose();\n\t\t\tsources.clear();\n\t\t\tcommonJs.clear();\n\t\t\tcommonJsModules.clear();\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"bun-extension-importer.js","sourceRoot":"","sources":["../../../src/core/extensions/bun-extension-importer.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, realpathSync, statSync } from \"node:fs\";\nimport { createRequire, isBuiltin } from \"node:module\";\nimport { dirname, extname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { parse } from \"es-module-lexer/js\";\nimport { isCommonJsFile, rewriteCommonJsImport } from \"./bun-extension-commonjs.ts\";\nimport { ExtensionSourceError } from \"./bun-extension-error.ts\";\nimport {\n\ttype CommonJsBody,\n\ttype CommonJsModule,\n\tExtensionGenerationDisposedError,\n\textensionNamespace,\n\ttype ModuleSource,\n\tregisterExtensionGraph,\n} from \"./bun-extension-registry.ts\";\n\nexport { bunExtensionImporterStats } from \"./bun-extension-registry.ts\";\n\n// Keep the source/Node build independent of Bun's ambient type declarations.\ndeclare const Bun: {\n\tresolveSync(specifier: string, directory: string): string;\n\tTranspiler: new (options: {\n\t\treadonly loader: \"ts\" | \"tsx\" | \"jsx\";\n\t\treadonly target: \"bun\";\n\t\treadonly define: Readonly<Record<string, string>>;\n\t}) => { transformSync(source: string): string };\n};\n\n/** A generation owns only source bookkeeping; Bun owns evaluation and cycles. */\nexport function createBunExtensionImporter(\n\tvirtualModules: Readonly<Record<string, Readonly<Record<string, unknown>>>>,\n) {\n\tconst sources = new Map<string, ModuleSource>();\n\tconst commonJs = new Set<string>();\n\t// Live `module` objects by id, registered while a CommonJS body runs: a require inside a\n\t// cycle receives the partially built exports, as in Node, instead of an unset ESM default.\n\t// A body that throws is evicted so a later require re-throws instead of seeing a half-built module.\n\tconst commonJsModules = new Map<string, CommonJsModule>();\n\tconst nativeRequire = createRequire(import.meta.url);\n\tlet active = true;\n\tconst assertActive = () => {\n\t\tif (!active) throw new ExtensionGenerationDisposedError(registration.generation);\n\t};\n\tconst moduleId = (filename: string) =>\n\t\t`${extensionNamespace}:${registration.generation}/${encodeURIComponent(filename)}`;\n\t// Only source the graph transpiles gets a graph id. Anything else (JSON, TOML, text, native\n\t// addons) keeps its real path so Bun's own loader handles it: Bun 1.3.x cannot follow a\n\t// plugin's hand-back to the `file` namespace from a runtime import() or require() (#2164).\n\tconst fileTarget = (resolved: string): { readonly id: string; readonly path?: string } =>\n\t\t/\\.[cm]?[jt]sx?$/.test(resolved) ? { id: moduleId(resolved), path: resolved } : { id: resolved };\n\tconst resolveTarget = (specifier: string, filename: string): { readonly id: string; readonly path?: string } => {\n\t\tassertActive();\n\t\tif (Object.hasOwn(virtualModules, specifier) || isBuiltin(specifier) || specifier.startsWith(\"bun:\"))\n\t\t\treturn { id: specifier };\n\t\tif (specifier.startsWith(`${extensionNamespace}:`)) return { id: specifier };\n\t\tconst path = specifier.startsWith(\"file:\") ? fileURLToPath(specifier) : specifier;\n\t\treturn fileTarget(realpathSync(Bun.resolveSync(path, dirname(filename))));\n\t};\n\tconst graph = {\n\t\tassertActive,\n\t\tresolve(specifier: string, filename: string): string {\n\t\t\treturn resolveTarget(specifier, filename).id;\n\t\t},\n\t\trequire(specifier: string, filename: string): unknown {\n\t\t\tconst id = graph.resolve(specifier, filename);\n\t\t\tconst evaluating = commonJsModules.get(id);\n\t\t\tif (evaluating !== undefined) return evaluating.exports;\n\t\t\tconst result: { readonly default?: unknown } = nativeRequire(id);\n\t\t\treturn commonJs.has(id) ? result.default : result;\n\t\t},\n\t\tevaluateCommonJs(filename: string, body: CommonJsBody): unknown {\n\t\t\tassertActive();\n\t\t\tconst id = moduleId(filename);\n\t\t\tconst module: CommonJsModule = { exports: {} };\n\t\t\tcommonJsModules.set(id, module);\n\t\t\ttry {\n\t\t\t\tbody.call(module.exports, module.exports, module);\n\t\t\t} catch (error) {\n\t\t\t\tcommonJsModules.delete(id);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn module.exports;\n\t\t},\n\t\tload(filename: string): ModuleSource {\n\t\t\tassertActive();\n\t\t\tconst existing = sources.get(filename);\n\t\t\tif (existing) return existing;\n\t\t\tconst source = readFileSync(filename, \"utf8\");\n\t\t\tlet name = \"__senpiExtensionMeta\";\n\t\t\twhile (source.includes(name)) name += \"_\";\n\t\t\tconst extension = extname(filename);\n\t\t\tconst transpiler = new Bun.Transpiler({\n\t\t\t\tloader: extension === \".tsx\" ? \"tsx\" : extension === \".jsx\" ? \"jsx\" : \"ts\",\n\t\t\t\ttarget: \"bun\",\n\t\t\t\tdefine: {\n\t\t\t\t\t\"import.meta\": name,\n\t\t\t\t\trequire: `${name}.require`,\n\t\t\t\t\t__filename: `${name}.path`,\n\t\t\t\t\t__dirname: `${name}.dir`,\n\t\t\t\t},\n\t\t\t});\n\t\t\tlet contents: string;\n\t\t\ttry {\n\t\t\t\tcontents = transpiler.transformSync(source);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof AggregateError) throw new ExtensionSourceError(filename, error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst [imports, , , hasModuleSyntax] = parse(contents, filename);\n\t\t\tconst edits: { readonly start: number; readonly end: number; readonly text: string }[] = [];\n\t\t\tlet commonJsImports = 0;\n\t\t\tfor (const edge of imports) {\n\t\t\t\tif (edge.type === \"dynamic\") {\n\t\t\t\t\t// Replace the keyword, not its argument: nested expressions, templates,\n\t\t\t\t\t// import attributes, and unavailable optional dependencies stay lazy.\n\t\t\t\t\tedits.push({ start: edge.importStart, end: edge.dynamicStart, text: `${name}.import` });\n\t\t\t\t} else if (edge.type === \"static\" || edge.type === \"reexport-star\") {\n\t\t\t\t\tconst target = resolveTarget(edge.specifier, filename);\n\t\t\t\t\tif (target.path !== undefined && isCommonJsFile(target.path)) {\n\t\t\t\t\t\t// \"import\" and \"export\" are both six characters, so the clause is\n\t\t\t\t\t\t// whatever sits between the keyword and the specifier in either form.\n\t\t\t\t\t\tconst clause = contents\n\t\t\t\t\t\t\t.slice(edge.importStart + \"import\".length, edge.start - 1)\n\t\t\t\t\t\t\t.replace(/\\bfrom\\s*$/, \"\");\n\t\t\t\t\t\t// This branch replaces the whole statement, so the attributes between the\n\t\t\t\t\t\t// specifier and the end of it have to travel with it: they pick the loader.\n\t\t\t\t\t\tconst attributes =\n\t\t\t\t\t\t\tedge.attributesStart < 0 ? \"\" : contents.slice(edge.end + 1, edge.importEnd).replace(/;\\s*$/, \"\");\n\t\t\t\t\t\tedits.push({\n\t\t\t\t\t\t\tstart: edge.importStart,\n\t\t\t\t\t\t\tend: edge.importEnd,\n\t\t\t\t\t\t\ttext: rewriteCommonJsImport(clause, target.id, `${name}Cjs${commonJsImports++}`, attributes),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tedits.push({ start: edge.start - 1, end: edge.end + 1, text: JSON.stringify(target.id) });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const edit of edits.sort((a, b) => b.start - a.start)) {\n\t\t\t\tcontents = contents.slice(0, edit.start) + edit.text + contents.slice(edit.end);\n\t\t\t}\n\t\t\t// A shebang is only a shebang on the first line, so it goes before any prologue.\n\t\t\tcontents = contents.replace(/^#![^\\n]*\\n/, \"\");\n\t\t\t// Runtime plugins load ESM, even for CommonJS source. Node's module\n\t\t\t// function wrapper preserves synchronous export assignment and keeps\n\t\t\t// `exports` and `module` reassignable bindings with `this` as the exports\n\t\t\t// object, as dependencies such as whatwg-url and jsdom require.\n\t\t\tif (!hasModuleSyntax && extension !== \".mjs\" && extension !== \".mts\") {\n\t\t\t\tcommonJs.add(moduleId(filename));\n\t\t\t\tcontents = `export default ${name}.commonJs(function (exports, module) {\\n${contents}\\n});`;\n\t\t\t}\n\t\t\tcontents = `import { metadata as ${name}Factory } from \"${extensionNamespace}:runtime\";\\nconst ${name} = ${name}Factory(${JSON.stringify(registration.generation)}, ${JSON.stringify(filename)});\\n${contents}`;\n\t\t\tconst prepared = { contents, loader: \"js\" } satisfies ModuleSource;\n\t\t\tsources.set(filename, prepared);\n\t\t\treturn prepared;\n\t\t},\n\t};\n\tconst registration = registerExtensionGraph(graph, virtualModules);\n\treturn {\n\t\tasync import(path: string, _options: { readonly default: true }): Promise<unknown> {\n\t\t\tassertActive();\n\t\t\tconst absolute = realpathSync(resolve(path));\n\t\t\t// A package directory loads through its main or index file, as a native import does.\n\t\t\tconst entry = statSync(absolute).isDirectory() ? realpathSync(Bun.resolveSync(absolute, absolute)) : absolute;\n\t\t\tconst { id } = fileTarget(entry);\n\t\t\tconst module: { readonly default?: unknown } = await import(id);\n\t\t\tconst factory = module.default;\n\t\t\tif (typeof factory !== \"function\") return factory;\n\t\t\t// This wrapper is not stored in Bun's permanent module registry. A\n\t\t\t// reachable old factory keeps its own computed-import graph alive.\n\t\t\treturn function (this: unknown, ...args: unknown[]) {\n\t\t\t\tgraph.assertActive();\n\t\t\t\treturn factory.apply(this, args);\n\t\t\t};\n\t\t},\n\t\t// The generation's staleness check reads these: every source file it transpiled.\n\t\tcompiledFiles(): readonly string[] {\n\t\t\treturn [...sources.keys()];\n\t\t},\n\t\tdispose() {\n\t\t\tactive = false;\n\t\t\tregistration.dispose();\n\t\t\tsources.clear();\n\t\t\tcommonJs.clear();\n\t\t\tcommonJsModules.clear();\n\t\t},\n\t};\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { existsSync } from "node:fs";
2
- import { dirname } from "node:path";
2
+ import { dirname, isAbsolute } from "node:path";
3
3
  import { fileURLToPath, pathToFileURL } from "node:url";
4
4
  import { publishRuntimeMetadata } from "./extension-runtime-module.js";
5
5
  // esbuild reads an import() only when its second argument is fully static, and these
@@ -61,7 +61,10 @@ function graphFor(generation) {
61
61
  function metadata(generation, filename) {
62
62
  const resolvePath = (specifier) => {
63
63
  const id = graphFor(generation).resolve(specifier, filename);
64
- return id.startsWith(`${extensionNamespace}:`) ? decodeURIComponent(id.slice(id.indexOf("/") + 1)) : undefined;
64
+ if (id.startsWith(`${extensionNamespace}:`))
65
+ return decodeURIComponent(id.slice(id.indexOf("/") + 1));
66
+ // Files Bun loads natively (JSON, assets) resolve to their real path, not a graph id.
67
+ return isAbsolute(id) ? id : undefined;
65
68
  };
66
69
  // CommonJS code calls `require.resolve` for sibling files (jsdom locates its XHR sync
67
70
  // worker that way), so `require` is a function object carrying Node's resolver shape.
@@ -117,9 +120,7 @@ function installRegistry(virtualModules) {
117
120
  if (parsed === undefined)
118
121
  throw new ExtensionModuleIdError(path);
119
122
  graphFor(parsed.generation);
120
- return /\.[cm]?[jt]sx?$/.test(parsed.filename)
121
- ? { path, namespace: extensionNamespace }
122
- : { path: parsed.filename, namespace: "file" };
123
+ return { path, namespace: extensionNamespace };
123
124
  });
124
125
  builder.onLoad({ filter: /.*/, namespace: extensionNamespace }, ({ path }) => {
125
126
  const parsed = splitModuleId(path);
@@ -1 +1 @@
1
- {"version":3,"file":"bun-extension-registry.js","sourceRoot":"","sources":["../../../src/core/extensions/bun-extension-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { publishRuntimeMetadata } from \"./extension-runtime-module.ts\";\n\nexport type ModuleSource = { readonly contents: string; readonly loader: \"js\" };\nexport type Resolution = { readonly path: string; readonly namespace: string };\nexport type CommonJsModule = { exports: unknown };\nexport type CommonJsBody = (this: unknown, exports: unknown, module: CommonJsModule) => void;\nexport interface ExtensionGraph {\n\tresolve(specifier: string, filename: string): string;\n\tload(filename: string): ModuleSource;\n\trequire(specifier: string, filename: string): unknown;\n\tevaluateCommonJs(filename: string, body: CommonJsBody): unknown;\n}\ntype ModuleObject = { readonly exports: Readonly<Record<string, unknown>>; readonly loader: \"object\" };\ndeclare const Bun: {\n\tplugin(options: {\n\t\treadonly name: string;\n\t\treadonly setup: (builder: {\n\t\t\tmodule(name: string, load: () => ModuleObject): void;\n\t\t\tonResolve(\n\t\t\t\toptions: { readonly filter: RegExp; readonly namespace: string },\n\t\t\t\tresolve: (args: { readonly path: string }) => Resolution,\n\t\t\t): void;\n\t\t\tonLoad(\n\t\t\t\toptions: { readonly filter: RegExp; readonly namespace: string },\n\t\t\t\tload: (args: { readonly path: string }) => ModuleSource,\n\t\t\t): void;\n\t\t}) => void;\n\t}): void;\n};\n\n// esbuild reads an import() only when its second argument is fully static, and these\n// attributes are whatever the extension wrote. The call stays dynamic either way, so\n// the importer is built at runtime and the bundler never has to read it.\nconst importModule = new Function(\"specifier\", \"options\", \"return import(specifier, options)\") as (\n\tspecifier: string,\n\toptions?: ImportCallOptions,\n) => Promise<unknown>;\n\nexport const extensionNamespace = \"senpi-extension\";\nconst RUNTIME_SPECIFIER = \"runtime\";\n// Inside a `bun build --compile` binary the shim has no on-disk path (import.meta.url is a\n// $bunfs URL), so the file route is only available when the file is really there; the compiled\n// binary keeps the virtual module, which it never had a problem with.\nconst runtimeModulePath = resolveRuntimeModulePath();\n\nfunction resolveRuntimeModulePath(): string | undefined {\n\ttry {\n\t\tconst candidate = fileURLToPath(new URL(\"./extension-runtime-module.js\", import.meta.url));\n\t\treturn existsSync(candidate) ? candidate : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n// An id is `<generation>/<encodeURIComponent(filename)>`. The encoded half never contains a\n// literal \"/\" (Windows separators arrive as %5C), so the FIRST slash is always the generation\n// separator — but only when one exists. A bare id with no slash used to slice to nonsense and\n// surface as `Cannot find package '<generation>'` (omo#8427).\nfunction splitModuleId(id: string): { readonly generation: string; readonly filename: string } | undefined {\n\tconst slash = id.indexOf(\"/\");\n\tif (slash <= 0 || slash === id.length - 1) return undefined;\n\treturn { generation: id.slice(0, slash), filename: decodeURIComponent(id.slice(slash + 1)) };\n}\nconst graphs = new Map<string, WeakRef<ExtensionGraph>>();\nconst collected = new FinalizationRegistry<string>((generation) => graphs.delete(generation));\nlet nextGeneration = 0;\nlet installed = false;\nlet pluginRegistrations = 0;\nconst registeredHosts = new Set<string>();\n\nexport class ExtensionModuleIdError extends Error {\n\treadonly name = \"ExtensionModuleIdError\";\n\tconstructor(id: string) {\n\t\tsuper(`Extension module id is not \"<generation>/<encoded filename>\": ${id}`);\n\t}\n}\n\nexport class ExtensionGenerationDisposedError extends Error {\n\treadonly name = \"ExtensionGenerationDisposedError\";\n\treadonly generation: string;\n\tconstructor(generation: string) {\n\t\tsuper(`Extension generation ${generation} has been disposed`);\n\t\tthis.generation = generation;\n\t}\n}\nfunction graphFor(generation: string): ExtensionGraph {\n\tconst graph = graphs.get(generation)?.deref();\n\tif (!graph) throw new ExtensionGenerationDisposedError(generation);\n\treturn graph;\n}\n\n// Module-registry exports must never close over a graph: Bun retains modules.\n// Only the importer, returned factory wrappers, and live runtimes own graphs.\nfunction metadata(generation: string, filename: string) {\n\tconst resolvePath = (specifier: string) => {\n\t\tconst id = graphFor(generation).resolve(specifier, filename);\n\t\treturn id.startsWith(`${extensionNamespace}:`) ? decodeURIComponent(id.slice(id.indexOf(\"/\") + 1)) : undefined;\n\t};\n\t// CommonJS code calls `require.resolve` for sibling files (jsdom locates its XHR sync\n\t// worker that way), so `require` is a function object carrying Node's resolver shape.\n\tconst require = Object.assign((specifier: string) => graphFor(generation).require(specifier, filename), {\n\t\tresolve: (specifier: string) => resolvePath(specifier) ?? graphFor(generation).resolve(specifier, filename),\n\t});\n\treturn {\n\t\turl: pathToFileURL(filename).href,\n\t\tpath: filename,\n\t\tdir: dirname(filename),\n\t\trequire,\n\t\tcommonJs: (body: CommonJsBody) => graphFor(generation).evaluateCommonJs(filename, body),\n\t\timport: async (specifier: string, options?: ImportCallOptions) =>\n\t\t\timportModule(graphFor(generation).resolve(specifier, filename), options),\n\t\tresolve: (specifier: string) => {\n\t\t\tconst path = resolvePath(specifier);\n\t\t\treturn path === undefined ? graphFor(generation).resolve(specifier, filename) : pathToFileURL(path).href;\n\t\t},\n\t};\n}\n\n// A separate activation prevents permanent hooks from sharing a closure\n// environment with registerExtensionGraph's disposable graph reference.\nfunction installRegistry(virtualModules: Readonly<Record<string, Readonly<Record<string, unknown>>>>) {\n\tconst hosts = Object.entries(virtualModules).filter(([name]) => !registeredHosts.has(name));\n\tif (!installed || hosts.length > 0) {\n\t\tpluginRegistrations++;\n\t\tBun.plugin({\n\t\t\tname: extensionNamespace,\n\t\t\tsetup(builder) {\n\t\t\t\tfor (const [name, exports] of hosts) {\n\t\t\t\t\tbuilder.module(name, () => ({ exports, loader: \"object\" }));\n\t\t\t\t\tregisteredHosts.add(name);\n\t\t\t\t}\n\t\t\t\tif (installed) return;\n\t\t\t\t// \"runtime\" resolves to a real file, never a Bun.plugin virtual module. A\n\t\t\t\t// builder.module() registration is intermittently invisible to the resolver under\n\t\t\t\t// `bun test --parallel` on a loaded Windows shard: onResolve still fires and returns\n\t\t\t\t// the namespace, the registration is still listed, and Bun answers\n\t\t\t\t// `Cannot find package 'runtime'` anyway — generation 1 served 40 resolves and\n\t\t\t\t// refused the 41st in the same worker (omo#8427, run 35329245740). A file on disk\n\t\t\t\t// has no registration window to lose.\n\t\t\t\tpublishRuntimeMetadata(metadata);\n\t\t\t\tbuilder.module(`${extensionNamespace}:${RUNTIME_SPECIFIER}`, () => ({\n\t\t\t\t\texports: { metadata },\n\t\t\t\t\tloader: \"object\",\n\t\t\t\t}));\n\t\t\t\tbuilder.onResolve({ filter: /.*/, namespace: extensionNamespace }, ({ path }) => {\n\t\t\t\t\tif (path === RUNTIME_SPECIFIER)\n\t\t\t\t\t\treturn runtimeModulePath === undefined\n\t\t\t\t\t\t\t? { path, namespace: extensionNamespace }\n\t\t\t\t\t\t\t: { path: runtimeModulePath, namespace: \"file\" };\n\t\t\t\t\tconst parsed = splitModuleId(path);\n\t\t\t\t\tif (parsed === undefined) throw new ExtensionModuleIdError(path);\n\t\t\t\t\tgraphFor(parsed.generation);\n\t\t\t\t\treturn /\\.[cm]?[jt]sx?$/.test(parsed.filename)\n\t\t\t\t\t\t? { path, namespace: extensionNamespace }\n\t\t\t\t\t\t: { path: parsed.filename, namespace: \"file\" };\n\t\t\t\t});\n\t\t\t\tbuilder.onLoad({ filter: /.*/, namespace: extensionNamespace }, ({ path }) => {\n\t\t\t\t\tconst parsed = splitModuleId(path);\n\t\t\t\t\tif (parsed === undefined) throw new ExtensionModuleIdError(path);\n\t\t\t\t\treturn graphFor(parsed.generation).load(parsed.filename);\n\t\t\t\t});\n\t\t\t\tinstalled = true;\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport function registerExtensionGraph(\n\tgraph: ExtensionGraph,\n\tvirtualModules: Readonly<Record<string, Readonly<Record<string, unknown>>>>,\n) {\n\tinstallRegistry(virtualModules);\n\tconst generation = String(nextGeneration++);\n\tgraphs.set(generation, new WeakRef(graph));\n\tcollected.register(graph, generation, graph);\n\treturn {\n\t\tgeneration,\n\t\tdispose() {\n\t\t\tgraphs.delete(generation);\n\t\t\tcollected.unregister(graph);\n\t\t},\n\t};\n}\n\n/** Internal lifecycle diagnostics, shared by regression and compiled probes. */\nexport function bunExtensionImporterStats() {\n\treturn { generations: [...graphs.values()].filter((entry) => entry.deref()).length, plugins: pluginRegistrations };\n}\n"]}
1
+ {"version":3,"file":"bun-extension-registry.js","sourceRoot":"","sources":["../../../src/core/extensions/bun-extension-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, isAbsolute } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { publishRuntimeMetadata } from \"./extension-runtime-module.ts\";\n\nexport type ModuleSource = { readonly contents: string; readonly loader: \"js\" };\nexport type Resolution = { readonly path: string; readonly namespace: string };\nexport type CommonJsModule = { exports: unknown };\nexport type CommonJsBody = (this: unknown, exports: unknown, module: CommonJsModule) => void;\nexport interface ExtensionGraph {\n\tresolve(specifier: string, filename: string): string;\n\tload(filename: string): ModuleSource;\n\trequire(specifier: string, filename: string): unknown;\n\tevaluateCommonJs(filename: string, body: CommonJsBody): unknown;\n}\ntype ModuleObject = { readonly exports: Readonly<Record<string, unknown>>; readonly loader: \"object\" };\ndeclare const Bun: {\n\tplugin(options: {\n\t\treadonly name: string;\n\t\treadonly setup: (builder: {\n\t\t\tmodule(name: string, load: () => ModuleObject): void;\n\t\t\tonResolve(\n\t\t\t\toptions: { readonly filter: RegExp; readonly namespace: string },\n\t\t\t\tresolve: (args: { readonly path: string }) => Resolution,\n\t\t\t): void;\n\t\t\tonLoad(\n\t\t\t\toptions: { readonly filter: RegExp; readonly namespace: string },\n\t\t\t\tload: (args: { readonly path: string }) => ModuleSource,\n\t\t\t): void;\n\t\t}) => void;\n\t}): void;\n};\n\n// esbuild reads an import() only when its second argument is fully static, and these\n// attributes are whatever the extension wrote. The call stays dynamic either way, so\n// the importer is built at runtime and the bundler never has to read it.\nconst importModule = new Function(\"specifier\", \"options\", \"return import(specifier, options)\") as (\n\tspecifier: string,\n\toptions?: ImportCallOptions,\n) => Promise<unknown>;\n\nexport const extensionNamespace = \"senpi-extension\";\nconst RUNTIME_SPECIFIER = \"runtime\";\n// Inside a `bun build --compile` binary the shim has no on-disk path (import.meta.url is a\n// $bunfs URL), so the file route is only available when the file is really there; the compiled\n// binary keeps the virtual module, which it never had a problem with.\nconst runtimeModulePath = resolveRuntimeModulePath();\n\nfunction resolveRuntimeModulePath(): string | undefined {\n\ttry {\n\t\tconst candidate = fileURLToPath(new URL(\"./extension-runtime-module.js\", import.meta.url));\n\t\treturn existsSync(candidate) ? candidate : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n// An id is `<generation>/<encodeURIComponent(filename)>`. The encoded half never contains a\n// literal \"/\" (Windows separators arrive as %5C), so the FIRST slash is always the generation\n// separator — but only when one exists. A bare id with no slash used to slice to nonsense and\n// surface as `Cannot find package '<generation>'` (omo#8427).\nfunction splitModuleId(id: string): { readonly generation: string; readonly filename: string } | undefined {\n\tconst slash = id.indexOf(\"/\");\n\tif (slash <= 0 || slash === id.length - 1) return undefined;\n\treturn { generation: id.slice(0, slash), filename: decodeURIComponent(id.slice(slash + 1)) };\n}\nconst graphs = new Map<string, WeakRef<ExtensionGraph>>();\nconst collected = new FinalizationRegistry<string>((generation) => graphs.delete(generation));\nlet nextGeneration = 0;\nlet installed = false;\nlet pluginRegistrations = 0;\nconst registeredHosts = new Set<string>();\n\nexport class ExtensionModuleIdError extends Error {\n\treadonly name = \"ExtensionModuleIdError\";\n\tconstructor(id: string) {\n\t\tsuper(`Extension module id is not \"<generation>/<encoded filename>\": ${id}`);\n\t}\n}\n\nexport class ExtensionGenerationDisposedError extends Error {\n\treadonly name = \"ExtensionGenerationDisposedError\";\n\treadonly generation: string;\n\tconstructor(generation: string) {\n\t\tsuper(`Extension generation ${generation} has been disposed`);\n\t\tthis.generation = generation;\n\t}\n}\nfunction graphFor(generation: string): ExtensionGraph {\n\tconst graph = graphs.get(generation)?.deref();\n\tif (!graph) throw new ExtensionGenerationDisposedError(generation);\n\treturn graph;\n}\n\n// Module-registry exports must never close over a graph: Bun retains modules.\n// Only the importer, returned factory wrappers, and live runtimes own graphs.\nfunction metadata(generation: string, filename: string) {\n\tconst resolvePath = (specifier: string) => {\n\t\tconst id = graphFor(generation).resolve(specifier, filename);\n\t\tif (id.startsWith(`${extensionNamespace}:`)) return decodeURIComponent(id.slice(id.indexOf(\"/\") + 1));\n\t\t// Files Bun loads natively (JSON, assets) resolve to their real path, not a graph id.\n\t\treturn isAbsolute(id) ? id : undefined;\n\t};\n\t// CommonJS code calls `require.resolve` for sibling files (jsdom locates its XHR sync\n\t// worker that way), so `require` is a function object carrying Node's resolver shape.\n\tconst require = Object.assign((specifier: string) => graphFor(generation).require(specifier, filename), {\n\t\tresolve: (specifier: string) => resolvePath(specifier) ?? graphFor(generation).resolve(specifier, filename),\n\t});\n\treturn {\n\t\turl: pathToFileURL(filename).href,\n\t\tpath: filename,\n\t\tdir: dirname(filename),\n\t\trequire,\n\t\tcommonJs: (body: CommonJsBody) => graphFor(generation).evaluateCommonJs(filename, body),\n\t\timport: async (specifier: string, options?: ImportCallOptions) =>\n\t\t\timportModule(graphFor(generation).resolve(specifier, filename), options),\n\t\tresolve: (specifier: string) => {\n\t\t\tconst path = resolvePath(specifier);\n\t\t\treturn path === undefined ? graphFor(generation).resolve(specifier, filename) : pathToFileURL(path).href;\n\t\t},\n\t};\n}\n\n// A separate activation prevents permanent hooks from sharing a closure\n// environment with registerExtensionGraph's disposable graph reference.\nfunction installRegistry(virtualModules: Readonly<Record<string, Readonly<Record<string, unknown>>>>) {\n\tconst hosts = Object.entries(virtualModules).filter(([name]) => !registeredHosts.has(name));\n\tif (!installed || hosts.length > 0) {\n\t\tpluginRegistrations++;\n\t\tBun.plugin({\n\t\t\tname: extensionNamespace,\n\t\t\tsetup(builder) {\n\t\t\t\tfor (const [name, exports] of hosts) {\n\t\t\t\t\tbuilder.module(name, () => ({ exports, loader: \"object\" }));\n\t\t\t\t\tregisteredHosts.add(name);\n\t\t\t\t}\n\t\t\t\tif (installed) return;\n\t\t\t\t// \"runtime\" resolves to a real file, never a Bun.plugin virtual module. A\n\t\t\t\t// builder.module() registration is intermittently invisible to the resolver under\n\t\t\t\t// `bun test --parallel` on a loaded Windows shard: onResolve still fires and returns\n\t\t\t\t// the namespace, the registration is still listed, and Bun answers\n\t\t\t\t// `Cannot find package 'runtime'` anyway — generation 1 served 40 resolves and\n\t\t\t\t// refused the 41st in the same worker (omo#8427, run 35329245740). A file on disk\n\t\t\t\t// has no registration window to lose.\n\t\t\t\tpublishRuntimeMetadata(metadata);\n\t\t\t\tbuilder.module(`${extensionNamespace}:${RUNTIME_SPECIFIER}`, () => ({\n\t\t\t\t\texports: { metadata },\n\t\t\t\t\tloader: \"object\",\n\t\t\t\t}));\n\t\t\t\tbuilder.onResolve({ filter: /.*/, namespace: extensionNamespace }, ({ path }) => {\n\t\t\t\t\tif (path === RUNTIME_SPECIFIER)\n\t\t\t\t\t\treturn runtimeModulePath === undefined\n\t\t\t\t\t\t\t? { path, namespace: extensionNamespace }\n\t\t\t\t\t\t\t: { path: runtimeModulePath, namespace: \"file\" };\n\t\t\t\t\tconst parsed = splitModuleId(path);\n\t\t\t\t\tif (parsed === undefined) throw new ExtensionModuleIdError(path);\n\t\t\t\t\tgraphFor(parsed.generation);\n\t\t\t\t\treturn { path, namespace: extensionNamespace };\n\t\t\t\t});\n\t\t\t\tbuilder.onLoad({ filter: /.*/, namespace: extensionNamespace }, ({ path }) => {\n\t\t\t\t\tconst parsed = splitModuleId(path);\n\t\t\t\t\tif (parsed === undefined) throw new ExtensionModuleIdError(path);\n\t\t\t\t\treturn graphFor(parsed.generation).load(parsed.filename);\n\t\t\t\t});\n\t\t\t\tinstalled = true;\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport function registerExtensionGraph(\n\tgraph: ExtensionGraph,\n\tvirtualModules: Readonly<Record<string, Readonly<Record<string, unknown>>>>,\n) {\n\tinstallRegistry(virtualModules);\n\tconst generation = String(nextGeneration++);\n\tgraphs.set(generation, new WeakRef(graph));\n\tcollected.register(graph, generation, graph);\n\treturn {\n\t\tgeneration,\n\t\tdispose() {\n\t\t\tgraphs.delete(generation);\n\t\t\tcollected.unregister(graph);\n\t\t},\n\t};\n}\n\n/** Internal lifecycle diagnostics, shared by regression and compiled probes. */\nexport function bunExtensionImporterStats() {\n\treturn { generations: [...graphs.values()].filter((entry) => entry.deref()).length, plugins: pluginRegistrations };\n}\n"]}
@@ -7,7 +7,7 @@ export type { McpServerDeclaration } from "./builtin/mcp/config-schema.ts";
7
7
  export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.ts";
8
8
  export type { ExtensionErrorListener, ExtensionToolHookLifecycleEvent, ExtensionToolHookLifecycleObserver, ExtensionToolHookLifecycleStatus, ExtensionToolHookName, ForkHandler, NavigateTreeHandler, NewSessionHandler, ShutdownHandler, SwitchSessionHandler, } from "./runner.ts";
9
9
  export { ExtensionRunner } from "./runner.ts";
10
- export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactOptions, ContextEvent, ContextEventResult, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRendererOptions, EntryRenderOptions, ExecOptions, ExecResult, ExecuteToolErrorCode, ExecuteToolHandler, ExecuteToolOptions, ExecuteToolResult, ExecuteToolUpdateCallback, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRpcRequestHandler, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FilesystemOperation, FilesystemPolicy, FilesystemPolicyChecker, FilesystemPolicyDecision, FilesystemPolicyRequest, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputDispositionEvent, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectEventResult, ModelSelectSource, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionContext, SessionEvent, SessionInfoChangedEvent, SessionKind, SessionParkedEvent, SessionResumedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, SystemPromptChangeEvent, TerminalInputHandler, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UIPromptEndEvent, UIPromptKind, UIPromptStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
10
+ export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactOptions, ContextEvent, ContextEventResult, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRendererOptions, EntryRenderOptions, ExecOptions, ExecResult, ExecuteToolErrorCode, ExecuteToolHandler, ExecuteToolOptions, ExecuteToolResult, ExecuteToolUpdateCallback, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRpcRequestHandler, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FilesystemOperation, FilesystemPolicy, FilesystemPolicyChecker, FilesystemPolicyDecision, FilesystemPolicyRequest, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputDispositionEvent, InputEvent, InputEventResult, InputSource, KernelPreludeContribution, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectEventResult, ModelSelectSource, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionContext, SessionEvent, SessionInfoChangedEvent, SessionKind, SessionParkedEvent, SessionResumedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, SystemPromptChangeEvent, TerminalInputHandler, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolPermissionRequest, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UIPromptEndEvent, UIPromptKind, UIPromptStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
11
11
  export { defineTool, EMPTY_SESSION_CONTEXT, ExecuteToolError, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isPowerShellToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, RUNTIME_EXTENSION_PATH, } from "./types.ts";
12
12
  export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.ts";
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACjF,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,sBAAsB,EACtB,+BAA+B,EAC/B,kCAAkC,EAClC,gCAAgC,EAChC,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACX,0BAA0B,EAC1B,aAAa,EACb,iBAAiB,EACjB,eAAe,EAEf,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAElB,aAAa,EACb,2BAA2B,EAE3B,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,wBAAwB,EAExB,cAAc,EAEd,YAAY,EAEZ,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EAEnB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,SAAS,EACT,gBAAgB,EAEhB,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAC9B,gBAAgB,EAChB,uBAAuB,EAEvB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,0BAA0B,EAE1B,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EAEf,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EAEnB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EAEnB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EAEnB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,eAAe,EAEf,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EAEpB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EAEpB,aAAa,EACb,mBAAmB,EAEnB,cAAc,EAEd,qBAAqB,EAErB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,QAAQ,EACR,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAElB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkL9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport type { McpServerDeclaration } from \"./builtin/mcp/config-schema.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tExtensionToolHookLifecycleEvent,\n\tExtensionToolHookLifecycleObserver,\n\tExtensionToolHookLifecycleStatus,\n\tExtensionToolHookName,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\t// Context\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRendererOptions,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExecuteToolErrorCode,\n\tExecuteToolHandler,\n\tExecuteToolOptions,\n\tExecuteToolResult,\n\tExecuteToolUpdateCallback,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\tExtensionRpcRequestHandler,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFilesystemOperation,\n\tFilesystemPolicy,\n\tFilesystemPolicyChecker,\n\tFilesystemPolicyDecision,\n\tFilesystemPolicyRequest,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputDispositionEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectEventResult,\n\tModelSelectSource,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionContext,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionKind,\n\tSessionParkedEvent,\n\tSessionResumedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tSystemPromptChangeEvent,\n\tTerminalInputHandler,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tEMPTY_SESSION_CONTEXT,\n\tExecuteToolError,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\tRUNTIME_EXTENSION_PATH,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoL9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport type { McpServerDeclaration } from \"./builtin/mcp/config-schema.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tExtensionToolHookLifecycleEvent,\n\tExtensionToolHookLifecycleObserver,\n\tExtensionToolHookLifecycleStatus,\n\tExtensionToolHookName,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\t// Context\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRendererOptions,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExecuteToolErrorCode,\n\tExecuteToolHandler,\n\tExecuteToolOptions,\n\tExecuteToolResult,\n\tExecuteToolUpdateCallback,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\tExtensionRpcRequestHandler,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFilesystemOperation,\n\tFilesystemPolicy,\n\tFilesystemPolicyChecker,\n\tFilesystemPolicyDecision,\n\tFilesystemPolicyRequest,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputDispositionEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKernelPreludeContribution,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectEventResult,\n\tModelSelectSource,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionContext,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionKind,\n\tSessionParkedEvent,\n\tSessionResumedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tSystemPromptChangeEvent,\n\tTerminalInputHandler,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolPermissionRequest,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tEMPTY_SESSION_CONTEXT,\n\tExecuteToolError,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\tRUNTIME_EXTENSION_PATH,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
@@ -0,0 +1,13 @@
1
+ import type { KernelPreludeContribution } from "./types.ts";
2
+ export declare class KernelPreludeCollisionError extends Error {
3
+ readonly name = "KernelPreludeCollisionError";
4
+ readonly toolName: string;
5
+ readonly collidingExport: string;
6
+ constructor(toolName: string, collidingExport: string);
7
+ }
8
+ /**
9
+ * The `kernelPrelude` a tool projects through `getAllTools()`. Throws when an export would shadow a built-in kernel
10
+ * helper or a `__`-prefixed kernel internal, since installing it would break every later cell.
11
+ */
12
+ export declare function projectKernelPrelude(toolName: string, prelude: KernelPreludeContribution | undefined): KernelPreludeContribution | undefined;
13
+ //# sourceMappingURL=kernel-prelude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-prelude.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/kernel-prelude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAsB5D,qBAAa,2BAA4B,SAAQ,KAAK;IACrD,QAAQ,CAAC,IAAI,iCAAiC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,YAAY,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAMpD;CACD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,yBAAyB,GAAG,SAAS,GAC5C,yBAAyB,GAAG,SAAS,CAIvC"}
@@ -0,0 +1,38 @@
1
+ /** Helpers every eval kernel (JavaScript and Python) installs before any contribution runs. */
2
+ const KERNEL_BUILTIN_GLOBALS = new Set([
3
+ "agent",
4
+ "completion",
5
+ "display",
6
+ "env",
7
+ "log",
8
+ "output",
9
+ "parallel",
10
+ "phase",
11
+ "pipeline",
12
+ "print",
13
+ "read",
14
+ "tool",
15
+ "tool_schema",
16
+ "tools",
17
+ "workpool",
18
+ "write",
19
+ ]);
20
+ export class KernelPreludeCollisionError extends Error {
21
+ constructor(toolName, collidingExport) {
22
+ super(`Tool "${toolName}" kernelPrelude export "${collidingExport}" collides with a built-in eval kernel global.`);
23
+ this.name = "KernelPreludeCollisionError";
24
+ this.toolName = toolName;
25
+ this.collidingExport = collidingExport;
26
+ }
27
+ }
28
+ /**
29
+ * The `kernelPrelude` a tool projects through `getAllTools()`. Throws when an export would shadow a built-in kernel
30
+ * helper or a `__`-prefixed kernel internal, since installing it would break every later cell.
31
+ */
32
+ export function projectKernelPrelude(toolName, prelude) {
33
+ const collision = prelude?.exports.find((name) => KERNEL_BUILTIN_GLOBALS.has(name) || name.startsWith("__"));
34
+ if (collision !== undefined)
35
+ throw new KernelPreludeCollisionError(toolName, collision);
36
+ return prelude;
37
+ }
38
+ //# sourceMappingURL=kernel-prelude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-prelude.js","sourceRoot":"","sources":["../../../src/core/extensions/kernel-prelude.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC;IAC3D,OAAO;IACP,YAAY;IACZ,SAAS;IACT,KAAK;IACL,KAAK;IACL,QAAQ;IACR,UAAU;IACV,OAAO;IACP,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,aAAa;IACb,OAAO;IACP,UAAU;IACV,OAAO;CACP,CAAC,CAAC;AAEH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAKrD,YAAY,QAAgB,EAAE,eAAuB;QACpD,KAAK,CACJ,SAAS,QAAQ,2BAA2B,eAAe,gDAAgD,CAC3G,CAAC;QAPM,SAAI,GAAG,6BAA6B,CAAC;QAQ7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACxC,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CACnC,QAAgB,EAChB,OAA8C;IAE9C,MAAM,SAAS,GAAG,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7G,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,2BAA2B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxF,OAAO,OAAO,CAAC;AAChB,CAAC","sourcesContent":["import type { KernelPreludeContribution } from \"./types.ts\";\n\n/** Helpers every eval kernel (JavaScript and Python) installs before any contribution runs. */\nconst KERNEL_BUILTIN_GLOBALS: ReadonlySet<string> = new Set([\n\t\"agent\",\n\t\"completion\",\n\t\"display\",\n\t\"env\",\n\t\"log\",\n\t\"output\",\n\t\"parallel\",\n\t\"phase\",\n\t\"pipeline\",\n\t\"print\",\n\t\"read\",\n\t\"tool\",\n\t\"tool_schema\",\n\t\"tools\",\n\t\"workpool\",\n\t\"write\",\n]);\n\nexport class KernelPreludeCollisionError extends Error {\n\treadonly name = \"KernelPreludeCollisionError\";\n\treadonly toolName: string;\n\treadonly collidingExport: string;\n\n\tconstructor(toolName: string, collidingExport: string) {\n\t\tsuper(\n\t\t\t`Tool \"${toolName}\" kernelPrelude export \"${collidingExport}\" collides with a built-in eval kernel global.`,\n\t\t);\n\t\tthis.toolName = toolName;\n\t\tthis.collidingExport = collidingExport;\n\t}\n}\n\n/**\n * The `kernelPrelude` a tool projects through `getAllTools()`. Throws when an export would shadow a built-in kernel\n * helper or a `__`-prefixed kernel internal, since installing it would break every later cell.\n */\nexport function projectKernelPrelude(\n\ttoolName: string,\n\tprelude: KernelPreludeContribution | undefined,\n): KernelPreludeContribution | undefined {\n\tconst collision = prelude?.exports.find((name) => KERNEL_BUILTIN_GLOBALS.has(name) || name.startsWith(\"__\"));\n\tif (collision !== undefined) throw new KernelPreludeCollisionError(toolName, collision);\n\treturn prelude;\n}\n"]}
@@ -648,6 +648,30 @@ export interface ToolRenderContext<TState = any, TArgs = any> {
648
648
  spinnerFrame?: number;
649
649
  }
650
650
  export type ToolExposure = "direct" | "search" | "eval";
651
+ /**
652
+ * Globals a tool contributes to the persistent eval kernels while it is active. Each snippet runs before a cell
653
+ * only when one of `exports` is missing, and calls the tool through the ordinary `tool.<name>()` helper; a
654
+ * deactivated tool's exports are removed before the next cell. `documentation` is one line rendered into the
655
+ * eval prompt's helper list while the tool is active.
656
+ */
657
+ export interface KernelPreludeContribution {
658
+ /** JavaScript statements that assign every name in `exports` onto `globalThis`. */
659
+ readonly javascript: string;
660
+ /** Python statements that bind every name in `exports` in the kernel namespace. */
661
+ readonly python: string;
662
+ readonly documentation: string;
663
+ /** Global names the snippets define; must not shadow a built-in kernel helper such as `display` or `tool`. */
664
+ readonly exports: readonly string[];
665
+ }
666
+ /** One permission request a tool's own parser derives from a call's input (see {@link ToolDefinition.permissionParser}). */
667
+ export interface ToolPermissionRequest {
668
+ /** Permission class matched against rules, e.g. `"my_tool"` for `my_tool:read=allow`. */
669
+ readonly permission: string;
670
+ /** Patterns this call is checked against. */
671
+ readonly patterns: readonly string[];
672
+ /** Patterns an "always" approval of this call records. */
673
+ readonly always: readonly string[];
674
+ }
651
675
  /**
652
676
  * Tool definition for registerTool().
653
677
  */
@@ -691,6 +715,14 @@ export interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = un
691
715
  * prompt-cache prefix.
692
716
  */
693
717
  promptGuidelines?: string[];
718
+ /** Optional eval-kernel globals installed while this tool is active; see {@link KernelPreludeContribution}. */
719
+ kernelPrelude?: KernelPreludeContribution;
720
+ /**
721
+ * Optional permission parsing for this tool: the permission-system checks the returned requests instead of one
722
+ * catch-all request named after the tool, so rules can grant tiers such as `my_tool:read=allow`. A built-in
723
+ * parser for the same tool name always wins.
724
+ */
725
+ permissionParser?: (input: Record<string, unknown>, cwd: string) => ToolPermissionRequest[];
694
726
  /** Parameter schema (TypeBox) */
695
727
  parameters: TParams;
696
728
  /** Optional OpenAI Responses freeform tool metadata. */
@@ -1133,6 +1165,15 @@ export interface ThinkingLevelSelectEvent {
1133
1165
  level: ThinkingLevel;
1134
1166
  previousLevel: ThinkingLevel;
1135
1167
  }
1168
+ /**
1169
+ * Fired after the active tool set gains tools: `pi.setActiveTools()`, tool_search promotion, or a
1170
+ * by-name call that lazily activates a deferred tool. Notification-only; `toolNames` lists only the
1171
+ * newly active tools.
1172
+ */
1173
+ export interface ToolActivatedEvent {
1174
+ type: "tool_activated";
1175
+ toolNames: string[];
1176
+ }
1136
1177
  /** Fired when user executes a bash command via ! or !! prefix */
1137
1178
  export interface UserBashEvent {
1138
1179
  type: "user_bash";
@@ -1312,7 +1353,7 @@ export declare function isToolCallEventType<TName extends string, TInput extends
1312
1353
  input: TInput;
1313
1354
  };
1314
1355
  /** Union of all event types */
1315
- export type ExtensionEvent = ProjectTrustEvent | ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | AgentSettledEvent | UIPromptStartEvent | UIPromptEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | SystemPromptChangeEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | InputDispositionEvent | ToolCallEvent | ToolResultEvent;
1356
+ export type ExtensionEvent = ProjectTrustEvent | ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | AgentSettledEvent | UIPromptStartEvent | UIPromptEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | SystemPromptChangeEvent | ThinkingLevelSelectEvent | ToolActivatedEvent | UserBashEvent | InputEvent | InputDispositionEvent | ToolCallEvent | ToolResultEvent;
1316
1357
  export interface ContextEventResult {
1317
1358
  messages?: AgentMessage[];
1318
1359
  }
@@ -1523,6 +1564,7 @@ export interface ExtensionAPI {
1523
1564
  on(event: "model_select", handler: ExtensionHandler<ModelSelectEvent, ModelSelectEventResult>): void;
1524
1565
  on(event: "system_prompt_change", handler: ExtensionHandler<SystemPromptChangeEvent>): void;
1525
1566
  on(event: "thinking_level_select", handler: ExtensionHandler<ThinkingLevelSelectEvent>): void;
1567
+ on(event: "tool_activated", handler: ExtensionHandler<ToolActivatedEvent>): void;
1526
1568
  on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
1527
1569
  on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
1528
1570
  on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
@@ -1873,7 +1915,7 @@ export type LazyToolActivator = (toolName: string) => boolean;
1873
1915
  export type RegisterLazyToolActivatorHandler = (activator: LazyToolActivator) => void;
1874
1916
  export type GetActiveToolsHandler = () => string[];
1875
1917
  /** Tool info with normalized exposure metadata and source metadata. */
1876
- export type ToolInfo = Pick<ToolDefinition, "name" | "label" | "description" | "parameters" | "promptGuidelines"> & {
1918
+ export type ToolInfo = Pick<ToolDefinition, "name" | "label" | "description" | "parameters" | "promptGuidelines" | "kernelPrelude" | "permissionParser"> & {
1877
1919
  sourceInfo: SourceInfo;
1878
1920
  exposure: ToolExposure;
1879
1921
  searchText?: string;