@caupulican/pi-adaptative 0.85.3 → 0.85.8

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 (411) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/bun/cli.d.ts +1 -1
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +1 -0
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/core/agent-session-runtime.d.ts +1 -1
  7. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  8. package/dist/core/agent-session-runtime.js +1 -1
  9. package/dist/core/agent-session-runtime.js.map +1 -1
  10. package/dist/core/agent-session-services.d.ts.map +1 -1
  11. package/dist/core/agent-session-services.js +2 -0
  12. package/dist/core/agent-session-services.js.map +1 -1
  13. package/dist/core/agent-session.d.ts +12 -8
  14. package/dist/core/agent-session.d.ts.map +1 -1
  15. package/dist/core/agent-session.js +82 -88
  16. package/dist/core/agent-session.js.map +1 -1
  17. package/dist/core/auth-guidance.d.ts.map +1 -1
  18. package/dist/core/auth-guidance.js +3 -0
  19. package/dist/core/auth-guidance.js.map +1 -1
  20. package/dist/core/auth-storage.d.ts +2 -2
  21. package/dist/core/auth-storage.d.ts.map +1 -1
  22. package/dist/core/auth-storage.js +2 -2
  23. package/dist/core/auth-storage.js.map +1 -1
  24. package/dist/core/autonomy/lane-tool-surface.d.ts +2 -0
  25. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  26. package/dist/core/autonomy/lane-tool-surface.js +4 -3
  27. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  28. package/dist/core/background-lane-controller.d.ts +4 -0
  29. package/dist/core/background-lane-controller.d.ts.map +1 -1
  30. package/dist/core/background-lane-controller.js +2 -0
  31. package/dist/core/background-lane-controller.js.map +1 -1
  32. package/dist/core/background-tool-task-controller.d.ts +12 -7
  33. package/dist/core/background-tool-task-controller.d.ts.map +1 -1
  34. package/dist/core/background-tool-task-controller.js +55 -19
  35. package/dist/core/background-tool-task-controller.js.map +1 -1
  36. package/dist/core/bash-executor.js +2 -2
  37. package/dist/core/bash-executor.js.map +1 -1
  38. package/dist/core/bedrock-scope.d.ts +26 -0
  39. package/dist/core/bedrock-scope.d.ts.map +1 -0
  40. package/dist/core/bedrock-scope.js +178 -0
  41. package/dist/core/bedrock-scope.js.map +1 -0
  42. package/dist/core/billing-failover-controller.d.ts +2 -2
  43. package/dist/core/billing-failover-controller.d.ts.map +1 -1
  44. package/dist/core/billing-failover-controller.js +1 -1
  45. package/dist/core/billing-failover-controller.js.map +1 -1
  46. package/dist/core/compaction-controller.d.ts +8 -2
  47. package/dist/core/compaction-controller.d.ts.map +1 -1
  48. package/dist/core/compaction-controller.js +73 -3
  49. package/dist/core/compaction-controller.js.map +1 -1
  50. package/dist/core/compaction-support.d.ts +2 -2
  51. package/dist/core/compaction-support.d.ts.map +1 -1
  52. package/dist/core/compaction-support.js +9 -1
  53. package/dist/core/compaction-support.js.map +1 -1
  54. package/dist/core/context/artifact-retrieval.d.ts +1 -1
  55. package/dist/core/context/artifact-retrieval.d.ts.map +1 -1
  56. package/dist/core/context/artifact-retrieval.js +1 -1
  57. package/dist/core/context/artifact-retrieval.js.map +1 -1
  58. package/dist/core/context/context-artifacts.d.ts +6 -6
  59. package/dist/core/context/context-artifacts.d.ts.map +1 -1
  60. package/dist/core/context/context-artifacts.js +151 -63
  61. package/dist/core/context/context-artifacts.js.map +1 -1
  62. package/dist/core/context/context-composition.js +1 -1
  63. package/dist/core/context/context-composition.js.map +1 -1
  64. package/dist/core/context/context-store-retention.d.ts.map +1 -1
  65. package/dist/core/context/context-store-retention.js +5 -2
  66. package/dist/core/context/context-store-retention.js.map +1 -1
  67. package/dist/core/context/file-store-memory-provider.js +1 -1
  68. package/dist/core/context/file-store-memory-provider.js.map +1 -1
  69. package/dist/core/context/tool-output-packer.d.ts +1 -1
  70. package/dist/core/context/tool-output-packer.d.ts.map +1 -1
  71. package/dist/core/context/tool-output-packer.js +1 -1
  72. package/dist/core/context/tool-output-packer.js.map +1 -1
  73. package/dist/core/context-gc.d.ts.map +1 -1
  74. package/dist/core/context-gc.js +7 -5
  75. package/dist/core/context-gc.js.map +1 -1
  76. package/dist/core/context-pipeline.d.ts +2 -2
  77. package/dist/core/context-pipeline.d.ts.map +1 -1
  78. package/dist/core/context-pipeline.js +8 -4
  79. package/dist/core/context-pipeline.js.map +1 -1
  80. package/dist/core/cost/cost-summary.d.ts +1 -1
  81. package/dist/core/cost/cost-summary.d.ts.map +1 -1
  82. package/dist/core/cost/cost-summary.js +1 -1
  83. package/dist/core/cost/cost-summary.js.map +1 -1
  84. package/dist/core/cost/daily-usage.d.ts +1 -1
  85. package/dist/core/cost/daily-usage.d.ts.map +1 -1
  86. package/dist/core/cost/daily-usage.js +2 -2
  87. package/dist/core/cost/daily-usage.js.map +1 -1
  88. package/dist/core/cost/session-usage.d.ts +1 -1
  89. package/dist/core/cost/session-usage.d.ts.map +1 -1
  90. package/dist/core/cost/session-usage.js +1 -1
  91. package/dist/core/cost/session-usage.js.map +1 -1
  92. package/dist/core/delegation/worker-actions.js +1 -1
  93. package/dist/core/delegation/worker-actions.js.map +1 -1
  94. package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
  95. package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
  96. package/dist/core/delegation/worker-attempt-executor.js +3 -2
  97. package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
  98. package/dist/core/delegation/worker-conversation-store.d.ts +2 -1
  99. package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -1
  100. package/dist/core/delegation/worker-conversation-store.js +3 -2
  101. package/dist/core/delegation/worker-conversation-store.js.map +1 -1
  102. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  103. package/dist/core/delegation/worker-delegation-controller.js +6 -0
  104. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  105. package/dist/core/extensions/builtin.d.ts +2 -2
  106. package/dist/core/extensions/builtin.d.ts.map +1 -1
  107. package/dist/core/extensions/builtin.js +2 -2
  108. package/dist/core/extensions/builtin.js.map +1 -1
  109. package/dist/core/extensions/bundled-virtual-modules.d.ts +2 -0
  110. package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
  111. package/dist/core/extensions/bundled-virtual-modules.js +129 -0
  112. package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
  113. package/dist/core/extensions/factory-runtime.d.ts +22 -0
  114. package/dist/core/extensions/factory-runtime.d.ts.map +1 -0
  115. package/dist/core/extensions/factory-runtime.js +334 -0
  116. package/dist/core/extensions/factory-runtime.js.map +1 -0
  117. package/dist/core/extensions/index.d.ts +1 -1
  118. package/dist/core/extensions/index.d.ts.map +1 -1
  119. package/dist/core/extensions/index.js +1 -1
  120. package/dist/core/extensions/index.js.map +1 -1
  121. package/dist/core/extensions/lifecycle.d.ts +13 -0
  122. package/dist/core/extensions/lifecycle.d.ts.map +1 -0
  123. package/dist/core/extensions/lifecycle.js +52 -0
  124. package/dist/core/extensions/lifecycle.js.map +1 -0
  125. package/dist/core/extensions/loader.d.ts +3 -24
  126. package/dist/core/extensions/loader.d.ts.map +1 -1
  127. package/dist/core/extensions/loader.js +21 -528
  128. package/dist/core/extensions/loader.js.map +1 -1
  129. package/dist/core/extensions/virtual-modules.d.ts +51 -0
  130. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  131. package/dist/core/extensions/virtual-modules.js +59 -0
  132. package/dist/core/extensions/virtual-modules.js.map +1 -0
  133. package/dist/core/foreground-recovery-controller.d.ts +26 -2
  134. package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
  135. package/dist/core/foreground-recovery-controller.js +112 -3
  136. package/dist/core/foreground-recovery-controller.js.map +1 -1
  137. package/dist/core/foreground-terminal-handoff-controller.d.ts +27 -0
  138. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -0
  139. package/dist/core/foreground-terminal-handoff-controller.js +56 -0
  140. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -0
  141. package/dist/core/goal-loop-controller.d.ts.map +1 -1
  142. package/dist/core/goal-loop-controller.js +5 -0
  143. package/dist/core/goal-loop-controller.js.map +1 -1
  144. package/dist/core/goals/compact-goal-context.d.ts +1 -1
  145. package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
  146. package/dist/core/goals/compact-goal-context.js +1 -1
  147. package/dist/core/goals/compact-goal-context.js.map +1 -1
  148. package/dist/core/goals/goal-auto-continue-controller.d.ts +3 -0
  149. package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
  150. package/dist/core/goals/goal-auto-continue-controller.js +28 -7
  151. package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
  152. package/dist/core/goals/goal-session-controller.d.ts +1 -1
  153. package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
  154. package/dist/core/goals/goal-session-controller.js +1 -1
  155. package/dist/core/goals/goal-session-controller.js.map +1 -1
  156. package/dist/core/http-dispatcher.d.ts +1 -1
  157. package/dist/core/http-dispatcher.d.ts.map +1 -1
  158. package/dist/core/http-dispatcher.js +1 -1
  159. package/dist/core/http-dispatcher.js.map +1 -1
  160. package/dist/core/human-input-controller.d.ts +9 -0
  161. package/dist/core/human-input-controller.d.ts.map +1 -1
  162. package/dist/core/human-input-controller.js +60 -5
  163. package/dist/core/human-input-controller.js.map +1 -1
  164. package/dist/core/human-input.d.ts +12 -0
  165. package/dist/core/human-input.d.ts.map +1 -1
  166. package/dist/core/human-input.js +59 -12
  167. package/dist/core/human-input.js.map +1 -1
  168. package/dist/core/index.d.ts +3 -2
  169. package/dist/core/index.d.ts.map +1 -1
  170. package/dist/core/index.js +2 -1
  171. package/dist/core/index.js.map +1 -1
  172. package/dist/core/local-runtime-controller.d.ts.map +1 -1
  173. package/dist/core/local-runtime-controller.js +15 -9
  174. package/dist/core/local-runtime-controller.js.map +1 -1
  175. package/dist/core/memory/providers/file-store.d.ts +1 -0
  176. package/dist/core/memory/providers/file-store.d.ts.map +1 -1
  177. package/dist/core/memory/providers/file-store.js +253 -126
  178. package/dist/core/memory/providers/file-store.js.map +1 -1
  179. package/dist/core/memory/providers/user-memory-archive.js +1 -1
  180. package/dist/core/memory/providers/user-memory-archive.js.map +1 -1
  181. package/dist/core/model-capability.d.ts +15 -1
  182. package/dist/core/model-capability.d.ts.map +1 -1
  183. package/dist/core/model-capability.js +24 -1
  184. package/dist/core/model-capability.js.map +1 -1
  185. package/dist/core/model-registry.d.ts +7 -1
  186. package/dist/core/model-registry.d.ts.map +1 -1
  187. package/dist/core/model-registry.js +22 -1
  188. package/dist/core/model-registry.js.map +1 -1
  189. package/dist/core/model-resolver.d.ts +1 -1
  190. package/dist/core/model-resolver.d.ts.map +1 -1
  191. package/dist/core/model-resolver.js +1 -1
  192. package/dist/core/model-resolver.js.map +1 -1
  193. package/dist/core/model-router-controller.d.ts +6 -6
  194. package/dist/core/model-router-controller.d.ts.map +1 -1
  195. package/dist/core/model-router-controller.js +6 -6
  196. package/dist/core/model-router-controller.js.map +1 -1
  197. package/dist/core/model-selection-controller.js +1 -1
  198. package/dist/core/model-selection-controller.js.map +1 -1
  199. package/dist/core/model-tool-protocol.d.ts +1 -1
  200. package/dist/core/model-tool-protocol.d.ts.map +1 -1
  201. package/dist/core/model-tool-protocol.js +1 -1
  202. package/dist/core/model-tool-protocol.js.map +1 -1
  203. package/dist/core/models/context-sizing.d.ts +1 -0
  204. package/dist/core/models/context-sizing.d.ts.map +1 -1
  205. package/dist/core/models/context-sizing.js +4 -1
  206. package/dist/core/models/context-sizing.js.map +1 -1
  207. package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
  208. package/dist/core/models/default-model-suggestions.js +20 -10
  209. package/dist/core/models/default-model-suggestions.js.map +1 -1
  210. package/dist/core/models/llamacpp-runtime.d.ts +39 -11
  211. package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
  212. package/dist/core/models/llamacpp-runtime.js +87 -31
  213. package/dist/core/models/llamacpp-runtime.js.map +1 -1
  214. package/dist/core/models/local-execution-planner.d.ts +24 -0
  215. package/dist/core/models/local-execution-planner.d.ts.map +1 -0
  216. package/dist/core/models/local-execution-planner.js +119 -0
  217. package/dist/core/models/local-execution-planner.js.map +1 -0
  218. package/dist/core/models/local-inference-profile.d.ts +34 -0
  219. package/dist/core/models/local-inference-profile.d.ts.map +1 -0
  220. package/dist/core/models/local-inference-profile.js +74 -0
  221. package/dist/core/models/local-inference-profile.js.map +1 -0
  222. package/dist/core/models/local-runtime.d.ts +23 -4
  223. package/dist/core/models/local-runtime.d.ts.map +1 -1
  224. package/dist/core/models/local-runtime.js +12 -9
  225. package/dist/core/models/local-runtime.js.map +1 -1
  226. package/dist/core/models/managed-ollama-model.d.ts +26 -0
  227. package/dist/core/models/managed-ollama-model.d.ts.map +1 -0
  228. package/dist/core/models/managed-ollama-model.js +59 -0
  229. package/dist/core/models/managed-ollama-model.js.map +1 -0
  230. package/dist/core/models/model-ref.js +11 -11
  231. package/dist/core/models/model-ref.js.map +1 -1
  232. package/dist/core/models/prism-llamacpp-lifecycle.d.ts +10 -20
  233. package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
  234. package/dist/core/models/prism-llamacpp-lifecycle.js +11 -31
  235. package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
  236. package/dist/core/models/prism-llamacpp-server-probe.d.ts +10 -0
  237. package/dist/core/models/prism-llamacpp-server-probe.d.ts.map +1 -0
  238. package/dist/core/models/prism-llamacpp-server-probe.js +36 -0
  239. package/dist/core/models/prism-llamacpp-server-probe.js.map +1 -0
  240. package/dist/core/models/runtime-arbiter.d.ts +3 -0
  241. package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
  242. package/dist/core/models/runtime-arbiter.js +2 -1
  243. package/dist/core/models/runtime-arbiter.js.map +1 -1
  244. package/dist/core/orchestration/model-binding.d.ts +1 -1
  245. package/dist/core/orchestration/model-binding.d.ts.map +1 -1
  246. package/dist/core/orchestration/model-binding.js +1 -1
  247. package/dist/core/orchestration/model-binding.js.map +1 -1
  248. package/dist/core/orchestration/task-profile-writer.js +1 -1
  249. package/dist/core/orchestration/task-profile-writer.js.map +1 -1
  250. package/dist/core/process-matrix/runtime.d.ts +15 -1
  251. package/dist/core/process-matrix/runtime.d.ts.map +1 -1
  252. package/dist/core/process-matrix/runtime.js +55 -34
  253. package/dist/core/process-matrix/runtime.js.map +1 -1
  254. package/dist/core/reflection-controller.d.ts +4 -3
  255. package/dist/core/reflection-controller.d.ts.map +1 -1
  256. package/dist/core/reflection-controller.js +2 -2
  257. package/dist/core/reflection-controller.js.map +1 -1
  258. package/dist/core/research/model-fitness-controller.js +1 -1
  259. package/dist/core/research/model-fitness-controller.js.map +1 -1
  260. package/dist/core/research/research-lane-controller.d.ts +2 -2
  261. package/dist/core/research/research-lane-controller.d.ts.map +1 -1
  262. package/dist/core/research/research-lane-controller.js +15 -6
  263. package/dist/core/research/research-lane-controller.js.map +1 -1
  264. package/dist/core/resource-loader.d.ts +10 -19
  265. package/dist/core/resource-loader.d.ts.map +1 -1
  266. package/dist/core/resource-loader.js +8 -70
  267. package/dist/core/resource-loader.js.map +1 -1
  268. package/dist/core/runtime-builder.d.ts +5 -1
  269. package/dist/core/runtime-builder.d.ts.map +1 -1
  270. package/dist/core/runtime-builder.js +50 -7
  271. package/dist/core/runtime-builder.js.map +1 -1
  272. package/dist/core/scout-controller.d.ts +4 -3
  273. package/dist/core/scout-controller.d.ts.map +1 -1
  274. package/dist/core/scout-controller.js +2 -1
  275. package/dist/core/scout-controller.js.map +1 -1
  276. package/dist/core/sdk.d.ts +2 -2
  277. package/dist/core/sdk.d.ts.map +1 -1
  278. package/dist/core/sdk.js +13 -11
  279. package/dist/core/sdk.js.map +1 -1
  280. package/dist/core/security/context-threat-scanner.d.ts +14 -0
  281. package/dist/core/security/context-threat-scanner.d.ts.map +1 -0
  282. package/dist/core/security/context-threat-scanner.js +71 -0
  283. package/dist/core/security/context-threat-scanner.js.map +1 -0
  284. package/dist/core/session-supervision-runtime.d.ts +4 -1
  285. package/dist/core/session-supervision-runtime.d.ts.map +1 -1
  286. package/dist/core/session-supervision-runtime.js +49 -11
  287. package/dist/core/session-supervision-runtime.js.map +1 -1
  288. package/dist/core/settings-manager.d.ts +13 -0
  289. package/dist/core/settings-manager.d.ts.map +1 -1
  290. package/dist/core/settings-manager.js +60 -1
  291. package/dist/core/settings-manager.js.map +1 -1
  292. package/dist/core/system-prompt-builder.d.ts +5 -2
  293. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  294. package/dist/core/system-prompt-builder.js +22 -10
  295. package/dist/core/system-prompt-builder.js.map +1 -1
  296. package/dist/core/system-prompt.d.ts +3 -0
  297. package/dist/core/system-prompt.d.ts.map +1 -1
  298. package/dist/core/system-prompt.js +181 -55
  299. package/dist/core/system-prompt.js.map +1 -1
  300. package/dist/core/tool-protocol-controller.d.ts.map +1 -1
  301. package/dist/core/tool-protocol-controller.js +5 -3
  302. package/dist/core/tool-protocol-controller.js.map +1 -1
  303. package/dist/core/tool-recovery-logger.js +1 -1
  304. package/dist/core/tool-recovery-logger.js.map +1 -1
  305. package/dist/core/tools/artifact-retrieve.js +1 -1
  306. package/dist/core/tools/artifact-retrieve.js.map +1 -1
  307. package/dist/core/tools/bash.d.ts +2 -2
  308. package/dist/core/tools/bash.d.ts.map +1 -1
  309. package/dist/core/tools/bash.js +16 -4
  310. package/dist/core/tools/bash.js.map +1 -1
  311. package/dist/core/tools/edit-diff.d.ts +2 -0
  312. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  313. package/dist/core/tools/edit-diff.js +9 -1
  314. package/dist/core/tools/edit-diff.js.map +1 -1
  315. package/dist/core/tools/edit.d.ts +5 -8
  316. package/dist/core/tools/edit.d.ts.map +1 -1
  317. package/dist/core/tools/edit.js +88 -55
  318. package/dist/core/tools/edit.js.map +1 -1
  319. package/dist/core/tools/extensionify-runtime.d.ts +44 -0
  320. package/dist/core/tools/extensionify-runtime.d.ts.map +1 -0
  321. package/dist/core/tools/extensionify-runtime.js +115 -0
  322. package/dist/core/tools/extensionify-runtime.js.map +1 -0
  323. package/dist/core/tools/extensionify.d.ts +9 -30
  324. package/dist/core/tools/extensionify.d.ts.map +1 -1
  325. package/dist/core/tools/extensionify.js +10 -140
  326. package/dist/core/tools/extensionify.js.map +1 -1
  327. package/dist/core/tools/file-mutation-intent.d.ts +42 -15
  328. package/dist/core/tools/file-mutation-intent.d.ts.map +1 -1
  329. package/dist/core/tools/file-mutation-intent.js +271 -77
  330. package/dist/core/tools/file-mutation-intent.js.map +1 -1
  331. package/dist/core/tools/find.d.ts +1 -1
  332. package/dist/core/tools/find.d.ts.map +1 -1
  333. package/dist/core/tools/find.js +1 -1
  334. package/dist/core/tools/find.js.map +1 -1
  335. package/dist/core/tools/index.d.ts +3 -5
  336. package/dist/core/tools/index.d.ts.map +1 -1
  337. package/dist/core/tools/index.js +8 -44
  338. package/dist/core/tools/index.js.map +1 -1
  339. package/dist/core/tools/ls.d.ts +1 -1
  340. package/dist/core/tools/ls.d.ts.map +1 -1
  341. package/dist/core/tools/ls.js +1 -1
  342. package/dist/core/tools/ls.js.map +1 -1
  343. package/dist/core/tools/output-accumulator.d.ts +1 -1
  344. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  345. package/dist/core/tools/output-accumulator.js +1 -1
  346. package/dist/core/tools/output-accumulator.js.map +1 -1
  347. package/dist/core/tools/render-utils.js +1 -1
  348. package/dist/core/tools/render-utils.js.map +1 -1
  349. package/dist/core/tools/search-command-guard.d.ts +8 -0
  350. package/dist/core/tools/search-command-guard.d.ts.map +1 -1
  351. package/dist/core/tools/search-command-guard.js +54 -0
  352. package/dist/core/tools/search-command-guard.js.map +1 -1
  353. package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
  354. package/dist/core/tools/shell-contract-router.js +9 -4
  355. package/dist/core/tools/shell-contract-router.js.map +1 -1
  356. package/dist/core/tools/shell-session.d.ts.map +1 -1
  357. package/dist/core/tools/shell-session.js +6 -4
  358. package/dist/core/tools/shell-session.js.map +1 -1
  359. package/dist/core/tools/tool-definition-factory.d.ts +32 -0
  360. package/dist/core/tools/tool-definition-factory.d.ts.map +1 -0
  361. package/dist/core/tools/tool-definition-factory.js +55 -0
  362. package/dist/core/tools/tool-definition-factory.js.map +1 -0
  363. package/dist/core/tools/write.d.ts +5 -10
  364. package/dist/core/tools/write.d.ts.map +1 -1
  365. package/dist/core/tools/write.js +92 -73
  366. package/dist/core/tools/write.js.map +1 -1
  367. package/dist/core/util/atomic-file.d.ts.map +1 -1
  368. package/dist/core/util/atomic-file.js +79 -32
  369. package/dist/core/util/atomic-file.js.map +1 -1
  370. package/dist/index.d.ts +3 -2
  371. package/dist/index.d.ts.map +1 -1
  372. package/dist/index.js +3 -2
  373. package/dist/index.js.map +1 -1
  374. package/dist/main.d.ts +2 -0
  375. package/dist/main.d.ts.map +1 -1
  376. package/dist/main.js +24 -18
  377. package/dist/main.js.map +1 -1
  378. package/dist/modes/interactive/auth-dialogs-controller.d.ts +6 -0
  379. package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
  380. package/dist/modes/interactive/auth-dialogs-controller.js +59 -12
  381. package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
  382. package/dist/modes/interactive/auto-learn-controller.js +1 -1
  383. package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
  384. package/dist/modes/interactive/components/tool-execution.js +1 -1
  385. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  386. package/dist/modes/interactive/interactive-event-controller.js +1 -1
  387. package/dist/modes/interactive/interactive-event-controller.js.map +1 -1
  388. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  389. package/dist/modes/interactive/interactive-mode.js +1 -1
  390. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  391. package/dist/modes/interactive/local-model-commands.d.ts +1 -1
  392. package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
  393. package/dist/modes/interactive/local-model-commands.js +51 -8
  394. package/dist/modes/interactive/local-model-commands.js.map +1 -1
  395. package/dist/utils/child-process.js +1 -1
  396. package/dist/utils/child-process.js.map +1 -1
  397. package/docs/providers.md +34 -10
  398. package/docs/tool-boundary-performance-roadmap-2026-08-02.md +21 -18
  399. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  400. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  401. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  402. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  403. package/examples/extensions/minimal-mode.ts +1 -1
  404. package/examples/extensions/prompt-customizer.ts +2 -2
  405. package/examples/extensions/sandbox/package-lock.json +2 -2
  406. package/examples/extensions/sandbox/package.json +1 -1
  407. package/examples/extensions/ssh.ts +17 -0
  408. package/examples/extensions/with-deps/package-lock.json +2 -2
  409. package/examples/extensions/with-deps/package.json +1 -1
  410. package/npm-shrinkwrap.json +240 -260
  411. package/package.json +9 -7
@@ -6,112 +6,17 @@ import * as fs from "node:fs";
6
6
  import { createRequire } from "node:module";
7
7
  import * as path from "node:path";
8
8
  import { fileURLToPath } from "node:url";
9
- import * as _bundledPiAgentCore from "@caupulican/pi-agent-core";
10
- import * as _bundledPiAi from "@caupulican/pi-ai";
11
- import * as _bundledPiAiAbortSignals from "@caupulican/pi-ai/abort-signals";
12
- import * as _bundledPiAiEventStream from "@caupulican/pi-ai/event-stream";
13
- import * as _bundledPiAiJsonParse from "@caupulican/pi-ai/json-parse";
14
- import * as _bundledPiAiOauth from "@caupulican/pi-ai/oauth";
15
- import * as _bundledPiAiOverflow from "@caupulican/pi-ai/overflow";
16
- import * as _bundledPiAiProviderRetry from "@caupulican/pi-ai/provider-retry";
17
- import * as _bundledPiAiStream from "@caupulican/pi-ai/stream";
18
- import * as _bundledPiAiStreamingLines from "@caupulican/pi-ai/streaming-lines";
19
- import * as _bundledPiAiTextToolProtocol from "@caupulican/pi-ai/text-tool-protocol";
20
- import * as _bundledPiAiToolRepairRegistry from "@caupulican/pi-ai/tool-repair-registry";
21
- import * as _bundledPiAiTypeboxHelpers from "@caupulican/pi-ai/typebox-helpers";
22
- import * as _bundledPiAiTypes from "@caupulican/pi-ai/types";
23
- import * as _bundledPiAiUsage from "@caupulican/pi-ai/usage";
24
- import * as _bundledPiAiUuid from "@caupulican/pi-ai/uuid";
25
- import * as _bundledPiAiValidation from "@caupulican/pi-ai/validation";
26
- import * as _bundledPiAiValidationPath from "@caupulican/pi-ai/validation-path";
27
- import * as _bundledPiTui from "@caupulican/pi-tui";
28
9
  import { createJiti } from "jiti/static";
29
- // Static imports of packages that extensions may use.
30
- // These MUST be static so Bun bundles them into the compiled binary.
31
- // The virtualModules option then makes them available to extensions.
32
- import * as _bundledTypebox from "typebox";
33
- import * as _bundledTypeboxCompile from "typebox/compile";
34
- import * as _bundledTypeboxValue from "typebox/value";
35
10
  import { CONFIG_DIR_NAME, getAgentDir, isBunBinary } from "../../config.js";
36
- // NOTE: This import works because loader.ts exports are NOT re-exported from index.ts,
37
- // avoiding a circular dependency. Extensions can import from @caupulican/pi-adaptative.
38
- import * as _bundledPiCodingAgent from "../../index.js";
39
11
  import { resolvePath } from "../../utils/paths.js";
40
12
  import { cacheFile } from "../agent-paths.js";
41
13
  import { createEventBus } from "../event-bus.js";
42
- import { execCommand } from "../exec.js";
43
- import { createSyntheticSourceInfo } from "../source-info.js";
44
14
  import { resolveExtensionIndexEntry } from "./entry-resolution.js";
45
- import { DEFAULT_STALE_EXTENSION_CONTEXT_MESSAGE } from "./stale-context.js";
46
- import { createExtensionStorage } from "./storage.js";
47
- const EXTENSION_FACTORY_TIMEOUT_MS = 30_000;
48
- const EXTENSION_DISPOSAL_TIMEOUT_MS = 5_000;
49
- const inactiveExtensions = new WeakSet();
50
- class ExtensionFactoryTimeoutError extends Error {
51
- }
52
- const PI_AI_WORKSPACE_SUBPATHS = {
53
- "abort-signals": "ai/src/utils/abort-signals.ts",
54
- "event-stream": "ai/src/utils/event-stream.ts",
55
- "json-parse": "ai/src/utils/json-parse.ts",
56
- oauth: "ai/src/oauth.ts",
57
- overflow: "ai/src/utils/overflow.ts",
58
- "provider-retry": "ai/src/utils/provider-retry.ts",
59
- stream: "ai/src/stream.ts",
60
- "streaming-lines": "ai/src/utils/streaming-lines.ts",
61
- "text-tool-protocol": "ai/src/utils/tool-repair/text-protocol.ts",
62
- "tool-repair-registry": "ai/src/utils/tool-repair/registry.ts",
63
- "typebox-helpers": "ai/src/utils/typebox-helpers.ts",
64
- types: "ai/src/types.ts",
65
- usage: "ai/src/usage.ts",
66
- uuid: "ai/src/utils/uuid.ts",
67
- validation: "ai/src/utils/validation.ts",
68
- "validation-path": "ai/src/utils/validation-path.ts",
69
- };
70
- const PI_AI_VIRTUAL_SUBPATHS = {
71
- "abort-signals": _bundledPiAiAbortSignals,
72
- "event-stream": _bundledPiAiEventStream,
73
- "json-parse": _bundledPiAiJsonParse,
74
- oauth: _bundledPiAiOauth,
75
- overflow: _bundledPiAiOverflow,
76
- "provider-retry": _bundledPiAiProviderRetry,
77
- stream: _bundledPiAiStream,
78
- "streaming-lines": _bundledPiAiStreamingLines,
79
- "text-tool-protocol": _bundledPiAiTextToolProtocol,
80
- "tool-repair-registry": _bundledPiAiToolRepairRegistry,
81
- "typebox-helpers": _bundledPiAiTypeboxHelpers,
82
- types: _bundledPiAiTypes,
83
- usage: _bundledPiAiUsage,
84
- uuid: _bundledPiAiUuid,
85
- validation: _bundledPiAiValidation,
86
- "validation-path": _bundledPiAiValidationPath,
87
- };
88
- function piAiVirtualModules(packageName) {
89
- return Object.fromEntries([
90
- [packageName, _bundledPiAi],
91
- ...Object.entries(PI_AI_VIRTUAL_SUBPATHS).map(([subpath, module]) => [`${packageName}/${subpath}`, module]),
92
- ]);
93
- }
94
- /** Modules available to extensions via virtualModules (for compiled Bun binary) */
95
- const VIRTUAL_MODULES = {
96
- typebox: _bundledTypebox,
97
- "typebox/compile": _bundledTypeboxCompile,
98
- "typebox/value": _bundledTypeboxValue,
99
- "@sinclair/typebox": _bundledTypebox,
100
- "@sinclair/typebox/compile": _bundledTypeboxCompile,
101
- "@sinclair/typebox/value": _bundledTypeboxValue,
102
- "@caupulican/pi-agent-core": _bundledPiAgentCore,
103
- "@caupulican/pi-tui": _bundledPiTui,
104
- ...piAiVirtualModules("@caupulican/pi-ai"),
105
- "@caupulican/pi-adaptative": _bundledPiCodingAgent,
106
- "@earendil-works/pi-agent-core": _bundledPiAgentCore,
107
- "@earendil-works/pi-tui": _bundledPiTui,
108
- ...piAiVirtualModules("@earendil-works/pi-ai"),
109
- "@earendil-works/pi-coding-agent": _bundledPiCodingAgent,
110
- "@mariozechner/pi-agent-core": _bundledPiAgentCore,
111
- "@mariozechner/pi-tui": _bundledPiTui,
112
- ...piAiVirtualModules("@mariozechner/pi-ai"),
113
- "@mariozechner/pi-coding-agent": _bundledPiCodingAgent,
114
- };
15
+ import { createExtension, createExtensionAPI, createExtensionRuntime, EXTENSION_FACTORY_TIMEOUT_MS, ExtensionFactoryTimeoutError, restoreExtensionLoadRuntime, runExtensionFactory, snapshotExtensionLoadRuntime, } from "./factory-runtime.js";
16
+ import { disposeExtensionEventSubscriptions, isExtensionGenerationInactive } from "./lifecycle.js";
17
+ import { getBundledExtensionVirtualModules, PI_AGENT_CORE_EXTENSION_SUBPATHS, PI_AI_EXTENSION_SUBPATHS, } from "./virtual-modules.js";
18
+ export { createExtensionRuntime, loadExtensionFromFactory } from "./factory-runtime.js";
19
+ export { disposeExtensionEventSubscriptions } from "./lifecycle.js";
115
20
  function uniquePaths(paths) {
116
21
  return [...new Set(paths)];
117
22
  }
@@ -173,11 +78,13 @@ function getAliases() {
173
78
  };
174
79
  const piCodingAgentEntry = packageIndex;
175
80
  const piAgentCoreEntry = resolveWorkspaceOrImport("agent/src/index.ts", "@caupulican/pi-agent-core");
176
- const piAgentCoreNodeEntry = resolveWorkspaceOrImport("agent/src/node.ts", "@caupulican/pi-agent-core/node");
177
- const piAgentCorePathsEntry = resolveWorkspaceOrImport("agent/src/utils/paths.ts", "@caupulican/pi-agent-core/paths");
81
+ const piAgentCoreSubpathEntries = Object.fromEntries(Object.entries(PI_AGENT_CORE_EXTENSION_SUBPATHS).map(([subpath, workspacePath]) => [
82
+ subpath,
83
+ resolveWorkspaceOrImport(workspacePath, `@caupulican/pi-agent-core/${subpath}`),
84
+ ]));
178
85
  const piTuiEntry = resolveWorkspaceOrImport("tui/src/index.ts", "@caupulican/pi-tui");
179
86
  const piAiEntry = resolveWorkspaceOrImport("ai/src/index.ts", "@caupulican/pi-ai");
180
- const piAiSubpathEntries = Object.fromEntries(Object.entries(PI_AI_WORKSPACE_SUBPATHS).map(([subpath, workspacePath]) => [
87
+ const piAiSubpathEntries = Object.fromEntries(Object.entries(PI_AI_EXTENSION_SUBPATHS).map(([subpath, workspacePath]) => [
181
88
  subpath,
182
89
  resolveWorkspaceOrImport(workspacePath, `@caupulican/pi-ai/${subpath}`),
183
90
  ]));
@@ -185,24 +92,22 @@ function getAliases() {
185
92
  ...Object.entries(piAiSubpathEntries).map(([subpath, entry]) => [`${packageName}/${subpath}`, entry]),
186
93
  [packageName, piAiEntry],
187
94
  ]);
95
+ const piAgentCoreAliases = (packageName) => Object.fromEntries([
96
+ ...Object.entries(piAgentCoreSubpathEntries).map(([subpath, entry]) => [`${packageName}/${subpath}`, entry]),
97
+ [packageName, piAgentCoreEntry],
98
+ ]);
188
99
  _aliases = {
189
- "@caupulican/pi-agent-core/node": piAgentCoreNodeEntry,
190
- "@caupulican/pi-agent-core/paths": piAgentCorePathsEntry,
100
+ ...piAgentCoreAliases("@caupulican/pi-agent-core"),
191
101
  ...piAiAliases("@caupulican/pi-ai"),
192
102
  "@caupulican/pi-adaptative": piCodingAgentEntry,
193
- "@caupulican/pi-agent-core": piAgentCoreEntry,
194
103
  "@caupulican/pi-tui": piTuiEntry,
195
- "@earendil-works/pi-agent-core/node": piAgentCoreNodeEntry,
196
- "@earendil-works/pi-agent-core/paths": piAgentCorePathsEntry,
104
+ ...piAgentCoreAliases("@earendil-works/pi-agent-core"),
197
105
  ...piAiAliases("@earendil-works/pi-ai"),
198
106
  "@earendil-works/pi-coding-agent": piCodingAgentEntry,
199
- "@earendil-works/pi-agent-core": piAgentCoreEntry,
200
107
  "@earendil-works/pi-tui": piTuiEntry,
201
- "@mariozechner/pi-agent-core/node": piAgentCoreNodeEntry,
202
- "@mariozechner/pi-agent-core/paths": piAgentCorePathsEntry,
108
+ ...piAgentCoreAliases("@mariozechner/pi-agent-core"),
203
109
  ...piAiAliases("@mariozechner/pi-ai"),
204
110
  "@mariozechner/pi-coding-agent": piCodingAgentEntry,
205
- "@mariozechner/pi-agent-core": piAgentCoreEntry,
206
111
  "@mariozechner/pi-tui": piTuiEntry,
207
112
  typebox: typeboxEntry,
208
113
  "typebox/compile": typeboxCompileEntry,
@@ -216,294 +121,6 @@ function getAliases() {
216
121
  function yieldToEventLoop() {
217
122
  return new Promise((resolve) => setImmediate(resolve));
218
123
  }
219
- /**
220
- * Create a runtime with throwing stubs for action methods.
221
- * Runner.bindCore() replaces these with real implementations.
222
- */
223
- export function createExtensionRuntime() {
224
- const notInitialized = () => {
225
- throw new Error("Extension runtime not initialized. Action methods cannot be called during extension loading.");
226
- };
227
- const state = {};
228
- const assertActive = () => {
229
- if (state.staleMessage) {
230
- throw new Error(state.staleMessage);
231
- }
232
- };
233
- const providersByExtension = new Map();
234
- const providerRegistrations = new Map();
235
- const memoryProvidersByExtension = new Map();
236
- const contextMemoryProvidersByExtension = new Map();
237
- const extensionStorageOwners = new Map();
238
- const runtime = {
239
- sendMessage: notInitialized,
240
- sendUserMessage: notInitialized,
241
- appendEntry: notInitialized,
242
- setSessionName: notInitialized,
243
- getSessionName: notInitialized,
244
- setLabel: notInitialized,
245
- getActiveTools: notInitialized,
246
- getAllTools: notInitialized,
247
- setActiveTools: notInitialized,
248
- // registerTool() is valid during extension load; refresh is only needed post-bind.
249
- refreshTools: () => { },
250
- getCommands: notInitialized,
251
- setModel: notInitialized,
252
- getThinkingLevel: notInitialized,
253
- setThinkingLevel: notInitialized,
254
- getExternalResourceRoots: notInitialized,
255
- registerMemoryProvider: notInitialized,
256
- registerContextMemoryProvider: notInitialized,
257
- reportSpawnedUsage: notInitialized,
258
- reportManagedLane: notInitialized,
259
- flagValues: new Map(),
260
- pendingProviderRegistrations: [],
261
- assertActive,
262
- invalidate: (message) => {
263
- state.staleMessage ??= message ?? DEFAULT_STALE_EXTENSION_CONTEXT_MESSAGE;
264
- },
265
- // Pre-bind: queue registrations so bindCore() can flush them once the
266
- // model registry is available. bindCore() replaces both with direct calls.
267
- registerProvider: (name, config, extensionPath = "<unknown>") => {
268
- runtime.pendingProviderRegistrations.push({ name, config, extensionPath });
269
- },
270
- unregisterProvider: (name) => {
271
- runtime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);
272
- },
273
- providersByExtension,
274
- providerRegistrations,
275
- getProvidersForExtension: (extensionPath) => {
276
- return [...(providersByExtension.get(extensionPath) ?? [])];
277
- },
278
- memoryProvidersByExtension,
279
- contextMemoryProvidersByExtension,
280
- extensionStorageOwners,
281
- };
282
- return runtime;
283
- }
284
- /**
285
- * Create the ExtensionAPI for an extension.
286
- * Registration methods write to the extension object.
287
- * Action methods delegate to the shared runtime.
288
- */
289
- function createExtensionAPI(extension, runtime, cwd, eventBus, agentDir) {
290
- // A factory can time out while its promise continues running. Route every later API call through
291
- // an extension-generation guard so stale async work cannot register tools, handlers, or providers.
292
- const sharedRuntime = runtime;
293
- runtime = new Proxy(sharedRuntime, {
294
- get(target, property, receiver) {
295
- if (property === "assertActive") {
296
- return () => {
297
- target.assertActive();
298
- if (inactiveExtensions.has(extension)) {
299
- throw new Error(`Extension generation is no longer active: ${extension.path}`);
300
- }
301
- };
302
- }
303
- return Reflect.get(target, property, receiver);
304
- },
305
- });
306
- const api = {
307
- getStorage(namespace) {
308
- runtime.assertActive();
309
- if (extension.storage) {
310
- if (extension.storage.namespace !== namespace) {
311
- throw new Error(`Extension ${extension.path} already owns storage namespace ${extension.storage.namespace}; cannot also use ${namespace}`);
312
- }
313
- return extension.storage;
314
- }
315
- const storage = createExtensionStorage(agentDir, namespace, runtime.assertActive, (disposer) => extension.disposers.push(disposer));
316
- const previousOwner = runtime.extensionStorageOwners.get(namespace);
317
- if (previousOwner && previousOwner.path !== extension.path) {
318
- throw new Error(`Extension storage namespace ${namespace} is already owned by ${previousOwner.path}; ${extension.path} cannot also use it`);
319
- }
320
- runtime.extensionStorageOwners.set(namespace, extension);
321
- extension.disposers.push(() => {
322
- if (runtime.extensionStorageOwners.get(namespace) !== extension)
323
- return;
324
- if (previousOwner && !inactiveExtensions.has(previousOwner)) {
325
- runtime.extensionStorageOwners.set(namespace, previousOwner);
326
- }
327
- else {
328
- runtime.extensionStorageOwners.delete(namespace);
329
- }
330
- });
331
- extension.storage = storage;
332
- return storage;
333
- },
334
- // Registration methods - write to extension
335
- on(event, handler) {
336
- runtime.assertActive();
337
- const list = extension.handlers.get(event) ?? [];
338
- list.push(handler);
339
- extension.handlers.set(event, list);
340
- },
341
- registerTool(tool) {
342
- runtime.assertActive();
343
- extension.tools.set(tool.name, {
344
- definition: tool,
345
- sourceInfo: extension.sourceInfo,
346
- });
347
- runtime.refreshTools();
348
- },
349
- registerCommand(name, options) {
350
- runtime.assertActive();
351
- extension.commands.set(name, {
352
- name,
353
- sourceInfo: extension.sourceInfo,
354
- ...options,
355
- });
356
- },
357
- registerShortcut(shortcut, options) {
358
- runtime.assertActive();
359
- extension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });
360
- },
361
- registerFlag(name, options) {
362
- runtime.assertActive();
363
- extension.flags.set(name, { name, extensionPath: extension.path, ...options });
364
- if (options.default !== undefined && !runtime.flagValues.has(name)) {
365
- runtime.flagValues.set(name, options.default);
366
- }
367
- },
368
- registerMessageRenderer(customType, renderer) {
369
- runtime.assertActive();
370
- extension.messageRenderers.set(customType, renderer);
371
- },
372
- // Flag access - checks extension registered it, reads from runtime
373
- getFlag(name) {
374
- runtime.assertActive();
375
- if (!extension.flags.has(name))
376
- return undefined;
377
- return runtime.flagValues.get(name);
378
- },
379
- // Action methods - delegate to shared runtime
380
- sendMessage(message, options) {
381
- runtime.assertActive();
382
- runtime.sendMessage(message, options);
383
- },
384
- sendUserMessage(content, options) {
385
- runtime.assertActive();
386
- runtime.sendUserMessage(content, options);
387
- },
388
- appendEntry(customType, data) {
389
- runtime.assertActive();
390
- runtime.appendEntry(customType, data);
391
- },
392
- setSessionName(name) {
393
- runtime.assertActive();
394
- runtime.setSessionName(name);
395
- },
396
- getSessionName() {
397
- runtime.assertActive();
398
- return runtime.getSessionName();
399
- },
400
- setLabel(entryId, label) {
401
- runtime.assertActive();
402
- runtime.setLabel(entryId, label);
403
- },
404
- exec(command, args, options) {
405
- runtime.assertActive();
406
- return execCommand(command, args, options?.cwd ?? cwd, options);
407
- },
408
- getActiveTools() {
409
- runtime.assertActive();
410
- return runtime.getActiveTools();
411
- },
412
- getAllTools() {
413
- runtime.assertActive();
414
- return runtime.getAllTools();
415
- },
416
- setActiveTools(toolNames) {
417
- runtime.assertActive();
418
- runtime.setActiveTools(toolNames);
419
- },
420
- getCommands() {
421
- runtime.assertActive();
422
- return runtime.getCommands();
423
- },
424
- getExternalResourceRoots() {
425
- runtime.assertActive();
426
- return runtime.getExternalResourceRoots();
427
- },
428
- registerMemoryProvider(provider) {
429
- runtime.assertActive();
430
- runtime.registerMemoryProvider(provider);
431
- const providers = runtime.memoryProvidersByExtension.get(extension.path) ?? new Set();
432
- providers.add(provider);
433
- runtime.memoryProvidersByExtension.set(extension.path, providers);
434
- },
435
- registerContextMemoryProvider(provider) {
436
- runtime.assertActive();
437
- runtime.registerContextMemoryProvider(provider);
438
- const providers = runtime.contextMemoryProvidersByExtension.get(extension.path) ?? new Set();
439
- providers.add(provider);
440
- runtime.contextMemoryProvidersByExtension.set(extension.path, providers);
441
- },
442
- reportSpawnedUsage(usage, opts) {
443
- runtime.assertActive();
444
- runtime.reportSpawnedUsage(usage, opts);
445
- },
446
- reportManagedLane(event) {
447
- runtime.assertActive();
448
- runtime.reportManagedLane(event);
449
- },
450
- setModel(model) {
451
- runtime.assertActive();
452
- return runtime.setModel(model);
453
- },
454
- getThinkingLevel() {
455
- runtime.assertActive();
456
- return runtime.getThinkingLevel();
457
- },
458
- setThinkingLevel(level) {
459
- runtime.assertActive();
460
- runtime.setThinkingLevel(level);
461
- },
462
- registerProvider(name, config) {
463
- runtime.assertActive();
464
- runtime.registerProvider(name, config, extension.path);
465
- },
466
- unregisterProvider(name) {
467
- runtime.assertActive();
468
- runtime.unregisterProvider(name, extension.path);
469
- },
470
- onDispose(fn) {
471
- runtime.assertActive();
472
- extension.disposers.push(fn);
473
- },
474
- // Track bus subscriptions per extension generation so hot reloads can
475
- // unsubscribe replaced generations (see disposeExtensionEventSubscriptions).
476
- events: {
477
- emit: (channel, data) => {
478
- runtime.assertActive();
479
- eventBus.emit(channel, data);
480
- },
481
- on: (channel, handler) => {
482
- runtime.assertActive();
483
- const unsubscribe = eventBus.on(channel, handler);
484
- extension.eventUnsubscribes.push(unsubscribe);
485
- return unsubscribe;
486
- },
487
- },
488
- };
489
- return api;
490
- }
491
- async function runExtensionFactory(factory, api, timeoutMs = EXTENSION_FACTORY_TIMEOUT_MS) {
492
- let timeout;
493
- const completion = Promise.resolve().then(() => factory(api));
494
- try {
495
- await Promise.race([
496
- completion,
497
- new Promise((_resolve, reject) => {
498
- timeout = setTimeout(() => reject(new ExtensionFactoryTimeoutError(`Extension factory timed out after ${timeoutMs}ms`)), Math.max(0, timeoutMs));
499
- }),
500
- ]);
501
- }
502
- finally {
503
- if (timeout)
504
- clearTimeout(timeout);
505
- }
506
- }
507
124
  async function loadExtensionModule(extensionPath, transformCacheAgentDir, opts) {
508
125
  const jiti = createJiti(import.meta.url, {
509
126
  // A fresh jiti instance is created on every call and moduleCache is disabled so each load
@@ -524,7 +141,9 @@ async function loadExtensionModule(extensionPath, transformCacheAgentDir, opts)
524
141
  fsCache: transformCacheAgentDir ? cacheFile(transformCacheAgentDir, "jiti-transforms") : false,
525
142
  // In Bun binary: use virtualModules for bundled packages (no filesystem resolution)
526
143
  // In Node.js/dev: use aliases to resolve to node_modules paths
527
- ...(isBunBinary ? { virtualModules: VIRTUAL_MODULES, tryNative: false } : { alias: getAliases() }),
144
+ ...(isBunBinary
145
+ ? { virtualModules: getBundledExtensionVirtualModules(), tryNative: false }
146
+ : { alias: getAliases() }),
528
147
  });
529
148
  // Every call gets a fresh jiti instance with moduleCache disabled. Do not append a query string:
530
149
  // jiti's Windows path resolver treats it as part of the .ts filename.
@@ -545,113 +164,6 @@ async function loadExtensionModule(extensionPath, transformCacheAgentDir, opts)
545
164
  clearTimeout(timeout);
546
165
  }
547
166
  }
548
- /**
549
- * Create an Extension object with empty collections.
550
- */
551
- function createExtension(extensionPath, resolvedPath) {
552
- const source = extensionPath.startsWith("<") && extensionPath.endsWith(">")
553
- ? extensionPath.slice(1, -1).split(":")[0] || "temporary"
554
- : "local";
555
- const baseDir = extensionPath.startsWith("<") ? undefined : path.dirname(resolvedPath);
556
- return {
557
- path: extensionPath,
558
- resolvedPath,
559
- sourceInfo: createSyntheticSourceInfo(extensionPath, { source, baseDir }),
560
- handlers: new Map(),
561
- tools: new Map(),
562
- messageRenderers: new Map(),
563
- commands: new Map(),
564
- flags: new Map(),
565
- shortcuts: new Map(),
566
- eventUnsubscribes: [],
567
- disposers: [],
568
- };
569
- }
570
- /**
571
- * Unsubscribe a replaced extension generation's pi.events handlers from the shared
572
- * event bus and invoke cleanup callbacks. Without this, every hot reload leaves the
573
- * previous generation's handlers subscribed, pinning the old module graph in memory
574
- * and double-processing events.
575
- */
576
- export async function disposeExtensionEventSubscriptions(extensions, options = {}) {
577
- const deadline = Date.now() + (options.timeoutMs ?? EXTENSION_DISPOSAL_TIMEOUT_MS);
578
- for (const extension of extensions) {
579
- if (options.deactivate ?? true)
580
- inactiveExtensions.add(extension);
581
- // Unsubscribe event listeners
582
- for (const unsubscribe of extension.eventUnsubscribes) {
583
- try {
584
- unsubscribe();
585
- }
586
- catch {
587
- // Disposal must never break a reload.
588
- }
589
- }
590
- extension.eventUnsubscribes.length = 0;
591
- // Invoke every cleanup callback, but never let one unresolved async disposer block reload or
592
- // shutdown indefinitely. Late continuations retain rejection handlers and the inactive API guard.
593
- for (const disposer of extension.disposers) {
594
- try {
595
- const result = disposer();
596
- if (result !== undefined) {
597
- const completion = Promise.resolve(result).catch(() => undefined);
598
- const remainingMs = Math.max(0, deadline - Date.now());
599
- if (remainingMs > 0) {
600
- let timeout;
601
- await Promise.race([
602
- completion,
603
- new Promise((resolve) => {
604
- timeout = setTimeout(resolve, remainingMs);
605
- }),
606
- ]);
607
- if (timeout)
608
- clearTimeout(timeout);
609
- }
610
- }
611
- }
612
- catch {
613
- // Disposal must never break a reload.
614
- }
615
- }
616
- extension.disposers.length = 0;
617
- }
618
- }
619
- function snapshotExtensionLoadRuntime(runtime) {
620
- return {
621
- pendingProviderRegistrations: [...runtime.pendingProviderRegistrations],
622
- flagValues: new Map(runtime.flagValues),
623
- providerRegistrations: new Map(runtime.providerRegistrations),
624
- };
625
- }
626
- function restoreExtensionLoadRuntime(runtime, snapshot) {
627
- for (const [name, current] of runtime.providerRegistrations) {
628
- const previous = snapshot.providerRegistrations.get(name);
629
- if (!previous || previous.config !== current.config || previous.extensionPath !== current.extensionPath) {
630
- try {
631
- runtime.unregisterProvider(name, current.extensionPath);
632
- }
633
- catch {
634
- // Preserve the original factory failure; reload rollback remains the outer safety net.
635
- }
636
- }
637
- }
638
- for (const [name, previous] of snapshot.providerRegistrations) {
639
- const current = runtime.providerRegistrations.get(name);
640
- if (current?.config === previous.config && current.extensionPath === previous.extensionPath)
641
- continue;
642
- try {
643
- runtime.registerProvider(name, previous.config, previous.extensionPath);
644
- }
645
- catch {
646
- // Preserve the original factory failure; reload rollback remains the outer safety net.
647
- }
648
- }
649
- runtime.pendingProviderRegistrations = snapshot.pendingProviderRegistrations;
650
- runtime.flagValues.clear();
651
- for (const [name, value] of snapshot.flagValues) {
652
- runtime.flagValues.set(name, value);
653
- }
654
- }
655
167
  export async function loadExtension(extensionPath, cwd, eventBus, runtime, opts) {
656
168
  const resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });
657
169
  const resolvedAgentDir = resolvePath(opts?.agentDir ?? getAgentDir());
@@ -711,7 +223,7 @@ function createLazyExtension(extensionPath, resolvedPath, cwd, eventBus, runtime
711
223
  const extension = createExtension(extensionPath, resolvedPath);
712
224
  let restoreLazyToolPlaceholders = () => { };
713
225
  const load = async () => {
714
- if (inactiveExtensions.has(extension)) {
226
+ if (isExtensionGenerationInactive(extension)) {
715
227
  throw new Error(`Lazy extension generation is no longer active: ${extension.path}`);
716
228
  }
717
229
  if (extension.lazy?.loaded)
@@ -772,25 +284,6 @@ function createLazyExtension(extensionPath, resolvedPath, cwd, eventBus, runtime
772
284
  restoreLazyToolPlaceholders();
773
285
  return extension;
774
286
  }
775
- /**
776
- * Create an Extension from an inline factory function.
777
- */
778
- export async function loadExtensionFromFactory(factory, cwd, eventBus, runtime, extensionPath = "<inline>", options = {}) {
779
- const extension = createExtension(extensionPath, extensionPath);
780
- const resolvedCwd = resolvePath(cwd);
781
- const resolvedAgentDir = resolvePath(options.agentDir ?? getAgentDir());
782
- const api = createExtensionAPI(extension, runtime, resolvedCwd, eventBus, resolvedAgentDir);
783
- const runtimeSnapshot = snapshotExtensionLoadRuntime(runtime);
784
- try {
785
- await runExtensionFactory(factory, api, options.factoryTimeoutMs);
786
- }
787
- catch (err) {
788
- await disposeExtensionEventSubscriptions([extension]);
789
- restoreExtensionLoadRuntime(runtime, runtimeSnapshot);
790
- throw err;
791
- }
792
- return extension;
793
- }
794
287
  /**
795
288
  * Load extensions from paths.
796
289
  */