@datalayer/agent-runtimes 1.0.10 → 1.0.17

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 (448) hide show
  1. package/README.md +82 -1
  2. package/lib/{AgentLexical.d.ts → AgentDocument.d.ts} +5 -5
  3. package/lib/{AgentLexical.js → AgentDocument.js} +156 -26
  4. package/lib/AgentNode.js +32 -31
  5. package/lib/AgentNotebook.js +172 -17
  6. package/lib/AppExamples2.css +47 -0
  7. package/lib/AppExamples2.d.ts +3 -0
  8. package/lib/AppExamples2.js +21 -0
  9. package/lib/{agent-lexical-main.js → agent-document-main.js} +2 -2
  10. package/lib/agents/AgentRuntimeChat.d.ts +73 -0
  11. package/lib/agents/AgentRuntimeChat.js +198 -0
  12. package/lib/api/index.d.ts +12 -0
  13. package/lib/api/index.js +46 -0
  14. package/lib/api/runtimes/checkpoints.d.ts +122 -0
  15. package/lib/api/runtimes/checkpoints.js +118 -0
  16. package/lib/api/runtimes/environments.d.ts +9 -0
  17. package/lib/api/runtimes/environments.js +29 -0
  18. package/lib/api/runtimes/healthz.d.ts +15 -0
  19. package/lib/api/runtimes/healthz.js +44 -0
  20. package/lib/api/runtimes/index.d.ts +12 -0
  21. package/lib/api/runtimes/index.js +16 -0
  22. package/lib/api/runtimes/runtimes.d.ts +138 -0
  23. package/lib/api/runtimes/runtimes.js +230 -0
  24. package/lib/api/runtimes/snapshots.d.ts +38 -0
  25. package/lib/api/runtimes/snapshots.js +82 -0
  26. package/lib/api/scheduler/index.d.ts +6 -0
  27. package/lib/api/scheduler/index.js +10 -0
  28. package/lib/api/scheduler/schedules.d.ts +85 -0
  29. package/lib/api/scheduler/schedules.js +78 -0
  30. package/lib/api/spacer/documents.d.ts +12 -0
  31. package/lib/api/spacer/documents.js +43 -0
  32. package/lib/api/spacer/healthz.d.ts +15 -0
  33. package/lib/api/spacer/healthz.js +44 -0
  34. package/lib/api/spacer/index.d.ts +15 -0
  35. package/lib/api/spacer/index.js +19 -0
  36. package/lib/api/spacer/items.d.ts +25 -0
  37. package/lib/api/spacer/items.js +55 -0
  38. package/lib/api/spacer/lexicals.d.ts +34 -0
  39. package/lib/api/spacer/lexicals.js +89 -0
  40. package/lib/api/spacer/notebooks.d.ts +34 -0
  41. package/lib/api/spacer/notebooks.js +89 -0
  42. package/lib/api/spacer/spaces.d.ts +84 -0
  43. package/lib/api/spacer/spaces.js +170 -0
  44. package/lib/api/spacer/users.d.ts +9 -0
  45. package/lib/api/spacer/users.js +29 -0
  46. package/lib/chat/Chat.d.ts +1 -1
  47. package/lib/chat/Chat.js +54 -54
  48. package/lib/chat/ChatFloating.d.ts +2 -2
  49. package/lib/chat/ChatFloating.js +136 -25
  50. package/lib/chat/ChatSidebar.js +20 -22
  51. package/lib/chat/base/ChatBase.js +429 -39
  52. package/lib/chat/display/EmptyState.js +21 -21
  53. package/lib/chat/document/EphemeralDocument.d.ts +23 -0
  54. package/lib/chat/document/EphemeralDocument.js +270 -0
  55. package/lib/chat/header/ChatHeaderBase.d.ts +12 -2
  56. package/lib/chat/header/ChatHeaderBase.js +78 -23
  57. package/lib/chat/index.d.ts +1 -0
  58. package/lib/chat/index.js +2 -0
  59. package/lib/chat/notebook/EphemeralNotebook.d.ts +24 -0
  60. package/lib/chat/notebook/EphemeralNotebook.js +252 -0
  61. package/lib/chat/prompt/InputFooter.js +4 -1
  62. package/lib/client/AgentRuntimesClient.d.ts +127 -0
  63. package/lib/client/AgentRuntimesClient.js +36 -0
  64. package/lib/client/AgentsMixin.js +28 -28
  65. package/lib/client/SdkAgentRuntimesClient.d.ts +1 -1
  66. package/lib/client/SdkAgentRuntimesClient.js +1 -1
  67. package/lib/client/mixins/RuntimesMixin.d.ts +93 -0
  68. package/lib/client/mixins/RuntimesMixin.js +229 -0
  69. package/lib/client/mixins/SpacerMixin.d.ts +210 -0
  70. package/lib/client/mixins/SpacerMixin.js +615 -0
  71. package/lib/client/utils/spacerUtils.d.ts +18 -0
  72. package/lib/client/utils/spacerUtils.js +32 -0
  73. package/lib/collaboration/DatalayerCollaboration.d.ts +13 -0
  74. package/lib/collaboration/DatalayerCollaboration.js +28 -0
  75. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +58 -0
  76. package/lib/collaboration/DatalayerCollaborationProvider.js +148 -0
  77. package/lib/collaboration/index.d.ts +2 -0
  78. package/lib/collaboration/index.js +6 -0
  79. package/lib/components/AgentSummary.d.ts +19 -0
  80. package/lib/components/AgentSummary.js +89 -0
  81. package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +13 -0
  82. package/lib/components/a2ui/A2uiSurfaceComposed.js +110 -0
  83. package/lib/components/a2ui/index.d.ts +2 -0
  84. package/lib/components/a2ui/index.js +6 -0
  85. package/lib/components/a2ui/styles.d.ts +14 -0
  86. package/lib/components/a2ui/styles.js +142 -0
  87. package/lib/components/context/SpaceSelect.d.ts +2 -0
  88. package/lib/components/context/SpaceSelect.js +42 -0
  89. package/lib/components/flashes/FlashDisclaimer.d.ts +2 -0
  90. package/lib/components/flashes/FlashDisclaimer.js +17 -0
  91. package/lib/components/icons/ArtifactIcon.d.ts +10 -0
  92. package/lib/components/icons/ArtifactIcon.js +58 -0
  93. package/lib/components/icons/index.d.ts +1 -0
  94. package/lib/components/icons/index.js +5 -0
  95. package/lib/components/index.d.ts +5 -0
  96. package/lib/components/index.js +5 -0
  97. package/lib/components/nbgrader/NbGradesDetails.d.ts +5 -0
  98. package/lib/components/nbgrader/NbGradesDetails.js +19 -0
  99. package/lib/components/nbgrader/index.d.ts +1 -0
  100. package/lib/components/nbgrader/index.js +5 -0
  101. package/lib/components/progress/CreditsIndicator.d.ts +33 -0
  102. package/lib/components/progress/CreditsIndicator.js +23 -0
  103. package/lib/components/progress/index.d.ts +2 -0
  104. package/lib/components/progress/index.js +6 -0
  105. package/lib/components/runtimes/RuntimeCellVariables.d.ts +39 -0
  106. package/lib/components/runtimes/RuntimeCellVariables.js +172 -0
  107. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +37 -0
  108. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +101 -0
  109. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +57 -0
  110. package/lib/components/runtimes/RuntimeLauncherDialog.js +275 -0
  111. package/lib/components/runtimes/RuntimePickerBase.d.ts +69 -0
  112. package/lib/components/runtimes/RuntimePickerBase.js +122 -0
  113. package/lib/components/runtimes/RuntimePickerCell.d.ts +34 -0
  114. package/lib/components/runtimes/RuntimePickerCell.js +104 -0
  115. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +42 -0
  116. package/lib/components/runtimes/RuntimePickerNotebook.js +232 -0
  117. package/lib/components/runtimes/RuntimeReservationControl.d.ts +47 -0
  118. package/lib/components/runtimes/RuntimeReservationControl.js +42 -0
  119. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +38 -0
  120. package/lib/components/runtimes/RuntimeSimplePicker.js +155 -0
  121. package/lib/components/runtimes/RuntimeTransfer.d.ts +16 -0
  122. package/lib/components/runtimes/RuntimeTransfer.js +5 -0
  123. package/lib/components/runtimes/RuntimeUtils.d.ts +17 -0
  124. package/lib/components/runtimes/RuntimeUtils.js +178 -0
  125. package/lib/components/runtimes/RuntimeVariables.d.ts +38 -0
  126. package/lib/components/runtimes/RuntimeVariables.js +75 -0
  127. package/lib/components/runtimes/index.d.ts +11 -0
  128. package/lib/components/runtimes/index.js +15 -0
  129. package/lib/components/scheduler/ScheduleMenu.d.ts +54 -0
  130. package/lib/components/scheduler/ScheduleMenu.js +154 -0
  131. package/lib/components/scheduler/index.d.ts +1 -0
  132. package/lib/components/scheduler/index.js +5 -0
  133. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +33 -0
  134. package/lib/components/snapshots/SandboxSnapshotMenu.js +169 -0
  135. package/lib/components/snapshots/index.d.ts +1 -0
  136. package/lib/components/snapshots/index.js +5 -0
  137. package/lib/components/snippets/SnippetDialog.d.ts +42 -0
  138. package/lib/components/snippets/SnippetDialog.js +42 -0
  139. package/lib/components/students/StudentItemStatus.d.ts +7 -0
  140. package/lib/components/students/StudentItemStatus.js +68 -0
  141. package/lib/components/students/index.d.ts +1 -0
  142. package/lib/components/students/index.js +5 -0
  143. package/lib/components/tokens/SpaceVariantToken.d.ts +5 -0
  144. package/lib/components/tokens/SpaceVariantToken.js +23 -0
  145. package/lib/components/tokens/index.d.ts +1 -0
  146. package/lib/components/tokens/index.js +5 -0
  147. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +4 -0
  148. package/lib/components/toolbars/AssignmentEditorToolbar.js +18 -0
  149. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +2 -0
  150. package/lib/components/toolbars/DocumentEditorToolbar.js +12 -0
  151. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +29 -0
  152. package/lib/components/toolbars/NotebookEditorToolbar.js +30 -0
  153. package/lib/context/ContextInspector.d.ts +1 -14
  154. package/lib/context/ContextInspector.js +3 -73
  155. package/lib/context/CostUsageChart.d.ts +4 -3
  156. package/lib/context/CostUsageChart.js +236 -35
  157. package/lib/context/MessageHistory.d.ts +30 -0
  158. package/lib/context/MessageHistory.js +129 -0
  159. package/lib/context/TokenUsageChart.d.ts +4 -3
  160. package/lib/context/TokenUsageChart.js +180 -30
  161. package/lib/context/TurnGraphChart.d.ts +1 -1
  162. package/lib/context/TurnGraphChart.js +6 -6
  163. package/lib/examples/A2UiAgentExample.d.ts +22 -0
  164. package/lib/examples/A2UiAgentExample.js +442 -0
  165. package/lib/examples/A2UiComponentsGalleryExample.d.ts +3 -0
  166. package/lib/examples/A2UiComponentsGalleryExample.js +863 -0
  167. package/lib/examples/A2UiContactCardExample.js +9 -5
  168. package/lib/examples/A2UiRestaurantExample.js +23 -8
  169. package/lib/examples/A2UiViewerExample.js +75 -3
  170. package/lib/examples/AgUiAgenticExample.d.ts +1 -12
  171. package/lib/examples/AgUiAgenticExample.js +52 -8
  172. package/lib/examples/AgUiBackendToolRenderingExample.d.ts +1 -16
  173. package/lib/examples/AgUiBackendToolRenderingExample.js +32 -17
  174. package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -17
  175. package/lib/examples/AgUiHaikuGenUiExample.js +49 -33
  176. package/lib/examples/AgUiHumanInTheLoopExample.d.ts +1 -12
  177. package/lib/examples/AgUiHumanInTheLoopExample.js +21 -6
  178. package/lib/examples/AgUiSharedStateExample.d.ts +1 -14
  179. package/lib/examples/AgUiSharedStateExample.js +21 -6
  180. package/lib/examples/AgUiToolsBasedGenUiExample.d.ts +1 -14
  181. package/lib/examples/AgUiToolsBasedGenUiExample.js +21 -6
  182. package/lib/examples/AgentCheckpointsExample.d.ts +1 -1
  183. package/lib/examples/AgentCheckpointsExample.js +9 -10
  184. package/lib/examples/AgentCodemodeExample.js +3 -3
  185. package/lib/examples/AgentEvalsExample.js +5 -5
  186. package/lib/examples/AgentGuardrailsExample.js +17 -12
  187. package/lib/examples/AgentHooksExample.js +14 -55
  188. package/lib/examples/AgentInferenceProviderExample.js +4 -4
  189. package/lib/examples/AgentLoopExample.d.ts +10 -0
  190. package/lib/examples/AgentLoopExample.js +304 -0
  191. package/lib/examples/AgentMCPExample.js +7 -7
  192. package/lib/examples/AgentMemoryExample.js +4 -4
  193. package/lib/examples/AgentMonitoringExample.js +114 -44
  194. package/lib/examples/AgentNotificationsExample.js +4 -4
  195. package/lib/examples/AgentOtelExample.d.ts +3 -3
  196. package/lib/examples/AgentOtelExample.js +15 -10
  197. package/lib/examples/AgentOutputsExample.js +6 -6
  198. package/lib/examples/AgentParametersExample.js +21 -33
  199. package/lib/examples/AgentSandboxExample.js +5 -5
  200. package/lib/examples/AgentSkillsExample.js +7 -7
  201. package/lib/examples/AgentSubagentsExample.js +4 -4
  202. package/lib/examples/AgentToolApprovalsExample.js +5 -5
  203. package/lib/examples/AgentTriggersExample.js +9 -9
  204. package/lib/examples/AgentspecsExample.js +63 -41
  205. package/lib/examples/ChatCustomExample.js +23 -77
  206. package/lib/examples/ChatExample.js +13 -44
  207. package/lib/examples/LexicalAgentExample.js +43 -91
  208. package/lib/examples/LexicalAgentSidebarExample.js +45 -73
  209. package/lib/examples/NotebookAgentExample.js +52 -81
  210. package/lib/examples/NotebookAgentSidebarExample.js +43 -71
  211. package/lib/examples/NotebookCollaborationExample.js +11 -9
  212. package/lib/examples/NotebookExample.js +5 -2
  213. package/lib/examples/components/AuthRequiredView.js +1 -1
  214. package/lib/examples/components/ExampleErrorBoundary.d.ts +46 -0
  215. package/lib/examples/components/ExampleErrorBoundary.js +67 -0
  216. package/lib/examples/components/haiku/haiku-card.css +11 -0
  217. package/lib/examples/components/weather/weather-card.css +11 -0
  218. package/lib/examples/example-selector.js +3 -1
  219. package/lib/examples/hooks/useExampleAgentRuntime.d.ts +35 -0
  220. package/lib/examples/hooks/useExampleAgentRuntime.js +82 -0
  221. package/lib/examples/hooks/useSpecRenderToolResult.d.ts +30 -0
  222. package/lib/examples/hooks/useSpecRenderToolResult.js +61 -0
  223. package/lib/examples/index.d.ts +3 -1
  224. package/lib/examples/index.js +3 -1
  225. package/lib/examples/main.js +340 -93
  226. package/lib/examples/utils/a2ui.d.ts +2 -0
  227. package/lib/examples/utils/a2ui.js +97 -2
  228. package/lib/examples/utils/agentSummaryStore.d.ts +21 -0
  229. package/lib/examples/utils/agentSummaryStore.js +23 -0
  230. package/lib/examples/utils/notebooks/Empty.ipynb.json +30 -30
  231. package/lib/examples/utils/runtimeTargetStore.d.ts +9 -0
  232. package/lib/examples/utils/runtimeTargetStore.js +27 -0
  233. package/lib/examples/utils/teardownAgents.d.ts +13 -0
  234. package/lib/examples/utils/teardownAgents.js +78 -0
  235. package/lib/examples/utils/useExampleAgentRuntimesUrl.d.ts +2 -0
  236. package/lib/examples/utils/useExampleAgentRuntimesUrl.js +26 -7
  237. package/lib/examples2/CellExample.d.ts +6 -0
  238. package/lib/examples2/CellExample.js +20 -0
  239. package/lib/examples2/DatalayerNotebookExample.d.ts +16 -0
  240. package/lib/examples2/DatalayerNotebookExample.js +109 -0
  241. package/lib/examples2/NativeNavigationExample.d.ts +8 -0
  242. package/lib/examples2/NativeNavigationExample.js +97 -0
  243. package/lib/examples2/NotebookExample.d.ts +6 -0
  244. package/lib/examples2/NotebookExample.js +19 -0
  245. package/lib/examples2/NotebookMutationsKernel.d.ts +2 -0
  246. package/lib/examples2/NotebookMutationsKernel.js +105 -0
  247. package/lib/examples2/NotebookMutationsServiceManager.d.ts +2 -0
  248. package/lib/examples2/NotebookMutationsServiceManager.js +109 -0
  249. package/lib/examples2/ReactRouterExample.d.ts +6 -0
  250. package/lib/examples2/ReactRouterExample.js +175 -0
  251. package/lib/examples2/example-selector.d.ts +22 -0
  252. package/lib/examples2/example-selector.js +45 -0
  253. package/lib/examples2/index.d.ts +2 -0
  254. package/lib/examples2/index.js +6 -0
  255. package/lib/examples2/lexical-theme.css +436 -0
  256. package/lib/examples2/main.d.ts +2 -0
  257. package/lib/examples2/main.js +330 -0
  258. package/lib/examples2/notebooks/IPyWidgetsExample.ipynb.json +101 -0
  259. package/lib/examples2/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
  260. package/lib/examples2/notebooks/Lite.ipynb.json +128 -0
  261. package/lib/examples2/notebooks/Matplotlib.ipynb.json +137 -0
  262. package/lib/examples2/notebooks/NotebookExample1.ipynb.json +126 -0
  263. package/lib/examples2/notebooks/NotebookExample2.ipynb.json +48 -0
  264. package/lib/examples2/notebooks/NotebookOutputs.ipynb.json +49 -0
  265. package/lib/examples2/notebooks/NotebookToCExample.ipynb.json +102 -0
  266. package/lib/examples2/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
  267. package/lib/examples2/notebooks/OutputIPyWidgetsExample.js +153 -0
  268. package/lib/examples2/notebooks/PyGWalker.ipynb.json +55 -0
  269. package/lib/hooks/index.d.ts +9 -1
  270. package/lib/hooks/index.js +13 -1
  271. package/lib/hooks/useAIAgentsWebSocket.d.ts +1 -1
  272. package/lib/hooks/useAIAgentsWebSocket.js +39 -3
  273. package/lib/hooks/useAgentRuntimes.d.ts +15 -3
  274. package/lib/hooks/useAgentRuntimes.js +186 -27
  275. package/lib/hooks/useAgentsService.js +5 -5
  276. package/lib/hooks/useCellOutputshot.d.ts +4 -0
  277. package/lib/hooks/useCellOutputshot.js +25 -0
  278. package/lib/hooks/useCheckpoints.d.ts +8 -8
  279. package/lib/hooks/useCheckpoints.js +36 -26
  280. package/lib/hooks/useConfig.d.ts +1 -1
  281. package/lib/hooks/useMonitoring.d.ts +7 -5
  282. package/lib/hooks/useMonitoring.js +16 -10
  283. package/lib/hooks/useNotifications.d.ts +11 -11
  284. package/lib/hooks/useNotifications.js +1 -1
  285. package/lib/hooks/useProgressStore.d.ts +25 -0
  286. package/lib/hooks/useProgressStore.js +58 -0
  287. package/lib/hooks/useProgressTask.d.ts +9 -0
  288. package/lib/hooks/useProgressTask.js +41 -0
  289. package/lib/hooks/useProjects.d.ts +628 -0
  290. package/lib/hooks/useProjects.js +190 -0
  291. package/lib/hooks/useRuntimes.d.ts +5 -0
  292. package/lib/hooks/useRuntimes.js +34 -0
  293. package/lib/hooks/useToolApprovals.d.ts +6 -6
  294. package/lib/index.d.ts +1 -0
  295. package/lib/index.js +1 -0
  296. package/lib/jupyter/exec/Python.d.ts +5 -0
  297. package/lib/jupyter/exec/Python.js +100 -0
  298. package/lib/jupyter/exec/Snippets.d.ts +105 -0
  299. package/lib/jupyter/exec/Snippets.js +101 -0
  300. package/lib/jupyter/exec/index.d.ts +2 -0
  301. package/lib/jupyter/exec/index.js +6 -0
  302. package/lib/jupyter/index.d.ts +2 -0
  303. package/lib/jupyter/index.js +6 -0
  304. package/lib/jupyter/kernelsHandler.d.ts +8 -0
  305. package/lib/jupyter/kernelsHandler.js +39 -0
  306. package/lib/mocks/models/CourseMock.d.ts +6 -0
  307. package/lib/mocks/models/CourseMock.js +29 -0
  308. package/lib/mocks/models/SpaceMock.d.ts +6 -0
  309. package/lib/mocks/models/SpaceMock.js +25 -0
  310. package/lib/models/Assignment.d.ts +7 -0
  311. package/lib/models/Assignment.js +5 -0
  312. package/lib/models/Cell.d.ts +8 -0
  313. package/lib/models/Cell.js +5 -0
  314. package/lib/models/CodeBlock.d.ts +10 -0
  315. package/lib/models/CodeBlock.js +5 -0
  316. package/lib/models/CodeSandboxSnapshot.d.ts +92 -0
  317. package/lib/models/CodeSandboxSnapshot.js +13 -0
  318. package/lib/models/CodeSandboxSnapshotDTO.d.ts +173 -0
  319. package/lib/models/CodeSandboxSnapshotDTO.js +139 -0
  320. package/lib/models/CodefeedBlocks.d.ts +7 -0
  321. package/lib/models/CodefeedBlocks.js +5 -0
  322. package/lib/models/Content.d.ts +5 -0
  323. package/lib/models/Content.js +5 -0
  324. package/lib/models/Course.d.ts +17 -0
  325. package/lib/models/Course.js +5 -0
  326. package/lib/models/Dataset.d.ts +16 -0
  327. package/lib/models/Dataset.js +5 -0
  328. package/lib/models/Document.d.ts +8 -0
  329. package/lib/models/Document.js +5 -0
  330. package/lib/models/Environment.d.ts +86 -0
  331. package/lib/models/Environment.js +5 -0
  332. package/lib/models/EnvironmentDTO.d.ts +125 -0
  333. package/lib/models/EnvironmentDTO.js +88 -0
  334. package/lib/models/Exercise.d.ts +16 -0
  335. package/lib/models/Exercise.js +5 -0
  336. package/lib/models/Item.d.ts +20 -0
  337. package/lib/models/Item.js +5 -0
  338. package/lib/models/ItemDTO.d.ts +74 -0
  339. package/lib/models/ItemDTO.js +186 -0
  340. package/lib/models/ItemType.d.ts +2 -0
  341. package/lib/models/ItemType.js +5 -0
  342. package/lib/models/Lesson.d.ts +5 -0
  343. package/lib/models/Lesson.js +5 -0
  344. package/lib/models/LexicalDTO.d.ts +155 -0
  345. package/lib/models/LexicalDTO.js +157 -0
  346. package/lib/models/Library.d.ts +10 -0
  347. package/lib/models/Library.js +5 -0
  348. package/lib/models/Notebook.d.ts +11 -0
  349. package/lib/models/Notebook.js +5 -0
  350. package/lib/models/NotebookDTO.d.ts +96 -0
  351. package/lib/models/NotebookDTO.js +153 -0
  352. package/lib/models/Page.d.ts +41 -0
  353. package/lib/models/Page.js +25 -0
  354. package/lib/models/PageTag.d.ts +19 -0
  355. package/lib/models/PageTag.js +94 -0
  356. package/lib/models/ProjectDTO.d.ts +89 -0
  357. package/lib/models/ProjectDTO.js +131 -0
  358. package/lib/models/Runtime.d.ts +160 -0
  359. package/lib/models/Runtime.js +18 -0
  360. package/lib/models/RuntimeDTO.d.ts +172 -0
  361. package/lib/models/RuntimeDTO.js +204 -0
  362. package/lib/models/Space.d.ts +35 -0
  363. package/lib/models/Space.js +66 -0
  364. package/lib/models/SpaceDTO.d.ts +334 -0
  365. package/lib/models/SpaceDTO.js +244 -0
  366. package/lib/models/SpaceItem.d.ts +10 -0
  367. package/lib/models/SpaceItem.js +5 -0
  368. package/lib/models/SpaceMember.d.ts +6 -0
  369. package/lib/models/SpaceMember.js +5 -0
  370. package/lib/models/StudentItem.d.ts +21 -0
  371. package/lib/models/StudentItem.js +5 -0
  372. package/lib/models/index.d.ts +32 -0
  373. package/lib/models/index.js +39 -0
  374. package/lib/protocols/AGUIAdapter.js +1 -1
  375. package/lib/runtimes/actions.d.ts +102 -0
  376. package/lib/runtimes/actions.js +249 -0
  377. package/lib/runtimes/apis.d.ts +273 -0
  378. package/lib/runtimes/apis.js +5 -0
  379. package/lib/runtimes/index.d.ts +5 -0
  380. package/lib/runtimes/index.js +9 -0
  381. package/lib/runtimes/settings.d.ts +15 -0
  382. package/lib/runtimes/settings.js +31 -0
  383. package/lib/runtimes/snapshots.d.ts +25 -0
  384. package/lib/runtimes/snapshots.js +150 -0
  385. package/lib/runtimes/utils.d.ts +7 -0
  386. package/lib/runtimes/utils.js +14 -0
  387. package/lib/services/DatalayerServiceManager.d.ts +23 -0
  388. package/lib/services/DatalayerServiceManager.js +90 -0
  389. package/lib/services/reconnectToRuntime.d.ts +32 -0
  390. package/lib/services/reconnectToRuntime.js +59 -0
  391. package/lib/services/sandboxServiceManagers.d.ts +31 -0
  392. package/lib/services/sandboxServiceManagers.js +57 -0
  393. package/lib/specs/agents/agents.d.ts +70 -26
  394. package/lib/specs/agents/agents.js +3994 -1639
  395. package/lib/specs/index.d.ts +1 -0
  396. package/lib/specs/index.js +1 -0
  397. package/lib/specs/loops.d.ts +34 -0
  398. package/lib/specs/loops.js +188 -0
  399. package/lib/specs/mcpServers.d.ts +1 -0
  400. package/lib/specs/mcpServers.js +17 -0
  401. package/lib/specs/models.d.ts +4 -0
  402. package/lib/specs/models.js +30 -0
  403. package/lib/specs/skills.d.ts +1 -0
  404. package/lib/specs/skills.js +18 -0
  405. package/lib/specs/tools.d.ts +15 -0
  406. package/lib/specs/tools.js +285 -0
  407. package/lib/state/index.d.ts +4 -0
  408. package/lib/state/index.js +10 -0
  409. package/lib/state/substates/CellState.d.ts +12 -0
  410. package/lib/state/substates/CellState.js +22 -0
  411. package/lib/state/substates/DocumentState.d.ts +10 -0
  412. package/lib/state/substates/DocumentState.js +14 -0
  413. package/lib/state/substates/GradeState.d.ts +10 -0
  414. package/lib/state/substates/GradeState.js +14 -0
  415. package/lib/state/substates/JupyterLabState.d.ts +16 -0
  416. package/lib/state/substates/JupyterLabState.js +17 -0
  417. package/lib/state/substates/NbformatState.d.ts +13 -0
  418. package/lib/state/substates/NbformatState.js +16 -0
  419. package/lib/state/substates/RuntimesState.d.ts +87 -0
  420. package/lib/state/substates/RuntimesState.js +192 -0
  421. package/lib/state/substates/SpaceState.d.ts +11 -0
  422. package/lib/state/substates/SpaceState.js +16 -0
  423. package/lib/state/substates/index.d.ts +8 -0
  424. package/lib/state/substates/index.js +14 -0
  425. package/lib/stores/agentRuntimeStore.d.ts +25 -2
  426. package/lib/stores/agentRuntimeStore.js +114 -19
  427. package/lib/stories/Button.stories.d.ts +1 -1
  428. package/lib/stories/Header.stories.d.ts +3 -3
  429. package/lib/test-setup.js +10 -0
  430. package/lib/types/agents-lifecycle.d.ts +5 -5
  431. package/lib/types/agents.d.ts +3 -3
  432. package/lib/types/agentspecs.d.ts +3 -1
  433. package/lib/types/chat.d.ts +135 -3
  434. package/lib/types/config.d.ts +19 -1
  435. package/lib/types/index.d.ts +1 -0
  436. package/lib/types/index.js +1 -0
  437. package/lib/types/loops.d.ts +64 -0
  438. package/lib/types/loops.js +5 -0
  439. package/lib/types/tools.d.ts +16 -0
  440. package/lib/utils/Cells.d.ts +2 -0
  441. package/lib/utils/Cells.js +28 -0
  442. package/package.json +24 -18
  443. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  444. package/scripts/codegen/generate_agents.py +21 -4
  445. package/scripts/codegen/generate_loops.py +443 -0
  446. package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
  447. package/lib/examples/A2UiComponentGalleryExample.js +0 -361
  448. /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
@@ -7,6 +7,7 @@ import { useEffect, useMemo, useRef, useState } from 'react';
7
7
  import ReactECharts from 'echarts-for-react';
8
8
  import { buildOtelWebSocketUrl } from '@datalayer/core/lib/otel';
9
9
  import { toMetricValue } from '../hooks/useMonitoring';
10
+ import { fetchOtelMetricRows } from '../hooks/useMonitoring';
10
11
  import { subscribeOtelWs } from './otelWsPool';
11
12
  import { agentRuntimeStore, getMonitoringCacheKey, useAgentRuntimeStore, } from '../stores/agentRuntimeStore';
12
13
  const COST_RUN_METRIC = 'agent_runtimes.capability.cost.run.usd';
@@ -89,9 +90,7 @@ function extractCostPoints(rows, agentId) {
89
90
  const metricName = row.metric_name;
90
91
  return (metricName === COST_CUMULATIVE_METRIC || metricName === COST_RUN_METRIC);
91
92
  });
92
- if (agentId) {
93
- filtered = filtered.filter(row => extractAgentId(row) === agentId);
94
- }
93
+ filtered = filtered.filter(row => agentIdMatches(row, agentId));
95
94
  const byTimestamp = new Map();
96
95
  for (const row of filtered) {
97
96
  const ts = rowTimestampKey(row);
@@ -111,22 +110,31 @@ function extractCostPoints(rows, agentId) {
111
110
  });
112
111
  for (const [, groupRows] of sorted) {
113
112
  const cumulativeRows = groupRows.filter(r => r.metric_name === COST_CUMULATIVE_METRIC);
114
- if (cumulativeRows.length === 0)
115
- continue;
116
113
  const runRows = groupRows.filter(r => r.metric_name === COST_RUN_METRIC);
117
- // Cumulative metric values represent the running total. Repeated snapshot
118
- // rows for the same timestamp should not be summed; keep the highest value.
119
- const cumulativeUsd = cumulativeRows.reduce((max, row) => Math.max(max, toMetricValue(row)), 0);
120
- const costUsd = runRows.reduce((sum, row) => sum + toMetricValue(row), 0);
121
- if (!Number.isFinite(cumulativeUsd) || !Number.isFinite(costUsd))
114
+ if (cumulativeRows.length === 0 && runRows.length === 0)
122
115
  continue;
123
- const timestampKey = rowTimestampKey(cumulativeRows[0]);
116
+ // Resolve the running total for this timestamp. Preference order:
117
+ // 1. `agent.cost.cumulative_usd` attribute — the exact tracked total,
118
+ // emitted on both the run counter and the cumulative histogram and
119
+ // independent of the exporter's temporality.
120
+ // 2. The `cost.run.usd` counter value — exported with cumulative
121
+ // temporality, so each data point already holds the running total.
122
+ // 3. The cumulative histogram metric value (least reliable, since a
123
+ // histogram `sum` aggregates every recorded observation).
124
+ const attrCumulative = maxDefined(groupRows, extractCumulativeAttr);
125
+ const runCumulative = maxDefined(runRows, finiteMetricValue);
126
+ const histogramCumulative = maxDefined(cumulativeRows, finiteMetricValue);
127
+ const cumulativeUsd = attrCumulative ?? runCumulative ?? histogramCumulative ?? 0;
128
+ if (!Number.isFinite(cumulativeUsd))
129
+ continue;
130
+ const anchorRow = cumulativeRows[0] ?? runRows[0];
131
+ const timestampKey = rowTimestampKey(anchorRow);
124
132
  if (!timestampKey)
125
133
  continue;
126
134
  points.push({
127
135
  timestampKey,
128
- timestampMs: rowTimestampMs(cumulativeRows[0]),
129
- costUsd,
136
+ timestampMs: rowTimestampMs(anchorRow),
137
+ costUsd: cumulativeUsd,
130
138
  cumulativeUsd,
131
139
  });
132
140
  }
@@ -140,7 +148,7 @@ function extractServiceName(row) {
140
148
  return candidate;
141
149
  }
142
150
  }
143
- const resourceAttributes = row.resource_attributes;
151
+ const resourceAttributes = parseResourceAttributes(row.resource_attributes);
144
152
  if (resourceAttributes && typeof resourceAttributes === 'object') {
145
153
  const nested = resourceAttributes['service.name'];
146
154
  if (typeof nested === 'string' && nested.length > 0) {
@@ -149,6 +157,75 @@ function extractServiceName(row) {
149
157
  }
150
158
  return undefined;
151
159
  }
160
+ function parseResourceAttributes(attrs) {
161
+ if (attrs && typeof attrs === 'object' && !Array.isArray(attrs)) {
162
+ return attrs;
163
+ }
164
+ if (typeof attrs === 'string') {
165
+ try {
166
+ const parsed = JSON.parse(attrs);
167
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
168
+ return parsed;
169
+ }
170
+ }
171
+ catch {
172
+ // Ignore malformed resource attributes payloads.
173
+ }
174
+ }
175
+ return {};
176
+ }
177
+ function extractRuntimeId(row) {
178
+ const directCandidates = [
179
+ row.runtime_id,
180
+ row.runtime,
181
+ row.pod_name,
182
+ row.k8s_pod_name,
183
+ ];
184
+ for (const candidate of directCandidates) {
185
+ if (typeof candidate === 'string' && candidate.trim().length > 0) {
186
+ return candidate.trim();
187
+ }
188
+ }
189
+ const parsedAttrs = parseAttributes(row.attributes);
190
+ const attrs = parsedAttrs &&
191
+ typeof parsedAttrs === 'object' &&
192
+ !Array.isArray(parsedAttrs)
193
+ ? parsedAttrs
194
+ : {};
195
+ const attrCandidates = [
196
+ attrs['runtime.id'],
197
+ attrs['runtime.pod_name'],
198
+ attrs['k8s.pod.name'],
199
+ ];
200
+ for (const candidate of attrCandidates) {
201
+ if (typeof candidate === 'string' && candidate.trim().length > 0) {
202
+ return candidate.trim();
203
+ }
204
+ }
205
+ const resourceAttributes = parseResourceAttributes(row.resource_attributes);
206
+ const resourceCandidates = [
207
+ resourceAttributes['runtime.id'],
208
+ resourceAttributes['runtime.pod_name'],
209
+ resourceAttributes['k8s.pod.name'],
210
+ ];
211
+ for (const candidate of resourceCandidates) {
212
+ if (typeof candidate === 'string' && candidate.trim().length > 0) {
213
+ return candidate.trim();
214
+ }
215
+ }
216
+ return undefined;
217
+ }
218
+ function rowMatchesSource(row, serviceName, runtimeId) {
219
+ const resolvedServiceName = String(serviceName || '').trim();
220
+ const resolvedRuntimeId = String(runtimeId || '').trim();
221
+ if (!resolvedServiceName && !resolvedRuntimeId) {
222
+ return true;
223
+ }
224
+ const serviceMatches = resolvedServiceName.length > 0 &&
225
+ extractServiceName(row) === resolvedServiceName;
226
+ const runtimeMatches = resolvedRuntimeId.length > 0 && extractRuntimeId(row) === resolvedRuntimeId;
227
+ return serviceMatches || runtimeMatches;
228
+ }
152
229
  /** Extract `agent.id` from span/trace attributes. */
153
230
  function extractAgentId(row) {
154
231
  const attrs = parseAttributes(row.attributes);
@@ -157,11 +234,56 @@ function extractAgentId(row) {
157
234
  return aid;
158
235
  return undefined;
159
236
  }
160
- export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl, liveCumulativeUsd, liveTimestampMs, height = 160, }) {
237
+ /**
238
+ * Extract the exact cumulative cost (USD) carried on the metric attributes as
239
+ * `agent.cost.cumulative_usd`. This is emitted on every cost metric and is the
240
+ * authoritative running total regardless of the exporter's temporality.
241
+ */
242
+ function extractCumulativeAttr(row) {
243
+ const attrs = parseAttributes(row.attributes);
244
+ const candidate = attrs['agent.cost.cumulative_usd'];
245
+ if (typeof candidate === 'number' && Number.isFinite(candidate)) {
246
+ return candidate;
247
+ }
248
+ if (typeof candidate === 'string') {
249
+ const parsed = Number(candidate);
250
+ if (Number.isFinite(parsed))
251
+ return parsed;
252
+ }
253
+ return undefined;
254
+ }
255
+ /**
256
+ * Match a metric row against the requested agent. Rows fetched from the
257
+ * normalized metrics endpoint can arrive without attributes (so `agent.id`
258
+ * is unknown); those are kept because the service/runtime scope already
259
+ * narrows the data to this runtime's agent.
260
+ */
261
+ function agentIdMatches(row, agentId) {
262
+ if (!agentId)
263
+ return true;
264
+ const rowAgentId = extractAgentId(row);
265
+ return rowAgentId === undefined || rowAgentId === agentId;
266
+ }
267
+ /** `toMetricValue` guarded to only return finite numbers. */
268
+ function finiteMetricValue(row) {
269
+ const value = toMetricValue(row);
270
+ return Number.isFinite(value) ? value : undefined;
271
+ }
272
+ /** Reduce rows to the maximum value produced by `selector`, ignoring gaps. */
273
+ function maxDefined(rows, selector) {
274
+ return rows.reduce((max, row) => {
275
+ const value = selector(row);
276
+ if (value === undefined)
277
+ return max;
278
+ return max === undefined ? value : Math.max(max, value);
279
+ }, undefined);
280
+ }
281
+ export function CostUsageChart({ serviceName, agentId, runtimeId, apiKey, datalayerUrl, wsUrl, liveCumulativeUsd, liveTimestampMs, height = 160, }) {
282
+ const cacheServiceKey = String(serviceName || runtimeId || '').trim() || undefined;
161
283
  const monitoringCache = useAgentRuntimeStore(s => s.monitoringCache);
162
284
  const mergeCostPoints = useAgentRuntimeStore(s => s.mergeCostPoints);
163
285
  const upsertLocalCostPoint = useAgentRuntimeStore(s => s.upsertLocalCostPoint);
164
- const cachedEntry = useMemo(() => resolveMonitoringEntry(monitoringCache, serviceName, agentId), [agentId, monitoringCache, serviceName]);
286
+ const cachedEntry = useMemo(() => resolveMonitoringEntry(monitoringCache, cacheServiceKey, agentId), [agentId, cacheServiceKey, monitoringCache]);
165
287
  const [points, setPoints] = useState([]);
166
288
  const initialTimestampMsRef = useRef(Date.now());
167
289
  const mergePoints = (existing, incoming) => {
@@ -196,16 +318,87 @@ export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl,
196
318
  };
197
319
  // ── Reset state on source switch ──────────────────────────────
198
320
  useEffect(() => {
199
- if (!serviceName) {
321
+ if (!cacheServiceKey) {
200
322
  setPoints([]);
201
323
  return;
202
324
  }
203
325
  setPoints((cachedEntry?.costPoints ?? []).map(localPointToCostPoint));
204
326
  initialTimestampMsRef.current = Date.now();
205
- }, [agentId, cachedEntry, serviceName]);
327
+ }, [agentId, cacheServiceKey, cachedEntry]);
328
+ // Bootstrap chart with existing OTEL cost metrics before websocket updates.
329
+ useEffect(() => {
330
+ if (!cacheServiceKey || !apiKey || !datalayerUrl) {
331
+ return;
332
+ }
333
+ let cancelled = false;
334
+ const loadInitialMetrics = async () => {
335
+ try {
336
+ const [runRows, cumulativeRows] = await Promise.all([
337
+ fetchOtelMetricRows({
338
+ metric: COST_RUN_METRIC,
339
+ serviceName,
340
+ datalayerUrl,
341
+ apiKey,
342
+ limit: 1000,
343
+ }),
344
+ fetchOtelMetricRows({
345
+ metric: COST_CUMULATIVE_METRIC,
346
+ serviceName,
347
+ datalayerUrl,
348
+ apiKey,
349
+ limit: 1000,
350
+ }),
351
+ ]);
352
+ if (cancelled) {
353
+ return;
354
+ }
355
+ const rows = [...runRows, ...cumulativeRows].filter(row => {
356
+ const castedRow = row;
357
+ if (!rowMatchesSource(castedRow, serviceName, runtimeId)) {
358
+ return false;
359
+ }
360
+ return agentIdMatches(castedRow, agentId);
361
+ });
362
+ const initialPoints = extractCostPoints(rows, agentId);
363
+ if (cancelled || initialPoints.length === 0) {
364
+ return;
365
+ }
366
+ mergeCostPoints({
367
+ serviceName: cacheServiceKey,
368
+ agentId,
369
+ points: initialPoints.map(point => ({
370
+ timestampMs: point.timestampMs,
371
+ cumulativeUsd: point.cumulativeUsd,
372
+ })),
373
+ });
374
+ const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, cacheServiceKey, agentId);
375
+ if (mergedEntry) {
376
+ setPoints(mergedEntry.costPoints.map(localPointToCostPoint));
377
+ }
378
+ else {
379
+ setPoints(initialPoints);
380
+ }
381
+ }
382
+ catch {
383
+ // Fail open: websocket updates can still populate the chart.
384
+ }
385
+ };
386
+ void loadInitialMetrics();
387
+ return () => {
388
+ cancelled = true;
389
+ };
390
+ }, [
391
+ agentId,
392
+ apiKey,
393
+ cacheServiceKey,
394
+ datalayerUrl,
395
+ mergeCostPoints,
396
+ runtimeId,
397
+ serviceName,
398
+ ]);
206
399
  // Apply immediate post-turn updates from the monitoring websocket snapshot.
207
400
  useEffect(() => {
208
- if (!serviceName)
401
+ if (!cacheServiceKey)
209
402
  return;
210
403
  if (typeof liveCumulativeUsd !== 'number' ||
211
404
  !Number.isFinite(liveCumulativeUsd)) {
@@ -221,12 +414,12 @@ export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl,
221
414
  cumulativeUsd: Math.max(0, liveCumulativeUsd),
222
415
  };
223
416
  upsertLocalCostPoint({
224
- serviceName,
417
+ serviceName: cacheServiceKey,
225
418
  agentId,
226
419
  timestampMs,
227
420
  cumulativeUsd: livePoint.cumulativeUsd,
228
421
  });
229
- const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, serviceName, agentId);
422
+ const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, cacheServiceKey, agentId);
230
423
  if (mergedEntry) {
231
424
  setPoints(mergedEntry.costPoints.map(localPointToCostPoint));
232
425
  }
@@ -235,6 +428,7 @@ export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl,
235
428
  }
236
429
  }, [
237
430
  agentId,
431
+ cacheServiceKey,
238
432
  liveCumulativeUsd,
239
433
  liveTimestampMs,
240
434
  serviceName,
@@ -242,10 +436,10 @@ export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl,
242
436
  ]);
243
437
  // ── WebSocket subscription (shared connection pool) ─────────
244
438
  useEffect(() => {
245
- if (!serviceName || !apiKey)
439
+ if (!cacheServiceKey || !apiKey)
246
440
  return;
247
- const rawBaseUrl = wsRunUrl ||
248
- runUrl ||
441
+ const rawBaseUrl = wsUrl ||
442
+ datalayerUrl ||
249
443
  (typeof window !== 'undefined' ? window.location.origin : '');
250
444
  if (!rawBaseUrl)
251
445
  return;
@@ -258,9 +452,9 @@ export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl,
258
452
  window.location.protocol === 'https:'
259
453
  ? 'https:'
260
454
  : 'http:'}//${typeof window !== 'undefined' ? window.location.host : ''}${rawBaseUrl}`;
261
- let wsUrl;
455
+ let resolvedWsUrl;
262
456
  try {
263
- wsUrl = buildOtelWebSocketUrl({
457
+ resolvedWsUrl = buildOtelWebSocketUrl({
264
458
  baseUrl: baseWithProtocol,
265
459
  token: apiKey,
266
460
  });
@@ -268,28 +462,26 @@ export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl,
268
462
  catch {
269
463
  return;
270
464
  }
271
- const unsubscribe = subscribeOtelWs(wsUrl, msg => {
465
+ const unsubscribe = subscribeOtelWs(resolvedWsUrl, msg => {
272
466
  if (msg.signal !== 'metrics')
273
467
  return;
274
468
  const rows = Array.isArray(msg.data) ? msg.data : [];
275
- let matchingRows = rows.filter(row => extractServiceName(row) === serviceName);
276
- // Filter by agent.id when specified.
277
- if (agentId) {
278
- matchingRows = matchingRows.filter(row => extractAgentId(row) === agentId);
279
- }
469
+ let matchingRows = rows.filter(row => rowMatchesSource(row, serviceName, runtimeId));
470
+ // Keep rows for this agent (or rows without an agent.id attribute).
471
+ matchingRows = matchingRows.filter(row => agentIdMatches(row, agentId));
280
472
  if (matchingRows.length === 0)
281
473
  return;
282
474
  const newPoints = extractCostPoints(matchingRows, agentId);
283
475
  if (newPoints.length > 0) {
284
476
  mergeCostPoints({
285
- serviceName,
477
+ serviceName: cacheServiceKey,
286
478
  agentId,
287
479
  points: newPoints.map(point => ({
288
480
  timestampMs: point.timestampMs,
289
481
  cumulativeUsd: point.cumulativeUsd,
290
482
  })),
291
483
  });
292
- const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, serviceName, agentId);
484
+ const mergedEntry = resolveMonitoringEntry(agentRuntimeStore.getState().monitoringCache, cacheServiceKey, agentId);
293
485
  if (mergedEntry) {
294
486
  setPoints(mergedEntry.costPoints.map(localPointToCostPoint));
295
487
  }
@@ -299,7 +491,16 @@ export function CostUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl,
299
491
  }
300
492
  });
301
493
  return unsubscribe;
302
- }, [agentId, apiKey, mergeCostPoints, runUrl, serviceName, wsRunUrl]);
494
+ }, [
495
+ agentId,
496
+ apiKey,
497
+ cacheServiceKey,
498
+ mergeCostPoints,
499
+ datalayerUrl,
500
+ runtimeId,
501
+ serviceName,
502
+ wsUrl,
503
+ ]);
303
504
  // ── Chart options ─────────────────────────────────────────────
304
505
  const option = useMemo(() => {
305
506
  const chartData = points.length > 0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Message detail from API.
3
+ */
4
+ export interface MessageDetail {
5
+ role: string;
6
+ content: string;
7
+ estimatedTokens: number;
8
+ timestamp: string | null;
9
+ inContext: boolean;
10
+ toolName: string | null;
11
+ toolCallId: string | null;
12
+ isToolCall: boolean;
13
+ isToolResult: boolean;
14
+ }
15
+ /**
16
+ * Single message detail view.
17
+ */
18
+ export declare function MessageDetailView({ message }: {
19
+ message: MessageDetail;
20
+ }): import("react/jsx-runtime").JSX.Element;
21
+ export interface MessageHistoryProps {
22
+ /** Full ordered list of conversation messages. */
23
+ messages: MessageDetail[];
24
+ }
25
+ /**
26
+ * Renders the conversation message history split into out-of-context and
27
+ * in-context groups.
28
+ */
29
+ export declare function MessageHistory({ messages }: MessageHistoryProps): import("react/jsx-runtime").JSX.Element;
30
+ export default MessageHistory;
@@ -0,0 +1,129 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // Copyright (c) 2025-2026 Datalayer, Inc.
3
+ // Distributed under the terms of the Modified BSD License.
4
+ /**
5
+ * MessageHistory component - Renders the agent conversation message history,
6
+ * splitting messages into "in context" and "out of context" groups. Shared by
7
+ * the ContextInspector (Configuration tab) and the Monitoring tab so both
8
+ * surfaces display identical message details.
9
+ */
10
+ import { Text, Label } from '@primer/react';
11
+ import { Box } from '@datalayer/primer-addons';
12
+ import { AiModelIcon, TerminalIcon, CommentDiscussionIcon, CheckCircleIcon, XCircleIcon, InfoIcon, ChevronDownIcon, ChevronRightIcon, } from '@primer/octicons-react';
13
+ import { useMemo, useState } from 'react';
14
+ import { TextPart } from '../chat/parts/TextPart';
15
+ /**
16
+ * Format token count for display.
17
+ */
18
+ function formatTokens(tokens) {
19
+ if (tokens >= 1000000) {
20
+ return `${(tokens / 1000000).toFixed(1)}M`;
21
+ }
22
+ if (tokens >= 1000) {
23
+ return `${(tokens / 1000).toFixed(1)}K`;
24
+ }
25
+ return tokens.toString();
26
+ }
27
+ /**
28
+ * Single message detail view.
29
+ */
30
+ export function MessageDetailView({ message }) {
31
+ const roleColors = {
32
+ user: 'accent.fg',
33
+ assistant: 'success.fg',
34
+ system: 'attention.fg',
35
+ tool: 'done.fg',
36
+ };
37
+ const roleIcons = {
38
+ user: CommentDiscussionIcon,
39
+ assistant: AiModelIcon,
40
+ system: InfoIcon,
41
+ tool: TerminalIcon,
42
+ };
43
+ const RoleIcon = roleIcons[message.role] || CommentDiscussionIcon;
44
+ const text = String(message.content || '');
45
+ const chatRole = message.role === 'user' ? 'user' : 'assistant';
46
+ const uiMessage = {
47
+ id: `history-${message.role}-${message.timestamp || 'now'}-${message.toolCallId || 'no-tool'}`,
48
+ role: chatRole,
49
+ parts: [{ type: 'text', text }],
50
+ };
51
+ return (_jsxs(Box, { sx: {
52
+ p: 2,
53
+ mb: 1,
54
+ bg: message.inContext ? 'canvas.default' : 'canvas.inset',
55
+ border: '1px solid',
56
+ borderColor: message.inContext ? 'border.default' : 'border.muted',
57
+ borderRadius: 2,
58
+ opacity: message.inContext ? 1 : 0.7,
59
+ }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2, mb: 1 }, children: [_jsx(RoleIcon, { size: 14 }), _jsx(Text, { sx: {
60
+ fontWeight: 'semibold',
61
+ fontSize: 0,
62
+ color: roleColors[message.role] || 'fg.default',
63
+ textTransform: 'capitalize',
64
+ }, children: message.role }), message.toolName && (_jsx(Label, { size: "small", variant: "secondary", children: message.toolName })), message.isToolCall && (_jsx(Label, { size: "small", variant: "accent", children: "call" })), message.isToolResult && (_jsx(Label, { size: "small", variant: "success", children: "result" })), message.inContext ? (_jsx(CheckCircleIcon, { size: 12, fill: "var(--fgColor-success)" })) : (_jsx(XCircleIcon, { size: 12, fill: "var(--fgColor-muted)" })), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 'auto' }, children: [formatTokens(message.estimatedTokens), " tokens"] })] }), _jsx(Box, { sx: {
65
+ borderWidth: '2px',
66
+ borderStyle: 'solid',
67
+ borderColor: 'border.default',
68
+ borderRadius: 2,
69
+ overflow: 'hidden',
70
+ }, children: _jsx(TextPart, { text: text, message: uiMessage, isLastPart: false, onRegenerate: () => {
71
+ return;
72
+ } }) })] }));
73
+ }
74
+ /**
75
+ * Renders the conversation message history split into out-of-context and
76
+ * in-context groups.
77
+ */
78
+ export function MessageHistory({ messages }) {
79
+ const [expanded, setExpanded] = useState(false);
80
+ const { inContextMessages, outOfContextMessages } = useMemo(() => {
81
+ if (!messages) {
82
+ return { inContextMessages: [], outOfContextMessages: [] };
83
+ }
84
+ return {
85
+ inContextMessages: messages.filter(m => m.inContext),
86
+ outOfContextMessages: messages.filter(m => !m.inContext),
87
+ };
88
+ }, [messages]);
89
+ const messageHistoryTokens = useMemo(() => {
90
+ if (!messages) {
91
+ return 0;
92
+ }
93
+ return messages.reduce((sum, message) => sum + (message.estimatedTokens || 0), 0);
94
+ }, [messages]);
95
+ return (_jsxs(Box, { sx: { mb: 2 }, children: [_jsxs(Box, { as: "button", onClick: () => setExpanded(!expanded), sx: {
96
+ display: 'flex',
97
+ alignItems: 'center',
98
+ gap: 2,
99
+ width: '100%',
100
+ p: 2,
101
+ bg: 'canvas.subtle',
102
+ border: '1px solid',
103
+ borderColor: 'border.default',
104
+ borderRadius: 2,
105
+ cursor: 'pointer',
106
+ '&:hover': {
107
+ bg: 'canvas.inset',
108
+ },
109
+ }, children: [expanded ? (_jsx(ChevronDownIcon, { size: 16 })) : (_jsx(ChevronRightIcon, { size: 16 })), _jsx(CommentDiscussionIcon, { size: 16 }), _jsx(Text, { sx: { fontWeight: 'semibold', flex: 1, textAlign: 'left' }, children: "Message History" }), _jsx(Label, { variant: "secondary", size: "small", children: messages?.length || 0 }), messageHistoryTokens > 0 && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [formatTokens(messageHistoryTokens), " tokens"] }))] }), expanded && (_jsx(Box, { sx: {
110
+ border: '1px solid',
111
+ borderColor: 'border.default',
112
+ borderTop: 'none',
113
+ borderRadius: '0 0 6px 6px',
114
+ p: 2,
115
+ }, children: !messages || messages.length === 0 ? (_jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: "No messages yet" })) : (_jsxs(_Fragment, { children: [outOfContextMessages.length > 0 && (_jsxs(Box, { sx: { mb: 3 }, children: [_jsxs(Text, { sx: {
116
+ fontWeight: 'semibold',
117
+ fontSize: 1,
118
+ color: 'fg.muted',
119
+ mb: 2,
120
+ display: 'block',
121
+ }, children: ["Out of Context (", outOfContextMessages.length, ")"] }), outOfContextMessages.map((msg, idx) => (_jsx(MessageDetailView, { message: msg }, `out-${idx}`)))] })), inContextMessages.length > 0 && (_jsxs(Box, { children: [_jsxs(Text, { sx: {
122
+ fontWeight: 'semibold',
123
+ fontSize: 1,
124
+ color: 'success.fg',
125
+ mb: 2,
126
+ display: 'block',
127
+ }, children: ["In Context (", inContextMessages.length, ")"] }), inContextMessages.map((msg, idx) => (_jsx(MessageDetailView, { message: msg }, `in-${idx}`)))] }))] })) }))] }));
128
+ }
129
+ export default MessageHistory;
@@ -1,9 +1,10 @@
1
1
  export interface TokenUsageChartProps {
2
2
  serviceName?: string;
3
3
  agentId?: string;
4
+ runtimeId?: string;
4
5
  apiKey?: string;
5
- runUrl?: string;
6
- wsRunUrl?: string;
6
+ datalayerUrl?: string;
7
+ wsUrl?: string;
7
8
  liveSystemPromptTokens?: number;
8
9
  liveToolsDescriptionTokens?: number;
9
10
  liveUserMessageTokens?: number;
@@ -13,5 +14,5 @@ export interface TokenUsageChartProps {
13
14
  height?: number;
14
15
  days?: number;
15
16
  }
16
- export declare function TokenUsageChart({ serviceName, agentId, apiKey, runUrl, wsRunUrl, liveSystemPromptTokens, liveToolsDescriptionTokens, liveUserMessageTokens, liveAgentMessageTokens, liveToolsUsageTokens, liveTimestampMs, height, }: TokenUsageChartProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function TokenUsageChart({ serviceName, agentId, runtimeId, apiKey, datalayerUrl, wsUrl, liveSystemPromptTokens, liveToolsDescriptionTokens, liveUserMessageTokens, liveAgentMessageTokens, liveToolsUsageTokens, liveTimestampMs, height, }: TokenUsageChartProps): import("react/jsx-runtime").JSX.Element;
17
18
  export default TokenUsageChart;