@dxos/plugin-assistant 0.9.1-main.c7dcc2e112 → 0.10.0

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 (560) hide show
  1. package/PLUGIN.mdl +18 -24
  2. package/dist/lib/neutral/{AgentArticle-2BEPWUMN.mjs → AgentArticle-GV6EEW3I.mjs} +1 -2
  3. package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +7 -0
  4. package/dist/lib/neutral/AssistantPlugin.mjs +1 -1
  5. package/dist/lib/neutral/AssistantPlugin.node.mjs +6 -6
  6. package/dist/lib/neutral/AssistantPlugin.node.mjs.map +3 -3
  7. package/dist/lib/neutral/AssistantPlugin.workerd.mjs +7 -34
  8. package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +4 -4
  9. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +302 -0
  10. package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +7 -0
  11. package/dist/lib/neutral/{ChatArticle-KT46SUFU.mjs → ChatArticle-OO7GGEFW.mjs} +2 -2
  12. package/dist/lib/neutral/{ChatCompanion-YHC43RYQ.mjs → ChatCompanion-GIFJRY6I.mjs} +27 -27
  13. package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +7 -0
  14. package/dist/lib/neutral/{ChatDialog-YZDZLIQA.mjs → ChatDialog-5MXN4MXS.mjs} +5 -5
  15. package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +7 -0
  16. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +72 -0
  17. package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +7 -0
  18. package/dist/lib/neutral/{SpaceHomePrompt-HTWQKLGI.mjs → SpaceHomePrompt-ISAB76LD.mjs} +8 -7
  19. package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +7 -0
  20. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +63 -0
  21. package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +7 -0
  22. package/dist/lib/neutral/{TracePanel-T552TAOH.mjs → TracePanel-JKNWADJ4.mjs} +2 -2
  23. package/dist/lib/neutral/{TriggerStatus-RBOHHDOK.mjs → TriggerStatus-FURRBHYA.mjs} +7 -5
  24. package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +7 -0
  25. package/dist/lib/neutral/{agent-hydrator-PJBYVMBW.mjs → agent-hydrator-OBO3RHLO.mjs} +3 -4
  26. package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +7 -0
  27. package/dist/lib/neutral/{agent-service-WV5CSHAG.mjs → agent-service-XFJ4VQMT.mjs} +7 -9
  28. package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +7 -0
  29. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs +14 -0
  30. package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +7 -0
  31. package/dist/lib/neutral/{ai-service-AADUIKBY.mjs → ai-service-DM6YXWUC.mjs} +9 -5
  32. package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +7 -0
  33. package/dist/lib/neutral/{app-graph-builder-PTSRZXRN.mjs → app-graph-builder-OPVOEQY7.mjs} +36 -19
  34. package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +7 -0
  35. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +97 -0
  36. package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +7 -0
  37. package/dist/lib/neutral/capabilities/index.mjs +20 -18
  38. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  39. package/dist/lib/neutral/{chunk-KLYLW4WH.mjs → chunk-5IHQ52KJ.mjs} +1 -1
  40. package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-5KB2WRI2.mjs → chunk-6Q4OBGIK.mjs} +83 -55
  42. package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-54W7N6M6.mjs → chunk-BXI2R4OO.mjs} +49 -84
  44. package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-5H6UJHLF.mjs → chunk-CMPLPDYE.mjs} +12 -12
  46. package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-GPHT3HYS.mjs +8 -0
  48. package/dist/lib/neutral/{chunk-7FQT4XMI.mjs.map → chunk-GPHT3HYS.mjs.map} +2 -2
  49. package/dist/lib/neutral/{markdown-extension-IJ5RQMQ4.mjs → chunk-HKLSFB5I.mjs} +2 -38
  50. package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +7 -0
  51. package/dist/lib/neutral/{chunk-ZNDQVYUN.mjs → chunk-L7AR4VTA.mjs} +3 -3
  52. package/dist/lib/neutral/{chunk-ZNDQVYUN.mjs.map → chunk-L7AR4VTA.mjs.map} +1 -1
  53. package/dist/lib/neutral/chunk-LS72HWMM.mjs +42 -0
  54. package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +7 -0
  55. package/dist/lib/neutral/{chunk-35EL65O4.mjs → chunk-OZWZGIV2.mjs} +4 -2
  56. package/dist/lib/neutral/{chunk-35EL65O4.mjs.map → chunk-OZWZGIV2.mjs.map} +3 -3
  57. package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs → chunk-QOKLFHUS.mjs} +3 -4
  58. package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs.map → chunk-QOKLFHUS.mjs.map} +1 -1
  59. package/dist/lib/neutral/{chunk-5LKNH7FD.mjs → chunk-SCTHQVIJ.mjs} +8 -5
  60. package/dist/lib/neutral/{chunk-5LKNH7FD.mjs.map → chunk-SCTHQVIJ.mjs.map} +3 -3
  61. package/dist/lib/neutral/chunk-U4LTLBAX.mjs +56 -0
  62. package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +7 -0
  63. package/dist/lib/neutral/{chunk-H77JTXAN.mjs → chunk-UPKFUZ6V.mjs} +7 -10
  64. package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +7 -0
  65. package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs → chunk-V2Y4XE3O.mjs} +3 -4
  66. package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs.map → chunk-V2Y4XE3O.mjs.map} +1 -1
  67. package/dist/lib/neutral/chunk-VTK5R4H3.mjs +9 -0
  68. package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-XVGEJWJX.mjs +133 -0
  70. package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +7 -0
  71. package/dist/lib/neutral/{companion-chat-provisioner-YZZ73P6E.mjs → companion-chat-provisioner-IQV5VIVE.mjs} +14 -8
  72. package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +7 -0
  73. package/dist/lib/neutral/components/index.mjs +509 -579
  74. package/dist/lib/neutral/components/index.mjs.map +4 -4
  75. package/dist/lib/neutral/{integration-provider-RBD3AFJU.mjs → connector-ITLLTBPZ.mjs} +13 -14
  76. package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +7 -0
  77. package/dist/lib/neutral/containers/index.mjs +12 -14
  78. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  79. package/dist/lib/neutral/{create-chat-Z3FNA6OJ.mjs → create-chat-YGVZZYGP.mjs} +18 -16
  80. package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +7 -0
  81. package/dist/lib/neutral/{create-object-BJUDDKQQ.mjs → create-object-5PAEJ6KM.mjs} +11 -27
  82. package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +7 -0
  83. package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs → edge-model-resolver-WDJWDZTT.mjs} +2 -2
  84. package/dist/lib/neutral/execution-graph/index.mjs +182 -64
  85. package/dist/lib/neutral/execution-graph/index.mjs.map +3 -3
  86. package/dist/lib/neutral/extensions/index.mjs +8 -0
  87. package/dist/lib/neutral/{fork-chat-UYXYT6BT.mjs → fork-chat-RMAAYYQF.mjs} +15 -18
  88. package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +7 -0
  89. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +93 -0
  90. package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +7 -0
  91. package/dist/lib/neutral/hooks/index.mjs +195 -105
  92. package/dist/lib/neutral/hooks/index.mjs.map +4 -4
  93. package/dist/lib/neutral/index.mjs +14 -10
  94. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +41 -0
  95. package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +7 -0
  96. package/dist/lib/neutral/meta.json +1 -1
  97. package/dist/lib/neutral/meta.mjs +1 -1
  98. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +18 -0
  99. package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +7 -0
  100. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +8 -0
  101. package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +7 -0
  102. package/dist/lib/neutral/operations/index.mjs +1 -1
  103. package/dist/lib/neutral/plugin.mjs +2 -2
  104. package/dist/lib/neutral/plugin.workerd.mjs +13 -0
  105. package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
  106. package/dist/lib/neutral/{react-surface-ES7UHZ65.mjs → react-surface-HEJEK44F.mjs} +20 -35
  107. package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +7 -0
  108. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +28 -0
  109. package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +7 -0
  110. package/dist/lib/neutral/{run-prompt-in-new-chat-NIAGCKQV.mjs → run-prompt-in-new-chat-RNUJE2FM.mjs} +28 -31
  111. package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +7 -0
  112. package/dist/lib/neutral/skill-definition-553MQRTR.mjs +8 -0
  113. package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +7 -0
  114. package/dist/lib/neutral/skills/index.mjs +8 -0
  115. package/dist/lib/neutral/skills/index.mjs.map +7 -0
  116. package/dist/lib/neutral/{state-XO2UYSSG.mjs → state-4LGAKSSD.mjs} +8 -2
  117. package/dist/lib/neutral/{state-XO2UYSSG.mjs.map → state-4LGAKSSD.mjs.map} +3 -3
  118. package/dist/lib/neutral/testing.mjs +1 -1
  119. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +8 -0
  120. package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +7 -0
  121. package/dist/lib/neutral/translations.mjs +64 -33
  122. package/dist/lib/neutral/translations.mjs.map +3 -3
  123. package/dist/lib/neutral/types/index.mjs +5 -1
  124. package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs → update-chat-name-IJJELRR6.mjs} +3 -3
  125. package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs.map → update-chat-name-IJJELRR6.mjs.map} +2 -2
  126. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  127. package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
  129. package/dist/types/src/capabilities/agent-service.d.ts +1 -2
  130. package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
  131. package/dist/types/src/capabilities/ai-context.d.ts +1 -2
  132. package/dist/types/src/capabilities/ai-context.d.ts.map +1 -1
  133. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -3
  134. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  135. package/dist/types/src/capabilities/automation-templates.d.ts +1 -2
  136. package/dist/types/src/capabilities/automation-templates.d.ts.map +1 -1
  137. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
  138. package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
  139. package/dist/types/src/capabilities/{integration-provider.d.ts → connector.d.ts} +2 -2
  140. package/dist/types/src/capabilities/connector.d.ts.map +1 -0
  141. package/dist/types/src/capabilities/create-object.d.ts +1 -27
  142. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  143. package/dist/types/src/capabilities/index.d.ts +3 -2
  144. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  145. package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
  146. package/dist/types/src/capabilities/migrations.d.ts +1 -2
  147. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  148. package/dist/types/src/capabilities/navigation-resolver.d.ts +5 -0
  149. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  150. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  151. package/dist/types/src/capabilities/settings.d.ts +1 -2
  152. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  153. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  154. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  155. package/dist/types/src/capabilities/state.d.ts +1 -17
  156. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  157. package/dist/types/src/capabilities/toolkit.d.ts +1 -2
  158. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  159. package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -1
  160. package/dist/types/src/components/Chat/Chat.d.ts +4 -5
  161. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  162. package/dist/types/src/components/Chat/events.d.ts +0 -4
  163. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  164. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +2 -2
  165. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  166. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  167. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +2 -2
  168. package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -5
  170. package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
  171. package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts +9 -0
  172. package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts.map +1 -0
  173. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +4 -4
  174. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +2 -2
  176. package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -1
  177. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
  178. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts +2 -2
  179. package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -1
  180. package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts +11 -0
  181. package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts.map +1 -0
  182. package/dist/types/src/components/ChatThread/widgets/index.d.ts +1 -0
  183. package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
  184. package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
  185. package/dist/types/src/components/TaskList/TaskList.stories.d.ts +2 -2
  186. package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -3
  188. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  189. package/dist/types/src/components/index.d.ts +0 -4
  190. package/dist/types/src/components/index.d.ts.map +1 -1
  191. package/dist/types/src/constants.d.ts +1 -1
  192. package/dist/types/src/constants.d.ts.map +1 -1
  193. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +2 -2
  194. package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
  195. package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.d.ts +1 -1
  196. package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -0
  197. package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
  198. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +12 -0
  199. package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -0
  200. package/dist/types/src/{components/TemplateEditor/TemplateEditor.stories.d.ts → containers/AssistantSettings/OllamaModels.stories.d.ts} +9 -7
  201. package/dist/types/src/containers/AssistantSettings/OllamaModels.stories.d.ts.map +1 -0
  202. package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts.map +1 -1
  203. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +2 -9
  204. package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
  205. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +3 -10
  206. package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
  207. package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
  208. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +13 -0
  209. package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -0
  210. package/dist/types/src/containers/IntegrationPrompt/index.d.ts +2 -0
  211. package/dist/types/src/{components/RoutineProperties → containers/IntegrationPrompt}/index.d.ts.map +1 -1
  212. package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -1
  213. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +1 -1
  214. package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -1
  215. package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
  216. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +1 -1
  217. package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -1
  218. package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
  219. package/dist/types/src/containers/index.d.ts +2 -3
  220. package/dist/types/src/containers/index.d.ts.map +1 -1
  221. package/dist/types/src/execution-graph/execution-graph.d.ts +2 -1
  222. package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
  223. package/dist/types/src/execution-graph/index.d.ts +3 -3
  224. package/dist/types/src/execution-graph/index.d.ts.map +1 -1
  225. package/dist/types/src/execution-graph/span-tree.d.ts +13 -0
  226. package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
  227. package/dist/types/src/extensions/index.d.ts +1 -1
  228. package/dist/types/src/extensions/index.d.ts.map +1 -1
  229. package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -1
  230. package/dist/types/src/hooks/index.d.ts +2 -2
  231. package/dist/types/src/hooks/index.d.ts.map +1 -1
  232. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  233. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
  234. package/dist/types/src/hooks/useHomeSuggestions.d.ts +8 -0
  235. package/dist/types/src/hooks/useHomeSuggestions.d.ts.map +1 -0
  236. package/dist/types/src/hooks/usePresets.d.ts +6 -2
  237. package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
  238. package/dist/types/src/hooks/useSkillRegistry.d.ts +21 -0
  239. package/dist/types/src/hooks/useSkillRegistry.d.ts.map +1 -0
  240. package/dist/types/src/index.d.ts +1 -1
  241. package/dist/types/src/index.d.ts.map +1 -1
  242. package/dist/types/src/meta.d.ts +4 -0
  243. package/dist/types/src/meta.d.ts.map +1 -1
  244. package/dist/types/src/operations/create-chat.d.ts.map +1 -1
  245. package/dist/types/src/operations/fork-chat.d.ts.map +1 -1
  246. package/dist/types/src/operations/generate-home-suggestions.d.ts +5 -0
  247. package/dist/types/src/operations/generate-home-suggestions.d.ts.map +1 -0
  248. package/dist/types/src/operations/generate-home-suggestions.test.d.ts +2 -0
  249. package/dist/types/src/operations/generate-home-suggestions.test.d.ts.map +1 -0
  250. package/dist/types/src/operations/index.d.ts.map +1 -1
  251. package/dist/types/src/operations/resolve-navigation-targets.d.ts +3 -15
  252. package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -1
  253. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +2 -2
  254. package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
  255. package/dist/types/src/paths.d.ts +1 -1
  256. package/dist/types/src/paths.d.ts.map +1 -1
  257. package/dist/types/src/plugin.workerd.d.ts +2 -0
  258. package/dist/types/src/plugin.workerd.d.ts.map +1 -0
  259. package/dist/types/src/processor/presets.d.ts +20 -9
  260. package/dist/types/src/processor/presets.d.ts.map +1 -1
  261. package/dist/types/src/processor/processor.d.ts +10 -209
  262. package/dist/types/src/processor/processor.d.ts.map +1 -1
  263. package/dist/types/src/skills/assistant/index.d.ts +2 -0
  264. package/dist/types/src/skills/assistant/index.d.ts.map +1 -0
  265. package/dist/types/src/skills/assistant/skill.d.ts +4 -0
  266. package/dist/types/src/skills/assistant/skill.d.ts.map +1 -0
  267. package/dist/types/src/skills/assistant/skill.node.test.d.ts +2 -0
  268. package/dist/types/src/skills/assistant/skill.node.test.d.ts.map +1 -0
  269. package/dist/types/src/skills/index.d.ts.map +1 -0
  270. package/dist/types/src/templates/daily-digest.d.ts +2 -2
  271. package/dist/types/src/templates/daily-digest.d.ts.map +1 -1
  272. package/dist/types/src/templates/index.d.ts +3 -3
  273. package/dist/types/src/templates/index.d.ts.map +1 -1
  274. package/dist/types/src/templates/research-brief.d.ts +2 -2
  275. package/dist/types/src/templates/research-brief.d.ts.map +1 -1
  276. package/dist/types/src/templates/routine-templates.test.d.ts +2 -0
  277. package/dist/types/src/templates/routine-templates.test.d.ts.map +1 -0
  278. package/dist/types/src/templates/scaffold.d.ts +9 -9
  279. package/dist/types/src/templates/scaffold.d.ts.map +1 -1
  280. package/dist/types/src/testing/test-generator.d.ts +1 -1
  281. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  282. package/dist/types/src/testing/test-sequence.d.ts +1 -8
  283. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  284. package/dist/types/src/testing/test-trace.d.ts.map +1 -1
  285. package/dist/types/src/translations.d.ts.map +1 -1
  286. package/dist/types/src/types/Assistant.d.ts +5 -12
  287. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  288. package/dist/types/src/types/AssistantCapabilities.d.ts +21 -0
  289. package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
  290. package/dist/types/src/types/AssistantOperation.d.ts +17 -110
  291. package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
  292. package/dist/types/src/types/ChatSurface.d.ts +12 -0
  293. package/dist/types/src/types/ChatSurface.d.ts.map +1 -0
  294. package/dist/types/src/types/Ollama.d.ts +44 -0
  295. package/dist/types/src/types/Ollama.d.ts.map +1 -0
  296. package/dist/types/src/types/Settings.d.ts +5 -4
  297. package/dist/types/src/types/Settings.d.ts.map +1 -1
  298. package/dist/types/src/types/index.d.ts +2 -0
  299. package/dist/types/src/types/index.d.ts.map +1 -1
  300. package/dist/types/src/types/service.d.ts +4 -3
  301. package/dist/types/src/types/service.d.ts.map +1 -1
  302. package/dist/types/src/util/suggestions.d.ts +1 -1
  303. package/dist/types/tsconfig.tsbuildinfo +1 -1
  304. package/dx.config.ts +2 -2
  305. package/package.json +102 -90
  306. package/src/AssistantPlugin.conversations.json +1 -1
  307. package/src/AssistantPlugin.node.ts +5 -5
  308. package/src/AssistantPlugin.test.ts +26 -40
  309. package/src/AssistantPlugin.ts +12 -10
  310. package/src/AssistantPlugin.workerd.ts +15 -6
  311. package/src/capabilities/agent-hydrator.ts +1 -2
  312. package/src/capabilities/agent-service.ts +5 -7
  313. package/src/capabilities/ai-context.ts +7 -32
  314. package/src/capabilities/ai-service.ts +3 -2
  315. package/src/capabilities/app-graph-builder.ts +38 -18
  316. package/src/capabilities/automation-templates.ts +3 -3
  317. package/src/capabilities/companion-chat-provisioner.ts +22 -6
  318. package/src/capabilities/{integration-provider.ts → connector.ts} +7 -12
  319. package/src/capabilities/create-object.ts +9 -26
  320. package/src/capabilities/index.ts +3 -5
  321. package/src/capabilities/markdown-extension.ts +2 -3
  322. package/src/capabilities/navigation-resolver.ts +20 -0
  323. package/src/capabilities/react-surface.tsx +21 -33
  324. package/src/capabilities/skill-definition.ts +72 -0
  325. package/src/capabilities/state.ts +7 -0
  326. package/src/components/AgentProperties/AgentProperties.stories.tsx +1 -2
  327. package/src/components/Chat/Chat.tsx +28 -10
  328. package/src/components/Chat/events.ts +0 -6
  329. package/src/components/ChatPrompt/ChatActions.tsx +181 -18
  330. package/src/components/ChatPrompt/ChatOptions.stories.tsx +3 -3
  331. package/src/components/ChatPrompt/ChatOptions.tsx +17 -21
  332. package/src/components/ChatPrompt/ChatPrompt.tsx +30 -46
  333. package/src/components/ChatPrompt/useChatVoiceInput.ts +103 -0
  334. package/src/components/ChatThread/ChatThread.stories.tsx +7 -16
  335. package/src/components/ChatThread/MarkdownStream.stories.tsx +3 -3
  336. package/src/components/ChatThread/registry.tsx +43 -17
  337. package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +2 -2
  338. package/src/components/ChatThread/widgets/SurfaceWidget.tsx +41 -0
  339. package/src/components/ChatThread/widgets/index.ts +1 -0
  340. package/src/components/ProcessTree/ProcessTree.tsx +2 -10
  341. package/src/components/TaskList/TaskList.stories.tsx +2 -2
  342. package/src/components/TaskList/TaskList.tsx +2 -2
  343. package/src/components/Toolbox/Toolbox.tsx +11 -11
  344. package/src/components/index.ts +0 -6
  345. package/src/constants.ts +1 -1
  346. package/src/containers/AgentArticle/AgentArticle.stories.tsx +8 -9
  347. package/src/containers/AgentArticle/AgentArticle.tsx +1 -1
  348. package/src/{components → containers}/AssistantSettings/AssistantSettings.stories.tsx +3 -2
  349. package/src/containers/AssistantSettings/AssistantSettings.tsx +90 -0
  350. package/src/containers/AssistantSettings/OllamaModels.stories.tsx +108 -0
  351. package/src/containers/AssistantSettings/OllamaModels.tsx +255 -0
  352. package/src/containers/ChatArticle/ChatArticle.stories.tsx +3 -3
  353. package/src/containers/ChatArticle/ChatArticle.tsx +8 -19
  354. package/src/containers/ChatCompanion/ChatCompanion.tsx +26 -26
  355. package/src/containers/ChatDialog/ChatDialog.tsx +5 -4
  356. package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +79 -0
  357. package/src/containers/IntegrationPrompt/index.ts +5 -0
  358. package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +8 -6
  359. package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +46 -32
  360. package/src/containers/TracePanel/TracePanel.stories.tsx +89 -47
  361. package/src/containers/TracePanel/TracePanel.tsx +13 -8
  362. package/src/containers/TracePanel/dxn-extractor.test.ts +2 -2
  363. package/src/containers/TriggerStatus/TriggerStatus.tsx +8 -4
  364. package/src/containers/index.ts +2 -3
  365. package/src/execution-graph/SPEC.md +1 -1
  366. package/src/execution-graph/execution-graph.test.ts +213 -25
  367. package/src/execution-graph/execution-graph.ts +209 -72
  368. package/src/execution-graph/index.ts +8 -8
  369. package/src/execution-graph/span-tree.test.ts +33 -1
  370. package/src/execution-graph/span-tree.ts +43 -2
  371. package/src/execution-graph/sub-agent-delegation.test.ts +19 -19
  372. package/src/extensions/index.ts +1 -1
  373. package/src/extensions/prompt-extension.ts +1 -1
  374. package/src/feed-logger.ts +4 -4
  375. package/src/functions/services.test.ts +4 -4
  376. package/src/hooks/index.ts +2 -2
  377. package/src/hooks/useChatProcessor.ts +12 -16
  378. package/src/hooks/useContextBinder.ts +2 -4
  379. package/src/hooks/useDebug.ts +2 -2
  380. package/src/hooks/useHomeSuggestions.ts +55 -0
  381. package/src/hooks/usePresets.ts +80 -11
  382. package/src/hooks/useProcessEphemeralStatus.ts +1 -1
  383. package/src/hooks/useReferencesProvider.ts +1 -1
  384. package/src/hooks/useSkillRegistry.ts +125 -0
  385. package/src/index.ts +1 -1
  386. package/src/operations/create-chat.ts +11 -12
  387. package/src/operations/fork-chat.ts +14 -19
  388. package/src/operations/generate-home-suggestions.test.ts +103 -0
  389. package/src/operations/generate-home-suggestions.ts +116 -0
  390. package/src/operations/index.ts +1 -0
  391. package/src/operations/prompt.node.test.ts +14 -17
  392. package/src/operations/resolve-navigation-targets.ts +32 -19
  393. package/src/operations/run-prompt-in-new-chat.ts +30 -33
  394. package/src/operations/update-chat-name.ts +2 -2
  395. package/src/paths.ts +4 -2
  396. package/src/plugin.workerd.ts +5 -0
  397. package/src/processor/presets.ts +38 -61
  398. package/src/processor/processor.node.test.ts +1 -1
  399. package/src/processor/processor.ts +34 -20
  400. package/src/skills/assistant/index.ts +5 -0
  401. package/src/{blueprints/assistant/blueprint.node.test.ts → skills/assistant/skill.node.test.ts} +8 -8
  402. package/src/{blueprints/assistant/blueprint.ts → skills/assistant/skill.ts} +9 -9
  403. package/src/templates/daily-digest.ts +10 -12
  404. package/src/templates/index.ts +3 -3
  405. package/src/templates/research-brief.ts +15 -13
  406. package/src/templates/routine-templates.test.ts +55 -0
  407. package/src/templates/scaffold.ts +22 -57
  408. package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
  409. package/src/testing/data/trace-timeline-remote.dx.json +1 -1
  410. package/src/testing/data/trace-timeline.dx.json +3430 -1092
  411. package/src/testing/test-generator.test.ts +26 -22
  412. package/src/testing/test-generator.ts +4 -8
  413. package/src/testing/test-trace.ts +2 -1
  414. package/src/testing/trace-timeline.node.test.ts +14 -14
  415. package/src/translations.ts +68 -33
  416. package/src/types/Assistant.ts +3 -1
  417. package/src/types/AssistantCapabilities.ts +21 -0
  418. package/src/types/AssistantOperation.ts +21 -32
  419. package/src/types/ChatSurface.ts +16 -0
  420. package/src/types/Ollama.ts +59 -0
  421. package/src/types/Settings.ts +12 -10
  422. package/src/types/index.ts +3 -0
  423. package/src/types/service.ts +14 -14
  424. package/src/util/suggestions.ts +1 -1
  425. package/dist/lib/neutral/AgentArticle-2BEPWUMN.mjs.map +0 -7
  426. package/dist/lib/neutral/AssistantSettings-7ALY4BMS.mjs +0 -40
  427. package/dist/lib/neutral/AssistantSettings-7ALY4BMS.mjs.map +0 -7
  428. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs +0 -27
  429. package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs.map +0 -7
  430. package/dist/lib/neutral/ChatCompanion-YHC43RYQ.mjs.map +0 -7
  431. package/dist/lib/neutral/ChatDialog-YZDZLIQA.mjs.map +0 -7
  432. package/dist/lib/neutral/RoutineArticle-FK5BXQN5.mjs +0 -119
  433. package/dist/lib/neutral/RoutineArticle-FK5BXQN5.mjs.map +0 -7
  434. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs +0 -48
  435. package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs.map +0 -7
  436. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs +0 -17
  437. package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs.map +0 -7
  438. package/dist/lib/neutral/SpaceHomePrompt-HTWQKLGI.mjs.map +0 -7
  439. package/dist/lib/neutral/SpaceHomeSuggestions-6G4E7GNJ.mjs +0 -50
  440. package/dist/lib/neutral/SpaceHomeSuggestions-6G4E7GNJ.mjs.map +0 -7
  441. package/dist/lib/neutral/TriggerStatus-RBOHHDOK.mjs.map +0 -7
  442. package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs.map +0 -7
  443. package/dist/lib/neutral/agent-service-WV5CSHAG.mjs.map +0 -7
  444. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs +0 -42
  445. package/dist/lib/neutral/ai-context-7WRHWYXY.mjs.map +0 -7
  446. package/dist/lib/neutral/ai-service-AADUIKBY.mjs.map +0 -7
  447. package/dist/lib/neutral/app-graph-builder-PTSRZXRN.mjs.map +0 -7
  448. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs +0 -115
  449. package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs.map +0 -7
  450. package/dist/lib/neutral/blueprint-definition-2XPYI35X.mjs +0 -40
  451. package/dist/lib/neutral/blueprint-definition-2XPYI35X.mjs.map +0 -7
  452. package/dist/lib/neutral/blueprints/index.mjs +0 -8
  453. package/dist/lib/neutral/chunk-54W7N6M6.mjs.map +0 -7
  454. package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +0 -7
  455. package/dist/lib/neutral/chunk-5KB2WRI2.mjs.map +0 -7
  456. package/dist/lib/neutral/chunk-7FQT4XMI.mjs +0 -8
  457. package/dist/lib/neutral/chunk-H77JTXAN.mjs.map +0 -7
  458. package/dist/lib/neutral/chunk-IQZJ5TTM.mjs +0 -130
  459. package/dist/lib/neutral/chunk-IQZJ5TTM.mjs.map +0 -7
  460. package/dist/lib/neutral/chunk-KLYLW4WH.mjs.map +0 -7
  461. package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs.map +0 -7
  462. package/dist/lib/neutral/create-chat-Z3FNA6OJ.mjs.map +0 -7
  463. package/dist/lib/neutral/create-object-BJUDDKQQ.mjs.map +0 -7
  464. package/dist/lib/neutral/fork-chat-UYXYT6BT.mjs.map +0 -7
  465. package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs.map +0 -7
  466. package/dist/lib/neutral/markdown-extension-IJ5RQMQ4.mjs.map +0 -7
  467. package/dist/lib/neutral/react-surface-ES7UHZ65.mjs.map +0 -7
  468. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs +0 -22
  469. package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +0 -7
  470. package/dist/lib/neutral/run-prompt-in-new-chat-NIAGCKQV.mjs.map +0 -7
  471. package/dist/types/src/blueprints/assistant/blueprint.d.ts +0 -4
  472. package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +0 -1
  473. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts +0 -2
  474. package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts.map +0 -1
  475. package/dist/types/src/blueprints/assistant/index.d.ts +0 -2
  476. package/dist/types/src/blueprints/assistant/index.d.ts.map +0 -1
  477. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  478. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  479. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  480. package/dist/types/src/capabilities/integration-provider.d.ts.map +0 -1
  481. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +0 -1
  482. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts +0 -7
  483. package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts.map +0 -1
  484. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts +0 -15
  485. package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts.map +0 -1
  486. package/dist/types/src/components/RoutineProperties/index.d.ts +0 -2
  487. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +0 -13
  488. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +0 -1
  489. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +0 -1
  490. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +0 -21
  491. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +0 -1
  492. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +0 -16
  493. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +0 -1
  494. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts +0 -12
  495. package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +0 -1
  496. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +0 -3
  497. package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +0 -1
  498. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +0 -8
  499. package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +0 -1
  500. package/dist/types/src/components/TemplateEditor/index.d.ts +0 -2
  501. package/dist/types/src/components/TemplateEditor/index.d.ts.map +0 -1
  502. package/dist/types/src/components/TemplateEditor/types.d.ts +0 -18
  503. package/dist/types/src/components/TemplateEditor/types.d.ts.map +0 -1
  504. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +0 -6
  505. package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +0 -1
  506. package/dist/types/src/containers/BlueprintArticle/index.d.ts +0 -2
  507. package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +0 -1
  508. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +0 -6
  509. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +0 -1
  510. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +0 -15
  511. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +0 -1
  512. package/dist/types/src/containers/RoutineArticle/index.d.ts +0 -2
  513. package/dist/types/src/containers/RoutineArticle/index.d.ts.map +0 -1
  514. package/dist/types/src/containers/RoutineList/RoutineList.d.ts +0 -6
  515. package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +0 -1
  516. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +0 -21
  517. package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +0 -1
  518. package/dist/types/src/containers/RoutineList/index.d.ts +0 -2
  519. package/dist/types/src/containers/RoutineList/index.d.ts.map +0 -1
  520. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +0 -66
  521. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +0 -1
  522. package/dist/types/src/hooks/useOnline.d.ts +0 -3
  523. package/dist/types/src/hooks/useOnline.d.ts.map +0 -1
  524. package/dist/types/src/templates/automation-templates.test.d.ts +0 -2
  525. package/dist/types/src/templates/automation-templates.test.d.ts.map +0 -1
  526. package/src/blueprints/assistant/index.ts +0 -5
  527. package/src/capabilities/blueprint-definition.ts +0 -67
  528. package/src/components/AssistantSettings/AssistantSettings.tsx +0 -43
  529. package/src/components/RoutineProperties/RoutineProperties.stories.tsx +0 -59
  530. package/src/components/RoutineProperties/RoutineProperties.tsx +0 -23
  531. package/src/components/RoutineProperties/index.ts +0 -5
  532. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +0 -95
  533. package/src/components/TemplateEditor/TemplateEditor.tsx +0 -80
  534. package/src/components/TemplateEditor/TemplateForm.stories.tsx +0 -76
  535. package/src/components/TemplateEditor/TemplateForm.tsx +0 -204
  536. package/src/components/TemplateEditor/extensions/handlebars-extension.ts +0 -274
  537. package/src/components/TemplateEditor/extensions/index.ts +0 -6
  538. package/src/components/TemplateEditor/extensions/xml-extension.ts +0 -64
  539. package/src/components/TemplateEditor/index.ts +0 -5
  540. package/src/components/TemplateEditor/types.tsx +0 -28
  541. package/src/containers/BlueprintArticle/BlueprintArticle.tsx +0 -29
  542. package/src/containers/BlueprintArticle/index.ts +0 -5
  543. package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +0 -75
  544. package/src/containers/RoutineArticle/RoutineArticle.tsx +0 -109
  545. package/src/containers/RoutineArticle/index.ts +0 -5
  546. package/src/containers/RoutineList/RoutineList.stories.tsx +0 -130
  547. package/src/containers/RoutineList/RoutineList.tsx +0 -50
  548. package/src/containers/RoutineList/index.ts +0 -5
  549. package/src/hooks/useBlueprintRegistry.ts +0 -125
  550. package/src/hooks/useOnline.ts +0 -10
  551. package/src/templates/automation-templates.test.ts +0 -66
  552. /package/dist/lib/neutral/{ChatArticle-KT46SUFU.mjs.map → ChatArticle-OO7GGEFW.mjs.map} +0 -0
  553. /package/dist/lib/neutral/{TracePanel-T552TAOH.mjs.map → TracePanel-JKNWADJ4.mjs.map} +0 -0
  554. /package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs.map → edge-model-resolver-WDJWDZTT.mjs.map} +0 -0
  555. /package/dist/lib/neutral/{blueprints → extensions}/index.mjs.map +0 -0
  556. /package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts +0 -0
  557. /package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts +0 -0
  558. /package/dist/types/src/{blueprints → skills}/index.d.ts +0 -0
  559. /package/src/{components → containers}/AssistantSettings/index.ts +0 -0
  560. /package/src/{blueprints → skills}/index.ts +0 -0
@@ -5,13 +5,16 @@
5
5
  import * as Array from 'effect/Array';
6
6
  import * as Either from 'effect/Either';
7
7
  import { pipe } from 'effect/Function';
8
+ import * as Option from 'effect/Option';
8
9
  import * as Pipeable from 'effect/Pipeable';
9
10
  import * as Schema from 'effect/Schema';
10
11
  import * as Struct from 'effect/Struct';
11
12
 
12
13
  import { AgentRequestBegin, AgentRequestEnd, CompleteBlock } from '@dxos/assistant';
13
14
  import { Process, Trace } from '@dxos/compute';
15
+ import { Annotation } from '@dxos/echo';
14
16
  import { AGENT_PROCESS_KEY } from '@dxos/functions-runtime';
17
+ import { EID } from '@dxos/keys';
15
18
  import { LogLevel, log } from '@dxos/log';
16
19
  import { type Commit } from '@dxos/react-ui-components';
17
20
  import { type ContentBlock } from '@dxos/types';
@@ -23,6 +26,9 @@ import { ROOT_SPAN_ID, type Span, buildSpanTree, isSpanBeginEvent, isSpanEndEven
23
26
  */
24
27
  const MAIN_BRANCH = 'main';
25
28
 
29
+ /** Timeline tag that applies a shimmer message effect. */
30
+ const SHIMMER_EFFECT_TAG = 'effect:shimmer';
31
+
26
32
  const ICONS = {
27
33
  agentRequestBegin: {
28
34
  icon: 'ph--atom--regular',
@@ -85,6 +91,7 @@ const ICONS = {
85
91
  export interface BuildExecutionGraphParams {
86
92
  traceMessages: readonly Trace.Message[];
87
93
  activeProcesses?: readonly Process.Info[];
94
+ collapseCompletedSpans?: boolean;
88
95
  eventLimit?: number;
89
96
  }
90
97
 
@@ -112,11 +119,12 @@ export type ExecutionGraphDetailsMap = Record<string, Trace.FlatEvent | undefine
112
119
  export const buildExecutionGraph = ({
113
120
  traceMessages,
114
121
  activeProcesses = [],
122
+ collapseCompletedSpans = false,
115
123
  eventLimit = 500,
116
124
  }: BuildExecutionGraphParams): ExecutionGraph => {
117
125
  const spanTree = buildSpanTree(traceMessages, { eventLimit });
118
126
  const toolCallContext = buildToolCallContext(traceMessages);
119
- const built = spanTreeToCommits(spanTree, activeProcesses, toolCallContext);
127
+ const built = spanTreeToCommits(spanTree, activeProcesses, toolCallContext, collapseCompletedSpans);
120
128
  log('trace execution graph', {
121
129
  traceMessages: traceMessages.length,
122
130
  commits: built.commits.length,
@@ -282,7 +290,7 @@ const presentEvent = (event: Trace.FlatEvent, toolCallContext: ToolCallContext):
282
290
  return {
283
291
  icon: success ? ICONS.toolResultSuccess.icon : ICONS.toolResultError.icon,
284
292
  level: success ? ICONS.toolResultSuccess.level : ICONS.toolResultError.level,
285
- message: `${name} - ${success ? 'Success' : 'Error'}`,
293
+ message: `${name}${!success ? ' - Error' : ''}`,
286
294
  idSuffix: `toolResult:${event.data.block.toolCallId}`,
287
295
  };
288
296
  }
@@ -311,7 +319,7 @@ const presentEvent = (event: Trace.FlatEvent, toolCallContext: ToolCallContext):
311
319
  return {
312
320
  icon: event.data.icon ?? (success ? ICONS.operationEndSuccess.icon : ICONS.operationEndError.icon),
313
321
  level: success ? ICONS.operationEndSuccess.level : ICONS.operationEndError.level,
314
- message: `${event.data.name ?? event.data.key} - ${success ? 'Success' : 'Error'}`,
322
+ message: `${event.data.name ?? event.data.key}${!success ? ' - Error' : ''}`,
315
323
  idSuffix: `${event.data.key}:end`,
316
324
  };
317
325
  }
@@ -343,7 +351,10 @@ export const collectProcessActivityLines = (
343
351
  if (!pid || !descendantPids.has(pid)) {
344
352
  return false;
345
353
  }
346
- if (conversationId && message.meta.conversationId !== undefined && message.meta.conversationId !== conversationId) {
354
+ const metaConvId = message.meta.conversation
355
+ ? EID.getEntityId(EID.parse(message.meta.conversation.uri))
356
+ : undefined;
357
+ if (conversationId && metaConvId !== undefined && metaConvId !== conversationId) {
347
358
  return false;
348
359
  }
349
360
  return true;
@@ -381,7 +392,10 @@ export const deriveInFlightActivityLine = (
381
392
  if (!pid || !descendantPids.has(pid)) {
382
393
  return false;
383
394
  }
384
- if (conversationId && message.meta.conversationId !== undefined && message.meta.conversationId !== conversationId) {
395
+ const metaConvId = message.meta.conversation
396
+ ? EID.getEntityId(EID.parse(message.meta.conversation.uri))
397
+ : undefined;
398
+ if (conversationId && metaConvId !== undefined && metaConvId !== conversationId) {
385
399
  return false;
386
400
  }
387
401
  return true;
@@ -448,11 +462,41 @@ const collectDescendantPids = (messages: readonly Trace.Message[], rootPid: stri
448
462
  return pids;
449
463
  };
450
464
 
465
+ const isPendingToolCallEvent = (event: Trace.FlatEvent, toolCallContext: ToolCallContext): boolean => {
466
+ if (!Trace.isOfType(CompleteBlock, event)) {
467
+ return false;
468
+ }
469
+ if (event.data.block._tag !== 'toolCall') {
470
+ return false;
471
+ }
472
+ return !toolCallContext.resultByCallId.has(event.data.block.toolCallId);
473
+ };
474
+
475
+ /**
476
+ * Marks commits that represent work still in flight for Timeline shimmer styling.
477
+ */
478
+ const shouldShimmerInProgressCommit = (event: Trace.FlatEvent, toolCallContext: ToolCallContext): boolean =>
479
+ isPendingToolCallEvent(event, toolCallContext);
480
+
481
+ /**
482
+ * A span is completed when its last recorded event is a matching end boundary.
483
+ */
484
+ const isCompletedSpan = (span: Span): boolean => {
485
+ if (span.id === ROOT_SPAN_ID) {
486
+ return false;
487
+ }
488
+ const lastEvent = span.events[span.events.length - 1];
489
+ return lastEvent !== undefined && isSpanEndEvent(lastEvent);
490
+ };
491
+
451
492
  /**
452
493
  * A span is "collapsible" when it would otherwise render as an empty fork-and-merge:
453
494
  * exactly two events that form a begin/end pair and no child sub-spans. In that case
454
495
  * we emit a single commit for the end event on the parent branch.
455
496
  *
497
+ * When `collapseCompletedSpans` is enabled, any completed span collapses to that single
498
+ * end commit — middle events, child sub-spans, and the begin fork are all omitted.
499
+ *
456
500
  * A *pending* span (one whose end event has not yet been recorded) is never collapsed:
457
501
  * its trailing events should keep rendering as middle commits on the span's own branch
458
502
  * — never as a fake "end" commit on the parent branch.
@@ -461,22 +505,24 @@ const collectDescendantPids = (messages: readonly Trace.Message[], rootPid: stri
461
505
  * once they have completed: a span with no inner activity is collapsed regardless of where
462
506
  * it sits in the tree.
463
507
  */
464
- const isCollapsibleSpan = (span: Span, parent: Span | null): boolean => {
508
+ const isCollapsibleSpan = (span: Span, parent: Span | null, collapseCompletedSpans: boolean): boolean => {
465
509
  if (span.id === ROOT_SPAN_ID) {
466
510
  return false;
467
511
  }
468
- if (span.events.length !== 2) {
512
+ if (parent === null) {
469
513
  return false;
470
514
  }
471
- if (span.children.length > 0) {
472
- return false;
515
+ if (span.events.length === 2 && span.children.length === 0) {
516
+ const firstEvent = span.events[0];
517
+ const lastEvent = span.events[span.events.length - 1];
518
+ if (isSpanBeginEvent(firstEvent) && isSpanEndEvent(lastEvent)) {
519
+ return true;
520
+ }
473
521
  }
474
- const firstEvent = span.events[0];
475
- const lastEvent = span.events[span.events.length - 1];
476
- if (!isSpanBeginEvent(firstEvent) || !isSpanEndEvent(lastEvent)) {
477
- return false;
522
+ if (collapseCompletedSpans && isCompletedSpan(span)) {
523
+ return true;
478
524
  }
479
- return parent !== null;
525
+ return false;
480
526
  };
481
527
 
482
528
  /**
@@ -491,13 +537,15 @@ const isCollapsibleSpan = (span: Span, parent: Span | null): boolean => {
491
537
  * Collapsible spans (`isCollapsibleSpan`) emit only the end commit on the parent branch with
492
538
  * a single parent — a tidier rendering for sub-operations that have no inner detail.
493
539
  *
494
- * Events are processed in global chronological order so that sub-operations of a span interleave
495
- * naturally with the span's own middle events.
540
+ * Events are processed in categorical span-tree order: each span's begin events, its child
541
+ * subtrees (depth-first), then its remaining events. Active-process running rows are inserted
542
+ * at the end of each matching span block — not appended after the entire tree.
496
543
  */
497
544
  const spanTreeToCommits = (
498
545
  root: Span,
499
546
  activeProcesses: readonly Process.Info[],
500
547
  toolCallContext: ToolCallContext,
548
+ collapseCompletedSpans: boolean,
501
549
  ): { branches: string[]; commits: Commit[]; details: ExecutionGraphDetailsMap } => {
502
550
  const builder = new GraphBuilder();
503
551
  const details: ExecutionGraphDetailsMap = {};
@@ -517,6 +565,24 @@ const spanTreeToCommits = (
517
565
 
518
566
  const findParentSpan = (span: Span): Span | null => parentBySpan.get(span) ?? null;
519
567
 
568
+ const collapsedSpanIds = new Set<string>();
569
+ walkSpanTree(root, (span) => {
570
+ if (isCollapsibleSpan(span, findParentSpan(span), collapseCompletedSpans)) {
571
+ collapsedSpanIds.add(span.id);
572
+ }
573
+ });
574
+
575
+ const isUnderCollapsedAncestor = (span: Span): boolean => {
576
+ let ancestor = findParentSpan(span);
577
+ while (ancestor) {
578
+ if (collapsedSpanIds.has(ancestor.id)) {
579
+ return true;
580
+ }
581
+ ancestor = findParentSpan(ancestor);
582
+ }
583
+ return false;
584
+ };
585
+
520
586
  // The branch name for a span is its pid — multiple sequential spans of the same process
521
587
  // (e.g. successive agent requests in one session) share a branch so they reuse a single lane.
522
588
  const branchOf = (span: Span | null): string => {
@@ -526,6 +592,9 @@ const spanTreeToCommits = (
526
592
  return span.meta.pid ?? span.id;
527
593
  };
528
594
 
595
+ // Track the id of the begin commit for each non-collapsible span so the end commit can merge into it.
596
+ const beginCommitIdBySpan = new Map<string, string>();
597
+
529
598
  // Selector that returns "the most recent commit in this span's structural context".
530
599
  //
531
600
  // The walk is structural (pid/parentPid), not topological: at each ancestor, we prefer
@@ -551,29 +620,60 @@ const spanTreeToCommits = (
551
620
  );
552
621
  };
553
622
 
554
- // Flatten the tree into a chronological stream, recording each event's position within its span
555
- // so we can detect begin/end events.
556
- interface EventCursor {
557
- span: Span;
558
- event: Trace.FlatEvent;
559
- eventIndex: number;
560
- globalIndex: number;
561
- }
562
- const stream: EventCursor[] = [];
563
- walkSpanTree(root, (span) => {
564
- span.events.forEach((event, eventIndex) => {
565
- stream.push({ span, event, eventIndex, globalIndex: stream.length });
566
- });
567
- });
568
- stream.sort((a, b) => a.event.timestamp - b.event.timestamp || a.globalIndex - b.globalIndex);
623
+ const lastCommitIdBySpan = new Map<string, string>();
624
+ let globalIndex = 0;
625
+ const insertedRunningPids = new Set<string>();
626
+ const activeProcessByPid = new Map(activeProcesses.map((process) => [process.pid, process]));
569
627
 
570
- // Track the id of the begin commit for each non-collapsible span so the end commit can merge into it.
571
- const beginCommitIdBySpan = new Map<string, string>();
628
+ const emitRunningIndicator = (pid: Process.ID): void => {
629
+ if (insertedRunningPids.has(pid)) {
630
+ return;
631
+ }
572
632
 
573
- for (const { span, event, globalIndex } of stream) {
633
+ const process = activeProcessByPid.get(pid);
634
+ if (!process) {
635
+ return;
636
+ }
637
+
638
+ if (
639
+ process.key === AGENT_PROCESS_KEY &&
640
+ Option.isSome(Annotation.getDictionary(process.params.annotations, Process.TargetAnnotation)) &&
641
+ (process.state === Process.State.RUNNING || process.state === Process.State.HYBERNATING)
642
+ ) {
643
+ builder.addCommit({
644
+ id: `running:${process.pid}`,
645
+ branch: process.pid,
646
+ parents: builder.computeParents(
647
+ CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),
648
+ ),
649
+ icon: ICONS.agentRequestRunning.icon,
650
+ level: ICONS.agentRequestRunning.level,
651
+ message: 'Generating...',
652
+ timestamp: new Date(),
653
+ tags: [SHIMMER_EFFECT_TAG],
654
+ });
655
+ insertedRunningPids.add(pid);
656
+ } else if (process.state === Process.State.RUNNING && builder.hasBranch(process.pid)) {
657
+ builder.addCommit({
658
+ id: `running:${process.pid}`,
659
+ branch: process.pid,
660
+ parents: builder.computeParents(
661
+ CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),
662
+ ),
663
+ icon: ICONS.processRunning.icon,
664
+ level: ICONS.processRunning.level,
665
+ message: 'Running...',
666
+ timestamp: new Date(),
667
+ tags: [SHIMMER_EFFECT_TAG],
668
+ });
669
+ insertedRunningPids.add(pid);
670
+ }
671
+ };
672
+
673
+ const emitEventCommit = (span: Span, event: Trace.FlatEvent, eventIndex: number): void => {
574
674
  const presentation = presentEvent(event, toolCallContext);
575
675
  if (!presentation) {
576
- continue;
676
+ return;
577
677
  }
578
678
 
579
679
  // Classify based on event TYPE, not array index. A pending span's trailing
@@ -583,11 +683,16 @@ const spanTreeToCommits = (
583
683
  const isBeginEvent = isSpanBeginEvent(event);
584
684
  const isEndEvent = isSpanEndEvent(event);
585
685
  const parentSpan = findParentSpan(span);
586
- const collapsible = isCollapsibleSpan(span, parentSpan);
686
+ const collapsible = isCollapsibleSpan(span, parentSpan, collapseCompletedSpans);
587
687
 
588
- // Collapsed spans: skip the begin event entirely; only the end event renders.
589
- if (collapsible && isBeginEvent) {
590
- continue;
688
+ // Descendants of a collapsed span emit no commits — inner activity is folded into the ancestor end row.
689
+ if (isUnderCollapsedAncestor(span)) {
690
+ return;
691
+ }
692
+
693
+ // Collapsed spans: skip every event except the end commit.
694
+ if (collapsible && !isEndEvent) {
695
+ return;
591
696
  }
592
697
 
593
698
  const parentBranch = branchOf(parentSpan);
@@ -601,7 +706,7 @@ const spanTreeToCommits = (
601
706
  // mid-stream would flash a throwaway lane.
602
707
  const ownPid = span.meta.pid;
603
708
  const parentPid = parentSpan?.meta.pid;
604
- const spanHasMiddle = span.events.some((event) => !isSpanBeginEvent(event) && !isSpanEndEvent(event));
709
+ const spanHasMiddle = span.events.some((spanEvent) => !isSpanBeginEvent(spanEvent) && !isSpanEndEvent(spanEvent));
605
710
  const isProcessBoundary = ownPid != null && parentPid != null && ownPid !== parentPid && spanHasMiddle;
606
711
 
607
712
  let branch: string;
@@ -651,7 +756,9 @@ const spanTreeToCommits = (
651
756
  parents = builder.computeParents(lastInSpanContext(span));
652
757
  }
653
758
 
654
- const commitId = formatCommitId(span, globalIndex, presentation.idSuffix);
759
+ const commitIndex = globalIndex++;
760
+ const commitId = formatCommitId(span, commitIndex, presentation.idSuffix);
761
+ const shimmer = shouldShimmerInProgressCommit(event, toolCallContext);
655
762
  const commit: Commit = {
656
763
  id: commitId,
657
764
  branch,
@@ -660,47 +767,65 @@ const spanTreeToCommits = (
660
767
  icon: presentation.icon,
661
768
  level: presentation.level,
662
769
  message: presentation.message,
770
+ ...(shimmer && { tags: [SHIMMER_EFFECT_TAG] }),
663
771
  };
664
772
  builder.addCommit(commit);
665
773
  details[commitId] = event;
774
+ lastCommitIdBySpan.set(span.id, commitId);
666
775
 
667
776
  // Record begin commit so a later end event can merge into it.
668
777
  if (isBeginEvent && !collapsible && span.id !== ROOT_SPAN_ID) {
669
778
  beginCommitIdBySpan.set(span.id, commitId);
670
779
  }
671
- }
780
+ };
672
781
 
673
- // Append "running" indicators for processes that are still active.
674
- for (const process of activeProcesses) {
675
- if (
676
- process.key === AGENT_PROCESS_KEY &&
677
- process.params.target &&
678
- (process.state === Process.State.RUNNING || process.state === Process.State.HYBERNATING)
679
- ) {
680
- builder.addCommit({
681
- id: `running:${process.pid}`,
682
- branch: process.pid,
683
- parents: builder.computeParents(
684
- CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),
685
- ),
686
- icon: ICONS.agentRequestRunning.icon,
687
- level: ICONS.agentRequestRunning.level,
688
- message: 'Generating...',
689
- timestamp: new Date(),
690
- });
691
- } else if (process.state === Process.State.RUNNING && builder.hasBranch(process.pid)) {
692
- builder.addCommit({
693
- id: `running:${process.pid}`,
694
- branch: process.pid,
695
- parents: builder.computeParents(
696
- CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),
697
- ),
698
- icon: ICONS.processRunning.icon,
699
- level: ICONS.processRunning.level,
700
- message: 'Running...',
701
- timestamp: new Date(),
702
- });
782
+ const finishSpan = (span: Span): void => {
783
+ const pid = span.meta.pid;
784
+ if (pid) {
785
+ // Trace.Meta.pid is plain string (avoids circular dep); construct brand here.
786
+ emitRunningIndicator(Process.ID.make(pid));
703
787
  }
788
+
789
+ if (span.id === ROOT_SPAN_ID || isCompletedSpan(span)) {
790
+ return;
791
+ }
792
+
793
+ if (pid && insertedRunningPids.has(pid)) {
794
+ return;
795
+ }
796
+
797
+ const lastCommitId = lastCommitIdBySpan.get(span.id);
798
+ if (lastCommitId) {
799
+ builder.addTag(lastCommitId, SHIMMER_EFFECT_TAG);
800
+ }
801
+ };
802
+
803
+ const emitSpanCommits = (span: Span): void => {
804
+ for (let eventIndex = 0; eventIndex < span.events.length; eventIndex += 1) {
805
+ const event = span.events[eventIndex]!;
806
+ if (isSpanBeginEvent(event)) {
807
+ emitEventCommit(span, event, eventIndex);
808
+ }
809
+ }
810
+
811
+ for (const child of span.children) {
812
+ emitSpanCommits(child);
813
+ }
814
+
815
+ for (let eventIndex = 0; eventIndex < span.events.length; eventIndex += 1) {
816
+ const event = span.events[eventIndex]!;
817
+ if (!isSpanBeginEvent(event)) {
818
+ emitEventCommit(span, event, eventIndex);
819
+ }
820
+ }
821
+
822
+ finishSpan(span);
823
+ };
824
+
825
+ emitSpanCommits(root);
826
+
827
+ for (const process of activeProcesses) {
828
+ emitRunningIndicator(process.pid);
704
829
  }
705
830
 
706
831
  const { commits, branches } = builder.build();
@@ -870,6 +995,18 @@ class GraphBuilder {
870
995
  this.#commits.push(commit);
871
996
  }
872
997
 
998
+ addTag(commitId: string, tag: string) {
999
+ const index = this.#commits.findIndex((commit) => commit.id === commitId);
1000
+ if (index < 0) {
1001
+ return;
1002
+ }
1003
+ const commit = this.#commits[index]!;
1004
+ if (commit.tags?.includes(tag)) {
1005
+ return;
1006
+ }
1007
+ this.#commits[index] = { ...commit, tags: [...(commit.tags ?? []), tag] };
1008
+ }
1009
+
873
1010
  /**
874
1011
  * Computes parents — picks first matching commit's id.
875
1012
  */
@@ -3,32 +3,32 @@
3
3
  //
4
4
 
5
5
  export {
6
- CommitSelector,
7
- buildExecutionGraph,
8
- collectProcessActivityLines,
9
- deriveInFlightActivityLine,
10
6
  type BuildExecutionGraphParams,
11
7
  type CollectProcessActivityOptions,
8
+ CommitSelector,
12
9
  type ExecutionGraph,
13
10
  type ExecutionGraphDetailsMap,
11
+ buildExecutionGraph,
12
+ collectProcessActivityLines,
13
+ deriveInFlightActivityLine,
14
14
  } from './execution-graph';
15
15
  export {
16
+ type EphemeralStatusUpdate,
16
17
  estimateTokenCount,
17
18
  formatPendingBlockStatus,
18
19
  pendingStatusFromEphemeralMessage,
19
20
  resolveEphemeralStatusUpdate,
20
- type EphemeralStatusUpdate,
21
21
  } from './pending-block-status';
22
22
  export {
23
23
  BEGIN_EVENT_TYPES,
24
+ type BuildSpanTreeOptions,
24
25
  END_EVENT_TYPES,
25
26
  ROOT_SPAN_ID,
27
+ type Span,
28
+ type SpanMeta,
26
29
  buildSpanTree,
27
30
  flattenSpanTree,
28
31
  isSpanBeginEvent,
29
32
  isSpanEndEvent,
30
33
  walkSpanTree,
31
- type BuildSpanTreeOptions,
32
- type Span,
33
- type SpanMeta,
34
34
  } from './span-tree';
@@ -9,7 +9,7 @@ import { describe, test } from 'vitest';
9
9
  import { AgentRequestBegin, AgentRequestEnd } from '@dxos/assistant';
10
10
  import { Trace } from '@dxos/compute';
11
11
 
12
- import { ROOT_SPAN_ID, buildSpanTree, flattenSpanTree } from './span-tree';
12
+ import { ROOT_SPAN_ID, buildSpanTree, collectSpanTreeEventsCategorically, flattenSpanTree } from './span-tree';
13
13
  import { collectTraceEvents, withMeta } from './testing';
14
14
 
15
15
  const NoteEvent = Trace.EventType('note', {
@@ -246,4 +246,36 @@ describe('buildSpanTree', () => {
246
246
  expect(order[2].meta.pid).toBe('op-1');
247
247
  expect(order).toHaveLength(3);
248
248
  });
249
+
250
+ test('collectSpanTreeEventsCategorically emits begin, child subtrees, then remaining events', ({ expect }) => {
251
+ const messages = collectTraceEvents(
252
+ Effect.gen(function* () {
253
+ yield* withMeta({ pid: 'parent-1' }, Trace.write(Trace.OperationStart, { key: 'parent', name: 'Parent' }));
254
+ yield* withMeta(
255
+ { pid: 'child-1', parentPid: 'parent-1' },
256
+ Effect.gen(function* () {
257
+ yield* Trace.write(Trace.OperationStart, { key: 'child', name: 'Child' });
258
+ yield* Trace.write(Trace.OperationEnd, { key: 'child', name: 'Child', outcome: 'success' });
259
+ }),
260
+ );
261
+ yield* withMeta(
262
+ { pid: 'parent-1' },
263
+ Trace.write(Trace.OperationEnd, { key: 'parent', name: 'Parent', outcome: 'success' }),
264
+ );
265
+ }),
266
+ );
267
+
268
+ const tree = buildSpanTree(messages);
269
+ const order = collectSpanTreeEventsCategorically(tree).map(({ span, event }) => ({
270
+ pid: span.meta.pid ?? ROOT_SPAN_ID,
271
+ type: event.type,
272
+ }));
273
+
274
+ expect(order).toEqual([
275
+ { pid: 'parent-1', type: Trace.OperationStart.key },
276
+ { pid: 'child-1', type: Trace.OperationStart.key },
277
+ { pid: 'child-1', type: Trace.OperationEnd.key },
278
+ { pid: 'parent-1', type: Trace.OperationEnd.key },
279
+ ]);
280
+ });
249
281
  });
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { AgentRequestBegin, AgentRequestEnd } from '@dxos/assistant';
6
6
  import { Trace } from '@dxos/compute';
7
+ import { EID } from '@dxos/keys';
7
8
 
8
9
  /**
9
10
  * Synthetic id assigned to the root span.
@@ -54,8 +55,8 @@ const computeMeta = (rawMeta: Trace.Meta): SpanMeta => ({
54
55
  pid: rawMeta.pid,
55
56
  parentPid: rawMeta.parentPid,
56
57
  processName: rawMeta.processName,
57
- conversationId: rawMeta.conversationId,
58
- triggerId: rawMeta.triggerId,
58
+ conversationId: rawMeta.conversation ? EID.getEntityId(EID.parse(rawMeta.conversation.uri)) : undefined,
59
+ triggerId: rawMeta.trigger ? EID.getEntityId(EID.parse(rawMeta.trigger.uri)) : undefined,
59
60
  toolCallId: rawMeta.toolCallId,
60
61
  runtimeName: rawMeta.runtimeName,
61
62
  });
@@ -249,6 +250,46 @@ const applyEventLimit = (events: readonly Trace.FlatEvent[], eventLimit: number
249
250
  const isBoundary = (event: Trace.FlatEvent): boolean =>
250
251
  BEGIN_EVENT_TYPES.has(event.type) || END_EVENT_TYPES.has(event.type);
251
252
 
253
+ /**
254
+ * A single event positioned within the span tree for commit emission.
255
+ */
256
+ export interface SpanEventCursor {
257
+ readonly span: Span;
258
+ readonly event: Trace.FlatEvent;
259
+ readonly eventIndex: number;
260
+ }
261
+
262
+ /**
263
+ * Flattens span-tree events in categorical (depth-first) order: each span's begin events, its
264
+ * child subtrees in sibling order, then its remaining events (middle and end).
265
+ */
266
+ export const collectSpanTreeEventsCategorically = (root: Span): SpanEventCursor[] => {
267
+ const stream: SpanEventCursor[] = [];
268
+
269
+ const visitSpan = (span: Span): void => {
270
+ for (let eventIndex = 0; eventIndex < span.events.length; eventIndex += 1) {
271
+ const event = span.events[eventIndex]!;
272
+ if (isSpanBeginEvent(event)) {
273
+ stream.push({ span, event, eventIndex });
274
+ }
275
+ }
276
+
277
+ for (const child of span.children) {
278
+ visitSpan(child);
279
+ }
280
+
281
+ for (let eventIndex = 0; eventIndex < span.events.length; eventIndex += 1) {
282
+ const event = span.events[eventIndex]!;
283
+ if (!isSpanBeginEvent(event)) {
284
+ stream.push({ span, event, eventIndex });
285
+ }
286
+ }
287
+ };
288
+
289
+ visitSpan(root);
290
+ return stream;
291
+ };
292
+
252
293
  /**
253
294
  * Walks the span tree in depth-first pre-order, invoking `visit` for each span (root included).
254
295
  */
@@ -24,26 +24,26 @@ describe('sub-agent delegation fixture', () => {
24
24
  expect(`\n${renderTimelineAscii(commits, branches)}\n`).toMatchInlineSnapshot(`
25
25
  "
26
26
  ● [atom] Agent processing request...
27
- ├──● [info] Get Agent Context - Success
27
+ ├──● [info] Get Agent Context
28
+ │ ● [info] Get Agent Context
29
+ │ ● [check-square-offset] Update tasks
30
+ │ ● [info] Get Agent Context
31
+ │ ● [share-network] Delegate task
32
+ │ ● [info] Get Agent Context
33
+ │ ├──● [brain] Run Routine
34
+ │ │ ● [info] Get Agent Context
35
+ │ │ ● [info] Get Agent Context
36
+ │ │ ● [file-text] Create
37
+ │ │ ● [info] Get Agent Context
38
+ │ │ ● [plus] Add artifact - Error
39
+ │ │ ● [info] Get Agent Context
40
+ │ │ ● [info] Get Agent Context
41
+ │ │ ● [user] Complete the following task and report the result concisely.
42
+ │ │ ● [wrench] completeJob
43
+ ◆──┼──╯ [brain] Run Routine
28
44
  │ ● [user] create a sub-agent that creates a haiku in a new document
29
- │ ● [info] Get Agent Context - Success
30
- │ ● [check-square-offset] Update tasks - Success
31
- │ ● [info] Get Agent Context - Success
32
- │ ● [share-network] Delegate task - Success
33
- │ ● [info] Get Agent Context - Success
34
45
  ◆──╯ [atom] Agent completed request
35
- │ ├──● [brain] Run Routine
36
- │ ● [info] Get Agent Context - Success
37
- │ ● [user] Complete the following task and report the result concisely.
38
- │ ● [info] Get Agent Context - Success
39
- ● │ [pencil] Update Chat Name - Success
40
- │ ● [file-text] Create - Success
41
- │ ● [info] Get Agent Context - Success
42
- │ ● [plus] Add artifact - Error
43
- │ ● [info] Get Agent Context - Success
44
- │ ● [wrench] completeJob - Success
45
- │ ● [info] Get Agent Context - Success
46
- ◆─────╯ [brain] Run Routine - Success
46
+ [pencil] Update Chat Name
47
47
  "
48
48
  `);
49
49
  });
@@ -53,7 +53,7 @@ describe('sub-agent delegation fixture', () => {
53
53
  const lines = collectProcessActivityLines(messages, subAgentPid);
54
54
  expect(lines.length).toBeGreaterThan(0);
55
55
  expect(lines).toContain('Run Routine');
56
- expect(lines[lines.length - 1]).toMatch(/Run Routine - Success/);
56
+ expect(lines[lines.length - 1]).toBe('Run Routine');
57
57
  });
58
58
 
59
59
  test('derives in-flight operation before completion', ({ expect }) => {
@@ -2,4 +2,4 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export { promptRunExtension, type PromptExtensionOptions } from './prompt-extension';
5
+ export { type PromptExtensionOptions, promptRunExtension } from './prompt-extension';
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { syntaxTree } from '@codemirror/language';
6
- import { Facet, type Extension, type Range } from '@codemirror/state';
6
+ import { type Extension, Facet, type Range } from '@codemirror/state';
7
7
  import { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';
8
8
 
9
9
  import { Domino } from '@dxos/ui';