@schlenkr/ragents 0.1.5 → 0.1.6

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 (1052) hide show
  1. package/README.md +18 -11
  2. package/apps/server/package.json +8 -6
  3. package/apps/server/src/access-projection.ts +3 -3
  4. package/apps/server/src/access-service.ts +19 -8
  5. package/apps/server/src/access-session.ts +6 -2
  6. package/apps/server/src/api/contracts.ts +19 -18
  7. package/apps/server/src/api/core-methods.ts +45 -26
  8. package/apps/server/src/api/delivery.ts +4 -4
  9. package/apps/server/src/api/reference.ts +1 -1
  10. package/apps/server/src/api/rights.ts +86 -7
  11. package/apps/server/src/chat-context.ts +1 -1
  12. package/apps/server/src/chat-handler.ts +14 -7
  13. package/apps/server/src/config-file.ts +25 -6
  14. package/apps/server/src/config.ts +4 -4
  15. package/apps/server/src/data-directory.ts +1 -1
  16. package/apps/server/src/folder-install.ts +115 -0
  17. package/apps/server/src/host-api.json +1256 -0
  18. package/apps/server/src/host-api.ts +190 -0
  19. package/apps/server/src/host-resolution-hooks.mjs +50 -1
  20. package/apps/server/src/host-resolution.ts +26 -1
  21. package/apps/server/src/host-version.ts +41 -0
  22. package/apps/server/src/host-web.ts +59 -0
  23. package/apps/server/src/layout.ts +1 -1
  24. package/apps/server/src/main.ts +3 -2
  25. package/apps/server/src/missing-environment.ts +47 -0
  26. package/apps/server/src/parent-watch.ts +37 -0
  27. package/apps/server/src/plugin-build/build.ts +650 -0
  28. package/apps/server/src/plugin-build/host-api-names.ts +185 -0
  29. package/apps/server/src/plugin-build/plugin-description.ts +118 -0
  30. package/apps/server/src/plugin-build/typecheck.ts +66 -0
  31. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/app-project.ts +16 -15
  32. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-compiler.ts +4 -4
  33. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-contracts.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-runtime.ts +27 -0
  35. package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/contract.ts +3 -3
  36. package/apps/server/src/plugin-support/actor-programs/service.ts +1 -1
  37. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/tailwind.ts +2 -3
  38. package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/index.ts +48 -48
  39. package/apps/server/src/plugin-support/agent-tool.ts +10 -5
  40. package/apps/server/src/plugin-support/http.ts +1 -1
  41. package/apps/server/src/plugin-support/language-server/contract.ts +37 -6
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +18 -8
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +32 -7
  44. package/apps/server/src/plugin-support/language-server/tools.ts +59 -15
  45. package/apps/server/src/plugin-support/model-aliases.ts +77 -0
  46. package/apps/server/src/plugin-support/model-choice.ts +17 -7
  47. package/apps/server/src/plugin-support/model-completion.ts +58 -0
  48. package/apps/server/src/plugin-support/model-upstreams.ts +2 -2
  49. package/apps/server/src/plugin-support/native-typescript-executor.ts +10 -7
  50. package/apps/server/src/plugin-support/plugin-config.ts +1 -1
  51. package/apps/server/src/plugin-support/plugin-folder.ts +4 -1
  52. package/apps/server/src/plugin-support/plugin-module.ts +1 -1
  53. package/apps/server/src/plugin-support/plugins-root.ts +6 -10
  54. package/apps/server/src/plugin-support/process-sandbox.ts +312 -0
  55. package/apps/server/src/plugin-support/product-model-settings-contract.ts +14 -5
  56. package/apps/server/src/plugin-support/product-model-settings.ts +10 -9
  57. package/{plugins/ragents.product/server/relay.ts → apps/server/src/plugin-support/product-relay.ts} +2 -2
  58. package/apps/server/src/plugin-support/product-start-options.ts +8 -3
  59. package/apps/server/src/plugin-support/prompt.ts +1 -1
  60. package/apps/server/src/plugin-support/provision.ts +6 -0
  61. package/apps/server/src/plugin-support/run-scripts.ts +16 -2
  62. package/apps/server/src/plugin-support/skills.ts +32 -16
  63. package/apps/server/src/plugin-support/start-entries-contract.ts +12 -3
  64. package/apps/server/src/plugin-support/start-options-contract.ts +5 -1
  65. package/apps/server/src/plugin-support/thinking-level.ts +6 -1
  66. package/apps/server/src/plugin-support/tool-availability.ts +1 -7
  67. package/apps/server/src/plugin-support/workspace-ownership.ts +12 -6
  68. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +184 -37
  69. package/apps/server/src/profile/bundle-manifest.ts +183 -0
  70. package/apps/server/src/profile/compose.ts +19 -10
  71. package/apps/server/src/profile/plugin-discovery.ts +98 -46
  72. package/apps/server/src/profile/provisioning.ts +30 -26
  73. package/apps/server/src/profile-target.ts +3 -0
  74. package/apps/server/src/provider.ts +182 -99
  75. package/apps/server/src/ragents/actor-chat-history.ts +23 -22
  76. package/apps/server/src/ragents/chat-projection.ts +25 -14
  77. package/apps/server/src/ragents/chat-text-positions.ts +4 -4
  78. package/apps/server/src/ragents/coordinator.ts +27 -1
  79. package/apps/server/src/ragents/document-store.ts +1 -1
  80. package/apps/server/src/ragents/engine.ts +69 -36
  81. package/apps/server/src/ragents/global-chat.ts +26 -13
  82. package/apps/server/src/ragents/host-services.ts +15 -6
  83. package/apps/server/src/ragents/journal-chat-events.ts +31 -15
  84. package/apps/server/src/ragents/product-runtime.ts +1 -1
  85. package/apps/server/src/ragents/run-owner.ts +17 -0
  86. package/apps/server/src/ragents/runtime-bridge.ts +1 -1
  87. package/apps/server/src/ragents/session.ts +181 -82
  88. package/apps/server/src/ragents/start-option-state.ts +1 -1
  89. package/apps/server/src/ragents/typescript-tools.ts +35 -27
  90. package/apps/server/src/ragents/workspace-runtime.ts +74 -8
  91. package/apps/server/src/rpc/dispatcher.ts +17 -8
  92. package/apps/server/src/rpc/http-transport.ts +1 -3
  93. package/apps/server/src/rpc/stdio-transport.ts +1 -1
  94. package/apps/server/src/run-preparation-contract.ts +1 -1
  95. package/apps/server/src/run-preparation-input.ts +1 -1
  96. package/apps/server/src/run-preparation.ts +13 -20
  97. package/apps/server/src/run-transfer.ts +2 -2
  98. package/apps/server/src/server.ts +112 -33
  99. package/apps/server/src/settings.ts +7 -8
  100. package/apps/server/src/title-compactor.ts +5 -8
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +79 -0
  103. package/apps/server/src/web-stylesheet.ts +85 -0
  104. package/apps/server/tsconfig.json +4 -4
  105. package/apps/server/tsconfig.plugin.json +58 -0
  106. package/apps/web/dist/assets/highlighted-body-KPVGNVTW-B9qYBARS.js +1 -0
  107. package/apps/web/dist/assets/main-BCjvD2Hh.js +6 -0
  108. package/apps/web/dist/assets/mermaid-HWGCJPDP-BPn4aV2r.css +1 -0
  109. package/apps/web/dist/assets/mermaid-HWGCJPDP-CvYYFK_n.js +478 -0
  110. package/apps/web/dist/assets/runPanel-CG7kRMJh.js +21 -0
  111. package/apps/web/dist/help/guide-access.html +199 -0
  112. package/apps/web/dist/help/guide-access.md +84 -0
  113. package/apps/web/dist/help/guide-clients.html +421 -0
  114. package/apps/web/dist/help/guide-clients.md +336 -0
  115. package/apps/web/dist/help/guide-distributed.html +320 -0
  116. package/apps/web/dist/help/guide-distributed.md +225 -0
  117. package/apps/web/dist/help/guide-functions.html +231 -0
  118. package/apps/web/dist/help/guide-functions.md +127 -0
  119. package/apps/web/dist/help/guide-getting-started.html +230 -0
  120. package/apps/web/dist/help/guide-getting-started.md +123 -0
  121. package/apps/web/dist/help/guide-ideas.html +183 -0
  122. package/apps/web/dist/help/guide-ideas.md +71 -0
  123. package/apps/web/dist/help/guide-plugins.html +450 -0
  124. package/apps/web/dist/help/guide-plugins.md +341 -0
  125. package/apps/web/dist/help/guide-programs.html +359 -0
  126. package/apps/web/dist/help/guide-programs.md +271 -0
  127. package/apps/web/dist/help/guide-runtime.html +338 -0
  128. package/apps/web/dist/help/guide-runtime.md +225 -0
  129. package/apps/web/dist/help/guide.html +133 -0
  130. package/apps/web/dist/help/guide.md +13 -0
  131. package/apps/web/dist/help/homepage-bullets.js +12 -0
  132. package/apps/web/dist/help/homepage-distributed.js +261 -0
  133. package/apps/web/dist/help/homepage-plugins.js +30 -0
  134. package/apps/web/dist/help/homepage-scenes.js +368 -0
  135. package/apps/web/dist/help/homepage-stickers.js +69 -0
  136. package/apps/web/dist/help/homepage-story-nav.js +11 -0
  137. package/apps/web/dist/help/homepage-subnav.js +61 -0
  138. package/apps/web/dist/help/homepage.css +833 -0
  139. package/apps/web/dist/help/index.html +1167 -0
  140. package/apps/web/dist/help/mini-app.css +7056 -0
  141. package/apps/web/dist/help/mini-app.html +15 -0
  142. package/apps/web/dist/help/mini-app.js +131 -0
  143. package/apps/web/dist/help/screenshots/release-checklist-vscode.png +0 -0
  144. package/apps/web/dist/help/screenshots/release-checklist-web.png +0 -0
  145. package/apps/web/dist/help/scroll-vendor.js +73 -0
  146. package/apps/web/dist/help/site.css +63 -0
  147. package/apps/web/dist/help/site.js +103 -0
  148. package/apps/web/dist/host-web.json +143 -0
  149. package/apps/web/dist/index.html +15 -0
  150. package/apps/web/dist/run-panel.html +15 -0
  151. package/apps/web/package.json +2 -2
  152. package/apps/web/src/App.tsx +8 -6
  153. package/apps/web/src/Overview.tsx +5 -5
  154. package/apps/web/src/PluginActivation.ts +25 -5
  155. package/apps/web/src/PluginChat.tsx +163 -129
  156. package/apps/web/src/PluginFailureNotice.tsx +15 -0
  157. package/apps/web/src/PluginRegistry.tsx +106 -68
  158. package/apps/web/src/RunPreparationChat.tsx +40 -28
  159. package/apps/web/src/RunStore.ts +2 -2
  160. package/apps/web/src/SettingsModal.tsx +37 -37
  161. package/apps/web/src/StartOptions.tsx +81 -26
  162. package/apps/web/src/StartSelection.tsx +111 -0
  163. package/apps/web/src/StartTiles.tsx +73 -0
  164. package/apps/web/src/{CanvasShortcuts.tsx → SurfaceShortcuts.tsx} +2 -2
  165. package/apps/web/src/ThemeSettings.tsx +1 -1
  166. package/apps/web/src/WorkspacePanel.tsx +4 -4
  167. package/apps/web/src/access-session.ts +4 -1
  168. package/{plugins/ragents.orchestration/web → apps/web/src}/actor-conversation.ts +3 -3
  169. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/DataTable.tsx +9 -9
  170. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FilePicker.tsx +4 -4
  171. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagram.tsx +16 -14
  172. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagramRenderer.tsx +3 -3
  173. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Form.tsx +12 -12
  174. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Layout.tsx +1 -1
  175. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/MessageList.tsx +5 -5
  176. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Viewers.tsx +8 -7
  177. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/WorkflowDiagram.tsx +1 -1
  178. package/apps/web/src/actor-programs/client-ui/chat-contracts.d.ts +64 -0
  179. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/contracts.d.ts +2 -2
  180. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-selection.ts +5 -5
  181. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/index.tsx +22 -16
  182. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/layout-contracts.d.ts +1 -1
  183. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/message-list-contracts.d.ts +2 -2
  184. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/workflow-diagram-contracts.d.ts +1 -1
  185. package/apps/web/src/api.ts +43 -22
  186. package/apps/web/src/chat/QuasselHost.tsx +12 -0
  187. package/apps/web/src/chat/StoppedActorNotice.tsx +39 -0
  188. package/apps/web/src/chat/chat-target.ts +14 -5
  189. package/apps/web/src/chat/requests.ts +13 -5
  190. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  191. package/apps/web/src/chat/useChat.ts +8 -7
  192. package/apps/web/src/chat/user-location.ts +1 -1
  193. package/apps/web/src/chat-view-settings.tsx +49 -0
  194. package/apps/web/src/host-modules.ts +90 -0
  195. package/apps/web/src/language-server/api.ts +24 -0
  196. package/{plugins/ragents.lsp-roslyn/web → apps/web/src/language-server}/language-server-plugin.tsx +133 -6
  197. package/apps/web/src/main.tsx +4 -2
  198. package/apps/web/src/offered-machines.ts +11 -0
  199. package/apps/web/src/panel/ConnectionsPage.tsx +117 -0
  200. package/apps/web/src/panel/LoginForm.tsx +9 -9
  201. package/apps/web/src/panel/PanelDialogs.tsx +44 -27
  202. package/apps/web/src/panel/PanelHeader.tsx +11 -0
  203. package/apps/web/src/panel/PanelPage.tsx +8 -5
  204. package/apps/web/src/panel/RunLine.tsx +48 -0
  205. package/apps/web/src/panel/RunsPage.tsx +84 -0
  206. package/apps/web/src/panel/StartPage.tsx +163 -0
  207. package/apps/web/src/panel/connection-state.ts +40 -0
  208. package/apps/web/src/panel/contract.ts +64 -21
  209. package/apps/web/src/panel/page-props.ts +6 -0
  210. package/apps/web/src/plugin-bootstrap.ts +60 -31
  211. package/{plugins/ragents.product/web → apps/web/src/product}/ModelControl.tsx +3 -3
  212. package/{plugins/ragents.product/web → apps/web/src/product}/ProductModelSettings.tsx +7 -7
  213. package/{plugins/ragents.product/web → apps/web/src/product}/SystemPromptControl.tsx +3 -3
  214. package/{plugins/ragents.product/web → apps/web/src/product}/model-settings.ts +3 -3
  215. package/{plugins/ragents.product/web → apps/web/src/product}/start-options.tsx +2 -2
  216. package/apps/web/src/rpc/client.ts +28 -6
  217. package/apps/web/src/run-panel/RunPanelApp.tsx +334 -0
  218. package/apps/web/src/{column/ColumnRunHeader.tsx → run-panel/RunPanelHeader.tsx} +2 -2
  219. package/apps/web/src/{column/ColumnMenu.tsx → run-panel/RunPanelMenu.tsx} +4 -4
  220. package/apps/web/src/run-panel/RunPanelRail.tsx +38 -0
  221. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +55 -0
  222. package/apps/web/src/{column → run-panel}/clipboard.ts +21 -10
  223. package/apps/web/src/run-panel/host-contract.ts +123 -0
  224. package/apps/web/src/{column → run-panel}/host.ts +31 -23
  225. package/apps/web/src/run-panel/input-bridge.ts +75 -0
  226. package/apps/web/src/run-panel/keyboard.ts +53 -0
  227. package/apps/web/src/run-panel/run-panel-location.ts +35 -0
  228. package/apps/web/src/{column → run-panel}/use-session-list.ts +3 -3
  229. package/apps/web/src/run-panel/workspace-state.ts +43 -0
  230. package/apps/web/src/{column.tsx → run-panel.tsx} +20 -13
  231. package/apps/web/src/run-preparation.ts +1 -1
  232. package/{plugins/ragents.orchestration/web → apps/web/src}/run-view.ts +25 -7
  233. package/apps/web/src/settings-contributions.ts +16 -18
  234. package/apps/web/src/title-model-settings.ts +1 -1
  235. package/apps/web/src/toolLine.ts +1 -1
  236. package/apps/web/src/ui/ListDetail.tsx +1 -1
  237. package/apps/web/src/ui/dialog.tsx +5 -5
  238. package/apps/web/src/ui/frame.css +1 -0
  239. package/apps/web/src/ui/index.ts +5 -0
  240. package/apps/web/src/ui/popover.tsx +2 -2
  241. package/apps/web/src/ui/quassel.css +41 -0
  242. package/apps/web/src/ui/relative-time.ts +36 -0
  243. package/apps/web/src/ui/startup-notice.tsx +22 -0
  244. package/apps/web/src/ui/state-icon.tsx +60 -0
  245. package/apps/web/src/ui/state-vocabulary.ts +31 -0
  246. package/apps/web/src/ui/stop-button.tsx +22 -0
  247. package/apps/web/src/ui/tailwind.css +2 -3
  248. package/apps/web/src/ui/theme.css +19 -19
  249. package/apps/web/tsconfig.json +4 -5
  250. package/apps/web/tsconfig.plugin.json +44 -0
  251. package/bundles/ragents.activity/ragents-bundle.json +38 -0
  252. package/bundles/ragents.activity/server/index.js +14 -0
  253. package/bundles/ragents.activity/server/index.js.map +7 -0
  254. package/bundles/ragents.activity/web/classes.json +1 -0
  255. package/bundles/ragents.activity/web/index.js +2 -0
  256. package/bundles/ragents.activity/web/index.js.map +7 -0
  257. package/bundles/ragents.actor-programs/prompt.hbs +80 -0
  258. package/bundles/ragents.actor-programs/ragents-bundle.json +214 -0
  259. package/bundles/ragents.actor-programs/server/index.js +2071 -0
  260. package/bundles/ragents.actor-programs/server/index.js.map +7 -0
  261. package/bundles/ragents.actor-programs/summary.hbs +17 -0
  262. package/bundles/ragents.actor-programs/web/classes.json +1 -0
  263. package/bundles/ragents.actor-programs/web/index.js +27 -0
  264. package/bundles/ragents.actor-programs/web/index.js.map +7 -0
  265. package/bundles/ragents.ask/ask.hbs +4 -0
  266. package/bundles/ragents.ask/ragents-bundle.json +97 -0
  267. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js +13 -0
  268. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +7 -0
  269. package/bundles/ragents.ask/server/exports/server/contract.js +11 -0
  270. package/bundles/ragents.ask/server/exports/server/contract.js.map +7 -0
  271. package/bundles/ragents.ask/server/index.js +279 -0
  272. package/bundles/ragents.ask/server/index.js.map +7 -0
  273. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +2 -0
  274. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +7 -0
  275. package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js +2 -0
  276. package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js.map +7 -0
  277. package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js +25 -0
  278. package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js.map +7 -0
  279. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +2 -0
  280. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +7 -0
  281. package/bundles/ragents.ask/web/classes.json +1 -0
  282. package/bundles/ragents.ask/web/exports/ask-payload.js +2 -0
  283. package/bundles/ragents.ask/web/exports/ask-payload.js.map +7 -0
  284. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +2 -0
  285. package/bundles/ragents.ask/web/exports/web/QuestionCard.js.map +7 -0
  286. package/bundles/ragents.ask/web/exports/web/api.js +2 -0
  287. package/bundles/ragents.ask/web/exports/web/api.js.map +7 -0
  288. package/bundles/ragents.ask/web/index.js +2 -0
  289. package/bundles/ragents.ask/web/index.js.map +7 -0
  290. package/bundles/ragents.browser/ragents-bundle.json +53 -0
  291. package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js +11 -0
  292. package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js.map +7 -0
  293. package/bundles/ragents.browser/server/exports/server/contract.js +9 -0
  294. package/bundles/ragents.browser/server/exports/server/contract.js.map +7 -0
  295. package/bundles/ragents.browser/server/index.js +479 -0
  296. package/bundles/ragents.browser/server/index.js.map +7 -0
  297. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +38 -0
  298. package/bundles/ragents.documents/prompt.hbs +18 -0
  299. package/bundles/ragents.documents/ragents-bundle.json +120 -0
  300. package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js +37 -0
  301. package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js.map +7 -0
  302. package/bundles/ragents.documents/server/exports/contract.js +11 -0
  303. package/bundles/ragents.documents/server/exports/contract.js.map +7 -0
  304. package/bundles/ragents.documents/server/index.js +290 -0
  305. package/bundles/ragents.documents/server/index.js.map +7 -0
  306. package/bundles/ragents.documents/web/classes.json +1 -0
  307. package/bundles/ragents.documents/web/index.js +26 -0
  308. package/bundles/ragents.documents/web/index.js.map +7 -0
  309. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +49 -0
  310. package/bundles/ragents.lsp-fsharp/server/index.js +82 -0
  311. package/bundles/ragents.lsp-fsharp/server/index.js.map +7 -0
  312. package/bundles/ragents.lsp-fsharp/web/classes.json +1 -0
  313. package/bundles/ragents.lsp-fsharp/web/index.js +2 -0
  314. package/bundles/ragents.lsp-fsharp/web/index.js.map +7 -0
  315. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +61 -0
  316. package/bundles/ragents.lsp-roslyn/server/index.js +208 -0
  317. package/bundles/ragents.lsp-roslyn/server/index.js.map +7 -0
  318. package/bundles/ragents.lsp-roslyn/web/classes.json +1 -0
  319. package/bundles/ragents.lsp-roslyn/web/index.js +2 -0
  320. package/bundles/ragents.lsp-roslyn/web/index.js.map +7 -0
  321. package/bundles/ragents.lsp-typescript/ragents-bundle.json +36 -0
  322. package/bundles/ragents.lsp-typescript/server/index.js +13 -0
  323. package/bundles/ragents.lsp-typescript/server/index.js.map +7 -0
  324. package/bundles/ragents.lsp-typescript/web/classes.json +1 -0
  325. package/bundles/ragents.lsp-typescript/web/index.js +2 -0
  326. package/bundles/ragents.lsp-typescript/web/index.js.map +7 -0
  327. package/bundles/ragents.model-relay/ragents-bundle.json +33 -0
  328. package/bundles/ragents.model-relay/server/index.js +230 -0
  329. package/bundles/ragents.model-relay/server/index.js.map +7 -0
  330. package/bundles/ragents.orchestration/orchestration.hbs +106 -0
  331. package/bundles/ragents.orchestration/ragents-bundle.json +194 -0
  332. package/bundles/ragents.orchestration/server/index.js +277 -0
  333. package/bundles/ragents.orchestration/server/index.js.map +7 -0
  334. package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js +2 -0
  335. package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js.map +7 -0
  336. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +2 -0
  337. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js.map +7 -0
  338. package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js +2 -0
  339. package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js.map +7 -0
  340. package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js +2 -0
  341. package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js.map +7 -0
  342. package/bundles/ragents.orchestration/web/classes.json +1 -0
  343. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +2 -0
  344. package/bundles/ragents.orchestration/web/exports/web/program-slot.js.map +7 -0
  345. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +2 -0
  346. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js.map +7 -0
  347. package/bundles/ragents.orchestration/web/exports/web/tile-docking.js +2 -0
  348. package/bundles/ragents.orchestration/web/exports/web/tile-docking.js.map +7 -0
  349. package/bundles/ragents.orchestration/web/index.js +51 -0
  350. package/bundles/ragents.orchestration/web/index.js.map +7 -0
  351. package/bundles/ragents.overseer/ragents-bundle.json +144 -0
  352. package/bundles/ragents.overseer/server/index.js +652 -0
  353. package/bundles/ragents.overseer/server/index.js.map +7 -0
  354. package/bundles/ragents.overseer/web/classes.json +1 -0
  355. package/bundles/ragents.overseer/web/index.js +25 -0
  356. package/bundles/ragents.overseer/web/index.js.map +7 -0
  357. package/bundles/ragents.processes/ragents-bundle.json +93 -0
  358. package/bundles/ragents.processes/server/index.js +204 -0
  359. package/bundles/ragents.processes/server/index.js.map +7 -0
  360. package/bundles/ragents.processes/web/classes.json +1 -0
  361. package/bundles/ragents.processes/web/index.js +4 -0
  362. package/bundles/ragents.processes/web/index.js.map +7 -0
  363. package/bundles/ragents.product/preamble.hbs +9 -0
  364. package/bundles/ragents.product/ragents-bundle.json +93 -0
  365. package/bundles/ragents.product/server/index.js +208 -0
  366. package/bundles/ragents.product/server/index.js.map +7 -0
  367. package/bundles/ragents.product/web/classes.json +1 -0
  368. package/bundles/ragents.product/web/index.js +2 -0
  369. package/bundles/ragents.product/web/index.js.map +7 -0
  370. package/bundles/ragents.profile-distribution/ragents-bundle.json +64 -0
  371. package/bundles/ragents.profile-distribution/server/index.js +241 -0
  372. package/bundles/ragents.profile-distribution/server/index.js.map +7 -0
  373. package/bundles/ragents.reference/ragents-bundle.json +39 -0
  374. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +27 -0
  375. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +10 -0
  376. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +80 -0
  377. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +82 -0
  378. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +154 -0
  379. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +9 -0
  380. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +32 -0
  381. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +59 -0
  382. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +13 -0
  383. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +9 -0
  384. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +81 -0
  385. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +26 -0
  386. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +34 -0
  387. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +24 -0
  388. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +10 -0
  389. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -0
  390. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +5 -0
  391. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -0
  392. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +27 -0
  393. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +137 -0
  394. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/state.ts +38 -0
  395. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +42 -0
  396. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +38 -0
  397. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +218 -0
  398. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +12 -0
  399. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +9 -0
  400. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +60 -0
  401. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +26 -0
  402. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +24 -0
  403. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +18 -0
  404. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +16 -0
  405. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +39 -0
  406. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +15 -0
  407. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/server.ts +14 -0
  408. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +13 -0
  409. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +9 -0
  410. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +65 -0
  411. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +26 -0
  412. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +42 -0
  413. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +25 -0
  414. package/bundles/ragents.reference/run-scripts/word-game/package.json +11 -0
  415. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +27 -0
  416. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +23 -0
  417. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +105 -0
  418. package/bundles/ragents.reference/run-scripts/word-game/src/state.ts +22 -0
  419. package/bundles/ragents.reference/run-scripts/word-game/src/view.tsx +54 -0
  420. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +252 -0
  421. package/bundles/ragents.reference/server/index.js +16 -0
  422. package/bundles/ragents.reference/server/index.js.map +7 -0
  423. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +12 -0
  424. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +12 -0
  425. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +12 -0
  426. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +12 -0
  427. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +12 -0
  428. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +12 -0
  429. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +12 -0
  430. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +12 -0
  431. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +12 -0
  432. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +12 -0
  433. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +12 -0
  434. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +12 -0
  435. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +12 -0
  436. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +12 -0
  437. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +12 -0
  438. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +12 -0
  439. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +12 -0
  440. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +12 -0
  441. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +12 -0
  442. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +12 -0
  443. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +12 -0
  444. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +12 -0
  445. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +12 -0
  446. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +12 -0
  447. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +12 -0
  448. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +33 -0
  449. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +33 -0
  450. package/bundles/ragents.reference/web/classes.json +1 -0
  451. package/bundles/ragents.reference/web/index.js +2 -0
  452. package/bundles/ragents.reference/web/index.js.map +7 -0
  453. package/bundles/ragents.todo/ragents-bundle.json +48 -0
  454. package/bundles/ragents.todo/server/index.js +108 -0
  455. package/bundles/ragents.todo/server/index.js.map +7 -0
  456. package/bundles/ragents.todo/web/classes.json +1 -0
  457. package/bundles/ragents.todo/web/index.js +2 -0
  458. package/bundles/ragents.todo/web/index.js.map +7 -0
  459. package/bundles/ragents.transcript/ragents-bundle.json +34 -0
  460. package/bundles/ragents.transcript/server/index.js +102 -0
  461. package/bundles/ragents.transcript/server/index.js.map +7 -0
  462. package/bundles/ragents.watch/ragents-bundle.json +39 -0
  463. package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js +11 -0
  464. package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js.map +7 -0
  465. package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js +10 -0
  466. package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js.map +7 -0
  467. package/bundles/ragents.watch/server/exports/contract.js +9 -0
  468. package/bundles/ragents.watch/server/exports/contract.js.map +7 -0
  469. package/bundles/ragents.watch/server/exports/server/contract.js +9 -0
  470. package/bundles/ragents.watch/server/exports/server/contract.js.map +7 -0
  471. package/bundles/ragents.watch/server/index.js +482 -0
  472. package/bundles/ragents.watch/server/index.js.map +7 -0
  473. package/bundles/ragents.workspace/prompt.hbs +7 -0
  474. package/bundles/ragents.workspace/ragents-bundle.json +148 -0
  475. package/bundles/ragents.workspace/server/index.js +1049 -0
  476. package/bundles/ragents.workspace/server/index.js.map +7 -0
  477. package/bundles/ragents.workspace/web/classes.json +1 -0
  478. package/bundles/ragents.workspace/web/index.js +39 -0
  479. package/bundles/ragents.workspace/web/index.js.map +7 -0
  480. package/package.json +4 -15
  481. package/packages/agent/dist/core/agent-session-runtime.d.ts +33 -0
  482. package/packages/agent/dist/core/agent-session-services.d.ts +35 -0
  483. package/packages/agent/dist/core/agent-session.d.ts +234 -0
  484. package/packages/agent/dist/core/agent-settings.d.ts +27 -0
  485. package/packages/agent/dist/core/auth-guidance.d.ts +4 -0
  486. package/packages/agent/dist/core/compaction/compaction.d.ts +116 -0
  487. package/packages/agent/dist/core/compaction/index.d.ts +6 -0
  488. package/packages/agent/dist/core/compaction/utils.d.ts +39 -0
  489. package/packages/agent/dist/core/defaults.d.ts +3 -0
  490. package/packages/agent/dist/core/extensions/index.d.ts +11 -0
  491. package/packages/agent/dist/core/extensions/loader.d.ts +12 -0
  492. package/packages/agent/dist/core/extensions/runner.d.ts +39 -0
  493. package/packages/agent/dist/core/extensions/types.d.ts +156 -0
  494. package/packages/agent/dist/core/extensions/wrapper.d.ts +12 -0
  495. package/packages/agent/dist/core/messages.d.ts +37 -0
  496. package/packages/agent/dist/core/model-runtime.d.ts +32 -0
  497. package/packages/agent/dist/core/provider-composer.d.ts +25 -0
  498. package/packages/agent/dist/core/resource-loader.d.ts +39 -0
  499. package/packages/agent/dist/core/sdk.d.ts +38 -0
  500. package/packages/agent/dist/core/session-manager.d.ts +189 -0
  501. package/packages/agent/dist/core/skills.d.ts +20 -0
  502. package/packages/agent/dist/core/source-info.d.ts +16 -0
  503. package/packages/agent/dist/core/system-prompt.d.ts +21 -0
  504. package/packages/agent/dist/core/tools/bash.d.ts +63 -0
  505. package/packages/agent/dist/core/tools/edit-diff.d.ts +98 -0
  506. package/packages/agent/dist/core/tools/edit.d.ts +41 -0
  507. package/packages/agent/dist/core/tools/file-mutation-queue.d.ts +6 -0
  508. package/packages/agent/dist/core/tools/index.d.ts +5 -0
  509. package/packages/agent/dist/core/tools/output-accumulator.d.ts +58 -0
  510. package/packages/agent/dist/core/tools/path-utils.d.ts +8 -0
  511. package/packages/agent/dist/core/tools/read.d.ts +33 -0
  512. package/packages/agent/dist/core/tools/truncate.d.ts +61 -0
  513. package/packages/agent/dist/core/tools/write.d.ts +23 -0
  514. package/packages/agent/dist/index.d.ts +13 -0
  515. package/packages/agent/dist/loop/agent-loop.d.ts +13 -0
  516. package/packages/agent/dist/loop/agent.d.ts +103 -0
  517. package/packages/agent/dist/loop/index.d.ts +5 -0
  518. package/packages/agent/dist/loop/types.d.ts +333 -0
  519. package/packages/agent/dist/loop/uuid.d.ts +2 -0
  520. package/packages/agent/dist/utils/child-process.d.ts +17 -0
  521. package/packages/agent/dist/utils/exif-orientation.d.ts +5 -0
  522. package/packages/agent/dist/utils/frontmatter.d.ts +8 -0
  523. package/packages/agent/dist/utils/image-convert.d.ts +2 -0
  524. package/packages/agent/dist/utils/image-process.d.ts +18 -0
  525. package/packages/agent/dist/utils/image-resize-core.d.ts +30 -0
  526. package/packages/agent/dist/utils/image-resize-worker.d.ts +2 -0
  527. package/packages/agent/dist/utils/image-resize.d.ts +16 -0
  528. package/packages/agent/dist/utils/mime.d.ts +3 -0
  529. package/packages/agent/dist/utils/paths.d.ts +15 -0
  530. package/packages/agent/dist/utils/photon.d.ts +21 -0
  531. package/packages/agent/dist/utils/shell.d.ts +17 -0
  532. package/packages/agent/dist/utils/sleep.d.ts +5 -0
  533. package/packages/agent/package.json +3 -32
  534. package/packages/agent/src/core/agent-session-runtime.ts +15 -469
  535. package/packages/agent/src/core/agent-session-services.ts +17 -167
  536. package/packages/agent/src/core/agent-session.ts +154 -2403
  537. package/packages/agent/src/core/agent-settings.ts +20 -0
  538. package/packages/agent/src/core/auth-guidance.ts +0 -4
  539. package/packages/agent/src/core/compaction/compaction.ts +4 -33
  540. package/packages/agent/src/core/compaction/index.ts +0 -1
  541. package/packages/agent/src/core/compaction/utils.ts +2 -2
  542. package/packages/agent/src/core/defaults.ts +1 -1
  543. package/packages/agent/src/core/extensions/index.ts +6 -117
  544. package/packages/agent/src/core/extensions/loader.ts +21 -605
  545. package/packages/agent/src/core/extensions/runner.ts +48 -969
  546. package/packages/agent/src/core/extensions/types.ts +35 -1298
  547. package/packages/agent/src/core/extensions/wrapper.ts +13 -34
  548. package/packages/agent/src/core/messages.ts +5 -109
  549. package/packages/agent/src/core/model-runtime.ts +109 -467
  550. package/packages/agent/src/core/provider-composer.ts +21 -451
  551. package/packages/agent/src/core/resource-loader.ts +18 -822
  552. package/packages/agent/src/core/sdk.ts +46 -281
  553. package/packages/agent/src/core/session-manager.ts +11 -891
  554. package/packages/agent/src/core/skills.ts +8 -440
  555. package/packages/agent/src/core/source-info.ts +0 -12
  556. package/packages/agent/src/core/system-prompt.ts +2 -41
  557. package/packages/agent/src/core/tools/bash.ts +20 -32
  558. package/packages/agent/src/core/tools/edit-diff.ts +0 -60
  559. package/packages/agent/src/core/tools/edit.ts +2 -18
  560. package/packages/agent/src/core/tools/index.ts +4 -130
  561. package/packages/agent/src/core/tools/output-accumulator.ts +33 -5
  562. package/packages/agent/src/core/tools/path-utils.ts +2 -49
  563. package/packages/agent/src/core/tools/read.ts +4 -12
  564. package/packages/agent/src/core/tools/truncate.ts +0 -15
  565. package/packages/agent/src/core/tools/write.ts +1 -8
  566. package/packages/agent/src/index.ts +11 -272
  567. package/packages/{agent-core/src → agent/src/loop}/agent-loop.ts +127 -273
  568. package/packages/{agent-core/src → agent/src/loop}/agent.ts +12 -164
  569. package/packages/{agent-core/src → agent/src/loop}/types.ts +6 -105
  570. package/packages/agent/src/utils/child-process.ts +0 -13
  571. package/packages/agent/src/utils/image-convert.ts +0 -25
  572. package/packages/agent/src/utils/paths.ts +1 -71
  573. package/packages/agent/src/utils/shell.ts +13 -156
  574. package/packages/ai/dist/api/ai-sdk-messages.d.ts +9 -0
  575. package/packages/ai/dist/api/ai-sdk-transport.d.ts +13 -0
  576. package/packages/ai/dist/api/ai-sdk.d.ts +13 -0
  577. package/packages/ai/dist/api/ai-sdk.lazy.d.ts +3 -0
  578. package/packages/ai/dist/api/lazy.d.ts +15 -0
  579. package/packages/ai/dist/api/simple-options.d.ts +4 -0
  580. package/packages/ai/dist/api/transform-messages.d.ts +8 -0
  581. package/packages/ai/dist/api-registry.d.ts +25 -0
  582. package/packages/ai/dist/auth/context.d.ts +4 -0
  583. package/packages/ai/dist/auth/helpers.d.ts +4 -0
  584. package/packages/ai/dist/auth/resolve.d.ts +19 -0
  585. package/packages/ai/dist/auth/types.d.ts +51 -0
  586. package/packages/ai/dist/env-api-keys.d.ts +8 -0
  587. package/packages/ai/dist/index.d.ts +19 -0
  588. package/packages/ai/dist/models.d.ts +71 -0
  589. package/packages/ai/dist/models.generated.d.ts +8021 -0
  590. package/packages/ai/dist/providers/all.d.ts +15 -0
  591. package/packages/ai/dist/providers/faux.d.ts +97 -0
  592. package/packages/ai/dist/providers/openrouter.d.ts +3 -0
  593. package/packages/ai/dist/providers/openrouter.models.d.ts +8019 -0
  594. package/packages/ai/dist/types.d.ts +541 -0
  595. package/packages/ai/dist/utils/diagnostics.d.ts +13 -0
  596. package/packages/ai/dist/utils/error-body.d.ts +25 -0
  597. package/packages/ai/dist/utils/estimate.d.ts +17 -0
  598. package/packages/ai/dist/utils/event-stream.d.ts +21 -0
  599. package/packages/ai/dist/utils/headers.d.ts +2 -0
  600. package/packages/ai/dist/utils/json-parse.d.ts +16 -0
  601. package/packages/ai/dist/utils/overflow.d.ts +54 -0
  602. package/packages/ai/dist/utils/provider-env.d.ts +7 -0
  603. package/packages/ai/dist/utils/retry.d.ts +12 -0
  604. package/packages/ai/dist/utils/sanitize-unicode.d.ts +22 -0
  605. package/packages/ai/dist/utils/typebox-helpers.d.ts +17 -0
  606. package/packages/ai/dist/utils/validation.d.ts +10 -0
  607. package/packages/ai/package.json +2 -6
  608. package/packages/ai/src/api/ai-sdk-transport.ts +2 -2
  609. package/packages/ai/src/api/simple-options.ts +0 -34
  610. package/packages/ai/src/api-registry.ts +1 -12
  611. package/packages/ai/src/auth/context.ts +1 -30
  612. package/packages/ai/src/auth/helpers.ts +3 -34
  613. package/packages/ai/src/auth/resolve.ts +10 -108
  614. package/packages/ai/src/auth/types.ts +9 -176
  615. package/packages/ai/src/index.ts +1 -13
  616. package/packages/ai/src/models.ts +41 -407
  617. package/packages/ai/src/providers/all.ts +3 -31
  618. package/packages/ai/src/providers/openrouter.models.ts +14 -0
  619. package/packages/ai/src/types.ts +0 -104
  620. package/packages/ai/src/utils/diagnostics.ts +0 -32
  621. package/packages/ai/src/utils/headers.ts +0 -11
  622. package/packages/ai/src/utils/overflow.ts +0 -7
  623. package/packages/ai/src/utils/validation.ts +0 -15
  624. package/packages/ragents/package.json +3 -6
  625. package/packages/ragents/src/access.ts +2 -1
  626. package/packages/ragents/src/agents/actor-input.ts +14 -18
  627. package/packages/ragents/src/agents/catalog.ts +3 -3
  628. package/packages/ragents/src/agents/plugins.ts +0 -4
  629. package/packages/ragents/src/agents/scheduler.ts +232 -78
  630. package/packages/ragents/src/agents/schemas.ts +1 -36
  631. package/packages/ragents/src/agents/tool-orientation.ts +1 -1
  632. package/packages/ragents/src/agents/tools.ts +72 -73
  633. package/packages/ragents/src/agents/toolset.ts +5 -5
  634. package/packages/ragents/src/agents/turn.ts +2 -14
  635. package/packages/ragents/src/agents/workspaces.ts +18 -0
  636. package/packages/ragents/src/domain/actor-reference.ts +22 -0
  637. package/packages/ragents/src/domain/driver.ts +0 -9
  638. package/packages/ragents/src/domain/event-semantics.ts +62 -74
  639. package/packages/ragents/src/domain/event-validation.ts +22 -21
  640. package/packages/ragents/src/domain/events.ts +19 -7
  641. package/packages/ragents/src/domain/json.ts +2 -0
  642. package/packages/ragents/src/domain/model.ts +40 -18
  643. package/packages/ragents/src/domain/projection.ts +43 -15
  644. package/packages/ragents/src/domain/schema-errors.ts +3 -3
  645. package/packages/ragents/src/drivers/agent-hooks.ts +40 -0
  646. package/packages/ragents/src/drivers/agent-runtime.ts +118 -186
  647. package/packages/ragents/src/drivers/agent.ts +5 -20
  648. package/packages/ragents/src/drivers/attachments.ts +4 -24
  649. package/packages/ragents/src/drivers/skill-preload.ts +4 -16
  650. package/packages/ragents/src/drivers/types.ts +20 -3
  651. package/packages/ragents/src/http/contracts.ts +16 -3
  652. package/packages/ragents/src/http/methods.ts +32 -33
  653. package/packages/ragents/src/index.ts +5 -15
  654. package/packages/ragents/src/plugin-host.ts +151 -105
  655. package/packages/ragents/src/plugin-types.ts +86 -23
  656. package/packages/ragents/src/rpc/peer.ts +6 -0
  657. package/packages/ragents/src/runtime/decisions/actions.ts +40 -37
  658. package/packages/ragents/src/runtime/decisions/actors.ts +90 -51
  659. package/packages/ragents/src/runtime/decisions/artifacts.ts +2 -2
  660. package/packages/ragents/src/runtime/decisions/inputs.ts +3 -3
  661. package/packages/ragents/src/runtime/decisions/subscriptions.ts +9 -7
  662. package/packages/ragents/src/runtime/decisions/turns.ts +37 -4
  663. package/packages/ragents/src/runtime/guards.ts +12 -21
  664. package/packages/ragents/src/runtime/journal-storage.ts +4 -2
  665. package/packages/ragents/src/runtime/journal.ts +1 -1
  666. package/packages/ragents/src/runtime/orchestration.ts +31 -14
  667. package/packages/ragents/src/runtime/serial-queue.ts +24 -0
  668. package/packages/ragents/src/runtime/stop.ts +19 -44
  669. package/packages/ragents/src/script/mediators.ts +4 -5
  670. package/packages/ragents/src/typescript/index.ts +2 -0
  671. package/packages/ragents/src/typescript/run-context.ts +10 -8
  672. package/packages/ragents/src/typescript/snippet.ts +7 -6
  673. package/packages/workspace-executor/package.json +2 -2
  674. package/packages/workspace-executor/src/bash-launch.ts +45 -0
  675. package/packages/workspace-executor/src/browser/contract.ts +71 -0
  676. package/packages/workspace-executor/src/browser/module.ts +74 -0
  677. package/packages/workspace-executor/src/browser/pages.ts +298 -0
  678. package/packages/workspace-executor/src/browser/playwright.ts +52 -0
  679. package/packages/workspace-executor/src/commands.ts +170 -0
  680. package/packages/workspace-executor/src/context.ts +34 -6
  681. package/packages/workspace-executor/src/errors.ts +12 -0
  682. package/packages/workspace-executor/src/executor.ts +62 -104
  683. package/packages/workspace-executor/src/files.ts +287 -0
  684. package/packages/workspace-executor/src/index.ts +82 -18
  685. package/packages/workspace-executor/src/language-server/adapters/roslyn.ts +1 -0
  686. package/packages/workspace-executor/src/language-server/contract.ts +14 -0
  687. package/packages/workspace-executor/src/language-server/host.ts +82 -26
  688. package/packages/workspace-executor/src/language-server/module.ts +107 -0
  689. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +90 -0
  690. package/packages/workspace-executor/src/managed-process.ts +1 -1
  691. package/packages/workspace-executor/src/module.ts +35 -0
  692. package/packages/workspace-executor/src/modules.ts +25 -0
  693. package/packages/workspace-executor/src/paths.ts +57 -5
  694. package/packages/workspace-executor/src/process-sandbox.ts +16 -0
  695. package/packages/workspace-executor/src/processes/module.ts +48 -0
  696. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/process-table.ts +80 -57
  697. package/packages/workspace-executor/src/processes/scanner.ts +106 -0
  698. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/snapshot.ts +23 -11
  699. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/terminator.ts +19 -20
  700. package/packages/workspace-executor/src/run-folders.ts +33 -0
  701. package/packages/workspace-executor/src/safe-environment.ts +14 -0
  702. package/packages/workspace-executor/src/sandbox-tools.ts +206 -36
  703. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  704. package/plugins/package.json +1 -1
  705. package/plugins/ragents.activity/ragents-plugin.json +3 -0
  706. package/plugins/ragents.activity/server/index.ts +2 -2
  707. package/plugins/ragents.activity/web/ActivityHeader.tsx +2 -2
  708. package/plugins/ragents.activity/web/activity.ts +1 -1
  709. package/plugins/ragents.activity/web/index.tsx +1 -1
  710. package/plugins/ragents.actor-programs/prompt.hbs +8 -7
  711. package/plugins/ragents.actor-programs/ragents-plugin.json +3 -0
  712. package/plugins/ragents.actor-programs/server/agent-tools.ts +3 -3
  713. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/capability-resolver.ts +1 -16
  714. package/plugins/ragents.actor-programs/server/controls-template.ts +5 -18
  715. package/plugins/ragents.actor-programs/server/controls-tool.ts +8 -11
  716. package/plugins/ragents.actor-programs/server/index.ts +10 -10
  717. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/limits.ts +4 -4
  718. package/plugins/ragents.actor-programs/server/methods.ts +2 -2
  719. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/operations.ts +2 -4
  720. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +65 -70
  721. package/plugins/ragents.actor-programs/server/prompts.ts +4 -4
  722. package/plugins/ragents.actor-programs/server/routes.ts +14 -8
  723. package/plugins/ragents.actor-programs/server/runtime.ts +132 -55
  724. package/plugins/ragents.actor-programs/server/templates.ts +35 -80
  725. package/plugins/ragents.actor-programs/server/test-report.ts +106 -0
  726. package/plugins/ragents.actor-programs/server/tool-contributor.ts +4 -4
  727. package/plugins/ragents.actor-programs/summary.hbs +1 -1
  728. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +15 -10
  729. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +47 -30
  730. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +15 -17
  731. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +3 -3
  732. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +3 -3
  733. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +12 -3
  734. package/plugins/ragents.actor-programs/web/api.ts +5 -5
  735. package/plugins/ragents.actor-programs/web/bridge.ts +2 -3
  736. package/plugins/ragents.actor-programs/web/chat-state.ts +9 -8
  737. package/plugins/ragents.actor-programs/web/index.tsx +7 -17
  738. package/plugins/ragents.actor-programs/web/program-state.ts +3 -3
  739. package/plugins/ragents.actor-programs/web/state-revision.ts +2 -2
  740. package/plugins/ragents.ask/ask-payload.ts +25 -0
  741. package/plugins/ragents.ask/contract.ts +2 -2
  742. package/plugins/ragents.ask/ragents-plugin.json +7 -0
  743. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  744. package/plugins/ragents.ask/server/ask-service.ts +43 -19
  745. package/plugins/ragents.ask/server/ask-tool.ts +2 -2
  746. package/plugins/ragents.ask/server/contract.ts +9 -1
  747. package/plugins/ragents.ask/server/index.ts +8 -10
  748. package/plugins/ragents.ask/server/tool-contributor.ts +3 -3
  749. package/plugins/ragents.ask/web/AskActionView.tsx +36 -0
  750. package/{apps/web/src/chat → plugins/ragents.ask/web}/QuestionCard.tsx +7 -5
  751. package/plugins/ragents.ask/web/QuestionSection.tsx +22 -21
  752. package/plugins/ragents.ask/web/api.ts +1 -1
  753. package/plugins/ragents.ask/web/index.tsx +11 -8
  754. package/plugins/ragents.browser/provision.ts +9 -8
  755. package/plugins/ragents.browser/ragents-plugin.json +6 -0
  756. package/plugins/ragents.browser/server/browser.ts +165 -286
  757. package/plugins/ragents.browser/server/contract.ts +8 -19
  758. package/plugins/ragents.browser/server/index.ts +8 -7
  759. package/plugins/ragents.browser/server/tools.ts +29 -37
  760. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +3 -1
  761. package/plugins/ragents.documents/contract.ts +4 -2
  762. package/plugins/ragents.documents/ragents-plugin.json +6 -0
  763. package/plugins/ragents.documents/server/config.ts +1 -1
  764. package/plugins/ragents.documents/server/document-write-tool.ts +2 -2
  765. package/plugins/ragents.documents/server/files-route.ts +2 -3
  766. package/plugins/ragents.documents/server/index.ts +10 -11
  767. package/plugins/ragents.documents/server/show-document-tool.ts +2 -2
  768. package/plugins/ragents.documents/server/store.ts +3 -3
  769. package/plugins/ragents.documents/server/tool-contributor.ts +3 -3
  770. package/plugins/ragents.documents/web/DocumentViewer.tsx +5 -6
  771. package/plugins/ragents.documents/web/api.ts +1 -1
  772. package/plugins/ragents.documents/web/index.tsx +4 -4
  773. package/plugins/ragents.lsp-fsharp/provision.ts +2 -2
  774. package/plugins/ragents.lsp-fsharp/ragents-plugin.json +3 -0
  775. package/plugins/ragents.lsp-fsharp/server/index.ts +3 -3
  776. package/plugins/ragents.lsp-fsharp/web/index.tsx +1 -1
  777. package/plugins/ragents.lsp-roslyn/provision.ts +2 -2
  778. package/plugins/ragents.lsp-roslyn/ragents-plugin.json +3 -0
  779. package/plugins/ragents.lsp-roslyn/server/index.ts +47 -8
  780. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +145 -0
  781. package/plugins/ragents.lsp-roslyn/web/index.tsx +1 -1
  782. package/plugins/ragents.lsp-typescript/ragents-plugin.json +3 -0
  783. package/plugins/ragents.lsp-typescript/server/index.ts +3 -3
  784. package/plugins/ragents.lsp-typescript/web/index.tsx +1 -1
  785. package/plugins/ragents.model-relay/ragents-plugin.json +3 -0
  786. package/plugins/ragents.model-relay/server/config.ts +5 -31
  787. package/plugins/ragents.model-relay/server/index.ts +5 -6
  788. package/plugins/ragents.model-relay/server/relay.ts +8 -9
  789. package/plugins/ragents.orchestration/contract.ts +13 -14
  790. package/plugins/ragents.orchestration/orchestration.hbs +4 -3
  791. package/plugins/ragents.orchestration/ragents-plugin.json +6 -0
  792. package/plugins/ragents.orchestration/server/index.ts +13 -16
  793. package/plugins/ragents.orchestration/server/run-stop-tool.ts +4 -4
  794. package/plugins/ragents.orchestration/server/{canvas-tool.ts → surface-tool.ts} +42 -43
  795. package/plugins/ragents.orchestration/surface.hbs +34 -0
  796. package/plugins/ragents.orchestration/tiled-layout.ts +16 -16
  797. package/plugins/ragents.orchestration/web/ActorChat.tsx +16 -14
  798. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +23 -26
  799. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +5 -6
  800. package/plugins/ragents.orchestration/web/ActorPopout.tsx +7 -5
  801. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +16 -16
  802. package/plugins/ragents.orchestration/web/{ActorCanvasControls.tsx → ActorSurfaceControls.tsx} +23 -28
  803. package/plugins/ragents.orchestration/web/ActorTile.tsx +2 -2
  804. package/plugins/ragents.orchestration/web/Center.tsx +47 -55
  805. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +4 -4
  806. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +7 -7
  807. package/plugins/ragents.orchestration/web/FlowInspector.tsx +24 -42
  808. package/plugins/ragents.orchestration/web/JournalStatus.tsx +8 -8
  809. package/plugins/ragents.orchestration/web/MaterialBody.tsx +5 -5
  810. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  811. package/plugins/ragents.orchestration/web/SurfaceStartup.tsx +8 -0
  812. package/plugins/ragents.orchestration/web/{CanvasTiles.tsx → SurfaceTiles.tsx} +18 -18
  813. package/plugins/ragents.orchestration/web/{TiledCanvas.tsx → TiledSurface.tsx} +22 -22
  814. package/plugins/ragents.orchestration/web/actor-header-settings.ts +2 -2
  815. package/plugins/ragents.orchestration/web/api.ts +4 -10
  816. package/plugins/ragents.orchestration/web/constants.ts +0 -1
  817. package/plugins/ragents.orchestration/web/executions.ts +3 -3
  818. package/plugins/ragents.orchestration/web/index.tsx +19 -124
  819. package/plugins/ragents.orchestration/web/program-slot.ts +14 -0
  820. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +95 -0
  821. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +109 -0
  822. package/plugins/ragents.orchestration/web/{column/RunColumn.tsx → run-panel/RunPanel.tsx} +211 -83
  823. package/plugins/ragents.orchestration/web/{column/ColumnSettings.tsx → run-panel/RunPanelSettings.tsx} +13 -13
  824. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +165 -0
  825. package/plugins/ragents.orchestration/web/{column/column-actors.ts → run-panel/run-panel-actors.ts} +14 -13
  826. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +47 -0
  827. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +30 -0
  828. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +71 -0
  829. package/plugins/ragents.orchestration/web/{column → run-panel}/sheet-status.ts +4 -4
  830. package/plugins/ragents.orchestration/web/{canvas-stage.ts → surface-entities.ts} +2 -2
  831. package/plugins/ragents.orchestration/web/{canvas-startup.ts → surface-startup.ts} +7 -10
  832. package/plugins/ragents.orchestration/web/surface-view-settings.ts +42 -0
  833. package/plugins/ragents.orchestration/web/tile-docking.ts +14 -14
  834. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +26 -26
  835. package/plugins/ragents.overseer/contract.ts +20 -14
  836. package/plugins/ragents.overseer/ragents-plugin.json +3 -0
  837. package/plugins/ragents.overseer/server/api.ts +34 -23
  838. package/plugins/ragents.overseer/server/coordinator-prompt.ts +3 -3
  839. package/plugins/ragents.overseer/server/coordinator.ts +19 -0
  840. package/plugins/ragents.overseer/server/index.ts +39 -27
  841. package/plugins/ragents.overseer/server/orientation.ts +4 -5
  842. package/plugins/ragents.overseer/server/quick-answer.ts +5 -4
  843. package/plugins/ragents.overseer/server/reset-method.ts +4 -3
  844. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  845. package/plugins/ragents.overseer/server/settings-method.ts +1 -1
  846. package/plugins/ragents.overseer/server/settings.ts +6 -6
  847. package/plugins/ragents.overseer/server/user-location.ts +20 -19
  848. package/plugins/ragents.overseer/web/ModelSettings.tsx +4 -4
  849. package/plugins/ragents.overseer/web/chat-display.ts +1 -1
  850. package/plugins/ragents.overseer/web/index.tsx +51 -26
  851. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  852. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  853. package/plugins/ragents.processes/contract.ts +5 -5
  854. package/plugins/ragents.processes/ragents-plugin.json +3 -0
  855. package/plugins/ragents.processes/server/index.ts +13 -19
  856. package/plugins/ragents.processes/server/methods.ts +18 -20
  857. package/plugins/ragents.processes/server/observer.ts +64 -104
  858. package/plugins/ragents.processes/server/run-processes.ts +24 -0
  859. package/plugins/ragents.processes/web/ProcessHeader.tsx +13 -16
  860. package/plugins/ragents.processes/web/index.tsx +2 -1
  861. package/plugins/ragents.processes/web/processes.ts +1 -1
  862. package/plugins/ragents.product/ragents-plugin.json +3 -0
  863. package/plugins/ragents.product/server/config.ts +12 -13
  864. package/plugins/ragents.product/server/index.ts +15 -16
  865. package/plugins/ragents.product/server/runtime.ts +2 -2
  866. package/plugins/ragents.product/web/index.tsx +3 -3
  867. package/plugins/ragents.profile-distribution/contract.ts +6 -9
  868. package/plugins/ragents.profile-distribution/ragents-plugin.json +3 -0
  869. package/plugins/ragents.profile-distribution/server/archive.ts +26 -51
  870. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  871. package/plugins/ragents.profile-distribution/server/index.ts +9 -16
  872. package/plugins/ragents.reference/examples.ts +1 -1
  873. package/plugins/ragents.reference/ragents-plugin.json +3 -0
  874. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +2 -2
  875. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +1 -1
  876. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +1 -1
  877. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +4 -4
  878. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +1 -1
  879. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +1 -1
  880. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  881. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +2 -2
  882. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +1 -1
  883. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +1 -1
  884. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/state.ts +2 -2
  885. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +11 -11
  886. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +15 -15
  887. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +3 -8
  888. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +1 -1
  889. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  890. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +2 -2
  891. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +6 -6
  892. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +3 -3
  893. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  894. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +1 -1
  895. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  896. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +1 -2
  897. package/plugins/ragents.reference/run-scripts/word-game/src/state.ts +6 -6
  898. package/plugins/ragents.reference/run-scripts/word-game/src/view.tsx +14 -14
  899. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +4 -5
  900. package/plugins/ragents.reference/server/index.ts +2 -2
  901. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +1 -1
  902. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +1 -1
  903. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +1 -1
  904. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +1 -1
  905. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +2 -2
  906. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +2 -2
  907. package/plugins/ragents.reference/walkthroughs.ts +19 -19
  908. package/plugins/ragents.reference/web/StartGuides.tsx +2 -2
  909. package/plugins/ragents.reference/web/index.tsx +1 -1
  910. package/plugins/ragents.todo/ragents-plugin.json +3 -0
  911. package/plugins/ragents.todo/server/index.ts +2 -2
  912. package/plugins/ragents.todo/server/todo-tool.ts +4 -5
  913. package/plugins/ragents.todo/server/tool-contributor.ts +2 -2
  914. package/plugins/ragents.todo/web/TodoSection.tsx +3 -3
  915. package/plugins/ragents.todo/web/index.ts +1 -1
  916. package/plugins/ragents.transcript/ragents-plugin.json +3 -0
  917. package/plugins/ragents.transcript/server/index.ts +4 -4
  918. package/plugins/ragents.transcript/server/transcript.ts +2 -3
  919. package/plugins/ragents.watch/ragents-plugin.json +6 -0
  920. package/plugins/ragents.watch/server/condition.ts +2 -2
  921. package/plugins/ragents.watch/server/contract.ts +1 -1
  922. package/plugins/ragents.watch/server/functions.ts +3 -3
  923. package/plugins/ragents.watch/server/index.ts +3 -3
  924. package/plugins/ragents.watch/server/observation.ts +6 -6
  925. package/plugins/ragents.watch/server/service.ts +5 -5
  926. package/plugins/ragents.workspace/client/workspace-client.ts +129 -58
  927. package/plugins/ragents.workspace/contract.ts +98 -35
  928. package/plugins/ragents.workspace/prompt.hbs +1 -8
  929. package/plugins/ragents.workspace/ragents-plugin.json +3 -0
  930. package/plugins/ragents.workspace/server/binding.ts +122 -39
  931. package/plugins/ragents.workspace/server/browse-route.ts +96 -103
  932. package/plugins/ragents.workspace/server/clients.ts +236 -68
  933. package/plugins/ragents.workspace/server/config.ts +30 -0
  934. package/plugins/ragents.workspace/server/index.ts +61 -26
  935. package/plugins/ragents.workspace/server/runtime.ts +271 -46
  936. package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/shell-platform.ts +3 -5
  937. package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/workspace-tool-naming.ts +7 -1
  938. package/plugins/ragents.workspace/web/FileBrowser.tsx +11 -8
  939. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +115 -61
  940. package/plugins/ragents.workspace/web/api.ts +1 -1
  941. package/plugins/ragents.workspace/web/index.tsx +1 -1
  942. package/ragents.config.core.ts +2 -7
  943. package/ragents.config.showcase.ts +2 -5
  944. package/scripts/agent/agent-cli.ts +265 -107
  945. package/scripts/agent/journal.ts +3 -1
  946. package/scripts/agent/turn-control.ts +19 -0
  947. package/scripts/package/build-package.ts +68 -13
  948. package/scripts/package/ragents.mjs +4 -2
  949. package/scripts/plugin/build-builtin-plugins.ts +52 -0
  950. package/scripts/plugin/plugin-cli.ts +99 -0
  951. package/scripts/provision/run-provision.ts +20 -18
  952. package/scripts/remote/connect.ts +75 -53
  953. package/scripts/remote/start.ts +2 -3
  954. package/scripts/workspace-client/run-workspace-client.ts +15 -9
  955. package/apps/server/agent-home/settings.json +0 -3
  956. package/apps/server/src/chat-attachments.ts +0 -52
  957. package/apps/server/src/chat-events.ts +0 -185
  958. package/apps/server/src/plugin-support/asset-path.ts +0 -4
  959. package/apps/server/src/profile/plugin-list.ts +0 -19
  960. package/apps/server/src/web-build.ts +0 -82
  961. package/apps/web/column.html +0 -12
  962. package/apps/web/index.html +0 -12
  963. package/apps/web/src/StartSurface.tsx +0 -161
  964. package/apps/web/src/chat/ChatInputToolbar.tsx +0 -488
  965. package/apps/web/src/chat/ChatMessages.tsx +0 -666
  966. package/apps/web/src/chat/ChatPanel.tsx +0 -61
  967. package/apps/web/src/chat/DetailModeSwitch.tsx +0 -58
  968. package/apps/web/src/chat/Markdown.tsx +0 -104
  969. package/apps/web/src/chat/StepPopover.tsx +0 -82
  970. package/apps/web/src/chat/WorkingScenes.tsx +0 -235
  971. package/apps/web/src/chat/attachments.ts +0 -53
  972. package/apps/web/src/chat/chat-scroll.ts +0 -41
  973. package/apps/web/src/chat/texts.ts +0 -61
  974. package/apps/web/src/chat/types.ts +0 -26
  975. package/apps/web/src/column/ColumnApp.tsx +0 -234
  976. package/apps/web/src/column/column-location.ts +0 -30
  977. package/apps/web/src/column/host-contract.ts +0 -93
  978. package/apps/web/src/panel/OverviewPage.tsx +0 -215
  979. package/apps/web/src/panel/SettingsPage.tsx +0 -98
  980. package/apps/web/src/panel/target-state.ts +0 -78
  981. package/apps/web/src/plugin-discovery.ts +0 -5
  982. package/apps/web/src/virtual-plugins.d.ts +0 -3
  983. package/apps/web/vite.config.ts +0 -140
  984. package/packages/agent/src/config.ts +0 -161
  985. package/packages/agent/src/core/auth-storage.ts +0 -271
  986. package/packages/agent/src/core/bash-executor.ts +0 -156
  987. package/packages/agent/src/core/compaction/branch-summarization.ts +0 -372
  988. package/packages/agent/src/core/diagnostics.ts +0 -15
  989. package/packages/agent/src/core/event-bus.ts +0 -33
  990. package/packages/agent/src/core/exec.ts +0 -107
  991. package/packages/agent/src/core/experimental.ts +0 -3
  992. package/packages/agent/src/core/footer-data-provider.ts +0 -388
  993. package/packages/agent/src/core/http-dispatcher.ts +0 -106
  994. package/packages/agent/src/core/index.ts +0 -78
  995. package/packages/agent/src/core/model-config.ts +0 -287
  996. package/packages/agent/src/core/model-registry.ts +0 -126
  997. package/packages/agent/src/core/model-resolver.ts +0 -675
  998. package/packages/agent/src/core/output-guard.ts +0 -108
  999. package/packages/agent/src/core/package-manager.ts +0 -2441
  1000. package/packages/agent/src/core/prompt-templates.ts +0 -284
  1001. package/packages/agent/src/core/resolve-config-value.ts +0 -287
  1002. package/packages/agent/src/core/runtime-credentials.ts +0 -48
  1003. package/packages/agent/src/core/session-cwd.ts +0 -59
  1004. package/packages/agent/src/core/settings-manager.ts +0 -1212
  1005. package/packages/agent/src/core/slash-commands.ts +0 -41
  1006. package/packages/agent/src/core/timings.ts +0 -50
  1007. package/packages/agent/src/core/tools/tool-definition-wrapper.ts +0 -45
  1008. package/packages/agent/src/core/trust-manager.ts +0 -244
  1009. package/packages/agent/src/utils/ansi.ts +0 -60
  1010. package/packages/agent/src/utils/fs-watch.ts +0 -30
  1011. package/packages/agent/src/utils/git.ts +0 -226
  1012. package/packages/agent/src/utils/json.ts +0 -6
  1013. package/packages/agent/src/utils/tools-manager.ts +0 -63
  1014. package/packages/agent-core/package.json +0 -32
  1015. package/packages/ai/src/api/openrouter-images.lazy.ts +0 -10
  1016. package/packages/ai/src/api/openrouter-images.ts +0 -98
  1017. package/packages/ai/src/auth/credential-store.ts +0 -51
  1018. package/packages/ai/src/compat/extension-oauth-types.ts +0 -45
  1019. package/packages/ai/src/image-models.generated.ts +0 -533
  1020. package/packages/ai/src/images-models.ts +0 -274
  1021. package/packages/ai/src/models-store.ts +0 -38
  1022. package/packages/ai/src/oauth.ts +0 -10
  1023. package/packages/ai/src/providers/openrouter-images.ts +0 -14
  1024. package/packages/ai/src/session-resources.ts +0 -24
  1025. package/packages/ai/src/utils/abort-signals.ts +0 -41
  1026. package/packages/ai/src/utils/deferred-tools.ts +0 -39
  1027. package/packages/ai/src/utils/hash.ts +0 -13
  1028. package/packages/ai/src/utils/node-http-proxy.ts +0 -112
  1029. package/plugins/ragents.actor-programs/server/client-runtime.ts +0 -16
  1030. package/plugins/ragents.ask/web/constants.ts +0 -1
  1031. package/plugins/ragents.lsp-roslyn/web/api.ts +0 -10
  1032. package/plugins/ragents.orchestration/web/CanvasStartup.tsx +0 -14
  1033. package/plugins/ragents.orchestration/web/canvas-view-settings.ts +0 -42
  1034. package/plugins/ragents.orchestration/web/column/AddresseeControl.tsx +0 -116
  1035. package/plugins/ragents.orchestration/web/column/column-settings.ts +0 -47
  1036. package/plugins/ragents.orchestration/web/column/column-state.ts +0 -68
  1037. package/plugins/ragents.orchestration/web/contract.ts +0 -25
  1038. package/plugins/ragents.product/model-settings-contract.ts +0 -10
  1039. package/plugins/ragents.profile-distribution/server/web.ts +0 -24
  1040. /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/authoring-contracts.ts +0 -0
  1041. /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/runtime-libraries.ts +0 -0
  1042. /package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/prompt-reader.ts +0 -0
  1043. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-contracts.d.ts +0 -0
  1044. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram-contracts.d.ts +0 -0
  1045. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram.css +0 -0
  1046. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/form-contracts.d.ts +0 -0
  1047. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/frame-layout.ts +0 -0
  1048. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/table-contracts.d.ts +0 -0
  1049. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/viewer-contracts.d.ts +0 -0
  1050. /package/{plugins/ragents.orchestration/canvas.hbs → bundles/ragents.orchestration/surface.hbs} +0 -0
  1051. /package/packages/{agent-core/src → agent/src/loop}/index.ts +0 -0
  1052. /package/packages/{agent-core/src → agent/src/loop}/uuid.ts +0 -0
@@ -1,422 +1,56 @@
1
1
  /**
2
- * Extension runner - executes extensions and manages their lifecycle.
2
+ * Extension runner - executes extension handlers against one agent session.
3
3
  */
4
4
 
5
- import type { AgentMessage } from "@aicontainer/agent-core";
6
- import type { ImageContent, Model, ProviderHeaders, UserAttachment } from "@aicontainer/ai";
7
- import type { ResourceDiagnostic } from "../diagnostics.ts";
8
- import type { ModelRegistry } from "../model-registry.ts";
5
+ import type { AgentMessage } from "../../loop/index.ts";
6
+ import type { Model, UserAttachment } from "@ragents/ai";
9
7
  import type { SessionManager } from "../session-manager.ts";
10
8
  import type { BuildSystemPromptOptions } from "../system-prompt.ts";
11
9
  import type {
12
10
  BeforeAgentStartEvent,
13
11
  BeforeAgentStartEventResult,
14
- BeforeProviderHeadersEvent,
15
- BeforeProviderRequestEvent,
16
- CompactOptions,
17
12
  ContextEvent,
18
13
  ContextEventResult,
19
- ContextUsage,
20
14
  Extension,
21
15
  ExtensionActions,
22
- ExtensionCommandContext,
23
- ExtensionCommandContextActions,
24
16
  ExtensionContext,
25
- ExtensionContextActions,
26
17
  ExtensionError,
27
- ExtensionEvent,
28
- ExtensionFlag,
29
- ExtensionMode,
30
18
  ExtensionRuntime,
31
- ExtensionUIContext,
32
- InputEvent,
33
- InputEventResult,
34
- InputSource,
35
- LoadExtensionsResult,
36
- MessageEndEvent,
37
- MessageEndEventResult,
38
- ProjectTrustContext,
39
- ProjectTrustEvent,
40
- ProjectTrustEventResult,
41
- ProviderConfig,
42
- RegisteredCommand,
43
19
  RegisteredTool,
44
- ReplacedSessionContext,
45
- ResolvedCommand,
46
- ResourcesDiscoverEvent,
47
- ResourcesDiscoverResult,
48
- SessionBeforeCompactResult,
49
- SessionBeforeForkResult,
50
- SessionBeforeSwitchResult,
51
- SessionBeforeTreeResult,
52
- SessionShutdownEvent,
53
- ToolCallEvent,
54
- ToolCallEventResult,
55
20
  ToolResultEvent,
56
21
  ToolResultEventResult,
57
- UserBashEvent,
58
- UserBashEventResult,
59
22
  } from "./types.ts";
60
23
 
61
- /** Combined result from all before_agent_start handlers */
62
- interface BeforeAgentStartCombinedResult {
63
- messages?: NonNullable<BeforeAgentStartEventResult["message"]>[];
64
- systemPrompt?: string;
65
- }
66
-
67
- /**
68
- * Events handled by the generic emit() method.
69
- * Events with dedicated emitXxx() methods are excluded for stronger type safety.
70
- */
71
- type RunnerEmitEvent = Exclude<
72
- ExtensionEvent,
73
- | ToolCallEvent
74
- | ProjectTrustEvent
75
- | ToolResultEvent
76
- | UserBashEvent
77
- | ContextEvent
78
- | BeforeProviderRequestEvent
79
- | BeforeProviderHeadersEvent
80
- | BeforeAgentStartEvent
81
- | MessageEndEvent
82
- | ResourcesDiscoverEvent
83
- | InputEvent
84
- >;
85
-
86
- type SessionBeforeEvent = Extract<
87
- RunnerEmitEvent,
88
- { type: "session_before_switch" | "session_before_fork" | "session_before_compact" | "session_before_tree" }
89
- >;
90
-
91
- type SessionBeforeEventResult =
92
- | SessionBeforeSwitchResult
93
- | SessionBeforeForkResult
94
- | SessionBeforeCompactResult
95
- | SessionBeforeTreeResult;
96
-
97
- type RunnerEmitResult<TEvent extends RunnerEmitEvent> = TEvent extends { type: "session_before_switch" }
98
- ? SessionBeforeSwitchResult | undefined
99
- : TEvent extends { type: "session_before_fork" }
100
- ? SessionBeforeForkResult | undefined
101
- : TEvent extends { type: "session_before_compact" }
102
- ? SessionBeforeCompactResult | undefined
103
- : TEvent extends { type: "session_before_tree" }
104
- ? SessionBeforeTreeResult | undefined
105
- : undefined;
106
-
107
24
  export type ExtensionErrorListener = (error: ExtensionError) => void;
108
25
 
109
- export type NewSessionHandler = (options?: {
110
- parentSession?: string;
111
- setup?: (sessionManager: SessionManager) => Promise<void>;
112
- withSession?: (ctx: ReplacedSessionContext) => Promise<void>;
113
- }) => Promise<{ cancelled: boolean }>;
114
-
115
- export type ForkHandler = (
116
- entryId: string,
117
- options?: { position?: "before" | "at"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },
118
- ) => Promise<{ cancelled: boolean }>;
119
-
120
- export type NavigateTreeHandler = (
121
- targetId: string,
122
- options?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },
123
- ) => Promise<{ cancelled: boolean }>;
124
-
125
- export type SwitchSessionHandler = (
126
- sessionPath: string,
127
- options?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },
128
- ) => Promise<{ cancelled: boolean }>;
129
-
130
- export type ReloadHandler = () => Promise<void>;
131
-
132
- export type ShutdownHandler = () => void;
133
-
134
- export interface SessionShutdownEventOperation {
135
- emitted: boolean;
136
- bounded: Promise<void>;
137
- settled: Promise<void>;
26
+ /** What the runner reads from its session when it builds a handler context. */
27
+ export interface ExtensionContextSource {
28
+ getModel: () => Model<any> | undefined;
29
+ getSignal: () => AbortSignal | undefined;
138
30
  }
139
31
 
140
- export function beginSessionShutdownEvent(
141
- extensionRunner: ExtensionRunner,
142
- event: SessionShutdownEvent,
143
- options?: { signal?: AbortSignal; timeoutMs?: number },
144
- ): SessionShutdownEventOperation {
145
- if (!extensionRunner.hasHandlers("session_shutdown")) {
146
- return {
147
- emitted: false,
148
- bounded: Promise.resolve(),
149
- settled: Promise.resolve(),
150
- };
151
- }
152
-
153
- const timeoutMs = options?.timeoutMs ?? 5_000;
154
- if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
155
- throw new RangeError("Session shutdown timeout must be a positive finite number.");
156
- }
157
- const signal = options?.signal;
158
- const abortReason = () => signal?.reason instanceof Error
159
- ? signal.reason
160
- : new Error("Session shutdown was aborted.");
161
- if (signal?.aborted) {
162
- throw abortReason();
163
- }
164
-
165
- const settled = extensionRunner.emit(event).then(() => undefined);
166
- void settled.catch(() => undefined);
167
- const bounded = (async () => {
168
- let timer: ReturnType<typeof setTimeout> | undefined;
169
- let abort: (() => void) | undefined;
170
- const limit = new Promise<void>((resolve, reject) => {
171
- timer = setTimeout(resolve, timeoutMs);
172
- if (signal) {
173
- abort = () => reject(abortReason());
174
- signal.addEventListener("abort", abort, { once: true });
175
- }
176
- });
177
-
178
- try {
179
- await Promise.race([settled, limit]);
180
- } finally {
181
- if (timer) {
182
- clearTimeout(timer);
183
- }
184
- if (abort && signal) {
185
- signal.removeEventListener("abort", abort);
186
- }
187
- }
188
- })();
189
-
190
- return { emitted: true, bounded, settled };
191
- }
192
-
193
- /**
194
- * Helper function to emit session_shutdown event to extensions.
195
- * Returns true if the event was emitted, false if there were no handlers.
196
- */
197
- export async function emitSessionShutdownEvent(
198
- extensionRunner: ExtensionRunner,
199
- event: SessionShutdownEvent,
200
- options?: { signal?: AbortSignal; timeoutMs?: number },
201
- ): Promise<boolean> {
202
- const operation = beginSessionShutdownEvent(extensionRunner, event, options);
203
- await operation.bounded;
204
-
205
- return operation.emitted;
206
- }
207
-
208
- export async function emitProjectTrustEvent(
209
- extensionsResult: LoadExtensionsResult,
210
- event: ProjectTrustEvent,
211
- ctx: ProjectTrustContext,
212
- ): Promise<{ result?: ProjectTrustEventResult; errors: ExtensionError[] }> {
213
- const errors: ExtensionError[] = [];
214
- for (const ext of extensionsResult.extensions) {
215
- // A single extension may register multiple handlers for the same event.
216
- // The first project_trust handler that returns yes/no wins; undecided falls through.
217
- const handlers = ext.handlers.get("project_trust");
218
- if (!handlers || handlers.length === 0) continue;
219
-
220
- for (const handler of handlers) {
221
- try {
222
- const handlerResult = (await handler(event, ctx)) as ProjectTrustEventResult;
223
- if (handlerResult.trusted === "undecided") {
224
- continue;
225
- }
226
- return { result: handlerResult, errors };
227
- } catch (error) {
228
- errors.push({
229
- extensionPath: ext.path,
230
- event: event.type,
231
- error: error instanceof Error ? error.message : String(error),
232
- stack: error instanceof Error ? error.stack : undefined,
233
- });
234
- }
235
- }
236
- }
237
- return { errors };
238
- }
239
-
240
- const noOpUIContext: ExtensionUIContext = {
241
- select: async () => undefined,
242
- confirm: async () => false,
243
- input: async () => undefined,
244
- notify: () => {},
245
- onTerminalInput: () => () => {},
246
- setStatus: () => {},
247
- setWorkingMessage: () => {},
248
- setWorkingVisible: () => {},
249
- setWorkingIndicator: () => {},
250
- setHiddenThinkingLabel: () => {},
251
- setWidget: () => {},
252
-
253
- setTitle: () => {},
254
-
255
- pasteToEditor: () => {},
256
- setEditorText: () => {},
257
- getEditorText: () => "",
258
- editor: async () => undefined,
259
-
260
-
261
-
262
-
263
- getToolsExpanded: () => false,
264
- setToolsExpanded: () => {},
265
- };
32
+ export const STALE_EXTENSION_MESSAGE = "This extension is stale: its agent session was disposed.";
266
33
 
267
34
  export class ExtensionRunner {
268
- private extensions: Extension[];
269
- private runtime: ExtensionRuntime;
270
- private uiContext: ExtensionUIContext;
271
- private mode: ExtensionMode = "print";
272
- private cwd: string;
273
- private sessionManager: SessionManager;
274
- private modelRegistry: ModelRegistry;
275
- private errorListeners: Set<ExtensionErrorListener> = new Set();
276
- private getModel: () => Model<any> | undefined = () => undefined;
277
- private isIdleFn: () => boolean = () => true;
278
- private isProjectTrustedFn: () => boolean = () => true;
279
- private getSignalFn: () => AbortSignal | undefined = () => undefined;
280
- private waitForIdleFn: () => Promise<void> = async () => {};
281
- private abortFn: () => void = () => {};
282
- private hasPendingMessagesFn: () => boolean = () => false;
283
- private getContextUsageFn: () => ContextUsage | undefined = () => undefined;
284
- private compactFn: (options?: CompactOptions) => void = () => {};
285
- private getSystemPromptFn: () => string = () => "";
286
- private getSystemPromptOptionsFn: () => BuildSystemPromptOptions = () => ({ cwd: this.cwd });
287
- private newSessionHandler: NewSessionHandler = async () => ({ cancelled: false });
288
- private forkHandler: ForkHandler = async () => ({ cancelled: false });
289
- private navigateTreeHandler: NavigateTreeHandler = async () => ({ cancelled: false });
290
- private switchSessionHandler: SwitchSessionHandler = async () => ({ cancelled: false });
291
- private reloadHandler: ReloadHandler = async () => {};
292
- private shutdownHandler: ShutdownHandler = () => {};
293
- private shortcutDiagnostics: ResourceDiagnostic[] = [];
294
- private commandDiagnostics: ResourceDiagnostic[] = [];
35
+ private readonly extensions: Extension[];
36
+ private readonly runtime: ExtensionRuntime;
37
+ private readonly sessionManager: SessionManager;
38
+ private readonly errorListeners: Set<ExtensionErrorListener> = new Set();
39
+ private contextSource: ExtensionContextSource = { getModel: () => undefined, getSignal: () => undefined };
295
40
  private staleMessage: string | undefined;
296
41
 
297
- constructor(
298
- extensions: Extension[],
299
- runtime: ExtensionRuntime,
300
- cwd: string,
301
- sessionManager: SessionManager,
302
- modelRegistry: ModelRegistry,
303
- ) {
42
+ constructor(extensions: Extension[], runtime: ExtensionRuntime, sessionManager: SessionManager) {
304
43
  this.extensions = extensions;
305
44
  this.runtime = runtime;
306
- this.uiContext = noOpUIContext;
307
- this.cwd = cwd;
308
45
  this.sessionManager = sessionManager;
309
- this.modelRegistry = modelRegistry;
310
46
  }
311
47
 
312
- bindCore(
313
- actions: ExtensionActions,
314
- contextActions: ExtensionContextActions,
315
- providerActions?: {
316
- registerProvider?: (name: string, config: ProviderConfig) => void;
317
- unregisterProvider?: (name: string) => void;
318
- },
319
- ): void {
320
- // Copy actions into the shared runtime (all extension APIs reference this)
321
- this.runtime.sendMessage = actions.sendMessage;
322
- this.runtime.sendUserMessage = actions.sendUserMessage;
48
+ bindCore(actions: ExtensionActions, contextSource: ExtensionContextSource): void {
323
49
  this.runtime.appendEntry = actions.appendEntry;
324
- this.runtime.setSessionName = actions.setSessionName;
325
- this.runtime.getSessionName = actions.getSessionName;
326
- this.runtime.setLabel = actions.setLabel;
327
- this.runtime.getActiveTools = actions.getActiveTools;
328
50
  this.runtime.getAllTools = actions.getAllTools;
329
51
  this.runtime.setActiveTools = actions.setActiveTools;
330
52
  this.runtime.refreshTools = actions.refreshTools;
331
- this.runtime.getCommands = actions.getCommands;
332
- this.runtime.setModel = actions.setModel;
333
- this.runtime.getThinkingLevel = actions.getThinkingLevel;
334
- this.runtime.setThinkingLevel = actions.setThinkingLevel;
335
-
336
- // Context actions (required)
337
- this.getModel = contextActions.getModel;
338
- this.isIdleFn = contextActions.isIdle;
339
- this.isProjectTrustedFn = contextActions.isProjectTrusted;
340
- this.getSignalFn = contextActions.getSignal;
341
- this.abortFn = contextActions.abort;
342
- this.hasPendingMessagesFn = contextActions.hasPendingMessages;
343
- this.shutdownHandler = contextActions.shutdown;
344
- this.getContextUsageFn = contextActions.getContextUsage;
345
- this.compactFn = contextActions.compact;
346
- this.getSystemPromptFn = contextActions.getSystemPrompt;
347
- this.getSystemPromptOptionsFn = contextActions.getSystemPromptOptions ?? (() => ({ cwd: this.cwd }));
348
-
349
- // Flush provider registrations queued during extension loading
350
- for (const { name, config, extensionPath } of this.runtime.pendingProviderRegistrations) {
351
- try {
352
- if (providerActions?.registerProvider) {
353
- providerActions.registerProvider(name, config);
354
- } else {
355
- this.modelRegistry.registerProvider(name, config);
356
- }
357
- } catch (err) {
358
- this.emitError({
359
- extensionPath,
360
- event: "register_provider",
361
- error: err instanceof Error ? err.message : String(err),
362
- stack: err instanceof Error ? err.stack : undefined,
363
- });
364
- }
365
- }
366
- this.runtime.pendingProviderRegistrations = [];
367
-
368
- // From this point on, provider registration/unregistration takes effect immediately
369
- // without requiring a /reload.
370
- this.runtime.registerProvider = (name, config) => {
371
- if (providerActions?.registerProvider) {
372
- providerActions.registerProvider(name, config);
373
- return;
374
- }
375
- this.modelRegistry.registerProvider(name, config);
376
- };
377
- this.runtime.unregisterProvider = (name) => {
378
- if (providerActions?.unregisterProvider) {
379
- providerActions.unregisterProvider(name);
380
- return;
381
- }
382
- this.modelRegistry.unregisterProvider(name);
383
- };
384
- }
385
-
386
- bindCommandContext(actions?: ExtensionCommandContextActions): void {
387
- if (actions) {
388
- this.waitForIdleFn = actions.waitForIdle;
389
- this.newSessionHandler = actions.newSession;
390
- this.forkHandler = actions.fork;
391
- this.navigateTreeHandler = actions.navigateTree;
392
- this.switchSessionHandler = actions.switchSession;
393
- this.reloadHandler = actions.reload;
394
- return;
395
- }
396
-
397
- this.waitForIdleFn = async () => {};
398
- this.newSessionHandler = async () => ({ cancelled: false });
399
- this.forkHandler = async () => ({ cancelled: false });
400
- this.navigateTreeHandler = async () => ({ cancelled: false });
401
- this.switchSessionHandler = async () => ({ cancelled: false });
402
- this.reloadHandler = async () => {};
403
- }
404
-
405
- setUIContext(uiContext?: ExtensionUIContext, mode: ExtensionMode = "print"): void {
406
- this.uiContext = uiContext ?? noOpUIContext;
407
- this.mode = mode;
408
- }
409
-
410
- getUIContext(): ExtensionUIContext {
411
- return this.uiContext;
412
- }
413
-
414
- hasUI(): boolean {
415
- return this.uiContext !== noOpUIContext;
416
- }
417
-
418
- getExtensionPaths(): string[] {
419
- return this.extensions.map((e) => e.path);
53
+ this.contextSource = contextSource;
420
54
  }
421
55
 
422
56
  /** Get all registered tools from all extensions (first registration per name wins). */
@@ -432,46 +66,7 @@ export class ExtensionRunner {
432
66
  return Array.from(toolsByName.values());
433
67
  }
434
68
 
435
- /** Get a tool definition by name. Returns undefined if not found. */
436
- getToolDefinition(toolName: string): RegisteredTool["definition"] | undefined {
437
- for (const ext of this.extensions) {
438
- const tool = ext.tools.get(toolName);
439
- if (tool) {
440
- return tool.definition;
441
- }
442
- }
443
- return undefined;
444
- }
445
-
446
- getFlags(): Map<string, ExtensionFlag> {
447
- const allFlags = new Map<string, ExtensionFlag>();
448
- for (const ext of this.extensions) {
449
- for (const [name, flag] of ext.flags) {
450
- if (!allFlags.has(name)) {
451
- allFlags.set(name, flag);
452
- }
453
- }
454
- }
455
- return allFlags;
456
- }
457
-
458
- setFlagValue(name: string, value: boolean | string): void {
459
- this.runtime.flagValues.set(name, value);
460
- }
461
-
462
- getFlagValues(): Map<string, boolean | string> {
463
- return new Map(this.runtime.flagValues);
464
- }
465
-
466
-
467
-
468
- getShortcutDiagnostics(): ResourceDiagnostic[] {
469
- return this.shortcutDiagnostics;
470
- }
471
-
472
- invalidate(
473
- message = "This extension ctx is stale after session replacement or reload. Do not use a captured extension or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().",
474
- ): void {
69
+ invalidate(message = STALE_EXTENSION_MESSAGE): void {
475
70
  if (!this.staleMessage) {
476
71
  this.staleMessage = message;
477
72
  this.runtime.invalidate(message);
@@ -489,301 +84,48 @@ export class ExtensionRunner {
489
84
  return () => this.errorListeners.delete(listener);
490
85
  }
491
86
 
492
- emitError(error: ExtensionError): void {
87
+ private emitError(ext: Extension, event: string, err: unknown): void {
88
+ const error: ExtensionError = {
89
+ extensionPath: ext.path,
90
+ event,
91
+ error: err instanceof Error ? err.message : String(err),
92
+ stack: err instanceof Error ? err.stack : undefined,
93
+ };
493
94
  for (const listener of this.errorListeners) {
494
95
  listener(error);
495
96
  }
496
97
  }
497
98
 
498
99
  hasHandlers(eventType: string): boolean {
499
- for (const ext of this.extensions) {
500
- const handlers = ext.handlers.get(eventType);
501
- if (handlers && handlers.length > 0) {
502
- return true;
503
- }
504
- }
505
- return false;
506
- }
507
-
508
-
509
-
510
-
511
-
512
- private resolveRegisteredCommands(): ResolvedCommand[] {
513
- const commands: RegisteredCommand[] = [];
514
- const counts = new Map<string, number>();
515
-
516
- for (const ext of this.extensions) {
517
- for (const command of ext.commands.values()) {
518
- commands.push(command);
519
- counts.set(command.name, (counts.get(command.name) ?? 0) + 1);
520
- }
521
- }
522
-
523
- const seen = new Map<string, number>();
524
- const takenInvocationNames = new Set<string>();
525
-
526
- return commands.map((command) => {
527
- const occurrence = (seen.get(command.name) ?? 0) + 1;
528
- seen.set(command.name, occurrence);
529
-
530
- let invocationName = (counts.get(command.name) ?? 0) > 1 ? `${command.name}:${occurrence}` : command.name;
531
-
532
- if (takenInvocationNames.has(invocationName)) {
533
- let suffix = occurrence;
534
- do {
535
- suffix++;
536
- invocationName = `${command.name}:${suffix}`;
537
- } while (takenInvocationNames.has(invocationName));
538
- }
539
-
540
- takenInvocationNames.add(invocationName);
541
- return {
542
- ...command,
543
- invocationName,
544
- };
545
- });
546
- }
547
-
548
- getModelRegistry(): ModelRegistry {
549
- return this.modelRegistry;
550
- }
551
-
552
- getRegisteredCommands(): ResolvedCommand[] {
553
- this.commandDiagnostics = [];
554
- return this.resolveRegisteredCommands();
555
- }
556
-
557
- getCommandDiagnostics(): ResourceDiagnostic[] {
558
- return this.commandDiagnostics;
559
- }
560
-
561
- getCommand(name: string): ResolvedCommand | undefined {
562
- return this.resolveRegisteredCommands().find((command) => command.invocationName === name);
563
- }
564
-
565
- /**
566
- * Request a graceful shutdown. Called by extension tools and event handlers.
567
- * The actual shutdown behavior is provided by the mode via bindExtensions().
568
- */
569
- shutdown(): void {
570
- this.shutdownHandler();
100
+ return this.extensions.some((ext) => (ext.handlers.get(eventType)?.length ?? 0) > 0);
571
101
  }
572
102
 
573
- getActiveTools(): string[] {
574
- this.assertActive();
575
- return this.runtime.getActiveTools();
576
- }
577
-
578
- /**
579
- * Create an ExtensionContext for use in event handlers and tool execution.
580
- * Context values are resolved at call time, so changes via bindCore/bindUI are reflected.
581
- */
103
+ /** Context values are resolved at call time, so a disposed session is detected on every access. */
582
104
  createContext(): ExtensionContext {
583
105
  const runner = this;
584
- const getModel = this.getModel;
585
106
  return {
586
- get ui() {
587
- runner.assertActive();
588
- return runner.uiContext;
589
- },
590
- get mode() {
591
- runner.assertActive();
592
- return runner.mode;
593
- },
594
- get hasUI() {
595
- runner.assertActive();
596
- return runner.hasUI();
597
- },
598
- get cwd() {
599
- runner.assertActive();
600
- return runner.cwd;
601
- },
602
107
  get sessionManager() {
603
108
  runner.assertActive();
604
109
  return runner.sessionManager;
605
110
  },
606
- get modelRegistry() {
607
- runner.assertActive();
608
- return runner.modelRegistry;
609
- },
610
111
  get model() {
611
112
  runner.assertActive();
612
- return getModel();
613
- },
614
- isIdle: () => {
615
- runner.assertActive();
616
- return runner.isIdleFn();
617
- },
618
- isProjectTrusted: () => {
619
- runner.assertActive();
620
- return runner.isProjectTrustedFn();
113
+ return runner.contextSource.getModel();
621
114
  },
622
115
  get signal() {
623
116
  runner.assertActive();
624
- return runner.getSignalFn();
625
- },
626
- abort: () => {
627
- runner.assertActive();
628
- runner.abortFn();
629
- },
630
- hasPendingMessages: () => {
631
- runner.assertActive();
632
- return runner.hasPendingMessagesFn();
633
- },
634
- shutdown: () => {
635
- runner.assertActive();
636
- runner.shutdownHandler();
637
- },
638
- getContextUsage: () => {
639
- runner.assertActive();
640
- return runner.getContextUsageFn();
641
- },
642
- compact: (options) => {
643
- runner.assertActive();
644
- runner.compactFn(options);
645
- },
646
- getSystemPrompt: () => {
647
- runner.assertActive();
648
- return runner.getSystemPromptFn();
117
+ return runner.contextSource.getSignal();
649
118
  },
650
119
  };
651
120
  }
652
121
 
653
- createCommandContext(): ExtensionCommandContext {
654
- // Use property descriptors instead of object spread so the guarded getters from
655
- // createContext() stay lazy. A spread would eagerly read them once and freeze the
656
- // old values into the returned object, bypassing stale-instance checks.
657
- const context = Object.defineProperties(
658
- {},
659
- Object.getOwnPropertyDescriptors(this.createContext()),
660
- ) as ExtensionCommandContext;
661
- context.getSystemPromptOptions = () => {
662
- this.assertActive();
663
- return this.getSystemPromptOptionsFn();
664
- };
665
- context.waitForIdle = () => {
666
- this.assertActive();
667
- return this.waitForIdleFn();
668
- };
669
- context.newSession = (options) => {
670
- this.assertActive();
671
- return this.newSessionHandler(options);
672
- };
673
- context.fork = (entryId, options) => {
674
- this.assertActive();
675
- return this.forkHandler(entryId, options);
676
- };
677
- context.navigateTree = (targetId, options) => {
678
- this.assertActive();
679
- return this.navigateTreeHandler(targetId, options);
680
- };
681
- context.switchSession = (sessionPath, options) => {
682
- this.assertActive();
683
- return this.switchSessionHandler(sessionPath, options);
684
- };
685
- context.reload = () => {
686
- this.assertActive();
687
- return this.reloadHandler();
688
- };
689
- return context;
690
- }
691
-
692
- private isSessionBeforeEvent(event: RunnerEmitEvent): event is SessionBeforeEvent {
693
- return (
694
- event.type === "session_before_switch" ||
695
- event.type === "session_before_fork" ||
696
- event.type === "session_before_compact" ||
697
- event.type === "session_before_tree"
698
- );
699
- }
700
-
701
- async emit<TEvent extends RunnerEmitEvent>(event: TEvent): Promise<RunnerEmitResult<TEvent>> {
702
- const ctx = this.createContext();
703
- let result: SessionBeforeEventResult | undefined;
704
-
705
- for (const ext of this.extensions) {
706
- const handlers = ext.handlers.get(event.type);
707
- if (!handlers || handlers.length === 0) continue;
708
-
709
- for (const handler of handlers) {
710
- try {
711
- const handlerResult = await handler(event, ctx);
712
-
713
- if (this.isSessionBeforeEvent(event) && handlerResult) {
714
- result = handlerResult as SessionBeforeEventResult;
715
- if (result.cancel) {
716
- return result as RunnerEmitResult<TEvent>;
717
- }
718
- }
719
- } catch (err) {
720
- const message = err instanceof Error ? err.message : String(err);
721
- const stack = err instanceof Error ? err.stack : undefined;
722
- this.emitError({
723
- extensionPath: ext.path,
724
- event: event.type,
725
- error: message,
726
- stack,
727
- });
728
- }
729
- }
730
- }
731
-
732
- return result as RunnerEmitResult<TEvent>;
733
- }
734
-
735
- async emitMessageEnd(event: MessageEndEvent): Promise<AgentMessage | undefined> {
736
- const ctx = this.createContext();
737
- let currentMessage = event.message;
738
- let modified = false;
739
-
740
- for (const ext of this.extensions) {
741
- const handlers = ext.handlers.get("message_end");
742
- if (!handlers || handlers.length === 0) continue;
743
-
744
- for (const handler of handlers) {
745
- try {
746
- const currentEvent: MessageEndEvent = { ...event, message: currentMessage };
747
- const handlerResult = (await handler(currentEvent, ctx)) as MessageEndEventResult | undefined;
748
- if (!handlerResult?.message) continue;
749
-
750
- if (handlerResult.message.role !== currentMessage.role) {
751
- this.emitError({
752
- extensionPath: ext.path,
753
- event: "message_end",
754
- error: "message_end handlers must return a message with the same role",
755
- });
756
- continue;
757
- }
758
-
759
- currentMessage = handlerResult.message;
760
- modified = true;
761
- } catch (err) {
762
- const message = err instanceof Error ? err.message : String(err);
763
- const stack = err instanceof Error ? err.stack : undefined;
764
- this.emitError({
765
- extensionPath: ext.path,
766
- event: "message_end",
767
- error: message,
768
- stack,
769
- });
770
- }
771
- }
772
- }
773
-
774
- return modified ? currentMessage : undefined;
775
- }
776
-
777
122
  async emitToolResult(event: ToolResultEvent): Promise<ToolResultEventResult | undefined> {
778
123
  const ctx = this.createContext();
779
124
  const currentEvent: ToolResultEvent = { ...event };
780
125
  let modified = false;
781
126
 
782
127
  for (const ext of this.extensions) {
783
- const handlers = ext.handlers.get("tool_result");
784
- if (!handlers || handlers.length === 0) continue;
785
-
786
- for (const handler of handlers) {
128
+ for (const handler of ext.handlers.get("tool_result") ?? []) {
787
129
  try {
788
130
  const handlerResult = (await handler(currentEvent, ctx)) as ToolResultEventResult | undefined;
789
131
  if (!handlerResult) continue;
@@ -801,79 +143,14 @@ export class ExtensionRunner {
801
143
  modified = true;
802
144
  }
803
145
  } catch (err) {
804
- const message = err instanceof Error ? err.message : String(err);
805
- const stack = err instanceof Error ? err.stack : undefined;
806
- this.emitError({
807
- extensionPath: ext.path,
808
- event: "tool_result",
809
- error: message,
810
- stack,
811
- });
812
- }
813
- }
814
- }
815
-
816
- if (!modified) {
817
- return undefined;
818
- }
819
-
820
- return {
821
- content: currentEvent.content,
822
- details: currentEvent.details,
823
- isError: currentEvent.isError,
824
- };
825
- }
826
-
827
- async emitToolCall(event: ToolCallEvent): Promise<ToolCallEventResult | undefined> {
828
- const ctx = this.createContext();
829
- let result: ToolCallEventResult | undefined;
830
-
831
- for (const ext of this.extensions) {
832
- const handlers = ext.handlers.get("tool_call");
833
- if (!handlers || handlers.length === 0) continue;
834
-
835
- for (const handler of handlers) {
836
- const handlerResult = await handler(event, ctx);
837
-
838
- if (handlerResult) {
839
- result = handlerResult as ToolCallEventResult;
840
- if (result.block) {
841
- return result;
842
- }
146
+ this.emitError(ext, "tool_result", err);
843
147
  }
844
148
  }
845
149
  }
846
150
 
847
- return result;
848
- }
849
-
850
- async emitUserBash(event: UserBashEvent): Promise<UserBashEventResult | undefined> {
851
- const ctx = this.createContext();
852
-
853
- for (const ext of this.extensions) {
854
- const handlers = ext.handlers.get("user_bash");
855
- if (!handlers || handlers.length === 0) continue;
856
-
857
- for (const handler of handlers) {
858
- try {
859
- const handlerResult = await handler(event, ctx);
860
- if (handlerResult) {
861
- return handlerResult as UserBashEventResult;
862
- }
863
- } catch (err) {
864
- const message = err instanceof Error ? err.message : String(err);
865
- const stack = err instanceof Error ? err.stack : undefined;
866
- this.emitError({
867
- extensionPath: ext.path,
868
- event: "user_bash",
869
- error: message,
870
- stack,
871
- });
872
- }
873
- }
874
- }
875
-
876
- return undefined;
151
+ return modified
152
+ ? { content: currentEvent.content, details: currentEvent.details, isError: currentEvent.isError }
153
+ : undefined;
877
154
  }
878
155
 
879
156
  async emitContext(messages: AgentMessage[]): Promise<AgentMessage[]> {
@@ -881,26 +158,15 @@ export class ExtensionRunner {
881
158
  let currentMessages = structuredClone(messages);
882
159
 
883
160
  for (const ext of this.extensions) {
884
- const handlers = ext.handlers.get("context");
885
- if (!handlers || handlers.length === 0) continue;
886
-
887
- for (const handler of handlers) {
161
+ for (const handler of ext.handlers.get("context") ?? []) {
888
162
  try {
889
163
  const event: ContextEvent = { type: "context", messages: currentMessages };
890
- const handlerResult = await handler(event, ctx);
891
-
892
- if (handlerResult && (handlerResult as ContextEventResult).messages) {
893
- currentMessages = (handlerResult as ContextEventResult).messages!;
164
+ const handlerResult = (await handler(event, ctx)) as ContextEventResult | undefined;
165
+ if (handlerResult?.messages) {
166
+ currentMessages = handlerResult.messages;
894
167
  }
895
168
  } catch (err) {
896
- const message = err instanceof Error ? err.message : String(err);
897
- const stack = err instanceof Error ? err.stack : undefined;
898
- this.emitError({
899
- extensionPath: ext.path,
900
- event: "context",
901
- error: message,
902
- stack,
903
- });
169
+ this.emitError(ext, "context", err);
904
170
  }
905
171
  }
906
172
  }
@@ -908,225 +174,38 @@ export class ExtensionRunner {
908
174
  return currentMessages;
909
175
  }
910
176
 
911
- async emitBeforeProviderRequest(payload: unknown): Promise<unknown> {
912
- const ctx = this.createContext();
913
- let currentPayload = payload;
914
-
915
- for (const ext of this.extensions) {
916
- const handlers = ext.handlers.get("before_provider_request");
917
- if (!handlers || handlers.length === 0) continue;
918
-
919
- for (const handler of handlers) {
920
- try {
921
- const event: BeforeProviderRequestEvent = {
922
- type: "before_provider_request",
923
- payload: currentPayload,
924
- };
925
- const handlerResult = await handler(event, ctx);
926
- if (handlerResult !== undefined) {
927
- currentPayload = handlerResult;
928
- }
929
- } catch (err) {
930
- const message = err instanceof Error ? err.message : String(err);
931
- const stack = err instanceof Error ? err.stack : undefined;
932
- this.emitError({
933
- extensionPath: ext.path,
934
- event: "before_provider_request",
935
- error: message,
936
- stack,
937
- });
938
- }
939
- }
940
- }
941
-
942
- return currentPayload;
943
- }
944
-
945
- async emitBeforeProviderHeaders(headers: ProviderHeaders): Promise<ProviderHeaders> {
946
- const ctx = this.createContext();
947
-
948
- for (const ext of this.extensions) {
949
- const handlers = ext.handlers.get("before_provider_headers");
950
- if (!handlers || handlers.length === 0) continue;
951
-
952
- for (const handler of handlers) {
953
- try {
954
- // Handlers mutate `headers` in place; the return value is ignored.
955
- const event: BeforeProviderHeadersEvent = {
956
- type: "before_provider_headers",
957
- headers,
958
- };
959
- await handler(event, ctx);
960
- } catch (err) {
961
- const message = err instanceof Error ? err.message : String(err);
962
- const stack = err instanceof Error ? err.stack : undefined;
963
- this.emitError({
964
- extensionPath: ext.path,
965
- event: "before_provider_headers",
966
- error: message,
967
- stack,
968
- });
969
- }
970
- }
971
- }
972
-
973
- return headers;
974
- }
975
-
177
+ /** Chains the system prompt through all before_agent_start handlers; undefined when none changed it. */
976
178
  async emitBeforeAgentStart(
977
179
  prompt: string,
978
- images: ImageContent[] | undefined,
979
180
  systemPrompt: string,
980
181
  systemPromptOptions: BuildSystemPromptOptions,
981
182
  attachments?: UserAttachment[],
982
- ): Promise<BeforeAgentStartCombinedResult | undefined> {
183
+ ): Promise<string | undefined> {
184
+ const ctx = this.createContext();
983
185
  let currentSystemPrompt = systemPrompt;
984
- const ctx = Object.defineProperties(
985
- {},
986
- Object.getOwnPropertyDescriptors(this.createContext()),
987
- ) as ExtensionContext;
988
- ctx.getSystemPrompt = () => {
989
- this.assertActive();
990
- return currentSystemPrompt;
991
- };
992
- const messages: NonNullable<BeforeAgentStartEventResult["message"]>[] = [];
993
186
  let systemPromptModified = false;
994
187
 
995
188
  for (const ext of this.extensions) {
996
- const handlers = ext.handlers.get("before_agent_start");
997
- if (!handlers || handlers.length === 0) continue;
998
-
999
- for (const handler of handlers) {
189
+ for (const handler of ext.handlers.get("before_agent_start") ?? []) {
1000
190
  try {
1001
191
  const event: BeforeAgentStartEvent = {
1002
192
  type: "before_agent_start",
1003
193
  prompt,
1004
- images,
1005
194
  attachments,
1006
195
  systemPrompt: currentSystemPrompt,
1007
196
  systemPromptOptions,
1008
197
  };
1009
- const handlerResult = await handler(event, ctx);
1010
-
1011
- if (handlerResult) {
1012
- const result = handlerResult as BeforeAgentStartEventResult;
1013
- if (result.message) {
1014
- messages.push(result.message);
1015
- }
1016
- if (result.systemPrompt !== undefined) {
1017
- currentSystemPrompt = result.systemPrompt;
1018
- systemPromptModified = true;
1019
- }
1020
- }
1021
- } catch (err) {
1022
- const message = err instanceof Error ? err.message : String(err);
1023
- const stack = err instanceof Error ? err.stack : undefined;
1024
- this.emitError({
1025
- extensionPath: ext.path,
1026
- event: "before_agent_start",
1027
- error: message,
1028
- stack,
1029
- });
1030
- }
1031
- }
1032
- }
1033
-
1034
- if (messages.length > 0 || systemPromptModified) {
1035
- return {
1036
- messages: messages.length > 0 ? messages : undefined,
1037
- systemPrompt: systemPromptModified ? currentSystemPrompt : undefined,
1038
- };
1039
- }
1040
-
1041
- return undefined;
1042
- }
1043
-
1044
- async emitResourcesDiscover(
1045
- cwd: string,
1046
- reason: ResourcesDiscoverEvent["reason"],
1047
- ): Promise<{
1048
- skillPaths: Array<{ path: string; extensionPath: string }>;
1049
- promptPaths: Array<{ path: string; extensionPath: string }>;
1050
- }> {
1051
- const ctx = this.createContext();
1052
- const skillPaths: Array<{ path: string; extensionPath: string }> = [];
1053
- const promptPaths: Array<{ path: string; extensionPath: string }> = [];
1054
-
1055
- for (const ext of this.extensions) {
1056
- const handlers = ext.handlers.get("resources_discover");
1057
- if (!handlers || handlers.length === 0) continue;
1058
-
1059
- for (const handler of handlers) {
1060
- try {
1061
- const event: ResourcesDiscoverEvent = { type: "resources_discover", cwd, reason };
1062
- const handlerResult = await handler(event, ctx);
1063
- const result = handlerResult as ResourcesDiscoverResult | undefined;
1064
-
1065
- if (result?.skillPaths?.length) {
1066
- skillPaths.push(...result.skillPaths.map((path) => ({ path, extensionPath: ext.path })));
1067
- }
1068
- if (result?.promptPaths?.length) {
1069
- promptPaths.push(...result.promptPaths.map((path) => ({ path, extensionPath: ext.path })));
198
+ const handlerResult = (await handler(event, ctx)) as BeforeAgentStartEventResult | undefined;
199
+ if (handlerResult?.systemPrompt !== undefined) {
200
+ currentSystemPrompt = handlerResult.systemPrompt;
201
+ systemPromptModified = true;
1070
202
  }
1071
203
  } catch (err) {
1072
- const message = err instanceof Error ? err.message : String(err);
1073
- const stack = err instanceof Error ? err.stack : undefined;
1074
- this.emitError({
1075
- extensionPath: ext.path,
1076
- event: "resources_discover",
1077
- error: message,
1078
- stack,
1079
- });
204
+ this.emitError(ext, "before_agent_start", err);
1080
205
  }
1081
206
  }
1082
207
  }
1083
208
 
1084
- return { skillPaths, promptPaths };
1085
- }
1086
-
1087
- /** Emit input event. Transforms chain, "handled" short-circuits. */
1088
- async emitInput(
1089
- text: string,
1090
- images: ImageContent[] | undefined,
1091
- source: InputSource,
1092
- streamingBehavior?: "steer" | "followUp",
1093
- attachments?: UserAttachment[],
1094
- ): Promise<InputEventResult> {
1095
- const ctx = this.createContext();
1096
- let currentText = text;
1097
- let currentImages = images;
1098
- let currentAttachments = attachments;
1099
-
1100
- for (const ext of this.extensions) {
1101
- for (const handler of ext.handlers.get("input") ?? []) {
1102
- try {
1103
- const event: InputEvent = {
1104
- type: "input",
1105
- text: currentText,
1106
- images: currentImages,
1107
- attachments: currentAttachments,
1108
- source,
1109
- streamingBehavior,
1110
- };
1111
- const result = (await handler(event, ctx)) as InputEventResult | undefined;
1112
- if (result?.action === "handled") return result;
1113
- if (result?.action === "transform") {
1114
- currentText = result.text;
1115
- currentImages = result.images ?? currentImages;
1116
- currentAttachments = result.attachments ?? currentAttachments;
1117
- }
1118
- } catch (err) {
1119
- this.emitError({
1120
- extensionPath: ext.path,
1121
- event: "input",
1122
- error: err instanceof Error ? err.message : String(err),
1123
- stack: err instanceof Error ? err.stack : undefined,
1124
- });
1125
- }
1126
- }
1127
- }
1128
- return currentText !== text || currentImages !== images || currentAttachments !== attachments
1129
- ? { action: "transform", text: currentText, images: currentImages, attachments: currentAttachments }
1130
- : { action: "continue" };
209
+ return systemPromptModified ? currentSystemPrompt : undefined;
1131
210
  }
1132
211
  }