@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,24 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export {
6
+ CommitSelector,
7
+ buildExecutionGraph,
8
+ type BuildExecutionGraphParams,
9
+ type ExecutionGraph,
10
+ type ExecutionGraphDetailsMap,
11
+ } from './execution-graph';
12
+ export {
13
+ BEGIN_EVENT_TYPES,
14
+ END_EVENT_TYPES,
15
+ ROOT_SPAN_ID,
16
+ buildSpanTree,
17
+ flattenSpanTree,
18
+ isSpanBeginEvent,
19
+ isSpanEndEvent,
20
+ walkSpanTree,
21
+ type BuildSpanTreeOptions,
22
+ type Span,
23
+ type SpanMeta,
24
+ } from './span-tree';
@@ -0,0 +1,116 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { readFileSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { describe, test } from 'vitest';
8
+
9
+ import { Trace } from '@dxos/compute';
10
+ import { Obj } from '@dxos/echo';
11
+
12
+ import { buildExecutionGraph } from './execution-graph';
13
+
14
+ /**
15
+ * Regression for sub-operations collapsing onto `main` when the event window in `buildSpanTree`
16
+ * dropped the parent span's `operation.start`.
17
+ *
18
+ * The remote trace snapshot has 714 chronological events. The 4th `Run Routine` span hosts every
19
+ * `Create object` / `Add schema` / `List schemas` / `Query` / `Add to context` sub-operation.
20
+ * Its `operation.start` lives near the front of the stream (index 70). Before the fix, the
21
+ * default `eventLimit = 300` would `slice(-300)` away that begin event, leaving the sub-ops'
22
+ * `parentPid` lookup unsatisfied — they ended up as top-level collapsible spans rendering their
23
+ * end commits on `main`.
24
+ */
25
+ describe('TracePanel remote snapshot', () => {
26
+ test('sub-operations land on their parent Routine branch, never on main', ({ expect }) => {
27
+ const messages = loadRemoteTraceMessages(REMOTE_SNAPSHOT);
28
+ const { commits } = buildExecutionGraph({ traceMessages: messages });
29
+
30
+ // Commits whose message starts with one of these names originate from sub-operations
31
+ // (Trace.OperationEnd) — every one should live on the Routine's branch, never on `main`.
32
+ const subOpPrefixes = ['Create object', 'Add schema', 'List schemas', 'Query', 'Add to context'];
33
+ const isSubOpEnd = (message: string | undefined): boolean =>
34
+ message !== undefined && subOpPrefixes.some((prefix) => message.startsWith(prefix));
35
+
36
+ const subOpCommits = commits.filter((commit) => isSubOpEnd(commit.message));
37
+ expect(subOpCommits.length).toBeGreaterThan(0);
38
+
39
+ const onMain = subOpCommits.filter((commit) => commit.branch === 'main');
40
+ expect(onMain).toEqual([]);
41
+
42
+ // All sub-op end commits share the parent Routine's pid as their branch.
43
+ const branches = new Set(subOpCommits.map((commit) => commit.branch));
44
+ expect(branches.size).toBe(1);
45
+ expect(branches.has('main')).toBe(false);
46
+ });
47
+
48
+ test('Routine end commits anchor to the previous main commit, not back to their own begin', ({ expect }) => {
49
+ // Regression: the multi-Routine snapshot has overlapping top-level Routine spans (R2 starts
50
+ // before R1 ends, R4 starts before R3 ends). Previously, R1.end's first parent was
51
+ // R1.begin (looked up by `beginCommitIdBySpan`), which drew an edge across R2.begin in the
52
+ // rendered timeline. The fix anchors end commits to the immediate predecessor on the
53
+ // parent branch (R2.begin) and treats the own-branch tail as a separate merge parent.
54
+ const messages = loadRemoteTraceMessages(MULTI_SNAPSHOT);
55
+ const { commits } = buildExecutionGraph({ traceMessages: messages });
56
+
57
+ const mainCommits = commits.filter((commit) => commit.branch === 'main');
58
+ // Sanity check: 4 begin + 4 end Run-Routine commits on main.
59
+ expect(mainCommits).toHaveLength(8);
60
+
61
+ // For each commit on main, its first parent (if any) must be a commit that appears
62
+ // *earlier* in the main commit sequence — no "skip-back" edges to an older begin commit.
63
+ const idToMainIndex = new Map(mainCommits.map((commit, index) => [commit.id, index]));
64
+ for (let index = 1; index < mainCommits.length; index += 1) {
65
+ const commit = mainCommits[index];
66
+ const onMainParents = (commit.parents ?? []).filter((parentId) => idToMainIndex.has(parentId));
67
+ expect(onMainParents.length).toBeGreaterThan(0);
68
+ for (const parentId of onMainParents) {
69
+ const parentIndex = idToMainIndex.get(parentId)!;
70
+ // Every parent on main must be the immediate predecessor (index - 1). An older parent
71
+ // would render an edge that crosses over the intervening commits.
72
+ expect(parentIndex).toBe(index - 1);
73
+ }
74
+ }
75
+ });
76
+ });
77
+
78
+ const REMOTE_SNAPSHOT = 'trace-timeline-remote.dx.json';
79
+ const MULTI_SNAPSHOT = 'trace-timeline-multiple.dx.json';
80
+
81
+ interface RawMessage {
82
+ meta?: Trace.Meta;
83
+ isEphemeral?: boolean;
84
+ events?: Array<{ type: string; timestamp: number; data: unknown }>;
85
+ }
86
+
87
+ const loadRemoteTraceMessages = (filename: string): Trace.Message[] => {
88
+ const snapshotPath = join(__dirname, '../testing/data', filename);
89
+ const json = JSON.parse(readFileSync(snapshotPath, 'utf8')) as unknown;
90
+
91
+ const messages: Trace.Message[] = [];
92
+ const visit = (node: unknown): void => {
93
+ if (Array.isArray(node)) {
94
+ node.forEach(visit);
95
+ return;
96
+ }
97
+ if (node === null || typeof node !== 'object') {
98
+ return;
99
+ }
100
+ const candidate = node as RawMessage & Record<string, unknown>;
101
+ if (Array.isArray(candidate.events) && candidate.meta && typeof candidate.meta === 'object') {
102
+ messages.push(
103
+ Obj.make(Trace.Message, {
104
+ meta: candidate.meta,
105
+ isEphemeral: candidate.isEphemeral ?? false,
106
+ events: candidate.events,
107
+ }),
108
+ );
109
+ }
110
+ for (const value of Object.values(node as Record<string, unknown>)) {
111
+ visit(value);
112
+ }
113
+ };
114
+ visit(json);
115
+ return messages;
116
+ };
@@ -0,0 +1,249 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+ import { describe, test } from 'vitest';
8
+
9
+ import { AgentRequestBegin, AgentRequestEnd } from '@dxos/assistant';
10
+ import { Trace } from '@dxos/compute';
11
+
12
+ import { ROOT_SPAN_ID, buildSpanTree, flattenSpanTree } from './span-tree';
13
+ import { collectTraceEvents, withMeta } from './testing';
14
+
15
+ const NoteEvent = Trace.EventType('note', {
16
+ schema: Schema.Struct({
17
+ text: Schema.optional(Schema.String),
18
+ index: Schema.optional(Schema.Number),
19
+ }),
20
+ isEphemeral: false,
21
+ });
22
+
23
+ const FooEvent = Trace.EventType('foo', {
24
+ schema: Schema.Struct({}),
25
+ isEphemeral: false,
26
+ });
27
+
28
+ describe('buildSpanTree', () => {
29
+ test('returns a root span for empty input', ({ expect }) => {
30
+ const tree = buildSpanTree([]);
31
+ expect(tree.id).toBe(ROOT_SPAN_ID);
32
+ expect(tree.children).toEqual([]);
33
+ expect(tree.events).toEqual([]);
34
+ });
35
+
36
+ test('events without pid attach to root span', ({ expect }) => {
37
+ const messages = collectTraceEvents(Trace.write(FooEvent, {}));
38
+ const tree = buildSpanTree(messages);
39
+ expect(tree.children).toEqual([]);
40
+ expect(tree.events).toHaveLength(1);
41
+ expect(tree.events[0].type).toBe('foo');
42
+ });
43
+
44
+ test('a single operation start/end pair produces one span under root', ({ expect }) => {
45
+ const messages = collectTraceEvents(
46
+ withMeta(
47
+ { pid: 'op-1' },
48
+ Effect.gen(function* () {
49
+ yield* Trace.write(Trace.OperationStart, { key: 'reply', name: 'Reply' });
50
+ yield* Trace.write(Trace.OperationEnd, { key: 'reply', name: 'Reply', outcome: 'success' });
51
+ }),
52
+ ),
53
+ );
54
+ const tree = buildSpanTree(messages);
55
+ expect(tree.children).toHaveLength(1);
56
+ expect(tree.children[0].meta.pid).toBe('op-1');
57
+ expect(tree.children[0].events).toHaveLength(2);
58
+ expect(tree.children[0].children).toEqual([]);
59
+ });
60
+
61
+ test('a nested operation attaches to its open parent', ({ expect }) => {
62
+ const messages = collectTraceEvents(
63
+ Effect.gen(function* () {
64
+ yield* withMeta({ pid: 'agent-1' }, Trace.write(AgentRequestBegin, {}));
65
+ yield* withMeta(
66
+ { pid: 'op-1', parentPid: 'agent-1' },
67
+ Effect.gen(function* () {
68
+ yield* Trace.write(Trace.OperationStart, { key: 'lookup', name: 'Lookup' });
69
+ yield* Trace.write(Trace.OperationEnd, { key: 'lookup', name: 'Lookup', outcome: 'success' });
70
+ }),
71
+ );
72
+ yield* withMeta({ pid: 'agent-1' }, Trace.write(AgentRequestEnd, {}));
73
+ }),
74
+ );
75
+ const tree = buildSpanTree(messages);
76
+ expect(tree.children).toHaveLength(1);
77
+ const agentSpan = tree.children[0];
78
+ expect(agentSpan.meta.pid).toBe('agent-1');
79
+ expect(agentSpan.children).toHaveLength(1);
80
+ expect(agentSpan.children[0].meta.pid).toBe('op-1');
81
+ expect(agentSpan.children[0].events).toHaveLength(2);
82
+ });
83
+
84
+ test('sequential agent requests in one process become sibling spans', ({ expect }) => {
85
+ const messages = collectTraceEvents(
86
+ withMeta(
87
+ { pid: 'agent-1' },
88
+ Effect.gen(function* () {
89
+ yield* Trace.write(AgentRequestBegin, {});
90
+ yield* Trace.write(AgentRequestEnd, {});
91
+ yield* Trace.write(AgentRequestBegin, {});
92
+ yield* Trace.write(AgentRequestEnd, {});
93
+ }),
94
+ ),
95
+ );
96
+ const tree = buildSpanTree(messages);
97
+ expect(tree.children).toHaveLength(2);
98
+ expect(tree.children.every((child) => child.meta.pid === 'agent-1')).toBe(true);
99
+ // Span ids are distinct even though pids are shared.
100
+ expect(tree.children[0].id).not.toBe(tree.children[1].id);
101
+ });
102
+
103
+ test('non-boundary events attach to the currently-open span', ({ expect }) => {
104
+ const messages = collectTraceEvents(
105
+ withMeta(
106
+ { pid: 'agent-1' },
107
+ Effect.gen(function* () {
108
+ yield* Trace.write(AgentRequestBegin, {});
109
+ yield* Trace.write(NoteEvent, {});
110
+ yield* Trace.write(AgentRequestEnd, {});
111
+ }),
112
+ ),
113
+ );
114
+ const tree = buildSpanTree(messages);
115
+ expect(tree.children[0].events).toHaveLength(3);
116
+ expect(tree.children[0].events.map((event) => event.type)).toEqual([
117
+ AgentRequestBegin.key,
118
+ 'note',
119
+ AgentRequestEnd.key,
120
+ ]);
121
+ });
122
+
123
+ test('non-boundary event without an open span lands on root', ({ expect }) => {
124
+ const messages = collectTraceEvents(withMeta({ pid: 'orphan-pid' }, Trace.write(NoteEvent, {})));
125
+ const tree = buildSpanTree(messages);
126
+ expect(tree.children).toEqual([]);
127
+ expect(tree.events).toHaveLength(1);
128
+ expect(tree.events[0].type).toBe('note');
129
+ });
130
+
131
+ test('end event without a matching begin attaches to root', ({ expect }) => {
132
+ const messages = collectTraceEvents(
133
+ withMeta({ pid: 'op-1' }, Trace.write(Trace.OperationEnd, { key: 'reply', name: 'Reply', outcome: 'success' })),
134
+ );
135
+ const tree = buildSpanTree(messages);
136
+ expect(tree.children).toEqual([]);
137
+ expect(tree.events).toHaveLength(1);
138
+ });
139
+
140
+ test('sorts sibling spans chronologically by their first event', ({ expect }) => {
141
+ // Build events in chronological order, then reverse the message array before feeding
142
+ // into `buildSpanTree` to verify that the algorithm orders siblings by their first
143
+ // event's timestamp rather than by input order.
144
+ const messages = collectTraceEvents(
145
+ Effect.gen(function* () {
146
+ yield* withMeta(
147
+ { pid: 'op-early' },
148
+ Effect.gen(function* () {
149
+ yield* Trace.write(Trace.OperationStart, { key: 'a' });
150
+ yield* Trace.write(Trace.OperationEnd, { key: 'a', outcome: 'success' });
151
+ }),
152
+ );
153
+ yield* withMeta(
154
+ { pid: 'op-late' },
155
+ Effect.gen(function* () {
156
+ yield* Trace.write(Trace.OperationStart, { key: 'b' });
157
+ yield* Trace.write(Trace.OperationEnd, { key: 'b', outcome: 'success' });
158
+ }),
159
+ );
160
+ }),
161
+ );
162
+ const tree = buildSpanTree([...messages].reverse());
163
+ expect(tree.children.map((child) => child.meta.pid)).toEqual(['op-early', 'op-late']);
164
+ });
165
+
166
+ test('eventLimit drops oldest non-boundary events but always retains span boundaries', ({ expect }) => {
167
+ // Three non-boundary events (`note 1..3`), all boundary events should be kept regardless.
168
+ // With `eventLimit: 1`, only the most recent `note` should survive.
169
+ const messages = collectTraceEvents(
170
+ withMeta(
171
+ { pid: 'agent-1' },
172
+ Effect.gen(function* () {
173
+ yield* Trace.write(AgentRequestBegin, {});
174
+ yield* Trace.write(NoteEvent, { text: 'note 1' });
175
+ yield* Trace.write(NoteEvent, { text: 'note 2' });
176
+ yield* Trace.write(NoteEvent, { text: 'note 3' });
177
+ yield* Trace.write(AgentRequestEnd, {});
178
+ }),
179
+ ),
180
+ );
181
+ const tree = buildSpanTree(messages, { eventLimit: 1 });
182
+ expect(tree.children).toHaveLength(1);
183
+ const agentSpan = tree.children[0];
184
+ expect(agentSpan.events.map((event) => event.type)).toEqual([AgentRequestBegin.key, 'note', AgentRequestEnd.key]);
185
+ expect((agentSpan.events[1].data as { text: string }).text).toBe('note 3');
186
+ });
187
+
188
+ test('eventLimit preserves parent-child structure when the parent begin is older than the window', ({ expect }) => {
189
+ // Regression: previously `events.slice(-eventLimit)` would drop the parent's begin event
190
+ // when the limit fell mid-span, orphaning every child span onto root. The fix retains all
191
+ // boundary events so the parent stays open and children remain nested.
192
+ const messages = collectTraceEvents(
193
+ Effect.gen(function* () {
194
+ yield* withMeta(
195
+ { pid: 'parent-1' },
196
+ Effect.gen(function* () {
197
+ yield* Trace.write(AgentRequestBegin, {});
198
+ for (let index = 0; index < 20; index += 1) {
199
+ yield* Trace.write(NoteEvent, { index });
200
+ }
201
+ }),
202
+ );
203
+ yield* withMeta(
204
+ { pid: 'child-1', parentPid: 'parent-1' },
205
+ Effect.gen(function* () {
206
+ yield* Trace.write(Trace.OperationStart, { key: 'lookup', name: 'Lookup' });
207
+ yield* Trace.write(Trace.OperationEnd, { key: 'lookup', name: 'Lookup', outcome: 'success' });
208
+ }),
209
+ );
210
+ yield* withMeta({ pid: 'parent-1' }, Trace.write(AgentRequestEnd, {}));
211
+ }),
212
+ );
213
+ const tree = buildSpanTree(messages, {
214
+ // Limit far below the 20 `note` events — naive slicing would drop the parent's begin.
215
+ eventLimit: 2,
216
+ });
217
+ expect(tree.children).toHaveLength(1);
218
+ const parentSpan = tree.children[0];
219
+ expect(parentSpan.meta.pid).toBe('parent-1');
220
+ expect(parentSpan.children).toHaveLength(1);
221
+ expect(parentSpan.children[0].meta.pid).toBe('child-1');
222
+ expect(parentSpan.children[0].events.map((event) => event.type)).toEqual([
223
+ Trace.OperationStart.key,
224
+ Trace.OperationEnd.key,
225
+ ]);
226
+ });
227
+
228
+ test('flattenSpanTree returns root + all descendants in depth-first order', ({ expect }) => {
229
+ const messages = collectTraceEvents(
230
+ Effect.gen(function* () {
231
+ yield* withMeta({ pid: 'agent-1' }, Trace.write(AgentRequestBegin, {}));
232
+ yield* withMeta(
233
+ { pid: 'op-1', parentPid: 'agent-1' },
234
+ Effect.gen(function* () {
235
+ yield* Trace.write(Trace.OperationStart, { key: 'a' });
236
+ yield* Trace.write(Trace.OperationEnd, { key: 'a', outcome: 'success' });
237
+ }),
238
+ );
239
+ yield* withMeta({ pid: 'agent-1' }, Trace.write(AgentRequestEnd, {}));
240
+ }),
241
+ );
242
+ const tree = buildSpanTree(messages);
243
+ const order = flattenSpanTree(tree);
244
+ expect(order[0].id).toBe(ROOT_SPAN_ID);
245
+ expect(order[1].meta.pid).toBe('agent-1');
246
+ expect(order[2].meta.pid).toBe('op-1');
247
+ expect(order).toHaveLength(3);
248
+ });
249
+ });
@@ -0,0 +1,259 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { AgentRequestBegin, AgentRequestEnd } from '@dxos/assistant';
6
+ import { Trace } from '@dxos/compute';
7
+
8
+ /**
9
+ * Synthetic id assigned to the root span.
10
+ * The root is a virtual container for top-level spans (those without a parent in the captured trace).
11
+ */
12
+ export const ROOT_SPAN_ID = '<main>';
13
+
14
+ /**
15
+ * Computed metadata for a span.
16
+ * Derived from the meta of the begin event that opened the span.
17
+ */
18
+ export interface SpanMeta {
19
+ readonly pid?: string;
20
+ readonly parentPid?: string;
21
+ readonly processName?: string;
22
+ readonly conversationId?: string;
23
+ readonly triggerId?: string;
24
+ readonly toolCallId?: string;
25
+ readonly runtimeName?: string;
26
+ }
27
+
28
+ /**
29
+ * A span in the trace hierarchy.
30
+ *
31
+ * Each span represents a single bounded unit of work — an operation invocation or an
32
+ * agent request. Spans are opened by `OperationStart` / `AgentRequestBegin` events and
33
+ * closed by their matching `OperationEnd` / `AgentRequestEnd` events. A single process
34
+ * (pid) may produce multiple sequential spans (for example, an agent session that serves
35
+ * three prompts produces three sibling spans sharing the agent's pid).
36
+ *
37
+ * `events` contains the bounded events for this span only — child spans' events are not
38
+ * duplicated here. `children` contains sub-spans that opened while this span was active.
39
+ */
40
+ export interface Span {
41
+ readonly id: string;
42
+ readonly meta: SpanMeta;
43
+ readonly events: Trace.FlatEvent[];
44
+ readonly children: Span[];
45
+ }
46
+
47
+ export const BEGIN_EVENT_TYPES = new Set<string>([Trace.OperationStart.key, AgentRequestBegin.key]);
48
+ export const END_EVENT_TYPES = new Set<string>([Trace.OperationEnd.key, AgentRequestEnd.key]);
49
+
50
+ export const isSpanBeginEvent = (event: Trace.FlatEvent): boolean => BEGIN_EVENT_TYPES.has(event.type);
51
+ export const isSpanEndEvent = (event: Trace.FlatEvent): boolean => END_EVENT_TYPES.has(event.type);
52
+
53
+ const computeMeta = (rawMeta: Trace.Meta): SpanMeta => ({
54
+ pid: rawMeta.pid,
55
+ parentPid: rawMeta.parentPid,
56
+ processName: rawMeta.processName,
57
+ conversationId: rawMeta.conversationId,
58
+ triggerId: rawMeta.triggerId,
59
+ toolCallId: rawMeta.toolCallId,
60
+ runtimeName: rawMeta.runtimeName,
61
+ });
62
+
63
+ interface MutableSpan {
64
+ id: string;
65
+ meta: SpanMeta;
66
+ events: Trace.FlatEvent[];
67
+ children: MutableSpan[];
68
+ firstTimestamp: number;
69
+ }
70
+
71
+ const makeMutableSpan = (id: string, meta: SpanMeta): MutableSpan => ({
72
+ id,
73
+ meta,
74
+ events: [],
75
+ children: [],
76
+ firstTimestamp: Number.POSITIVE_INFINITY,
77
+ });
78
+
79
+ const freezeSpan = (span: MutableSpan): Span => ({
80
+ id: span.id,
81
+ meta: span.meta,
82
+ events: span.events,
83
+ children: span.children.map(freezeSpan),
84
+ });
85
+
86
+ export interface BuildSpanTreeOptions {
87
+ /**
88
+ * If provided, caps how many *non-boundary* events (status updates, partial blocks, etc.)
89
+ * are retained — only the most recent `eventLimit` of them survive. Span boundary events
90
+ * (`OperationStart` / `OperationEnd` / `AgentRequestBegin` / `AgentRequestEnd`) are *always*
91
+ * retained regardless of the limit, because dropping them would orphan their child spans
92
+ * and collapse them onto the root branch.
93
+ */
94
+ eventLimit?: number;
95
+ }
96
+
97
+ /**
98
+ * Builds a hierarchical span tree from a list of trace messages.
99
+ *
100
+ * Algorithm:
101
+ * 1. Flatten messages into events and sort them chronologically.
102
+ * 2. For each event:
103
+ * - Begin events (`OperationStart`, `AgentRequestBegin`) open a new span whose parent
104
+ * is the currently-open span of the event's `meta.parentPid`, or the root if there is
105
+ * none. The begin event itself becomes the first event of the new span.
106
+ * - End events (`OperationEnd`, `AgentRequestEnd`) close the currently-open span for
107
+ * the event's `meta.pid` and become its last event.
108
+ * - Other events attach to the currently-open span for their `meta.pid`, or to the
109
+ * root span if no span is currently open for that pid (or the event has no pid).
110
+ * 3. Sort each span's children by their earliest event timestamp.
111
+ */
112
+ export const buildSpanTree = (messages: Trace.Message[], options: BuildSpanTreeOptions = {}): Span => {
113
+ const allEvents = messages.flatMap((message) => Trace.flatten(message));
114
+ allEvents.sort((a, b) => a.timestamp - b.timestamp);
115
+
116
+ // The limit caps verbose middle events (status/partial-block) only. Span boundary events
117
+ // are always retained so the parent/child structure of older spans isn't dropped — losing a
118
+ // begin event detaches every descendant and collapses them onto the root branch.
119
+ const events = applyEventLimit(allEvents, options.eventLimit);
120
+
121
+ const root = makeMutableSpan(ROOT_SPAN_ID, {});
122
+
123
+ // Currently-open span for each pid.
124
+ // A process may host multiple sequential spans (e.g. successive agent requests), so we
125
+ // track the active one and start a new span on the next begin event.
126
+ const openSpans = new Map<string, MutableSpan>();
127
+
128
+ let spanCounter = 0;
129
+ const allocSpanId = (pid: string): string => {
130
+ const id = `${pid}#${spanCounter}`;
131
+ spanCounter += 1;
132
+ return id;
133
+ };
134
+
135
+ const noteTimestamp = (span: MutableSpan, timestamp: number): void => {
136
+ if (timestamp < span.firstTimestamp) {
137
+ span.firstTimestamp = timestamp;
138
+ }
139
+ };
140
+
141
+ for (const event of events) {
142
+ const pid = event.meta.pid;
143
+
144
+ if (!pid) {
145
+ // Events without a pid attach to the root.
146
+ root.events.push(event);
147
+ noteTimestamp(root, event.timestamp);
148
+ continue;
149
+ }
150
+
151
+ if (BEGIN_EVENT_TYPES.has(event.type)) {
152
+ const parentPid = event.meta.parentPid;
153
+ const parent = (parentPid && openSpans.get(parentPid)) || root;
154
+ const span = makeMutableSpan(allocSpanId(pid), computeMeta(event.meta));
155
+ span.events.push(event);
156
+ noteTimestamp(span, event.timestamp);
157
+ parent.children.push(span);
158
+ // The new span supersedes any previously-open span for this pid.
159
+ openSpans.set(pid, span);
160
+ continue;
161
+ }
162
+
163
+ if (END_EVENT_TYPES.has(event.type)) {
164
+ const span = openSpans.get(pid);
165
+ if (span) {
166
+ span.events.push(event);
167
+ noteTimestamp(span, event.timestamp);
168
+ openSpans.delete(pid);
169
+ } else {
170
+ // End event without a matching begin — attach to root so the event isn't lost.
171
+ root.events.push(event);
172
+ noteTimestamp(root, event.timestamp);
173
+ }
174
+ continue;
175
+ }
176
+
177
+ // Non-boundary event: attach to the currently-open span for this pid if any.
178
+ const open = openSpans.get(pid);
179
+ if (open) {
180
+ open.events.push(event);
181
+ noteTimestamp(open, event.timestamp);
182
+ } else {
183
+ root.events.push(event);
184
+ noteTimestamp(root, event.timestamp);
185
+ }
186
+ }
187
+
188
+ // Sort children chronologically for deterministic output.
189
+ const sortChildren = (span: MutableSpan): void => {
190
+ span.children.sort((a, b) => a.firstTimestamp - b.firstTimestamp);
191
+ for (const child of span.children) {
192
+ sortChildren(child);
193
+ }
194
+ };
195
+ sortChildren(root);
196
+
197
+ return freezeSpan(root);
198
+ };
199
+
200
+ /**
201
+ * Caps the number of non-boundary events while retaining every span boundary event.
202
+ *
203
+ * Boundary events define the span tree's structure: dropping a begin event detaches every
204
+ * descendant span (its `parentPid` lookup fails, so children fall back to the root), and
205
+ * dropping an end event leaves a span open and corrupts the open-span map for sibling spans
206
+ * that share a pid. Status/partial-block events are the noisy bulk and the only ones the
207
+ * limit needs to control.
208
+ *
209
+ * The returned array stays in chronological order.
210
+ */
211
+ const applyEventLimit = (events: readonly Trace.FlatEvent[], eventLimit: number | undefined): Trace.FlatEvent[] => {
212
+ if (eventLimit === undefined) {
213
+ return [...events];
214
+ }
215
+
216
+ let nonBoundaryCount = 0;
217
+ for (const event of events) {
218
+ if (!isBoundary(event)) {
219
+ nonBoundaryCount += 1;
220
+ }
221
+ }
222
+ if (nonBoundaryCount <= eventLimit) {
223
+ return [...events];
224
+ }
225
+
226
+ const dropCount = nonBoundaryCount - eventLimit;
227
+ let dropped = 0;
228
+ const result: Trace.FlatEvent[] = [];
229
+ for (const event of events) {
230
+ if (!isBoundary(event) && dropped < dropCount) {
231
+ dropped += 1;
232
+ continue;
233
+ }
234
+ result.push(event);
235
+ }
236
+ return result;
237
+ };
238
+
239
+ const isBoundary = (event: Trace.FlatEvent): boolean =>
240
+ BEGIN_EVENT_TYPES.has(event.type) || END_EVENT_TYPES.has(event.type);
241
+
242
+ /**
243
+ * Walks the span tree in depth-first pre-order, invoking `visit` for each span (root included).
244
+ */
245
+ export const walkSpanTree = (root: Span, visit: (span: Span, depth: number) => void, depth = 0): void => {
246
+ visit(root, depth);
247
+ for (const child of root.children) {
248
+ walkSpanTree(child, visit, depth + 1);
249
+ }
250
+ };
251
+
252
+ /**
253
+ * Returns all spans in the tree in depth-first pre-order, root first.
254
+ */
255
+ export const flattenSpanTree = (root: Span): Span[] => {
256
+ const result: Span[] = [];
257
+ walkSpanTree(root, (span) => result.push(span));
258
+ return result;
259
+ };