@dxos/plugin-assistant 0.10.0 → 0.11.1

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 (611) hide show
  1. package/PLUGIN.mdl +3 -28
  2. package/dist/lib/AssistantPlugin.mjs +2 -0
  3. package/dist/lib/AssistantPlugin.node.mjs +55 -0
  4. package/dist/lib/AssistantPlugin.node.mjs.map +1 -0
  5. package/dist/lib/AssistantPlugin.workerd.mjs +43 -0
  6. package/dist/lib/AssistantPlugin.workerd.mjs.map +1 -0
  7. package/dist/lib/capabilities.mjs +24 -0
  8. package/dist/lib/capabilities.mjs.map +1 -0
  9. package/dist/lib/chunk-AgentArticle.mjs +52 -0
  10. package/dist/lib/chunk-AgentArticle.mjs.map +1 -0
  11. package/dist/lib/chunk-AgentProperties.mjs +35 -0
  12. package/dist/lib/chunk-AgentProperties.mjs.map +1 -0
  13. package/dist/lib/chunk-AssistantPlugin.mjs +88 -0
  14. package/dist/lib/chunk-AssistantPlugin.mjs.map +1 -0
  15. package/dist/lib/chunk-AssistantSettings.mjs +285 -0
  16. package/dist/lib/chunk-AssistantSettings.mjs.map +1 -0
  17. package/dist/lib/chunk-ChatArticle.mjs +121 -0
  18. package/dist/lib/chunk-ChatArticle.mjs.map +1 -0
  19. package/dist/lib/chunk-ChatCompanion.mjs +116 -0
  20. package/dist/lib/chunk-ChatCompanion.mjs.map +1 -0
  21. package/dist/lib/chunk-ChatDialog.mjs +73 -0
  22. package/dist/lib/chunk-ChatDialog.mjs.map +1 -0
  23. package/dist/lib/chunk-IntegrationPrompt.mjs +73 -0
  24. package/dist/lib/chunk-IntegrationPrompt.mjs.map +1 -0
  25. package/dist/lib/chunk-SpaceHomePrompt.mjs +104 -0
  26. package/dist/lib/chunk-SpaceHomePrompt.mjs.map +1 -0
  27. package/dist/lib/chunk-SpaceHomeSuggestions.mjs +60 -0
  28. package/dist/lib/chunk-SpaceHomeSuggestions.mjs.map +1 -0
  29. package/dist/lib/chunk-TracePanel.mjs +127 -0
  30. package/dist/lib/chunk-TracePanel.mjs.map +1 -0
  31. package/dist/lib/chunk-TracePanel2.mjs +7 -0
  32. package/dist/lib/chunk-TracePanel2.mjs.map +1 -0
  33. package/dist/lib/chunk-TriggerStatus.mjs +72 -0
  34. package/dist/lib/chunk-TriggerStatus.mjs.map +1 -0
  35. package/dist/lib/chunk-agent-hydrator.mjs +22 -0
  36. package/dist/lib/chunk-agent-hydrator.mjs.map +1 -0
  37. package/dist/lib/chunk-agent-service.mjs +21 -0
  38. package/dist/lib/chunk-agent-service.mjs.map +1 -0
  39. package/dist/lib/{neutral/ai-context-LIKJYMIN.mjs → chunk-ai-context.mjs} +8 -12
  40. package/dist/lib/chunk-ai-context.mjs.map +1 -0
  41. package/dist/lib/chunk-ai-service.mjs +27 -0
  42. package/dist/lib/chunk-ai-service.mjs.map +1 -0
  43. package/dist/lib/chunk-app-graph-builder.mjs +179 -0
  44. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  45. package/dist/lib/chunk-automation-templates.mjs +99 -0
  46. package/dist/lib/chunk-automation-templates.mjs.map +1 -0
  47. package/dist/lib/chunk-companion-chat-provisioner.mjs +123 -0
  48. package/dist/lib/chunk-companion-chat-provisioner.mjs.map +1 -0
  49. package/dist/lib/chunk-connector.mjs +60 -0
  50. package/dist/lib/chunk-connector.mjs.map +1 -0
  51. package/dist/lib/chunk-constants.mjs +9 -0
  52. package/dist/lib/chunk-constants.mjs.map +1 -0
  53. package/dist/lib/chunk-context.mjs +7 -0
  54. package/dist/lib/chunk-context.mjs.map +1 -0
  55. package/dist/lib/chunk-create-chat.mjs +53 -0
  56. package/dist/lib/chunk-create-chat.mjs.map +1 -0
  57. package/dist/lib/chunk-create-object.mjs +70 -0
  58. package/dist/lib/chunk-create-object.mjs.map +1 -0
  59. package/dist/lib/chunk-edge-model-resolver.mjs +64 -0
  60. package/dist/lib/chunk-edge-model-resolver.mjs.map +1 -0
  61. package/dist/lib/chunk-ensure-companion-chat.mjs +49 -0
  62. package/dist/lib/chunk-ensure-companion-chat.mjs.map +1 -0
  63. package/dist/lib/chunk-extensions.mjs +78 -0
  64. package/dist/lib/chunk-extensions.mjs.map +1 -0
  65. package/dist/lib/chunk-fork-chat.mjs +83 -0
  66. package/dist/lib/chunk-fork-chat.mjs.map +1 -0
  67. package/dist/lib/chunk-generate-home-suggestions.mjs +71 -0
  68. package/dist/lib/chunk-generate-home-suggestions.mjs.map +1 -0
  69. package/dist/lib/chunk-local-model-resolver.mjs +25 -0
  70. package/dist/lib/chunk-local-model-resolver.mjs.map +1 -0
  71. package/dist/lib/chunk-markdown-extension.mjs +27 -0
  72. package/dist/lib/chunk-markdown-extension.mjs.map +1 -0
  73. package/dist/lib/{neutral/chunk-L7AR4VTA.mjs → chunk-meta.mjs} +20 -25
  74. package/dist/lib/chunk-meta.mjs.map +1 -0
  75. package/dist/lib/chunk-operation-handler.mjs +13 -0
  76. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  77. package/dist/lib/chunk-paths.mjs +8 -0
  78. package/dist/lib/chunk-paths.mjs.map +1 -0
  79. package/dist/lib/chunk-processor.mjs +432 -0
  80. package/dist/lib/chunk-processor.mjs.map +1 -0
  81. package/dist/lib/chunk-react-surface.mjs +177 -0
  82. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  83. package/dist/lib/chunk-run-prompt-in-new-chat.mjs +96 -0
  84. package/dist/lib/chunk-run-prompt-in-new-chat.mjs.map +1 -0
  85. package/dist/lib/chunk-set-current-chat.mjs +43 -0
  86. package/dist/lib/chunk-set-current-chat.mjs.map +1 -0
  87. package/dist/lib/chunk-settings.mjs +23 -0
  88. package/dist/lib/chunk-settings.mjs.map +1 -0
  89. package/dist/lib/chunk-skill-definition.mjs +42 -0
  90. package/dist/lib/chunk-skill-definition.mjs.map +1 -0
  91. package/dist/lib/chunk-skills.mjs +19 -0
  92. package/dist/lib/chunk-skills.mjs.map +1 -0
  93. package/dist/lib/chunk-state.mjs +32 -0
  94. package/dist/lib/chunk-state.mjs.map +1 -0
  95. package/dist/lib/chunk-toggle-trace-panel-debug.mjs +18 -0
  96. package/dist/lib/chunk-toggle-trace-panel-debug.mjs.map +1 -0
  97. package/dist/lib/chunk-toolkit.mjs +12 -0
  98. package/dist/lib/chunk-toolkit.mjs.map +1 -0
  99. package/dist/lib/chunk-types.mjs +332 -0
  100. package/dist/lib/chunk-types.mjs.map +1 -0
  101. package/dist/lib/chunk-update-chat-name.mjs +63 -0
  102. package/dist/lib/chunk-update-chat-name.mjs.map +1 -0
  103. package/dist/lib/components.mjs +2616 -0
  104. package/dist/lib/components.mjs.map +1 -0
  105. package/dist/lib/containers.mjs +17 -0
  106. package/dist/lib/containers.mjs.map +1 -0
  107. package/dist/lib/execution-graph.mjs +961 -0
  108. package/dist/lib/execution-graph.mjs.map +1 -0
  109. package/dist/lib/extensions.mjs +2 -0
  110. package/dist/lib/hooks.mjs +674 -0
  111. package/dist/lib/hooks.mjs.map +1 -0
  112. package/dist/lib/index.mjs +5 -0
  113. package/dist/lib/meta.mjs +2 -0
  114. package/dist/lib/operations.mjs +7 -0
  115. package/dist/lib/operations.mjs.map +1 -0
  116. package/dist/lib/plugin.mjs +9 -0
  117. package/dist/lib/plugin.mjs.map +1 -0
  118. package/dist/lib/plugin.workerd.mjs +2 -0
  119. package/dist/lib/skills.mjs +2 -0
  120. package/dist/lib/testing.mjs +2 -0
  121. package/dist/lib/translations.mjs +207 -0
  122. package/dist/lib/translations.mjs.map +1 -0
  123. package/dist/lib/types.mjs +2 -0
  124. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  125. package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -1
  126. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
  127. package/dist/types/src/capabilities/AssistantSurfaces.d.ts +22 -0
  128. package/dist/types/src/capabilities/AssistantSurfaces.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
  130. package/dist/types/src/capabilities/agent-service.d.ts +1 -1
  131. package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
  132. package/dist/types/src/capabilities/ai-context.d.ts +1 -1
  133. package/dist/types/src/capabilities/ai-service.d.ts +1 -1
  134. package/dist/types/src/capabilities/app-graph-builder.d.ts +12 -1
  135. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  136. package/dist/types/src/capabilities/automation-templates.d.ts +1 -1
  137. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
  138. package/dist/types/src/capabilities/connector.d.ts +1 -1
  139. package/dist/types/src/capabilities/create-object.d.ts +1 -1
  140. package/dist/types/src/capabilities/edge-model-resolver.d.ts +1 -1
  141. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  142. package/dist/types/src/capabilities/index.d.ts +0 -2
  143. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  144. package/dist/types/src/capabilities/local-model-resolver.d.ts +1 -1
  145. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  146. package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
  147. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  148. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  149. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/settings.d.ts +1 -1
  151. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -1
  152. package/dist/types/src/capabilities/standalone-chats-query.test.d.ts +2 -0
  153. package/dist/types/src/capabilities/standalone-chats-query.test.d.ts.map +1 -0
  154. package/dist/types/src/capabilities/state.d.ts +1 -1
  155. package/dist/types/src/capabilities/toolkit.d.ts +1 -1
  156. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts +4 -1
  157. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts.map +1 -1
  158. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/Chat/Chat.d.ts +21 -8
  160. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  161. package/dist/types/src/components/Chat/{Chat.stories.d.ts → Error.stories.d.ts} +1 -1
  162. package/dist/types/src/components/Chat/Error.stories.d.ts.map +1 -0
  163. package/dist/types/src/components/Chat/context.d.ts +8 -0
  164. package/dist/types/src/components/Chat/context.d.ts.map +1 -1
  165. package/dist/types/src/components/Chat/events.d.ts +5 -0
  166. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  167. package/dist/types/src/components/Chat/thread.d.ts +42 -0
  168. package/dist/types/src/components/Chat/thread.d.ts.map +1 -0
  169. package/dist/types/src/components/Chat/thread.test.d.ts +2 -0
  170. package/dist/types/src/components/Chat/thread.test.d.ts.map +1 -0
  171. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  172. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -3
  174. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
  175. package/dist/types/src/components/ChatPrompt/index.d.ts +0 -1
  176. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  177. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatThread/ChatThread.d.ts +8 -3
  179. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  180. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +30 -2
  181. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
  183. package/dist/types/src/components/ChatThread/index.d.ts +1 -0
  184. package/dist/types/src/components/ChatThread/index.d.ts.map +1 -1
  185. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  186. package/dist/types/src/components/ChatThread/sync/index.d.ts +3 -0
  187. package/dist/types/src/components/ChatThread/sync/index.d.ts.map +1 -0
  188. package/dist/types/src/components/ChatThread/{sync.d.ts → sync/sync.d.ts} +46 -2
  189. package/dist/types/src/components/ChatThread/sync/sync.d.ts.map +1 -0
  190. package/dist/types/src/components/ChatThread/sync/sync.test.d.ts.map +1 -0
  191. package/dist/types/src/components/ChatThread/sync/tool-widget-state.d.ts.map +1 -0
  192. package/dist/types/src/components/ChatThread/sync/tool-widget-state.test.d.ts.map +1 -0
  193. package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts +15 -0
  194. package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts.map +1 -0
  195. package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts +21 -0
  196. package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts.map +1 -0
  197. package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts +2 -0
  198. package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts.map +1 -0
  199. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -1
  200. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -1
  201. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts +1 -2
  202. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -1
  203. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +6 -0
  204. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -1
  205. package/dist/types/src/components/ChatThread/widgets/format-time.d.ts +2 -0
  206. package/dist/types/src/components/ChatThread/widgets/format-time.d.ts.map +1 -0
  207. package/dist/types/src/components/ChatThread/widgets/index.d.ts +4 -1
  208. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  209. package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts +3 -0
  210. package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts.map +1 -0
  211. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts +16 -0
  212. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts.map +1 -0
  213. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts +210 -0
  214. package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts.map +1 -0
  215. package/dist/types/src/components/ConnectorAuthMenu/index.d.ts +2 -0
  216. package/dist/types/src/components/ConnectorAuthMenu/index.d.ts.map +1 -0
  217. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +1 -1
  218. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  219. package/dist/types/src/components/TaskList/TaskList.d.ts +9 -11
  220. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -1
  221. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +3 -4
  222. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
  223. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +1 -2
  224. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  225. package/dist/types/src/components/ToolBlock/index.d.ts +1 -0
  226. package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -1
  227. package/dist/types/src/components/ToolBlock/is-tool-message.d.ts +3 -0
  228. package/dist/types/src/components/ToolBlock/is-tool-message.d.ts.map +1 -0
  229. package/dist/types/src/components/Toolbox/Toolbox.d.ts +1 -1
  230. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  231. package/dist/types/src/components/index.d.ts +1 -0
  232. package/dist/types/src/components/index.d.ts.map +1 -1
  233. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +5 -2
  234. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -1
  235. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
  236. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +4 -1
  237. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -1
  238. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts +4 -1
  239. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  240. package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts +4 -1
  241. package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  242. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +4 -6
  243. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -1
  244. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
  245. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts +22 -1
  246. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts.map +1 -1
  247. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  248. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts +4 -1
  249. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  250. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +4 -7
  251. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -1
  252. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts +4 -9
  253. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -1
  254. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +5 -7
  255. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -1
  256. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +1 -1
  257. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
  258. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
  259. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +15 -1
  260. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  261. package/dist/types/src/containers/index.d.ts +0 -1
  262. package/dist/types/src/containers/index.d.ts.map +1 -1
  263. package/dist/types/src/execution-graph/execution-graph.d.ts +12 -1
  264. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
  265. package/dist/types/src/execution-graph/index.d.ts +1 -1
  266. package/dist/types/src/execution-graph/index.d.ts.map +1 -1
  267. package/dist/types/src/execution-graph/pending-block-status.d.ts.map +1 -1
  268. package/dist/types/src/execution-graph/span-tree.d.ts +17 -0
  269. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
  270. package/dist/types/src/feed-logger.d.ts +1 -1
  271. package/dist/types/src/feed-logger.d.ts.map +1 -1
  272. package/dist/types/src/hooks/index.d.ts +1 -1
  273. package/dist/types/src/hooks/index.d.ts.map +1 -1
  274. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  275. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  276. package/dist/types/src/hooks/useContextObjects.d.ts +1 -1
  277. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  278. package/dist/types/src/hooks/useSelectionContext.d.ts +13 -0
  279. package/dist/types/src/hooks/useSelectionContext.d.ts.map +1 -0
  280. package/dist/types/src/hooks/useSelectionContext.test.d.ts +2 -0
  281. package/dist/types/src/hooks/useSelectionContext.test.d.ts.map +1 -0
  282. package/dist/types/src/hooks/useTraceMessages.d.ts.map +1 -1
  283. package/dist/types/src/operations/index.d.ts.map +1 -1
  284. package/dist/types/src/processor/index.d.ts +1 -0
  285. package/dist/types/src/processor/index.d.ts.map +1 -1
  286. package/dist/types/src/processor/processor.d.ts +5 -2
  287. package/dist/types/src/processor/processor.d.ts.map +1 -1
  288. package/dist/types/src/processor/prompt.d.ts +18 -0
  289. package/dist/types/src/processor/prompt.d.ts.map +1 -0
  290. package/dist/types/src/processor/prompt.test.d.ts +2 -0
  291. package/dist/types/src/processor/prompt.test.d.ts.map +1 -0
  292. package/dist/types/src/processor/streaming.node.test.d.ts +2 -0
  293. package/dist/types/src/processor/streaming.node.test.d.ts.map +1 -0
  294. package/dist/types/src/skills/assistant/skill.d.ts.map +1 -1
  295. package/dist/types/src/templates/scaffold.d.ts +1 -1
  296. package/dist/types/src/templates/scaffold.d.ts.map +1 -1
  297. package/dist/types/src/translations.d.ts.map +1 -1
  298. package/dist/types/src/types/AssistantCapabilities.d.ts +1 -1
  299. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
  300. package/dist/types/src/types/AssistantOperation.d.ts +2 -13
  301. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
  302. package/dist/types/src/types/ChatSurface.d.ts +2 -2
  303. package/dist/types/src/types/ChatSurface.d.ts.map +1 -1
  304. package/dist/types/src/types/Ollama.d.ts +1 -1
  305. package/dist/types/src/types/Ollama.d.ts.map +1 -1
  306. package/dist/types/tsconfig.tsbuildinfo +1 -1
  307. package/dx.config.ts +1 -0
  308. package/package.json +106 -105
  309. package/src/AssistantPlugin.node.ts +1 -2
  310. package/src/AssistantPlugin.test.ts +60 -62
  311. package/src/AssistantPlugin.ts +1 -10
  312. package/src/AssistantPlugin.workerd.ts +1 -2
  313. package/src/capabilities/AssistantSurfaces.tsx +86 -0
  314. package/src/capabilities/agent-service.ts +1 -1
  315. package/src/capabilities/app-graph-builder.ts +31 -17
  316. package/src/capabilities/companion-chat-provisioner.ts +12 -11
  317. package/src/capabilities/connector.ts +3 -3
  318. package/src/capabilities/edge-model-resolver.ts +5 -2
  319. package/src/capabilities/index.ts +0 -2
  320. package/src/capabilities/react-surface.ts +135 -0
  321. package/src/capabilities/skill-definition.ts +4 -0
  322. package/src/capabilities/standalone-chats-query.test.ts +51 -0
  323. package/src/capabilities/state.ts +1 -1
  324. package/src/components/AgentProperties/AgentProperties.stories.tsx +6 -7
  325. package/src/components/AgentProperties/AgentProperties.tsx +37 -30
  326. package/src/components/Chat/Chat.tsx +275 -59
  327. package/src/components/Chat/{Chat.stories.tsx → Error.stories.tsx} +1 -1
  328. package/src/components/Chat/context.ts +8 -0
  329. package/src/components/Chat/events.ts +5 -0
  330. package/src/components/Chat/thread.test.ts +127 -0
  331. package/src/components/Chat/thread.ts +87 -0
  332. package/src/components/ChatPrompt/ChatActions.tsx +8 -8
  333. package/src/components/ChatPrompt/ChatMcpErrors.tsx +2 -2
  334. package/src/components/ChatPrompt/ChatOptions.stories.tsx +2 -1
  335. package/src/components/ChatPrompt/ChatOptions.tsx +5 -5
  336. package/src/components/ChatPrompt/ChatPrompt.tsx +33 -6
  337. package/src/components/ChatPrompt/index.ts +0 -1
  338. package/src/components/ChatThread/Anchor.stories.tsx +2 -1
  339. package/src/components/ChatThread/ChatThread.stories.tsx +99 -4
  340. package/src/components/ChatThread/ChatThread.tsx +34 -6
  341. package/src/components/ChatThread/Link.tsx +1 -0
  342. package/src/components/ChatThread/index.ts +2 -0
  343. package/src/components/ChatThread/registry.tsx +28 -4
  344. package/src/components/ChatThread/sync/index.ts +6 -0
  345. package/src/components/ChatThread/{sync.test.ts → sync/sync.test.ts} +167 -7
  346. package/src/components/ChatThread/{sync.ts → sync/sync.ts} +97 -3
  347. package/src/components/ChatThread/{tool-widget-state.ts → sync/tool-widget-state.ts} +1 -3
  348. package/src/components/ChatThread/widgets/BranchWidget.stories.tsx +83 -0
  349. package/src/components/ChatThread/widgets/BranchWidget.test.ts +55 -0
  350. package/src/components/ChatThread/widgets/BranchWidget.tsx +61 -0
  351. package/src/components/ChatThread/widgets/FallbackWidget.tsx +2 -2
  352. package/src/components/ChatThread/widgets/ReasoningWidget.ts +1 -1
  353. package/src/components/ChatThread/widgets/ReferenceWidget.ts +1 -6
  354. package/src/components/ChatThread/widgets/SuggestionWidget.ts +12 -3
  355. package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -1
  356. package/src/components/ChatThread/widgets/ToolWidget.tsx +15 -9
  357. package/src/components/ChatThread/widgets/defaults.ts +7 -1
  358. package/src/components/ChatThread/widgets/format-time.ts +45 -0
  359. package/src/components/ChatThread/widgets/index.ts +4 -1
  360. package/src/components/ChatThread/widgets/is-tool-message.ts +13 -0
  361. package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.tsx +177 -0
  362. package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.tsx +82 -0
  363. package/src/components/ConnectorAuthMenu/index.ts +5 -0
  364. package/src/components/ProcessTree/ProcessTree.stories.tsx +1 -1
  365. package/src/components/TaskList/TaskList.stories.tsx +19 -26
  366. package/src/components/TaskList/TaskList.tsx +32 -104
  367. package/src/components/ToolBlock/ToolBlock.tsx +1 -5
  368. package/src/components/ToolBlock/index.ts +1 -0
  369. package/src/components/ToolBlock/is-tool-message.ts +13 -0
  370. package/src/components/Toolbox/Toolbox.tsx +1 -1
  371. package/src/components/index.ts +1 -0
  372. package/src/containers/AgentArticle/AgentArticle.stories.tsx +18 -11
  373. package/src/containers/AgentArticle/AgentArticle.tsx +27 -151
  374. package/src/containers/AgentProperties/AgentProperties.tsx +21 -17
  375. package/src/containers/AssistantSettings/AssistantSettings.tsx +2 -0
  376. package/src/containers/AssistantSettings/OllamaModels.tsx +6 -4
  377. package/src/containers/ChatArticle/ChatArticle.stories.tsx +200 -27
  378. package/src/containers/ChatArticle/ChatArticle.tsx +25 -5
  379. package/src/containers/ChatCompanion/ChatCompanion.tsx +45 -10
  380. package/src/containers/ChatDialog/ChatDialog.tsx +4 -1
  381. package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +9 -6
  382. package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +2 -0
  383. package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +40 -39
  384. package/src/containers/TracePanel/TracePanel.stories.tsx +9 -4
  385. package/src/containers/TracePanel/TracePanel.tsx +22 -6
  386. package/src/containers/TriggerStatus/TriggerStatus.tsx +9 -16
  387. package/src/containers/index.ts +0 -1
  388. package/src/execution-graph/SPEC.md +60 -2
  389. package/src/execution-graph/execution-graph.ts +15 -2
  390. package/src/execution-graph/index.ts +1 -0
  391. package/src/execution-graph/pending-block-status.ts +3 -2
  392. package/src/execution-graph/span-tree.test.ts +87 -1
  393. package/src/execution-graph/span-tree.ts +95 -0
  394. package/src/feed-logger.ts +6 -6
  395. package/src/hooks/index.ts +1 -1
  396. package/src/hooks/useChatProcessor.ts +2 -1
  397. package/src/hooks/useChatToolbarActions.ts +22 -19
  398. package/src/hooks/useContextObjects.ts +9 -3
  399. package/src/hooks/useSelectionContext.test.ts +93 -0
  400. package/src/hooks/useSelectionContext.ts +72 -0
  401. package/src/hooks/useSkillRegistry.ts +1 -1
  402. package/src/hooks/useTraceMessages.ts +5 -3
  403. package/src/operations/create-chat.ts +2 -2
  404. package/src/operations/fork-chat.ts +2 -2
  405. package/src/operations/generate-home-suggestions.test.ts +2 -2
  406. package/src/operations/index.ts +0 -1
  407. package/src/operations/prompt.node.test.ts +1 -1
  408. package/src/paths.ts +3 -3
  409. package/src/processor/index.ts +1 -0
  410. package/src/processor/processor.node.test.ts +1 -1
  411. package/src/processor/processor.ts +33 -5
  412. package/src/processor/prompt.test.ts +37 -0
  413. package/src/processor/prompt.ts +42 -0
  414. package/src/processor/streaming.node.test.ts +196 -0
  415. package/src/skills/assistant/skill.node.test.ts +2 -2
  416. package/src/skills/assistant/skill.ts +3 -5
  417. package/src/templates/routine-templates.test.ts +1 -2
  418. package/src/templates/scaffold.ts +3 -3
  419. package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
  420. package/src/testing/data/trace-timeline-remote.dx.json +1 -1
  421. package/src/testing/data/trace-timeline.dx.json +1 -2
  422. package/src/testing/trace-timeline.node.test.ts +3 -3
  423. package/src/translations.ts +11 -10
  424. package/src/types/AssistantCapabilities.ts +1 -1
  425. package/src/types/AssistantOperation.ts +8 -31
  426. package/src/types/ChatSurface.ts +3 -3
  427. package/src/types/Ollama.ts +1 -1
  428. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs +0 -161
  429. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +0 -7
  430. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs +0 -40
  431. package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs.map +0 -7
  432. package/dist/lib/neutral/AssistantPlugin.mjs +0 -10
  433. package/dist/lib/neutral/AssistantPlugin.mjs.map +0 -7
  434. package/dist/lib/neutral/AssistantPlugin.node.mjs +0 -72
  435. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +0 -7
  436. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +0 -13
  437. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +0 -7
  438. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +0 -302
  439. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +0 -7
  440. package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs +0 -8
  441. package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs.map +0 -7
  442. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs +0 -128
  443. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +0 -7
  444. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs +0 -74
  445. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +0 -7
  446. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +0 -72
  447. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +0 -7
  448. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs +0 -34
  449. package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs.map +0 -7
  450. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs +0 -114
  451. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +0 -7
  452. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +0 -63
  453. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +0 -7
  454. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs +0 -12
  455. package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs.map +0 -7
  456. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs +0 -95
  457. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +0 -7
  458. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs +0 -23
  459. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +0 -7
  460. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs +0 -32
  461. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +0 -7
  462. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +0 -7
  463. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs +0 -44
  464. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +0 -7
  465. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs +0 -249
  466. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +0 -7
  467. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +0 -97
  468. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +0 -7
  469. package/dist/lib/neutral/capabilities/index.mjs +0 -47
  470. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  471. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs +0 -9
  472. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +0 -7
  473. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs +0 -420
  474. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +0 -7
  475. package/dist/lib/neutral/chunk-BXI2R4OO.mjs +0 -410
  476. package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +0 -7
  477. package/dist/lib/neutral/chunk-CMPLPDYE.mjs +0 -30
  478. package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +0 -7
  479. package/dist/lib/neutral/chunk-GPHT3HYS.mjs +0 -8
  480. package/dist/lib/neutral/chunk-GPHT3HYS.mjs.map +0 -7
  481. package/dist/lib/neutral/chunk-HKLSFB5I.mjs +0 -90
  482. package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +0 -7
  483. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  484. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  485. package/dist/lib/neutral/chunk-L7AR4VTA.mjs.map +0 -7
  486. package/dist/lib/neutral/chunk-LS72HWMM.mjs +0 -42
  487. package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +0 -7
  488. package/dist/lib/neutral/chunk-OZWZGIV2.mjs +0 -12
  489. package/dist/lib/neutral/chunk-OZWZGIV2.mjs.map +0 -7
  490. package/dist/lib/neutral/chunk-QOKLFHUS.mjs +0 -13
  491. package/dist/lib/neutral/chunk-QOKLFHUS.mjs.map +0 -7
  492. package/dist/lib/neutral/chunk-SCTHQVIJ.mjs +0 -155
  493. package/dist/lib/neutral/chunk-SCTHQVIJ.mjs.map +0 -7
  494. package/dist/lib/neutral/chunk-U4LTLBAX.mjs +0 -56
  495. package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +0 -7
  496. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs +0 -115
  497. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +0 -7
  498. package/dist/lib/neutral/chunk-V2Y4XE3O.mjs +0 -12
  499. package/dist/lib/neutral/chunk-V2Y4XE3O.mjs.map +0 -7
  500. package/dist/lib/neutral/chunk-VTK5R4H3.mjs +0 -9
  501. package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +0 -7
  502. package/dist/lib/neutral/chunk-XVGEJWJX.mjs +0 -133
  503. package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +0 -7
  504. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs +0 -126
  505. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +0 -7
  506. package/dist/lib/neutral/components/index.mjs +0 -2527
  507. package/dist/lib/neutral/components/index.mjs.map +0 -7
  508. package/dist/lib/neutral/connector-ITLLTBPZ.mjs +0 -70
  509. package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +0 -7
  510. package/dist/lib/neutral/containers/index.mjs +0 -31
  511. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  512. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs +0 -56
  513. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +0 -7
  514. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs +0 -76
  515. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +0 -7
  516. package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs +0 -55
  517. package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs.map +0 -7
  518. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs +0 -58
  519. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs.map +0 -7
  520. package/dist/lib/neutral/execution-graph/index.mjs +0 -977
  521. package/dist/lib/neutral/execution-graph/index.mjs.map +0 -7
  522. package/dist/lib/neutral/extensions/index.mjs +0 -8
  523. package/dist/lib/neutral/extensions/index.mjs.map +0 -7
  524. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs +0 -92
  525. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +0 -7
  526. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +0 -93
  527. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +0 -7
  528. package/dist/lib/neutral/hooks/index.mjs +0 -877
  529. package/dist/lib/neutral/hooks/index.mjs.map +0 -7
  530. package/dist/lib/neutral/index.mjs +0 -42
  531. package/dist/lib/neutral/index.mjs.map +0 -7
  532. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +0 -24
  533. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +0 -7
  534. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +0 -41
  535. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +0 -7
  536. package/dist/lib/neutral/meta.json +0 -1
  537. package/dist/lib/neutral/meta.mjs +0 -12
  538. package/dist/lib/neutral/meta.mjs.map +0 -7
  539. package/dist/lib/neutral/migrations-7DEMVBOG.mjs +0 -28
  540. package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +0 -7
  541. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +0 -18
  542. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +0 -7
  543. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +0 -8
  544. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +0 -7
  545. package/dist/lib/neutral/operations/index.mjs +0 -8
  546. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  547. package/dist/lib/neutral/plugin.mjs +0 -16
  548. package/dist/lib/neutral/plugin.mjs.map +0 -7
  549. package/dist/lib/neutral/plugin.workerd.mjs +0 -13
  550. package/dist/lib/neutral/plugin.workerd.mjs.map +0 -7
  551. package/dist/lib/neutral/react-surface-HEJEK44F.mjs +0 -171
  552. package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +0 -7
  553. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +0 -28
  554. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +0 -7
  555. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs +0 -102
  556. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +0 -7
  557. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs +0 -48
  558. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs.map +0 -7
  559. package/dist/lib/neutral/settings-7Q3RITIT.mjs +0 -28
  560. package/dist/lib/neutral/settings-7Q3RITIT.mjs.map +0 -7
  561. package/dist/lib/neutral/skill-definition-553MQRTR.mjs +0 -8
  562. package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +0 -7
  563. package/dist/lib/neutral/skills/index.mjs +0 -8
  564. package/dist/lib/neutral/skills/index.mjs.map +0 -7
  565. package/dist/lib/neutral/state-4LGAKSSD.mjs +0 -34
  566. package/dist/lib/neutral/state-4LGAKSSD.mjs.map +0 -7
  567. package/dist/lib/neutral/testing.mjs +0 -8
  568. package/dist/lib/neutral/testing.mjs.map +0 -7
  569. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +0 -21
  570. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +0 -7
  571. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +0 -8
  572. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +0 -7
  573. package/dist/lib/neutral/translations.mjs +0 -217
  574. package/dist/lib/neutral/translations.mjs.map +0 -7
  575. package/dist/lib/neutral/types/index.mjs +0 -24
  576. package/dist/lib/neutral/types/index.mjs.map +0 -7
  577. package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs +0 -61
  578. package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs.map +0 -7
  579. package/dist/types/src/capabilities/migrations.d.ts +0 -5
  580. package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
  581. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
  582. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  583. package/dist/types/src/components/Chat/Chat.stories.d.ts.map +0 -1
  584. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +0 -10
  585. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +0 -1
  586. package/dist/types/src/components/ChatThread/sync.d.ts.map +0 -1
  587. package/dist/types/src/components/ChatThread/sync.test.d.ts.map +0 -1
  588. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +0 -1
  589. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +0 -1
  590. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +0 -6
  591. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +0 -1
  592. package/dist/types/src/containers/PlanArticle/index.d.ts +0 -2
  593. package/dist/types/src/containers/PlanArticle/index.d.ts.map +0 -1
  594. package/dist/types/src/hooks/useFlush.d.ts +0 -6
  595. package/dist/types/src/hooks/useFlush.d.ts.map +0 -1
  596. package/dist/types/src/operations/resolve-navigation-targets.d.ts +0 -5
  597. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +0 -1
  598. package/src/AssistantPlugin.conversations.json +0 -1
  599. package/src/capabilities/migrations.ts +0 -28
  600. package/src/capabilities/navigation-resolver.ts +0 -20
  601. package/src/capabilities/react-surface.tsx +0 -177
  602. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +0 -42
  603. package/src/components/ChatThread/DEBUG.md +0 -64
  604. package/src/containers/PlanArticle/PlanArticle.tsx +0 -37
  605. package/src/containers/PlanArticle/index.ts +0 -5
  606. package/src/hooks/useFlush.ts +0 -35
  607. package/src/operations/resolve-navigation-targets.ts +0 -44
  608. /package/dist/types/src/components/ChatThread/{sync.test.d.ts → sync/sync.test.d.ts} +0 -0
  609. /package/dist/types/src/components/ChatThread/{tool-widget-state.d.ts → sync/tool-widget-state.d.ts} +0 -0
  610. /package/dist/types/src/components/ChatThread/{tool-widget-state.test.d.ts → sync/tool-widget-state.test.d.ts} +0 -0
  611. /package/src/components/ChatThread/{tool-widget-state.test.ts → sync/tool-widget-state.test.ts} +0 -0
@@ -0,0 +1,961 @@
1
+ import { AgentRequestBegin, AgentRequestEnd, CompleteBlock, PartialBlock } from "@dxos/assistant";
2
+ import { Process, Trace } from "@dxos/compute";
3
+ import { EID } from "@dxos/keys";
4
+ import * as Schema from "effect/Schema";
5
+ import { Annotation } from "@dxos/echo";
6
+ import * as Option from "effect/Option";
7
+ import { LogLevel, log } from "@dxos/log";
8
+ import * as Array from "effect/Array";
9
+ import { pipe } from "effect/Function";
10
+ import * as Either from "effect/Either";
11
+ import * as Pipeable from "effect/Pipeable";
12
+ import * as Struct from "effect/Struct";
13
+ import { AGENT_PROCESS_KEY } from "@dxos/agent-runtime";
14
+ //#region src/execution-graph/span-tree.ts
15
+ /**
16
+ * Default duration a span may sit open with no new events before it's considered abandoned
17
+ * (the runtime crashed, lost connectivity, or otherwise never wrote the closing event).
18
+ */
19
+ var DEFAULT_SPAN_TIMEOUT_MS = 1200 * 1e3;
20
+ /**
21
+ * Synthetic id assigned to the root span.
22
+ * The root is a virtual container for top-level spans (those without a parent in the captured trace).
23
+ */
24
+ var ROOT_SPAN_ID = "<main>";
25
+ var BEGIN_EVENT_TYPES = /* @__PURE__ */ new Set([Trace.OperationStart.key, AgentRequestBegin.key]);
26
+ var END_EVENT_TYPES = /* @__PURE__ */ new Set([Trace.OperationEnd.key, AgentRequestEnd.key]);
27
+ var isSpanBeginEvent = (event) => BEGIN_EVENT_TYPES.has(event.type);
28
+ var isSpanEndEvent = (event) => END_EVENT_TYPES.has(event.type);
29
+ var computeMeta = (rawMeta) => ({
30
+ pid: rawMeta.pid,
31
+ parentPid: rawMeta.parentPid,
32
+ processName: rawMeta.processName,
33
+ conversationId: rawMeta.conversation ? EID.getEntityId(EID.parse(rawMeta.conversation.uri)) : void 0,
34
+ triggerId: rawMeta.trigger ? EID.getEntityId(EID.parse(rawMeta.trigger.uri)) : void 0,
35
+ toolCallId: rawMeta.toolCallId,
36
+ runtimeName: rawMeta.runtimeName
37
+ });
38
+ var makeMutableSpan = (id, meta) => ({
39
+ id,
40
+ meta,
41
+ events: [],
42
+ children: [],
43
+ firstTimestamp: Number.POSITIVE_INFINITY
44
+ });
45
+ var freezeSpan = (span) => ({
46
+ id: span.id,
47
+ meta: span.meta,
48
+ events: span.events,
49
+ children: span.children.map(freezeSpan)
50
+ });
51
+ /**
52
+ * Builds a hierarchical span tree from a list of trace messages.
53
+ *
54
+ * Algorithm:
55
+ * 1. Flatten messages into events and sort them chronologically.
56
+ * 2. For each event:
57
+ * - Begin events (`OperationStart`, `AgentRequestBegin`) open a new span whose parent
58
+ * is the currently-open span of the event's `meta.parentPid`, or the root if there is
59
+ * none. The begin event itself becomes the first event of the new span.
60
+ * - End events (`OperationEnd`, `AgentRequestEnd`) close the currently-open span for
61
+ * the event's `meta.pid` and become its last event.
62
+ * - Other events attach to the currently-open span for their `meta.pid`, or to the
63
+ * root span if no span is currently open for that pid (or the event has no pid).
64
+ * 3. Sort each span's children by their earliest event timestamp.
65
+ */
66
+ var buildSpanTree = (messages, options = {}) => {
67
+ const allEvents = messages.flatMap((message) => Trace.flatten(message));
68
+ allEvents.sort((a, b) => a.timestamp - b.timestamp);
69
+ const events = applyEventLimit(allEvents, options.eventLimit);
70
+ const root = makeMutableSpan(ROOT_SPAN_ID, {});
71
+ const openSpans = /* @__PURE__ */ new Map();
72
+ const lastSpanByPid = /* @__PURE__ */ new Map();
73
+ const allSpans = [];
74
+ let spanCounter = 0;
75
+ const allocSpanId = (pid) => {
76
+ const id = `${pid}#${spanCounter}`;
77
+ spanCounter += 1;
78
+ return id;
79
+ };
80
+ const noteTimestamp = (span, timestamp) => {
81
+ if (timestamp < span.firstTimestamp) span.firstTimestamp = timestamp;
82
+ };
83
+ for (const event of events) {
84
+ const pid = event.meta.pid;
85
+ if (!pid) {
86
+ root.events.push(event);
87
+ noteTimestamp(root, event.timestamp);
88
+ continue;
89
+ }
90
+ if (BEGIN_EVENT_TYPES.has(event.type)) {
91
+ const parentPid = event.meta.parentPid;
92
+ const parent = parentPid && (openSpans.get(parentPid) ?? lastSpanByPid.get(parentPid)) || root;
93
+ const span = makeMutableSpan(allocSpanId(pid), computeMeta(event.meta));
94
+ span.events.push(event);
95
+ noteTimestamp(span, event.timestamp);
96
+ parent.children.push(span);
97
+ allSpans.push(span);
98
+ openSpans.set(pid, span);
99
+ lastSpanByPid.set(pid, span);
100
+ continue;
101
+ }
102
+ if (END_EVENT_TYPES.has(event.type)) {
103
+ const span = openSpans.get(pid);
104
+ if (span) {
105
+ span.events.push(event);
106
+ noteTimestamp(span, event.timestamp);
107
+ openSpans.delete(pid);
108
+ } else {
109
+ root.events.push(event);
110
+ noteTimestamp(root, event.timestamp);
111
+ }
112
+ continue;
113
+ }
114
+ const open = openSpans.get(pid);
115
+ if (open) {
116
+ open.events.push(event);
117
+ noteTimestamp(open, event.timestamp);
118
+ } else {
119
+ root.events.push(event);
120
+ noteTimestamp(root, event.timestamp);
121
+ }
122
+ }
123
+ if (options.now !== void 0) {
124
+ const now = options.now;
125
+ const spanTimeoutMs = options.spanTimeoutMs ?? 12e5;
126
+ for (const span of allSpans) {
127
+ const lastEvent = span.events[span.events.length - 1];
128
+ if (isSpanEndEvent(lastEvent)) continue;
129
+ const timeoutAt = lastEvent.timestamp + spanTimeoutMs;
130
+ if (now < timeoutAt) continue;
131
+ const endEvent = makeTimeoutEndEvent(span, timeoutAt);
132
+ span.events.push(endEvent);
133
+ noteTimestamp(span, endEvent.timestamp);
134
+ }
135
+ }
136
+ const sortChildren = (span) => {
137
+ span.children.sort((a, b) => a.firstTimestamp - b.firstTimestamp);
138
+ for (const child of span.children) sortChildren(child);
139
+ };
140
+ sortChildren(root);
141
+ return freezeSpan(root);
142
+ };
143
+ /**
144
+ * Message stamped on synthetic end events produced when a span times out.
145
+ */
146
+ var SPAN_TIMEOUT_MESSAGE = "No end event was recorded for this span; it was closed after a timeout.";
147
+ /**
148
+ * Synthesizes the end event that closes an abandoned span, matching the event type its begin
149
+ * event opened it with (`OperationStart` → `OperationEnd`, `AgentRequestBegin` → `AgentRequestEnd`).
150
+ */
151
+ var makeTimeoutEndEvent = (span, timestamp) => {
152
+ const beginEvent = span.events[0];
153
+ if (beginEvent.type === AgentRequestBegin.key) return {
154
+ type: AgentRequestEnd.key,
155
+ timestamp,
156
+ meta: beginEvent.meta,
157
+ isEphemeral: false,
158
+ data: {
159
+ status: "interrupted",
160
+ error: SPAN_TIMEOUT_MESSAGE
161
+ }
162
+ };
163
+ const fallback = { key: "unknown" };
164
+ const beginData = Option.getOrElse(Schema.decodeUnknownOption(Trace.OperationStart.schema)(beginEvent.data), () => fallback);
165
+ return {
166
+ type: Trace.OperationEnd.key,
167
+ timestamp,
168
+ meta: beginEvent.meta,
169
+ isEphemeral: false,
170
+ data: {
171
+ key: beginData.key,
172
+ name: beginData.name,
173
+ icon: beginData.icon,
174
+ outcome: "failure",
175
+ error: SPAN_TIMEOUT_MESSAGE
176
+ }
177
+ };
178
+ };
179
+ /**
180
+ * Caps the number of non-boundary events while retaining every span boundary event.
181
+ *
182
+ * Boundary events define the span tree's structure: dropping a begin event detaches every
183
+ * descendant span (its `parentPid` lookup fails, so children fall back to the root), and
184
+ * dropping an end event leaves a span open and corrupts the open-span map for sibling spans
185
+ * that share a pid. Status/partial-block events are the noisy bulk and the only ones the
186
+ * limit needs to control.
187
+ *
188
+ * The returned array stays in chronological order.
189
+ */
190
+ var applyEventLimit = (events, eventLimit) => {
191
+ if (eventLimit === void 0) return [...events];
192
+ let nonBoundaryCount = 0;
193
+ for (const event of events) if (!isBoundary(event)) nonBoundaryCount += 1;
194
+ if (nonBoundaryCount <= eventLimit) return [...events];
195
+ const dropCount = nonBoundaryCount - eventLimit;
196
+ let dropped = 0;
197
+ const result = [];
198
+ for (const event of events) {
199
+ if (!isBoundary(event) && dropped < dropCount) {
200
+ dropped += 1;
201
+ continue;
202
+ }
203
+ result.push(event);
204
+ }
205
+ return result;
206
+ };
207
+ var isBoundary = (event) => BEGIN_EVENT_TYPES.has(event.type) || END_EVENT_TYPES.has(event.type);
208
+ /**
209
+ * Walks the span tree in depth-first pre-order, invoking `visit` for each span (root included).
210
+ */
211
+ var walkSpanTree = (root, visit, depth = 0) => {
212
+ visit(root, depth);
213
+ for (const child of root.children) walkSpanTree(child, visit, depth + 1);
214
+ };
215
+ /**
216
+ * Returns all spans in the tree in depth-first pre-order, root first.
217
+ */
218
+ var flattenSpanTree = (root) => {
219
+ const result = [];
220
+ walkSpanTree(root, (span) => result.push(span));
221
+ return result;
222
+ };
223
+ //#endregion
224
+ //#region src/execution-graph/execution-graph.ts
225
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/execution-graph/execution-graph.ts";
226
+ /**
227
+ * Branch name for top-level operation invocations.
228
+ */
229
+ var MAIN_BRANCH = "main";
230
+ /** Timeline tag that applies a shimmer message effect. */
231
+ var SHIMMER_EFFECT_TAG = "effect:shimmer";
232
+ var ICONS = {
233
+ agentRequestBegin: {
234
+ icon: "ph--atom--regular",
235
+ level: LogLevel.VERBOSE
236
+ },
237
+ agentRequestEndSuccess: {
238
+ icon: "ph--atom--regular",
239
+ level: LogLevel.INFO
240
+ },
241
+ agentRequestEndError: {
242
+ icon: "ph--atom--regular",
243
+ level: LogLevel.ERROR
244
+ },
245
+ agentRequestEndInterrupted: {
246
+ icon: "ph--atom--regular",
247
+ level: LogLevel.WARN
248
+ },
249
+ userMessage: {
250
+ icon: "ph--user--regular",
251
+ level: LogLevel.VERBOSE
252
+ },
253
+ statusMessage: {
254
+ icon: "ph--info--regular",
255
+ level: LogLevel.VERBOSE
256
+ },
257
+ operationStart: {
258
+ icon: "ph--function--regular",
259
+ level: LogLevel.VERBOSE
260
+ },
261
+ operationEndSuccess: {
262
+ icon: "ph--function--regular",
263
+ level: LogLevel.INFO
264
+ },
265
+ operationEndError: {
266
+ icon: "ph--function--regular",
267
+ level: LogLevel.ERROR
268
+ },
269
+ toolCall: {
270
+ icon: "ph--wrench--regular",
271
+ level: LogLevel.VERBOSE
272
+ },
273
+ toolResultSuccess: {
274
+ icon: "ph--wrench--regular",
275
+ level: LogLevel.INFO
276
+ },
277
+ toolResultError: {
278
+ icon: "ph--wrench--regular",
279
+ level: LogLevel.ERROR
280
+ },
281
+ agentRequestRunning: {
282
+ icon: "ph--spinner-gap--regular",
283
+ level: LogLevel.VERBOSE
284
+ },
285
+ processRunning: {
286
+ icon: "ph--spinner-gap--regular",
287
+ level: LogLevel.VERBOSE
288
+ }
289
+ };
290
+ var buildExecutionGraph = ({ traceMessages, activeProcesses = [], collapseCompletedSpans = false, eventLimit = 500, spanTimeoutMs, now }) => {
291
+ const spanTree = buildSpanTree(traceMessages, {
292
+ eventLimit,
293
+ spanTimeoutMs,
294
+ now
295
+ });
296
+ const built = spanTreeToCommits(spanTree, activeProcesses, buildToolCallContext(traceMessages), collapseCompletedSpans);
297
+ log("trace execution graph", {
298
+ traceMessages: traceMessages.length,
299
+ commits: built.commits.length,
300
+ branches: built.branches.length,
301
+ activeProcesses: activeProcesses.length
302
+ }, {
303
+ "~LogMeta": "~LogMeta",
304
+ F: __dxlog_file,
305
+ L: 141,
306
+ S: void 0
307
+ });
308
+ return {
309
+ ...built,
310
+ spanTree
311
+ };
312
+ };
313
+ var buildToolCallContext = (messages) => {
314
+ const callById = /* @__PURE__ */ new Map();
315
+ const resultByCallId = /* @__PURE__ */ new Map();
316
+ for (const message of messages) for (const event of message.events) {
317
+ if (event.type !== CompleteBlock.key) continue;
318
+ const block = event.data?.block;
319
+ if (!block) continue;
320
+ if (block._tag === "toolCall") callById.set(block.toolCallId, block);
321
+ else if (block._tag === "toolResult") resultByCallId.set(block.toolCallId, block);
322
+ }
323
+ return {
324
+ callById,
325
+ resultByCallId
326
+ };
327
+ };
328
+ /**
329
+ * Parses `AgentRequestEnd` payload, accepting legacy traces that omitted `status`.
330
+ */
331
+ var parseAgentRequestEnd = (data) => {
332
+ const validated = Schema.validateEither(AgentRequestEnd.schema)(data);
333
+ if (Either.isRight(validated)) return validated.right;
334
+ if (data != null && typeof data === "object" && Object.keys(data).length === 0) return { status: "success" };
335
+ log("invalid trace event", { type: AgentRequestEnd.key }, {
336
+ "~LogMeta": "~LogMeta",
337
+ F: __dxlog_file,
338
+ L: 208,
339
+ S: void 0
340
+ });
341
+ };
342
+ var presentAgentRequestEnd = (data) => {
343
+ switch (data.status) {
344
+ case "error": return {
345
+ icon: ICONS.agentRequestEndError.icon,
346
+ level: ICONS.agentRequestEndError.level,
347
+ message: data.error ? trimText(`Agent request failed: ${data.error}`) : "Agent request failed"
348
+ };
349
+ case "interrupted": return {
350
+ icon: ICONS.agentRequestEndInterrupted.icon,
351
+ level: ICONS.agentRequestEndInterrupted.level,
352
+ message: "Agent request interrupted"
353
+ };
354
+ default: return {
355
+ icon: ICONS.agentRequestEndSuccess.icon,
356
+ level: ICONS.agentRequestEndSuccess.level,
357
+ message: "Agent completed request"
358
+ };
359
+ }
360
+ };
361
+ var presentEvent = (event, toolCallContext) => {
362
+ if (Trace.isOfType(AgentRequestBegin, event)) {
363
+ if (Either.isLeft(Schema.validateEither(AgentRequestBegin.schema)(event.data))) {
364
+ log("invalid trace event", { type: event.type }, {
365
+ "~LogMeta": "~LogMeta",
366
+ F: __dxlog_file,
367
+ L: 238,
368
+ S: void 0
369
+ });
370
+ return;
371
+ }
372
+ return {
373
+ icon: ICONS.agentRequestBegin.icon,
374
+ level: ICONS.agentRequestBegin.level,
375
+ message: "Agent processing request..."
376
+ };
377
+ }
378
+ if (Trace.isOfType(AgentRequestEnd, event)) {
379
+ const endData = parseAgentRequestEnd(event.data);
380
+ if (!endData) return;
381
+ return presentAgentRequestEnd(endData);
382
+ }
383
+ if (Trace.isOfType(CompleteBlock, event)) {
384
+ if (Either.isLeft(Schema.validateEither(CompleteBlock.schema)(event.data))) {
385
+ log("invalid trace event", { type: event.type }, {
386
+ "~LogMeta": "~LogMeta",
387
+ F: __dxlog_file,
388
+ L: 256,
389
+ S: void 0
390
+ });
391
+ return;
392
+ }
393
+ switch (event.data.block._tag) {
394
+ case "text": return event.data.role === "user" ? {
395
+ icon: ICONS.userMessage.icon,
396
+ level: ICONS.userMessage.level,
397
+ message: trimText(event.data.block.text)
398
+ } : void 0;
399
+ case "status": return {
400
+ icon: ICONS.statusMessage.icon,
401
+ level: ICONS.statusMessage.level,
402
+ message: trimText(event.data.block.statusText)
403
+ };
404
+ case "toolCall":
405
+ if (event.data.block.operationKey) return;
406
+ if (toolCallContext.resultByCallId.has(event.data.block.toolCallId)) return;
407
+ return {
408
+ icon: ICONS.toolCall.icon,
409
+ level: ICONS.toolCall.level,
410
+ message: event.data.block.name,
411
+ idSuffix: `toolCall:${event.data.block.toolCallId}`
412
+ };
413
+ case "toolResult": {
414
+ const call = toolCallContext.callById.get(event.data.block.toolCallId);
415
+ if (call?.operationKey) return;
416
+ const success = event.data.block.error === void 0;
417
+ const name = call?.name ?? event.data.block.name;
418
+ return {
419
+ icon: success ? ICONS.toolResultSuccess.icon : ICONS.toolResultError.icon,
420
+ level: success ? ICONS.toolResultSuccess.level : ICONS.toolResultError.level,
421
+ message: `${name}${!success ? " - Error" : ""}`,
422
+ idSuffix: `toolResult:${event.data.block.toolCallId}`
423
+ };
424
+ }
425
+ default: return;
426
+ }
427
+ }
428
+ if (Trace.isOfType(Trace.OperationStart, event)) {
429
+ if (Either.isLeft(Schema.validateEither(Trace.OperationStart.schema)(event.data))) {
430
+ log("invalid trace event", { type: event.type }, {
431
+ "~LogMeta": "~LogMeta",
432
+ F: __dxlog_file,
433
+ L: 316,
434
+ S: void 0
435
+ });
436
+ return;
437
+ }
438
+ return {
439
+ icon: event.data.icon ?? ICONS.operationStart.icon,
440
+ level: ICONS.operationStart.level,
441
+ message: event.data.name ?? event.data.key,
442
+ idSuffix: `${event.data.key}:start`
443
+ };
444
+ }
445
+ if (Trace.isOfType(Trace.OperationEnd, event)) {
446
+ if (Either.isLeft(Schema.validateEither(Trace.OperationEnd.schema)(event.data))) {
447
+ log("invalid trace event", { type: event.type }, {
448
+ "~LogMeta": "~LogMeta",
449
+ F: __dxlog_file,
450
+ L: 328,
451
+ S: void 0
452
+ });
453
+ return;
454
+ }
455
+ const success = event.data.outcome === "success";
456
+ return {
457
+ icon: event.data.icon ?? (success ? ICONS.operationEndSuccess.icon : ICONS.operationEndError.icon),
458
+ level: success ? ICONS.operationEndSuccess.level : ICONS.operationEndError.level,
459
+ message: `${event.data.name ?? event.data.key}${!success ? " - Error" : ""}`,
460
+ idSuffix: `${event.data.key}:end`
461
+ };
462
+ }
463
+ };
464
+ /**
465
+ * Collects human-readable activity lines for a process subtree (root pid and descendants).
466
+ * Used to surface live sub-agent status in the task list.
467
+ */
468
+ var collectProcessActivityLines = (messages, rootPid, options = {}) => {
469
+ const { conversationId, eventLimit = 50 } = options;
470
+ const descendantPids = collectDescendantPids(messages, rootPid);
471
+ const filtered = messages.filter((message) => {
472
+ const pid = message.meta.pid;
473
+ if (!pid || !descendantPids.has(pid)) return false;
474
+ const metaConvId = message.meta.conversation ? EID.getEntityId(EID.parse(message.meta.conversation.uri)) : void 0;
475
+ if (conversationId && metaConvId !== void 0 && metaConvId !== conversationId) return false;
476
+ return true;
477
+ });
478
+ const events = filtered.flatMap((message) => Trace.flatten(message)).sort((left, right) => left.timestamp - right.timestamp).slice(-eventLimit);
479
+ const toolCallContext = buildToolCallContext(filtered);
480
+ const lines = [];
481
+ for (const event of events) {
482
+ const presentation = presentEvent(event, toolCallContext);
483
+ if (presentation) lines.push(presentation.message);
484
+ }
485
+ return lines;
486
+ };
487
+ /**
488
+ * Derives a single in-flight status line from durable trace when ephemeral subscription
489
+ * is unavailable (e.g. between partial blocks or while a child operation is running).
490
+ */
491
+ var deriveInFlightActivityLine = (messages, rootPid, options = {}) => {
492
+ const { conversationId, eventLimit = 50 } = options;
493
+ const descendantPids = collectDescendantPids(messages, rootPid);
494
+ const events = messages.filter((message) => {
495
+ const pid = message.meta.pid;
496
+ if (!pid || !descendantPids.has(pid)) return false;
497
+ const metaConvId = message.meta.conversation ? EID.getEntityId(EID.parse(message.meta.conversation.uri)) : void 0;
498
+ if (conversationId && metaConvId !== void 0 && metaConvId !== conversationId) return false;
499
+ return true;
500
+ }).flatMap((message) => Trace.flatten(message)).sort((left, right) => left.timestamp - right.timestamp).slice(-eventLimit);
501
+ const openOperations = /* @__PURE__ */ new Map();
502
+ let agentRequestOpen = false;
503
+ let lastLine;
504
+ for (const event of events) {
505
+ const pid = event.meta.pid ?? rootPid;
506
+ if (Trace.isOfType(Trace.OperationStart, event)) {
507
+ const key = `${pid}:${event.data.key}`;
508
+ const name = event.data.name ?? event.data.key;
509
+ openOperations.set(key, {
510
+ name,
511
+ timestamp: event.timestamp
512
+ });
513
+ lastLine = `${name}...`;
514
+ continue;
515
+ }
516
+ if (Trace.isOfType(Trace.OperationEnd, event)) {
517
+ openOperations.delete(`${pid}:${event.data.key}`);
518
+ continue;
519
+ }
520
+ if (Trace.isOfType(AgentRequestBegin, event)) {
521
+ agentRequestOpen = true;
522
+ lastLine = "Generating...";
523
+ continue;
524
+ }
525
+ if (Trace.isOfType(AgentRequestEnd, event)) agentRequestOpen = false;
526
+ }
527
+ if (agentRequestOpen) return "Generating...";
528
+ const latestOperation = [...openOperations.values()].sort((left, right) => right.timestamp - left.timestamp)[0];
529
+ if (latestOperation) return `${latestOperation.name}...`;
530
+ return lastLine;
531
+ };
532
+ var collectDescendantPids = (messages, rootPid) => {
533
+ const pids = /* @__PURE__ */ new Set([rootPid]);
534
+ let expanded = true;
535
+ while (expanded) {
536
+ expanded = false;
537
+ for (const message of messages) {
538
+ const pid = message.meta.pid;
539
+ const parentPid = message.meta.parentPid;
540
+ if (pid && parentPid && pids.has(parentPid) && !pids.has(pid)) {
541
+ pids.add(pid);
542
+ expanded = true;
543
+ }
544
+ }
545
+ }
546
+ return pids;
547
+ };
548
+ var isPendingToolCallEvent = (event, toolCallContext) => {
549
+ if (!Trace.isOfType(CompleteBlock, event)) return false;
550
+ if (event.data.block._tag !== "toolCall") return false;
551
+ return !toolCallContext.resultByCallId.has(event.data.block.toolCallId);
552
+ };
553
+ /**
554
+ * Marks commits that represent work still in flight for Timeline shimmer styling.
555
+ */
556
+ var shouldShimmerInProgressCommit = (event, toolCallContext) => isPendingToolCallEvent(event, toolCallContext);
557
+ /**
558
+ * A span is completed when its last recorded event is a matching end boundary.
559
+ */
560
+ var isCompletedSpan = (span) => {
561
+ if (span.id === "<main>") return false;
562
+ const lastEvent = span.events[span.events.length - 1];
563
+ return lastEvent !== void 0 && isSpanEndEvent(lastEvent);
564
+ };
565
+ /**
566
+ * A span is "collapsible" when it would otherwise render as an empty fork-and-merge:
567
+ * exactly two events that form a begin/end pair and no child sub-spans. In that case
568
+ * we emit a single commit for the end event on the parent branch.
569
+ *
570
+ * When `collapseCompletedSpans` is enabled, any completed span collapses to that single
571
+ * end commit — middle events, child sub-spans, and the begin fork are all omitted.
572
+ *
573
+ * A *pending* span (one whose end event has not yet been recorded) is never collapsed:
574
+ * its trailing events should keep rendering as middle commits on the span's own branch
575
+ * — never as a fake "end" commit on the parent branch.
576
+ *
577
+ * Both nested spans and top-level spans (whose parent is the synthetic root) are eligible
578
+ * once they have completed: a span with no inner activity is collapsed regardless of where
579
+ * it sits in the tree.
580
+ */
581
+ var isCollapsibleSpan = (span, parent, collapseCompletedSpans) => {
582
+ if (span.id === "<main>") return false;
583
+ if (parent === null) return false;
584
+ if (span.events.length === 2 && span.children.length === 0) {
585
+ const firstEvent = span.events[0];
586
+ const lastEvent = span.events[span.events.length - 1];
587
+ if (isSpanBeginEvent(firstEvent) && isSpanEndEvent(lastEvent)) return true;
588
+ }
589
+ if (collapseCompletedSpans && isCompletedSpan(span)) return true;
590
+ return false;
591
+ };
592
+ /**
593
+ * Converts a span tree into a flat list of commits + branches suitable for `Timeline` rendering.
594
+ *
595
+ * For every span the algorithm:
596
+ * - emits the **first** event as a "begin" commit on the parent span's branch (fork);
597
+ * - emits **middle** events as commits on the span's own branch;
598
+ * - emits the **last** event as an "end" commit on the parent span's branch with two parents
599
+ * (the begin commit and the last commit on the span's own branch — a merge).
600
+ *
601
+ * Collapsible spans (`isCollapsibleSpan`) emit only the end commit on the parent branch with
602
+ * a single parent — a tidier rendering for sub-operations that have no inner detail.
603
+ *
604
+ * Events are processed in categorical span-tree order: each span's begin events, its child
605
+ * subtrees (depth-first), then its remaining events. Active-process running rows are inserted
606
+ * at the end of each matching span block — not appended after the entire tree.
607
+ */
608
+ var spanTreeToCommits = (root, activeProcesses, toolCallContext, collapseCompletedSpans) => {
609
+ const builder = new GraphBuilder();
610
+ const details = {};
611
+ builder.addBranch(MAIN_BRANCH);
612
+ const parentBySpan = /* @__PURE__ */ new Map();
613
+ parentBySpan.set(root, null);
614
+ const indexParents = (span) => {
615
+ for (const child of span.children) {
616
+ parentBySpan.set(child, span);
617
+ indexParents(child);
618
+ }
619
+ };
620
+ indexParents(root);
621
+ const findParentSpan = (span) => parentBySpan.get(span) ?? null;
622
+ const collapsedSpanIds = /* @__PURE__ */ new Set();
623
+ walkSpanTree(root, (span) => {
624
+ if (isCollapsibleSpan(span, findParentSpan(span), collapseCompletedSpans)) collapsedSpanIds.add(span.id);
625
+ });
626
+ const isUnderCollapsedAncestor = (span) => {
627
+ let ancestor = findParentSpan(span);
628
+ while (ancestor) {
629
+ if (collapsedSpanIds.has(ancestor.id)) return true;
630
+ ancestor = findParentSpan(ancestor);
631
+ }
632
+ return false;
633
+ };
634
+ const branchOf = (span) => {
635
+ if (!span || span.id === "<main>") return MAIN_BRANCH;
636
+ return span.meta.pid ?? span.id;
637
+ };
638
+ const beginCommitIdBySpan = /* @__PURE__ */ new Map();
639
+ const lastInSpanContext = (span) => {
640
+ if (!span || span.id === "<main>") return CommitSelector.branch(MAIN_BRANCH).pipe(CommitSelector.compose(CommitSelector.last()));
641
+ const ownBranch = branchOf(span);
642
+ const beginId = beginCommitIdBySpan.get(span.id);
643
+ return CommitSelector.firstOf(CommitSelector.branch(ownBranch).pipe(CommitSelector.compose(CommitSelector.last())), beginId ? CommitSelector.id(beginId) : CommitSelector.filter(() => false), lastInSpanContext(findParentSpan(span)));
644
+ };
645
+ const lastCommitIdBySpan = /* @__PURE__ */ new Map();
646
+ let globalIndex = 0;
647
+ const insertedRunningPids = /* @__PURE__ */ new Set();
648
+ const activeProcessByPid = new Map(activeProcesses.map((process) => [process.pid, process]));
649
+ const emitRunningIndicator = (pid) => {
650
+ if (insertedRunningPids.has(pid)) return;
651
+ const process = activeProcessByPid.get(pid);
652
+ if (!process) return;
653
+ if (process.key === AGENT_PROCESS_KEY && Option.isSome(Annotation.getDictionary(process.params.annotations, Process.TargetAnnotation)) && (process.state === Process.State.RUNNING || process.state === Process.State.HYBERNATING)) {
654
+ builder.addCommit({
655
+ id: `running:${process.pid}`,
656
+ branch: process.pid,
657
+ parents: builder.computeParents(CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last()))),
658
+ icon: ICONS.agentRequestRunning.icon,
659
+ level: ICONS.agentRequestRunning.level,
660
+ message: "Generating...",
661
+ timestamp: /* @__PURE__ */ new Date(),
662
+ tags: [SHIMMER_EFFECT_TAG]
663
+ });
664
+ insertedRunningPids.add(pid);
665
+ } else if (process.state === Process.State.RUNNING && builder.hasBranch(process.pid)) {
666
+ builder.addCommit({
667
+ id: `running:${process.pid}`,
668
+ branch: process.pid,
669
+ parents: builder.computeParents(CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last()))),
670
+ icon: ICONS.processRunning.icon,
671
+ level: ICONS.processRunning.level,
672
+ message: "Running...",
673
+ timestamp: /* @__PURE__ */ new Date(),
674
+ tags: [SHIMMER_EFFECT_TAG]
675
+ });
676
+ insertedRunningPids.add(pid);
677
+ }
678
+ };
679
+ const emitEventCommit = (span, event, eventIndex) => {
680
+ const presentation = presentEvent(event, toolCallContext);
681
+ if (!presentation) return;
682
+ const isBeginEvent = isSpanBeginEvent(event);
683
+ const isEndEvent = isSpanEndEvent(event);
684
+ const parentSpan = findParentSpan(span);
685
+ const collapsible = isCollapsibleSpan(span, parentSpan, collapseCompletedSpans);
686
+ if (isUnderCollapsedAncestor(span)) return;
687
+ if (collapsible && !isEndEvent) return;
688
+ const parentBranch = branchOf(parentSpan);
689
+ const ownBranch = branchOf(span);
690
+ const ownPid = span.meta.pid;
691
+ const parentPid = parentSpan?.meta.pid;
692
+ const spanHasMiddle = span.events.some((spanEvent) => !isSpanBeginEvent(spanEvent) && !isSpanEndEvent(spanEvent));
693
+ const isProcessBoundary = ownPid != null && parentPid != null && ownPid !== parentPid && spanHasMiddle;
694
+ let branch;
695
+ let parents;
696
+ if (span.id === "<main>") {
697
+ branch = MAIN_BRANCH;
698
+ parents = builder.computeParents(lastInSpanContext(null));
699
+ } else if (collapsible) {
700
+ branch = parentBranch;
701
+ parents = builder.computeParents(lastInSpanContext(parentSpan));
702
+ } else if (isBeginEvent) {
703
+ branch = isProcessBoundary ? ownBranch : parentBranch;
704
+ parents = builder.computeParents(lastInSpanContext(parentSpan));
705
+ } else if (isEndEvent) {
706
+ branch = isProcessBoundary ? MAIN_BRANCH : parentBranch;
707
+ parents = builder.computeParents(CommitSelector.unionAll(CommitSelector.branch(branch).pipe(CommitSelector.compose(CommitSelector.last())), CommitSelector.branch(ownBranch).pipe(CommitSelector.compose(CommitSelector.last()))));
708
+ } else {
709
+ branch = ownBranch;
710
+ parents = builder.computeParents(lastInSpanContext(span));
711
+ }
712
+ const commitId = formatCommitId(span, globalIndex++, presentation.idSuffix);
713
+ const shimmer = shouldShimmerInProgressCommit(event, toolCallContext);
714
+ const commit = {
715
+ id: commitId,
716
+ branch,
717
+ parents,
718
+ timestamp: new Date(event.timestamp),
719
+ icon: presentation.icon,
720
+ level: presentation.level,
721
+ message: presentation.message,
722
+ ...shimmer && { tags: [SHIMMER_EFFECT_TAG] }
723
+ };
724
+ builder.addCommit(commit);
725
+ details[commitId] = event;
726
+ lastCommitIdBySpan.set(span.id, commitId);
727
+ if (isBeginEvent && !collapsible && span.id !== "<main>") beginCommitIdBySpan.set(span.id, commitId);
728
+ };
729
+ const finishSpan = (span) => {
730
+ const pid = span.meta.pid;
731
+ if (pid) emitRunningIndicator(Process.ID.make(pid));
732
+ if (span.id === "<main>" || isCompletedSpan(span)) return;
733
+ if (pid && insertedRunningPids.has(pid)) return;
734
+ const lastCommitId = lastCommitIdBySpan.get(span.id);
735
+ if (lastCommitId) builder.addTag(lastCommitId, SHIMMER_EFFECT_TAG);
736
+ };
737
+ const emitSpanCommits = (span) => {
738
+ for (let eventIndex = 0; eventIndex < span.events.length; eventIndex += 1) {
739
+ const event = span.events[eventIndex];
740
+ if (isSpanBeginEvent(event)) emitEventCommit(span, event, eventIndex);
741
+ }
742
+ for (const child of span.children) emitSpanCommits(child);
743
+ for (let eventIndex = 0; eventIndex < span.events.length; eventIndex += 1) {
744
+ const event = span.events[eventIndex];
745
+ if (!isSpanBeginEvent(event)) emitEventCommit(span, event, eventIndex);
746
+ }
747
+ finishSpan(span);
748
+ };
749
+ emitSpanCommits(root);
750
+ for (const process of activeProcesses) emitRunningIndicator(process.pid);
751
+ const { commits, branches } = builder.build();
752
+ return {
753
+ commits,
754
+ branches,
755
+ details
756
+ };
757
+ };
758
+ var formatCommitId = (span, globalIndex, suffix) => {
759
+ const base = `${span.id}:${globalIndex}`;
760
+ return suffix ? `${base}:${suffix}` : base;
761
+ };
762
+ var trimText = (text) => text.slice(0, 100).trim().split("\n")[0];
763
+ var CommitSelector = {
764
+ make: (select) => ({
765
+ select,
766
+ pipe(...args) {
767
+ return Pipeable.pipeArguments(this, args);
768
+ }
769
+ }),
770
+ identity: () => CommitSelector.make((commits) => commits),
771
+ /**
772
+ * Selects commits that match the given predicate.
773
+ */
774
+ filter: (predicate) => CommitSelector.make((commits) => commits.filter(predicate)),
775
+ /**
776
+ * Selects commits by id.
777
+ */
778
+ id: (id) => CommitSelector.filter((commit) => commit.id === id),
779
+ /**
780
+ * Selects commits by tag.
781
+ */
782
+ tag: (tag) => CommitSelector.filter((commit) => tag && commit.tags?.includes(tag)),
783
+ /**
784
+ * Selects commits by if any of the given tags are present.
785
+ */
786
+ anyTags: (tags) => CommitSelector.filter((commit) => tags.some((tag) => tag && commit.tags?.includes(tag))),
787
+ /**
788
+ * Selects commits by branch.
789
+ */
790
+ branch: (branch) => CommitSelector.filter((commit) => branch && commit.branch === branch),
791
+ /**
792
+ * Chains two selectors together, applying the second selector to the result of the first.
793
+ *
794
+ * Example:
795
+ *
796
+ * ```
797
+ * CommitSelector.tag('tag').pipe(CommitSelector.compose(CommitSelector.branch('main')));
798
+ * ```
799
+ */
800
+ compose: (next) => (prev) => CommitSelector.make((commits) => next.select(prev.select(commits))),
801
+ /**
802
+ * If `prev` selector matches no commits, return `next` selector, otherwise return `prev` selector.
803
+ * Same as `CommitSelector.firstOf(prev, next)`.
804
+ *
805
+ * Example:
806
+ *
807
+ * ```
808
+ * CommitSelector.tag('tag').pipe(CommitSelector.orElse(CommitSelector.branch('main')));
809
+ * ```
810
+ */
811
+ orElse: (next) => (prev) => CommitSelector.make((commits) => {
812
+ const selected = prev.select(commits);
813
+ if (selected.length > 0) return selected;
814
+ return next.select(commits);
815
+ }),
816
+ /**
817
+ * Selects commits that match either of the given selectors.
818
+ */
819
+ andAlso: (next) => (prev) => CommitSelector.unionAll(prev, next),
820
+ /**
821
+ * Selects the first n commits.
822
+ */
823
+ first: (n = 1) => CommitSelector.make((commits) => commits.slice(0, n)),
824
+ /**
825
+ * Selects the last n commits (reverses the order of the commits).
826
+ */
827
+ last: (n = 1) => CommitSelector.make((commits) => commits.toReversed().slice(0, n)),
828
+ /**
829
+ * Selects commits that do not match the given selector.
830
+ */
831
+ not: (selector) => CommitSelector.make((commits) => {
832
+ const selected = selector.select(commits);
833
+ return commits.filter((commit) => !selected.includes(commit));
834
+ }),
835
+ /**
836
+ * Selects commits that match any of the given selectors.
837
+ */
838
+ unionAll: (...selectors) => CommitSelector.make((commits) => {
839
+ return Array.dedupeWith(selectors.flatMap((selector) => selector.select(commits)), (a, b) => a.id === b.id);
840
+ }),
841
+ /**
842
+ * Selects commits that match all of the given selectors.
843
+ */
844
+ intersectAll: (...selectors) => CommitSelector.make((commits) => {
845
+ const selected = selectors.map((selector) => selector.select(commits));
846
+ if (selected.length === 0) return [];
847
+ return selected[0].filter((commit) => selected.every((selected) => selected.some((c) => c.id === commit.id)));
848
+ }),
849
+ /**
850
+ * Returns the result of the first selector that matches any commits.
851
+ */
852
+ firstOf: (...selectors) => CommitSelector.make((commits) => {
853
+ for (const selector of selectors) {
854
+ const selected = selector.select(commits);
855
+ if (selected.length > 0) return selected;
856
+ }
857
+ return [];
858
+ })
859
+ };
860
+ var GraphBuilder = class {
861
+ #commits = [];
862
+ #branches = /* @__PURE__ */ new Set();
863
+ findCommits(selector) {
864
+ return selector.select(this.#commits);
865
+ }
866
+ hasBranch(branch) {
867
+ return this.#branches.has(branch);
868
+ }
869
+ addCommit(commit) {
870
+ this.addBranch(commit.branch);
871
+ this.#commits.push(commit);
872
+ }
873
+ addTag(commitId, tag) {
874
+ const index = this.#commits.findIndex((commit) => commit.id === commitId);
875
+ if (index < 0) return;
876
+ const commit = this.#commits[index];
877
+ if (commit.tags?.includes(tag)) return;
878
+ this.#commits[index] = {
879
+ ...commit,
880
+ tags: [...commit.tags ?? [], tag]
881
+ };
882
+ }
883
+ /**
884
+ * Computes parents — picks first matching commit's id.
885
+ */
886
+ computeParents(selector) {
887
+ return Array.dedupe(selector.select(this.#commits).map((commit) => commit.id));
888
+ }
889
+ addBranch(branch) {
890
+ this.#branches.add(branch);
891
+ }
892
+ /**
893
+ * Removes duplicate commits and dangling parents.
894
+ */
895
+ doctor() {
896
+ this.#commits = pipe(this.#commits, Array.dedupeWith((a, b) => a.id === b.id), Array.map(Struct.evolve({ parents: (parents) => parents ? Array.filter(parents, (id) => this.#commits.some((commit) => commit.id === id)) : void 0 })));
897
+ }
898
+ build() {
899
+ this.doctor();
900
+ return {
901
+ commits: this.#commits,
902
+ branches: [...this.#branches]
903
+ };
904
+ }
905
+ };
906
+ //#endregion
907
+ //#region src/execution-graph/pending-block-status.ts
908
+ /**
909
+ * Approximate streamed token count from partial text (UTF-8 length / 4).
910
+ */
911
+ var estimateTokenCount = (text) => Math.max(1, Math.ceil(new TextEncoder().encode(text).length / 4));
912
+ var formatOperationInputStatus = (data) => {
913
+ return `Calling ${data.name ?? data.key} (${new TextEncoder().encode(JSON.stringify(data.input)).length} bytes)...`;
914
+ };
915
+ /** Raw routine status updates (e.g. `Running 01KVB9WBRG…`) carry an opaque ULID, not a useful label. */
916
+ var ROUTINE_ULID_STATUS = /^Running [0-9A-HJKMNP-TV-Z]{26}$/i;
917
+ /**
918
+ * Formats a pending assistant block for the delegated-task status line.
919
+ */
920
+ var formatPendingBlockStatus = (block) => {
921
+ if (!block.pending) return;
922
+ if (block._tag === "text") return `Generating ${estimateTokenCount(block.text)} tokens....`;
923
+ if (block._tag === "toolCall") {
924
+ const bytes = new TextEncoder().encode(block.input).length;
925
+ return `Calling ${block.operationName ?? block.name} (${bytes} bytes)...`;
926
+ }
927
+ };
928
+ /**
929
+ * Reads the latest pending partial block from an ephemeral trace message.
930
+ */
931
+ var pendingStatusFromEphemeralMessage = (message) => {
932
+ for (const event of message.events) {
933
+ if (Trace.isOfType(PartialBlock, event)) {
934
+ const status = formatPendingBlockStatus(event.data.block);
935
+ if (status) return status;
936
+ continue;
937
+ }
938
+ if (Trace.isOfType(Trace.OperationInput, event)) return formatOperationInputStatus(event.data);
939
+ if (Trace.isOfType(Trace.StatusUpdate, event)) {
940
+ const message = event.data.message?.trim();
941
+ if (!message || ROUTINE_ULID_STATUS.test(message)) continue;
942
+ return message;
943
+ }
944
+ }
945
+ };
946
+ /**
947
+ * Maps an ephemeral trace message to a task-status update.
948
+ *
949
+ * The status line is "sticky": a message without a pending line (e.g. a completed block during an
950
+ * LLM-thinking gap) leaves the previous line in place rather than clearing it, so the row keeps
951
+ * showing the latest meaningful activity until a new line arrives or the subscription ends.
952
+ */
953
+ var resolveEphemeralStatusUpdate = (message) => {
954
+ const line = pendingStatusFromEphemeralMessage(message);
955
+ if (line) return { line };
956
+ return "unchanged";
957
+ };
958
+ //#endregion
959
+ export { BEGIN_EVENT_TYPES, CommitSelector, DEFAULT_SPAN_TIMEOUT_MS, END_EVENT_TYPES, ROOT_SPAN_ID, buildExecutionGraph, buildSpanTree, collectProcessActivityLines, deriveInFlightActivityLine, estimateTokenCount, flattenSpanTree, formatPendingBlockStatus, isSpanBeginEvent, isSpanEndEvent, pendingStatusFromEphemeralMessage, resolveEphemeralStatusUpdate, walkSpanTree };
960
+
961
+ //# sourceMappingURL=execution-graph.mjs.map