@datalayer/agent-runtimes 1.0.2 → 1.0.4

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 (608) hide show
  1. package/README.md +14 -132
  2. package/lib/Agent.js +2 -2
  3. package/lib/AgentLexical.d.ts +1 -12
  4. package/lib/AgentLexical.js +3 -14
  5. package/lib/AgentNotebook.js +3 -3
  6. package/lib/App.js +2 -2
  7. package/lib/{components/chat/components → agents}/AgentDetails.d.ts +13 -2
  8. package/lib/{components/chat/components → agents}/AgentDetails.js +6 -12
  9. package/lib/api/agents.d.ts +47 -0
  10. package/lib/api/agents.js +106 -0
  11. package/lib/api/context.d.ts +17 -0
  12. package/lib/api/context.js +45 -0
  13. package/lib/api/evals.d.ts +27 -0
  14. package/lib/api/evals.js +63 -0
  15. package/lib/api/events.d.ts +17 -0
  16. package/lib/api/events.js +93 -0
  17. package/lib/{components/chat → api}/handler.js +1 -1
  18. package/lib/api/index.d.ts +15 -0
  19. package/lib/api/index.js +20 -0
  20. package/lib/api/notifications.d.ts +39 -0
  21. package/lib/api/notifications.js +103 -0
  22. package/lib/api/output.d.ts +28 -0
  23. package/lib/api/output.js +64 -0
  24. package/lib/api/tool-approvals.d.ts +62 -0
  25. package/lib/api/tool-approvals.js +145 -0
  26. package/lib/{components/chat/components → chat}/Chat.d.ts +26 -15
  27. package/lib/{components/chat/components → chat}/Chat.js +16 -16
  28. package/lib/{components/chat/components → chat}/ChatFloating.d.ts +17 -9
  29. package/lib/{components/chat/components → chat}/ChatFloating.js +17 -9
  30. package/lib/{components/chat/components → chat}/ChatInline.d.ts +2 -2
  31. package/lib/{components/chat/components → chat}/ChatInline.js +8 -6
  32. package/lib/{components/chat/components → chat}/ChatPopupStandalone.d.ts +3 -4
  33. package/lib/{components/chat/components → chat}/ChatPopupStandalone.js +6 -6
  34. package/lib/{components/chat/components → chat}/ChatSidebar.d.ts +14 -5
  35. package/lib/{components/chat/components → chat}/ChatSidebar.js +48 -26
  36. package/lib/{components/chat/components → chat}/ChatStandalone.d.ts +3 -4
  37. package/lib/{components/chat/components → chat}/ChatStandalone.js +5 -5
  38. package/lib/chat/base/ChatBase.d.ts +6 -0
  39. package/lib/chat/base/ChatBase.js +1338 -0
  40. package/lib/chat/display/EmptyState.d.ts +27 -0
  41. package/lib/chat/display/EmptyState.js +41 -0
  42. package/lib/{components/chat/components/elements → chat/display}/FloatingBrandButton.d.ts +1 -1
  43. package/lib/{components/chat/components/elements → chat/display}/FloatingBrandButton.js +1 -1
  44. package/lib/{components/chat/components/elements → chat/display}/PoweredByTag.d.ts +1 -1
  45. package/lib/{components/chat/components/elements → chat/header}/ChatHeader.d.ts +1 -4
  46. package/lib/{components/chat/components/elements → chat/header}/ChatHeader.js +1 -1
  47. package/lib/chat/header/ChatHeaderBase.d.ts +38 -0
  48. package/lib/chat/header/ChatHeaderBase.js +83 -0
  49. package/lib/chat/index.d.ts +66 -0
  50. package/lib/chat/index.js +74 -0
  51. package/lib/chat/indicators/McpStatusIndicator.d.ts +9 -0
  52. package/lib/chat/indicators/McpStatusIndicator.js +128 -0
  53. package/lib/chat/indicators/SandboxStatusIndicator.d.ts +10 -0
  54. package/lib/chat/indicators/SandboxStatusIndicator.js +175 -0
  55. package/lib/chat/indicators/index.d.ts +17 -0
  56. package/lib/chat/indicators/index.js +19 -0
  57. package/lib/chat/messages/ChatMessageList.d.ts +49 -0
  58. package/lib/chat/messages/ChatMessageList.js +332 -0
  59. package/lib/{components/chat/components/elements → chat/messages}/ChatMessages.d.ts +2 -2
  60. package/lib/{components/chat/components/elements → chat/messages}/ChatMessages.js +6 -4
  61. package/lib/{components/chat/components → chat}/parts/DynamicToolPart.d.ts +1 -1
  62. package/lib/{components/chat/components/elements → chat/parts}/MessagePart.d.ts +1 -1
  63. package/lib/{components/chat/components/elements → chat/parts}/MessagePart.js +4 -4
  64. package/lib/{components/chat/components → chat}/parts/ReasoningPart.js +1 -1
  65. package/lib/{components/chat/components → chat}/parts/TextPart.d.ts +1 -1
  66. package/lib/{components/chat/components → chat}/parts/ToolPart.js +1 -1
  67. package/lib/{components/chat/components → chat}/parts/index.d.ts +2 -1
  68. package/lib/{components/chat/components → chat}/parts/index.js +2 -1
  69. package/lib/chat/prompt/InputFooter.d.ts +43 -0
  70. package/lib/chat/prompt/InputFooter.js +135 -0
  71. package/lib/chat/prompt/InputPrompt.d.ts +60 -0
  72. package/lib/chat/prompt/InputPrompt.js +83 -0
  73. package/lib/chat/prompt/InputPromptFooter.d.ts +25 -0
  74. package/lib/chat/prompt/InputPromptFooter.js +15 -0
  75. package/lib/chat/prompt/InputPromptHeader.d.ts +15 -0
  76. package/lib/chat/prompt/InputPromptHeader.js +15 -0
  77. package/lib/chat/prompt/InputPromptLexical.d.ts +16 -0
  78. package/lib/chat/prompt/InputPromptLexical.js +122 -0
  79. package/lib/chat/prompt/InputPromptText.d.ts +24 -0
  80. package/lib/chat/prompt/InputPromptText.js +66 -0
  81. package/lib/chat/prompt/index.d.ts +11 -0
  82. package/lib/chat/prompt/index.js +15 -0
  83. package/lib/{components/chat/components → chat}/styles/streamdownStyles.d.ts +1 -1
  84. package/lib/chat/tools/ToolApprovalBanner.d.ts +31 -0
  85. package/lib/chat/tools/ToolApprovalBanner.js +62 -0
  86. package/lib/{components/chat/components/elements → chat/tools}/ToolApprovalDialog.js +1 -1
  87. package/lib/{components/chat/components/display → chat/tools}/ToolCallDisplay.d.ts +13 -4
  88. package/lib/{components/chat/components/display → chat/tools}/ToolCallDisplay.js +18 -8
  89. package/lib/chat/tools/index.d.ts +8 -0
  90. package/lib/{components/chat/components/display → chat/tools}/index.js +3 -1
  91. package/lib/chat/usage/TokenUsageBar.d.ts +8 -0
  92. package/lib/chat/usage/TokenUsageBar.js +213 -0
  93. package/lib/client/AgentsMixin.d.ts +216 -0
  94. package/lib/client/AgentsMixin.js +388 -0
  95. package/lib/client/index.d.ts +6 -0
  96. package/lib/client/index.js +10 -0
  97. package/lib/components/NotificationEventCard.d.ts +8 -0
  98. package/lib/components/NotificationEventCard.js +177 -0
  99. package/lib/components/OutputCard.d.ts +8 -0
  100. package/lib/components/OutputCard.js +94 -0
  101. package/lib/components/ToolApprovalCard.d.ts +33 -0
  102. package/lib/components/ToolApprovalCard.js +78 -0
  103. package/lib/components/index.d.ts +3 -7
  104. package/lib/components/index.js +3 -4
  105. package/lib/{components → config}/AgentConfiguration.d.ts +43 -21
  106. package/lib/{components → config}/AgentConfiguration.js +48 -28
  107. package/lib/config/index.d.ts +2 -0
  108. package/lib/config/index.js +1 -0
  109. package/lib/{components/chat/components → context}/ContextInspector.js +38 -8
  110. package/lib/{components/chat/components → context}/ContextPanel.js +27 -6
  111. package/lib/context/CostTracker.d.ts +37 -0
  112. package/lib/context/CostTracker.js +124 -0
  113. package/lib/context/TokenUsageChart.d.ts +10 -0
  114. package/lib/context/TokenUsageChart.js +288 -0
  115. package/lib/examples/A2UiComponentGalleryExample.d.ts +20 -0
  116. package/lib/examples/A2UiComponentGalleryExample.js +568 -0
  117. package/lib/examples/A2UiContactCardExample.d.ts +21 -0
  118. package/lib/examples/A2UiContactCardExample.js +432 -0
  119. package/lib/examples/A2UiRestaurantExample.d.ts +11 -3
  120. package/lib/examples/A2UiRestaurantExample.js +63 -98
  121. package/lib/examples/A2UiViewerExample.d.ts +21 -0
  122. package/lib/examples/A2UiViewerExample.js +563 -0
  123. package/lib/examples/AgUiAgenticExample.js +3 -3
  124. package/lib/examples/AgUiBackendToolRenderingExample.js +3 -3
  125. package/lib/examples/{AgUiHaikuGenUIExample.d.ts → AgUiHaikuGenUiExample.d.ts} +4 -4
  126. package/lib/examples/{AgUiHaikuGenUIExample.js → AgUiHaikuGenUiExample.js} +7 -7
  127. package/lib/examples/AgUiHumanInTheLoopExample.js +3 -3
  128. package/lib/examples/AgUiSharedStateExample.js +3 -3
  129. package/lib/examples/{AgUiToolsBasedGenUIExample.d.ts → AgUiToolsBasedGenUiExample.d.ts} +4 -4
  130. package/lib/examples/{AgUiToolsBasedGenUIExample.js → AgUiToolsBasedGenUiExample.js} +7 -7
  131. package/lib/examples/AgentCheckpointsExample.d.ts +19 -0
  132. package/lib/examples/AgentCheckpointsExample.js +500 -0
  133. package/lib/examples/AgentCodemodeExample.d.ts +14 -0
  134. package/lib/examples/AgentCodemodeExample.js +256 -0
  135. package/lib/examples/AgentEvalsExample.d.ts +14 -0
  136. package/lib/examples/AgentEvalsExample.js +210 -0
  137. package/lib/examples/AgentGuardrailsExample.d.ts +14 -0
  138. package/lib/examples/AgentGuardrailsExample.js +212 -0
  139. package/lib/examples/AgentMemoryExample.d.ts +14 -0
  140. package/lib/examples/AgentMemoryExample.js +228 -0
  141. package/lib/examples/AgentMonitoringExample.d.ts +13 -0
  142. package/lib/examples/AgentMonitoringExample.js +305 -0
  143. package/lib/examples/AgentNotificationsExample.d.ts +14 -0
  144. package/lib/examples/AgentNotificationsExample.js +267 -0
  145. package/lib/examples/AgentOtelExample.d.ts +25 -0
  146. package/lib/examples/AgentOtelExample.js +281 -0
  147. package/lib/examples/AgentOutputsExample.d.ts +14 -0
  148. package/lib/examples/AgentOutputsExample.js +205 -0
  149. package/lib/examples/AgentSandboxExample.d.ts +17 -0
  150. package/lib/examples/AgentSandboxExample.js +490 -0
  151. package/lib/examples/AgentSkillsExample.d.ts +3 -0
  152. package/lib/examples/AgentSkillsExample.js +284 -0
  153. package/lib/examples/AgentToolApprovalsExample.d.ts +3 -0
  154. package/lib/examples/AgentToolApprovalsExample.js +737 -0
  155. package/lib/examples/AgentTriggersExample.d.ts +14 -0
  156. package/lib/examples/AgentTriggersExample.js +1090 -0
  157. package/lib/examples/{AgentRuntimeFormExample.d.ts → AgentspecExample.d.ts} +3 -4
  158. package/lib/examples/{AgentRuntimeFormExample.js → AgentspecExample.js} +92 -34
  159. package/lib/examples/{JupyterCellExample.js → CellSimpleExample.js} +1 -1
  160. package/lib/examples/{AgentRuntimeCustomExample.js → ChatCustomExample.js} +3 -3
  161. package/lib/examples/{AgentRuntimeChatExample.js → ChatExample.js} +6 -14
  162. package/lib/examples/{AgentRuntimeStandaloneExample.js → ChatStandaloneExample.js} +2 -2
  163. package/lib/examples/CopilotKitLexicalExample.d.ts +3 -14
  164. package/lib/examples/CopilotKitLexicalExample.js +4 -15
  165. package/lib/examples/CopilotKitNotebookExample.js +4 -6
  166. package/lib/examples/DatalayerNotebookExample.js +2 -2
  167. package/lib/examples/{AgentRuntimeLexical2Example.d.ts → Lexical2Example.d.ts} +2 -13
  168. package/lib/examples/{AgentRuntimeLexical2Example.js → Lexical2Example.js} +8 -17
  169. package/lib/examples/{AgentRuntimeLexicalExample.d.ts → LexicalExample.d.ts} +1 -12
  170. package/lib/examples/{AgentRuntimeLexicalExample.js → LexicalExample.js} +28 -27
  171. package/lib/examples/{AgentRuntimeLexicalSidebarExample.d.ts → LexicalSidebarExample.d.ts} +2 -13
  172. package/lib/examples/{AgentRuntimeLexicalSidebarExample.js → LexicalSidebarExample.js} +6 -18
  173. package/lib/examples/{AgentRuntimeNotebookExample.js → NotebookExample.js} +14 -10
  174. package/lib/examples/{AgentRuntimeNotebookSidebarExample.js → NotebookSidebarExample.js} +5 -8
  175. package/lib/examples/{JupyterNotebookExample.js → NotebookSimpleExample.js} +2 -2
  176. package/lib/examples/ag-ui/weather/InlineWeatherCard.js +1 -1
  177. package/lib/examples/components/ErrorView.d.ts +14 -0
  178. package/lib/examples/components/ErrorView.js +20 -0
  179. package/lib/examples/components/ExampleWrapper.d.ts +12 -0
  180. package/lib/examples/components/ExampleWrapper.js +16 -0
  181. package/lib/examples/components/Header.d.ts +2 -2
  182. package/lib/examples/components/HeaderControls.js +1 -1
  183. package/lib/examples/components/LexicalEditor.d.ts +1 -12
  184. package/lib/examples/components/LexicalEditor.js +1 -12
  185. package/lib/examples/components/MainContent.d.ts +4 -11
  186. package/lib/examples/components/MainContent.js +6 -60
  187. package/lib/examples/components/index.d.ts +3 -0
  188. package/lib/examples/components/index.js +2 -0
  189. package/lib/examples/example-selector.d.ts +1 -1
  190. package/lib/examples/example-selector.js +35 -22
  191. package/lib/examples/index.d.ts +26 -13
  192. package/lib/examples/index.js +26 -12
  193. package/lib/examples/main.d.ts +7 -0
  194. package/lib/examples/main.js +21 -43
  195. package/lib/examples/utils/examplesStore.d.ts +4 -0
  196. package/lib/examples/{stores → utils}/examplesStore.js +1 -1
  197. package/lib/examples/utils/notebooks/Empty.ipynb.json +33 -0
  198. package/lib/examples/utils/notebooks/NotebookExample2.ipynb.json +48 -0
  199. package/lib/examples/utils/themeStore.d.ts +8 -0
  200. package/lib/examples/utils/themeStore.js +14 -0
  201. package/lib/extensions/A2UIExtension.d.ts +65 -0
  202. package/lib/extensions/A2UIExtension.js +202 -0
  203. package/lib/{components/chat/extensions → extensions}/ExtensionRegistry.d.ts +2 -3
  204. package/lib/{components/chat/extensions → extensions}/ExtensionRegistry.js +0 -2
  205. package/lib/{components/chat/extensions → extensions}/MCPUIExtension.d.ts +2 -2
  206. package/lib/{components/chat/extensions → extensions}/MCPUIExtension.js +1 -1
  207. package/lib/extensions/index.d.ts +9 -0
  208. package/lib/{components/chat/extensions → extensions}/index.js +2 -2
  209. package/lib/hooks/index.d.ts +33 -16
  210. package/lib/hooks/index.js +33 -16
  211. package/lib/hooks/useAIAgentsWebSocket.d.ts +29 -0
  212. package/lib/hooks/useAIAgentsWebSocket.js +136 -0
  213. package/lib/hooks/{useAGUI.d.ts → useAgUi.d.ts} +2 -2
  214. package/lib/hooks/{useAGUI.js → useAgUi.js} +2 -2
  215. package/lib/hooks/useAgents.d.ts +150 -11
  216. package/lib/hooks/useAgents.js +623 -61
  217. package/lib/hooks/{useAgentStore.d.ts → useAgentsCatalog.d.ts} +3 -8
  218. package/lib/hooks/{useAgentStore.js → useAgentsCatalog.js} +9 -3
  219. package/lib/hooks/useAgentsRegistry.d.ts +10 -0
  220. package/lib/hooks/useAgentsRegistry.js +20 -0
  221. package/lib/hooks/useAgentsService.d.ts +22 -0
  222. package/lib/hooks/useAgentsService.js +146 -0
  223. package/lib/hooks/useChat.d.ts +2 -2
  224. package/lib/hooks/useChat.js +14 -8
  225. package/lib/hooks/useCheckpoints.d.ts +176 -0
  226. package/lib/hooks/useCheckpoints.js +466 -0
  227. package/lib/hooks/useConfig.d.ts +11 -0
  228. package/lib/hooks/useConfig.js +46 -0
  229. package/lib/hooks/useContextSnapshot.d.ts +11 -0
  230. package/lib/hooks/useContextSnapshot.js +44 -0
  231. package/lib/hooks/useMonitoring.d.ts +24 -0
  232. package/lib/hooks/useMonitoring.js +111 -0
  233. package/lib/hooks/useNotifications.d.ts +67 -0
  234. package/lib/hooks/useNotifications.js +208 -0
  235. package/lib/hooks/useSandbox.d.ts +12 -0
  236. package/lib/hooks/useSandbox.js +49 -0
  237. package/lib/hooks/useSkills.d.ts +13 -0
  238. package/lib/hooks/useSkills.js +46 -0
  239. package/lib/hooks/useToolApprovals.d.ts +45 -0
  240. package/lib/hooks/useToolApprovals.js +126 -0
  241. package/lib/hooks/useTools.d.ts +4 -4
  242. package/lib/hooks/useTools.js +2 -2
  243. package/lib/hooks/{useVercelChat.d.ts → useVercelAI.d.ts} +3 -3
  244. package/lib/hooks/{useVercelChat.js → useVercelAI.js} +2 -2
  245. package/lib/{components/chat/components → identity}/AgentIdentity.d.ts +1 -1
  246. package/lib/{components/chat/components → identity}/AgentIdentity.js +4 -3
  247. package/lib/identity/index.d.ts +1 -0
  248. package/lib/identity/index.js +2 -0
  249. package/lib/index.d.ts +4 -3
  250. package/lib/index.js +3 -2
  251. package/lib/{components/chat/inference → inference}/BaseInferenceProvider.d.ts +3 -3
  252. package/lib/{components/chat/inference → inference}/DatalayerInferenceProvider.d.ts +3 -3
  253. package/lib/{components/chat/inference → inference}/DatalayerInferenceProvider.js +1 -1
  254. package/lib/{components/chat/inference → inference}/SelfHostedInferenceProvider.d.ts +2 -2
  255. package/lib/{components/chat/inference → inference}/SelfHostedInferenceProvider.js +1 -1
  256. package/lib/{components/chat/inference → inference}/index.d.ts +1 -1
  257. package/lib/{components/chat/inference → inference}/index.js +1 -1
  258. package/lib/lexical/ChatInlinePlugin.d.ts +1 -1
  259. package/lib/lexical/ChatInlinePlugin.js +1 -1
  260. package/lib/{components → mcp}/McpServerManager.d.ts +1 -2
  261. package/lib/mcp/index.d.ts +1 -0
  262. package/lib/{specs/agents/codeai → mcp}/index.js +1 -1
  263. package/lib/{components/chat/middleware → middleware}/MiddlewarePipeline.d.ts +3 -3
  264. package/lib/{components/chat/middleware → middleware}/index.d.ts +1 -1
  265. package/lib/{components/chat/middleware → middleware}/index.js +1 -1
  266. package/lib/{components/chat/protocols → protocols}/A2AAdapter.d.ts +6 -6
  267. package/lib/{components/chat/protocols → protocols}/A2AAdapter.js +3 -3
  268. package/lib/{components/chat/protocols → protocols}/ACPAdapter.d.ts +6 -6
  269. package/lib/{components/chat/protocols → protocols}/ACPAdapter.js +4 -4
  270. package/lib/{components/chat/protocols → protocols}/AGUIAdapter.d.ts +14 -6
  271. package/lib/{components/chat/protocols → protocols}/AGUIAdapter.js +72 -10
  272. package/lib/{components/chat/protocols → protocols}/BaseProtocolAdapter.d.ts +6 -6
  273. package/lib/{components/chat/protocols → protocols}/BaseProtocolAdapter.js +1 -1
  274. package/lib/{components/chat/protocols → protocols}/VercelAIAdapter.d.ts +33 -7
  275. package/lib/protocols/VercelAIAdapter.js +748 -0
  276. package/lib/{components/chat/protocols → protocols}/index.d.ts +1 -2
  277. package/lib/{components/chat/protocols → protocols}/index.js +1 -1
  278. package/lib/shims/json5.d.ts +4 -0
  279. package/lib/shims/json5.js +8 -0
  280. package/lib/specs/agents/agents.d.ts +54 -0
  281. package/lib/specs/agents/agents.js +1489 -0
  282. package/lib/specs/agents/index.js +15 -12
  283. package/lib/specs/envvars.d.ts +11 -19
  284. package/lib/specs/envvars.js +52 -38
  285. package/lib/specs/evals.d.ts +20 -0
  286. package/lib/specs/evals.js +133 -0
  287. package/lib/specs/events.d.ts +26 -0
  288. package/lib/specs/events.js +140 -0
  289. package/lib/specs/frontendTools.d.ts +14 -0
  290. package/lib/specs/frontendTools.js +53 -0
  291. package/lib/specs/guardrails.d.ts +29 -0
  292. package/lib/specs/guardrails.js +310 -0
  293. package/lib/specs/index.d.ts +15 -2
  294. package/lib/specs/index.js +15 -2
  295. package/lib/specs/mcpServers.d.ts +13 -11
  296. package/lib/specs/mcpServers.js +75 -50
  297. package/lib/specs/memory.d.ts +36 -0
  298. package/lib/specs/memory.js +112 -0
  299. package/lib/specs/models.d.ts +21 -34
  300. package/lib/specs/models.js +66 -66
  301. package/lib/specs/notifications.d.ts +17 -0
  302. package/lib/specs/notifications.js +103 -0
  303. package/lib/specs/outputs.d.ts +19 -0
  304. package/lib/specs/outputs.js +106 -0
  305. package/lib/specs/skills.d.ts +7 -16
  306. package/lib/specs/skills.js +95 -18
  307. package/lib/specs/teams/index.d.ts +17 -0
  308. package/lib/specs/teams/index.js +35 -0
  309. package/lib/specs/teams/teams.d.ts +27 -0
  310. package/lib/specs/teams/teams.js +1000 -0
  311. package/lib/specs/tools.d.ts +15 -0
  312. package/lib/specs/tools.js +86 -0
  313. package/lib/specs/triggers.d.ts +15 -0
  314. package/lib/specs/triggers.js +67 -0
  315. package/lib/stores/agentsStore.d.ts +123 -0
  316. package/lib/stores/agentsStore.js +270 -0
  317. package/lib/{components/chat/store → stores}/chatStore.d.ts +3 -2
  318. package/lib/{components/chat/store → stores}/chatStore.js +2 -2
  319. package/lib/{components/chat/store → stores}/conversationStore.d.ts +1 -1
  320. package/lib/{components/chat/store → stores}/conversationStore.js +1 -1
  321. package/lib/{components/chat/store → stores}/index.d.ts +3 -2
  322. package/lib/{components/chat/store → stores}/index.js +3 -2
  323. package/lib/{components/chat/tools → tools}/ToolExecutor.d.ts +2 -2
  324. package/lib/{components/chat/tools → tools}/ToolExecutor.js +1 -1
  325. package/lib/tools/adapters/agent-runtimes/AgentRuntimesToolAdapter.d.ts +1 -1
  326. package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +14 -10
  327. package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +31 -21
  328. package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +1 -1
  329. package/lib/tools/index.d.ts +3 -0
  330. package/lib/tools/index.js +3 -7
  331. package/lib/types/a2a.d.ts +39 -0
  332. package/lib/types/acp.d.ts +21 -0
  333. package/lib/types/ag-ui.d.ts +25 -0
  334. package/lib/types/agents-lifecycle.d.ts +36 -0
  335. package/lib/types/agents.d.ts +80 -0
  336. package/lib/types/agents.js +22 -0
  337. package/lib/types/agentspecs.d.ts +90 -0
  338. package/lib/{components/chat/components/base/ChatBase.d.ts → types/chat.d.ts} +59 -99
  339. package/lib/types/checkpoints.d.ts +32 -0
  340. package/lib/types/checkpoints.js +5 -0
  341. package/lib/types/config.d.ts +67 -0
  342. package/lib/{runtime/types.js → types/config.js} +2 -2
  343. package/lib/types/connection.d.ts +31 -0
  344. package/lib/types/connection.js +5 -0
  345. package/lib/types/context.d.ts +67 -0
  346. package/lib/types/context.js +5 -0
  347. package/lib/types/cost.d.ts +42 -0
  348. package/lib/types/cost.js +5 -0
  349. package/lib/types/envvars.d.ts +21 -0
  350. package/lib/types/envvars.js +5 -0
  351. package/lib/types/evals.d.ts +66 -0
  352. package/lib/types/evals.js +5 -0
  353. package/lib/types/events.d.ts +49 -0
  354. package/lib/types/events.js +5 -0
  355. package/lib/types/eventspecs.d.ts +39 -0
  356. package/lib/types/eventspecs.js +5 -0
  357. package/lib/types/examples.d.ts +31 -0
  358. package/lib/types/examples.js +5 -0
  359. package/lib/{components/chat/types → types}/execution.d.ts +10 -1
  360. package/lib/{components/chat/types/extension.d.ts → types/extensions.d.ts} +3 -3
  361. package/lib/types/guardrails.d.ts +106 -0
  362. package/lib/types/guardrails.js +5 -0
  363. package/lib/types/index.d.ts +36 -2
  364. package/lib/types/index.js +35 -2
  365. package/lib/{components/chat/types → types}/inference.d.ts +3 -3
  366. package/lib/types/inference.js +5 -0
  367. package/lib/types/mcp.d.ts +117 -0
  368. package/lib/types/mcp.js +27 -0
  369. package/lib/types/memory.d.ts +23 -0
  370. package/lib/types/memory.js +5 -0
  371. package/lib/{components/chat/types/message.d.ts → types/messages.d.ts} +20 -1
  372. package/lib/{components/chat/types → types}/middleware.d.ts +3 -3
  373. package/lib/types/models.d.ts +63 -0
  374. package/lib/types/models.js +5 -0
  375. package/lib/types/notifications.d.ts +85 -0
  376. package/lib/types/notifications.js +5 -0
  377. package/lib/types/outputs.d.ts +51 -0
  378. package/lib/types/outputs.js +5 -0
  379. package/lib/{components/chat/types → types}/protocol.d.ts +37 -99
  380. package/lib/types/protocol.js +5 -0
  381. package/lib/types/sandbox.d.ts +27 -0
  382. package/lib/types/sandbox.js +24 -0
  383. package/lib/types/skills.d.ts +74 -0
  384. package/lib/types/skills.js +5 -0
  385. package/lib/types/teams.d.ts +133 -0
  386. package/lib/types/teams.js +5 -0
  387. package/lib/types/tool-approvals.d.ts +39 -0
  388. package/lib/types/tool-approvals.js +5 -0
  389. package/lib/{components/chat/types/tool.d.ts → types/tools.d.ts} +61 -4
  390. package/lib/types/triggers.d.ts +48 -0
  391. package/lib/types/triggers.js +5 -0
  392. package/lib/types/usage.d.ts +36 -0
  393. package/lib/types/usage.js +5 -0
  394. package/lib/utils/index.d.ts +1 -0
  395. package/lib/utils/index.js +5 -0
  396. package/lib/utils/utils.d.ts +60 -0
  397. package/lib/utils/utils.js +205 -0
  398. package/package.json +13 -14
  399. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  400. package/scripts/codegen/generate_agents.py +377 -61
  401. package/scripts/codegen/generate_envvars.py +36 -35
  402. package/scripts/codegen/generate_evals.py +279 -0
  403. package/scripts/codegen/generate_events.py +320 -0
  404. package/scripts/codegen/generate_frontend_tools.py +266 -0
  405. package/scripts/codegen/generate_guardrails.py +475 -0
  406. package/scripts/codegen/generate_mcp_servers.py +36 -9
  407. package/scripts/codegen/generate_memory.py +468 -0
  408. package/scripts/codegen/generate_models.py +22 -46
  409. package/scripts/codegen/generate_notifications.py +309 -0
  410. package/scripts/codegen/generate_outputs.py +267 -0
  411. package/scripts/codegen/generate_skills.py +108 -51
  412. package/scripts/codegen/generate_teams.py +922 -0
  413. package/scripts/codegen/generate_tools.py +346 -0
  414. package/scripts/codegen/generate_triggers.py +295 -0
  415. package/scripts/codegen/versioning.py +53 -0
  416. package/style/primer-primitives.css +1 -6
  417. package/lib/components/chat/components/base/ChatBase.js +0 -2242
  418. package/lib/components/chat/components/base/InputPrompt.d.ts +0 -42
  419. package/lib/components/chat/components/base/InputPrompt.js +0 -131
  420. package/lib/components/chat/components/display/index.d.ts +0 -6
  421. package/lib/components/chat/components/index.d.ts +0 -26
  422. package/lib/components/chat/components/index.js +0 -39
  423. package/lib/components/chat/extensions/A2UIExtension.d.ts +0 -87
  424. package/lib/components/chat/extensions/A2UIExtension.js +0 -312
  425. package/lib/components/chat/extensions/index.d.ts +0 -10
  426. package/lib/components/chat/index.d.ts +0 -61
  427. package/lib/components/chat/index.js +0 -76
  428. package/lib/components/chat/protocols/VercelAIAdapter.js +0 -315
  429. package/lib/components/chat/tools/index.d.ts +0 -8
  430. package/lib/components/chat/tools/index.js +0 -11
  431. package/lib/components/chat/types/index.d.ts +0 -12
  432. package/lib/components/chat/types/index.js +0 -17
  433. package/lib/components/sparklines/Sparklines.d.ts +0 -16
  434. package/lib/components/sparklines/Sparklines.js +0 -65
  435. package/lib/components/sparklines/SparklinesLine.d.ts +0 -8
  436. package/lib/components/sparklines/SparklinesLine.js +0 -37
  437. package/lib/components/sparklines/dataProcessing.d.ts +0 -25
  438. package/lib/components/sparklines/dataProcessing.js +0 -35
  439. package/lib/components/sparklines/index.d.ts +0 -4
  440. package/lib/components/sparklines/index.js +0 -7
  441. package/lib/components/sparklines/types.d.ts +0 -36
  442. package/lib/examples/stores/examplesStore.d.ts +0 -5
  443. package/lib/examples/stores/notebooks/Empty.ipynb.json +0 -33
  444. package/lib/examples/stores/notebooks/NotebookExample2.ipynb.json +0 -48
  445. package/lib/examples/stores/themeStore.d.ts +0 -33
  446. package/lib/examples/stores/themeStore.js +0 -38
  447. package/lib/hooks/useAgentRuntimes.d.ts +0 -350
  448. package/lib/hooks/useAgentRuntimes.js +0 -78
  449. package/lib/hooks/useKeyboardShortcuts.d.ts +0 -47
  450. package/lib/hooks/useKeyboardShortcuts.js +0 -153
  451. package/lib/hooks/useMobile.d.ts +0 -1
  452. package/lib/hooks/useMobile.js +0 -19
  453. package/lib/hooks/useNotebookAIAgent.d.ts +0 -8
  454. package/lib/hooks/useNotebookAIAgent.js +0 -73
  455. package/lib/renderers/a2ui/components/A2UIRenderer.d.ts +0 -7
  456. package/lib/renderers/a2ui/components/A2UIRenderer.js +0 -102
  457. package/lib/renderers/a2ui/components/SurfaceRenderer.d.ts +0 -7
  458. package/lib/renderers/a2ui/components/SurfaceRenderer.js +0 -101
  459. package/lib/renderers/a2ui/components/content/AudioPlayer.d.ts +0 -9
  460. package/lib/renderers/a2ui/components/content/AudioPlayer.js +0 -38
  461. package/lib/renderers/a2ui/components/content/Divider.d.ts +0 -9
  462. package/lib/renderers/a2ui/components/content/Divider.js +0 -35
  463. package/lib/renderers/a2ui/components/content/Icon.d.ts +0 -9
  464. package/lib/renderers/a2ui/components/content/Icon.js +0 -110
  465. package/lib/renderers/a2ui/components/content/Image.d.ts +0 -9
  466. package/lib/renderers/a2ui/components/content/Image.js +0 -61
  467. package/lib/renderers/a2ui/components/content/Text.d.ts +0 -9
  468. package/lib/renderers/a2ui/components/content/Text.js +0 -64
  469. package/lib/renderers/a2ui/components/content/Video.d.ts +0 -9
  470. package/lib/renderers/a2ui/components/content/Video.js +0 -37
  471. package/lib/renderers/a2ui/components/content/index.d.ts +0 -6
  472. package/lib/renderers/a2ui/components/content/index.js +0 -25
  473. package/lib/renderers/a2ui/components/index.d.ts +0 -5
  474. package/lib/renderers/a2ui/components/index.js +0 -24
  475. package/lib/renderers/a2ui/components/interactive/Button.d.ts +0 -11
  476. package/lib/renderers/a2ui/components/interactive/Button.js +0 -71
  477. package/lib/renderers/a2ui/components/interactive/CheckBox.d.ts +0 -9
  478. package/lib/renderers/a2ui/components/interactive/CheckBox.js +0 -48
  479. package/lib/renderers/a2ui/components/interactive/DateTimeInput.d.ts +0 -9
  480. package/lib/renderers/a2ui/components/interactive/DateTimeInput.js +0 -62
  481. package/lib/renderers/a2ui/components/interactive/MultipleChoice.d.ts +0 -9
  482. package/lib/renderers/a2ui/components/interactive/MultipleChoice.js +0 -73
  483. package/lib/renderers/a2ui/components/interactive/Slider.d.ts +0 -9
  484. package/lib/renderers/a2ui/components/interactive/Slider.js +0 -53
  485. package/lib/renderers/a2ui/components/interactive/TextField.d.ts +0 -9
  486. package/lib/renderers/a2ui/components/interactive/TextField.js +0 -72
  487. package/lib/renderers/a2ui/components/interactive/index.d.ts +0 -6
  488. package/lib/renderers/a2ui/components/interactive/index.js +0 -25
  489. package/lib/renderers/a2ui/components/layout/Card.d.ts +0 -11
  490. package/lib/renderers/a2ui/components/layout/Card.js +0 -30
  491. package/lib/renderers/a2ui/components/layout/Column.d.ts +0 -11
  492. package/lib/renderers/a2ui/components/layout/Column.js +0 -65
  493. package/lib/renderers/a2ui/components/layout/List.d.ts +0 -11
  494. package/lib/renderers/a2ui/components/layout/List.js +0 -55
  495. package/lib/renderers/a2ui/components/layout/Modal.d.ts +0 -11
  496. package/lib/renderers/a2ui/components/layout/Modal.js +0 -58
  497. package/lib/renderers/a2ui/components/layout/Row.d.ts +0 -11
  498. package/lib/renderers/a2ui/components/layout/Row.js +0 -65
  499. package/lib/renderers/a2ui/components/layout/Tabs.d.ts +0 -11
  500. package/lib/renderers/a2ui/components/layout/Tabs.js +0 -48
  501. package/lib/renderers/a2ui/components/layout/index.d.ts +0 -6
  502. package/lib/renderers/a2ui/components/layout/index.js +0 -25
  503. package/lib/renderers/a2ui/context/A2UIContext.d.ts +0 -17
  504. package/lib/renderers/a2ui/context/A2UIContext.js +0 -54
  505. package/lib/renderers/a2ui/context/ThemeContext.d.ts +0 -20
  506. package/lib/renderers/a2ui/context/ThemeContext.js +0 -333
  507. package/lib/renderers/a2ui/hooks/useA2UI.d.ts +0 -36
  508. package/lib/renderers/a2ui/hooks/useA2UI.js +0 -62
  509. package/lib/renderers/a2ui/hooks/useDataBinding.d.ts +0 -8
  510. package/lib/renderers/a2ui/hooks/useDataBinding.js +0 -83
  511. package/lib/renderers/a2ui/index.d.ts +0 -9
  512. package/lib/renderers/a2ui/index.js +0 -28
  513. package/lib/renderers/a2ui/lib/utils.d.ts +0 -11
  514. package/lib/renderers/a2ui/lib/utils.js +0 -38
  515. package/lib/renderers/a2ui/types/index.d.ts +0 -17
  516. package/lib/runtime/index.d.ts +0 -38
  517. package/lib/runtime/index.js +0 -40
  518. package/lib/runtime/runtimeStore.d.ts +0 -76
  519. package/lib/runtime/runtimeStore.js +0 -184
  520. package/lib/runtime/types.d.ts +0 -84
  521. package/lib/runtime/useAgentConnection.d.ts +0 -45
  522. package/lib/runtime/useAgentConnection.js +0 -112
  523. package/lib/runtime/useAgentRuntime.d.ts +0 -93
  524. package/lib/runtime/useAgentRuntime.js +0 -125
  525. package/lib/specs/agents/codeai/agents.d.ts +0 -28
  526. package/lib/specs/agents/codeai/agents.js +0 -179
  527. package/lib/specs/agents/codeai/index.d.ts +0 -1
  528. package/lib/specs/agents/codemode-paper/agents.d.ts +0 -31
  529. package/lib/specs/agents/codemode-paper/agents.js +0 -378
  530. package/lib/specs/agents/codemode-paper/index.d.ts +0 -1
  531. package/lib/specs/agents/codemode-paper/index.js +0 -5
  532. package/lib/specs/agents/datalayer-ai/agents.d.ts +0 -31
  533. package/lib/specs/agents/datalayer-ai/agents.js +0 -352
  534. package/lib/specs/agents/datalayer-ai/index.d.ts +0 -1
  535. package/lib/specs/agents/datalayer-ai/index.js +0 -5
  536. package/lib/specs/agents/mocks/agents.d.ts +0 -43
  537. package/lib/specs/agents/mocks/agents.js +0 -2293
  538. package/lib/specs/agents/mocks/index.d.ts +0 -1
  539. package/lib/specs/agents/mocks/index.js +0 -5
  540. package/lib/state/index.d.ts +0 -1
  541. package/lib/state/index.js +0 -5
  542. package/lib/state/substates/AIAgentState.d.ts +0 -80
  543. package/lib/state/substates/AIAgentState.js +0 -108
  544. package/lib/state/substates/index.d.ts +0 -1
  545. package/lib/state/substates/index.js +0 -5
  546. package/lib/types/AIAgent.d.ts +0 -17
  547. package/lib/types/Types.d.ts +0 -217
  548. /package/lib/{components/chat → api}/handler.d.ts +0 -0
  549. /package/lib/{renderers/index.d.ts → api/utils.d.ts} +0 -0
  550. /package/lib/{renderers/index.js → api/utils.js} +0 -0
  551. /package/lib/{components/chat/components/elements → chat/display}/PoweredByTag.js +0 -0
  552. /package/lib/{components/chat/components → chat}/parts/DynamicToolPart.js +0 -0
  553. /package/lib/{components/chat/components → chat}/parts/ReasoningPart.d.ts +0 -0
  554. /package/lib/{components/chat/components → chat}/parts/TextPart.js +0 -0
  555. /package/lib/{components/chat/components → chat}/parts/ToolPart.d.ts +0 -0
  556. /package/lib/{components/chat/components → chat}/styles/streamdownStyles.js +0 -0
  557. /package/lib/{components/chat/components/elements → chat/tools}/ToolApprovalDialog.d.ts +0 -0
  558. /package/lib/{components/chat/components → context}/ContextDistribution.d.ts +0 -0
  559. /package/lib/{components/chat/components → context}/ContextDistribution.js +0 -0
  560. /package/lib/{components/chat/components → context}/ContextInspector.d.ts +0 -0
  561. /package/lib/{components/chat/components → context}/ContextPanel.d.ts +0 -0
  562. /package/lib/{components/chat/components → context}/ContextUsage.d.ts +0 -0
  563. /package/lib/{components/chat/components → context}/ContextUsage.js +0 -0
  564. /package/lib/examples/{JupyterCellExample.d.ts → CellSimpleExample.d.ts} +0 -0
  565. /package/lib/examples/{AgentRuntimeCustomExample.d.ts → ChatCustomExample.d.ts} +0 -0
  566. /package/lib/examples/{AgentRuntimeChatExample.d.ts → ChatExample.d.ts} +0 -0
  567. /package/lib/examples/{AgentRuntimeStandaloneExample.d.ts → ChatStandaloneExample.d.ts} +0 -0
  568. /package/lib/examples/{AgentRuntimeNotebookExample.d.ts → NotebookExample.d.ts} +0 -0
  569. /package/lib/examples/{AgentRuntimeNotebookSidebarExample.d.ts → NotebookSidebarExample.d.ts} +0 -0
  570. /package/lib/examples/{JupyterNotebookExample.d.ts → NotebookSimpleExample.d.ts} +0 -0
  571. /package/lib/examples/{stores → utils}/agents/earthquake-detector.ipynb.json +0 -0
  572. /package/lib/examples/{stores → utils}/agents/earthquake-detector.json +0 -0
  573. /package/lib/examples/{stores → utils}/agents/earthquake-detector.lexical.json +0 -0
  574. /package/lib/examples/{stores → utils}/agents/sales-forecaster.ipynb.json +0 -0
  575. /package/lib/examples/{stores → utils}/agents/sales-forecaster.json +0 -0
  576. /package/lib/examples/{stores → utils}/agents/sales-forecaster.lexical.json +0 -0
  577. /package/lib/examples/{stores → utils}/agents/social-post-generator.ipynb.json +0 -0
  578. /package/lib/examples/{stores → utils}/agents/social-post-generator.json +0 -0
  579. /package/lib/examples/{stores → utils}/agents/social-post-generator.lexical.json +0 -0
  580. /package/lib/examples/{stores → utils}/agents/stock-market.ipynb.json +0 -0
  581. /package/lib/examples/{stores → utils}/agents/stock-market.json +0 -0
  582. /package/lib/examples/{stores → utils}/agents/stock-market.lexical.json +0 -0
  583. /package/lib/examples/{stores → utils}/notebooks/IPyWidgetsExample.ipynb.json +0 -0
  584. /package/lib/examples/{stores → utils}/notebooks/IPyWidgetsExampleWithState.ipynb.json +0 -0
  585. /package/lib/examples/{stores → utils}/notebooks/Lite.ipynb.json +0 -0
  586. /package/lib/examples/{stores → utils}/notebooks/Matplotlib.ipynb.json +0 -0
  587. /package/lib/examples/{stores → utils}/notebooks/NotebookExample1.ipynb.json +0 -0
  588. /package/lib/examples/{stores → utils}/notebooks/NotebookOutputs.ipynb.json +0 -0
  589. /package/lib/examples/{stores → utils}/notebooks/NotebookToCExample.ipynb.json +0 -0
  590. /package/lib/examples/{stores → utils}/notebooks/OutputIPyWidgetsExample.d.ts +0 -0
  591. /package/lib/examples/{stores → utils}/notebooks/OutputIPyWidgetsExample.js +0 -0
  592. /package/lib/examples/{stores → utils}/notebooks/PyGWalker.ipynb.json +0 -0
  593. /package/lib/examples/{stores → utils}/themedProvider.d.ts +0 -0
  594. /package/lib/examples/{stores → utils}/themedProvider.js +0 -0
  595. /package/lib/{components/chat/inference → inference}/BaseInferenceProvider.js +0 -0
  596. /package/lib/{components → mcp}/McpServerManager.js +0 -0
  597. /package/lib/{components/chat/middleware → middleware}/MiddlewarePipeline.js +0 -0
  598. /package/lib/{components/chat/types/inference.js → types/a2a.js} +0 -0
  599. /package/lib/{components/chat/types/protocol.js → types/acp.js} +0 -0
  600. /package/lib/{components/sparklines/types.js → types/ag-ui.js} +0 -0
  601. /package/lib/{renderers/a2ui/types/index.js → types/agents-lifecycle.js} +0 -0
  602. /package/lib/types/{AIAgent.js → agentspecs.js} +0 -0
  603. /package/lib/types/{Types.js → chat.js} +0 -0
  604. /package/lib/{components/chat/types → types}/execution.js +0 -0
  605. /package/lib/{components/chat/types/extension.js → types/extensions.js} +0 -0
  606. /package/lib/{components/chat/types/message.js → types/messages.js} +0 -0
  607. /package/lib/{components/chat/types → types}/middleware.js +0 -0
  608. /package/lib/{components/chat/types/tool.js → types/tools.js} +0 -0
@@ -0,0 +1,346 @@
1
+ #!/usr/bin/env python3
2
+ # Copyright (c) 2025-2026 Datalayer, Inc.
3
+ # Distributed under the terms of the Modified BSD License.
4
+
5
+ """
6
+ Generate Python and TypeScript code from YAML tool specifications.
7
+ """
8
+
9
+ import argparse
10
+ import re
11
+ import sys
12
+ from pathlib import Path
13
+ from typing import Any
14
+
15
+ import yaml
16
+ from versioning import ensure_spec_version, version_suffix
17
+
18
+
19
+ def _fmt_list(items: list[str]) -> str:
20
+ if not items:
21
+ return "[]"
22
+ return "[" + ", ".join(f'"{item}"' for item in items) + "]"
23
+
24
+
25
+ def _require_runtime(spec: dict[str, Any]) -> dict[str, str]:
26
+ runtime = spec.get("runtime")
27
+ if not isinstance(runtime, dict):
28
+ raise ValueError(
29
+ f"Tool '{spec.get('id', '<unknown>')}' is missing required 'runtime' object"
30
+ )
31
+
32
+ language = runtime.get("language")
33
+ package = runtime.get("package")
34
+ method = runtime.get("method")
35
+
36
+ if language not in {"python", "typescript"}:
37
+ raise ValueError(
38
+ f"Tool '{spec.get('id', '<unknown>')}' has invalid runtime.language '{language}'. "
39
+ "Expected 'python' or 'typescript'."
40
+ )
41
+
42
+ if not package or not method:
43
+ raise ValueError(
44
+ f"Tool '{spec.get('id', '<unknown>')}' runtime must define non-empty 'package' and 'method'"
45
+ )
46
+
47
+ return {
48
+ "language": str(language),
49
+ "package": str(package),
50
+ "method": str(method),
51
+ }
52
+
53
+
54
+ def _requires_approval(spec: dict[str, Any]) -> bool:
55
+ explicit = spec.get("requires_approval")
56
+ if explicit is not None:
57
+ return bool(explicit)
58
+ return str(spec.get("approval", "auto")).lower() == "manual"
59
+
60
+
61
+ def _timeout_hms(spec: dict[str, Any]) -> str | None:
62
+ raw = spec.get("timeout")
63
+ if raw in (None, ""):
64
+ return None
65
+ value = str(raw).strip()
66
+ if not re.fullmatch(r"(?i)(?:\d+mo|\d+d|\d+h|\d+m|\d+s)+", value):
67
+ raise ValueError(
68
+ f"Tool '{spec.get('id', '<unknown>')}' has invalid timeout '{raw}'. "
69
+ "Expected duration format like '0h5m0s', '2d6h', or '1mo2d3h4m5s'."
70
+ )
71
+ return value
72
+
73
+
74
+ def load_tool_specs(specs_dir: Path) -> list[dict[str, Any]]:
75
+ specs: list[dict[str, Any]] = []
76
+ for yaml_file in sorted(specs_dir.glob("*.yaml")):
77
+ with open(yaml_file) as f:
78
+ spec = yaml.safe_load(f)
79
+ ensure_spec_version(spec)
80
+ specs.append(spec)
81
+ return specs
82
+
83
+
84
+ def generate_python_code(specs: list[dict[str, Any]]) -> str:
85
+ lines = [
86
+ "# Copyright (c) 2025-2026 Datalayer, Inc.",
87
+ "# Distributed under the terms of the Modified BSD License.",
88
+ '"""',
89
+ "Tool Catalog.",
90
+ "",
91
+ "Predefined runtime tools that can be attached to agents.",
92
+ "",
93
+ "This file is AUTO-GENERATED from YAML specifications.",
94
+ "DO NOT EDIT MANUALLY - run 'make specs' to regenerate.",
95
+ '"""',
96
+ "",
97
+ "from typing import Dict, List",
98
+ "",
99
+ "from agent_runtimes.types import ToolRuntimeSpec, ToolSpec",
100
+ "",
101
+ "",
102
+ "# " + "=" * 76,
103
+ "# Tool Definitions",
104
+ "# " + "=" * 76,
105
+ "",
106
+ ]
107
+
108
+ for spec in specs:
109
+ tool_id = spec["id"]
110
+ version = spec["version"]
111
+ const_name = (
112
+ f"{tool_id.upper().replace('-', '_')}_TOOL_SPEC{version_suffix(version)}"
113
+ )
114
+ runtime = _require_runtime(spec)
115
+ requires_approval = _requires_approval(spec)
116
+ timeout = _timeout_hms(spec)
117
+ icon = f'"{spec.get("icon")}"' if spec.get("icon") else "None"
118
+ emoji = f'"{spec.get("emoji")}"' if spec.get("emoji") else "None"
119
+ timeout_py = f'"{timeout}"' if timeout else "None"
120
+
121
+ lines.extend(
122
+ [
123
+ f"{const_name} = ToolSpec(",
124
+ f' id="{tool_id}",',
125
+ f' version="{version}",',
126
+ f' name="{spec["name"]}",',
127
+ f' description="{spec.get("description", "")}",',
128
+ f" tags={_fmt_list(spec.get('tags', []))},",
129
+ f" enabled={spec.get('enabled', True)},",
130
+ f' approval="{spec.get("approval", "auto")}",',
131
+ f" timeout={timeout_py},",
132
+ f" requires_approval={requires_approval},",
133
+ " runtime=ToolRuntimeSpec(",
134
+ f' language="{runtime["language"]}",',
135
+ f' package="{runtime["package"]}",',
136
+ f' method="{runtime["method"]}",',
137
+ " ),",
138
+ f" icon={icon},",
139
+ f" emoji={emoji},",
140
+ ")",
141
+ "",
142
+ ]
143
+ )
144
+
145
+ lines.extend(
146
+ [
147
+ "# " + "=" * 76,
148
+ "# Tool Catalog",
149
+ "# " + "=" * 76,
150
+ "",
151
+ "TOOL_CATALOG: Dict[str, ToolSpec] = {",
152
+ ]
153
+ )
154
+
155
+ for spec in specs:
156
+ tool_id = spec["id"]
157
+ version = spec["version"]
158
+ const_name = (
159
+ f"{tool_id.upper().replace('-', '_')}_TOOL_SPEC{version_suffix(version)}"
160
+ )
161
+ lines.append(f' "{tool_id}": {const_name},')
162
+
163
+ lines.extend(
164
+ [
165
+ "}",
166
+ "",
167
+ "",
168
+ "def get_tool_spec(tool_id: str) -> ToolSpec | None:",
169
+ ' """Get a tool specification by ID (accepts both bare and versioned refs)."""',
170
+ " spec = TOOL_CATALOG.get(tool_id)",
171
+ " if spec is not None:",
172
+ " return spec",
173
+ " base, _, ver = tool_id.rpartition(':')",
174
+ " if base and '.' in ver:",
175
+ " return TOOL_CATALOG.get(base)",
176
+ " return None",
177
+ "",
178
+ "",
179
+ "def list_tool_specs() -> List[ToolSpec]:",
180
+ ' """List all tool specifications."""',
181
+ " return list(TOOL_CATALOG.values())",
182
+ "",
183
+ ]
184
+ )
185
+
186
+ return "\n".join(lines)
187
+
188
+
189
+ def generate_typescript_code(specs: list[dict[str, Any]]) -> str:
190
+ lines = [
191
+ "/*",
192
+ " * Copyright (c) 2025-2026 Datalayer, Inc.",
193
+ " * Distributed under the terms of the Modified BSD License.",
194
+ " */",
195
+ "",
196
+ "/**",
197
+ " * Tool Catalog",
198
+ " *",
199
+ " * Predefined runtime tools that can be attached to agents.",
200
+ " *",
201
+ " * This file is AUTO-GENERATED from YAML specifications.",
202
+ " * DO NOT EDIT MANUALLY - run 'make specs' to regenerate.",
203
+ " */",
204
+ "",
205
+ "import type { ToolSpec } from '../types';",
206
+ "",
207
+ "// " + "=" * 76,
208
+ "// Tool Definitions",
209
+ "// " + "=" * 76,
210
+ "",
211
+ ]
212
+
213
+ for spec in specs:
214
+ tool_id = spec["id"]
215
+ version = spec["version"]
216
+ const_name = (
217
+ f"{tool_id.upper().replace('-', '_')}_TOOL_SPEC{version_suffix(version)}"
218
+ )
219
+ runtime = _require_runtime(spec)
220
+ requires_approval = _requires_approval(spec)
221
+ timeout = _timeout_hms(spec)
222
+ tags_json = str(spec.get("tags", [])).replace("'", '"')
223
+ icon = f"'{spec.get('icon')}'" if spec.get("icon") else "undefined"
224
+ emoji = f"'{spec.get('emoji')}'" if spec.get("emoji") else "undefined"
225
+ timeout_ts = f"'{timeout}'" if timeout else "undefined"
226
+
227
+ lines.extend(
228
+ [
229
+ f"export const {const_name}: ToolSpec = {{",
230
+ f" id: '{tool_id}',",
231
+ f" version: '{version}',",
232
+ f" name: '{spec['name']}',",
233
+ f" description: '{spec.get('description', '')}',",
234
+ f" tags: {tags_json},",
235
+ f" enabled: {str(spec.get('enabled', True)).lower()},",
236
+ f" approval: '{spec.get('approval', 'auto')}',",
237
+ f" timeout: {timeout_ts},",
238
+ f" requiresApproval: {str(requires_approval).lower()},",
239
+ " runtime: {",
240
+ f" language: '{runtime['language']}',",
241
+ f" package: '{runtime['package']}',",
242
+ f" method: '{runtime['method']}',",
243
+ " },",
244
+ f" icon: {icon},",
245
+ f" emoji: {emoji},",
246
+ "};",
247
+ "",
248
+ ]
249
+ )
250
+
251
+ lines.extend(
252
+ [
253
+ "// " + "=" * 76,
254
+ "// Tool Catalog",
255
+ "// " + "=" * 76,
256
+ "",
257
+ "export const TOOL_CATALOG: Record<string, ToolSpec> = {",
258
+ ]
259
+ )
260
+
261
+ for spec in specs:
262
+ tool_id = spec["id"]
263
+ version = spec["version"]
264
+ const_name = (
265
+ f"{tool_id.upper().replace('-', '_')}_TOOL_SPEC{version_suffix(version)}"
266
+ )
267
+ lines.append(f" '{tool_id}': {const_name},")
268
+
269
+ lines.extend(
270
+ [
271
+ "};",
272
+ "",
273
+ "export function getToolSpecs(): ToolSpec[] {",
274
+ " return Object.values(TOOL_CATALOG);",
275
+ "}",
276
+ "",
277
+ "function resolveToolId(toolId: string): string {",
278
+ " if (toolId in TOOL_CATALOG) return toolId;",
279
+ " const idx = toolId.lastIndexOf(':');",
280
+ " if (idx > 0) {",
281
+ " const base = toolId.slice(0, idx);",
282
+ " if (base in TOOL_CATALOG) return base;",
283
+ " }",
284
+ " return toolId;",
285
+ "}",
286
+ "",
287
+ "export function getToolSpec(toolId: string): ToolSpec | undefined {",
288
+ " return TOOL_CATALOG[resolveToolId(toolId)];",
289
+ "}",
290
+ "",
291
+ ]
292
+ )
293
+
294
+ return "\n".join(lines)
295
+
296
+
297
+ def main() -> None:
298
+ parser = argparse.ArgumentParser(
299
+ description="Generate Python and TypeScript code from YAML tool specifications"
300
+ )
301
+ parser.add_argument(
302
+ "--specs-dir",
303
+ type=Path,
304
+ required=True,
305
+ help="Directory containing YAML specification files",
306
+ )
307
+ parser.add_argument(
308
+ "--python-output",
309
+ type=Path,
310
+ required=True,
311
+ help="Output path for generated Python file",
312
+ )
313
+ parser.add_argument(
314
+ "--typescript-output",
315
+ type=Path,
316
+ required=True,
317
+ help="Output path for generated TypeScript file",
318
+ )
319
+
320
+ args = parser.parse_args()
321
+
322
+ if not args.specs_dir.exists():
323
+ print(f"Error: Specs directory does not exist: {args.specs_dir}")
324
+ sys.exit(1)
325
+
326
+ print(f"Loading tool specs from {args.specs_dir}...")
327
+ specs = load_tool_specs(args.specs_dir)
328
+ print(f"Loaded {len(specs)} tool specifications")
329
+
330
+ print("Generating Python code...")
331
+ python_code = generate_python_code(specs)
332
+ args.python_output.parent.mkdir(parents=True, exist_ok=True)
333
+ args.python_output.write_text(python_code)
334
+ print(f"✓ Generated {args.python_output}")
335
+
336
+ print("Generating TypeScript code...")
337
+ typescript_code = generate_typescript_code(specs)
338
+ args.typescript_output.parent.mkdir(parents=True, exist_ok=True)
339
+ args.typescript_output.write_text(typescript_code)
340
+ print(f"✓ Generated {args.typescript_output}")
341
+
342
+ print(f"\n✓ Successfully generated code from {len(specs)} tool specs")
343
+
344
+
345
+ if __name__ == "__main__":
346
+ main()
@@ -0,0 +1,295 @@
1
+ #!/usr/bin/env python3
2
+ # Copyright (c) 2025-2026 Datalayer, Inc.
3
+ # Distributed under the terms of the Modified BSD License.
4
+
5
+ """
6
+ Generate Python and TypeScript code from YAML trigger specifications.
7
+
8
+ Usage:
9
+ python generate_triggers.py \\
10
+ --specs-dir specs/triggers \\
11
+ --python-output agent_runtimes/specs/triggers.py \\
12
+ --typescript-output src/specs/triggers.ts
13
+ """
14
+
15
+ import argparse
16
+ import sys
17
+ from pathlib import Path
18
+ from typing import Any
19
+
20
+ import yaml
21
+ from versioning import ensure_spec_version, version_suffix
22
+
23
+
24
+ def _esc(text: str) -> str:
25
+ """Escape single quotes for TypeScript string literals."""
26
+ return text.replace("'", "\\'")
27
+
28
+
29
+ def _esc_dq(text: str) -> str:
30
+ """Escape double quotes for Python string literals."""
31
+ return text.replace('"', '\\"')
32
+
33
+
34
+ def load_specs(specs_dir: Path) -> list[dict[str, Any]]:
35
+ """Load all YAML specifications from a directory (including subdirectories)."""
36
+ specs = []
37
+ for yaml_file in sorted(specs_dir.rglob("*.yaml")):
38
+ with open(yaml_file) as f:
39
+ spec = yaml.safe_load(f)
40
+ ensure_spec_version(spec)
41
+ specs.append(spec)
42
+ return specs
43
+
44
+
45
+ def _py_field(f: dict[str, Any]) -> str:
46
+ """Format a TriggerField as a Python dict literal."""
47
+ parts = [
48
+ f'"name": "{f["name"]}"',
49
+ f'"label": "{f["label"]}"',
50
+ f'"type": "{f["type"]}"',
51
+ f'"required": {str(f["required"])}',
52
+ ]
53
+ if "placeholder" in f:
54
+ parts.append(f'"placeholder": "{_esc_dq(f["placeholder"])}"')
55
+ if "help" in f:
56
+ parts.append(f'"help": "{_esc_dq(f["help"])}"')
57
+ if "font" in f:
58
+ parts.append(f'"font": "{f["font"]}"')
59
+ return "{" + ", ".join(parts) + "}"
60
+
61
+
62
+ def _ts_field(f: dict[str, Any]) -> str:
63
+ """Format a TriggerField as a TypeScript object literal."""
64
+ parts = [
65
+ f"name: '{f['name']}'",
66
+ f"label: '{_esc(f['label'])}'",
67
+ f"type: '{f['type']}'",
68
+ f"required: {'true' if f['required'] else 'false'}",
69
+ ]
70
+ if "placeholder" in f:
71
+ parts.append(f"placeholder: '{_esc(f['placeholder'])}'")
72
+ if "help" in f:
73
+ parts.append(f"help: '{_esc(f['help'])}'")
74
+ if "font" in f:
75
+ parts.append(f"font: '{f['font']}'")
76
+ return "{ " + ", ".join(parts) + " }"
77
+
78
+
79
+ def generate_python_code(specs: list[dict[str, Any]]) -> str:
80
+ """Generate Python code from trigger specifications."""
81
+ lines = [
82
+ "# Copyright (c) 2025-2026 Datalayer, Inc.",
83
+ "# Distributed under the terms of the Modified BSD License.",
84
+ '"""',
85
+ "Trigger Catalog.",
86
+ "",
87
+ "Predefined trigger type configurations.",
88
+ "",
89
+ "This file is AUTO-GENERATED from YAML specifications.",
90
+ "DO NOT EDIT MANUALLY - run 'make specs' to regenerate.",
91
+ '"""',
92
+ "",
93
+ "from typing import Dict, List",
94
+ "",
95
+ "from agent_runtimes.types import TriggerField, TriggerSpec",
96
+ "",
97
+ "",
98
+ "# " + "=" * 76,
99
+ "# Trigger Definitions",
100
+ "# " + "=" * 76,
101
+ "",
102
+ ]
103
+
104
+ for spec in specs:
105
+ trigger_id = spec["id"]
106
+ version = spec["version"]
107
+ const_name = f"{trigger_id.upper().replace('-', '_')}_TRIGGER_SPEC{version_suffix(version)}"
108
+ desc = _esc_dq(spec.get("description", "").strip().replace("\n", " "))
109
+ fields = spec.get("fields", [])
110
+
111
+ lines.extend(
112
+ [
113
+ f"{const_name} = TriggerSpec(",
114
+ f' id="{trigger_id}",',
115
+ f' version="{version}",',
116
+ f' name="{spec["name"]}",',
117
+ f' description="{desc}",',
118
+ f' type="{spec["type"]}",',
119
+ ]
120
+ )
121
+ if fields:
122
+ field_strs = [_py_field(f) for f in fields]
123
+ lines.append(" fields=[")
124
+ for fs in field_strs:
125
+ lines.append(f" TriggerField(**{fs}),")
126
+ lines.append(" ],")
127
+ lines.extend([")", ""])
128
+
129
+ lines.extend(
130
+ [
131
+ "# " + "=" * 76,
132
+ "# Trigger Catalog",
133
+ "# " + "=" * 76,
134
+ "",
135
+ "TRIGGER_CATALOG: Dict[str, TriggerSpec] = {",
136
+ ]
137
+ )
138
+ for spec in specs:
139
+ trigger_id = spec["id"]
140
+ version = spec["version"]
141
+ const_name = f"{trigger_id.upper().replace('-', '_')}_TRIGGER_SPEC{version_suffix(version)}"
142
+ lines.append(f' "{trigger_id}": {const_name},')
143
+ lines.extend(
144
+ [
145
+ "}",
146
+ "",
147
+ "",
148
+ "def get_trigger_spec(trigger_id: str) -> TriggerSpec | None:",
149
+ ' """Get a trigger specification by ID (accepts both bare and versioned refs)."""',
150
+ " spec = TRIGGER_CATALOG.get(trigger_id)",
151
+ " if spec is not None:",
152
+ " return spec",
153
+ " base, _, ver = trigger_id.rpartition(':')",
154
+ " if base and '.' in ver:",
155
+ " return TRIGGER_CATALOG.get(base)",
156
+ " return None",
157
+ "",
158
+ "",
159
+ "def list_trigger_specs() -> List[TriggerSpec]:",
160
+ ' """List all trigger specifications."""',
161
+ " return list(TRIGGER_CATALOG.values())",
162
+ "",
163
+ ]
164
+ )
165
+ return "\n".join(lines)
166
+
167
+
168
+ def generate_typescript_code(specs: list[dict[str, Any]]) -> str:
169
+ """Generate TypeScript code from trigger specifications."""
170
+ lines = [
171
+ "/*",
172
+ " * Copyright (c) 2025-2026 Datalayer, Inc.",
173
+ " * Distributed under the terms of the Modified BSD License.",
174
+ " */",
175
+ "",
176
+ "/**",
177
+ " * Trigger Catalog",
178
+ " *",
179
+ " * Predefined trigger type configurations.",
180
+ " *",
181
+ " * This file is AUTO-GENERATED from YAML specifications.",
182
+ " * DO NOT EDIT MANUALLY - run 'make specs' to regenerate.",
183
+ " */",
184
+ "",
185
+ "import type { TriggerSpec } from '../types';",
186
+ "",
187
+ "// " + "=" * 76,
188
+ "// Trigger Definitions",
189
+ "// " + "=" * 76,
190
+ "",
191
+ ]
192
+
193
+ for spec in specs:
194
+ trigger_id = spec["id"]
195
+ version = spec["version"]
196
+ const_name = f"{trigger_id.upper().replace('-', '_')}_TRIGGER_SPEC{version_suffix(version)}"
197
+ desc = _esc(spec.get("description", "").strip().replace("\n", " "))
198
+ fields = spec.get("fields", [])
199
+
200
+ lines.extend(
201
+ [
202
+ f"export const {const_name}: TriggerSpec = {{",
203
+ f" id: '{trigger_id}',",
204
+ f" version: '{version}',",
205
+ f" name: '{_esc(spec['name'])}',",
206
+ f" description: '{desc}',",
207
+ f" type: '{spec['type']}',",
208
+ ]
209
+ )
210
+ if fields:
211
+ field_strs = [_ts_field(f) for f in fields]
212
+ lines.append(" fields: [")
213
+ for fs in field_strs:
214
+ lines.append(f" {fs},")
215
+ lines.append(" ],")
216
+ else:
217
+ lines.append(" fields: [],")
218
+ lines.extend(["};", ""])
219
+
220
+ lines.extend(
221
+ [
222
+ "// " + "=" * 76,
223
+ "// Trigger Catalog",
224
+ "// " + "=" * 76,
225
+ "",
226
+ "export const TRIGGER_CATALOG: Record<string, TriggerSpec> = {",
227
+ ]
228
+ )
229
+ for spec in specs:
230
+ trigger_id = spec["id"]
231
+ version = spec["version"]
232
+ const_name = f"{trigger_id.upper().replace('-', '_')}_TRIGGER_SPEC{version_suffix(version)}"
233
+ lines.append(f" '{trigger_id}': {const_name},")
234
+ lines.extend(
235
+ [
236
+ "};",
237
+ "",
238
+ "export function getTriggerSpecs(): TriggerSpec[] {",
239
+ " return Object.values(TRIGGER_CATALOG);",
240
+ "}",
241
+ "",
242
+ "function resolveTriggerIdTs(triggerId: string): string {",
243
+ " if (triggerId in TRIGGER_CATALOG) return triggerId;",
244
+ " const idx = triggerId.lastIndexOf(':');",
245
+ " if (idx > 0) {",
246
+ " const base = triggerId.slice(0, idx);",
247
+ " if (base in TRIGGER_CATALOG) return base;",
248
+ " }",
249
+ " return triggerId;",
250
+ "}",
251
+ "",
252
+ "export function getTriggerSpec(triggerId: string): TriggerSpec | undefined {",
253
+ " return TRIGGER_CATALOG[resolveTriggerIdTs(triggerId)];",
254
+ "}",
255
+ "",
256
+ ]
257
+ )
258
+ return "\n".join(lines)
259
+
260
+
261
+ def main():
262
+ """Main entry point."""
263
+ parser = argparse.ArgumentParser(
264
+ description="Generate Python and TypeScript code from YAML trigger specifications"
265
+ )
266
+ parser.add_argument("--specs-dir", type=Path, required=True)
267
+ parser.add_argument("--python-output", type=Path, required=True)
268
+ parser.add_argument("--typescript-output", type=Path, required=True)
269
+ args = parser.parse_args()
270
+
271
+ if not args.specs_dir.exists():
272
+ print(f"Error: Specs directory does not exist: {args.specs_dir}")
273
+ sys.exit(1)
274
+
275
+ print(f"Loading trigger specs from {args.specs_dir}...")
276
+ specs = load_specs(args.specs_dir)
277
+ print(f"Loaded {len(specs)} trigger specifications")
278
+
279
+ print("Generating Python code...")
280
+ python_code = generate_python_code(specs)
281
+ args.python_output.parent.mkdir(parents=True, exist_ok=True)
282
+ args.python_output.write_text(python_code)
283
+ print(f"✓ Generated {args.python_output}")
284
+
285
+ print("Generating TypeScript code...")
286
+ typescript_code = generate_typescript_code(specs)
287
+ args.typescript_output.parent.mkdir(parents=True, exist_ok=True)
288
+ args.typescript_output.write_text(typescript_code)
289
+ print(f"✓ Generated {args.typescript_output}")
290
+
291
+ print(f"\n✓ Successfully generated code from {len(specs)} trigger specs")
292
+
293
+
294
+ if __name__ == "__main__":
295
+ main()
@@ -0,0 +1,53 @@
1
+ # Copyright (c) 2025-2026 Datalayer, Inc.
2
+ # Distributed under the terms of the Modified BSD License.
3
+
4
+ """Helpers for versioned spec IDs and generated symbol names."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import Any, Tuple
9
+
10
+ DEFAULT_SPEC_VERSION = "0.0.1"
11
+
12
+
13
+ def ensure_spec_version(
14
+ spec: dict[str, Any], *, default: str = DEFAULT_SPEC_VERSION
15
+ ) -> str:
16
+ """Ensure a spec dict has a version and return it."""
17
+ version = str(spec.get("version") or default)
18
+ spec["version"] = version
19
+ return version
20
+
21
+
22
+ def split_spec_ref(
23
+ ref: str | None, *, default: str = DEFAULT_SPEC_VERSION
24
+ ) -> Tuple[str, str]:
25
+ """Split a ref like ``name:0.0.1`` into ``(name, 0.0.1)``.
26
+
27
+ Uses rsplit so values that include ``:`` (e.g. model IDs) are preserved.
28
+ """
29
+ value = (ref or "").strip()
30
+ if not value:
31
+ return "", default
32
+ base, sep, version = value.rpartition(":")
33
+ if sep and version and _looks_like_version(version):
34
+ return base, version
35
+ return value, default
36
+
37
+
38
+ def versioned_ref(ref: str, version: str) -> str:
39
+ """Build ``name:version`` references."""
40
+ return f"{ref}:{version}"
41
+
42
+
43
+ def version_suffix(version: str) -> str:
44
+ """Build symbol-safe suffix (e.g. 0.0.1 -> _0_0_1)."""
45
+ normalized = version.replace(".", "_").replace("-", "_")
46
+ return f"_{normalized}"
47
+
48
+
49
+ def _looks_like_version(value: str) -> bool:
50
+ parts = value.split(".")
51
+ if not parts:
52
+ return False
53
+ return all(part.isdigit() for part in parts)