@dxos/plugin-assistant 0.8.4-main.e8ec1fe → 0.8.4-main.effb148878

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 (813) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/AgentArticle-UPXYXYFJ.mjs +166 -0
  4. package/dist/lib/neutral/AgentArticle-UPXYXYFJ.mjs.map +7 -0
  5. package/dist/lib/neutral/AgentProperties-W6LD56IB.mjs +40 -0
  6. package/dist/lib/neutral/AgentProperties-W6LD56IB.mjs.map +7 -0
  7. package/dist/lib/neutral/AssistantPlugin.mjs +10 -0
  8. package/dist/lib/neutral/AssistantPlugin.node.mjs +62 -0
  9. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +7 -0
  10. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +40 -0
  11. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +7 -0
  12. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs +40 -0
  13. package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +7 -0
  14. package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs +27 -0
  15. package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs.map +7 -0
  16. package/dist/lib/neutral/ChatArticle-WVAFZPVI.mjs +8 -0
  17. package/dist/lib/neutral/ChatCompanion-PA5WC4ND.mjs +133 -0
  18. package/dist/lib/neutral/ChatCompanion-PA5WC4ND.mjs.map +7 -0
  19. package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs +72 -0
  20. package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs.map +7 -0
  21. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs +28 -0
  22. package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +7 -0
  23. package/dist/lib/neutral/RoutineArticle-HWB5ZQ6O.mjs +119 -0
  24. package/dist/lib/neutral/RoutineArticle-HWB5ZQ6O.mjs.map +7 -0
  25. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs +48 -0
  26. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs.map +7 -0
  27. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs +17 -0
  28. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs.map +7 -0
  29. package/dist/lib/neutral/TracePanel-75DMDJEB.mjs +136 -0
  30. package/dist/lib/neutral/TracePanel-75DMDJEB.mjs.map +7 -0
  31. package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs +92 -0
  32. package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs.map +7 -0
  33. package/dist/lib/neutral/ai-context-ERNAJDGG.mjs +42 -0
  34. package/dist/lib/neutral/ai-context-ERNAJDGG.mjs.map +7 -0
  35. package/dist/lib/neutral/ai-service-7SQH5S4F.mjs +34 -0
  36. package/dist/lib/neutral/ai-service-7SQH5S4F.mjs.map +7 -0
  37. package/dist/lib/neutral/app-graph-builder-VBWAKZE5.mjs +199 -0
  38. package/dist/lib/neutral/app-graph-builder-VBWAKZE5.mjs.map +7 -0
  39. package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs +32 -0
  40. package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs.map +7 -0
  41. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  42. package/dist/lib/neutral/capabilities/index.mjs +37 -0
  43. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-5H6UJHLF.mjs +30 -0
  45. package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-6UMJI6ON.mjs +110 -0
  47. package/dist/lib/neutral/chunk-6UMJI6ON.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-CJXRQ2YX.mjs +386 -0
  49. package/dist/lib/neutral/chunk-CJXRQ2YX.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-JUCBGMF3.mjs +8 -0
  51. package/dist/lib/neutral/chunk-JUCBGMF3.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-SLIPV6NN.mjs +106 -0
  53. package/dist/lib/neutral/chunk-SLIPV6NN.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-ZWY6Y5IW.mjs +41 -0
  55. package/dist/lib/neutral/chunk-ZWY6Y5IW.mjs.map +7 -0
  56. package/dist/lib/neutral/companion-chat-provisioner-7RTSXL6M.mjs +116 -0
  57. package/dist/lib/neutral/companion-chat-provisioner-7RTSXL6M.mjs.map +7 -0
  58. package/dist/lib/neutral/components/index.mjs +2373 -0
  59. package/dist/lib/neutral/components/index.mjs.map +7 -0
  60. package/dist/lib/neutral/containers/index.mjs +29 -0
  61. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  62. package/dist/lib/neutral/create-chat-QQZURUBW.mjs +71 -0
  63. package/dist/lib/neutral/create-chat-QQZURUBW.mjs.map +7 -0
  64. package/dist/lib/neutral/create-object-XPVVVEKF.mjs +89 -0
  65. package/dist/lib/neutral/create-object-XPVVVEKF.mjs.map +7 -0
  66. package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs +21 -0
  67. package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs.map +7 -0
  68. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs +58 -0
  69. package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs.map +7 -0
  70. package/dist/lib/neutral/execution-graph/index.mjs +658 -0
  71. package/dist/lib/neutral/execution-graph/index.mjs.map +7 -0
  72. package/dist/lib/neutral/hooks/index.mjs +952 -0
  73. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  74. package/dist/lib/neutral/index.mjs +32 -0
  75. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +24 -0
  76. package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +7 -0
  77. package/dist/lib/neutral/markdown-KTBFOMFM.mjs +110 -0
  78. package/dist/lib/neutral/markdown-KTBFOMFM.mjs.map +7 -0
  79. package/dist/lib/neutral/meta.json +1 -0
  80. package/dist/lib/neutral/meta.mjs +12 -0
  81. package/dist/lib/neutral/migrations-7DEMVBOG.mjs +28 -0
  82. package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +7 -0
  83. package/dist/lib/neutral/on-create-space-Q2R7OSP6.mjs +19 -0
  84. package/dist/lib/neutral/on-create-space-Q2R7OSP6.mjs.map +7 -0
  85. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs +13 -0
  86. package/dist/lib/neutral/operation-handler-SF36MOB5.mjs.map +7 -0
  87. package/dist/lib/neutral/operations/index.mjs +8 -0
  88. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  89. package/dist/lib/neutral/plugin.mjs +16 -0
  90. package/dist/lib/neutral/plugin.mjs.map +7 -0
  91. package/dist/lib/neutral/react-surface-CC6J7D4K.mjs +174 -0
  92. package/dist/lib/neutral/react-surface-CC6J7D4K.mjs.map +7 -0
  93. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs +22 -0
  94. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +7 -0
  95. package/dist/lib/neutral/run-prompt-in-new-chat-KPXN5YJ2.mjs +102 -0
  96. package/dist/lib/neutral/run-prompt-in-new-chat-KPXN5YJ2.mjs.map +7 -0
  97. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs +48 -0
  98. package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs.map +7 -0
  99. package/dist/lib/neutral/settings-W4BLWQ53.mjs +28 -0
  100. package/dist/lib/neutral/settings-W4BLWQ53.mjs.map +7 -0
  101. package/dist/lib/neutral/state-H3G7QCU6.mjs +28 -0
  102. package/dist/lib/neutral/state-H3G7QCU6.mjs.map +7 -0
  103. package/dist/lib/neutral/testing.mjs +8 -0
  104. package/dist/lib/neutral/testing.mjs.map +7 -0
  105. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +21 -0
  106. package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +7 -0
  107. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs +14 -0
  108. package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs.map +7 -0
  109. package/dist/lib/neutral/translations.mjs +175 -0
  110. package/dist/lib/neutral/translations.mjs.map +7 -0
  111. package/dist/lib/neutral/types/index.mjs +20 -0
  112. package/dist/lib/neutral/types/index.mjs.map +7 -0
  113. package/dist/lib/neutral/update-chat-name-ENXRUMDJ.mjs +54 -0
  114. package/dist/lib/neutral/update-chat-name-ENXRUMDJ.mjs.map +7 -0
  115. package/dist/types/src/AssistantPlugin.d.ts +3 -1
  116. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  117. package/dist/types/src/AssistantPlugin.node.d.ts +4 -0
  118. package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -0
  119. package/dist/types/src/AssistantPlugin.test.d.ts +2 -0
  120. package/dist/types/src/AssistantPlugin.test.d.ts.map +1 -0
  121. package/dist/types/src/AssistantPlugin.workerd.d.ts +4 -0
  122. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -0
  123. package/dist/types/src/blueprints/assistant/blueprint.d.ts +4 -0
  124. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -0
  125. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts +2 -0
  126. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts.map +1 -0
  127. package/dist/types/src/blueprints/assistant/index.d.ts +2 -0
  128. package/dist/types/src/blueprints/assistant/index.d.ts.map +1 -0
  129. package/dist/types/src/blueprints/index.d.ts +2 -0
  130. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/ai-context.d.ts +6 -0
  132. package/dist/types/src/capabilities/ai-context.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/ai-service.d.ts +5 -2
  134. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
  135. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  136. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  137. package/dist/types/src/capabilities/blueprint-definition.d.ts +4 -6
  138. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  139. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +9 -0
  140. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -0
  141. package/dist/types/src/capabilities/create-object.d.ts +31 -0
  142. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  143. package/dist/types/src/capabilities/edge-model-resolver.d.ts +6 -3
  144. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  145. package/dist/types/src/capabilities/index.d.ts +56 -12
  146. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  147. package/dist/types/src/capabilities/local-model-resolver.d.ts +9 -3
  148. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  149. package/dist/types/src/capabilities/markdown.d.ts +5 -0
  150. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  151. package/dist/types/src/capabilities/migrations.d.ts +6 -0
  152. package/dist/types/src/capabilities/migrations.d.ts.map +1 -0
  153. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  154. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  155. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  156. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  157. package/dist/types/src/capabilities/settings.d.ts +4 -2
  158. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  159. package/dist/types/src/capabilities/state.d.ts +19 -2
  160. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  161. package/dist/types/src/capabilities/toolkit.d.ts +4 -2
  162. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  163. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts +7 -0
  164. package/dist/types/src/components/AgentProperties/AgentProperties.d.ts.map +1 -0
  165. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts +15 -0
  166. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -0
  167. package/dist/types/src/components/AgentProperties/index.d.ts +2 -0
  168. package/dist/types/src/components/AgentProperties/index.d.ts.map +1 -0
  169. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +4 -4
  170. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  171. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts +15 -0
  172. package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -0
  173. package/dist/types/src/components/AssistantSettings/index.d.ts +1 -1
  174. package/dist/types/src/components/AssistantSettings/index.d.ts.map +1 -1
  175. package/dist/types/src/components/Chat/Chat.d.ts +42 -43
  176. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  177. package/dist/types/src/components/Chat/context.d.ts +29 -0
  178. package/dist/types/src/components/Chat/context.d.ts.map +1 -0
  179. package/dist/types/src/components/Chat/events.d.ts +1 -1
  180. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  181. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +2 -1
  182. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  183. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts +12 -0
  184. package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts.map +1 -0
  185. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +10 -6
  186. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  187. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +19 -0
  188. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -0
  189. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -1
  190. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +28 -0
  191. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -0
  192. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +5 -5
  193. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  194. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts +20 -0
  195. package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts.map +1 -0
  196. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
  197. package/dist/types/src/components/ChatPrompt/index.d.ts +3 -0
  198. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  199. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts +14 -0
  200. package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -0
  201. package/dist/types/src/components/ChatThread/ChatThread.d.ts +8 -5
  202. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  203. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +11 -311
  204. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  205. package/dist/types/src/components/ChatThread/Link.d.ts +2 -2
  206. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
  207. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +42 -0
  208. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -0
  209. package/dist/types/src/components/ChatThread/registry.d.ts +19 -1
  210. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  211. package/dist/types/src/components/ChatThread/sync.d.ts +47 -20
  212. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
  213. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts +18 -0
  214. package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +1 -0
  215. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts +2 -0
  216. package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +1 -0
  217. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts +8 -0
  218. package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts.map +1 -0
  219. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts +25 -0
  220. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts.map +1 -0
  221. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts +18 -0
  222. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -0
  223. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts +9 -0
  224. package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -0
  225. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts +14 -0
  226. package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts.map +1 -0
  227. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts +12 -0
  228. package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts.map +1 -0
  229. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts +12 -0
  230. package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts.map +1 -0
  231. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts +11 -0
  232. package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -0
  233. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts +5 -0
  234. package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -0
  235. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts +9 -0
  236. package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -0
  237. package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts +15 -0
  238. package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts.map +1 -0
  239. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +5 -0
  240. package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -0
  241. package/dist/types/src/components/ChatThread/widgets/index.d.ts +10 -0
  242. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -0
  243. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +11 -0
  244. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -0
  245. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +7 -0
  246. package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -0
  247. package/dist/types/src/components/ProcessTree/index.d.ts +2 -0
  248. package/dist/types/src/components/ProcessTree/index.d.ts.map +1 -0
  249. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts +7 -0
  250. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts.map +1 -0
  251. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts +15 -0
  252. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts.map +1 -0
  253. package/dist/types/src/components/RoutineProperties/index.d.ts +2 -0
  254. package/dist/types/src/components/RoutineProperties/index.d.ts.map +1 -0
  255. package/dist/types/src/components/TaskList/TaskList.d.ts +10 -0
  256. package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -0
  257. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +16 -0
  258. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -0
  259. package/dist/types/src/components/TaskList/index.d.ts +2 -0
  260. package/dist/types/src/components/TaskList/index.d.ts.map +1 -0
  261. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +6 -5
  262. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  263. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +1 -300
  264. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  265. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +12 -3
  266. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  267. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +2 -301
  268. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  269. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -1
  270. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -1
  271. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +5 -14
  272. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
  273. package/dist/types/src/components/Toolbox/Toolbox.d.ts +14 -13
  274. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  275. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -300
  276. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  277. package/dist/types/src/components/index.d.ts +6 -6
  278. package/dist/types/src/components/index.d.ts.map +1 -1
  279. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +6 -0
  280. package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -0
  281. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +21 -0
  282. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -0
  283. package/dist/types/src/containers/AgentArticle/index.d.ts +2 -0
  284. package/dist/types/src/containers/AgentArticle/index.d.ts.map +1 -0
  285. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +6 -0
  286. package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -0
  287. package/dist/types/src/containers/AgentProperties/index.d.ts +2 -0
  288. package/dist/types/src/containers/AgentProperties/index.d.ts.map +1 -0
  289. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +6 -0
  290. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -0
  291. package/dist/types/src/containers/BlueprintArticle/index.d.ts +2 -0
  292. package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +1 -0
  293. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +12 -0
  294. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -0
  295. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts +15 -0
  296. package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts.map +1 -0
  297. package/dist/types/src/containers/ChatArticle/index.d.ts +2 -0
  298. package/dist/types/src/containers/ChatArticle/index.d.ts.map +1 -0
  299. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +26 -0
  300. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -0
  301. package/dist/types/src/containers/ChatCompanion/index.d.ts +2 -0
  302. package/dist/types/src/containers/ChatCompanion/index.d.ts.map +1 -0
  303. package/dist/types/src/{components → containers/ChatDialog}/ChatDialog.d.ts +2 -3
  304. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -0
  305. package/dist/types/src/containers/ChatDialog/index.d.ts +2 -0
  306. package/dist/types/src/containers/ChatDialog/index.d.ts.map +1 -0
  307. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +6 -0
  308. package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -0
  309. package/dist/types/src/containers/PlanArticle/index.d.ts +2 -0
  310. package/dist/types/src/containers/PlanArticle/index.d.ts.map +1 -0
  311. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +6 -0
  312. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +1 -0
  313. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +15 -0
  314. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +1 -0
  315. package/dist/types/src/containers/RoutineArticle/index.d.ts +2 -0
  316. package/dist/types/src/containers/RoutineArticle/index.d.ts.map +1 -0
  317. package/dist/types/src/containers/RoutineList/RoutineList.d.ts +6 -0
  318. package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +1 -0
  319. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +21 -0
  320. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +1 -0
  321. package/dist/types/src/containers/RoutineList/index.d.ts +2 -0
  322. package/dist/types/src/containers/RoutineList/index.d.ts.map +1 -0
  323. package/dist/types/src/containers/TracePanel/TracePanel.d.ts +8 -0
  324. package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -0
  325. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts +15 -0
  326. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -0
  327. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts +19 -0
  328. package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts.map +1 -0
  329. package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts +2 -0
  330. package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts.map +1 -0
  331. package/dist/types/src/containers/TracePanel/index.d.ts +4 -0
  332. package/dist/types/src/containers/TracePanel/index.d.ts.map +1 -0
  333. package/dist/types/src/containers/TracePanel/testing/index.d.ts +3 -0
  334. package/dist/types/src/containers/TracePanel/testing/index.d.ts.map +1 -0
  335. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +14 -0
  336. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -0
  337. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts +12 -0
  338. package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts.map +1 -0
  339. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +5 -0
  340. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -0
  341. package/dist/types/src/containers/TriggerStatus/index.d.ts +2 -0
  342. package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -0
  343. package/dist/types/src/containers/index.d.ts +13 -0
  344. package/dist/types/src/containers/index.d.ts.map +1 -0
  345. package/dist/types/src/execution-graph/execution-graph.d.ts +108 -0
  346. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -0
  347. package/dist/types/src/execution-graph/execution-graph.test.d.ts +2 -0
  348. package/dist/types/src/execution-graph/execution-graph.test.d.ts.map +1 -0
  349. package/dist/types/src/execution-graph/index.d.ts +3 -0
  350. package/dist/types/src/execution-graph/index.d.ts.map +1 -0
  351. package/dist/types/src/execution-graph/remote-snapshot.test.d.ts +2 -0
  352. package/dist/types/src/execution-graph/remote-snapshot.test.d.ts.map +1 -0
  353. package/dist/types/src/execution-graph/span-tree.d.ts +76 -0
  354. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -0
  355. package/dist/types/src/execution-graph/span-tree.test.d.ts +2 -0
  356. package/dist/types/src/execution-graph/span-tree.test.d.ts.map +1 -0
  357. package/dist/types/src/execution-graph/testing/collect-trace-events.d.ts +40 -0
  358. package/dist/types/src/execution-graph/testing/collect-trace-events.d.ts.map +1 -0
  359. package/dist/types/src/execution-graph/testing/index.d.ts +2 -0
  360. package/dist/types/src/execution-graph/testing/index.d.ts.map +1 -0
  361. package/dist/types/src/extensions/index.d.ts +2 -0
  362. package/dist/types/src/extensions/index.d.ts.map +1 -0
  363. package/dist/types/src/extensions/prompt-extension.d.ts +10 -0
  364. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -0
  365. package/dist/types/src/feed-logger.d.ts +13 -0
  366. package/dist/types/src/feed-logger.d.ts.map +1 -0
  367. package/dist/types/src/hooks/index.d.ts +3 -1
  368. package/dist/types/src/hooks/index.d.ts.map +1 -1
  369. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +57 -11
  370. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
  371. package/dist/types/src/hooks/useChatKeymap.d.ts +12 -0
  372. package/dist/types/src/hooks/useChatKeymap.d.ts.map +1 -0
  373. package/dist/types/src/hooks/useChatProcessor.d.ts +8 -7
  374. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  375. package/dist/types/src/hooks/useChatServices.d.ts +9 -8
  376. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  377. package/dist/types/src/hooks/useChatToolbarActions.d.ts +3 -3
  378. package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
  379. package/dist/types/src/hooks/useContextBinder.d.ts +4 -3
  380. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  381. package/dist/types/src/hooks/useContextObjects.d.ts +10 -9
  382. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
  383. package/dist/types/src/hooks/useDebug.d.ts +10 -0
  384. package/dist/types/src/hooks/useDebug.d.ts.map +1 -0
  385. package/dist/types/src/hooks/useFilteredTypes.d.ts +3 -0
  386. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -0
  387. package/dist/types/src/hooks/useFlush.d.ts +1 -1
  388. package/dist/types/src/hooks/useFlush.d.ts.map +1 -1
  389. package/dist/types/src/hooks/usePresets.d.ts +1 -1
  390. package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
  391. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  392. package/dist/types/src/index.d.ts +1 -6
  393. package/dist/types/src/index.d.ts.map +1 -1
  394. package/dist/types/src/meta.d.ts +4 -2
  395. package/dist/types/src/meta.d.ts.map +1 -1
  396. package/dist/types/src/operations/create-chat.d.ts +5 -0
  397. package/dist/types/src/operations/create-chat.d.ts.map +1 -0
  398. package/dist/types/src/operations/ensure-companion-chat.d.ts +5 -0
  399. package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -0
  400. package/dist/types/src/operations/index.d.ts +3 -0
  401. package/dist/types/src/operations/index.d.ts.map +1 -0
  402. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  403. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  404. package/dist/types/src/operations/prompt.node.test.d.ts +2 -0
  405. package/dist/types/src/operations/prompt.node.test.d.ts.map +1 -0
  406. package/dist/types/src/operations/resolve-navigation-targets.d.ts +17 -0
  407. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -0
  408. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +5 -0
  409. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -0
  410. package/dist/types/src/operations/set-current-chat.d.ts +5 -0
  411. package/dist/types/src/operations/set-current-chat.d.ts.map +1 -0
  412. package/dist/types/src/operations/toggle-trace-panel-debug.d.ts +5 -0
  413. package/dist/types/src/operations/toggle-trace-panel-debug.d.ts.map +1 -0
  414. package/dist/types/src/operations/update-chat-name.d.ts +5 -0
  415. package/dist/types/src/operations/update-chat-name.d.ts.map +1 -0
  416. package/dist/types/src/plugin.d.ts +4 -0
  417. package/dist/types/src/plugin.d.ts.map +1 -0
  418. package/dist/types/src/processor/index.d.ts +0 -1
  419. package/dist/types/src/processor/index.d.ts.map +1 -1
  420. package/dist/types/src/processor/presets.d.ts +1 -1
  421. package/dist/types/src/processor/presets.d.ts.map +1 -1
  422. package/dist/types/src/processor/processor.d.ts +257 -36
  423. package/dist/types/src/processor/processor.d.ts.map +1 -1
  424. package/dist/types/src/processor/processor.node.test.d.ts +2 -0
  425. package/dist/types/src/processor/processor.node.test.d.ts.map +1 -0
  426. package/dist/types/src/testing/index.d.ts +2 -0
  427. package/dist/types/src/testing/index.d.ts.map +1 -1
  428. package/dist/types/src/testing/snapshot.d.ts +21 -0
  429. package/dist/types/src/testing/snapshot.d.ts.map +1 -0
  430. package/dist/types/src/testing/test-generator.d.ts +2 -2
  431. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  432. package/dist/types/src/testing/test-generator.test.d.ts +2 -0
  433. package/dist/types/src/testing/test-generator.test.d.ts.map +1 -0
  434. package/dist/types/src/testing/test-sequence.d.ts +10 -3
  435. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  436. package/dist/types/src/testing/test-services.d.ts +1 -1
  437. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  438. package/dist/types/src/testing/test-trace.d.ts +5 -0
  439. package/dist/types/src/testing/test-trace.d.ts.map +1 -0
  440. package/dist/types/src/testing/trace-timeline.node.test.d.ts +2 -0
  441. package/dist/types/src/testing/trace-timeline.node.test.d.ts.map +1 -0
  442. package/dist/types/src/testing.d.ts +2 -0
  443. package/dist/types/src/testing.d.ts.map +1 -0
  444. package/dist/types/src/translations.d.ts +2 -300
  445. package/dist/types/src/translations.d.ts.map +1 -1
  446. package/dist/types/src/types/Assistant.d.ts +34 -45
  447. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  448. package/dist/types/src/types/AssistantCapabilities.d.ts +30 -0
  449. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -0
  450. package/dist/types/src/types/AssistantEvents.d.ts +3 -0
  451. package/dist/types/src/types/AssistantEvents.d.ts.map +1 -0
  452. package/dist/types/src/types/AssistantOperation.d.ts +145 -0
  453. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -0
  454. package/dist/types/src/types/Settings.d.ts +27 -0
  455. package/dist/types/src/types/Settings.d.ts.map +1 -0
  456. package/dist/types/src/types/index.d.ts +4 -2
  457. package/dist/types/src/types/index.d.ts.map +1 -1
  458. package/dist/types/src/types/service.d.ts +10 -219
  459. package/dist/types/src/types/service.d.ts.map +1 -1
  460. package/dist/types/src/util/suggestions.d.ts +9 -0
  461. package/dist/types/src/util/suggestions.d.ts.map +1 -0
  462. package/dist/types/src/util/suggestions.test.d.ts +2 -0
  463. package/dist/types/src/util/suggestions.test.d.ts.map +1 -0
  464. package/dist/types/tsconfig.tsbuildinfo +1 -1
  465. package/package.json +206 -112
  466. package/src/AssistantPlugin.node.ts +71 -0
  467. package/src/AssistantPlugin.test.ts +49 -0
  468. package/src/AssistantPlugin.ts +140 -0
  469. package/src/AssistantPlugin.workerd.ts +41 -0
  470. package/src/blueprints/assistant/blueprint.node.test.ts +46 -0
  471. package/src/blueprints/assistant/blueprint.ts +31 -0
  472. package/src/blueprints/assistant/index.ts +5 -0
  473. package/src/{components/ChatProgress → blueprints}/index.ts +1 -1
  474. package/src/capabilities/ai-context.ts +85 -0
  475. package/src/capabilities/ai-service.ts +34 -17
  476. package/src/capabilities/app-graph-builder.ts +174 -187
  477. package/src/capabilities/blueprint-definition.ts +47 -57
  478. package/src/capabilities/companion-chat-provisioner.ts +163 -0
  479. package/src/capabilities/create-object.ts +98 -0
  480. package/src/capabilities/edge-model-resolver.ts +22 -14
  481. package/src/capabilities/index.ts +24 -14
  482. package/src/capabilities/local-model-resolver.ts +31 -13
  483. package/src/capabilities/markdown.ts +40 -0
  484. package/src/capabilities/migrations.ts +28 -0
  485. package/src/capabilities/operation-handler.ts +16 -0
  486. package/src/capabilities/react-surface.tsx +160 -73
  487. package/src/capabilities/settings.ts +24 -12
  488. package/src/capabilities/state.ts +26 -13
  489. package/src/capabilities/toolkit.ts +7 -11
  490. package/src/components/AgentProperties/AgentProperties.stories.tsx +74 -0
  491. package/src/components/AgentProperties/AgentProperties.tsx +102 -0
  492. package/src/components/AgentProperties/index.ts +5 -0
  493. package/src/components/AssistantSettings/AssistantSettings.stories.tsx +35 -0
  494. package/src/components/AssistantSettings/AssistantSettings.tsx +30 -99
  495. package/src/components/AssistantSettings/index.ts +2 -2
  496. package/src/components/Chat/Chat.tsx +128 -259
  497. package/src/components/Chat/context.ts +39 -0
  498. package/src/components/Chat/events.ts +1 -1
  499. package/src/components/ChatPrompt/ChatActions.tsx +34 -14
  500. package/src/components/ChatPrompt/ChatMcpErrors.tsx +50 -0
  501. package/src/components/ChatPrompt/ChatOptions.stories.tsx +136 -0
  502. package/src/components/ChatPrompt/ChatOptions.tsx +299 -81
  503. package/src/components/ChatPrompt/ChatPrompt.tsx +182 -0
  504. package/src/components/ChatPrompt/ChatReferences.tsx +26 -16
  505. package/src/components/ChatPrompt/ChatStatus.tsx +123 -0
  506. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +2 -2
  507. package/src/components/ChatPrompt/index.ts +3 -0
  508. package/src/components/ChatThread/Anchor.stories.tsx +95 -0
  509. package/src/components/ChatThread/ChatThread.stories.tsx +71 -80
  510. package/src/components/ChatThread/ChatThread.tsx +50 -24
  511. package/src/components/ChatThread/DEBUG.md +41 -0
  512. package/src/components/ChatThread/Link.tsx +6 -6
  513. package/src/components/ChatThread/MarkdownStream.stories.tsx +281 -0
  514. package/src/components/ChatThread/registry.tsx +172 -56
  515. package/src/components/ChatThread/sync.test.ts +193 -25
  516. package/src/components/ChatThread/sync.ts +96 -94
  517. package/src/components/ChatThread/testing/reasoning.md +25 -0
  518. package/src/components/ChatThread/testing/thinking.md +21 -0
  519. package/src/components/ChatThread/testing/thread-1.md +30 -0
  520. package/src/components/ChatThread/testing/{thread.md → thread-2.md} +19 -0
  521. package/src/components/ChatThread/testing/thread-widgets.md +79 -0
  522. package/src/components/ChatThread/tool-widget-state.test.ts +34 -0
  523. package/src/components/ChatThread/tool-widget-state.ts +48 -0
  524. package/src/components/ChatThread/widgets/FallbackWidget.tsx +26 -0
  525. package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +68 -0
  526. package/src/components/ChatThread/widgets/ReasoningWidget.ts +133 -0
  527. package/src/components/ChatThread/widgets/ReferenceWidget.ts +33 -0
  528. package/src/components/ChatThread/widgets/SelectWidget.ts +39 -0
  529. package/src/components/ChatThread/widgets/StatsWidget.ts +31 -0
  530. package/src/components/ChatThread/widgets/StatusWidget.ts +53 -0
  531. package/src/components/ChatThread/widgets/SuggestionWidget.ts +41 -0
  532. package/src/components/ChatThread/widgets/SummaryWidget.tsx +27 -0
  533. package/src/components/ChatThread/widgets/ToolWidget.stories.tsx +55 -0
  534. package/src/components/ChatThread/widgets/ToolWidget.tsx +156 -0
  535. package/src/components/ChatThread/widgets/defaults.ts +8 -0
  536. package/src/components/ChatThread/widgets/index.ts +13 -0
  537. package/src/components/ProcessTree/ProcessTree.stories.tsx +83 -0
  538. package/src/components/ProcessTree/ProcessTree.tsx +122 -0
  539. package/src/components/ProcessTree/index.ts +5 -0
  540. package/src/components/RoutineProperties/RoutineProperties.stories.tsx +59 -0
  541. package/src/components/RoutineProperties/RoutineProperties.tsx +23 -0
  542. package/src/components/RoutineProperties/index.ts +5 -0
  543. package/src/components/TaskList/TaskList.stories.tsx +44 -0
  544. package/src/components/TaskList/TaskList.tsx +45 -0
  545. package/src/components/TaskList/index.ts +5 -0
  546. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +8 -12
  547. package/src/components/TemplateEditor/TemplateEditor.tsx +54 -43
  548. package/src/components/TemplateEditor/TemplateForm.stories.tsx +21 -15
  549. package/src/components/TemplateEditor/TemplateForm.tsx +111 -86
  550. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +15 -10
  551. package/src/components/ToolBlock/ToolBlock.tsx +26 -25
  552. package/src/components/Toolbox/Toolbox.stories.tsx +16 -18
  553. package/src/components/Toolbox/Toolbox.tsx +74 -68
  554. package/src/components/index.ts +6 -7
  555. package/src/containers/AgentArticle/AgentArticle.stories.tsx +120 -0
  556. package/src/containers/AgentArticle/AgentArticle.tsx +197 -0
  557. package/src/containers/AgentArticle/index.ts +5 -0
  558. package/src/containers/AgentProperties/AgentProperties.tsx +43 -0
  559. package/src/containers/AgentProperties/index.ts +5 -0
  560. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +29 -0
  561. package/src/containers/BlueprintArticle/index.ts +5 -0
  562. package/src/containers/ChatArticle/ChatArticle.stories.tsx +76 -0
  563. package/src/containers/ChatArticle/ChatArticle.tsx +107 -0
  564. package/src/containers/ChatArticle/index.ts +5 -0
  565. package/src/containers/ChatCompanion/ChatCompanion.tsx +133 -0
  566. package/src/containers/ChatCompanion/index.ts +5 -0
  567. package/src/{components → containers/ChatDialog}/ChatDialog.tsx +14 -23
  568. package/src/containers/ChatDialog/index.ts +5 -0
  569. package/src/containers/PlanArticle/PlanArticle.tsx +33 -0
  570. package/src/containers/PlanArticle/index.ts +5 -0
  571. package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +75 -0
  572. package/src/containers/RoutineArticle/RoutineArticle.tsx +109 -0
  573. package/src/containers/RoutineArticle/index.ts +5 -0
  574. package/src/containers/RoutineList/RoutineList.stories.tsx +130 -0
  575. package/src/containers/RoutineList/RoutineList.tsx +50 -0
  576. package/src/containers/RoutineList/index.ts +5 -0
  577. package/src/containers/TracePanel/TracePanel.stories.tsx +319 -0
  578. package/src/containers/TracePanel/TracePanel.tsx +213 -0
  579. package/src/containers/TracePanel/dxn-extractor.test.ts +153 -0
  580. package/src/containers/TracePanel/dxn-extractor.ts +168 -0
  581. package/src/containers/TracePanel/index.ts +9 -0
  582. package/src/containers/TracePanel/testing/index.ts +6 -0
  583. package/src/containers/TracePanel/testing/simulated-agent.ts +114 -0
  584. package/src/containers/TracePanel/testing/snapshot-playback.ts +45 -0
  585. package/src/containers/TriggerStatus/TriggerStatus.tsx +129 -0
  586. package/src/containers/TriggerStatus/index.ts +5 -0
  587. package/src/containers/index.ts +17 -0
  588. package/src/execution-graph/SPEC.md +678 -0
  589. package/src/execution-graph/execution-graph.test.ts +799 -0
  590. package/src/execution-graph/execution-graph.ts +714 -0
  591. package/src/execution-graph/index.ts +24 -0
  592. package/src/execution-graph/remote-snapshot.test.ts +116 -0
  593. package/src/execution-graph/span-tree.test.ts +249 -0
  594. package/src/execution-graph/span-tree.ts +259 -0
  595. package/src/execution-graph/testing/collect-trace-events.ts +74 -0
  596. package/src/execution-graph/testing/index.ts +5 -0
  597. package/src/extensions/index.ts +5 -0
  598. package/src/extensions/prompt-extension.ts +111 -0
  599. package/src/{queue-logger.ts → feed-logger.ts} +48 -20
  600. package/src/hooks/index.ts +3 -1
  601. package/src/hooks/useBlueprintRegistry.ts +48 -28
  602. package/src/hooks/useChatKeymap.ts +52 -0
  603. package/src/hooks/useChatProcessor.ts +57 -25
  604. package/src/hooks/useChatServices.ts +14 -37
  605. package/src/hooks/useChatToolbarActions.ts +98 -100
  606. package/src/hooks/useContextBinder.ts +22 -9
  607. package/src/hooks/useContextObjects.ts +20 -27
  608. package/src/hooks/useDebug.ts +38 -0
  609. package/src/hooks/useFilteredTypes.ts +37 -0
  610. package/src/hooks/usePresets.ts +2 -1
  611. package/src/hooks/useReferencesProvider.ts +11 -23
  612. package/src/index.ts +1 -7
  613. package/src/meta.ts +29 -8
  614. package/src/operations/create-chat.ts +84 -0
  615. package/src/operations/ensure-companion-chat.ts +63 -0
  616. package/src/operations/index.ts +16 -0
  617. package/src/operations/on-create-space.ts +24 -0
  618. package/src/operations/prompt.node.test.ts +80 -0
  619. package/src/operations/resolve-navigation-targets.ts +31 -0
  620. package/src/operations/run-prompt-in-new-chat.ts +113 -0
  621. package/src/operations/set-current-chat.ts +49 -0
  622. package/src/operations/toggle-trace-panel-debug.ts +27 -0
  623. package/src/operations/update-chat-name.ts +61 -0
  624. package/src/plugin.ts +11 -0
  625. package/src/processor/index.ts +0 -1
  626. package/src/processor/presets.ts +11 -3
  627. package/src/processor/processor.node.test.ts +41 -0
  628. package/src/processor/processor.ts +284 -160
  629. package/src/testing/data/trace-timeline-multiple.dx.json +1 -0
  630. package/src/testing/data/trace-timeline-remote.dx.json +1 -0
  631. package/src/testing/data/trace-timeline.dx.json +4657 -0
  632. package/src/testing/index.ts +2 -0
  633. package/src/testing/snapshot.ts +35 -0
  634. package/src/testing/test-generator.test.ts +71 -0
  635. package/src/testing/test-generator.ts +214 -191
  636. package/src/testing/test-sequence.ts +6 -6
  637. package/src/testing/test-services.ts +9 -7
  638. package/src/testing/test-trace.ts +20 -0
  639. package/src/testing/trace-timeline.node.conversations.json +1 -0
  640. package/src/testing/trace-timeline.node.test.ts +250 -0
  641. package/src/testing.ts +9 -0
  642. package/src/translations.ts +160 -87
  643. package/src/types/Assistant.ts +17 -54
  644. package/src/types/AssistantCapabilities.ts +35 -0
  645. package/src/types/AssistantEvents.ts +11 -0
  646. package/src/types/AssistantOperation.ts +152 -0
  647. package/src/types/Settings.ts +82 -0
  648. package/src/types/index.ts +8 -2
  649. package/src/types/service.ts +9 -11
  650. package/src/util/suggestions.test.ts +52 -0
  651. package/src/util/suggestions.ts +42 -0
  652. package/dist/lib/browser/BlueprintArticle-IMCR3642.mjs +0 -36
  653. package/dist/lib/browser/BlueprintArticle-IMCR3642.mjs.map +0 -7
  654. package/dist/lib/browser/ChatCompanion-JYD2RIBJ.mjs +0 -158
  655. package/dist/lib/browser/ChatCompanion-JYD2RIBJ.mjs.map +0 -7
  656. package/dist/lib/browser/ChatContainer-XCPBWYIR.mjs +0 -77
  657. package/dist/lib/browser/ChatContainer-XCPBWYIR.mjs.map +0 -7
  658. package/dist/lib/browser/ChatDialog-DT7KFCRL.mjs +0 -90
  659. package/dist/lib/browser/ChatDialog-DT7KFCRL.mjs.map +0 -7
  660. package/dist/lib/browser/PromptArticle-45QX25Y5.mjs +0 -59
  661. package/dist/lib/browser/PromptArticle-45QX25Y5.mjs.map +0 -7
  662. package/dist/lib/browser/ai-service-ERTZBTP3.mjs +0 -19
  663. package/dist/lib/browser/ai-service-ERTZBTP3.mjs.map +0 -7
  664. package/dist/lib/browser/app-graph-builder-VZEXMDTY.mjs +0 -199
  665. package/dist/lib/browser/app-graph-builder-VZEXMDTY.mjs.map +0 -7
  666. package/dist/lib/browser/blueprint-definition-5FT5JGPY.mjs +0 -12
  667. package/dist/lib/browser/chunk-2BOE3OTW.mjs +0 -262
  668. package/dist/lib/browser/chunk-2BOE3OTW.mjs.map +0 -7
  669. package/dist/lib/browser/chunk-BNTPFZ7O.mjs +0 -229
  670. package/dist/lib/browser/chunk-BNTPFZ7O.mjs.map +0 -7
  671. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs +0 -335
  672. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs.map +0 -7
  673. package/dist/lib/browser/chunk-IXIIS4QA.mjs +0 -176
  674. package/dist/lib/browser/chunk-IXIIS4QA.mjs.map +0 -7
  675. package/dist/lib/browser/chunk-LRE4VEZV.mjs +0 -16
  676. package/dist/lib/browser/chunk-LRE4VEZV.mjs.map +0 -7
  677. package/dist/lib/browser/chunk-U62BTGDF.mjs +0 -1929
  678. package/dist/lib/browser/chunk-U62BTGDF.mjs.map +0 -7
  679. package/dist/lib/browser/chunk-WBG5PTSX.mjs +0 -23
  680. package/dist/lib/browser/chunk-WBG5PTSX.mjs.map +0 -7
  681. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +0 -18
  682. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +0 -7
  683. package/dist/lib/browser/index.mjs +0 -382
  684. package/dist/lib/browser/index.mjs.map +0 -7
  685. package/dist/lib/browser/intent-resolver-AK5O4GUW.mjs +0 -143
  686. package/dist/lib/browser/intent-resolver-AK5O4GUW.mjs.map +0 -7
  687. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs +0 -17
  688. package/dist/lib/browser/local-model-resolver-34MVHRKD.mjs.map +0 -7
  689. package/dist/lib/browser/meta.json +0 -1
  690. package/dist/lib/browser/react-surface-YCSR2MSR.mjs +0 -98
  691. package/dist/lib/browser/react-surface-YCSR2MSR.mjs.map +0 -7
  692. package/dist/lib/browser/settings-NYJGNQ5I.mjs +0 -23
  693. package/dist/lib/browser/settings-NYJGNQ5I.mjs.map +0 -7
  694. package/dist/lib/browser/state-GG7Z3NB7.mjs +0 -25
  695. package/dist/lib/browser/state-GG7Z3NB7.mjs.map +0 -7
  696. package/dist/lib/browser/toolkit-VYDAWNE4.mjs +0 -17
  697. package/dist/lib/browser/toolkit-VYDAWNE4.mjs.map +0 -7
  698. package/dist/lib/browser/types/index.mjs +0 -19
  699. package/dist/lib/node-esm/BlueprintArticle-OL2HUY6Q.mjs +0 -37
  700. package/dist/lib/node-esm/BlueprintArticle-OL2HUY6Q.mjs.map +0 -7
  701. package/dist/lib/node-esm/ChatCompanion-AHKJS25S.mjs +0 -159
  702. package/dist/lib/node-esm/ChatCompanion-AHKJS25S.mjs.map +0 -7
  703. package/dist/lib/node-esm/ChatContainer-K7OGPE3G.mjs +0 -78
  704. package/dist/lib/node-esm/ChatContainer-K7OGPE3G.mjs.map +0 -7
  705. package/dist/lib/node-esm/ChatDialog-QT6ZBX45.mjs +0 -91
  706. package/dist/lib/node-esm/ChatDialog-QT6ZBX45.mjs.map +0 -7
  707. package/dist/lib/node-esm/PromptArticle-OUKFSJQV.mjs +0 -60
  708. package/dist/lib/node-esm/PromptArticle-OUKFSJQV.mjs.map +0 -7
  709. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +0 -20
  710. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +0 -7
  711. package/dist/lib/node-esm/app-graph-builder-VRN6ESRR.mjs +0 -200
  712. package/dist/lib/node-esm/app-graph-builder-VRN6ESRR.mjs.map +0 -7
  713. package/dist/lib/node-esm/blueprint-definition-XW6QQVLV.mjs +0 -13
  714. package/dist/lib/node-esm/chunk-3Q22TTXW.mjs +0 -264
  715. package/dist/lib/node-esm/chunk-3Q22TTXW.mjs.map +0 -7
  716. package/dist/lib/node-esm/chunk-AB74FOA2.mjs +0 -230
  717. package/dist/lib/node-esm/chunk-AB74FOA2.mjs.map +0 -7
  718. package/dist/lib/node-esm/chunk-BHS747K7.mjs +0 -1930
  719. package/dist/lib/node-esm/chunk-BHS747K7.mjs.map +0 -7
  720. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  721. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs +0 -336
  722. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs.map +0 -7
  723. package/dist/lib/node-esm/chunk-UXTUHH24.mjs +0 -178
  724. package/dist/lib/node-esm/chunk-UXTUHH24.mjs.map +0 -7
  725. package/dist/lib/node-esm/chunk-WE6KTH72.mjs +0 -25
  726. package/dist/lib/node-esm/chunk-WE6KTH72.mjs.map +0 -7
  727. package/dist/lib/node-esm/chunk-YWFWT57N.mjs +0 -17
  728. package/dist/lib/node-esm/chunk-YWFWT57N.mjs.map +0 -7
  729. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs +0 -19
  730. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +0 -7
  731. package/dist/lib/node-esm/index.mjs +0 -383
  732. package/dist/lib/node-esm/index.mjs.map +0 -7
  733. package/dist/lib/node-esm/intent-resolver-L2F3N45L.mjs +0 -144
  734. package/dist/lib/node-esm/intent-resolver-L2F3N45L.mjs.map +0 -7
  735. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs +0 -18
  736. package/dist/lib/node-esm/local-model-resolver-TP2NTSAX.mjs.map +0 -7
  737. package/dist/lib/node-esm/meta.json +0 -1
  738. package/dist/lib/node-esm/react-surface-CTW44GEM.mjs +0 -99
  739. package/dist/lib/node-esm/react-surface-CTW44GEM.mjs.map +0 -7
  740. package/dist/lib/node-esm/settings-RRHYI5KO.mjs +0 -24
  741. package/dist/lib/node-esm/settings-RRHYI5KO.mjs.map +0 -7
  742. package/dist/lib/node-esm/state-FSUHFMDM.mjs +0 -26
  743. package/dist/lib/node-esm/state-FSUHFMDM.mjs.map +0 -7
  744. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs +0 -18
  745. package/dist/lib/node-esm/toolkit-HFJZLVIR.mjs.map +0 -7
  746. package/dist/lib/node-esm/types/index.mjs +0 -20
  747. package/dist/types/src/capabilities/capabilities.d.ts +0 -10
  748. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  749. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  750. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  751. package/dist/types/src/components/BlueprintArticle.d.ts +0 -7
  752. package/dist/types/src/components/BlueprintArticle.d.ts.map +0 -1
  753. package/dist/types/src/components/ChatCompanion.d.ts +0 -13
  754. package/dist/types/src/components/ChatCompanion.d.ts.map +0 -1
  755. package/dist/types/src/components/ChatContainer.d.ts +0 -14
  756. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  757. package/dist/types/src/components/ChatDialog.d.ts.map +0 -1
  758. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +0 -7
  759. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +0 -1
  760. package/dist/types/src/components/ChatProgress/index.d.ts +0 -2
  761. package/dist/types/src/components/ChatProgress/index.d.ts.map +0 -1
  762. package/dist/types/src/components/ChatThread/reducers.d.ts +0 -40
  763. package/dist/types/src/components/ChatThread/reducers.d.ts.map +0 -1
  764. package/dist/types/src/components/PromptArticle.d.ts +0 -7
  765. package/dist/types/src/components/PromptArticle.d.ts.map +0 -1
  766. package/dist/types/src/events.d.ts +0 -4
  767. package/dist/types/src/events.d.ts.map +0 -1
  768. package/dist/types/src/functions/analysis.d.ts +0 -5
  769. package/dist/types/src/functions/analysis.d.ts.map +0 -1
  770. package/dist/types/src/functions/index.d.ts +0 -4
  771. package/dist/types/src/functions/index.d.ts.map +0 -1
  772. package/dist/types/src/functions/object-list.d.ts +0 -10
  773. package/dist/types/src/functions/object-list.d.ts.map +0 -1
  774. package/dist/types/src/functions/object-load.d.ts +0 -8
  775. package/dist/types/src/functions/object-load.d.ts.map +0 -1
  776. package/dist/types/src/hooks/useItemTypes.d.ts +0 -4
  777. package/dist/types/src/hooks/useItemTypes.d.ts.map +0 -1
  778. package/dist/types/src/processor/processor.test.d.ts +0 -2
  779. package/dist/types/src/processor/processor.test.d.ts.map +0 -1
  780. package/dist/types/src/processor/update-name.d.ts +0 -10
  781. package/dist/types/src/processor/update-name.d.ts.map +0 -1
  782. package/dist/types/src/queue-logger.d.ts +0 -11
  783. package/dist/types/src/queue-logger.d.ts.map +0 -1
  784. package/dist/types/src/types/AssistantAction.d.ts +0 -132
  785. package/dist/types/src/types/AssistantAction.d.ts.map +0 -1
  786. package/dist/types/src/types/defs.d.ts +0 -2
  787. package/dist/types/src/types/defs.d.ts.map +0 -1
  788. package/src/AssistantPlugin.tsx +0 -185
  789. package/src/capabilities/capabilities.ts +0 -17
  790. package/src/capabilities/intent-resolver.ts +0 -147
  791. package/src/components/BlueprintArticle.tsx +0 -29
  792. package/src/components/ChatCompanion.tsx +0 -155
  793. package/src/components/ChatContainer.tsx +0 -61
  794. package/src/components/ChatProgress/ChatProgress.tsx +0 -67
  795. package/src/components/ChatThread/reducers.ts +0 -151
  796. package/src/components/PromptArticle.tsx +0 -51
  797. package/src/events.ts +0 -11
  798. package/src/functions/analysis.ts +0 -22
  799. package/src/functions/index.ts +0 -7
  800. package/src/functions/object-list.ts +0 -48
  801. package/src/functions/object-load.ts +0 -45
  802. package/src/hooks/useItemTypes.ts +0 -37
  803. package/src/processor/processor.test.ts +0 -71
  804. package/src/processor/update-name.ts +0 -56
  805. package/src/types/AssistantAction.ts +0 -79
  806. package/src/types/defs.ts +0 -5
  807. /package/dist/lib/{browser/blueprint-definition-5FT5JGPY.mjs.map → neutral/AssistantPlugin.mjs.map} +0 -0
  808. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChatArticle-WVAFZPVI.mjs.map} +0 -0
  809. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  810. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  811. /package/dist/lib/{node-esm/blueprint-definition-XW6QQVLV.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  812. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  813. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -0,0 +1,714 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Array from 'effect/Array';
6
+ import * as Either from 'effect/Either';
7
+ import { pipe } from 'effect/Function';
8
+ import * as Pipeable from 'effect/Pipeable';
9
+ import * as Schema from 'effect/Schema';
10
+ import * as Struct from 'effect/Struct';
11
+
12
+ import { AgentRequestBegin, AgentRequestEnd, CompleteBlock } from '@dxos/assistant';
13
+ import { Process, Trace } from '@dxos/compute';
14
+ import { AGENT_PROCESS_KEY } from '@dxos/functions-runtime';
15
+ import { LogLevel, log } from '@dxos/log';
16
+ import { type Commit } from '@dxos/react-ui-components';
17
+ import { type ContentBlock } from '@dxos/types';
18
+
19
+ import { ROOT_SPAN_ID, type Span, buildSpanTree, isSpanBeginEvent, isSpanEndEvent, walkSpanTree } from './span-tree';
20
+
21
+ /**
22
+ * Branch name for top-level operation invocations.
23
+ */
24
+ const MAIN_BRANCH = 'main';
25
+
26
+ const ICONS = {
27
+ agentRequestBegin: {
28
+ icon: 'ph--atom--regular',
29
+ level: LogLevel.VERBOSE,
30
+ },
31
+ agentRequestEnd: {
32
+ icon: 'ph--atom--regular',
33
+ level: LogLevel.INFO,
34
+ },
35
+ userMessage: {
36
+ icon: 'ph--user--regular',
37
+ level: LogLevel.VERBOSE,
38
+ },
39
+ statusMessage: {
40
+ icon: 'ph--info--regular',
41
+ level: LogLevel.VERBOSE,
42
+ },
43
+ operationStart: {
44
+ icon: 'ph--function--regular',
45
+ level: LogLevel.VERBOSE,
46
+ },
47
+ operationEndSuccess: {
48
+ icon: 'ph--function--regular',
49
+ level: LogLevel.INFO,
50
+ },
51
+ operationEndError: {
52
+ icon: 'ph--function--regular',
53
+ level: LogLevel.ERROR,
54
+ },
55
+ toolCall: {
56
+ icon: 'ph--wrench--regular',
57
+ level: LogLevel.VERBOSE,
58
+ },
59
+ toolResultSuccess: {
60
+ icon: 'ph--wrench--regular',
61
+ level: LogLevel.INFO,
62
+ },
63
+ toolResultError: {
64
+ icon: 'ph--wrench--regular',
65
+ level: LogLevel.ERROR,
66
+ },
67
+ agentRequestRunning: {
68
+ icon: 'ph--spinner-gap--regular',
69
+ level: LogLevel.VERBOSE,
70
+ },
71
+ processRunning: {
72
+ icon: 'ph--spinner-gap--regular',
73
+ level: LogLevel.VERBOSE,
74
+ },
75
+ } as const;
76
+
77
+ export interface BuildExecutionGraphParams {
78
+ traceMessages: Trace.Message[];
79
+ activeProcesses?: readonly Process.Info[];
80
+ eventLimit?: number;
81
+ }
82
+
83
+ /**
84
+ * Builds a Timeline-compatible execution graph from trace messages and active processes.
85
+ *
86
+ * The conversion runs in two stages:
87
+ * 1. `buildSpanTree` converts the flat list of trace messages into a hierarchical
88
+ * tree of spans grouped by process id (pid). See `./span-tree.ts`.
89
+ * 2. `spanTreeToCommits` walks the tree and emits one commit per event, using the
90
+ * tree structure to decide which branch each commit belongs to and how to wire parents.
91
+ *
92
+ * Pure function — no signals or atoms.
93
+ */
94
+ export type ExecutionGraph = {
95
+ branches: string[];
96
+ commits: Commit[];
97
+ spanTree: Span;
98
+ /** Commit id -> trace event. */
99
+ details: ExecutionGraphDetailsMap;
100
+ };
101
+
102
+ export type ExecutionGraphDetailsMap = Record<string, Trace.FlatEvent | undefined>;
103
+
104
+ export const buildExecutionGraph = ({
105
+ traceMessages,
106
+ activeProcesses = [],
107
+ eventLimit = 500,
108
+ }: BuildExecutionGraphParams): ExecutionGraph => {
109
+ const spanTree = buildSpanTree(traceMessages, { eventLimit });
110
+ const toolCallContext = buildToolCallContext(traceMessages);
111
+ const built = spanTreeToCommits(spanTree, activeProcesses, toolCallContext);
112
+ log('trace execution graph', {
113
+ traceMessages: traceMessages.length,
114
+ commits: built.commits.length,
115
+ branches: built.branches.length,
116
+ activeProcesses: activeProcesses.length,
117
+ });
118
+ return { ...built, spanTree };
119
+ };
120
+
121
+ /**
122
+ * Lookup tables that pair `toolCall` blocks with their matching `toolResult` blocks so the
123
+ * renderer can collapse the two events into a single commit (mirroring how begin/end events of
124
+ * an empty operation span collapse). Indexed by the shared `toolCallId`.
125
+ */
126
+ interface ToolCallContext {
127
+ callById: Map<string, ContentBlock.ToolCall>;
128
+ resultByCallId: Map<string, ContentBlock.ToolResult>;
129
+ }
130
+
131
+ const buildToolCallContext = (messages: readonly Trace.Message[]): ToolCallContext => {
132
+ const callById = new Map<string, ContentBlock.ToolCall>();
133
+ const resultByCallId = new Map<string, ContentBlock.ToolResult>();
134
+ for (const message of messages) {
135
+ for (const event of message.events) {
136
+ if (event.type !== CompleteBlock.key) {
137
+ continue;
138
+ }
139
+ const data = event.data as { block?: ContentBlock.Any } | undefined;
140
+ const block = data?.block;
141
+ if (!block) {
142
+ continue;
143
+ }
144
+ if (block._tag === 'toolCall') {
145
+ callById.set(block.toolCallId, block);
146
+ } else if (block._tag === 'toolResult') {
147
+ resultByCallId.set(block.toolCallId, block);
148
+ }
149
+ }
150
+ }
151
+ return { callById, resultByCallId };
152
+ };
153
+
154
+ /**
155
+ * Visual representation of a single trace event — icon, log level, message string.
156
+ * `undefined` indicates that the event should not produce a commit.
157
+ */
158
+ interface EventPresentation {
159
+ icon: string;
160
+ level: LogLevel;
161
+ message: string;
162
+ idSuffix?: string;
163
+ }
164
+
165
+ const presentEvent = (event: Trace.FlatEvent, toolCallContext: ToolCallContext): EventPresentation | undefined => {
166
+ if (Trace.isOfType(AgentRequestBegin, event)) {
167
+ if (Either.isLeft(Schema.validateEither(AgentRequestBegin.schema)(event.data))) {
168
+ log('invalid trace event', { type: event.type });
169
+ return undefined;
170
+ }
171
+ return {
172
+ icon: ICONS.agentRequestBegin.icon,
173
+ level: ICONS.agentRequestBegin.level,
174
+ message: 'Agent processing request...',
175
+ };
176
+ }
177
+ if (Trace.isOfType(AgentRequestEnd, event)) {
178
+ if (Either.isLeft(Schema.validateEither(AgentRequestEnd.schema)(event.data))) {
179
+ log('invalid trace event', { type: event.type });
180
+ return undefined;
181
+ }
182
+ return {
183
+ icon: ICONS.agentRequestEnd.icon,
184
+ level: ICONS.agentRequestEnd.level,
185
+ message: 'Agent completed request',
186
+ };
187
+ }
188
+ if (Trace.isOfType(CompleteBlock, event)) {
189
+ if (Either.isLeft(Schema.validateEither(CompleteBlock.schema)(event.data))) {
190
+ log('invalid trace event', { type: event.type });
191
+ return undefined;
192
+ }
193
+ switch (event.data.block._tag) {
194
+ case 'text':
195
+ return event.data.role === 'user'
196
+ ? {
197
+ icon: ICONS.userMessage.icon,
198
+ level: ICONS.userMessage.level,
199
+ message: trimText(event.data.block.text),
200
+ }
201
+ : undefined;
202
+ case 'status':
203
+ return {
204
+ icon: ICONS.statusMessage.icon,
205
+ level: ICONS.statusMessage.level,
206
+ message: trimText(event.data.block.statusText),
207
+ };
208
+ case 'toolCall': {
209
+ // Operation-backed tool calls already have a dedicated routine span (Trace.OperationStart /
210
+ // Trace.OperationEnd) that produces its own commits — skip the duplicate toolCall commit
211
+ // to avoid double-rendering.
212
+ if (event.data.block.operationKey) {
213
+ return undefined;
214
+ }
215
+ // Collapse the toolCall/toolResult pair: when the matching toolResult has arrived, the
216
+ // result event is the visible commit and carries the success/error state. The toolCall
217
+ // itself only renders while still pending (i.e. no result yet) — same intent as an
218
+ // operation span that collapses to a single end commit once both boundaries are present.
219
+ if (toolCallContext.resultByCallId.has(event.data.block.toolCallId)) {
220
+ return undefined;
221
+ }
222
+ return {
223
+ icon: ICONS.toolCall.icon,
224
+ level: ICONS.toolCall.level,
225
+ message: event.data.block.name,
226
+ idSuffix: `toolCall:${event.data.block.toolCallId}`,
227
+ };
228
+ }
229
+ case 'toolResult': {
230
+ // Suppress results for operation-backed calls — those are covered by the routine span.
231
+ const call = toolCallContext.callById.get(event.data.block.toolCallId);
232
+ if (call?.operationKey) {
233
+ return undefined;
234
+ }
235
+ const success = event.data.block.error === undefined;
236
+ const name = call?.name ?? event.data.block.name;
237
+ return {
238
+ icon: success ? ICONS.toolResultSuccess.icon : ICONS.toolResultError.icon,
239
+ level: success ? ICONS.toolResultSuccess.level : ICONS.toolResultError.level,
240
+ message: `${name} - ${success ? 'Success' : 'Error'}`,
241
+ idSuffix: `toolResult:${event.data.block.toolCallId}`,
242
+ };
243
+ }
244
+ default:
245
+ return undefined;
246
+ }
247
+ }
248
+ if (Trace.isOfType(Trace.OperationStart, event)) {
249
+ if (Either.isLeft(Schema.validateEither(Trace.OperationStart.schema)(event.data))) {
250
+ log('invalid trace event', { type: event.type });
251
+ return undefined;
252
+ }
253
+ return {
254
+ icon: event.data.icon ?? ICONS.operationStart.icon,
255
+ level: ICONS.operationStart.level,
256
+ message: event.data.name ?? event.data.key,
257
+ idSuffix: `${event.data.key}:start`,
258
+ };
259
+ }
260
+ if (Trace.isOfType(Trace.OperationEnd, event)) {
261
+ if (Either.isLeft(Schema.validateEither(Trace.OperationEnd.schema)(event.data))) {
262
+ log('invalid trace event', { type: event.type });
263
+ return undefined;
264
+ }
265
+ const success = event.data.outcome === 'success';
266
+ return {
267
+ icon: event.data.icon ?? (success ? ICONS.operationEndSuccess.icon : ICONS.operationEndError.icon),
268
+ level: success ? ICONS.operationEndSuccess.level : ICONS.operationEndError.level,
269
+ message: `${event.data.name ?? event.data.key} - ${success ? 'Success' : 'Error'}`,
270
+ idSuffix: `${event.data.key}:end`,
271
+ };
272
+ }
273
+ return undefined;
274
+ };
275
+
276
+ /**
277
+ * A span is "collapsible" when it would otherwise render as an empty fork-and-merge:
278
+ * exactly two events that form a begin/end pair and no child sub-spans. In that case
279
+ * we emit a single commit for the end event on the parent branch.
280
+ *
281
+ * A *pending* span (one whose end event has not yet been recorded) is never collapsed:
282
+ * its trailing events should keep rendering as middle commits on the span's own branch
283
+ * — never as a fake "end" commit on the parent branch.
284
+ *
285
+ * Both nested spans and top-level spans (whose parent is the synthetic root) are eligible
286
+ * once they have completed: a span with no inner activity is collapsed regardless of where
287
+ * it sits in the tree.
288
+ */
289
+ const isCollapsibleSpan = (span: Span, parent: Span | null): boolean => {
290
+ if (span.id === ROOT_SPAN_ID) {
291
+ return false;
292
+ }
293
+ if (span.events.length !== 2) {
294
+ return false;
295
+ }
296
+ if (span.children.length > 0) {
297
+ return false;
298
+ }
299
+ const firstEvent = span.events[0];
300
+ const lastEvent = span.events[span.events.length - 1];
301
+ if (!isSpanBeginEvent(firstEvent) || !isSpanEndEvent(lastEvent)) {
302
+ return false;
303
+ }
304
+ return parent !== null;
305
+ };
306
+
307
+ /**
308
+ * Converts a span tree into a flat list of commits + branches suitable for `Timeline` rendering.
309
+ *
310
+ * For every span the algorithm:
311
+ * - emits the **first** event as a "begin" commit on the parent span's branch (fork);
312
+ * - emits **middle** events as commits on the span's own branch;
313
+ * - emits the **last** event as an "end" commit on the parent span's branch with two parents
314
+ * (the begin commit and the last commit on the span's own branch — a merge).
315
+ *
316
+ * Collapsible spans (`isCollapsibleSpan`) emit only the end commit on the parent branch with
317
+ * a single parent — a tidier rendering for sub-operations that have no inner detail.
318
+ *
319
+ * Events are processed in global chronological order so that sub-operations of a span interleave
320
+ * naturally with the span's own middle events.
321
+ */
322
+ const spanTreeToCommits = (
323
+ root: Span,
324
+ activeProcesses: readonly Process.Info[],
325
+ toolCallContext: ToolCallContext,
326
+ ): { branches: string[]; commits: Commit[]; details: ExecutionGraphDetailsMap } => {
327
+ const builder = new GraphBuilder();
328
+ const details: ExecutionGraphDetailsMap = {};
329
+ builder.addBranch(MAIN_BRANCH);
330
+
331
+ // Build a child → parent lookup using the tree's own structure (already correctly parented
332
+ // when the tree was constructed, including sequential spans of the same process).
333
+ const parentBySpan = new Map<Span, Span | null>();
334
+ parentBySpan.set(root, null);
335
+ const indexParents = (span: Span): void => {
336
+ for (const child of span.children) {
337
+ parentBySpan.set(child, span);
338
+ indexParents(child);
339
+ }
340
+ };
341
+ indexParents(root);
342
+
343
+ const findParentSpan = (span: Span): Span | null => parentBySpan.get(span) ?? null;
344
+
345
+ // The branch name for a span is its pid — multiple sequential spans of the same process
346
+ // (e.g. successive agent requests in one session) share a branch so they reuse a single lane.
347
+ const branchOf = (span: Span | null): string => {
348
+ if (!span || span.id === ROOT_SPAN_ID) {
349
+ return MAIN_BRANCH;
350
+ }
351
+ return span.meta.pid ?? span.id;
352
+ };
353
+
354
+ // Selector that returns "the most recent commit in this span's structural context".
355
+ //
356
+ // The walk is structural (pid/parentPid), not topological: at each ancestor, we prefer
357
+ // 1) the last commit on that span's own branch, then
358
+ // 2) that span's begin commit (the fork point on its parent branch),
359
+ // 3) and only then recurse into the parent span.
360
+ //
361
+ // Crucially, we never silently slip onto a *sibling* span's commit on a shared ancestor
362
+ // branch. E.g. if a sub-span of agent A fires before A has any middle commits, we anchor
363
+ // to A.begin — not to whatever unrelated commit happens to be the latest on main.
364
+ // This keeps fork edges visually attached to the correct span even when sibling top-level
365
+ // spans (different pids) overlap in time on main.
366
+ const lastInSpanContext = (span: Span | null): CommitSelector => {
367
+ if (!span || span.id === ROOT_SPAN_ID) {
368
+ return CommitSelector.branch(MAIN_BRANCH).pipe(CommitSelector.compose(CommitSelector.last()));
369
+ }
370
+ const ownBranch = branchOf(span);
371
+ const beginId = beginCommitIdBySpan.get(span.id);
372
+ return CommitSelector.firstOf(
373
+ CommitSelector.branch(ownBranch).pipe(CommitSelector.compose(CommitSelector.last())),
374
+ beginId ? CommitSelector.id(beginId) : CommitSelector.filter(() => false),
375
+ lastInSpanContext(findParentSpan(span)),
376
+ );
377
+ };
378
+
379
+ // Flatten the tree into a chronological stream, recording each event's position within its span
380
+ // so we can detect begin/end events.
381
+ interface EventCursor {
382
+ span: Span;
383
+ event: Trace.FlatEvent;
384
+ eventIndex: number;
385
+ globalIndex: number;
386
+ }
387
+ const stream: EventCursor[] = [];
388
+ walkSpanTree(root, (span) => {
389
+ span.events.forEach((event, eventIndex) => {
390
+ stream.push({ span, event, eventIndex, globalIndex: stream.length });
391
+ });
392
+ });
393
+ stream.sort((a, b) => a.event.timestamp - b.event.timestamp || a.globalIndex - b.globalIndex);
394
+
395
+ // Track the id of the begin commit for each non-collapsible span so the end commit can merge into it.
396
+ const beginCommitIdBySpan = new Map<string, string>();
397
+
398
+ for (const { span, event, globalIndex } of stream) {
399
+ const presentation = presentEvent(event, toolCallContext);
400
+ if (!presentation) {
401
+ continue;
402
+ }
403
+
404
+ // Classify based on event TYPE, not array index. A pending span's trailing
405
+ // middle event (e.g. a user message awaiting an agent response) must not be
406
+ // mistaken for the span's end event — otherwise it would render on the
407
+ // parent branch instead of the span's own branch.
408
+ const isBeginEvent = isSpanBeginEvent(event);
409
+ const isEndEvent = isSpanEndEvent(event);
410
+ const parentSpan = findParentSpan(span);
411
+ const collapsible = isCollapsibleSpan(span, parentSpan);
412
+
413
+ // Collapsed spans: skip the begin event entirely; only the end event renders.
414
+ if (collapsible && isBeginEvent) {
415
+ continue;
416
+ }
417
+
418
+ const parentBranch = branchOf(parentSpan);
419
+ const ownBranch = branchOf(span);
420
+
421
+ let branch: string;
422
+ let parents: string[];
423
+
424
+ if (span.id === ROOT_SPAN_ID) {
425
+ // Root-level events (no pid) attach sequentially to main.
426
+ branch = MAIN_BRANCH;
427
+ parents = builder.computeParents(lastInSpanContext(null));
428
+ } else if (collapsible) {
429
+ // Only the end event reaches here for collapsible spans.
430
+ // Anchor to the parent span's structural context so the fork attaches to the parent
431
+ // — not to a sibling span's commit that happens to be the latest on the shared ancestor.
432
+ branch = parentBranch;
433
+ parents = builder.computeParents(lastInSpanContext(parentSpan));
434
+ } else if (isBeginEvent) {
435
+ // Begin commit: fork off the parent branch, attached to the parent's structural context.
436
+ branch = parentBranch;
437
+ parents = builder.computeParents(lastInSpanContext(parentSpan));
438
+ } else if (isEndEvent) {
439
+ // End commit: continues the parent branch chronologically and merges in own-branch work.
440
+ //
441
+ // Parent #1 is the *immediate predecessor* on the parent branch (not the matching begin
442
+ // commit). Pointing back to the begin commit creates a visual edge that skips over any
443
+ // sibling span's commits emitted between begin and end — e.g. when two top-level Routine
444
+ // spans overlap on main, R1.end would otherwise draw an arrow back to R1.begin that
445
+ // crosses over R2.begin. Anchoring to the previous main commit keeps main linear.
446
+ branch = parentBranch;
447
+ parents = builder.computeParents(
448
+ CommitSelector.unionAll(
449
+ CommitSelector.branch(parentBranch).pipe(CommitSelector.compose(CommitSelector.last())),
450
+ CommitSelector.branch(ownBranch).pipe(CommitSelector.compose(CommitSelector.last())),
451
+ ),
452
+ );
453
+ } else {
454
+ // Middle event: continue the span's own branch; fall back to span's own context so the
455
+ // first middle event of a span forks from the span's begin commit, not from a sibling's
456
+ // commit on an ancestor branch.
457
+ branch = ownBranch;
458
+ parents = builder.computeParents(lastInSpanContext(span));
459
+ }
460
+
461
+ const commitId = formatCommitId(span, globalIndex, presentation.idSuffix);
462
+ const commit: Commit = {
463
+ id: commitId,
464
+ branch,
465
+ parents,
466
+ timestamp: new Date(event.timestamp),
467
+ icon: presentation.icon,
468
+ level: presentation.level,
469
+ message: presentation.message,
470
+ };
471
+ builder.addCommit(commit);
472
+ details[commitId] = event;
473
+
474
+ // Record begin commit so a later end event can merge into it.
475
+ if (isBeginEvent && !collapsible && span.id !== ROOT_SPAN_ID) {
476
+ beginCommitIdBySpan.set(span.id, commitId);
477
+ }
478
+ }
479
+
480
+ // Append "running" indicators for processes that are still active.
481
+ for (const process of activeProcesses) {
482
+ if (
483
+ process.key === AGENT_PROCESS_KEY &&
484
+ process.params.target &&
485
+ (process.state === Process.State.RUNNING || process.state === Process.State.HYBERNATING)
486
+ ) {
487
+ builder.addCommit({
488
+ id: `running:${process.pid}`,
489
+ branch: process.pid,
490
+ parents: builder.computeParents(
491
+ CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),
492
+ ),
493
+ icon: ICONS.agentRequestRunning.icon,
494
+ level: ICONS.agentRequestRunning.level,
495
+ message: 'Generating...',
496
+ timestamp: new Date(),
497
+ });
498
+ } else if (process.state === Process.State.RUNNING && builder.hasBranch(process.pid)) {
499
+ builder.addCommit({
500
+ id: `running:${process.pid}`,
501
+ branch: process.pid,
502
+ parents: builder.computeParents(
503
+ CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),
504
+ ),
505
+ icon: ICONS.processRunning.icon,
506
+ level: ICONS.processRunning.level,
507
+ message: 'Running...',
508
+ timestamp: new Date(),
509
+ });
510
+ }
511
+ }
512
+
513
+ const { commits, branches } = builder.build();
514
+ return { commits, branches, details };
515
+ };
516
+
517
+ const formatCommitId = (span: Span, globalIndex: number, suffix?: string): string => {
518
+ const base = `${span.id}:${globalIndex}`;
519
+ return suffix ? `${base}:${suffix}` : base;
520
+ };
521
+
522
+ const trimText = (text: string) => text.slice(0, 100).trim().split('\n')[0];
523
+
524
+ type Falsy = false | null | undefined;
525
+
526
+ export interface CommitSelector extends Pipeable.Pipeable {
527
+ select: (commits: Commit[]) => Commit[];
528
+ }
529
+
530
+ export const CommitSelector = {
531
+ make: (select: CommitSelector['select']): CommitSelector => ({
532
+ select,
533
+ pipe(...args: any) {
534
+ return Pipeable.pipeArguments(this, args);
535
+ },
536
+ }),
537
+
538
+ identity: (): CommitSelector => CommitSelector.make((commits) => commits),
539
+
540
+ /**
541
+ * Selects commits that match the given predicate.
542
+ */
543
+ filter: (predicate: (commit: Commit) => unknown): CommitSelector =>
544
+ CommitSelector.make((commits) => commits.filter(predicate)),
545
+
546
+ /**
547
+ * Selects commits by id.
548
+ */
549
+ id: (id: string): CommitSelector => CommitSelector.filter((commit) => commit.id === id),
550
+ /**
551
+ * Selects commits by tag.
552
+ */
553
+ tag: (tag: string | Falsy): CommitSelector => CommitSelector.filter((commit) => tag && commit.tags?.includes(tag)),
554
+ /**
555
+ * Selects commits by if any of the given tags are present.
556
+ */
557
+ anyTags: (tags: (string | Falsy)[]): CommitSelector =>
558
+ CommitSelector.filter((commit) => tags.some((tag) => tag && commit.tags?.includes(tag))),
559
+ /**
560
+ * Selects commits by branch.
561
+ */
562
+ branch: (branch: string | Falsy): CommitSelector =>
563
+ CommitSelector.filter((commit) => branch && commit.branch === branch),
564
+
565
+ /**
566
+ * Chains two selectors together, applying the second selector to the result of the first.
567
+ *
568
+ * Example:
569
+ *
570
+ * ```
571
+ * CommitSelector.tag('tag').pipe(CommitSelector.compose(CommitSelector.branch('main')));
572
+ * ```
573
+ */
574
+ compose:
575
+ (next: CommitSelector) =>
576
+ (prev: CommitSelector): CommitSelector =>
577
+ CommitSelector.make((commits) => next.select(prev.select(commits))),
578
+
579
+ /**
580
+ * If `prev` selector matches no commits, return `next` selector, otherwise return `prev` selector.
581
+ * Same as `CommitSelector.firstOf(prev, next)`.
582
+ *
583
+ * Example:
584
+ *
585
+ * ```
586
+ * CommitSelector.tag('tag').pipe(CommitSelector.orElse(CommitSelector.branch('main')));
587
+ * ```
588
+ */
589
+ orElse:
590
+ (next: CommitSelector) =>
591
+ (prev: CommitSelector): CommitSelector =>
592
+ CommitSelector.make((commits) => {
593
+ const selected = prev.select(commits);
594
+ if (selected.length > 0) {
595
+ return selected;
596
+ }
597
+ return next.select(commits);
598
+ }),
599
+
600
+ /**
601
+ * Selects commits that match either of the given selectors.
602
+ */
603
+ andAlso:
604
+ (next: CommitSelector) =>
605
+ (prev: CommitSelector): CommitSelector =>
606
+ CommitSelector.unionAll(prev, next),
607
+
608
+ /**
609
+ * Selects the first n commits.
610
+ */
611
+ first: (n: number = 1): CommitSelector => CommitSelector.make((commits) => commits.slice(0, n)),
612
+ /**
613
+ * Selects the last n commits (reverses the order of the commits).
614
+ */
615
+ last: (n: number = 1): CommitSelector => CommitSelector.make((commits) => commits.toReversed().slice(0, n)),
616
+ /**
617
+ * Selects commits that do not match the given selector.
618
+ */
619
+ not: (selector: CommitSelector): CommitSelector =>
620
+ CommitSelector.make((commits) => {
621
+ const selected = selector.select(commits);
622
+ return commits.filter((commit) => !selected.includes(commit));
623
+ }),
624
+
625
+ /**
626
+ * Selects commits that match any of the given selectors.
627
+ */
628
+ unionAll: (...selectors: CommitSelector[]): CommitSelector =>
629
+ CommitSelector.make((commits) => {
630
+ return Array.dedupeWith(
631
+ selectors.flatMap((selector) => selector.select(commits)),
632
+ (a, b) => a.id === b.id,
633
+ );
634
+ }),
635
+
636
+ /**
637
+ * Selects commits that match all of the given selectors.
638
+ */
639
+ intersectAll: (...selectors: CommitSelector[]): CommitSelector =>
640
+ CommitSelector.make((commits) => {
641
+ const selected = selectors.map((selector) => selector.select(commits));
642
+ if (selected.length === 0) {
643
+ return [];
644
+ }
645
+ return selected[0].filter((commit) => selected.every((selected) => selected.some((c) => c.id === commit.id)));
646
+ }),
647
+
648
+ /**
649
+ * Returns the result of the first selector that matches any commits.
650
+ */
651
+ firstOf: (...selectors: CommitSelector[]): CommitSelector =>
652
+ CommitSelector.make((commits) => {
653
+ for (const selector of selectors) {
654
+ const selected = selector.select(commits);
655
+ if (selected.length > 0) {
656
+ return selected;
657
+ }
658
+ }
659
+ return [];
660
+ }),
661
+ };
662
+
663
+ class GraphBuilder {
664
+ #commits: Commit[] = [];
665
+ #branches = new Set<string>();
666
+
667
+ findCommits(selector: CommitSelector): Commit[] {
668
+ return selector.select(this.#commits);
669
+ }
670
+
671
+ hasBranch(branch: string): boolean {
672
+ return this.#branches.has(branch);
673
+ }
674
+
675
+ addCommit(commit: Commit) {
676
+ this.addBranch(commit.branch);
677
+ this.#commits.push(commit);
678
+ }
679
+
680
+ /**
681
+ * Computes parents — picks first matching commit's id.
682
+ */
683
+ computeParents(selector: CommitSelector): string[] {
684
+ return Array.dedupe(selector.select(this.#commits).map((commit) => commit.id));
685
+ }
686
+
687
+ addBranch(branch: string) {
688
+ this.#branches.add(branch);
689
+ }
690
+
691
+ /**
692
+ * Removes duplicate commits and dangling parents.
693
+ */
694
+ doctor() {
695
+ this.#commits = pipe(
696
+ this.#commits,
697
+ Array.dedupeWith((a, b) => a.id === b.id),
698
+ Array.map(
699
+ Struct.evolve({
700
+ parents: (parents) =>
701
+ parents ? Array.filter(parents, (id) => this.#commits.some((commit) => commit.id === id)) : undefined,
702
+ }),
703
+ ),
704
+ );
705
+ }
706
+
707
+ build() {
708
+ this.doctor();
709
+ return {
710
+ commits: this.#commits,
711
+ branches: [...this.#branches],
712
+ };
713
+ }
714
+ }