@bastani/atomic 0.9.18 → 0.9.19-alpha.2

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 (698) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +16 -0
  3. package/dist/builtin/intercom/README.md +21 -11
  4. package/dist/builtin/intercom/broker/broker.ts +73 -9
  5. package/dist/builtin/intercom/broker/client.ts +4 -0
  6. package/dist/builtin/intercom/broker/framing.ts +5 -2
  7. package/dist/builtin/intercom/broker/group-membership.ts +4 -2
  8. package/dist/builtin/intercom/broker/presence-handler.ts +14 -0
  9. package/dist/builtin/intercom/broker/send-handler.ts +34 -5
  10. package/dist/builtin/intercom/broker/terminal-questions.ts +29 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +936 -740
  12. package/dist/builtin/intercom/package.json +2 -2
  13. package/dist/builtin/intercom/recipient-purpose.ts +9 -0
  14. package/dist/builtin/intercom/recoverable-disconnect.ts +2 -3
  15. package/dist/builtin/intercom/retry-policy.ts +4 -2
  16. package/dist/builtin/intercom/skills/intercom/SKILL.md +5 -4
  17. package/dist/builtin/intercom/types.ts +16 -2
  18. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  19. package/dist/builtin/mcp/README.md +2 -0
  20. package/dist/builtin/mcp/index.bundle.mjs +2201 -12000
  21. package/dist/builtin/mcp/package.json +2 -2
  22. package/dist/builtin/subagents/CHANGELOG.md +27 -0
  23. package/dist/builtin/subagents/README.md +33 -12
  24. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  25. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  26. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  27. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  28. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  29. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  30. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  31. package/dist/builtin/subagents/agents/debugger.md +1 -1
  32. package/dist/builtin/subagents/agents/worker.md +1 -1
  33. package/dist/builtin/subagents/package.json +2 -2
  34. package/dist/builtin/subagents/skills/herdr/LICENSE +201 -0
  35. package/dist/builtin/subagents/skills/herdr/SKILL.md +202 -0
  36. package/dist/builtin/subagents/skills/subagent/SKILL.md +14 -10
  37. package/dist/builtin/subagents/skills/tmux/SKILL.md +1 -1
  38. package/dist/builtin/subagents/src/extension/index.bundle.mjs +1284 -609
  39. package/dist/builtin/web-access/index.bundle.mjs +26280 -26274
  40. package/dist/builtin/web-access/package.json +2 -2
  41. package/dist/builtin/workflows/CHANGELOG.md +48 -0
  42. package/dist/builtin/workflows/README.md +1 -1
  43. package/dist/builtin/workflows/builtin/adversarial-verification.js +5 -7
  44. package/dist/builtin/workflows/builtin/{chunk-reqr3sr3.js → chunk-1kx4aggw.js} +22 -22
  45. package/dist/builtin/workflows/builtin/{chunk-42s7sw0b.js → chunk-62v3gg9f.js} +9 -9
  46. package/dist/builtin/workflows/builtin/{chunk-wgccch41.js → chunk-6w6cvk6b.js} +16 -16
  47. package/dist/builtin/workflows/builtin/{chunk-zbekjqew.js → chunk-a2kdsqn8.js} +4 -4
  48. package/dist/builtin/workflows/builtin/{chunk-ze5x3d1r.js → chunk-fg9esgkj.js} +7 -7
  49. package/dist/builtin/workflows/builtin/{chunk-n8h4yyew.js → chunk-g0csgs7w.js} +11 -11
  50. package/dist/builtin/workflows/builtin/{chunk-79fjkcvh.js → chunk-hbnwv56f.js} +17 -17
  51. package/dist/builtin/workflows/builtin/{chunk-ed4jfn5t.js → chunk-mygmtz6e.js} +43 -43
  52. package/dist/builtin/workflows/builtin/{chunk-7430zyas.js → chunk-p8jjwfg6.js} +1 -1
  53. package/dist/builtin/workflows/builtin/{chunk-hqpe2cyx.js → chunk-r9qq7xfj.js} +49 -49
  54. package/dist/builtin/workflows/builtin/{chunk-k3w87x8y.js → chunk-t6x2d78s.js} +10 -10
  55. package/dist/builtin/workflows/builtin/{chunk-6fqs7c01.js → chunk-z0d03ktm.js} +1 -1
  56. package/dist/builtin/workflows/builtin/{chunk-b0v2xab1.js → chunk-zggjyg5z.js} +221 -23
  57. package/dist/builtin/workflows/builtin/classify-and-act.js +5 -6
  58. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -4
  59. package/dist/builtin/workflows/builtin/generate-and-filter.js +5 -6
  60. package/dist/builtin/workflows/builtin/goal.js +7 -8
  61. package/dist/builtin/workflows/builtin/index.js +20 -22
  62. package/dist/builtin/workflows/builtin/loop-until-done.js +5 -6
  63. package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
  64. package/dist/builtin/workflows/builtin/ralph.js +7 -8
  65. package/dist/builtin/workflows/builtin/steering-context.js +3 -3
  66. package/dist/builtin/workflows/builtin/tournament.js +5 -7
  67. package/dist/builtin/workflows/package.json +2 -2
  68. package/dist/builtin/workflows/src/extension/index.bundle.mjs +56236 -25199
  69. package/dist/builtin/workflows/src/index.js +1217 -547
  70. package/dist/cli/config-selector.js.map +1 -1
  71. package/dist/cli/startup-ui.d.ts +1 -1
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  74. package/dist/core/agent-session-auto-compaction.js +5 -4
  75. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  76. package/dist/core/agent-session-bash.d.ts +1 -1
  77. package/dist/core/agent-session-bash.d.ts.map +1 -1
  78. package/dist/core/agent-session-bash.js +5 -1
  79. package/dist/core/agent-session-bash.js.map +1 -1
  80. package/dist/core/agent-session-compaction.d.ts +1 -1
  81. package/dist/core/agent-session-compaction.js.map +1 -1
  82. package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
  83. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  84. package/dist/core/agent-session-delivery-forwarding.d.ts +1 -1
  85. package/dist/core/agent-session-delivery-forwarding.js.map +1 -1
  86. package/dist/core/agent-session-events.d.ts.map +1 -1
  87. package/dist/core/agent-session-events.js +5 -0
  88. package/dist/core/agent-session-events.js.map +1 -1
  89. package/dist/core/agent-session-export.d.ts +1 -1
  90. package/dist/core/agent-session-export.js.map +1 -1
  91. package/dist/core/agent-session-extension-bindings.d.ts +8 -1
  92. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  93. package/dist/core/agent-session-extension-bindings.js +45 -3
  94. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  95. package/dist/core/agent-session-message-queue.d.ts +1 -1
  96. package/dist/core/agent-session-message-queue.js.map +1 -1
  97. package/dist/core/agent-session-methods.d.ts +14 -7
  98. package/dist/core/agent-session-methods.d.ts.map +1 -1
  99. package/dist/core/agent-session-methods.js.map +1 -1
  100. package/dist/core/agent-session-prompt.d.ts +2 -2
  101. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  102. package/dist/core/agent-session-prompt.js +22 -18
  103. package/dist/core/agent-session-prompt.js.map +1 -1
  104. package/dist/core/agent-session-runtime-auth.d.ts +1 -1
  105. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  106. package/dist/core/agent-session-runtime.d.ts +13 -4
  107. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  108. package/dist/core/agent-session-runtime.js +27 -4
  109. package/dist/core/agent-session-runtime.js.map +1 -1
  110. package/dist/core/agent-session-services.d.ts +5 -1
  111. package/dist/core/agent-session-services.d.ts.map +1 -1
  112. package/dist/core/agent-session-services.js +44 -34
  113. package/dist/core/agent-session-services.js.map +1 -1
  114. package/dist/core/agent-session-state.d.ts +1 -1
  115. package/dist/core/agent-session-state.js.map +1 -1
  116. package/dist/core/agent-session-tasks.d.ts +9 -0
  117. package/dist/core/agent-session-tasks.d.ts.map +1 -0
  118. package/dist/core/agent-session-tasks.js +113 -0
  119. package/dist/core/agent-session-tasks.js.map +1 -0
  120. package/dist/core/agent-session-tool-registry.d.ts +1 -0
  121. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  122. package/dist/core/agent-session-tool-registry.js +30 -5
  123. package/dist/core/agent-session-tool-registry.js.map +1 -1
  124. package/dist/core/agent-session-tree.d.ts.map +1 -1
  125. package/dist/core/agent-session-tree.js +3 -0
  126. package/dist/core/agent-session-tree.js.map +1 -1
  127. package/dist/core/agent-session-types.d.ts +2 -2
  128. package/dist/core/agent-session-types.js.map +1 -1
  129. package/dist/core/agent-session.d.ts +4 -1
  130. package/dist/core/agent-session.d.ts.map +1 -1
  131. package/dist/core/agent-session.js +7 -1
  132. package/dist/core/agent-session.js.map +1 -1
  133. package/dist/core/bash-executor.d.ts +1 -1
  134. package/dist/core/bash-executor.js.map +1 -1
  135. package/dist/core/export-html/index.js.map +1 -1
  136. package/dist/core/export-html/tool-renderer.d.ts +1 -1
  137. package/dist/core/export-html/tool-renderer.js.map +1 -1
  138. package/dist/core/extension-session-state.js.map +1 -1
  139. package/dist/core/extensions/agent-events.d.ts +4 -4
  140. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  141. package/dist/core/extensions/agent-events.js.map +1 -1
  142. package/dist/core/extensions/api-types.d.ts +8 -2
  143. package/dist/core/extensions/api-types.d.ts.map +1 -1
  144. package/dist/core/extensions/api-types.js.map +1 -1
  145. package/dist/core/extensions/context-types.d.ts +9 -0
  146. package/dist/core/extensions/context-types.d.ts.map +1 -1
  147. package/dist/core/extensions/context-types.js.map +1 -1
  148. package/dist/core/extensions/event-results.d.ts +1 -1
  149. package/dist/core/extensions/event-results.js.map +1 -1
  150. package/dist/core/extensions/event-types.d.ts +2 -1
  151. package/dist/core/extensions/event-types.d.ts.map +1 -1
  152. package/dist/core/extensions/event-types.js.map +1 -1
  153. package/dist/core/extensions/index.d.ts +2 -1
  154. package/dist/core/extensions/index.d.ts.map +1 -1
  155. package/dist/core/extensions/index.js.map +1 -1
  156. package/dist/core/extensions/loader-api.d.ts +1 -1
  157. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  158. package/dist/core/extensions/loader-api.js +7 -0
  159. package/dist/core/extensions/loader-api.js.map +1 -1
  160. package/dist/core/extensions/loader-core.d.ts +1 -1
  161. package/dist/core/extensions/loader-core.js.map +1 -1
  162. package/dist/core/extensions/loader-discovery.d.ts +1 -1
  163. package/dist/core/extensions/loader-discovery.js.map +1 -1
  164. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  165. package/dist/core/extensions/loader-runtime.js +3 -0
  166. package/dist/core/extensions/loader-runtime.js.map +1 -1
  167. package/dist/core/extensions/loader.d.ts +1 -1
  168. package/dist/core/extensions/loader.js.map +1 -1
  169. package/dist/core/extensions/message-types.d.ts +1 -1
  170. package/dist/core/extensions/message-types.js.map +1 -1
  171. package/dist/core/extensions/runner-context.d.ts +11 -1
  172. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  173. package/dist/core/extensions/runner-context.js +41 -2
  174. package/dist/core/extensions/runner-context.js.map +1 -1
  175. package/dist/core/extensions/runner-events.d.ts +1 -1
  176. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  177. package/dist/core/extensions/runner-events.js +17 -2
  178. package/dist/core/extensions/runner-events.js.map +1 -1
  179. package/dist/core/extensions/runner-ui.js.map +1 -1
  180. package/dist/core/extensions/runner.d.ts +17 -2
  181. package/dist/core/extensions/runner.d.ts.map +1 -1
  182. package/dist/core/extensions/runner.js +68 -18
  183. package/dist/core/extensions/runner.js.map +1 -1
  184. package/dist/core/extensions/runtime-types.d.ts +4 -1
  185. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  186. package/dist/core/extensions/runtime-types.js.map +1 -1
  187. package/dist/core/extensions/tool-types.d.ts +1 -1
  188. package/dist/core/extensions/tool-types.js.map +1 -1
  189. package/dist/core/extensions/types.d.ts +1 -0
  190. package/dist/core/extensions/types.d.ts.map +1 -1
  191. package/dist/core/extensions/types.js.map +1 -1
  192. package/dist/core/extensions/ui-types.d.ts +5 -1
  193. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  194. package/dist/core/extensions/ui-types.js.map +1 -1
  195. package/dist/core/extensions/workflow-activity-hub.d.ts +25 -0
  196. package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -0
  197. package/dist/core/extensions/workflow-activity-hub.js +183 -0
  198. package/dist/core/extensions/workflow-activity-hub.js.map +1 -0
  199. package/dist/core/extensions/workflow-events.d.ts +118 -0
  200. package/dist/core/extensions/workflow-events.d.ts.map +1 -0
  201. package/dist/core/extensions/workflow-events.js +2 -0
  202. package/dist/core/extensions/workflow-events.js.map +1 -0
  203. package/dist/core/footer-data-provider.d.ts +8 -4
  204. package/dist/core/footer-data-provider.d.ts.map +1 -1
  205. package/dist/core/footer-data-provider.js +97 -11
  206. package/dist/core/footer-data-provider.js.map +1 -1
  207. package/dist/core/index.d.ts +3 -3
  208. package/dist/core/index.js.map +1 -1
  209. package/dist/core/keybindings.d.ts +27 -2
  210. package/dist/core/keybindings.d.ts.map +1 -1
  211. package/dist/core/keybindings.js +7 -2
  212. package/dist/core/keybindings.js.map +1 -1
  213. package/dist/core/mandatory-runtime-tools.d.ts +1 -1
  214. package/dist/core/mandatory-runtime-tools.js.map +1 -1
  215. package/dist/core/model-fallback-failures.js +2 -2
  216. package/dist/core/model-fallback-failures.js.map +1 -1
  217. package/dist/core/model-registry.d.ts +5 -1
  218. package/dist/core/model-registry.d.ts.map +1 -1
  219. package/dist/core/model-registry.js +8 -0
  220. package/dist/core/model-registry.js.map +1 -1
  221. package/dist/core/model-resolver-defaults.js +1 -1
  222. package/dist/core/model-resolver-defaults.js.map +1 -1
  223. package/dist/core/resource-loader-assets.js.map +1 -1
  224. package/dist/core/resource-loader-core.d.ts +1 -1
  225. package/dist/core/resource-loader-core.js.map +1 -1
  226. package/dist/core/resource-loader-internals.d.ts +2 -2
  227. package/dist/core/resource-loader-internals.js.map +1 -1
  228. package/dist/core/resource-loader-reload.d.ts +2 -0
  229. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  230. package/dist/core/resource-loader-reload.js +231 -191
  231. package/dist/core/resource-loader-reload.js.map +1 -1
  232. package/dist/core/resource-loader-types.d.ts +4 -2
  233. package/dist/core/resource-loader-types.d.ts.map +1 -1
  234. package/dist/core/resource-loader-types.js.map +1 -1
  235. package/dist/core/sdk-exports.d.ts +2 -2
  236. package/dist/core/sdk-exports.js.map +1 -1
  237. package/dist/core/sdk-types.d.ts +2 -2
  238. package/dist/core/sdk-types.js.map +1 -1
  239. package/dist/core/sdk.js.map +1 -1
  240. package/dist/core/settings-manager-core.d.ts.map +1 -1
  241. package/dist/core/settings-manager-core.js +10 -4
  242. package/dist/core/settings-manager-core.js.map +1 -1
  243. package/dist/core/settings-storage.d.ts +1 -0
  244. package/dist/core/settings-storage.d.ts.map +1 -1
  245. package/dist/core/settings-storage.js +18 -0
  246. package/dist/core/settings-storage.js.map +1 -1
  247. package/dist/core/settings-types.d.ts +11 -0
  248. package/dist/core/settings-types.d.ts.map +1 -1
  249. package/dist/core/settings-types.js.map +1 -1
  250. package/dist/core/slash-commands.d.ts.map +1 -1
  251. package/dist/core/slash-commands.js +2 -0
  252. package/dist/core/slash-commands.js.map +1 -1
  253. package/dist/core/system-prompt.d.ts.map +1 -1
  254. package/dist/core/system-prompt.js +5 -6
  255. package/dist/core/system-prompt.js.map +1 -1
  256. package/dist/core/tasks/agent-adapter.d.ts +32 -0
  257. package/dist/core/tasks/agent-adapter.d.ts.map +1 -0
  258. package/dist/core/tasks/agent-adapter.js +71 -0
  259. package/dist/core/tasks/agent-adapter.js.map +1 -0
  260. package/dist/core/tasks/command-output.d.ts +15 -0
  261. package/dist/core/tasks/command-output.d.ts.map +1 -0
  262. package/dist/core/tasks/command-output.js +29 -0
  263. package/dist/core/tasks/command-output.js.map +1 -0
  264. package/dist/core/tasks/completion-ordering.d.ts +11 -0
  265. package/dist/core/tasks/completion-ordering.d.ts.map +1 -0
  266. package/dist/core/tasks/completion-ordering.js +19 -0
  267. package/dist/core/tasks/completion-ordering.js.map +1 -0
  268. package/dist/core/tasks/completion.d.ts +36 -0
  269. package/dist/core/tasks/completion.d.ts.map +1 -0
  270. package/dist/core/tasks/completion.js +115 -0
  271. package/dist/core/tasks/completion.js.map +1 -0
  272. package/dist/core/tasks/contracts.d.ts +404 -0
  273. package/dist/core/tasks/contracts.d.ts.map +1 -0
  274. package/dist/core/tasks/contracts.js +2 -0
  275. package/dist/core/tasks/contracts.js.map +1 -0
  276. package/dist/core/tasks/execution-scope.d.ts +10 -0
  277. package/dist/core/tasks/execution-scope.d.ts.map +1 -0
  278. package/dist/core/tasks/execution-scope.js +27 -0
  279. package/dist/core/tasks/execution-scope.js.map +1 -0
  280. package/dist/core/tasks/owner-store.d.ts +53 -0
  281. package/dist/core/tasks/owner-store.d.ts.map +1 -0
  282. package/dist/core/tasks/owner-store.js +155 -0
  283. package/dist/core/tasks/owner-store.js.map +1 -0
  284. package/dist/core/tasks/supervisor.d.ts +121 -0
  285. package/dist/core/tasks/supervisor.d.ts.map +1 -0
  286. package/dist/core/tasks/supervisor.js +916 -0
  287. package/dist/core/tasks/supervisor.js.map +1 -0
  288. package/dist/core/tasks/transcript.d.ts +23 -0
  289. package/dist/core/tasks/transcript.d.ts.map +1 -0
  290. package/dist/core/tasks/transcript.js +74 -0
  291. package/dist/core/tasks/transcript.js.map +1 -0
  292. package/dist/core/tools/ask-user-question/ask-user-question.d.ts +2 -2
  293. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  294. package/dist/core/tools/ask-user-question/ask-user-question.js +8 -4
  295. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  296. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -1
  297. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  298. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +1 -1
  299. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  300. package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts +1 -1
  301. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  302. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts +1 -1
  303. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  304. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
  305. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  306. package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts +1 -1
  307. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  308. package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts +1 -1
  309. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  310. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +1 -1
  311. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  312. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts +1 -1
  313. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  314. package/dist/core/tools/bash-pty-native.d.ts +18 -3
  315. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  316. package/dist/core/tools/bash-pty-native.js +116 -1
  317. package/dist/core/tools/bash-pty-native.js.map +1 -1
  318. package/dist/core/tools/bash.d.ts +11 -4
  319. package/dist/core/tools/bash.d.ts.map +1 -1
  320. package/dist/core/tools/bash.js +52 -8
  321. package/dist/core/tools/bash.js.map +1 -1
  322. package/dist/core/tools/edit.d.ts.map +1 -1
  323. package/dist/core/tools/edit.js +1 -2
  324. package/dist/core/tools/edit.js.map +1 -1
  325. package/dist/core/tools/find.js.map +1 -1
  326. package/dist/core/tools/grep.js.map +1 -1
  327. package/dist/core/tools/index.d.ts +2 -2
  328. package/dist/core/tools/index.js.map +1 -1
  329. package/dist/core/tools/ls.js.map +1 -1
  330. package/dist/core/tools/powershell.d.ts +20 -10
  331. package/dist/core/tools/powershell.d.ts.map +1 -1
  332. package/dist/core/tools/powershell.js +32 -7
  333. package/dist/core/tools/powershell.js.map +1 -1
  334. package/dist/core/tools/read.d.ts.map +1 -1
  335. package/dist/core/tools/read.js +1 -2
  336. package/dist/core/tools/read.js.map +1 -1
  337. package/dist/core/tools/render-utils.d.ts +1 -1
  338. package/dist/core/tools/render-utils.js.map +1 -1
  339. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  340. package/dist/core/tools/resource-selectors.js +15 -7
  341. package/dist/core/tools/resource-selectors.js.map +1 -1
  342. package/dist/core/tools/search.js.map +1 -1
  343. package/dist/core/tools/todos-render.d.ts +1 -1
  344. package/dist/core/tools/todos-render.js.map +1 -1
  345. package/dist/core/tools/write.d.ts.map +1 -1
  346. package/dist/core/tools/write.js +1 -2
  347. package/dist/core/tools/write.js.map +1 -1
  348. package/dist/core/workflow-stage-admission.d.ts +10 -0
  349. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  350. package/dist/core/workflow-stage-admission.js +24 -0
  351. package/dist/core/workflow-stage-admission.js.map +1 -1
  352. package/dist/extensions/herdr/activity.d.ts +15 -0
  353. package/dist/extensions/herdr/activity.d.ts.map +1 -0
  354. package/dist/extensions/herdr/activity.js +24 -0
  355. package/dist/extensions/herdr/activity.js.map +1 -0
  356. package/dist/extensions/herdr/environment.d.ts +7 -0
  357. package/dist/extensions/herdr/environment.d.ts.map +1 -0
  358. package/dist/extensions/herdr/environment.js +6 -0
  359. package/dist/extensions/herdr/environment.js.map +1 -0
  360. package/dist/extensions/herdr/index.d.ts +9 -0
  361. package/dist/extensions/herdr/index.d.ts.map +1 -0
  362. package/dist/extensions/herdr/index.js +225 -0
  363. package/dist/extensions/herdr/index.js.map +1 -0
  364. package/dist/extensions/herdr/pane-owner.d.ts +30 -0
  365. package/dist/extensions/herdr/pane-owner.d.ts.map +1 -0
  366. package/dist/extensions/herdr/pane-owner.js +111 -0
  367. package/dist/extensions/herdr/pane-owner.js.map +1 -0
  368. package/dist/extensions/herdr/transport.d.ts +8 -0
  369. package/dist/extensions/herdr/transport.d.ts.map +1 -0
  370. package/dist/extensions/herdr/transport.js +28 -0
  371. package/dist/extensions/herdr/transport.js.map +1 -0
  372. package/dist/extensions/index.d.ts.map +1 -1
  373. package/dist/extensions/index.js +2 -0
  374. package/dist/extensions/index.js.map +1 -1
  375. package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
  376. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  377. package/dist/extensions/llama/ui.js.map +1 -1
  378. package/dist/index-extensions.d.ts +3 -2
  379. package/dist/index-extensions.d.ts.map +1 -1
  380. package/dist/index-extensions.js.map +1 -1
  381. package/dist/index.d.ts +11 -3
  382. package/dist/index.d.ts.map +1 -1
  383. package/dist/index.js +8 -0
  384. package/dist/index.js.map +1 -1
  385. package/dist/main-session.js.map +1 -1
  386. package/dist/main.d.ts.map +1 -1
  387. package/dist/main.js +149 -69
  388. package/dist/main.js.map +1 -1
  389. package/dist/modes/interactive/components/armin.js.map +1 -1
  390. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  391. package/dist/modes/interactive/components/atomic-banner.d.ts +1 -1
  392. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  393. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  394. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  395. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  396. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  397. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  398. package/dist/modes/interactive/components/chat-message-renderer.d.ts +12 -0
  399. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  400. package/dist/modes/interactive/components/chat-message-renderer.js +44 -0
  401. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  402. package/dist/modes/interactive/components/chat-session-host-actions.d.ts +1 -1
  403. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  404. package/dist/modes/interactive/components/chat-session-host-actions.js +43 -8
  405. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  406. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +1 -1
  407. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  408. package/dist/modes/interactive/components/chat-session-host-events.d.ts +2 -2
  409. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  410. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +2 -2
  411. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  412. package/dist/modes/interactive/components/chat-session-host-rendering.js +12 -3
  413. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  414. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +4 -5
  415. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  416. package/dist/modes/interactive/components/chat-session-host-runtime.js +8 -6
  417. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  418. package/dist/modes/interactive/components/chat-session-host-state.d.ts +7 -2
  419. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  420. package/dist/modes/interactive/components/chat-session-host-state.js +1 -0
  421. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  422. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts +1 -1
  423. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -1
  424. package/dist/modes/interactive/components/chat-session-host-types.d.ts +8 -3
  425. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  426. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  427. package/dist/modes/interactive/components/chat-session-host-utils.d.ts +1 -1
  428. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
  429. package/dist/modes/interactive/components/chat-session-host-utils.js +2 -0
  430. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
  431. package/dist/modes/interactive/components/chat-session-host.d.ts +17 -2
  432. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  433. package/dist/modes/interactive/components/chat-session-host.js +97 -1
  434. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  435. package/dist/modes/interactive/components/chat-transcript.d.ts +1 -0
  436. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  437. package/dist/modes/interactive/components/chat-transcript.js +1 -1
  438. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  439. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  440. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  441. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  442. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  443. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  444. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  445. package/dist/modes/interactive/components/custom-message.js +12 -0
  446. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  447. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  448. package/dist/modes/interactive/components/diff.js.map +1 -1
  449. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  450. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  451. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  452. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  453. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  454. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  455. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  456. package/dist/modes/interactive/components/footer.d.ts +7 -6
  457. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  458. package/dist/modes/interactive/components/footer.js +27 -9
  459. package/dist/modes/interactive/components/footer.js.map +1 -1
  460. package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -1
  461. package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
  462. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  463. package/dist/modes/interactive/components/index.d.ts +2 -2
  464. package/dist/modes/interactive/components/index.js.map +1 -1
  465. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  466. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  467. package/dist/modes/interactive/components/mermaid.d.ts +1 -1
  468. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  469. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  470. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  471. package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
  472. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  473. package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
  474. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  475. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  476. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  477. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +1 -1
  478. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  479. package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
  480. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  481. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  482. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  483. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  484. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  485. package/dist/modes/interactive/components/task-completion-message.d.ts +13 -0
  486. package/dist/modes/interactive/components/task-completion-message.d.ts.map +1 -0
  487. package/dist/modes/interactive/components/task-completion-message.js +65 -0
  488. package/dist/modes/interactive/components/task-completion-message.js.map +1 -0
  489. package/dist/modes/interactive/components/task-detail.d.ts +27 -0
  490. package/dist/modes/interactive/components/task-detail.d.ts.map +1 -0
  491. package/dist/modes/interactive/components/task-detail.js +107 -0
  492. package/dist/modes/interactive/components/task-detail.js.map +1 -0
  493. package/dist/modes/interactive/components/task-inspector.d.ts +50 -0
  494. package/dist/modes/interactive/components/task-inspector.d.ts.map +1 -0
  495. package/dist/modes/interactive/components/task-inspector.js +599 -0
  496. package/dist/modes/interactive/components/task-inspector.js.map +1 -0
  497. package/dist/modes/interactive/components/task-list.d.ts +18 -0
  498. package/dist/modes/interactive/components/task-list.d.ts.map +1 -0
  499. package/dist/modes/interactive/components/task-list.js +59 -0
  500. package/dist/modes/interactive/components/task-list.js.map +1 -0
  501. package/dist/modes/interactive/components/task-live-transcript.d.ts +17 -0
  502. package/dist/modes/interactive/components/task-live-transcript.d.ts.map +1 -0
  503. package/dist/modes/interactive/components/task-live-transcript.js +33 -0
  504. package/dist/modes/interactive/components/task-live-transcript.js.map +1 -0
  505. package/dist/modes/interactive/components/task-navigation.d.ts +38 -0
  506. package/dist/modes/interactive/components/task-navigation.d.ts.map +1 -0
  507. package/dist/modes/interactive/components/task-navigation.js +93 -0
  508. package/dist/modes/interactive/components/task-navigation.js.map +1 -0
  509. package/dist/modes/interactive/components/task-row.d.ts +34 -0
  510. package/dist/modes/interactive/components/task-row.d.ts.map +1 -0
  511. package/dist/modes/interactive/components/task-row.js +158 -0
  512. package/dist/modes/interactive/components/task-row.js.map +1 -0
  513. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  514. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  515. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  516. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  517. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  518. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
  519. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  520. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  521. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  522. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  523. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  524. package/dist/modes/interactive/components/user-message.js.map +1 -1
  525. package/dist/modes/interactive/components/working-status.js.map +1 -1
  526. package/dist/modes/interactive/interactive-agent-events.js +8 -2
  527. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  528. package/dist/modes/interactive/interactive-auth-login.js +3 -1
  529. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  530. package/dist/modes/interactive/interactive-autocomplete.js +9 -30
  531. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  532. package/dist/modes/interactive/interactive-deferred-startup.js +2 -1
  533. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  534. package/dist/modes/interactive/interactive-extension-context.js +14 -4
  535. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  536. package/dist/modes/interactive/interactive-extension-custom-ui.js +52 -4
  537. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  538. package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
  539. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  540. package/dist/modes/interactive/interactive-extension-widgets.js +9 -1
  541. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  542. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  543. package/dist/modes/interactive/interactive-input-handling.js +19 -0
  544. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  545. package/dist/modes/interactive/interactive-mode-base.d.ts +6 -1
  546. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  547. package/dist/modes/interactive/interactive-mode-base.js +4 -1
  548. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  549. package/dist/modes/interactive/interactive-mode-deps.d.ts +6 -6
  550. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  551. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -1
  552. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  553. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  554. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  555. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  556. package/dist/modes/interactive/interactive-mode.js +3 -0
  557. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  558. package/dist/modes/interactive/interactive-process-lifecycle.js +4 -1
  559. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  560. package/dist/modes/interactive/interactive-render-chat.js +2 -0
  561. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  562. package/dist/modes/interactive/interactive-session-routing.js +33 -23
  563. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  564. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  565. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  566. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  567. package/dist/modes/interactive/interactive-summarization-retry-events.js +2 -2
  568. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
  569. package/dist/modes/interactive/interactive-task-projection.d.ts +13 -0
  570. package/dist/modes/interactive/interactive-task-projection.d.ts.map +1 -0
  571. package/dist/modes/interactive/interactive-task-projection.js +72 -0
  572. package/dist/modes/interactive/interactive-task-projection.js.map +1 -0
  573. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  574. package/dist/modes/interactive/interactive-windows-subshell.d.ts +17 -0
  575. package/dist/modes/interactive/interactive-windows-subshell.d.ts.map +1 -0
  576. package/dist/modes/interactive/interactive-windows-subshell.js +92 -0
  577. package/dist/modes/interactive/interactive-windows-subshell.js.map +1 -0
  578. package/dist/modes/interactive/skill-command-autocomplete.d.ts +12 -0
  579. package/dist/modes/interactive/skill-command-autocomplete.d.ts.map +1 -0
  580. package/dist/modes/interactive/skill-command-autocomplete.js +69 -0
  581. package/dist/modes/interactive/skill-command-autocomplete.js.map +1 -0
  582. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  583. package/dist/modes/interactive/theme/theme-class.js +4 -1
  584. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  585. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
  586. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  587. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts +1 -1
  588. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  589. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +5 -9
  590. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  591. package/dist/modes/interactive-engine/engine-custom-ui.js +14 -5
  592. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  593. package/dist/modes/interactive-engine/engine-dialog-host.d.ts +2 -2
  594. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
  595. package/dist/modes/interactive-engine/engine-project-trust.d.ts +10 -0
  596. package/dist/modes/interactive-engine/engine-project-trust.d.ts.map +1 -0
  597. package/dist/modes/interactive-engine/engine-project-trust.js +28 -0
  598. package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -0
  599. package/dist/modes/interactive-engine/engine-render-service.d.ts +1 -1
  600. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  601. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
  602. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  603. package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
  604. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  605. package/dist/modes/interactive-engine/input-form-host.d.ts +2 -2
  606. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  607. package/dist/modes/interactive-engine/isolated-auth.d.ts +1 -1
  608. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  609. package/dist/modes/interactive-engine/isolated-runtime.d.ts +5 -2
  610. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  611. package/dist/modes/interactive-engine/isolated-runtime.js +40 -3
  612. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  613. package/dist/modes/interactive-engine/protocol.d.ts +9 -0
  614. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  615. package/dist/modes/interactive-engine/protocol.js +8 -0
  616. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  617. package/dist/modes/interactive-engine/remote-component.d.ts +2 -2
  618. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  619. package/dist/modes/interactive-engine/remote-component.js +3 -2
  620. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  621. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +1 -1
  622. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  623. package/dist/modes/interactive-engine/remote-renderer.d.ts +1 -1
  624. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  625. package/dist/modes/interactive-engine/session-picker-host.d.ts +2 -2
  626. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  627. package/dist/modes/json-event.d.ts +1 -1
  628. package/dist/modes/json-event.js.map +1 -1
  629. package/dist/modes/print-mode.js.map +1 -1
  630. package/dist/modes/rpc/rpc-bash-request-owners.d.ts +2 -2
  631. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  632. package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
  633. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  634. package/dist/modes/rpc/rpc-client-api.js +2 -2
  635. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  636. package/dist/modes/rpc/rpc-client-waits.d.ts +1 -1
  637. package/dist/modes/rpc/rpc-client-waits.js.map +1 -1
  638. package/dist/modes/rpc/rpc-client.d.ts +3 -1
  639. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  640. package/dist/modes/rpc/rpc-client.js +20 -0
  641. package/dist/modes/rpc/rpc-client.js.map +1 -1
  642. package/dist/modes/rpc/rpc-command-handler.d.ts +4 -2
  643. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  644. package/dist/modes/rpc/rpc-command-handler.js +12 -4
  645. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  646. package/dist/modes/rpc/rpc-extension-ui.d.ts +1 -1
  647. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  648. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  649. package/dist/modes/rpc/rpc-mode.js +11 -2
  650. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  651. package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
  652. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  653. package/dist/modes/rpc/rpc-session-binding.d.ts +4 -1
  654. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  655. package/dist/modes/rpc/rpc-session-binding.js +35 -1
  656. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  657. package/dist/modes/rpc/rpc-types.d.ts +13 -1
  658. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  659. package/dist/modes/rpc/rpc-types.js.map +1 -1
  660. package/dist/modes/rpc/task-ui-bridge.d.ts +9 -0
  661. package/dist/modes/rpc/task-ui-bridge.d.ts.map +1 -0
  662. package/dist/modes/rpc/task-ui-bridge.js +146 -0
  663. package/dist/modes/rpc/task-ui-bridge.js.map +1 -0
  664. package/dist/self-update-plan.js.map +1 -1
  665. package/docs/background-tasks.md +199 -0
  666. package/docs/compaction.md +2 -0
  667. package/docs/development.md +3 -1
  668. package/docs/docs.json +2 -0
  669. package/docs/environment-variables.md +1 -1
  670. package/docs/extensions.md +108 -6
  671. package/docs/herdr.md +106 -0
  672. package/docs/intercom.md +38 -35
  673. package/docs/keybindings.md +19 -2
  674. package/docs/models/evals.md +222 -147
  675. package/docs/models/model-selection.md +20 -14
  676. package/docs/models/pareto-efficiency.md +2 -2
  677. package/docs/providers.md +48 -46
  678. package/docs/quickstart.md +2 -2
  679. package/docs/sdk.md +244 -0
  680. package/docs/settings.md +15 -3
  681. package/docs/skills.md +23 -1
  682. package/docs/subagents.md +71 -9
  683. package/docs/themes.md +4 -0
  684. package/docs/tools.md +25 -0
  685. package/docs/tui.md +29 -2
  686. package/docs/usage.md +4 -0
  687. package/docs/windows.md +4 -4
  688. package/docs/workflows/api-reference.md +13 -4
  689. package/docs/workflows/operations.md +59 -5
  690. package/docs/workflows/reliable-design.md +35 -4
  691. package/docs/workflows/verification.md +21 -4
  692. package/docs/workflows.md +3 -1
  693. package/npm-shrinkwrap.json +781 -661
  694. package/package.json +10 -10
  695. /package/dist/builtin/workflows/builtin/{chunk-cg9tmks0.js → chunk-n1910xc4.js} +0 -0
  696. /package/dist/builtin/workflows/builtin/{chunk-wpckd35c.js → chunk-rc5ec5xx.js} +0 -0
  697. /package/dist/builtin/workflows/builtin/{chunk-7at6dnkr.js → chunk-tgt0s5e5.js} +0 -0
  698. /package/dist/builtin/workflows/builtin/{chunk-bfkmzv9h.js → chunk-xtxcq5tj.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants, copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, parse, resolve } from \"node:path\";\nimport { type Api, type Model, modelsAreEqual } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { AgentSession } from \"./agent-session.ts\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { prepareProtectedStreamingCustomMessagesForDisposal } from \"./agent-session-persistent-custom-messages.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginRuntimeOAuthProvider } from \"./agent-session-runtime-auth.ts\";\nimport type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from \"./agent-session-services.ts\";\nimport type {\n\tProjectTrustContext,\n\tReplacedSessionContext,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n} from \"./extensions/index.ts\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { AuthStatus } from \"./provider-composer.ts\";\nimport type { CreateAgentSessionResult } from \"./sdk.ts\";\nimport { assertSessionCwdExists } from \"./session-cwd.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\n\n/**\n * Result returned by runtime creation.\n *\n * The caller gets the created session, its cwd-bound services, and all\n * diagnostics collected during setup.\n */\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport interface LogoutProviderResult {\n\tprovider: string;\n\tauthStatus: AuthStatus;\n\tmodels: Model<Api>[];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n}\n\n/**\n * Creates a full runtime for a target cwd and session manager.\n *\n * The factory closes over process-global fixed inputs, recreates cwd-bound\n * services for the effective cwd, resolves session options against those\n * services, and finally creates the AgentSession.\n */\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tprojectTrustContext?: ProjectTrustContext;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\n/**\n * Thrown when /import references a JSONL file path that does not exist.\n */\nexport class SessionImportFileNotFoundError extends Error {\n\treadonly filePath: string;\n\n\tconstructor(filePath: string) {\n\t\tsuper(`File not found: ${filePath}`);\n\t\tthis.name = \"SessionImportFileNotFoundError\";\n\t\tthis.filePath = filePath;\n\t}\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\n/**\n * Owns the current AgentSession plus its cwd-bound services.\n *\n * Session replacement methods tear down the current runtime first, then create\n * and apply the next runtime. If creation fails, the error is propagated to the\n * caller. The caller is responsible for user-facing error handling.\n */\nexport class AgentSessionRuntime {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate beforeSessionInvalidate?: () => void;\n\n\tprivate declare _session: AgentSession;\n\tprivate declare _services: AgentSessionServices;\n\tprivate declare readonly createRuntime: CreateAgentSessionRuntimeFactory;\n\tprivate declare _diagnostics: AgentSessionRuntimeDiagnostic[];\n\tprivate declare _modelFallbackMessage?: string;\n\tprivate declare _modelFallbackReason?: ModelFallbackReason;\n\n\tconstructor(\n\t\t_session: AgentSession,\n\t\t_services: AgentSessionServices,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\t_diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\t_modelFallbackMessage?: string,\n\t\t_modelFallbackReason?: ModelFallbackReason,\n\t) {\n\t\tthis._session = _session;\n\t\tthis._services = _services;\n\t\tthis.createRuntime = createRuntime;\n\t\tthis._diagnostics = _diagnostics;\n\t\tthis._modelFallbackMessage = _modelFallbackMessage;\n\t\tthis._modelFallbackReason = _modelFallbackReason;\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget modelFallbackReason(): ModelFallbackReason | undefined {\n\t\treturn this._modelFallbackReason;\n\t}\n\n\treplaceModelFallback(message?: string, reason?: ModelFallbackReason): void {\n\t\tthis._modelFallbackMessage = message;\n\t\tthis._modelFallbackReason = reason;\n\t}\n\n\tresolveModelFallback(): void {\n\t\tthis.replaceModelFallback();\n\t}\n\n\tresolveModelFallbackAfterExplicitModelSelection(\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tselectedModel: Model<Api> | null | undefined,\n\t): void {\n\t\tif (selectedModel && !modelsAreEqual(previousModel, selectedModel)) this.resolveModelFallback();\n\t}\n\n\tasync loginOAuthProvider(\n\t\tprovider: string,\n\t\tcallbacks: AtomicOAuthLoginCallbacks,\n\t): Promise<{ modelsRefreshed: boolean }> {\n\t\tawait loginRuntimeOAuthProvider(this.session, provider, callbacks);\n\t\treturn { modelsRefreshed: true };\n\t}\n\n\tasync logoutProvider(provider: string): Promise<LogoutProviderResult> {\n\t\tconst registry = this.session.modelRuntime;\n\t\tawait registry.logout(provider);\n\t\tconst availableIds = new Set(registry.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`));\n\t\tconst scopedModels = this.session.scopedModels.filter(({ model }) =>\n\t\t\tavailableIds.has(`${model.provider}\\0${model.id}`),\n\t\t);\n\t\tthis.session.setScopedModels([...scopedModels]);\n\t\tthis.session.refreshCurrentModelFromRegistry();\n\t\treturn {\n\t\t\tprovider,\n\t\t\tauthStatus: registry.getProviderAuthStatus(provider),\n\t\t\tmodels: [...registry.getAvailableSnapshot()],\n\t\t\tscopedModels: [...scopedModels],\n\t\t};\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate disposeCurrentSession(): void {\n\t\tprepareProtectedStreamingCustomMessagesForDisposal(this.session as unknown as AgentSessionInternalSurface);\n\t\tthis.beforeSessionInvalidate?.();\n\t\tthis.session.dispose();\n\t}\n\n\t/**\n\t * Settle an active response before the session it belongs to is replaced, so the\n\t * aborted turn (including its tool results) is persisted to the outgoing session\n\t * rather than stranded.\n\t *\n\t * Overridable because the isolated engine must not re-enter its cooperative\n\t * abort wait here: the child engine settles its own turn before it reports the\n\t * replacement, and the host facade's `abort()` is an unbounded round trip that\n\t * would hang teardown on an unresponsive or dead engine.\n\t */\n\tprotected async settleActiveResponseBeforeTeardown(): Promise<void> {\n\t\tif (!this.session.isStreaming) return;\n\t\tawait this.session.abort();\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.disposeCurrentSession();\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis._modelFallbackReason = result.modelFallbackReason;\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t\tprojectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\tthis.apply(\n\t\t\tawait this.createRuntime({\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\t\tprojectTrustContext: options?.projectTrustContextFactory?.(sessionManager.getCwd()),\n\t\t\t}),\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\tif (options?.parentSession) {\n\t\t\tsessionManager.newSession({ parentSession: options.parentSession });\n\t\t}\n\n\t\tawait this.teardownCurrent(\"new\", sessionManager.getSessionFile());\n\t\tthis.apply(\n\t\t\tawait this.createRuntime({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"new\", previousSessionFile },\n\t\t\t}),\n\t\t);\n\t\tif (options?.setup) {\n\t\t\tawait options.setup(this.session.sessionManager);\n\t\t\tthis.session.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;\n\t\t}\n\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tlet targetLeafId: string | null;\n\t\tlet selectedText: string | undefined;\n\n\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\tif (!selectedEntry) {\n\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t}\n\n\t\tif (position === \"at\") {\n\t\t\ttargetLeafId = selectedEntry.id;\n\t\t} else {\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\ttargetLeafId = selectedEntry.parentId;\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\tif (!currentSessionFile) {\n\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t}\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!targetLeafId) {\n\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\tsessionManager.newSession({ parentSession: currentSessionFile });\n\t\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\t\tthis.apply(\n\t\t\t\t\tawait this.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tif (!existsSync(currentSessionFile)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"This session has not been saved yet. Wait for the first assistant response before cloning or forking it.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst sessionManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\tconst forkedSessionPath = sessionManager.createBranchedSession(targetLeafId);\n\t\t\tif (!forkedSessionPath) {\n\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\tthis.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t}\n\n\t\tconst sessionManager = this.session.sessionManager;\n\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\tif (!targetLeafId) {\n\t\t\tsessionManager.newSession({ parentSession: previousSessionFile });\n\t\t} else {\n\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t}\n\t\tthis.apply(\n\t\t\tawait this.createRuntime({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t}),\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tconst resolvedPath = resolvePath(inputPath);\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t}\n\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\n\t\tlet destinationPath = join(sessionDir, basename(resolvedPath));\n\t\tconst sourceAlreadyStored = resolve(destinationPath) === resolvedPath;\n\t\tif (!sourceAlreadyStored) {\n\t\t\tconst { name, ext } = parse(destinationPath);\n\t\t\tlet suffix = 1;\n\t\t\twhile (existsSync(destinationPath)) {\n\t\t\t\tdestinationPath = join(sessionDir, `${name}-${suffix++}${ext}`);\n\t\t\t}\n\t\t}\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (!sourceAlreadyStored) {\n\t\t\tcopyFileSync(resolvedPath, destinationPath, constants.COPYFILE_EXCL);\n\t\t}\n\n\t\tconst sessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\tthis.apply(\n\t\t\tawait this.createRuntime({\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\t}),\n\t\t);\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason: \"quit\",\n\t\t});\n\t\tthis.disposeCurrentSession();\n\t}\n}\n\n/**\n * Create the initial runtime from a runtime factory and initial session target.\n *\n * The same factory is stored on the returned AgentSessionRuntime and reused for\n * later /new, /resume, /fork, and import flows.\n */\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t},\n): Promise<AgentSessionRuntime> {\n\tassertSessionCwdExists(options.sessionManager, options.cwd);\n\tconst result = await createRuntime(options);\n\treturn new AgentSessionRuntime(\n\t\tresult.session,\n\t\tresult.services,\n\t\tcreateRuntime,\n\t\tresult.diagnostics,\n\t\tresult.modelFallbackMessage,\n\t\tresult.modelFallbackReason,\n\t);\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.ts\";\n"]}
1
+ {"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants, copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, parse, resolve } from \"node:path\";\nimport { type Api, type Model, modelsAreEqual } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { prepareProtectedStreamingCustomMessagesForDisposal } from \"./agent-session-persistent-custom-messages.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginRuntimeOAuthProvider } from \"./agent-session-runtime-auth.ts\";\nimport type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from \"./agent-session-services.ts\";\nimport type {\n\tProjectTrustContext,\n\tReplacedSessionContext,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { AuthStatus } from \"./provider-composer.ts\";\nimport type { CreateAgentSessionResult } from \"./sdk.ts\";\nimport { assertSessionCwdExists } from \"./session-cwd.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\n\n/**\n * Result returned by runtime creation.\n *\n * The caller gets the created session, its cwd-bound services, and all\n * diagnostics collected during setup.\n */\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport interface LogoutProviderResult {\n\tprovider: string;\n\tauthStatus: AuthStatus;\n\tmodels: Model<Api>[];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n}\n\n/**\n * Creates a full runtime for a target cwd and session manager.\n *\n * The factory closes over process-global fixed inputs, recreates cwd-bound\n * services for the effective cwd, resolves session options against those\n * services, and finally creates the AgentSession.\n */\nexport interface CreateAgentSessionRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tprojectTrustContext?: ProjectTrustContext;\n}\n\nexport type CreateAgentSessionRuntimeFactory = {\n\t(options: CreateAgentSessionRuntimeOptions): Promise<CreateAgentSessionRuntimeResult>;\n\tprepareResume?: (\n\t\toptions: CreateAgentSessionRuntimeOptions,\n\t) => Promise<() => Promise<CreateAgentSessionRuntimeResult>>;\n};\n\nconst SESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS = 1_000;\n\n/**\n * Thrown when /import references a JSONL file path that does not exist.\n */\nexport class SessionImportFileNotFoundError extends Error {\n\treadonly filePath: string;\n\n\tconstructor(filePath: string) {\n\t\tsuper(`File not found: ${filePath}`);\n\t\tthis.name = \"SessionImportFileNotFoundError\";\n\t\tthis.filePath = filePath;\n\t}\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\n/**\n * Owns the current AgentSession plus its cwd-bound services.\n *\n * Session replacement methods tear down the current runtime first, then create\n * and apply the next runtime. If creation fails, the error is propagated to the\n * caller. The caller is responsible for user-facing error handling.\n */\nexport class AgentSessionRuntime {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate projectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\n\t/** Bind a process-local trust UI; closures never cross the engine RPC boundary. */\n\tsetProjectTrustContextFactory(factory: (cwd: string) => ProjectTrustContext): void {\n\t\tthis.projectTrustContextFactory = factory;\n\t}\n\n\t/** Return false for ordinary startup; otherwise finish the safe session in place. */\n\tasync completeStartup(): Promise<boolean> {\n\t\tconst complete = this.services.completeStartup;\n\t\tif (!complete) return false;\n\t\tif (!this.projectTrustContextFactory) throw new Error(\"Startup trust requires a bound session UI\");\n\t\tawait complete(this.projectTrustContextFactory(this.services.cwd));\n\t\treturn true;\n\t}\n\n\tprivate declare _session: AgentSession;\n\tprivate declare _services: AgentSessionServices;\n\tprivate declare readonly createRuntime: CreateAgentSessionRuntimeFactory;\n\tprivate declare _diagnostics: AgentSessionRuntimeDiagnostic[];\n\tprivate declare _modelFallbackMessage?: string;\n\tprivate declare _modelFallbackReason?: ModelFallbackReason;\n\n\tconstructor(\n\t\t_session: AgentSession,\n\t\t_services: AgentSessionServices,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\t_diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\t_modelFallbackMessage?: string,\n\t\t_modelFallbackReason?: ModelFallbackReason,\n\t) {\n\t\tthis._session = _session;\n\t\tthis._services = _services;\n\t\tthis.createRuntime = createRuntime;\n\t\tthis._diagnostics = _diagnostics;\n\t\tthis._modelFallbackMessage = _modelFallbackMessage;\n\t\tthis._modelFallbackReason = _modelFallbackReason;\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget modelFallbackReason(): ModelFallbackReason | undefined {\n\t\treturn this._modelFallbackReason;\n\t}\n\n\treplaceModelFallback(message?: string, reason?: ModelFallbackReason): void {\n\t\tthis._modelFallbackMessage = message;\n\t\tthis._modelFallbackReason = reason;\n\t}\n\n\tresolveModelFallback(): void {\n\t\tthis.replaceModelFallback();\n\t}\n\n\tresolveModelFallbackAfterExplicitModelSelection(\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tselectedModel: Model<Api> | null | undefined,\n\t): void {\n\t\tif (selectedModel && !modelsAreEqual(previousModel, selectedModel)) this.resolveModelFallback();\n\t}\n\n\tasync loginOAuthProvider(\n\t\tprovider: string,\n\t\tcallbacks: AtomicOAuthLoginCallbacks,\n\t): Promise<{ modelsRefreshed: boolean }> {\n\t\tawait loginRuntimeOAuthProvider(this.session, provider, callbacks);\n\t\treturn { modelsRefreshed: true };\n\t}\n\n\tasync logoutProvider(provider: string): Promise<LogoutProviderResult> {\n\t\tconst registry = this.session.modelRuntime;\n\t\tawait registry.logout(provider);\n\t\tconst availableIds = new Set(registry.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`));\n\t\tconst scopedModels = this.session.scopedModels.filter(({ model }) =>\n\t\t\tavailableIds.has(`${model.provider}\\0${model.id}`),\n\t\t);\n\t\tthis.session.setScopedModels([...scopedModels]);\n\t\tthis.session.refreshCurrentModelFromRegistry();\n\t\treturn {\n\t\t\tprovider,\n\t\t\tauthStatus: registry.getProviderAuthStatus(provider),\n\t\t\tmodels: [...registry.getAvailableSnapshot()],\n\t\t\tscopedModels: [...scopedModels],\n\t\t};\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate disposeCurrentSession(): void {\n\t\tprepareProtectedStreamingCustomMessagesForDisposal(this.session as unknown as AgentSessionInternalSurface);\n\t\tthis.beforeSessionInvalidate?.();\n\t\tthis.session.dispose();\n\t}\n\n\t/**\n\t * Settle an active response before the session it belongs to is replaced, so the\n\t * aborted turn (including its tool results) is persisted to the outgoing session\n\t * rather than stranded.\n\t *\n\t * Overridable because the isolated engine must not re-enter its cooperative\n\t * abort wait here: the child engine settles its own turn before it reports the\n\t * replacement, and the host facade's `abort()` is an unbounded round trip that\n\t * would hang teardown on an unresponsive or dead engine.\n\t */\n\tprotected async settleActiveResponseBeforeTeardown(): Promise<void> {\n\t\tif (!this.session.isStreaming) return;\n\t\tawait this.session.abort();\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\tconst { timedOut } = await this.session.extensionRunner.flushUIPromptNotifications(\n\t\t\tSESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS,\n\t\t);\n\t\tif (timedOut) {\n\t\t\tconsole.error(\"Warning: UI prompt observers did not settle within 1,000 ms; continuing session replacement.\");\n\t\t}\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.disposeCurrentSession();\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis._modelFallbackReason = result.modelFallbackReason;\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t\tprojectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\tconst runtimeOptions: CreateAgentSessionRuntimeOptions = {\n\t\t\tcwd: sessionManager.getCwd(),\n\t\t\tagentDir: this.services.agentDir,\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\tprojectTrustContext: (options?.projectTrustContextFactory ?? this.projectTrustContextFactory)?.(\n\t\t\t\tsessionManager.getCwd(),\n\t\t\t),\n\t\t};\n\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\tconst complete = await this.createRuntime.prepareResume?.(runtimeOptions);\n\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\tthis.apply(await (complete ? complete() : this.createRuntime(runtimeOptions)));\n\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\tif (options?.parentSession) {\n\t\t\tsessionManager.newSession({ parentSession: options.parentSession });\n\t\t}\n\n\t\tawait this.teardownCurrent(\"new\", sessionManager.getSessionFile());\n\t\tthis.apply(\n\t\t\tawait this.createRuntime({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"new\", previousSessionFile },\n\t\t\t}),\n\t\t);\n\t\tif (options?.setup) {\n\t\t\tawait options.setup(this.session.sessionManager);\n\t\t\tthis.session.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;\n\t\t}\n\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tlet targetLeafId: string | null;\n\t\tlet selectedText: string | undefined;\n\n\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\tif (!selectedEntry) {\n\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t}\n\n\t\tif (position === \"at\") {\n\t\t\ttargetLeafId = selectedEntry.id;\n\t\t} else {\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\ttargetLeafId = selectedEntry.parentId;\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\tif (!currentSessionFile) {\n\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t}\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!targetLeafId) {\n\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\tsessionManager.newSession({ parentSession: currentSessionFile });\n\t\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\t\tthis.apply(\n\t\t\t\t\tawait this.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tif (!existsSync(currentSessionFile)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"This session has not been saved yet. Wait for the first assistant response before cloning or forking it.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst sessionManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\tconst forkedSessionPath = sessionManager.createBranchedSession(targetLeafId);\n\t\t\tif (!forkedSessionPath) {\n\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\t\tthis.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t}\n\n\t\tconst sessionManager = this.session.sessionManager;\n\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionFile());\n\t\tif (!targetLeafId) {\n\t\t\tsessionManager.newSession({ parentSession: previousSessionFile });\n\t\t} else {\n\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t}\n\t\tthis.apply(\n\t\t\tawait this.createRuntime({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t}),\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tconst resolvedPath = resolvePath(inputPath);\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t}\n\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\n\t\tlet destinationPath = join(sessionDir, basename(resolvedPath));\n\t\tconst sourceAlreadyStored = resolve(destinationPath) === resolvedPath;\n\t\tif (!sourceAlreadyStored) {\n\t\t\tconst { name, ext } = parse(destinationPath);\n\t\t\tlet suffix = 1;\n\t\t\twhile (existsSync(destinationPath)) {\n\t\t\t\tdestinationPath = join(sessionDir, `${name}-${suffix++}${ext}`);\n\t\t\t}\n\t\t}\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (!sourceAlreadyStored) {\n\t\t\tcopyFileSync(resolvedPath, destinationPath, constants.COPYFILE_EXCL);\n\t\t}\n\n\t\tconst sessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionFile());\n\t\tthis.apply(\n\t\t\tawait this.createRuntime({\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t\t}),\n\t\t);\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tawait this.session.closeSessionTasks();\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason: \"quit\",\n\t\t});\n\t\tthis.disposeCurrentSession();\n\t}\n}\n\n/**\n * Create the initial runtime from a runtime factory and initial session target.\n *\n * The same factory is stored on the returned AgentSessionRuntime and reused for\n * later /new, /resume, /fork, and import flows.\n */\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t},\n): Promise<AgentSessionRuntime> {\n\tassertSessionCwdExists(options.sessionManager, options.cwd);\n\tconst result = await createRuntime(options);\n\treturn new AgentSessionRuntime(\n\t\tresult.session,\n\t\tresult.services,\n\t\tcreateRuntime,\n\t\tresult.diagnostics,\n\t\tresult.modelFallbackMessage,\n\t\tresult.modelFallbackReason,\n\t);\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.ts\";\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { Api, Model } from "@bastani/pi-ai/compat";
2
2
  import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
3
- import type { SessionStartEvent, ToolDefinition } from "./extensions/index.ts";
3
+ import type { ProjectTrustContext, SessionStartEvent, ToolDefinition } from "./extensions/index.js";
4
4
  import { ModelRuntime } from "./model-runtime.js";
5
5
  import { type DefaultResourceLoaderOptions, type ResourceLoader, type ResourceLoaderReloadOptions } from "./resource-loader.ts";
6
6
  import { type CreateAgentSessionOptions, type CreateAgentSessionResult } from "./sdk.ts";
@@ -68,6 +68,8 @@ export interface AgentSessionServices {
68
68
  settingsManager: SettingsManager;
69
69
  resourceLoader: ResourceLoader;
70
70
  diagnostics: AgentSessionRuntimeDiagnostic[];
71
+ /** Complete interactive trust after the safe session has a live UI binding. */
72
+ completeStartup?: (context: ProjectTrustContext) => Promise<void>;
71
73
  }
72
74
  /**
73
75
  * Create cwd-bound runtime services.
@@ -75,6 +77,8 @@ export interface AgentSessionServices {
75
77
  * Returns services plus diagnostics. It does not create an AgentSession.
76
78
  */
77
79
  export declare function createAgentSessionServices(options: CreateAgentSessionServicesOptions): Promise<AgentSessionServices>;
80
+ /** Prepare trust now; construct approved resources and register providers on continuation. */
81
+ export declare function prepareAgentSessionServices(options: CreateAgentSessionServicesOptions): Promise<() => Promise<AgentSessionServices>>;
78
82
  /**
79
83
  * Create an AgentSession from previously created services.
80
84
  *
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAEN,KAAK,4BAA4B,EACjC,KAAK,cAAc,EACnB,KAAK,2BAA2B,EAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,yBAAyB,EAAE,KAAK,wBAAwB,EAAsB,MAAM,UAAU,CAAC;AAC7G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC7C,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iCAAiC;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IACpD,qBAAqB,CAAC,EAAE,IAAI,CAAC,4BAA4B,EAAE,KAAK,GAAG,UAAU,GAAG,iBAAiB,CAAC,CAAC;IACnG,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;CAC1D;AAED;;;;;GAKG;AACH,MAAM,WAAW,qCAAqC;IACrD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAsDD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,iCAAiC,GACxC,OAAO,CAAC,oBAAoB,CAAC,CAuD/B;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CACnD,OAAO,EAAE,qCAAqC,GAC5C,OAAO,CAAC,wBAAwB,CAAC,CAkBnC"}
1
+ {"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,11 @@ import { resolvePath } from "../utils/paths.js";
4
4
  import { withMandatoryResourceLoader } from "./mandatory-resource-loader.js";
5
5
  import { ModelRuntime } from "./model-runtime.js";
6
6
  import { DefaultResourceLoader, } from "./resource-loader.js";
7
+ import { prepareDefaultResourceLoaderReload } from "./resource-loader-reload.js";
7
8
  import { createAgentSession } from "./sdk.js";
8
9
  import { SettingsManager } from "./settings-manager.js";
9
10
  import { endTimingSpan, startTimingSpan } from "./timings.js";
10
- function applyExtensionFlagValues(resourceLoader, extensionFlagValues) {
11
+ function applyExtensionFlagValues(resourceLoader, extensionFlagValues, allowUnknownFlags = false) {
11
12
  if (!extensionFlagValues) {
12
13
  return [];
13
14
  }
@@ -43,7 +44,7 @@ function applyExtensionFlagValues(resourceLoader, extensionFlagValues) {
43
44
  message: `Extension flag "--${name}" requires a value`,
44
45
  });
45
46
  }
46
- if (unknownFlags.length > 0) {
47
+ if (unknownFlags.length > 0 && !allowUnknownFlags) {
47
48
  diagnostics.push({
48
49
  type: "error",
49
50
  message: `Unknown option${unknownFlags.length === 1 ? "" : "s"}: ${unknownFlags.map((name) => `--${name}`).join(", ")}`,
@@ -57,6 +58,10 @@ function applyExtensionFlagValues(resourceLoader, extensionFlagValues) {
57
58
  * Returns services plus diagnostics. It does not create an AgentSession.
58
59
  */
59
60
  export async function createAgentSessionServices(options) {
61
+ return (await prepareAgentSessionServices(options))();
62
+ }
63
+ /** Prepare trust now; construct approved resources and register providers on continuation. */
64
+ export async function prepareAgentSessionServices(options) {
60
65
  const cwd = resolvePath(options.cwd);
61
66
  const agentDir = options.agentDir ? resolvePath(options.agentDir) : getAgentDir();
62
67
  const modelRuntimeSpan = startTimingSpan("createAgentSessionServices.modelRuntime");
@@ -77,39 +82,44 @@ export async function createAgentSessionServices(options) {
77
82
  settingsManager,
78
83
  });
79
84
  const reloadSpan = startTimingSpan("createAgentSessionServices.resourceLoader.reload");
80
- await defaultResourceLoader.reload(options.resourceLoaderReloadOptions);
81
- const resourceLoader = await withMandatoryResourceLoader(defaultResourceLoader, cwd);
82
- endTimingSpan(reloadSpan);
83
- const diagnostics = [];
84
- const providerSpan = startTimingSpan("createAgentSessionServices.providerRegistrations");
85
- const extensionsResult = resourceLoader.getExtensions();
86
- for (const registration of extensionsResult.runtime.pendingProviderRegistrations) {
87
- try {
88
- const providerId = "provider" in registration ? registration.provider.id : registration.name;
89
- if ("provider" in registration)
90
- modelRuntime.registerNativeProvider(registration.provider);
91
- else
92
- modelRuntime.registerProvider(registration.name, registration.config);
93
- extensionsResult.runtime.extensionProviderIds.add(providerId);
94
- }
95
- catch (error) {
96
- const message = error instanceof Error ? error.message : String(error);
97
- diagnostics.push({ type: "error", message: `Extension "${registration.extensionPath}" error: ${message}` });
85
+ const completeReload = await prepareDefaultResourceLoaderReload(defaultResourceLoader, options.resourceLoaderReloadOptions);
86
+ let initialServices = true;
87
+ return async () => {
88
+ await completeReload();
89
+ const resourceLoader = await withMandatoryResourceLoader(defaultResourceLoader, cwd);
90
+ endTimingSpan(reloadSpan);
91
+ const diagnostics = [];
92
+ const providerSpan = startTimingSpan("createAgentSessionServices.providerRegistrations");
93
+ const extensionsResult = resourceLoader.getExtensions();
94
+ for (const registration of extensionsResult.runtime.pendingProviderRegistrations) {
95
+ try {
96
+ const providerId = "provider" in registration ? registration.provider.id : registration.name;
97
+ if ("provider" in registration)
98
+ modelRuntime.registerNativeProvider(registration.provider);
99
+ else
100
+ modelRuntime.registerProvider(registration.name, registration.config);
101
+ extensionsResult.runtime.extensionProviderIds.add(providerId);
102
+ }
103
+ catch (error) {
104
+ const message = error instanceof Error ? error.message : String(error);
105
+ diagnostics.push({ type: "error", message: `Extension "${registration.extensionPath}" error: ${message}` });
106
+ }
98
107
  }
99
- }
100
- extensionsResult.runtime.pendingProviderRegistrations = [];
101
- endTimingSpan(providerSpan);
102
- const catalogRestoreSpan = startTimingSpan("createAgentSessionServices.restoreModelCatalogs");
103
- await modelRuntime.refresh({ allowNetwork: false });
104
- endTimingSpan(catalogRestoreSpan);
105
- diagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));
106
- return {
107
- cwd,
108
- agentDir,
109
- modelRuntime,
110
- settingsManager,
111
- resourceLoader,
112
- diagnostics,
108
+ extensionsResult.runtime.pendingProviderRegistrations = [];
109
+ endTimingSpan(providerSpan);
110
+ const catalogRestoreSpan = startTimingSpan("createAgentSessionServices.restoreModelCatalogs");
111
+ await modelRuntime.refresh({ allowNetwork: false });
112
+ endTimingSpan(catalogRestoreSpan);
113
+ diagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues, Boolean(options.resourceLoaderReloadOptions?.deferProjectTrust && initialServices)));
114
+ initialServices = false;
115
+ return {
116
+ cwd,
117
+ agentDir,
118
+ modelRuntime,
119
+ settingsManager,
120
+ resourceLoader,
121
+ diagnostics,
122
+ };
113
123
  };
114
124
  }
115
125
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-services.js","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\nimport { withMandatoryResourceLoader } from \"./mandatory-resource-loader.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport {\n\tDefaultResourceLoader,\n\ttype DefaultResourceLoaderOptions,\n\ttype ResourceLoader,\n\ttype ResourceLoaderReloadOptions,\n} from \"./resource-loader.ts\";\nimport { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession } from \"./sdk.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { endTimingSpan, startTimingSpan } from \"./timings.ts\";\n\n/**\n * Non-fatal issues collected while creating services or sessions.\n *\n * Runtime creation returns diagnostics to the caller instead of printing or\n * exiting. The app layer decides whether warnings should be shown and whether\n * errors should abort startup.\n */\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\n/**\n * Inputs for creating cwd-bound runtime services.\n *\n * These services are recreated whenever the effective session cwd changes.\n * CLI-provided resource paths should be resolved to absolute paths before they\n * reach this function, so later cwd switches do not reinterpret them.\n */\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tsettingsManager?: SettingsManager;\n\tmodelRuntime?: ModelRuntime;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n\tresourceLoaderReloadOptions?: ResourceLoaderReloadOptions;\n}\n\n/**\n * Inputs for creating an AgentSession from already-created services.\n *\n * Use this after services exist and any cwd-bound model/tool/session options\n * have been resolved against those services.\n */\nexport interface CreateAgentSessionFromServicesOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tmodel?: Model<Api>;\n\tthinkingLevel?: ThinkingLevel;\n\tfallbackModels?: CreateAgentSessionOptions[\"fallbackModels\"];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\texcludedTools?: CreateAgentSessionOptions[\"excludedTools\"];\n\tnoTools?: CreateAgentSessionOptions[\"noTools\"];\n\tcustomTools?: ToolDefinition[];\n}\n\n/**\n * Coherent cwd-bound runtime services for one effective session cwd.\n *\n * This is infrastructure only. The AgentSession itself is created separately so\n * session options can be resolved against these services first.\n */\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tmodelRuntime: ModelRuntime;\n\tsettingsManager: SettingsManager;\n\tresourceLoader: ResourceLoader;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\textensionsResult.runtime.explicitFlagNames ??= new Set();\n\t\t\textensionsResult.runtime.explicitFlagNames.add(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\textensionsResult.runtime.explicitFlagNames ??= new Set();\n\t\t\textensionsResult.runtime.explicitFlagNames.add(name);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\n/**\n * Create cwd-bound runtime services.\n *\n * Returns services plus diagnostics. It does not create an AgentSession.\n */\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\tconst cwd = resolvePath(options.cwd);\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getAgentDir();\n\tconst modelRuntimeSpan = startTimingSpan(\"createAgentSessionServices.modelRuntime\");\n\tconst modelRuntime =\n\t\toptions.modelRuntime ??\n\t\t(await ModelRuntime.create({\n\t\t\tauthPath: join(agentDir, \"auth.json\"),\n\t\t\tmodelsPath: join(agentDir, \"models.json\"),\n\t\t}));\n\tendTimingSpan(modelRuntimeSpan);\n\tconst settingsSpan = startTimingSpan(\"createAgentSessionServices.settingsManager\");\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tendTimingSpan(settingsSpan);\n\tconst resourceLoaderOptions = options.resourceLoaderOptions ?? {};\n\tconst defaultResourceLoader = new DefaultResourceLoader({\n\t\t...resourceLoaderOptions,\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t});\n\tconst reloadSpan = startTimingSpan(\"createAgentSessionServices.resourceLoader.reload\");\n\tawait defaultResourceLoader.reload(options.resourceLoaderReloadOptions);\n\tconst resourceLoader = await withMandatoryResourceLoader(defaultResourceLoader, cwd);\n\tendTimingSpan(reloadSpan);\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst providerSpan = startTimingSpan(\"createAgentSessionServices.providerRegistrations\");\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tfor (const registration of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\ttry {\n\t\t\tconst providerId = \"provider\" in registration ? registration.provider.id : registration.name;\n\t\t\tif (\"provider\" in registration) modelRuntime.registerNativeProvider(registration.provider);\n\t\t\telse modelRuntime.registerProvider(registration.name, registration.config);\n\t\t\textensionsResult.runtime.extensionProviderIds.add(providerId);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tdiagnostics.push({ type: \"error\", message: `Extension \"${registration.extensionPath}\" error: ${message}` });\n\t\t}\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\tendTimingSpan(providerSpan);\n\tconst catalogRestoreSpan = startTimingSpan(\"createAgentSessionServices.restoreModelCatalogs\");\n\tawait modelRuntime.refresh({ allowNetwork: false });\n\tendTimingSpan(catalogRestoreSpan);\n\tdiagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));\n\n\treturn {\n\t\tcwd,\n\t\tagentDir,\n\t\tmodelRuntime,\n\t\tsettingsManager,\n\t\tresourceLoader,\n\t\tdiagnostics,\n\t};\n}\n\n/**\n * Create an AgentSession from previously created services.\n *\n * This keeps session creation separate from service creation so callers can\n * resolve model, thinking, tools, and other session inputs against the target\n * cwd before constructing the session.\n */\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\treturn createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tmodelRuntime: options.services.modelRuntime,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\tfallbackModels: options.fallbackModels,\n\t\texcludedTools: options.excludedTools,\n\t\tnoTools: options.noTools,\n\t\tcustomTools: options.customTools,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n}\n"]}
1
+ {"version":3,"file":"agent-session-services.js","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { ProjectTrustContext, SessionStartEvent, ToolDefinition } from \"./extensions/index.js\";\nimport { withMandatoryResourceLoader } from \"./mandatory-resource-loader.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport {\n\tDefaultResourceLoader,\n\ttype DefaultResourceLoaderOptions,\n\ttype ResourceLoader,\n\ttype ResourceLoaderReloadOptions,\n} from \"./resource-loader.ts\";\nimport { prepareDefaultResourceLoaderReload } from \"./resource-loader-reload.ts\";\nimport { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession } from \"./sdk.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { endTimingSpan, startTimingSpan } from \"./timings.ts\";\n\n/**\n * Non-fatal issues collected while creating services or sessions.\n *\n * Runtime creation returns diagnostics to the caller instead of printing or\n * exiting. The app layer decides whether warnings should be shown and whether\n * errors should abort startup.\n */\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\n/**\n * Inputs for creating cwd-bound runtime services.\n *\n * These services are recreated whenever the effective session cwd changes.\n * CLI-provided resource paths should be resolved to absolute paths before they\n * reach this function, so later cwd switches do not reinterpret them.\n */\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tsettingsManager?: SettingsManager;\n\tmodelRuntime?: ModelRuntime;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n\tresourceLoaderReloadOptions?: ResourceLoaderReloadOptions;\n}\n\n/**\n * Inputs for creating an AgentSession from already-created services.\n *\n * Use this after services exist and any cwd-bound model/tool/session options\n * have been resolved against those services.\n */\nexport interface CreateAgentSessionFromServicesOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tmodel?: Model<Api>;\n\tthinkingLevel?: ThinkingLevel;\n\tfallbackModels?: CreateAgentSessionOptions[\"fallbackModels\"];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\texcludedTools?: CreateAgentSessionOptions[\"excludedTools\"];\n\tnoTools?: CreateAgentSessionOptions[\"noTools\"];\n\tcustomTools?: ToolDefinition[];\n}\n\n/**\n * Coherent cwd-bound runtime services for one effective session cwd.\n *\n * This is infrastructure only. The AgentSession itself is created separately so\n * session options can be resolved against these services first.\n */\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tmodelRuntime: ModelRuntime;\n\tsettingsManager: SettingsManager;\n\tresourceLoader: ResourceLoader;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n\t/** Complete interactive trust after the safe session has a live UI binding. */\n\tcompleteStartup?: (context: ProjectTrustContext) => Promise<void>;\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n\tallowUnknownFlags = false,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\textensionsResult.runtime.explicitFlagNames ??= new Set();\n\t\t\textensionsResult.runtime.explicitFlagNames.add(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\textensionsResult.runtime.explicitFlagNames ??= new Set();\n\t\t\textensionsResult.runtime.explicitFlagNames.add(name);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0 && !allowUnknownFlags) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\n/**\n * Create cwd-bound runtime services.\n *\n * Returns services plus diagnostics. It does not create an AgentSession.\n */\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\treturn (await prepareAgentSessionServices(options))();\n}\n\n/** Prepare trust now; construct approved resources and register providers on continuation. */\nexport async function prepareAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<() => Promise<AgentSessionServices>> {\n\tconst cwd = resolvePath(options.cwd);\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getAgentDir();\n\tconst modelRuntimeSpan = startTimingSpan(\"createAgentSessionServices.modelRuntime\");\n\tconst modelRuntime =\n\t\toptions.modelRuntime ??\n\t\t(await ModelRuntime.create({\n\t\t\tauthPath: join(agentDir, \"auth.json\"),\n\t\t\tmodelsPath: join(agentDir, \"models.json\"),\n\t\t}));\n\tendTimingSpan(modelRuntimeSpan);\n\tconst settingsSpan = startTimingSpan(\"createAgentSessionServices.settingsManager\");\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tendTimingSpan(settingsSpan);\n\tconst resourceLoaderOptions = options.resourceLoaderOptions ?? {};\n\tconst defaultResourceLoader = new DefaultResourceLoader({\n\t\t...resourceLoaderOptions,\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t});\n\tconst reloadSpan = startTimingSpan(\"createAgentSessionServices.resourceLoader.reload\");\n\tconst completeReload = await prepareDefaultResourceLoaderReload(\n\t\tdefaultResourceLoader,\n\t\toptions.resourceLoaderReloadOptions,\n\t);\n\tlet initialServices = true;\n\treturn async () => {\n\t\tawait completeReload();\n\t\tconst resourceLoader = await withMandatoryResourceLoader(defaultResourceLoader, cwd);\n\t\tendTimingSpan(reloadSpan);\n\n\t\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\t\tconst providerSpan = startTimingSpan(\"createAgentSessionServices.providerRegistrations\");\n\t\tconst extensionsResult = resourceLoader.getExtensions();\n\t\tfor (const registration of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\t\ttry {\n\t\t\t\tconst providerId = \"provider\" in registration ? registration.provider.id : registration.name;\n\t\t\t\tif (\"provider\" in registration) modelRuntime.registerNativeProvider(registration.provider);\n\t\t\t\telse modelRuntime.registerProvider(registration.name, registration.config);\n\t\t\t\textensionsResult.runtime.extensionProviderIds.add(providerId);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tdiagnostics.push({ type: \"error\", message: `Extension \"${registration.extensionPath}\" error: ${message}` });\n\t\t\t}\n\t\t}\n\t\textensionsResult.runtime.pendingProviderRegistrations = [];\n\t\tendTimingSpan(providerSpan);\n\t\tconst catalogRestoreSpan = startTimingSpan(\"createAgentSessionServices.restoreModelCatalogs\");\n\t\tawait modelRuntime.refresh({ allowNetwork: false });\n\t\tendTimingSpan(catalogRestoreSpan);\n\t\tdiagnostics.push(\n\t\t\t...applyExtensionFlagValues(\n\t\t\t\tresourceLoader,\n\t\t\t\toptions.extensionFlagValues,\n\t\t\t\tBoolean(options.resourceLoaderReloadOptions?.deferProjectTrust && initialServices),\n\t\t\t),\n\t\t);\n\t\tinitialServices = false;\n\n\t\treturn {\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tmodelRuntime,\n\t\t\tsettingsManager,\n\t\t\tresourceLoader,\n\t\t\tdiagnostics,\n\t\t};\n\t};\n}\n\n/**\n * Create an AgentSession from previously created services.\n *\n * This keeps session creation separate from service creation so callers can\n * resolve model, thinking, tools, and other session inputs against the target\n * cwd before constructing the session.\n */\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\treturn createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tmodelRuntime: options.services.modelRuntime,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\tfallbackModels: options.fallbackModels,\n\t\texcludedTools: options.excludedTools,\n\t\tnoTools: options.noTools,\n\t\tcustomTools: options.customTools,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { Api, Model } from "@bastani/pi-ai/compat";
2
2
  import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
3
3
  import type { AgentSessionInternalSurface as AgentSession } from "./agent-session-methods.ts";
4
- import type { ToolDefinition, ToolInfo } from "./extensions/index.ts";
4
+ import type { ToolDefinition, ToolInfo } from "./extensions/index.js";
5
5
  export declare function getActiveToolNames(this: AgentSession): string[];
6
6
  /**
7
7
  * Get all configured tools with name, description, parameter schema, and source metadata.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-state.js","sourceRoot":"","sources":["../../src/core/agent-session-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentTool, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./extensions/index.ts\";\nimport { appendRegisteredMandatoryTools, isMandatoryRuntimeTool } from \"./mandatory-runtime-tools.ts\";\nimport { getSkillCatalog } from \"./skill-catalog.ts\";\nimport { buildSystemPrompt } from \"./system-prompt.ts\";\n\nexport function getActiveToolNames(this: AgentSession): string[] {\n\treturn this.agent.state.tools.map((t) => t.name);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, and source metadata.\n */\n\nexport function getAllTools(this: AgentSession): ToolInfo[] {\n\treturn Array.from(this._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\t...(Object.hasOwn(definition, \"constrainedSampling\")\n\t\t\t? { constrainedSampling: definition.constrainedSampling }\n\t\t\t: {}),\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(this: AgentSession, name: string): ToolDefinition | undefined {\n\treturn this._toolDefinitions.get(name)?.definition;\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\n\nexport function setActiveToolsByName(this: AgentSession, toolNames: string[]): void {\n\tconst tools: AgentTool[] = [];\n\tfor (const name of toolNames) {\n\t\tconst tool = this._toolRegistry.get(name);\n\t\tif (tool) tools.push(tool);\n\t}\n\tappendRegisteredMandatoryTools(tools, this._toolRegistry);\n\tconst validToolNames = tools.map((tool) => tool.name);\n\tthis.agent.state.tools = tools;\n\n\t// Rebuild base system prompt with new tool set\n\tthis._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);\n\tthis.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;\n}\n\n/** Whether compaction or branch summarization is currently running */\n\nexport function setScopedModels(\n\tthis: AgentSession,\n\tscopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>,\n): void {\n\tthis._scopedModels = scopedModels;\n}\n\n/** File-based prompt templates */\n\nexport function _normalizePromptSnippet(this: AgentSession, text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function _normalizePromptGuidelines(this: AgentSession, guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\nexport function _rebuildSystemPrompt(this: AgentSession, toolNames: string[]): string {\n\tconst validToolNames = toolNames.filter((name) => this._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tconst promptGuidelines: string[] = [];\n\tfor (const name of validToolNames) {\n\t\tconst snippet = this._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\n\t\tconst toolGuidelines = this._toolPromptGuidelines.get(name);\n\t\tif (toolGuidelines) {\n\t\t\tpromptGuidelines.push(...toolGuidelines);\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = this._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = this._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = getSkillCatalog(this._resourceLoader).modelSkills();\n\tconst loadedContextFiles = this._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tthis._baseSystemPromptOptions = {\n\t\tcwd: this._cwd,\n\t\tselectedModel: this.model,\n\t\tselectedThinkingLevel: this.thinkingLevel,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\texcludedTools: this._excludedToolNames\n\t\t\t? Array.from(this._excludedToolNames).filter((name) => !isMandatoryRuntimeTool(name))\n\t\t\t: undefined,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t};\n\tconst baseSystemPrompt = buildSystemPrompt(this._baseSystemPromptOptions);\n\treturn this._systemPromptTransform ? this._systemPromptTransform(baseSystemPrompt) : baseSystemPrompt;\n}\n\nexport function _refreshBaseSystemPromptFromActiveTools(this: AgentSession): void {\n\tthis._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());\n\tthis.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;\n}\n\n// =========================================================================\n// Prompting\n// =========================================================================\n\n/**\n * Send a prompt to the agent.\n * - Handles extension commands (registered via pi.registerCommand) immediately, even during streaming\n * - Expands file-based prompt templates by default\n * - During streaming, queues via steer() or followUp() based on streamingBehavior option\n * - Validates model and API key before sending (when not streaming)\n * @throws Error if streaming and no streamingBehavior specified\n * @throws Error if no model selected or no API key available (when not streaming)\n */\n\nexport const agentSessionStateMethods = {\n\tgetActiveToolNames,\n\tgetAllTools,\n\tgetToolDefinition,\n\tsetActiveToolsByName,\n\tsetScopedModels,\n\t_normalizePromptSnippet,\n\t_normalizePromptGuidelines,\n\t_rebuildSystemPrompt,\n\t_refreshBaseSystemPromptFromActiveTools,\n};\n"]}
1
+ {"version":3,"file":"agent-session-state.js","sourceRoot":"","sources":["../../src/core/agent-session-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentTool, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./extensions/index.js\";\nimport { appendRegisteredMandatoryTools, isMandatoryRuntimeTool } from \"./mandatory-runtime-tools.ts\";\nimport { getSkillCatalog } from \"./skill-catalog.ts\";\nimport { buildSystemPrompt } from \"./system-prompt.ts\";\n\nexport function getActiveToolNames(this: AgentSession): string[] {\n\treturn this.agent.state.tools.map((t) => t.name);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, and source metadata.\n */\n\nexport function getAllTools(this: AgentSession): ToolInfo[] {\n\treturn Array.from(this._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\t...(Object.hasOwn(definition, \"constrainedSampling\")\n\t\t\t? { constrainedSampling: definition.constrainedSampling }\n\t\t\t: {}),\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(this: AgentSession, name: string): ToolDefinition | undefined {\n\treturn this._toolDefinitions.get(name)?.definition;\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\n\nexport function setActiveToolsByName(this: AgentSession, toolNames: string[]): void {\n\tconst tools: AgentTool[] = [];\n\tfor (const name of toolNames) {\n\t\tconst tool = this._toolRegistry.get(name);\n\t\tif (tool) tools.push(tool);\n\t}\n\tappendRegisteredMandatoryTools(tools, this._toolRegistry);\n\tconst validToolNames = tools.map((tool) => tool.name);\n\tthis.agent.state.tools = tools;\n\n\t// Rebuild base system prompt with new tool set\n\tthis._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);\n\tthis.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;\n}\n\n/** Whether compaction or branch summarization is currently running */\n\nexport function setScopedModels(\n\tthis: AgentSession,\n\tscopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>,\n): void {\n\tthis._scopedModels = scopedModels;\n}\n\n/** File-based prompt templates */\n\nexport function _normalizePromptSnippet(this: AgentSession, text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function _normalizePromptGuidelines(this: AgentSession, guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\nexport function _rebuildSystemPrompt(this: AgentSession, toolNames: string[]): string {\n\tconst validToolNames = toolNames.filter((name) => this._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tconst promptGuidelines: string[] = [];\n\tfor (const name of validToolNames) {\n\t\tconst snippet = this._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\n\t\tconst toolGuidelines = this._toolPromptGuidelines.get(name);\n\t\tif (toolGuidelines) {\n\t\t\tpromptGuidelines.push(...toolGuidelines);\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = this._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = this._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = getSkillCatalog(this._resourceLoader).modelSkills();\n\tconst loadedContextFiles = this._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tthis._baseSystemPromptOptions = {\n\t\tcwd: this._cwd,\n\t\tselectedModel: this.model,\n\t\tselectedThinkingLevel: this.thinkingLevel,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\texcludedTools: this._excludedToolNames\n\t\t\t? Array.from(this._excludedToolNames).filter((name) => !isMandatoryRuntimeTool(name))\n\t\t\t: undefined,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t};\n\tconst baseSystemPrompt = buildSystemPrompt(this._baseSystemPromptOptions);\n\treturn this._systemPromptTransform ? this._systemPromptTransform(baseSystemPrompt) : baseSystemPrompt;\n}\n\nexport function _refreshBaseSystemPromptFromActiveTools(this: AgentSession): void {\n\tthis._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());\n\tthis.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;\n}\n\n// =========================================================================\n// Prompting\n// =========================================================================\n\n/**\n * Send a prompt to the agent.\n * - Handles extension commands (registered via pi.registerCommand) immediately, even during streaming\n * - Expands file-based prompt templates by default\n * - During streaming, queues via steer() or followUp() based on streamingBehavior option\n * - Validates model and API key before sending (when not streaming)\n * @throws Error if streaming and no streamingBehavior specified\n * @throws Error if no model selected or no API key available (when not streaming)\n */\n\nexport const agentSessionStateMethods = {\n\tgetActiveToolNames,\n\tgetAllTools,\n\tgetToolDefinition,\n\tsetActiveToolsByName,\n\tsetScopedModels,\n\t_normalizePromptSnippet,\n\t_normalizePromptGuidelines,\n\t_rebuildSystemPrompt,\n\t_refreshBaseSystemPromptFromActiveTools,\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import type { AgentSessionInternalSurface as AgentSession } from "./agent-session-methods.ts";
2
+ import { AgentTaskHost } from "./tasks/agent-adapter.js";
3
+ export declare function getAgentTaskHost(this: AgentSession): AgentTaskHost;
4
+ export declare function closeSessionTasks(this: AgentSession): Promise<void>;
5
+ export declare const agentSessionTaskMethods: {
6
+ getAgentTaskHost: typeof getAgentTaskHost;
7
+ closeSessionTasks: typeof closeSessionTasks;
8
+ };
9
+ //# sourceMappingURL=agent-session-tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-tasks.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAazD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CA+GlE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,eAAO,MAAM,uBAAuB;;;CAA0C,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { getExtensionRuntimeEventBus } from "./extensions/loader-core.js";
2
+ import { AgentTaskHost } from "./tasks/agent-adapter.js";
3
+ import { COMMAND_DETAIL_TAIL_BYTES, taskOutputText } from "./tasks/command-output.js";
4
+ import { formatTaskCompletion, TASK_COMPLETION_MESSAGE_TYPE, TaskCompletionOutbox, taskCompletionNotice, } from "./tasks/completion.js";
5
+ import { flushTaskCompletionMessages } from "./tasks/completion-ordering.js";
6
+ import { bindOwnerTaskStore, OwnerTaskStore } from "./tasks/owner-store.js";
7
+ import { taskTranscriptSource } from "./tasks/supervisor.js";
8
+ import { WorkflowStageAdmissionBoundary } from "./workflow-stage-admission.js";
9
+ export function getAgentTaskHost() {
10
+ if (this._disposed)
11
+ throw new Error("Task owner is closed");
12
+ if (this._agentTaskHost)
13
+ return this._agentTaskHost;
14
+ const admission = this._workflowStageAdmission ?? WorkflowStageAdmissionBoundary.restore(this.sessionManager.getEntries());
15
+ this._taskAdmission = admission;
16
+ const outbox = new TaskCompletionOutbox(this.sessionManager, () => !this._disposed && admission.isOpen(), async (envelope) => {
17
+ // Settlement can precede the UI projection's next drain. Read the owner
18
+ // snapshot, not the display store, when attaching completion context.
19
+ const host = this._agentTaskHost;
20
+ const watched = host?.watchOwnerTasks();
21
+ const task = watched?.ok
22
+ ? watched.value.snapshot.tasks.find((item) => item.ref.taskId === envelope.taskId && item.ref.ownerId === envelope.ownerId)
23
+ : undefined;
24
+ if (watched?.ok)
25
+ watched.value.dispose();
26
+ // Foreground shell results already return through their tool call. Do not
27
+ // create a second model turn or background card for that same execution.
28
+ if (task?.kind === "command" && !task.wasBackground)
29
+ return;
30
+ const lease = task ? host?.resolveTask(envelope.taskId) : undefined;
31
+ const source = lease?.ok ? taskTranscriptSource(lease.value) : undefined;
32
+ const response = source?.ok
33
+ ? source.value.session
34
+ .getEntries()
35
+ .slice()
36
+ .reverse()
37
+ .find((entry) => entry.type === "message" &&
38
+ entry.message.role === "assistant" &&
39
+ entry.message.content.some((block) => block.type === "text" && block.text.trim()))
40
+ : undefined;
41
+ let output = response?.type === "message" && response.message.role === "assistant"
42
+ ? response.message.content
43
+ .filter((block) => block.type === "text")
44
+ .map((block) => block.text)
45
+ .join("\n")
46
+ : undefined;
47
+ if (task?.kind === "command" && lease?.ok && host) {
48
+ try {
49
+ const bytes = BigInt(task.output.byteCount);
50
+ const start = bytes > BigInt(COMMAND_DETAIL_TAIL_BYTES) ? bytes - BigInt(COMMAND_DETAIL_TAIL_BYTES) : 0n;
51
+ const page = await host.ownerBinding.supervisor.readTaskOutput(lease.value, {
52
+ start: String(start),
53
+ maximumBytes: COMMAND_DETAIL_TAIL_BYTES,
54
+ });
55
+ output = page.ok
56
+ ? `${start > 0n ? "[Earlier output omitted]\n" : ""}${taskOutputText(page.value)}`
57
+ : "Output unavailable";
58
+ }
59
+ catch {
60
+ // Missing retained output must not suppress a terminal notification.
61
+ output = "Output unavailable";
62
+ }
63
+ }
64
+ const completionSource = source?.ok ? source.value.session.completionSource : undefined;
65
+ if (completionSource) {
66
+ await flushTaskCompletionMessages(getExtensionRuntimeEventBus(this._resourceLoader.getExtensions().runtime), completionSource, envelope.completionId);
67
+ }
68
+ await admission.admit(envelope.completionId, () => this.sendCustomMessage({
69
+ customType: TASK_COMPLETION_MESSAGE_TYPE,
70
+ content: formatTaskCompletion(envelope, task, output),
71
+ details: { ...envelope, notification: taskCompletionNotice(envelope, task, output) },
72
+ display: true,
73
+ }, { triggerTurn: true, persistWhenStreaming: true, stageAdmissionKey: envelope.completionId }), () => {
74
+ throw new Error("Task owner is closed");
75
+ }).completion;
76
+ });
77
+ this._taskCompletionOutbox = outbox;
78
+ const binding = {
79
+ authorizeLaunch: () => {
80
+ if (this._disposed || !admission.isOpen())
81
+ throw new Error("Task owner is closed");
82
+ // Top-level sessions (main chat, workflow stages) may carry a policy without `depth`;
83
+ // only an admitted in-process child (depth >= 1) is refused delegation.
84
+ if ((this._subagentPolicy?.depth ?? 0) >= 1)
85
+ throw new Error("Subagent delegation is not available inside a subagent");
86
+ },
87
+ onTaskSettled: (...[ref, receipt]) => {
88
+ outbox.record(ref.ownerId, receipt);
89
+ void outbox.flush();
90
+ },
91
+ };
92
+ this._agentTaskHost = this._workflowStageAdmission
93
+ ? this._workflowStageAdmission.bindAgentTaskHost(binding)
94
+ : new AgentTaskHost({ ...binding, scope: { kind: "session", sessionId: this.sessionManager.getSessionId() } });
95
+ const { supervisor, owner } = this._agentTaskHost.ownerBinding;
96
+ const store = new OwnerTaskStore(supervisor, owner);
97
+ const connected = store.connect();
98
+ if (!connected.ok)
99
+ throw new Error(connected.error.message);
100
+ bindOwnerTaskStore(this, store);
101
+ return this._agentTaskHost;
102
+ }
103
+ export async function closeSessionTasks() {
104
+ // Replacement stage sessions share generation lifetime; disposal is not stage closure.
105
+ if (this._workflowStageAdmission)
106
+ return;
107
+ this._taskAdmission?.seal();
108
+ const closed = await this._agentTaskHost?.close("session-close");
109
+ if (closed && !closed.ok)
110
+ throw new Error(`${closed.error.code}: ${closed.error.message}`);
111
+ }
112
+ export const agentSessionTaskMethods = { getAgentTaskHost, closeSessionTasks };
113
+ //# sourceMappingURL=agent-session-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-tasks.js","sourceRoot":"","sources":["../../src/core/agent-session-tasks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EACN,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,MAAM,UAAU,gBAAgB;IAC/B,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC;IACpD,MAAM,SAAS,GACd,IAAI,CAAC,uBAAuB,IAAI,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1G,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,cAAc,EACnB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,EAC3C,KAAK,EAAE,QAAQ,EAAE,EAAE;QAClB,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,EAAE,eAAe,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,EAAE,EAAE;YACvB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CACtF;YACF,CAAC,CAAC,SAAS,CAAC;QACb,IAAI,OAAO,EAAE,EAAE;YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACzC,0EAA0E;QAC1E,yEAAyE;QACzE,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAM,EAAE,EAAE;YAC1B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;iBACnB,UAAU,EAAE;iBACZ,KAAK,EAAE;iBACP,OAAO,EAAE;iBACT,IAAI,CACJ,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,CAAC,IAAI,KAAK,SAAS;gBACxB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAClC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAClF;YACH,CAAC,CAAC,SAAS,CAAC;QACb,IAAI,MAAM,GACT,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;YACpE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;iBACvB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;iBACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC1B,IAAI,CAAC,IAAI,CAAC;YACb,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;YACnD,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE;oBAC3E,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;oBACpB,YAAY,EAAE,yBAAyB;iBACvC,CAAC,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,EAAE;oBACf,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAClF,CAAC,CAAC,oBAAoB,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACR,qEAAqE;gBACrE,MAAM,GAAG,oBAAoB,CAAC;YAC/B,CAAC;QACF,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,IAAI,gBAAgB,EAAE,CAAC;YACtB,MAAM,2BAA2B,CAChC,2BAA2B,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,EACzE,gBAAgB,EAChB,QAAQ,CAAC,YAAY,CACrB,CAAC;QACH,CAAC;QACD,MAAM,SAAS,CAAC,KAAK,CACpB,QAAQ,CAAC,YAAY,EACrB,GAAG,EAAE,CACJ,IAAI,CAAC,iBAAiB,CACrB;YACC,UAAU,EAAE,4BAA4B;YACxC,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC;YACrD,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;YACpF,OAAO,EAAE,IAAI;SACb,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,CAAC,YAAY,EAAE,CAC3F,EACF,GAAG,EAAE;YACJ,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzC,CAAC,CACD,CAAC,UAAU,CAAC;IACd,CAAC,CACD,CAAC;IACF,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC;IACpC,MAAM,OAAO,GAAG;QACf,eAAe,EAAE,GAAG,EAAE;YACrB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACnF,sFAAsF;YACtF,wEAAwE;YACxE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,aAAa,EAAE,CACd,GAAG,CAAC,GAAG,EAAE,OAAO,CAA4F,EAC3G,EAAE;YACH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KACD,CAAC;IACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB;QACjD,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,OAAO,CAAC;QACzD,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IAChH,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,cAAc,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACtC,uFAAuF;IACvF,IAAI,IAAI,CAAC,uBAAuB;QAAE,OAAO;IACzC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACjE,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { getExtensionRuntimeEventBus } from \"./extensions/loader-core.js\";\nimport { AgentTaskHost } from \"./tasks/agent-adapter.js\";\nimport { COMMAND_DETAIL_TAIL_BYTES, taskOutputText } from \"./tasks/command-output.js\";\nimport {\n\tformatTaskCompletion,\n\tTASK_COMPLETION_MESSAGE_TYPE,\n\tTaskCompletionOutbox,\n\ttaskCompletionNotice,\n} from \"./tasks/completion.js\";\nimport { flushTaskCompletionMessages } from \"./tasks/completion-ordering.js\";\nimport { bindOwnerTaskStore, OwnerTaskStore } from \"./tasks/owner-store.js\";\nimport { taskTranscriptSource } from \"./tasks/supervisor.js\";\nimport { WorkflowStageAdmissionBoundary } from \"./workflow-stage-admission.ts\";\n\nexport function getAgentTaskHost(this: AgentSession): AgentTaskHost {\n\tif (this._disposed) throw new Error(\"Task owner is closed\");\n\tif (this._agentTaskHost) return this._agentTaskHost;\n\tconst admission =\n\t\tthis._workflowStageAdmission ?? WorkflowStageAdmissionBoundary.restore(this.sessionManager.getEntries());\n\tthis._taskAdmission = admission;\n\tconst outbox = new TaskCompletionOutbox(\n\t\tthis.sessionManager,\n\t\t() => !this._disposed && admission.isOpen(),\n\t\tasync (envelope) => {\n\t\t\t// Settlement can precede the UI projection's next drain. Read the owner\n\t\t\t// snapshot, not the display store, when attaching completion context.\n\t\t\tconst host = this._agentTaskHost;\n\t\t\tconst watched = host?.watchOwnerTasks();\n\t\t\tconst task = watched?.ok\n\t\t\t\t? watched.value.snapshot.tasks.find(\n\t\t\t\t\t\t(item) => item.ref.taskId === envelope.taskId && item.ref.ownerId === envelope.ownerId,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t\tif (watched?.ok) watched.value.dispose();\n\t\t\t// Foreground shell results already return through their tool call. Do not\n\t\t\t// create a second model turn or background card for that same execution.\n\t\t\tif (task?.kind === \"command\" && !task.wasBackground) return;\n\t\t\tconst lease = task ? host?.resolveTask(envelope.taskId) : undefined;\n\t\t\tconst source = lease?.ok ? taskTranscriptSource(lease.value) : undefined;\n\t\t\tconst response = source?.ok\n\t\t\t\t? source.value.session\n\t\t\t\t\t\t.getEntries()\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.find(\n\t\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\t\tentry.type === \"message\" &&\n\t\t\t\t\t\t\t\tentry.message.role === \"assistant\" &&\n\t\t\t\t\t\t\t\tentry.message.content.some((block) => block.type === \"text\" && block.text.trim()),\n\t\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t\tlet output =\n\t\t\t\tresponse?.type === \"message\" && response.message.role === \"assistant\"\n\t\t\t\t\t? response.message.content\n\t\t\t\t\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t\t\t\t\t.map((block) => block.text)\n\t\t\t\t\t\t\t.join(\"\\n\")\n\t\t\t\t\t: undefined;\n\t\t\tif (task?.kind === \"command\" && lease?.ok && host) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bytes = BigInt(task.output.byteCount);\n\t\t\t\t\tconst start = bytes > BigInt(COMMAND_DETAIL_TAIL_BYTES) ? bytes - BigInt(COMMAND_DETAIL_TAIL_BYTES) : 0n;\n\t\t\t\t\tconst page = await host.ownerBinding.supervisor.readTaskOutput(lease.value, {\n\t\t\t\t\t\tstart: String(start),\n\t\t\t\t\t\tmaximumBytes: COMMAND_DETAIL_TAIL_BYTES,\n\t\t\t\t\t});\n\t\t\t\t\toutput = page.ok\n\t\t\t\t\t\t? `${start > 0n ? \"[Earlier output omitted]\\n\" : \"\"}${taskOutputText(page.value)}`\n\t\t\t\t\t\t: \"Output unavailable\";\n\t\t\t\t} catch {\n\t\t\t\t\t// Missing retained output must not suppress a terminal notification.\n\t\t\t\t\toutput = \"Output unavailable\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst completionSource = source?.ok ? source.value.session.completionSource : undefined;\n\t\t\tif (completionSource) {\n\t\t\t\tawait flushTaskCompletionMessages(\n\t\t\t\t\tgetExtensionRuntimeEventBus(this._resourceLoader.getExtensions().runtime),\n\t\t\t\t\tcompletionSource,\n\t\t\t\t\tenvelope.completionId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait admission.admit(\n\t\t\t\tenvelope.completionId,\n\t\t\t\t() =>\n\t\t\t\t\tthis.sendCustomMessage(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcustomType: TASK_COMPLETION_MESSAGE_TYPE,\n\t\t\t\t\t\t\tcontent: formatTaskCompletion(envelope, task, output),\n\t\t\t\t\t\t\tdetails: { ...envelope, notification: taskCompletionNotice(envelope, task, output) },\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ triggerTurn: true, persistWhenStreaming: true, stageAdmissionKey: envelope.completionId },\n\t\t\t\t\t),\n\t\t\t\t() => {\n\t\t\t\t\tthrow new Error(\"Task owner is closed\");\n\t\t\t\t},\n\t\t\t).completion;\n\t\t},\n\t);\n\tthis._taskCompletionOutbox = outbox;\n\tconst binding = {\n\t\tauthorizeLaunch: () => {\n\t\t\tif (this._disposed || !admission.isOpen()) throw new Error(\"Task owner is closed\");\n\t\t\t// Top-level sessions (main chat, workflow stages) may carry a policy without `depth`;\n\t\t\t// only an admitted in-process child (depth >= 1) is refused delegation.\n\t\t\tif ((this._subagentPolicy?.depth ?? 0) >= 1)\n\t\t\t\tthrow new Error(\"Subagent delegation is not available inside a subagent\");\n\t\t},\n\t\tonTaskSettled: (\n\t\t\t...[ref, receipt]: Parameters<NonNullable<import(\"./tasks/supervisor.js\").TrustedTaskHost[\"onTaskSettled\"]>>\n\t\t) => {\n\t\t\toutbox.record(ref.ownerId, receipt);\n\t\t\tvoid outbox.flush();\n\t\t},\n\t};\n\tthis._agentTaskHost = this._workflowStageAdmission\n\t\t? this._workflowStageAdmission.bindAgentTaskHost(binding)\n\t\t: new AgentTaskHost({ ...binding, scope: { kind: \"session\", sessionId: this.sessionManager.getSessionId() } });\n\tconst { supervisor, owner } = this._agentTaskHost.ownerBinding;\n\tconst store = new OwnerTaskStore(supervisor, owner);\n\tconst connected = store.connect();\n\tif (!connected.ok) throw new Error(connected.error.message);\n\tbindOwnerTaskStore(this, store);\n\treturn this._agentTaskHost;\n}\n\nexport async function closeSessionTasks(this: AgentSession): Promise<void> {\n\t// Replacement stage sessions share generation lifetime; disposal is not stage closure.\n\tif (this._workflowStageAdmission) return;\n\tthis._taskAdmission?.seal();\n\tconst closed = await this._agentTaskHost?.close(\"session-close\");\n\tif (closed && !closed.ok) throw new Error(`${closed.error.code}: ${closed.error.message}`);\n}\n\nexport const agentSessionTaskMethods = { getAgentTaskHost, closeSessionTasks };\n"]}