@datalayer/agent-runtimes 1.0.4 → 1.0.5

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 (267) hide show
  1. package/README.md +34 -0
  2. package/lib/App.js +1 -1
  3. package/lib/agents/AgentDetails.d.ts +22 -1
  4. package/lib/agents/AgentDetails.js +34 -47
  5. package/lib/api/index.d.ts +0 -1
  6. package/lib/api/index.js +4 -2
  7. package/lib/chat/Chat.d.ts +5 -106
  8. package/lib/chat/Chat.js +4 -4
  9. package/lib/chat/ChatFloating.d.ts +7 -140
  10. package/lib/chat/ChatFloating.js +2 -2
  11. package/lib/chat/ChatPopupStandalone.d.ts +8 -47
  12. package/lib/chat/ChatPopupStandalone.js +3 -3
  13. package/lib/chat/ChatSidebar.d.ts +4 -69
  14. package/lib/chat/ChatSidebar.js +2 -2
  15. package/lib/chat/ChatStandalone.d.ts +4 -54
  16. package/lib/chat/ChatStandalone.js +3 -3
  17. package/lib/chat/base/ChatBase.js +1083 -157
  18. package/lib/chat/header/ChatHeaderBase.d.ts +11 -6
  19. package/lib/chat/header/ChatHeaderBase.js +18 -16
  20. package/lib/chat/indicators/McpStatusIndicator.d.ts +7 -4
  21. package/lib/chat/indicators/McpStatusIndicator.js +7 -32
  22. package/lib/chat/indicators/SandboxStatusIndicator.d.ts +4 -1
  23. package/lib/chat/indicators/SandboxStatusIndicator.js +9 -9
  24. package/lib/chat/indicators/SkillsStatusIndicator.d.ts +7 -0
  25. package/lib/chat/indicators/SkillsStatusIndicator.js +88 -0
  26. package/lib/chat/indicators/index.d.ts +1 -0
  27. package/lib/chat/indicators/index.js +1 -0
  28. package/lib/chat/messages/ChatMessageList.d.ts +1 -1
  29. package/lib/chat/messages/ChatMessageList.js +108 -113
  30. package/lib/chat/prompt/InputFooter.d.ts +19 -6
  31. package/lib/chat/prompt/InputFooter.js +71 -18
  32. package/lib/chat/prompt/InputPrompt.d.ts +3 -1
  33. package/lib/chat/prompt/InputPrompt.js +4 -4
  34. package/lib/chat/prompt/InputPromptFooter.js +1 -1
  35. package/lib/chat/prompt/InputPromptLexical.d.ts +3 -1
  36. package/lib/chat/prompt/InputPromptLexical.js +12 -5
  37. package/lib/chat/prompt/InputPromptText.d.ts +3 -1
  38. package/lib/chat/prompt/InputPromptText.js +2 -2
  39. package/lib/chat/tools/ToolApprovalBanner.js +1 -1
  40. package/lib/chat/tools/ToolCallDisplay.d.ts +3 -1
  41. package/lib/chat/tools/ToolCallDisplay.js +2 -2
  42. package/lib/chat/usage/TokenUsageBar.js +20 -2
  43. package/lib/client/AgentRuntimesClientContext.d.ts +53 -0
  44. package/lib/client/AgentRuntimesClientContext.js +55 -0
  45. package/lib/client/AgentsMixin.d.ts +0 -18
  46. package/lib/client/AgentsMixin.js +6 -30
  47. package/lib/client/IAgentRuntimesClient.d.ts +215 -0
  48. package/lib/client/IAgentRuntimesClient.js +5 -0
  49. package/lib/client/SdkAgentRuntimesClient.d.ts +151 -0
  50. package/lib/client/SdkAgentRuntimesClient.js +134 -0
  51. package/lib/client/index.d.ts +4 -1
  52. package/lib/client/index.js +3 -1
  53. package/lib/components/NotificationEventCard.js +5 -1
  54. package/lib/config/AgentConfiguration.js +3 -3
  55. package/lib/context/ContextDistribution.d.ts +3 -1
  56. package/lib/context/ContextDistribution.js +8 -27
  57. package/lib/context/ContextInspector.d.ts +3 -1
  58. package/lib/context/ContextInspector.js +19 -67
  59. package/lib/context/ContextPanel.d.ts +3 -1
  60. package/lib/context/ContextPanel.js +104 -64
  61. package/lib/context/ContextUsage.d.ts +3 -1
  62. package/lib/context/ContextUsage.js +3 -3
  63. package/lib/context/CostTracker.d.ts +9 -3
  64. package/lib/context/CostTracker.js +26 -47
  65. package/lib/context/CostUsageChart.d.ts +12 -0
  66. package/lib/context/CostUsageChart.js +378 -0
  67. package/lib/context/GraphFlowChart.d.ts +16 -0
  68. package/lib/context/GraphFlowChart.js +182 -0
  69. package/lib/context/TokenUsageChart.d.ts +8 -1
  70. package/lib/context/TokenUsageChart.js +349 -211
  71. package/lib/context/TurnGraphChart.d.ts +39 -0
  72. package/lib/context/TurnGraphChart.js +538 -0
  73. package/lib/context/otelWsPool.d.ts +20 -0
  74. package/lib/context/otelWsPool.js +69 -0
  75. package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -17
  76. package/lib/examples/A2UiComponentGalleryExample.js +315 -522
  77. package/lib/examples/A2UiContactCardExample.d.ts +0 -18
  78. package/lib/examples/A2UiContactCardExample.js +154 -411
  79. package/lib/examples/A2UiRestaurantExample.d.ts +0 -30
  80. package/lib/examples/A2UiRestaurantExample.js +114 -212
  81. package/lib/examples/A2UiViewerExample.d.ts +0 -18
  82. package/lib/examples/A2UiViewerExample.js +283 -532
  83. package/lib/examples/AgUiBackendToolRenderingExample.js +1 -1
  84. package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -1
  85. package/lib/examples/AgUiHaikuGenUiExample.js +1 -1
  86. package/lib/examples/AgentCheckpointsExample.js +13 -27
  87. package/lib/examples/AgentCodemodeExample.d.ts +4 -6
  88. package/lib/examples/AgentCodemodeExample.js +591 -169
  89. package/lib/examples/AgentEvalsExample.js +12 -16
  90. package/lib/examples/AgentGuardrailsExample.js +370 -64
  91. package/lib/examples/AgentHooksExample.d.ts +3 -0
  92. package/lib/examples/AgentHooksExample.js +104 -0
  93. package/lib/examples/AgentMCPExample.d.ts +3 -0
  94. package/lib/examples/AgentMCPExample.js +480 -0
  95. package/lib/examples/AgentMemoryExample.js +13 -17
  96. package/lib/examples/AgentMonitoringExample.js +260 -199
  97. package/lib/examples/AgentNotificationsExample.js +49 -17
  98. package/lib/examples/AgentOtelExample.js +2 -3
  99. package/lib/examples/AgentOutputsExample.d.ts +11 -6
  100. package/lib/examples/AgentOutputsExample.js +382 -81
  101. package/lib/examples/AgentParametersExample.d.ts +3 -0
  102. package/lib/examples/AgentParametersExample.js +246 -0
  103. package/lib/examples/AgentSandboxExample.d.ts +2 -2
  104. package/lib/examples/AgentSandboxExample.js +68 -40
  105. package/lib/examples/AgentSkillsExample.js +91 -99
  106. package/lib/examples/{AgentspecExample.js → AgentSpecsExample.js} +10 -21
  107. package/lib/examples/AgentSubagentsExample.d.ts +14 -0
  108. package/lib/examples/AgentSubagentsExample.js +228 -0
  109. package/lib/examples/AgentToolApprovalsExample.js +29 -557
  110. package/lib/examples/AgentTriggersExample.js +819 -565
  111. package/lib/examples/ChatCustomExample.js +11 -24
  112. package/lib/examples/ChatExample.js +7 -24
  113. package/lib/examples/CopilotKitLexicalExample.js +2 -1
  114. package/lib/examples/CopilotKitNotebookExample.js +2 -1
  115. package/lib/examples/HomeExample.d.ts +15 -0
  116. package/lib/examples/HomeExample.js +77 -0
  117. package/lib/examples/Lexical2Example.js +4 -2
  118. package/lib/examples/{LexicalExample.d.ts → LexicalAgentExample.d.ts} +4 -4
  119. package/lib/examples/{LexicalExample.js → LexicalAgentExample.js} +65 -16
  120. package/lib/examples/{LexicalSidebarExample.d.ts → LexicalAgentSidebarExample.d.ts} +5 -5
  121. package/lib/examples/LexicalAgentSidebarExample.js +261 -0
  122. package/lib/examples/NotebookAgentExample.d.ts +9 -0
  123. package/lib/examples/NotebookAgentExample.js +192 -0
  124. package/lib/examples/{NotebookSidebarExample.d.ts → NotebookAgentSidebarExample.d.ts} +2 -2
  125. package/lib/examples/NotebookAgentSidebarExample.js +221 -0
  126. package/lib/examples/{DatalayerNotebookExample.d.ts → NotebookCollaborationExample.d.ts} +4 -4
  127. package/lib/examples/{DatalayerNotebookExample.js → NotebookCollaborationExample.js} +3 -3
  128. package/lib/examples/NotebookExample.d.ts +4 -7
  129. package/lib/examples/NotebookExample.js +14 -146
  130. package/lib/examples/components/AuthRequiredView.d.ts +6 -0
  131. package/lib/examples/components/AuthRequiredView.js +33 -0
  132. package/lib/examples/components/ExampleWrapper.d.ts +7 -0
  133. package/lib/examples/components/ExampleWrapper.js +25 -6
  134. package/lib/examples/{ag-ui → components}/haiku/HaikuDisplay.js +1 -1
  135. package/lib/examples/{ag-ui → components}/haiku/InlineHaikuCard.js +1 -1
  136. package/lib/examples/{ag-ui → components}/haiku/index.d.ts +1 -1
  137. package/lib/examples/{ag-ui → components}/haiku/index.js +1 -1
  138. package/lib/examples/components/index.d.ts +3 -0
  139. package/lib/examples/components/index.js +4 -0
  140. package/lib/examples/{ag-ui → components}/weather/index.d.ts +1 -1
  141. package/lib/examples/{ag-ui → components}/weather/index.js +1 -1
  142. package/lib/examples/example-selector.d.ts +17 -4
  143. package/lib/examples/example-selector.js +107 -41
  144. package/lib/examples/index.d.ts +9 -6
  145. package/lib/examples/index.js +9 -6
  146. package/lib/examples/main.js +217 -27
  147. package/lib/examples/utils/a2ui.d.ts +18 -0
  148. package/lib/examples/utils/a2ui.js +69 -0
  149. package/lib/examples/utils/a2uiMarkdownProvider.d.ts +7 -0
  150. package/lib/examples/utils/a2uiMarkdownProvider.js +9 -0
  151. package/lib/examples/utils/agentId.d.ts +18 -0
  152. package/lib/examples/utils/agentId.js +54 -0
  153. package/lib/examples/utils/agents/earthquake-detector.json +11 -11
  154. package/lib/examples/utils/agents/sales-forecaster.json +11 -11
  155. package/lib/examples/utils/agents/social-post-generator.json +11 -11
  156. package/lib/examples/utils/agents/stock-market.json +11 -11
  157. package/lib/examples/utils/examplesStore.js +82 -27
  158. package/lib/hooks/index.d.ts +8 -8
  159. package/lib/hooks/index.js +7 -7
  160. package/lib/hooks/useA2A.d.ts +2 -3
  161. package/lib/hooks/useAIAgentsWebSocket.d.ts +43 -4
  162. package/lib/hooks/useAIAgentsWebSocket.js +118 -12
  163. package/lib/hooks/useAcp.d.ts +1 -2
  164. package/lib/hooks/useAgUi.d.ts +1 -1
  165. package/lib/hooks/{useAgents.d.ts → useAgentRuntimes.d.ts} +39 -2
  166. package/lib/hooks/{useAgents.js → useAgentRuntimes.js} +125 -15
  167. package/lib/hooks/useAgentsCatalog.js +1 -1
  168. package/lib/hooks/useAgentsService.d.ts +2 -2
  169. package/lib/hooks/useAgentsService.js +7 -7
  170. package/lib/hooks/useCheckpoints.js +1 -1
  171. package/lib/hooks/useConfig.d.ts +4 -1
  172. package/lib/hooks/useConfig.js +10 -3
  173. package/lib/hooks/useContextSnapshot.d.ts +9 -4
  174. package/lib/hooks/useContextSnapshot.js +9 -37
  175. package/lib/hooks/useMonitoring.js +3 -0
  176. package/lib/hooks/useSandbox.d.ts +20 -8
  177. package/lib/hooks/useSandbox.js +105 -40
  178. package/lib/hooks/useSkills.d.ts +23 -5
  179. package/lib/hooks/useSkills.js +94 -39
  180. package/lib/hooks/useToolApprovals.d.ts +60 -36
  181. package/lib/hooks/useToolApprovals.js +318 -69
  182. package/lib/hooks/useVercelAI.d.ts +1 -1
  183. package/lib/index.d.ts +2 -1
  184. package/lib/index.js +1 -0
  185. package/lib/inference/index.d.ts +0 -1
  186. package/lib/middleware/index.d.ts +0 -1
  187. package/lib/protocols/AGUIAdapter.js +6 -0
  188. package/lib/protocols/VercelAIAdapter.d.ts +7 -0
  189. package/lib/protocols/VercelAIAdapter.js +59 -7
  190. package/lib/specs/agents/agents.d.ts +10 -0
  191. package/lib/specs/agents/agents.js +2139 -262
  192. package/lib/specs/agents/index.js +3 -1
  193. package/lib/specs/envvars.d.ts +1 -0
  194. package/lib/specs/envvars.js +38 -20
  195. package/lib/specs/evals.js +6 -6
  196. package/lib/specs/events.d.ts +3 -10
  197. package/lib/specs/events.js +127 -84
  198. package/lib/specs/frontendTools.js +2 -2
  199. package/lib/specs/guardrails.d.ts +0 -7
  200. package/lib/specs/guardrails.js +240 -159
  201. package/lib/specs/index.d.ts +1 -0
  202. package/lib/specs/index.js +1 -0
  203. package/lib/specs/mcpServers.js +35 -6
  204. package/lib/specs/memory.d.ts +0 -2
  205. package/lib/specs/memory.js +4 -17
  206. package/lib/specs/models.js +25 -5
  207. package/lib/specs/notifications.js +102 -18
  208. package/lib/specs/outputs.js +15 -9
  209. package/lib/specs/personas.d.ts +41 -0
  210. package/lib/specs/personas.js +168 -0
  211. package/lib/specs/skills.d.ts +2 -1
  212. package/lib/specs/skills.js +41 -23
  213. package/lib/specs/teams/index.js +3 -1
  214. package/lib/specs/teams/teams.js +468 -348
  215. package/lib/specs/tools.js +4 -4
  216. package/lib/specs/triggers.js +61 -11
  217. package/lib/stores/agentRuntimeStore.d.ts +204 -0
  218. package/lib/stores/agentRuntimeStore.js +636 -0
  219. package/lib/stores/index.d.ts +1 -1
  220. package/lib/stores/index.js +1 -1
  221. package/lib/tools/adapters/copilotkit/lexicalHooks.d.ts +1 -2
  222. package/lib/tools/adapters/copilotkit/lexicalHooks.js +1 -3
  223. package/lib/tools/adapters/copilotkit/notebookHooks.d.ts +1 -2
  224. package/lib/tools/adapters/copilotkit/notebookHooks.js +1 -3
  225. package/lib/tools/index.d.ts +0 -2
  226. package/lib/tools/index.js +0 -1
  227. package/lib/types/agentspecs.d.ts +50 -1
  228. package/lib/types/chat.d.ts +309 -8
  229. package/lib/types/context.d.ts +27 -0
  230. package/lib/types/cost.d.ts +2 -2
  231. package/lib/types/index.d.ts +2 -0
  232. package/lib/types/index.js +2 -0
  233. package/lib/types/mcp.d.ts +8 -0
  234. package/lib/types/models.d.ts +2 -2
  235. package/lib/types/personas.d.ts +25 -0
  236. package/lib/types/personas.js +5 -0
  237. package/lib/types/skills.d.ts +43 -1
  238. package/lib/types/stream.d.ts +110 -0
  239. package/lib/types/stream.js +36 -0
  240. package/lib/utils/utils.d.ts +9 -5
  241. package/lib/utils/utils.js +9 -5
  242. package/package.json +13 -9
  243. package/scripts/codegen/__pycache__/generate_agents.cpython-313.pyc +0 -0
  244. package/scripts/codegen/__pycache__/generate_events.cpython-313.pyc +0 -0
  245. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  246. package/scripts/codegen/generate_agents.py +102 -6
  247. package/scripts/codegen/generate_events.py +35 -13
  248. package/scripts/codegen/generate_personas.py +319 -0
  249. package/scripts/codegen/generate_skills.py +9 -9
  250. package/scripts/sync-jupyter.sh +26 -7
  251. package/lib/api/tool-approvals.d.ts +0 -62
  252. package/lib/api/tool-approvals.js +0 -145
  253. package/lib/examples/LexicalSidebarExample.js +0 -163
  254. package/lib/examples/NotebookSidebarExample.js +0 -119
  255. package/lib/examples/NotebookSimpleExample.d.ts +0 -6
  256. package/lib/examples/NotebookSimpleExample.js +0 -22
  257. package/lib/examples/ag-ui/index.d.ts +0 -10
  258. package/lib/examples/ag-ui/index.js +0 -16
  259. package/lib/hooks/useAgentsRegistry.d.ts +0 -10
  260. package/lib/hooks/useAgentsRegistry.js +0 -20
  261. package/lib/stores/agentsStore.d.ts +0 -123
  262. package/lib/stores/agentsStore.js +0 -270
  263. /package/lib/examples/{AgentspecExample.d.ts → AgentSpecsExample.d.ts} +0 -0
  264. /package/lib/examples/{ag-ui → components}/haiku/HaikuDisplay.d.ts +0 -0
  265. /package/lib/examples/{ag-ui → components}/haiku/InlineHaikuCard.d.ts +0 -0
  266. /package/lib/examples/{ag-ui → components}/weather/InlineWeatherCard.d.ts +0 -0
  267. /package/lib/examples/{ag-ui → components}/weather/InlineWeatherCard.js +0 -0
@@ -3,7 +3,7 @@
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
5
  import { ALPHAVANTAGE_MCP_SERVER_0_0_1, CHART_MCP_SERVER_0_0_1, EARTHDATA_MCP_SERVER_0_0_1, EURUS_MCP_SERVER_0_0_1, FILESYSTEM_MCP_SERVER_0_0_1, GITHUB_MCP_SERVER_0_0_1, GOOGLE_WORKSPACE_MCP_SERVER_0_0_1, KAGGLE_MCP_SERVER_0_0_1, SALESFORCE_MCP_SERVER_0_0_1, SLACK_MCP_SERVER_0_0_1, TAVILY_MCP_SERVER_0_0_1, } from '../mcpServers';
6
- import { CRAWL_SKILL_SPEC_0_0_1, EVENTS_SKILL_SPEC_0_0_1, GITHUB_SKILL_SPEC_0_0_1, JOKES_SKILL_SPEC_0_0_1, PDF_SKILL_SPEC_0_0_1, TEXT_SUMMARIZER_SKILL_SPEC_0_0_1, } from '../skills';
6
+ import { CRAWL_SKILL_SPEC_0_0_1, DATALAYER_WHOAMI_SKILL_SPEC_0_0_1, EVENTS_SKILL_SPEC_0_0_1, GITHUB_SKILL_SPEC_0_0_1, JOKES_SKILL_SPEC_0_0_1, PDF_SKILL_SPEC_0_0_1, TEXT_SUMMARIZER_SKILL_SPEC_0_0_1, } from '../skills';
7
7
  import { RUNTIME_ECHO_TOOL_SPEC_0_0_1, RUNTIME_SEND_MAIL_TOOL_SPEC_0_0_1, RUNTIME_SENSITIVE_ECHO_TOOL_SPEC_0_0_1, } from '../tools';
8
8
  import { JUPYTER_NOTEBOOK_FRONTEND_TOOL_SPEC_0_0_1, LEXICAL_DOCUMENT_FRONTEND_TOOL_SPEC_0_0_1, } from '../frontendTools';
9
9
  // ============================================================================
@@ -11,42 +11,44 @@ import { JUPYTER_NOTEBOOK_FRONTEND_TOOL_SPEC_0_0_1, LEXICAL_DOCUMENT_FRONTEND_TO
11
11
  // ============================================================================
12
12
  const MCP_SERVER_MAP = {
13
13
  'alphavantage:0.0.1': ALPHAVANTAGE_MCP_SERVER_0_0_1,
14
- 'alphavantage': ALPHAVANTAGE_MCP_SERVER_0_0_1,
14
+ alphavantage: ALPHAVANTAGE_MCP_SERVER_0_0_1,
15
15
  'chart:0.0.1': CHART_MCP_SERVER_0_0_1,
16
- 'chart': CHART_MCP_SERVER_0_0_1,
16
+ chart: CHART_MCP_SERVER_0_0_1,
17
17
  'earthdata:0.0.1': EARTHDATA_MCP_SERVER_0_0_1,
18
- 'earthdata': EARTHDATA_MCP_SERVER_0_0_1,
18
+ earthdata: EARTHDATA_MCP_SERVER_0_0_1,
19
19
  'eurus:0.0.1': EURUS_MCP_SERVER_0_0_1,
20
- 'eurus': EURUS_MCP_SERVER_0_0_1,
20
+ eurus: EURUS_MCP_SERVER_0_0_1,
21
21
  'filesystem:0.0.1': FILESYSTEM_MCP_SERVER_0_0_1,
22
- 'filesystem': FILESYSTEM_MCP_SERVER_0_0_1,
22
+ filesystem: FILESYSTEM_MCP_SERVER_0_0_1,
23
23
  'github:0.0.1': GITHUB_MCP_SERVER_0_0_1,
24
- 'github': GITHUB_MCP_SERVER_0_0_1,
24
+ github: GITHUB_MCP_SERVER_0_0_1,
25
25
  'google-workspace:0.0.1': GOOGLE_WORKSPACE_MCP_SERVER_0_0_1,
26
26
  'google-workspace': GOOGLE_WORKSPACE_MCP_SERVER_0_0_1,
27
27
  'kaggle:0.0.1': KAGGLE_MCP_SERVER_0_0_1,
28
- 'kaggle': KAGGLE_MCP_SERVER_0_0_1,
28
+ kaggle: KAGGLE_MCP_SERVER_0_0_1,
29
29
  'salesforce:0.0.1': SALESFORCE_MCP_SERVER_0_0_1,
30
- 'salesforce': SALESFORCE_MCP_SERVER_0_0_1,
30
+ salesforce: SALESFORCE_MCP_SERVER_0_0_1,
31
31
  'slack:0.0.1': SLACK_MCP_SERVER_0_0_1,
32
- 'slack': SLACK_MCP_SERVER_0_0_1,
32
+ slack: SLACK_MCP_SERVER_0_0_1,
33
33
  'tavily:0.0.1': TAVILY_MCP_SERVER_0_0_1,
34
- 'tavily': TAVILY_MCP_SERVER_0_0_1,
34
+ tavily: TAVILY_MCP_SERVER_0_0_1,
35
35
  };
36
36
  /**
37
37
  * Map skill IDs to SkillSpec objects, converting to AgentSkillSpec shape.
38
38
  */
39
39
  const SKILL_MAP = {
40
40
  'crawl:0.0.1': CRAWL_SKILL_SPEC_0_0_1,
41
- 'crawl': CRAWL_SKILL_SPEC_0_0_1,
41
+ crawl: CRAWL_SKILL_SPEC_0_0_1,
42
+ 'datalayer-whoami:0.0.1': DATALAYER_WHOAMI_SKILL_SPEC_0_0_1,
43
+ 'datalayer-whoami': DATALAYER_WHOAMI_SKILL_SPEC_0_0_1,
42
44
  'events:0.0.1': EVENTS_SKILL_SPEC_0_0_1,
43
- 'events': EVENTS_SKILL_SPEC_0_0_1,
45
+ events: EVENTS_SKILL_SPEC_0_0_1,
44
46
  'github:0.0.1': GITHUB_SKILL_SPEC_0_0_1,
45
- 'github': GITHUB_SKILL_SPEC_0_0_1,
47
+ github: GITHUB_SKILL_SPEC_0_0_1,
46
48
  'jokes:0.0.1': JOKES_SKILL_SPEC_0_0_1,
47
- 'jokes': JOKES_SKILL_SPEC_0_0_1,
49
+ jokes: JOKES_SKILL_SPEC_0_0_1,
48
50
  'pdf:0.0.1': PDF_SKILL_SPEC_0_0_1,
49
- 'pdf': PDF_SKILL_SPEC_0_0_1,
51
+ pdf: PDF_SKILL_SPEC_0_0_1,
50
52
  'text-summarizer:0.0.1': TEXT_SUMMARIZER_SKILL_SPEC_0_0_1,
51
53
  'text-summarizer': TEXT_SUMMARIZER_SKILL_SPEC_0_0_1,
52
54
  };
@@ -89,13 +91,30 @@ export const ANALYZE_CAMPAIGN_PERFORMANCE_AGENT_SPEC_0_0_1 = {
89
91
  version: '0.0.1',
90
92
  name: 'Analyze Campaign Performance',
91
93
  description: `A multi-agent team that unifies marketing data from Google Ads, Meta, TikTok, LinkedIn, GA4, CRM, and email platforms. Normalises metrics into a unified view, detects performance anomalies in real time, and generates budget reallocation recommendations to maximise ROAS.`,
92
- tags: ['marketing', 'media', 'campaigns', 'analytics', 'advertising', 'social-media'],
94
+ tags: [
95
+ 'marketing',
96
+ 'media',
97
+ 'campaigns',
98
+ 'analytics',
99
+ 'advertising',
100
+ 'social-media',
101
+ ],
93
102
  enabled: false,
94
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
95
- mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['slack:0.0.1']],
96
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
103
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
104
+ mcpServers: [
105
+ MCP_SERVER_MAP['filesystem:0.0.1'],
106
+ MCP_SERVER_MAP['slack:0.0.1'],
107
+ ],
108
+ skills: [
109
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
110
+ toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']),
111
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
112
+ ],
97
113
  tools: [],
98
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
114
+ frontendTools: [
115
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
116
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
117
+ ],
99
118
  environmentName: 'ai-agents-env',
100
119
  icon: 'megaphone',
101
120
  emoji: '📢',
@@ -105,7 +124,7 @@ export const ANALYZE_CAMPAIGN_PERFORMANCE_AGENT_SPEC_0_0_1 = {
105
124
  'Which campaigns have abnormal CPA trends?',
106
125
  'Generate a budget reallocation recommendation',
107
126
  'Compare ROAS across Google Ads vs Meta this month',
108
- 'What\'s the projected impact of shifting 20% budget to TikTok?',
127
+ "What's the projected impact of shifting 20% budget to TikTok?",
109
128
  ],
110
129
  welcomeMessage: "Hello! I'm the Campaign Performance Analytics team. We unify data from all your ad platforms, normalise metrics, detect anomalies in real time, and recommend budget reallocations to maximise your ROAS across channels.\n",
111
130
  welcomeNotebook: undefined,
@@ -117,17 +136,78 @@ export const ANALYZE_CAMPAIGN_PERFORMANCE_AGENT_SPEC_0_0_1 = {
117
136
  goal: `Unify marketing data from Google Ads, Meta, TikTok, LinkedIn, GA4, and email platforms. Normalise metrics into a single cross-channel view with unified CPA, ROAS, and CTR definitions. Detect performance anomalies in real time and generate budget reallocation recommendations to maximise ROAS.`,
118
137
  protocol: 'vercel-ai',
119
138
  uiExtension: 'a2ui',
120
- trigger: { "type": "schedule", "cron": "0 */4 * * *", "description": "Every 4 hours for cross-platform campaign data sync and analysis", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
139
+ trigger: {
140
+ type: 'schedule',
141
+ cron: '0 */4 * * *',
142
+ description: 'Every 4 hours for cross-platform campaign data sync and analysis',
143
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
144
+ },
121
145
  modelConfig: undefined,
122
146
  mcpServerTools: undefined,
123
- guardrails: [{ "name": "Marketing Analytics Agent", "identity_provider": "google", "identity_name": "marketing-bot@acme.com", "permissions": { "read:data": true, "write:data": false, "execute:code": true, "access:internet": true, "send:email": false, "deploy:production": false }, "data_handling": { "pii_detection": true, "pii_action": "redact" }, "approval_policy": { "require_manual_approval_for": ["Pausing campaigns with daily spend above $1,000", "Budget reallocation above 20% of channel spend", "Any automated bid adjustments"], "auto_approved": ["Data collection and metric normalisation", "Anomaly detection and alerting", "Report generation"] }, "token_limits": { "per_run": "50K", "per_day": "400K", "per_month": "5M" } }],
124
- evals: [{ "name": "Data Ingestion Completeness", "category": "coding", "task_count": 400 }, { "name": "Anomaly Detection Precision", "category": "reasoning", "task_count": 300 }, { "name": "ROAS Optimisation Impact", "category": "coding", "task_count": 200 }],
125
- codemode: { "enabled": true, "token_reduction": "~85%", "speedup": "~2× faster" },
126
- output: { "formats": ["Dashboard", "PDF", "Spreadsheet"], "template": "Campaign Performance Report", "storage": "/outputs/campaign-analytics/" },
127
- advanced: { "cost_limit": "$5.00 per run", "time_limit": "600 seconds", "max_iterations": 40, "validation": "All metrics must reconcile with platform-reported figures within 2%. Budget recommendations must not exceed total allocated budget.\n" },
147
+ guardrails: [
148
+ {
149
+ name: 'Marketing Analytics Agent',
150
+ identity_provider: 'google',
151
+ identity_name: 'marketing-bot@acme.com',
152
+ permissions: {
153
+ 'read:data': true,
154
+ 'write:data': false,
155
+ 'execute:code': true,
156
+ 'access:internet': true,
157
+ 'send:email': false,
158
+ 'deploy:production': false,
159
+ },
160
+ data_handling: { pii_detection: true, pii_action: 'redact' },
161
+ approval_policy: {
162
+ require_manual_approval_for: [
163
+ 'Pausing campaigns with daily spend above $1,000',
164
+ 'Budget reallocation above 20% of channel spend',
165
+ 'Any automated bid adjustments',
166
+ ],
167
+ auto_approved: [
168
+ 'Data collection and metric normalisation',
169
+ 'Anomaly detection and alerting',
170
+ 'Report generation',
171
+ ],
172
+ },
173
+ token_limits: { per_run: '50K', per_day: '400K', per_month: '5M' },
174
+ },
175
+ ],
176
+ evals: [
177
+ {
178
+ name: 'Data Ingestion Completeness',
179
+ category: 'coding',
180
+ task_count: 400,
181
+ },
182
+ {
183
+ name: 'Anomaly Detection Precision',
184
+ category: 'reasoning',
185
+ task_count: 300,
186
+ },
187
+ { name: 'ROAS Optimisation Impact', category: 'coding', task_count: 200 },
188
+ ],
189
+ codemode: { enabled: true, token_reduction: '~85%', speedup: '~2× faster' },
190
+ output: {
191
+ formats: ['Dashboard', 'PDF', 'Spreadsheet'],
192
+ template: 'Campaign Performance Report',
193
+ storage: '/outputs/campaign-analytics/',
194
+ },
195
+ advanced: {
196
+ cost_limit: '$5.00 per run',
197
+ time_limit: '600 seconds',
198
+ max_iterations: 40,
199
+ validation: 'All metrics must reconcile with platform-reported figures within 2%. Budget recommendations must not exceed total allocated budget.\n',
200
+ },
128
201
  authorizationPolicy: '',
129
- notifications: { "email": "marketing@company.com", "slack": "#campaign-analytics" },
202
+ notifications: {
203
+ email: 'marketing@company.com',
204
+ slack: '#campaign-analytics',
205
+ },
130
206
  memory: 'ephemeral',
207
+ preHooks: undefined,
208
+ postHooks: undefined,
209
+ parameters: undefined,
210
+ subagents: undefined,
131
211
  };
132
212
  export const ANALYZE_SUPPORT_TICKETS_AGENT_SPEC_0_0_1 = {
133
213
  id: 'analyze-support-tickets',
@@ -136,11 +216,21 @@ export const ANALYZE_SUPPORT_TICKETS_AGENT_SPEC_0_0_1 = {
136
216
  description: `A multi-agent team that triages incoming support tickets, categorizes by urgency and topic, identifies recurring patterns, and generates resolution recommendations with escalation paths.`,
137
217
  tags: ['analytics', 'data', 'support', 'tickets'],
138
218
  enabled: false,
139
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
140
- mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['slack:0.0.1']],
141
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
219
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
220
+ mcpServers: [
221
+ MCP_SERVER_MAP['filesystem:0.0.1'],
222
+ MCP_SERVER_MAP['slack:0.0.1'],
223
+ ],
224
+ skills: [
225
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
226
+ toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']),
227
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
228
+ ],
142
229
  tools: [],
143
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
230
+ frontendTools: [
231
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
232
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
233
+ ],
144
234
  environmentName: 'ai-agents-env',
145
235
  icon: 'issue-opened',
146
236
  emoji: '🎫',
@@ -161,17 +251,56 @@ export const ANALYZE_SUPPORT_TICKETS_AGENT_SPEC_0_0_1 = {
161
251
  goal: `Triage incoming support tickets by urgency, categorize by topic and sentiment, identify recurring patterns, and generate resolution recommendations with escalation paths for critical issues.`,
162
252
  protocol: 'vercel-ai',
163
253
  uiExtension: 'a2ui',
164
- trigger: { "type": "schedule", "cron": "0 */2 * * *", "description": "Every 2 hours", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
254
+ trigger: {
255
+ type: 'schedule',
256
+ cron: '0 */2 * * *',
257
+ description: 'Every 2 hours',
258
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
259
+ },
165
260
  modelConfig: undefined,
166
261
  mcpServerTools: undefined,
167
- guardrails: [{ "name": "Restricted Viewer", "identity_provider": "datalayer", "identity_name": "support-bot@acme.com", "permissions": { "read:data": true, "write:data": false, "execute:code": true, "access:internet": true, "send:email": false, "deploy:production": false }, "token_limits": { "per_run": "40K", "per_day": "400K", "per_month": "4M" } }],
168
- evals: [{ "name": "Triage Accuracy", "category": "reasoning", "task_count": 400 }, { "name": "Pattern Detection", "category": "coding", "task_count": 200 }],
169
- codemode: { "enabled": true, "token_reduction": "~80%", "speedup": "~1.5× faster" },
170
- output: { "formats": ["JSON", "Dashboard"], "template": "Support Ticket Analysis Report", "storage": "/outputs/support-analysis/" },
171
- advanced: { "cost_limit": "$4.00 per run", "time_limit": "300 seconds", "max_iterations": 40, "validation": "All tickets must receive a priority classification" },
262
+ guardrails: [
263
+ {
264
+ name: 'Restricted Viewer',
265
+ identity_provider: 'datalayer',
266
+ identity_name: 'support-bot@acme.com',
267
+ permissions: {
268
+ 'read:data': true,
269
+ 'write:data': false,
270
+ 'execute:code': true,
271
+ 'access:internet': true,
272
+ 'send:email': false,
273
+ 'deploy:production': false,
274
+ },
275
+ token_limits: { per_run: '40K', per_day: '400K', per_month: '4M' },
276
+ },
277
+ ],
278
+ evals: [
279
+ { name: 'Triage Accuracy', category: 'reasoning', task_count: 400 },
280
+ { name: 'Pattern Detection', category: 'coding', task_count: 200 },
281
+ ],
282
+ codemode: { enabled: true, token_reduction: '~80%', speedup: '~1.5× faster' },
283
+ output: {
284
+ formats: ['JSON', 'Dashboard'],
285
+ template: 'Support Ticket Analysis Report',
286
+ storage: '/outputs/support-analysis/',
287
+ },
288
+ advanced: {
289
+ cost_limit: '$4.00 per run',
290
+ time_limit: '300 seconds',
291
+ max_iterations: 40,
292
+ validation: 'All tickets must receive a priority classification',
293
+ },
172
294
  authorizationPolicy: '',
173
- notifications: { "email": "patricia.j@company.com", "slack": "#support-analysis" },
295
+ notifications: {
296
+ email: 'patricia.j@company.com',
297
+ slack: '#support-analysis',
298
+ },
174
299
  memory: 'ephemeral',
300
+ preHooks: undefined,
301
+ postHooks: undefined,
302
+ parameters: undefined,
303
+ subagents: undefined,
175
304
  };
176
305
  export const AUDIT_INVENTORY_LEVELS_AGENT_SPEC_0_0_1 = {
177
306
  id: 'audit-inventory-levels',
@@ -180,11 +309,20 @@ export const AUDIT_INVENTORY_LEVELS_AGENT_SPEC_0_0_1 = {
180
309
  description: `A multi-agent team that monitors inventory levels across warehouses, detects discrepancies between physical and system counts, forecasts demand by SKU, and generates automated reorder recommendations.`,
181
310
  tags: ['finance', 'automation', 'inventory', 'supply-chain'],
182
311
  enabled: false,
183
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
184
- mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['slack:0.0.1']],
185
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
312
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
313
+ mcpServers: [
314
+ MCP_SERVER_MAP['filesystem:0.0.1'],
315
+ MCP_SERVER_MAP['slack:0.0.1'],
316
+ ],
317
+ skills: [
318
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
319
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
320
+ ],
186
321
  tools: [],
187
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
322
+ frontendTools: [
323
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
324
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
325
+ ],
188
326
  environmentName: 'ai-agents-env',
189
327
  icon: 'package',
190
328
  emoji: '📦',
@@ -205,17 +343,53 @@ export const AUDIT_INVENTORY_LEVELS_AGENT_SPEC_0_0_1 = {
205
343
  goal: `Monitor inventory levels across all warehouses every 6 hours. Detect discrepancies between system and physical counts, forecast demand by SKU, generate reorder recommendations, and compile audit reports with findings.`,
206
344
  protocol: 'vercel-ai',
207
345
  uiExtension: 'a2ui',
208
- trigger: { "type": "schedule", "cron": "0 */6 * * *", "description": "Every 6 hours", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
346
+ trigger: {
347
+ type: 'schedule',
348
+ cron: '0 */6 * * *',
349
+ description: 'Every 6 hours',
350
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
351
+ },
209
352
  modelConfig: undefined,
210
353
  mcpServerTools: undefined,
211
- guardrails: [{ "name": "Google Workspace Agent", "identity_provider": "google", "identity_name": "inventory-bot@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": true, "send:email": true, "deploy:production": false }, "token_limits": { "per_run": "100K", "per_day": "800K", "per_month": "8M" } }],
212
- evals: [{ "name": "Inventory Accuracy", "category": "coding", "task_count": 500 }, { "name": "Forecast Precision", "category": "reasoning", "task_count": 300 }],
213
- codemode: { "enabled": true, "token_reduction": "~90%", "speedup": "~2× faster" },
214
- output: { "formats": ["PDF", "Spreadsheet", "Dashboard"], "template": "Inventory Audit Report", "storage": "/outputs/inventory-audit/" },
215
- advanced: { "cost_limit": "$12.00 per run", "time_limit": "900 seconds", "max_iterations": 80, "validation": "All warehouse counts must reconcile within 2% tolerance" },
354
+ guardrails: [
355
+ {
356
+ name: 'Google Workspace Agent',
357
+ identity_provider: 'google',
358
+ identity_name: 'inventory-bot@acme.com',
359
+ permissions: {
360
+ 'read:data': true,
361
+ 'write:data': true,
362
+ 'execute:code': true,
363
+ 'access:internet': true,
364
+ 'send:email': true,
365
+ 'deploy:production': false,
366
+ },
367
+ token_limits: { per_run: '100K', per_day: '800K', per_month: '8M' },
368
+ },
369
+ ],
370
+ evals: [
371
+ { name: 'Inventory Accuracy', category: 'coding', task_count: 500 },
372
+ { name: 'Forecast Precision', category: 'reasoning', task_count: 300 },
373
+ ],
374
+ codemode: { enabled: true, token_reduction: '~90%', speedup: '~2× faster' },
375
+ output: {
376
+ formats: ['PDF', 'Spreadsheet', 'Dashboard'],
377
+ template: 'Inventory Audit Report',
378
+ storage: '/outputs/inventory-audit/',
379
+ },
380
+ advanced: {
381
+ cost_limit: '$12.00 per run',
382
+ time_limit: '900 seconds',
383
+ max_iterations: 80,
384
+ validation: 'All warehouse counts must reconcile within 2% tolerance',
385
+ },
216
386
  authorizationPolicy: '',
217
- notifications: { "email": "linda.m@company.com", "slack": "#inventory-ops" },
387
+ notifications: { email: 'linda.m@company.com', slack: '#inventory-ops' },
218
388
  memory: 'ephemeral',
389
+ preHooks: undefined,
390
+ postHooks: undefined,
391
+ parameters: undefined,
392
+ subagents: undefined,
219
393
  };
220
394
  export const AUTOMATE_REGULATORY_REPORTING_AGENT_SPEC_0_0_1 = {
221
395
  id: 'automate-regulatory-reporting',
@@ -224,11 +398,20 @@ export const AUTOMATE_REGULATORY_REPORTING_AGENT_SPEC_0_0_1 = {
224
398
  description: `A multi-agent team that automates end-to-end regulatory reporting for financial institutions. Ingests data from trading systems, risk engines, and accounting platforms, reconciles positions, computes risk metrics, validates against regulatory rules (Basel III/IV, MiFID II, SOX), and generates submission-ready compliance reports with full audit trails.`,
225
399
  tags: ['finance', 'compliance', 'regulatory', 'risk', 'banking', 'audit'],
226
400
  enabled: false,
227
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
228
- mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['slack:0.0.1']],
229
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
401
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
402
+ mcpServers: [
403
+ MCP_SERVER_MAP['filesystem:0.0.1'],
404
+ MCP_SERVER_MAP['slack:0.0.1'],
405
+ ],
406
+ skills: [
407
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
408
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
409
+ ],
230
410
  tools: [],
231
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
411
+ frontendTools: [
412
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
413
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
414
+ ],
232
415
  environmentName: 'ai-agents-env',
233
416
  icon: 'shield-check',
234
417
  emoji: '🏦',
@@ -250,17 +433,74 @@ export const AUTOMATE_REGULATORY_REPORTING_AGENT_SPEC_0_0_1 = {
250
433
  goal: `Automate end-to-end regulatory reporting: ingest data from trading and accounting systems, compute risk-weighted assets and capital ratios, reconcile positions, validate against Basel III/IV, MiFID II, and SOX rules, and generate submission-ready compliance reports with full audit trails.`,
251
434
  protocol: 'vercel-ai',
252
435
  uiExtension: 'a2ui',
253
- trigger: { "type": "schedule", "cron": "0 6 3 * *", "description": "Monthly on the 3rd at 06:00 for regulatory reporting deadlines", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
436
+ trigger: {
437
+ type: 'schedule',
438
+ cron: '0 6 3 * *',
439
+ description: 'Monthly on the 3rd at 06:00 for regulatory reporting deadlines',
440
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
441
+ },
254
442
  modelConfig: undefined,
255
443
  mcpServerTools: undefined,
256
- guardrails: [{ "name": "Compliance Data Handler", "identity_provider": "datalayer", "identity_name": "compliance-bot@acme.com", "permissions": { "read:data": true, "write:data": false, "execute:code": true, "access:internet": false, "send:email": false, "deploy:production": false }, "data_scope": { "allowed_systems": ["trading-platform", "risk-engine", "accounting-ledger"], "denied_fields": ["*SSN*", "*TaxId*", "*Password*"] }, "data_handling": { "pii_detection": true, "pii_action": "redact" }, "token_limits": { "per_run": "120K", "per_day": "600K", "per_month": "6M" } }],
257
- evals: [{ "name": "Risk Metric Accuracy", "category": "coding", "task_count": 500 }, { "name": "Regulatory Rule Compliance", "category": "reasoning", "task_count": 300 }, { "name": "Reconciliation Break Detection", "category": "coding", "task_count": 200 }],
258
- codemode: { "enabled": true, "token_reduction": "~90%", "speedup": "~2× faster" },
259
- output: { "formats": ["PDF", "XBRL"], "template": "Regulatory Compliance Report", "storage": "/outputs/regulatory-reporting/" },
260
- advanced: { "cost_limit": "$15.00 per run", "time_limit": "1200 seconds", "max_iterations": 60, "validation": "All risk metrics must reconcile with source system totals within 0.01% tolerance. Capital ratios must pass Basel III/IV threshold checks.\n" },
444
+ guardrails: [
445
+ {
446
+ name: 'Compliance Data Handler',
447
+ identity_provider: 'datalayer',
448
+ identity_name: 'compliance-bot@acme.com',
449
+ permissions: {
450
+ 'read:data': true,
451
+ 'write:data': false,
452
+ 'execute:code': true,
453
+ 'access:internet': false,
454
+ 'send:email': false,
455
+ 'deploy:production': false,
456
+ },
457
+ data_scope: {
458
+ allowed_systems: [
459
+ 'trading-platform',
460
+ 'risk-engine',
461
+ 'accounting-ledger',
462
+ ],
463
+ denied_fields: ['*SSN*', '*TaxId*', '*Password*'],
464
+ },
465
+ data_handling: { pii_detection: true, pii_action: 'redact' },
466
+ token_limits: { per_run: '120K', per_day: '600K', per_month: '6M' },
467
+ },
468
+ ],
469
+ evals: [
470
+ { name: 'Risk Metric Accuracy', category: 'coding', task_count: 500 },
471
+ {
472
+ name: 'Regulatory Rule Compliance',
473
+ category: 'reasoning',
474
+ task_count: 300,
475
+ },
476
+ {
477
+ name: 'Reconciliation Break Detection',
478
+ category: 'coding',
479
+ task_count: 200,
480
+ },
481
+ ],
482
+ codemode: { enabled: true, token_reduction: '~90%', speedup: '~2× faster' },
483
+ output: {
484
+ formats: ['PDF', 'XBRL'],
485
+ template: 'Regulatory Compliance Report',
486
+ storage: '/outputs/regulatory-reporting/',
487
+ },
488
+ advanced: {
489
+ cost_limit: '$15.00 per run',
490
+ time_limit: '1200 seconds',
491
+ max_iterations: 60,
492
+ validation: 'All risk metrics must reconcile with source system totals within 0.01% tolerance. Capital ratios must pass Basel III/IV threshold checks.\n',
493
+ },
261
494
  authorizationPolicy: '',
262
- notifications: { "email": "compliance@company.com", "slack": "#regulatory-reporting" },
495
+ notifications: {
496
+ email: 'compliance@company.com',
497
+ slack: '#regulatory-reporting',
498
+ },
263
499
  memory: 'ephemeral',
500
+ preHooks: undefined,
501
+ postHooks: undefined,
502
+ parameters: undefined,
503
+ subagents: undefined,
264
504
  };
265
505
  export const CLASSIFY_ROUTE_EMAILS_AGENT_SPEC_0_0_1 = {
266
506
  id: 'classify-route-emails',
@@ -269,11 +509,17 @@ export const CLASSIFY_ROUTE_EMAILS_AGENT_SPEC_0_0_1 = {
269
509
  description: `A generic email classification and routing agent. Analyzes incoming emails to determine intent (inquiry, complaint, order, support request), assigns priority (critical, high, medium, low), and routes to the appropriate department queue. Works across any industry with email-based workflows.`,
270
510
  tags: ['email', 'classification', 'routing', 'horizontal', 'automation'],
271
511
  enabled: false,
272
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
512
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
273
513
  mcpServers: [MCP_SERVER_MAP['slack:0.0.1']],
274
- skills: [toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
514
+ skills: [
515
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
516
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
517
+ ],
275
518
  tools: [],
276
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
519
+ frontendTools: [
520
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
521
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
522
+ ],
277
523
  environmentName: 'ai-agents-env',
278
524
  icon: 'mail',
279
525
  emoji: '📬',
@@ -288,17 +534,67 @@ export const CLASSIFY_ROUTE_EMAILS_AGENT_SPEC_0_0_1 = {
288
534
  goal: `Classify incoming emails by intent (inquiry, complaint, order, support), assign priority (critical/high/medium/low), extract key entities (sender, subject, account ID, product), and route to the correct department queue. Flag urgent items for immediate human review.`,
289
535
  protocol: 'vercel-ai',
290
536
  uiExtension: 'a2ui',
291
- trigger: { "type": "event", "event": "email_received", "description": "Triggered on each incoming email via webhook", "prompt": "Handle the 'email_received' event and execute the workflow end-to-end." },
292
- modelConfig: { "temperature": 0.1, "max_tokens": 2048 },
293
- mcpServerTools: [{ "server": "Email Gateway", "tools": [{ "name": "fetch_email", "approval": "auto" }, { "name": "parse_headers", "approval": "auto" }, { "name": "extract_attachments", "approval": "auto" }] }, { "server": "Routing Engine", "tools": [{ "name": "assign_queue", "approval": "auto" }, { "name": "set_priority", "approval": "auto" }, { "name": "escalate_to_human", "approval": "manual" }] }],
294
- guardrails: [{ "name": "Default Platform User", "identity_provider": "datalayer", "identity_name": "email-router@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": false, "access:internet": true, "send:email": false, "deploy:production": false }, "token_limits": { "per_run": "10K", "per_day": "500K", "per_month": "5M" } }],
295
- evals: [{ "name": "Classification Accuracy", "category": "reasoning", "task_count": 500 }, { "name": "Priority Detection", "category": "reasoning", "task_count": 300 }, { "name": "Entity Extraction", "category": "coding", "task_count": 400 }],
537
+ trigger: {
538
+ type: 'event',
539
+ event: 'email_received',
540
+ description: 'Triggered on each incoming email via webhook',
541
+ prompt: "Handle the 'email_received' event and execute the workflow end-to-end.",
542
+ },
543
+ modelConfig: { temperature: 0.1, max_tokens: 2048 },
544
+ mcpServerTools: [
545
+ {
546
+ server: 'Email Gateway',
547
+ tools: [
548
+ { name: 'fetch_email', approval: 'auto' },
549
+ { name: 'parse_headers', approval: 'auto' },
550
+ { name: 'extract_attachments', approval: 'auto' },
551
+ ],
552
+ },
553
+ {
554
+ server: 'Routing Engine',
555
+ tools: [
556
+ { name: 'assign_queue', approval: 'auto' },
557
+ { name: 'set_priority', approval: 'auto' },
558
+ { name: 'escalate_to_human', approval: 'manual' },
559
+ ],
560
+ },
561
+ ],
562
+ guardrails: [
563
+ {
564
+ name: 'Default Platform User',
565
+ identity_provider: 'datalayer',
566
+ identity_name: 'email-router@acme.com',
567
+ permissions: {
568
+ 'read:data': true,
569
+ 'write:data': true,
570
+ 'execute:code': false,
571
+ 'access:internet': true,
572
+ 'send:email': false,
573
+ 'deploy:production': false,
574
+ },
575
+ token_limits: { per_run: '10K', per_day: '500K', per_month: '5M' },
576
+ },
577
+ ],
578
+ evals: [
579
+ { name: 'Classification Accuracy', category: 'reasoning', task_count: 500 },
580
+ { name: 'Priority Detection', category: 'reasoning', task_count: 300 },
581
+ { name: 'Entity Extraction', category: 'coding', task_count: 400 },
582
+ ],
296
583
  codemode: undefined,
297
- output: { "type": "JSON", "formats": ["JSON"], "template": "email-classification-v1", "storage": "s3://acme-email-logs/" },
584
+ output: {
585
+ type: 'JSON',
586
+ formats: ['JSON'],
587
+ template: 'email-classification-v1',
588
+ storage: 's3://acme-email-logs/',
589
+ },
298
590
  advanced: undefined,
299
591
  authorizationPolicy: undefined,
300
- notifications: { "slack": "#email-routing", "email": "ops@acme.com" },
592
+ notifications: { slack: '#email-routing', email: 'ops@acme.com' },
301
593
  memory: 'ephemeral',
594
+ preHooks: undefined,
595
+ postHooks: undefined,
596
+ parameters: undefined,
597
+ subagents: undefined,
302
598
  };
303
599
  export const COMPREHENSIVE_SALES_ANALYTICS_AGENT_SPEC_0_0_1 = {
304
600
  id: 'comprehensive-sales-analytics',
@@ -307,11 +603,21 @@ export const COMPREHENSIVE_SALES_ANALYTICS_AGENT_SPEC_0_0_1 = {
307
603
  description: `A multi-agent team that replaces a single KPI monitor with four specialized agents: a Data Collector that pulls real-time CRM metrics, an Anomaly Detector that flags statistical outliers, a Trend Analyzer that identifies patterns and forecasts, and a Report Generator that compiles executive dashboards and sends alerts. Together they deliver deeper insights, faster detection, and richer reporting than any single agent could.`,
308
604
  tags: ['sales', 'analytics', 'kpi', 'monitoring', 'horizontal'],
309
605
  enabled: false,
310
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
311
- mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['slack:0.0.1']],
312
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
606
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
607
+ mcpServers: [
608
+ MCP_SERVER_MAP['filesystem:0.0.1'],
609
+ MCP_SERVER_MAP['slack:0.0.1'],
610
+ ],
611
+ skills: [
612
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
613
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
614
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
615
+ ],
313
616
  tools: [],
314
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
617
+ frontendTools: [
618
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
619
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
620
+ ],
315
621
  environmentName: 'ai-agents-env',
316
622
  icon: 'graph',
317
623
  emoji: '📈',
@@ -329,14 +635,47 @@ export const COMPREHENSIVE_SALES_ANALYTICS_AGENT_SPEC_0_0_1 = {
329
635
  trigger: undefined,
330
636
  modelConfig: undefined,
331
637
  mcpServerTools: undefined,
332
- guardrails: [{ "name": "Sales Analytics Team", "identity_provider": "datalayer", "identity_name": "sales-analytics@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": true, "send:email": true, "deploy:production": false }, "token_limits": { "per_run": "100K", "per_day": "1M", "per_month": "10M" } }],
333
- evals: [{ "name": "KPI Accuracy", "category": "coding", "task_count": 500 }, { "name": "Anomaly Detection Precision", "category": "reasoning", "task_count": 350 }, { "name": "Trend Forecast Accuracy", "category": "reasoning", "task_count": 300 }, { "name": "Report Quality", "category": "reasoning", "task_count": 200 }],
638
+ guardrails: [
639
+ {
640
+ name: 'Sales Analytics Team',
641
+ identity_provider: 'datalayer',
642
+ identity_name: 'sales-analytics@acme.com',
643
+ permissions: {
644
+ 'read:data': true,
645
+ 'write:data': true,
646
+ 'execute:code': true,
647
+ 'access:internet': true,
648
+ 'send:email': true,
649
+ 'deploy:production': false,
650
+ },
651
+ token_limits: { per_run: '100K', per_day: '1M', per_month: '10M' },
652
+ },
653
+ ],
654
+ evals: [
655
+ { name: 'KPI Accuracy', category: 'coding', task_count: 500 },
656
+ {
657
+ name: 'Anomaly Detection Precision',
658
+ category: 'reasoning',
659
+ task_count: 350,
660
+ },
661
+ { name: 'Trend Forecast Accuracy', category: 'reasoning', task_count: 300 },
662
+ { name: 'Report Quality', category: 'reasoning', task_count: 200 },
663
+ ],
334
664
  codemode: undefined,
335
- output: { "type": "PDF", "formats": ["PDF", "Dashboard", "JSON"], "template": "executive-sales-dashboard-v2", "storage": "s3://acme-sales-reports/" },
665
+ output: {
666
+ type: 'PDF',
667
+ formats: ['PDF', 'Dashboard', 'JSON'],
668
+ template: 'executive-sales-dashboard-v2',
669
+ storage: 's3://acme-sales-reports/',
670
+ },
336
671
  advanced: undefined,
337
672
  authorizationPolicy: undefined,
338
- notifications: { "slack": "#sales-analytics", "email": "leadership@acme.com" },
673
+ notifications: { slack: '#sales-analytics', email: 'leadership@acme.com' },
339
674
  memory: 'ephemeral',
675
+ preHooks: undefined,
676
+ postHooks: undefined,
677
+ parameters: undefined,
678
+ subagents: undefined,
340
679
  };
341
680
  export const CRAWLER_AGENT_SPEC_0_0_1 = {
342
681
  id: 'crawler',
@@ -347,9 +686,15 @@ export const CRAWLER_AGENT_SPEC_0_0_1 = {
347
686
  enabled: true,
348
687
  model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
349
688
  mcpServers: [MCP_SERVER_MAP['tavily:0.0.1']],
350
- skills: [toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
689
+ skills: [
690
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
691
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
692
+ ],
351
693
  tools: [],
352
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
694
+ frontendTools: [
695
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
696
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
697
+ ],
353
698
  environmentName: 'ai-agents-env',
354
699
  icon: 'globe',
355
700
  emoji: '🌐',
@@ -386,7 +731,7 @@ export const CRAWLER_AGENT_SPEC_0_0_1 = {
386
731
  ## Token Efficiency When possible, chain multiple tool calls in a single execute_code block. This reduces output tokens by processing intermediate results in code rather than returning them. If you want to examine results, print subsets, preview (maximum 20 first characters) and/or counts instead of full data, this is really important.
387
732
  `,
388
733
  goal: undefined,
389
- protocol: 'vercel-ai',
734
+ protocol: undefined,
390
735
  uiExtension: undefined,
391
736
  trigger: undefined,
392
737
  modelConfig: undefined,
@@ -399,6 +744,10 @@ export const CRAWLER_AGENT_SPEC_0_0_1 = {
399
744
  authorizationPolicy: undefined,
400
745
  notifications: undefined,
401
746
  memory: 'ephemeral',
747
+ preHooks: undefined,
748
+ postHooks: undefined,
749
+ parameters: undefined,
750
+ subagents: undefined,
402
751
  };
403
752
  export const DATA_ACQUISITION_AGENT_SPEC_0_0_1 = {
404
753
  id: 'data-acquisition',
@@ -408,10 +757,20 @@ export const DATA_ACQUISITION_AGENT_SPEC_0_0_1 = {
408
757
  tags: ['data', 'acquisition', 'kaggle', 'filesystem'],
409
758
  enabled: true,
410
759
  model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
411
- mcpServers: [MCP_SERVER_MAP['kaggle:0.0.1'], MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['tavily:0.0.1']],
412
- skills: [toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
760
+ mcpServers: [
761
+ MCP_SERVER_MAP['kaggle:0.0.1'],
762
+ MCP_SERVER_MAP['filesystem:0.0.1'],
763
+ MCP_SERVER_MAP['tavily:0.0.1'],
764
+ ],
765
+ skills: [
766
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
767
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
768
+ ],
413
769
  tools: [],
414
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
770
+ frontendTools: [
771
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
772
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
773
+ ],
415
774
  environmentName: 'ai-agents-env',
416
775
  icon: 'database',
417
776
  emoji: '📊',
@@ -448,7 +807,7 @@ export const DATA_ACQUISITION_AGENT_SPEC_0_0_1 = {
448
807
  ## Token Efficiency When possible, chain multiple tool calls in a single execute_code block. This reduces output tokens by processing intermediate results in code rather than returning them. If you want to examine results, print subsets, preview (maximum 20 first characters) and/or counts instead of full data, this is really important.
449
808
  `,
450
809
  goal: undefined,
451
- protocol: 'vercel-ai',
810
+ protocol: undefined,
452
811
  uiExtension: undefined,
453
812
  trigger: undefined,
454
813
  modelConfig: undefined,
@@ -461,19 +820,87 @@ export const DATA_ACQUISITION_AGENT_SPEC_0_0_1 = {
461
820
  authorizationPolicy: undefined,
462
821
  notifications: undefined,
463
822
  memory: 'ephemeral',
823
+ preHooks: undefined,
824
+ postHooks: undefined,
825
+ parameters: undefined,
826
+ subagents: undefined,
827
+ };
828
+ export const DATALAYER_AGENT_SPEC_0_0_1 = {
829
+ id: 'datalayer-agent',
830
+ version: '0.0.1',
831
+ name: 'Datalayer Agent',
832
+ description: `Datalayer-focused assistant that can inspect the authenticated user profile using datalayer-skills.`,
833
+ tags: ['datalayer', 'iam', 'profile', 'identity'],
834
+ enabled: false,
835
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
836
+ mcpServers: [],
837
+ skills: [toAgentSkillSpec(SKILL_MAP['datalayer-whoami:0.0.1'])],
838
+ tools: [],
839
+ frontendTools: [
840
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
841
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
842
+ ],
843
+ environmentName: 'ai-agents-env',
844
+ icon: 'person',
845
+ emoji: '👤',
846
+ color: '#14B8A6',
847
+ suggestions: [
848
+ 'Who am I on Datalayer?',
849
+ 'Show my Datalayer profile details',
850
+ 'What roles do I currently have in Datalayer?',
851
+ ],
852
+ welcomeMessage: "Hi! I'm the Datalayer Agent. I can help you retrieve and summarize your authenticated Datalayer profile.\n",
853
+ welcomeNotebook: undefined,
854
+ welcomeDocument: undefined,
855
+ sandboxVariant: 'jupyter',
856
+ systemPrompt: `You are a Datalayer assistant with access to the datalayer-whoami skill. Use it to retrieve the authenticated user's profile when requested. If DATALAYER_API_KEY is missing, clearly ask the user to configure it.
857
+ `,
858
+ systemPromptCodemodeAddons: undefined,
859
+ goal: undefined,
860
+ protocol: undefined,
861
+ uiExtension: undefined,
862
+ trigger: undefined,
863
+ modelConfig: undefined,
864
+ mcpServerTools: undefined,
865
+ guardrails: undefined,
866
+ evals: undefined,
867
+ codemode: undefined,
868
+ output: undefined,
869
+ advanced: undefined,
870
+ authorizationPolicy: undefined,
871
+ notifications: undefined,
872
+ memory: 'ephemeral',
873
+ preHooks: { packages: ['datalayer_skills>=0.1.0'] },
874
+ postHooks: undefined,
875
+ parameters: undefined,
876
+ subagents: undefined,
464
877
  };
465
878
  export const DEMO_FULL_AGENT_SPEC_0_0_1 = {
466
879
  id: 'demo-full',
467
880
  version: '0.0.1',
468
881
  name: 'Demo with MCP, Skills, Tool Approvals...',
469
- description: `A full-featured demonstration agent showcasing MCP servers (Tavily web search), skills (GitHub, PDF, crawl, events, text summarizer, jokes), human-in-the-loop tool approval, and frontend tools (Jupyter notebooks, Lexical documents).`,
882
+ description: `A full-featured demonstration agent showcasing MCP servers (Tavily web search), skills (GitHub, PDF, crawl, events, text summarizer, jokes, datalayer whoami), human-in-the-loop tool approval, and frontend tools (Jupyter notebooks, Lexical documents).`,
470
883
  tags: ['demo', 'approval', 'human-in-the-loop', 'utility'],
471
884
  enabled: true,
472
885
  model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
473
886
  mcpServers: [MCP_SERVER_MAP['tavily:0.0.1']],
474
- skills: [toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1']), toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['text-summarizer:0.0.1']), toAgentSkillSpec(SKILL_MAP['jokes:0.0.1'])],
475
- tools: [TOOL_MAP['runtime-echo:0.0.1'], TOOL_MAP['runtime-sensitive-echo:0.0.1']],
476
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
887
+ skills: [
888
+ toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']),
889
+ toAgentSkillSpec(SKILL_MAP['datalayer-whoami:0.0.1']),
890
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
891
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
892
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
893
+ toAgentSkillSpec(SKILL_MAP['text-summarizer:0.0.1']),
894
+ toAgentSkillSpec(SKILL_MAP['jokes:0.0.1']),
895
+ ],
896
+ tools: [
897
+ TOOL_MAP['runtime-echo:0.0.1'],
898
+ TOOL_MAP['runtime-sensitive-echo:0.0.1'],
899
+ ],
900
+ frontendTools: [
901
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
902
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
903
+ ],
477
904
  environmentName: 'ai-agents-env',
478
905
  icon: 'shield',
479
906
  emoji: '🛡️',
@@ -482,21 +909,272 @@ export const DEMO_FULL_AGENT_SPEC_0_0_1 = {
482
909
  'list your tools',
483
910
  'Search the web for the latest news on AI agents using Tavily.',
484
911
  'List my public GitHub repositories and summarize the most active ones.',
485
- 'Echo with text \'hello\' and reason \'audit\', then share the result.',
486
- 'Echo \'hello world\' and share the result in a short sentence.',
487
- 'Call the runtime_sensitive_echo tool with text \'hello\' and reason \'audit\', then reply with the tool result.',
488
- 'Call the runtime_echo tool with text \'hello world\', then reply with the tool result.',
912
+ 'Who am I on Datalayer? Summarize my profile.',
913
+ "Echo with text 'hello' and reason 'audit', then share the result.",
914
+ "Echo 'hello world' and share the result in a short sentence.",
915
+ "Call the runtime_sensitive_echo tool with text 'hello' and reason 'audit', then reply with the tool result.",
916
+ "Call the runtime_echo tool with text 'hello world', then reply with the tool result.",
489
917
  'Tell me a joke using your skills.',
490
918
  ],
491
- welcomeMessage: "Hi! I'm the Tool Approval Demo agent. I have two echo tools — one runs immediately, the other requires your approval before executing. I can also search the web with Tavily and tell jokes using my skills.\n",
919
+ welcomeMessage: "Hi! I'm the Tool Approval Demo agent. I have two echo tools — one runs immediately, the other requires your approval before executing. I can also search the web with Tavily, tell jokes, and retrieve your Datalayer profile.\n",
492
920
  welcomeNotebook: undefined,
493
921
  welcomeDocument: undefined,
494
922
  sandboxVariant: 'jupyter',
495
923
  systemPrompt: `You are a helpful assistant demonstrating the tool approval workflow. You have access to two runtime tools: - runtime_echo: echoes text back immediately, no approval required. - runtime_sensitive_echo: echoes text with a reason, but requires human approval before executing. You also have access to the Tavily MCP server for web search. When asked to list your tools, briefly describe each one and ask the user which to run. IMPORTANT RUNTIME RULE: After every tool call, you MUST produce a final plain-text response summarizing the tool result. Never end your turn with only a tool call. If the user asks for "tool call only" or says "do not write Python code", still run the tool and then provide a short natural-language result message. The final assistant output must be text (string), not only tool calls. Do not call list_skills, load_skill, read_skill_resource, or run_skill_script.
924
+ `,
925
+ systemPromptCodemodeAddons: undefined,
926
+ goal: undefined,
927
+ protocol: undefined,
928
+ uiExtension: undefined,
929
+ trigger: undefined,
930
+ modelConfig: undefined,
931
+ mcpServerTools: undefined,
932
+ guardrails: undefined,
933
+ evals: undefined,
934
+ codemode: undefined,
935
+ output: undefined,
936
+ advanced: undefined,
937
+ authorizationPolicy: undefined,
938
+ notifications: undefined,
939
+ memory: 'ephemeral',
940
+ preHooks: { packages: ['datalayer_skills>=0.1.0'] },
941
+ postHooks: undefined,
942
+ parameters: undefined,
943
+ subagents: undefined,
944
+ };
945
+ export const DEMO_GUARDRAILS_AGENT_SPEC_0_0_1 = {
946
+ id: 'demo-guardrails',
947
+ version: '0.0.1',
948
+ name: 'Demo Guardrails (Cost + Approval)',
949
+ description: `Demonstration agent for guardrails with a strict per-run cost budget and human-in-the-loop approval on sensitive runtime tools.`,
950
+ tags: ['demo', 'guardrails', 'cost', 'approval'],
951
+ enabled: true,
952
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
953
+ mcpServers: [],
954
+ skills: [
955
+ toAgentSkillSpec(SKILL_MAP['jokes:0.0.1']),
956
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
957
+ ],
958
+ tools: [
959
+ TOOL_MAP['runtime-echo:0.0.1'],
960
+ TOOL_MAP['runtime-sensitive-echo:0.0.1'],
961
+ ],
962
+ frontendTools: [
963
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
964
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
965
+ ],
966
+ environmentName: 'ai-agents-env',
967
+ icon: 'shield-check',
968
+ emoji: '🛡️',
969
+ color: '#1F883D',
970
+ suggestions: [
971
+ "Call runtime_echo with text 'hello world' and summarize the result.",
972
+ "Call runtime_sensitive_echo with text 'audit me' and reason 'governance check'.",
973
+ 'Tell me a joke and keep the answer under 2 sentences.',
974
+ ],
975
+ welcomeMessage: 'Hi! I am the Guardrails demo agent. I enforce a strict per-run cost budget and require manual approval for sensitive tool calls.\n',
976
+ welcomeNotebook: undefined,
977
+ welcomeDocument: undefined,
978
+ sandboxVariant: 'jupyter',
979
+ systemPrompt: 'You are a guardrails demonstration assistant. You can call runtime_echo directly. You must request human approval before running runtime_sensitive_echo. Always provide a concise plain-text summary after each tool execution.\n',
980
+ systemPromptCodemodeAddons: undefined,
981
+ goal: undefined,
982
+ protocol: undefined,
983
+ uiExtension: undefined,
984
+ trigger: undefined,
985
+ modelConfig: undefined,
986
+ mcpServerTools: undefined,
987
+ guardrails: [
988
+ {
989
+ name: 'Guardrails Demo User',
990
+ identity_provider: 'datalayer',
991
+ identity_name: 'guardrails-demo@acme.com',
992
+ permissions: {
993
+ 'read:data': true,
994
+ 'write:data': false,
995
+ 'execute:code': true,
996
+ 'access:internet': false,
997
+ 'send:email': false,
998
+ 'deploy:production': false,
999
+ },
1000
+ token_limits: {
1001
+ per_run: '25K',
1002
+ per_day: '150K',
1003
+ per_month: '1M',
1004
+ },
1005
+ cost_budget: {
1006
+ per_run_usd: 0.01,
1007
+ on_budget_exceeded: 'stop',
1008
+ },
1009
+ tool_approval: {
1010
+ tools: ['runtime[-_]sensitive[-_]echo'],
1011
+ timeout: '0h5m0s',
1012
+ },
1013
+ },
1014
+ ],
1015
+ evals: undefined,
1016
+ codemode: undefined,
1017
+ output: undefined,
1018
+ advanced: undefined,
1019
+ authorizationPolicy: undefined,
1020
+ notifications: undefined,
1021
+ memory: 'ephemeral',
1022
+ preHooks: undefined,
1023
+ postHooks: undefined,
1024
+ parameters: undefined,
1025
+ subagents: undefined,
1026
+ };
1027
+ export const DEMO_HOOKS_AGENT_SPEC_0_0_1 = {
1028
+ id: 'demo-hooks',
1029
+ version: '0.0.1',
1030
+ name: 'Demo Hooks Agent',
1031
+ description: `Demonstrates pre-hooks and post-hooks executed in the sandbox lifecycle.`,
1032
+ tags: ['demo', 'hooks', 'lifecycle'],
1033
+ enabled: true,
1034
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1035
+ mcpServers: [],
1036
+ skills: [],
1037
+ tools: [TOOL_MAP['runtime-echo:0.0.1']],
1038
+ frontendTools: [],
1039
+ environmentName: 'ai-agents-env',
1040
+ icon: 'zap',
1041
+ emoji: '🪝',
1042
+ color: '#0E7490',
1043
+ suggestions: [
1044
+ 'Read the pre-hook marker file at /tmp/agent_runtimes_pre_hook_demo.txt using execute_code.',
1045
+ 'Print the hook_ran_at and hook_name variables that the pre-hook set in the sandbox.',
1046
+ "Run execute_code to verify that the 'rich' package was installed by the pre-hook.",
1047
+ 'Show me all variables that the pre-hook defined in the sandbox namespace.',
1048
+ ],
1049
+ welcomeMessage: "I ran a pre-hook before starting up. It installed the 'rich' package, wrote a marker file, and set several sandbox variables (hook_name, hook_ran_at, hook_env). Ask me to read the file or inspect those variables.\n",
1050
+ welcomeNotebook: undefined,
1051
+ welcomeDocument: undefined,
1052
+ sandboxVariant: 'eval',
1053
+ systemPrompt: `You are a demo assistant for lifecycle hooks.
1054
+ The sandbox pre-hook ran before this agent started and did three things:
1055
+ 1. Installed the Python package 'rich' (pip install). 2. Wrote a UTF-8 marker file to /tmp/agent_runtimes_pre_hook_demo.txt
1056
+ with the content: "pre-hook executed for demo-hooks at <timestamp>".
1057
+ 3. Defined these Python variables in the sandbox namespace:
1058
+ - hook_name (str) - "demo-hooks:pre"
1059
+ - hook_ran_at (str) - ISO-8601 timestamp of when the pre-hook ran
1060
+ - hook_env (dict) - subset of os.environ captured at hook time
1061
+
1062
+ A post-hook is also configured — it will write /tmp/agent_runtimes_post_hook_demo.txt when the agent shuts down.
1063
+ When the user asks about hooks, use execute_code to show concrete evidence: read the marker file, print the variables, or import rich to confirm it was installed.
1064
+ `,
1065
+ systemPromptCodemodeAddons: undefined,
1066
+ goal: undefined,
1067
+ protocol: undefined,
1068
+ uiExtension: undefined,
1069
+ trigger: undefined,
1070
+ modelConfig: undefined,
1071
+ mcpServerTools: undefined,
1072
+ guardrails: undefined,
1073
+ evals: undefined,
1074
+ codemode: undefined,
1075
+ output: undefined,
1076
+ advanced: undefined,
1077
+ authorizationPolicy: undefined,
1078
+ notifications: undefined,
1079
+ memory: 'ephemeral',
1080
+ preHooks: {
1081
+ packages: ['rich'],
1082
+ sandbox: [
1083
+ 'import datetime\nimport os\nfrom pathlib import Path\n\nhook_name = "demo-hooks:pre"\nhook_ran_at = datetime.datetime.now().isoformat()\nhook_env = {\n k: os.environ[k]\n for k in ("PATH", "HOME", "DATALAYER_CODE_SANDBOX_VARIANT")\n if k in os.environ\n}\n\nPath(\'/tmp/agent_runtimes_pre_hook_demo.txt\').write_text(\n f\'pre-hook executed for demo-hooks at {hook_ran_at}\\n\',\n encoding=\'utf-8\',\n)\nprint(f"[demo-hooks] pre-hook done: hook_ran_at={hook_ran_at!r}")\n',
1084
+ ],
1085
+ },
1086
+ postHooks: {
1087
+ sandbox: [
1088
+ "import datetime\nfrom pathlib import Path\n\npost_ran_at = datetime.datetime.now().isoformat()\nPath('/tmp/agent_runtimes_post_hook_demo.txt').write_text(\n f'post-hook executed for demo-hooks at {post_ran_at}\\n',\n encoding='utf-8',\n)\nprint(f\"[demo-hooks] post-hook done: post_ran_at={post_ran_at!r}\")\n",
1089
+ ],
1090
+ },
1091
+ parameters: undefined,
1092
+ subagents: undefined,
1093
+ };
1094
+ export const DEMO_MCP_AGENT_SPEC_0_0_1 = {
1095
+ id: 'demo-mcp',
1096
+ version: '0.0.1',
1097
+ name: 'Demo MCP',
1098
+ description: `Demo agent using MCP servers directly (without codemode conversion).`,
1099
+ tags: ['demo', 'mcp', 'tavily'],
1100
+ enabled: true,
1101
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1102
+ mcpServers: [MCP_SERVER_MAP['tavily:0.0.1']],
1103
+ skills: [toAgentSkillSpec(SKILL_MAP['jokes:0.0.1'])],
1104
+ tools: [],
1105
+ frontendTools: [
1106
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1107
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1108
+ ],
1109
+ environmentName: 'ai-agents-env',
1110
+ icon: 'search',
1111
+ emoji: '🔍',
1112
+ color: '#0969DA',
1113
+ suggestions: [
1114
+ 'Search the web for recent updates about MCP and summarize key findings',
1115
+ ],
1116
+ welcomeMessage: "Hi! I'm the MCP demo agent. I use MCP tools directly without codemode.\n",
1117
+ welcomeNotebook: undefined,
1118
+ welcomeDocument: undefined,
1119
+ sandboxVariant: undefined,
1120
+ systemPrompt: `You are a helpful assistant with access to MCP tools. Use Tavily MCP tools to retrieve web information when needed. Do not claim codemode capabilities.
496
1121
  `,
497
1122
  systemPromptCodemodeAddons: undefined,
498
1123
  goal: undefined,
499
1124
  protocol: 'vercel-ai',
1125
+ uiExtension: 'a2ui',
1126
+ trigger: undefined,
1127
+ modelConfig: undefined,
1128
+ mcpServerTools: undefined,
1129
+ guardrails: undefined,
1130
+ evals: undefined,
1131
+ codemode: { enabled: false },
1132
+ output: undefined,
1133
+ advanced: undefined,
1134
+ authorizationPolicy: undefined,
1135
+ notifications: undefined,
1136
+ memory: 'ephemeral',
1137
+ preHooks: undefined,
1138
+ postHooks: undefined,
1139
+ parameters: undefined,
1140
+ subagents: undefined,
1141
+ };
1142
+ export const DEMO_MONITORING_AGENT_SPEC_0_0_1 = {
1143
+ id: 'demo-monitoring',
1144
+ version: '0.0.1',
1145
+ name: 'Demo Monitoring Agent',
1146
+ description: `Monitoring-focused demo agent with Tavily MCP tools and the datalayer-skills whoami capability for profile-aware assistance.`,
1147
+ tags: ['demo', 'monitoring', 'mcp', 'tavily', 'datalayer-skills'],
1148
+ enabled: true,
1149
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1150
+ mcpServers: [MCP_SERVER_MAP['tavily:0.0.1']],
1151
+ skills: [
1152
+ toAgentSkillSpec(SKILL_MAP['datalayer-whoami:0.0.1']),
1153
+ toAgentSkillSpec(SKILL_MAP['jokes:0.0.1']),
1154
+ ],
1155
+ tools: [],
1156
+ frontendTools: [
1157
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1158
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1159
+ ],
1160
+ environmentName: 'ai-agents-env',
1161
+ icon: 'graph',
1162
+ emoji: '📈',
1163
+ color: '#0EA5E9',
1164
+ suggestions: [
1165
+ 'Search the web for recent AI observability updates using Tavily and summarize the highlights.',
1166
+ 'Who am I on Datalayer and what can I monitor in this session?',
1167
+ 'Explain my last turn token and cost behavior in a concise summary.',
1168
+ ],
1169
+ welcomeMessage: "Hi! I'm the Monitoring Demo agent. I can use Tavily for web context and datalayer-skills to inspect your authenticated Datalayer identity.\n",
1170
+ welcomeNotebook: undefined,
1171
+ welcomeDocument: undefined,
1172
+ sandboxVariant: 'jupyter',
1173
+ systemPrompt: `You are a monitoring-oriented assistant. Use Tavily MCP tools for current web information when useful. Use the datalayer-whoami skill when the user asks about identity, profile, or account context. Keep explanations concise and practical.
1174
+ `,
1175
+ systemPromptCodemodeAddons: undefined,
1176
+ goal: undefined,
1177
+ protocol: undefined,
500
1178
  uiExtension: undefined,
501
1179
  trigger: undefined,
502
1180
  modelConfig: undefined,
@@ -509,6 +1187,10 @@ export const DEMO_FULL_AGENT_SPEC_0_0_1 = {
509
1187
  authorizationPolicy: undefined,
510
1188
  notifications: undefined,
511
1189
  memory: 'ephemeral',
1190
+ preHooks: { packages: ['datalayer_skills>=0.1.0'] },
1191
+ postHooks: undefined,
1192
+ parameters: undefined,
1193
+ subagents: undefined,
512
1194
  };
513
1195
  export const DEMO_ONE_TRIGGER_APPROVAL_AGENT_SPEC_0_0_1 = {
514
1196
  id: 'demo-one-trigger-approval',
@@ -530,23 +1212,31 @@ export const DEMO_ONE_TRIGGER_APPROVAL_AGENT_SPEC_0_0_1 = {
530
1212
  welcomeMessage: undefined,
531
1213
  welcomeNotebook: undefined,
532
1214
  welcomeDocument: undefined,
533
- sandboxVariant: 'jupyter',
1215
+ sandboxVariant: undefined,
534
1216
  systemPrompt: undefined,
535
1217
  systemPromptCodemodeAddons: undefined,
536
- goal: `Call runtime_sensitive_echo exactly once with message='Tool approval demo executed' and reason='audit'. Do not call any other tool.`,
537
- protocol: 'vercel-ai',
1218
+ goal: `Use the runtime_sensitive_echo tool once.`,
1219
+ protocol: undefined,
538
1220
  uiExtension: undefined,
539
- trigger: { "type": "once", "description": "Run once with approval and terminate", "prompt": "Call runtime_sensitive_echo exactly once with message='Tool approval demo executed' and reason='audit'. Do not call any other tool." },
1221
+ trigger: {
1222
+ type: 'once',
1223
+ description: 'Run once with approval and terminate',
1224
+ prompt: 'Use the runtime_sensitive_echo tool once.',
1225
+ },
540
1226
  modelConfig: undefined,
541
1227
  mcpServerTools: undefined,
542
1228
  guardrails: undefined,
543
1229
  evals: undefined,
544
- codemode: undefined,
1230
+ codemode: { enabled: false },
545
1231
  output: undefined,
546
1232
  advanced: undefined,
547
1233
  authorizationPolicy: undefined,
548
1234
  notifications: undefined,
549
1235
  memory: 'ephemeral',
1236
+ preHooks: undefined,
1237
+ postHooks: undefined,
1238
+ parameters: undefined,
1239
+ subagents: undefined,
550
1240
  };
551
1241
  export const DEMO_ONE_TRIGGER_AGENT_SPEC_0_0_1 = {
552
1242
  id: 'demo-one-trigger',
@@ -557,7 +1247,10 @@ export const DEMO_ONE_TRIGGER_AGENT_SPEC_0_0_1 = {
557
1247
  enabled: true,
558
1248
  model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
559
1249
  mcpServers: [],
560
- skills: [toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
1250
+ skills: [
1251
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
1252
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
1253
+ ],
561
1254
  tools: [TOOL_MAP['runtime-echo:0.0.1']],
562
1255
  frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1']],
563
1256
  environmentName: 'ai-agents-env',
@@ -572,9 +1265,13 @@ export const DEMO_ONE_TRIGGER_AGENT_SPEC_0_0_1 = {
572
1265
  systemPrompt: undefined,
573
1266
  systemPromptCodemodeAddons: undefined,
574
1267
  goal: `Run a one-shot task: list the user's top 3 public and top 3 private GitHub repositories, ranked by recent activity, and provide a brief summary of each.`,
575
- protocol: 'vercel-ai',
1268
+ protocol: undefined,
576
1269
  uiExtension: undefined,
577
- trigger: { "type": "once", "description": "Run once and terminate", "prompt": "List the user's top 3 public and top 3 private GitHub repositories, ranked by recent activity, and provide a brief summary of each." },
1270
+ trigger: {
1271
+ type: 'once',
1272
+ description: 'Run once and terminate',
1273
+ prompt: "List the user's top 3 public and top 3 private GitHub repositories, ranked by recent activity, and provide a brief summary of each.",
1274
+ },
578
1275
  modelConfig: undefined,
579
1276
  mcpServerTools: undefined,
580
1277
  guardrails: undefined,
@@ -585,6 +1282,142 @@ export const DEMO_ONE_TRIGGER_AGENT_SPEC_0_0_1 = {
585
1282
  authorizationPolicy: undefined,
586
1283
  notifications: undefined,
587
1284
  memory: 'ephemeral',
1285
+ preHooks: undefined,
1286
+ postHooks: undefined,
1287
+ parameters: undefined,
1288
+ subagents: undefined,
1289
+ };
1290
+ export const DEMO_OUTPUTS_AGENT_SPEC_0_0_1 = {
1291
+ id: 'demo-outputs',
1292
+ version: '0.0.1',
1293
+ name: 'Outputs Demo Agent',
1294
+ description: `Demonstrates rich output rendering. Ask it to produce a Markdown table, a JSON payload, an ASCII/ECharts chart spec, or a downloadable file — the Outputs panel will auto-switch to the matching tab.`,
1295
+ tags: ['demo', 'outputs', 'rendering'],
1296
+ enabled: true,
1297
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1298
+ mcpServers: [],
1299
+ skills: [toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
1300
+ tools: [TOOL_MAP['runtime-echo:0.0.1']],
1301
+ frontendTools: [
1302
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1303
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1304
+ ],
1305
+ environmentName: 'ai-agents-env',
1306
+ icon: 'graph',
1307
+ emoji: '📤',
1308
+ color: '#8B5CF6',
1309
+ suggestions: [
1310
+ 'Generate a Markdown table of the top 5 US cities by population, with columns City, State, Population.',
1311
+ 'Return a JSON object describing a fictitious product catalog with 3 items (id, name, price, tags).',
1312
+ 'Produce a bar chart ECharts spec (JSON) showing monthly sales for Jan–Jun.',
1313
+ 'Create a downloadable CSV file with sample sales data for the last 7 days and output it inside a ```csv fenced block named sales.csv.',
1314
+ ],
1315
+ welcomeMessage: 'Hi! I render rich outputs. Try one of the suggestions to produce a Markdown table, JSON, a chart spec, or a downloadable file — the side panel will switch to the matching tab automatically.\n',
1316
+ welcomeNotebook: undefined,
1317
+ welcomeDocument: undefined,
1318
+ sandboxVariant: 'jupyter',
1319
+ systemPrompt: `You are an Outputs Demo Agent. Your job is to showcase rich output rendering. For every user request, pick exactly ONE of the following output formats and produce the content inside a single fenced code block so the UI can detect and render it:
1320
+
1321
+ 1. TABLE — a GitHub-flavored Markdown table (pipe syntax). No fences.
1322
+ 2. JSON — a valid JSON object inside a \`\`\`json fenced block.
1323
+ 3. CHART — an ECharts \`option\` JSON spec inside a \`\`\`json fenced
1324
+ block whose first line is \`// chart\`. Must include
1325
+ \`xAxis\`, \`yAxis\`, and \`series\`.
1326
+ 4. FILE — a downloadable text artifact inside a fenced block whose
1327
+ info string is the file extension (e.g. \`\`\`csv,
1328
+ \`\`\`md, \`\`\`txt). Start the block with a comment line
1329
+ \`# filename: <name.ext>\` so the UI can label the file.
1330
+
1331
+ Always add a 1–2 sentence natural-language preamble before the fenced block (or before the Markdown table). Never mix two output types in a single response. Keep the payloads small (≤ 30 rows / ≤ 2 KB).
1332
+ `,
1333
+ systemPromptCodemodeAddons: undefined,
1334
+ goal: undefined,
1335
+ protocol: undefined,
1336
+ uiExtension: undefined,
1337
+ trigger: undefined,
1338
+ modelConfig: undefined,
1339
+ mcpServerTools: undefined,
1340
+ guardrails: undefined,
1341
+ evals: undefined,
1342
+ codemode: undefined,
1343
+ output: undefined,
1344
+ advanced: undefined,
1345
+ authorizationPolicy: undefined,
1346
+ notifications: undefined,
1347
+ memory: 'ephemeral',
1348
+ preHooks: undefined,
1349
+ postHooks: undefined,
1350
+ parameters: undefined,
1351
+ subagents: undefined,
1352
+ };
1353
+ export const DEMO_PARAMETERS_AGENT_SPEC_0_0_1 = {
1354
+ id: 'demo-parameters',
1355
+ version: '0.0.1',
1356
+ name: 'Demo Parameters Agent',
1357
+ description: `Demonstrates launch-time parameterization with JSON schema validation.`,
1358
+ tags: ['demo', 'parameters', 'schema'],
1359
+ enabled: true,
1360
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1361
+ mcpServers: [],
1362
+ skills: [],
1363
+ tools: [TOOL_MAP['runtime-echo:0.0.1']],
1364
+ frontendTools: [],
1365
+ environmentName: 'ai-agents-env',
1366
+ icon: 'sliders',
1367
+ emoji: '🎛️',
1368
+ color: '#0F766E',
1369
+ suggestions: [
1370
+ 'Use execute_code to print(demo_params) from the sandbox, then explain the value.',
1371
+ "Use execute_code to print('demo_params =', demo_params).",
1372
+ ],
1373
+ welcomeMessage: 'This runtime was launched for project {{project}} and role {{role}}.\n',
1374
+ welcomeNotebook: undefined,
1375
+ welcomeDocument: undefined,
1376
+ sandboxVariant: 'jupyter',
1377
+ systemPrompt: `You are an assistant dedicated to {{project}}. Assume the user is a {{role}} and answer in a {{tone}} style. A sandbox pre-hook set a Python variable named demo_params with value {{demo_params}}.
1378
+ `,
1379
+ systemPromptCodemodeAddons: undefined,
1380
+ goal: undefined,
1381
+ protocol: undefined,
1382
+ uiExtension: undefined,
1383
+ trigger: undefined,
1384
+ modelConfig: undefined,
1385
+ mcpServerTools: undefined,
1386
+ guardrails: undefined,
1387
+ evals: undefined,
1388
+ codemode: undefined,
1389
+ output: undefined,
1390
+ advanced: undefined,
1391
+ authorizationPolicy: undefined,
1392
+ notifications: undefined,
1393
+ memory: 'ephemeral',
1394
+ preHooks: {
1395
+ sandbox: [
1396
+ 'demo_params = """{{demo_params}}"""\nprint(f"[demo-parameters] demo_params initialized: {demo_params!r}")\n',
1397
+ ],
1398
+ },
1399
+ postHooks: undefined,
1400
+ parameters: {
1401
+ type: 'object',
1402
+ properties: {
1403
+ demo_params: { type: 'string', title: 'Demo Params', default: 'hello' },
1404
+ project: { type: 'string', title: 'Project', default: 'Orbit' },
1405
+ role: {
1406
+ type: 'string',
1407
+ title: 'Role',
1408
+ enum: ['product analyst', 'engineering lead', 'support specialist'],
1409
+ default: 'product analyst',
1410
+ },
1411
+ tone: {
1412
+ type: 'string',
1413
+ title: 'Tone',
1414
+ enum: ['concise', 'detailed'],
1415
+ default: 'concise',
1416
+ },
1417
+ },
1418
+ required: ['project'],
1419
+ },
1420
+ subagents: undefined,
588
1421
  };
589
1422
  export const DEMO_SIMPLE_AGENT_SPEC_0_0_1 = {
590
1423
  id: 'demo-simple',
@@ -597,7 +1430,10 @@ export const DEMO_SIMPLE_AGENT_SPEC_0_0_1 = {
597
1430
  mcpServers: [],
598
1431
  skills: [toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
599
1432
  tools: [TOOL_MAP['runtime-echo:0.0.1']],
600
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
1433
+ frontendTools: [
1434
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1435
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1436
+ ],
601
1437
  environmentName: 'ai-agents-env',
602
1438
  icon: 'agent',
603
1439
  emoji: '🤖',
@@ -616,7 +1452,7 @@ export const DEMO_SIMPLE_AGENT_SPEC_0_0_1 = {
616
1452
  `,
617
1453
  systemPromptCodemodeAddons: undefined,
618
1454
  goal: undefined,
619
- protocol: 'vercel-ai',
1455
+ protocol: undefined,
620
1456
  uiExtension: undefined,
621
1457
  trigger: undefined,
622
1458
  modelConfig: undefined,
@@ -629,19 +1465,208 @@ export const DEMO_SIMPLE_AGENT_SPEC_0_0_1 = {
629
1465
  authorizationPolicy: undefined,
630
1466
  notifications: undefined,
631
1467
  memory: 'ephemeral',
1468
+ preHooks: undefined,
1469
+ postHooks: undefined,
1470
+ parameters: undefined,
1471
+ subagents: undefined,
1472
+ };
1473
+ export const DEMO_SUBAGENTS_AGENT_SPEC_0_0_1 = {
1474
+ id: 'demo-subagents',
1475
+ version: '0.0.1',
1476
+ name: 'Subagents Demo',
1477
+ description: `A demonstration agent that delegates tasks to specialised subagents. It has a researcher subagent for gathering information and a writer subagent for composing clear, structured responses.`,
1478
+ tags: ['demo', 'subagents', 'multi-agent', 'delegation'],
1479
+ enabled: true,
1480
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1481
+ mcpServers: [],
1482
+ skills: [toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
1483
+ tools: [],
1484
+ frontendTools: [
1485
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1486
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1487
+ ],
1488
+ environmentName: 'ai-agents-env',
1489
+ icon: 'people',
1490
+ emoji: '👥',
1491
+ color: '#8B5CF6',
1492
+ suggestions: [
1493
+ 'Research the pros and cons of Python async patterns and write a summary.',
1494
+ 'Find recent advances in LLM fine-tuning and create a brief report.',
1495
+ 'Investigate best practices for REST API design and draft a style guide.',
1496
+ 'Analyze the current state of WebAssembly and produce an executive summary.',
1497
+ ],
1498
+ welcomeMessage: "Hi! I'm the Subagents Demo agent. I coordinate a team of specialised helpers: a **Researcher** who gathers information and a **Writer** who turns findings into polished prose. Ask me anything and I'll delegate to the right expert!\n",
1499
+ welcomeNotebook: undefined,
1500
+ welcomeDocument: undefined,
1501
+ sandboxVariant: 'jupyter',
1502
+ systemPrompt: `You are a helpful orchestrator agent. You have access to specialised subagents that you can delegate tasks to. Use the 'task' tool to assign work: - Use the 'researcher' subagent for gathering facts, searching for information, and analysis. - Use the 'writer' subagent for composing text, formatting documents, and editing prose. You can run tasks synchronously (wait for result) or asynchronously (fire and forget, check later). Always summarise the delegated results for the user in a clear, helpful way.
1503
+ `,
1504
+ systemPromptCodemodeAddons: undefined,
1505
+ goal: undefined,
1506
+ protocol: undefined,
1507
+ uiExtension: undefined,
1508
+ trigger: undefined,
1509
+ modelConfig: undefined,
1510
+ mcpServerTools: undefined,
1511
+ guardrails: undefined,
1512
+ evals: undefined,
1513
+ codemode: undefined,
1514
+ output: undefined,
1515
+ advanced: undefined,
1516
+ authorizationPolicy: undefined,
1517
+ notifications: undefined,
1518
+ memory: 'ephemeral',
1519
+ preHooks: undefined,
1520
+ postHooks: undefined,
1521
+ parameters: undefined,
1522
+ subagents: {
1523
+ defaultModel: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1524
+ includeGeneralPurpose: true,
1525
+ maxNestingDepth: 0,
1526
+ subagents: [
1527
+ {
1528
+ name: 'researcher',
1529
+ description: 'Researches topics, gathers facts, and provides detailed analysis',
1530
+ instructions: 'You are a thorough research assistant. When given a topic: 1. Break it down into key questions 2. Provide well-structured findings with evidence 3. Cite sources or reasoning for each claim 4. Highlight areas of uncertainty or debate Format your response with clear sections and bullet points.\n',
1531
+ preferredMode: 'sync',
1532
+ typicalComplexity: 'moderate',
1533
+ canAskQuestions: true,
1534
+ maxQuestions: 3,
1535
+ },
1536
+ {
1537
+ name: 'writer',
1538
+ description: 'Writes clear, structured content based on research or instructions',
1539
+ instructions: 'You are a skilled technical writer. When given content to write: 1. Organise information into a logical structure 2. Use clear, concise language appropriate for the audience 3. Include headings, bullet points, and formatting for readability 4. Maintain a professional yet approachable tone Always produce complete, publication-ready text.\n',
1540
+ preferredMode: 'sync',
1541
+ typicalComplexity: 'moderate',
1542
+ canAskQuestions: false,
1543
+ },
1544
+ ],
1545
+ },
1546
+ };
1547
+ export const DEMO_TAVILY_CODEMODE_AGENT_SPEC_0_0_1 = {
1548
+ id: 'demo-tavily-codemode',
1549
+ version: '0.0.1',
1550
+ name: 'Demo Tavily MCP (Codemode)',
1551
+ description: `Demo agent using the Tavily MCP server with codemode conversion enabled.`,
1552
+ tags: ['demo', 'mcp', 'tavily', 'codemode'],
1553
+ enabled: true,
1554
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1555
+ mcpServers: [MCP_SERVER_MAP['tavily:0.0.1']],
1556
+ skills: [],
1557
+ tools: [],
1558
+ frontendTools: [
1559
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1560
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1561
+ ],
1562
+ environmentName: 'ai-agents-env',
1563
+ icon: 'code',
1564
+ emoji: '⚙️',
1565
+ color: '#8250DF',
1566
+ suggestions: [
1567
+ 'Extract information from the https://datalayer.ai website and use your sandbox to create a variable "about_datalayer" with that information',
1568
+ ],
1569
+ welcomeMessage: "Hi! I'm the Tavily MCP demo agent with codemode enabled. I can use programmatic MCP-converted tools and use the sandbox for follow-up processing.\n",
1570
+ welcomeNotebook: undefined,
1571
+ welcomeDocument: undefined,
1572
+ sandboxVariant: 'jupyter',
1573
+ systemPrompt: `You are a helpful assistant with access to Tavily web search tools converted to programmatic codemode tools. You MUST use the available Tavily tools (tavily_search, tavily_extract) to retrieve information from websites. NEVER try to use Python requests, urllib, or selenium to fetch web pages — always use your Tavily tools. After retrieving information with Tavily, use the sandbox (execute_code) to store results in variables.
1574
+ `,
1575
+ systemPromptCodemodeAddons: undefined,
1576
+ goal: undefined,
1577
+ protocol: 'vercel-ai',
1578
+ uiExtension: 'a2ui',
1579
+ trigger: undefined,
1580
+ modelConfig: undefined,
1581
+ mcpServerTools: undefined,
1582
+ guardrails: undefined,
1583
+ evals: undefined,
1584
+ codemode: { enabled: true, token_reduction: '~90%', speedup: '~2x faster' },
1585
+ output: undefined,
1586
+ advanced: undefined,
1587
+ authorizationPolicy: undefined,
1588
+ notifications: undefined,
1589
+ memory: 'ephemeral',
1590
+ preHooks: undefined,
1591
+ postHooks: undefined,
1592
+ parameters: undefined,
1593
+ subagents: undefined,
1594
+ };
1595
+ export const DEMO_TAVILY_NO_CODEMODE_AGENT_SPEC_0_0_1 = {
1596
+ id: 'demo-tavily-no-codemode',
1597
+ version: '0.0.1',
1598
+ name: 'Demo Tavily MCP (No Codemode)',
1599
+ description: `Demo agent using the Tavily MCP server directly without codemode conversion.`,
1600
+ tags: ['demo', 'mcp', 'tavily', 'codemode'],
1601
+ enabled: true,
1602
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1603
+ mcpServers: [MCP_SERVER_MAP['tavily:0.0.1']],
1604
+ skills: [],
1605
+ tools: [],
1606
+ frontendTools: [
1607
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1608
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1609
+ ],
1610
+ environmentName: 'ai-agents-env',
1611
+ icon: 'globe',
1612
+ emoji: '🌐',
1613
+ color: '#0969DA',
1614
+ suggestions: [
1615
+ 'Extract information from the https://datalayer.ai website and use your sandbox to create a variable "about_datalayer" with that information',
1616
+ ],
1617
+ welcomeMessage: "Hi! I'm the Tavily MCP demo agent without codemode. I can use Tavily tools directly and use the sandbox for follow-up processing.\n",
1618
+ welcomeNotebook: undefined,
1619
+ welcomeDocument: undefined,
1620
+ sandboxVariant: 'jupyter',
1621
+ systemPrompt: `You are a helpful assistant with access to Tavily web search tools. You MUST use the tavily_search or tavily_extract MCP tools to retrieve information from websites. NEVER try to use Python requests, urllib, or selenium to fetch web pages — always use your Tavily tools. After retrieving information with Tavily, use the sandbox (execute_code) to store results in variables.
1622
+ `,
1623
+ systemPromptCodemodeAddons: undefined,
1624
+ goal: undefined,
1625
+ protocol: 'vercel-ai',
1626
+ uiExtension: 'a2ui',
1627
+ trigger: undefined,
1628
+ modelConfig: undefined,
1629
+ mcpServerTools: undefined,
1630
+ guardrails: undefined,
1631
+ evals: undefined,
1632
+ codemode: { enabled: false },
1633
+ output: undefined,
1634
+ advanced: undefined,
1635
+ authorizationPolicy: undefined,
1636
+ notifications: undefined,
1637
+ memory: 'ephemeral',
1638
+ preHooks: undefined,
1639
+ postHooks: undefined,
1640
+ parameters: undefined,
1641
+ subagents: undefined,
632
1642
  };
633
1643
  export const END_OF_MONTH_SALES_PERFORMANCE_AGENT_SPEC_0_0_1 = {
634
1644
  id: 'end-of-month-sales-performance',
635
1645
  version: '0.0.1',
636
1646
  name: 'End of Month Sales Performance',
637
1647
  description: `Consolidates and analyzes end-of-month retail sales data directly from Salesforce. Computes revenue performance vs targets by SKU, detects anomalies in bookings and discounting, explains variances by region/segment/product/SKU, and generates executive-ready sales performance reports with full data lineage.`,
638
- tags: ['analytics', 'sales', 'revenue', 'performance', 'crm', 'finance', 'retail', 'sku'],
1648
+ tags: [
1649
+ 'analytics',
1650
+ 'sales',
1651
+ 'revenue',
1652
+ 'performance',
1653
+ 'crm',
1654
+ 'finance',
1655
+ 'retail',
1656
+ 'sku',
1657
+ ],
639
1658
  enabled: false,
640
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
1659
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
641
1660
  mcpServers: [MCP_SERVER_MAP['salesforce:0.0.1']],
642
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
1661
+ skills: [
1662
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
1663
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
1664
+ ],
643
1665
  tools: [],
644
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
1666
+ frontendTools: [
1667
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1668
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1669
+ ],
645
1670
  environmentName: 'ai-agents-env',
646
1671
  icon: 'graph',
647
1672
  emoji: '📊',
@@ -652,7 +1677,7 @@ export const END_OF_MONTH_SALES_PERFORMANCE_AGENT_SPEC_0_0_1 = {
652
1677
  'Show top and bottom performing SKUs this month',
653
1678
  'Explain the top drivers of variance this month',
654
1679
  'Detect unusual discounting patterns by SKU',
655
- 'Compare this month\'s performance vs last month',
1680
+ "Compare this month's performance vs last month",
656
1681
  'Show aggregated performance by sales segment',
657
1682
  'Break down revenue by SKU category',
658
1683
  ],
@@ -666,17 +1691,153 @@ export const END_OF_MONTH_SALES_PERFORMANCE_AGENT_SPEC_0_0_1 = {
666
1691
  goal: `Consolidate, validate, and analyze end-of-month Salesforce retail sales data. Compute revenue performance vs targets by SKU, detect anomalies in bookings and discounting, explain variances by region/segment/product/SKU, and generate an executive-ready PDF performance report with full data lineage.`,
667
1692
  protocol: 'vercel-ai',
668
1693
  uiExtension: 'a2ui',
669
- trigger: { "type": "schedule", "cron": "0 6 1 * *", "description": "Monthly on the 1st at 06:00 to process prior month Salesforce sales performance.\n", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
670
- modelConfig: { "temperature": 0.1, "max_tokens": 4096 },
671
- mcpServerTools: [{ "server": "Salesforce MCP", "tools": [{ "name": "fetch_closed_won_opportunities", "approval": "auto" }, { "name": "fetch_pipeline_snapshot", "approval": "auto" }, { "name": "fetch_accounts", "approval": "auto" }, { "name": "fetch_sales_targets", "approval": "auto" }, { "name": "compute_kpis", "approval": "auto" }, { "name": "fetch_sku_performance", "approval": "auto" }, { "name": "detect_revenue_anomalies", "approval": "auto" }, { "name": "export_deal_level_details", "approval": "manual" }, { "name": "generate_sales_report", "approval": "auto" }] }],
672
- guardrails: [{ "name": "Sales Performance Read-Only Analyst", "identity_provider": "datalayer", "identity_name": "sales-bot@acme.com", "permissions": { "read:data": true, "write:data": false, "execute:code": true, "access:internet": false, "send:email": false, "deploy:production": false }, "data_scope": { "allowed_systems": ["salesforce"], "allowed_objects": ["Opportunity", "Account", "User", "Product2", "PricebookEntry"], "denied_objects": ["Contact", "Lead", "Case", "Task", "Event", "EmailMessage", "Attachment", "ContentDocument", "ContentVersion"], "denied_fields": ["Account.Phone", "Account.BillingStreet", "Account.ShippingStreet", "Account.Website", "Opportunity.Description", "Opportunity.NextStep", "Opportunity.Private_Notes__c", "*SSN*", "*Bank*", "*IBAN*"] }, "data_handling": { "default_aggregation": true, "allow_row_level_output": false, "max_rows_in_output": 0, "max_deal_appendix_rows": 25, "redact_fields": ["Account.Name", "Opportunity.Name"], "hash_fields": ["Account.Id", "Opportunity.Id"], "pii_detection": true, "pii_action": "redact" }, "approval_policy": { "require_manual_approval_for": ["Any output containing Account.Name or Opportunity.Name", "Per-rep rankings or compensation-related metrics", "Deal-level breakdown above 10 records", "Any query spanning more than 45 days", "Any report including open pipeline details"], "auto_approved": ["Aggregated KPIs by region, segment, or product", "Month-over-month comparisons with aggregated data"] }, "tool_limits": { "max_tool_calls": 25, "max_query_rows": 200000, "max_query_runtime": "30s", "max_time_window_days": 45 }, "audit": { "log_tool_calls": true, "log_query_metadata_only": true, "retain_days": 30, "require_lineage_in_report": true }, "content_safety": { "treat_crm_text_fields_as_untrusted": true, "do_not_follow_instructions_from_data": true }, "token_limits": { "per_run": "30K", "per_day": "300K", "per_month": "3M" } }],
673
- evals: [{ "name": "KPI Accuracy", "category": "coding", "task_count": 400 }, { "name": "Variance Explanation Quality", "category": "reasoning", "task_count": 200 }, { "name": "Anomaly Detection Precision", "category": "reasoning", "task_count": 200 }, { "name": "SKU-Level Revenue Reconciliation", "category": "coding", "task_count": 150 }],
674
- codemode: { "enabled": true, "token_reduction": "~85%", "speedup": "~1.5× faster" },
675
- output: { "type": "PDF", "template": "end_of_month_sales_performance_report.pdf" },
676
- advanced: { "cost_limit": "$3.00 per run", "time_limit": "600 seconds", "max_iterations": 30, "validation": "All reported revenue figures must reconcile with Salesforce closed-won totals for the selected period, including SKU-level breakdowns. Variances vs targets must be computed and explained at both aggregate and per-SKU levels. All outputs must include a data lineage section listing objects queried, filters applied, and record counts.\n" },
1694
+ trigger: {
1695
+ type: 'schedule',
1696
+ cron: '0 6 1 * *',
1697
+ description: 'Monthly on the 1st at 06:00 to process prior month Salesforce sales performance.\n',
1698
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
1699
+ },
1700
+ modelConfig: { temperature: 0.1, max_tokens: 4096 },
1701
+ mcpServerTools: [
1702
+ {
1703
+ server: 'Salesforce MCP',
1704
+ tools: [
1705
+ { name: 'fetch_closed_won_opportunities', approval: 'auto' },
1706
+ { name: 'fetch_pipeline_snapshot', approval: 'auto' },
1707
+ { name: 'fetch_accounts', approval: 'auto' },
1708
+ { name: 'fetch_sales_targets', approval: 'auto' },
1709
+ { name: 'compute_kpis', approval: 'auto' },
1710
+ { name: 'fetch_sku_performance', approval: 'auto' },
1711
+ { name: 'detect_revenue_anomalies', approval: 'auto' },
1712
+ { name: 'export_deal_level_details', approval: 'manual' },
1713
+ { name: 'generate_sales_report', approval: 'auto' },
1714
+ ],
1715
+ },
1716
+ ],
1717
+ guardrails: [
1718
+ {
1719
+ name: 'Sales Performance Read-Only Analyst',
1720
+ identity_provider: 'datalayer',
1721
+ identity_name: 'sales-bot@acme.com',
1722
+ permissions: {
1723
+ 'read:data': true,
1724
+ 'write:data': false,
1725
+ 'execute:code': true,
1726
+ 'access:internet': false,
1727
+ 'send:email': false,
1728
+ 'deploy:production': false,
1729
+ },
1730
+ data_scope: {
1731
+ allowed_systems: ['salesforce'],
1732
+ allowed_objects: [
1733
+ 'Opportunity',
1734
+ 'Account',
1735
+ 'User',
1736
+ 'Product2',
1737
+ 'PricebookEntry',
1738
+ ],
1739
+ denied_objects: [
1740
+ 'Contact',
1741
+ 'Lead',
1742
+ 'Case',
1743
+ 'Task',
1744
+ 'Event',
1745
+ 'EmailMessage',
1746
+ 'Attachment',
1747
+ 'ContentDocument',
1748
+ 'ContentVersion',
1749
+ ],
1750
+ denied_fields: [
1751
+ 'Account.Phone',
1752
+ 'Account.BillingStreet',
1753
+ 'Account.ShippingStreet',
1754
+ 'Account.Website',
1755
+ 'Opportunity.Description',
1756
+ 'Opportunity.NextStep',
1757
+ 'Opportunity.Private_Notes__c',
1758
+ '*SSN*',
1759
+ '*Bank*',
1760
+ '*IBAN*',
1761
+ ],
1762
+ },
1763
+ data_handling: {
1764
+ default_aggregation: true,
1765
+ allow_row_level_output: false,
1766
+ max_rows_in_output: 0,
1767
+ max_deal_appendix_rows: 25,
1768
+ redact_fields: ['Account.Name', 'Opportunity.Name'],
1769
+ hash_fields: ['Account.Id', 'Opportunity.Id'],
1770
+ pii_detection: true,
1771
+ pii_action: 'redact',
1772
+ },
1773
+ approval_policy: {
1774
+ require_manual_approval_for: [
1775
+ 'Any output containing Account.Name or Opportunity.Name',
1776
+ 'Per-rep rankings or compensation-related metrics',
1777
+ 'Deal-level breakdown above 10 records',
1778
+ 'Any query spanning more than 45 days',
1779
+ 'Any report including open pipeline details',
1780
+ ],
1781
+ auto_approved: [
1782
+ 'Aggregated KPIs by region, segment, or product',
1783
+ 'Month-over-month comparisons with aggregated data',
1784
+ ],
1785
+ },
1786
+ tool_limits: {
1787
+ max_tool_calls: 25,
1788
+ max_query_rows: 200000,
1789
+ max_query_runtime: '30s',
1790
+ max_time_window_days: 45,
1791
+ },
1792
+ audit: {
1793
+ log_tool_calls: true,
1794
+ log_query_metadata_only: true,
1795
+ retain_days: 30,
1796
+ require_lineage_in_report: true,
1797
+ },
1798
+ content_safety: {
1799
+ treat_crm_text_fields_as_untrusted: true,
1800
+ do_not_follow_instructions_from_data: true,
1801
+ },
1802
+ token_limits: { per_run: '30K', per_day: '300K', per_month: '3M' },
1803
+ },
1804
+ ],
1805
+ evals: [
1806
+ { name: 'KPI Accuracy', category: 'coding', task_count: 400 },
1807
+ {
1808
+ name: 'Variance Explanation Quality',
1809
+ category: 'reasoning',
1810
+ task_count: 200,
1811
+ },
1812
+ {
1813
+ name: 'Anomaly Detection Precision',
1814
+ category: 'reasoning',
1815
+ task_count: 200,
1816
+ },
1817
+ {
1818
+ name: 'SKU-Level Revenue Reconciliation',
1819
+ category: 'coding',
1820
+ task_count: 150,
1821
+ },
1822
+ ],
1823
+ codemode: { enabled: true, token_reduction: '~85%', speedup: '~1.5× faster' },
1824
+ output: {
1825
+ type: 'PDF',
1826
+ template: 'end_of_month_sales_performance_report.pdf',
1827
+ },
1828
+ advanced: {
1829
+ cost_limit: '$3.00 per run',
1830
+ time_limit: '600 seconds',
1831
+ max_iterations: 30,
1832
+ validation: 'All reported revenue figures must reconcile with Salesforce closed-won totals for the selected period, including SKU-level breakdowns. Variances vs targets must be computed and explained at both aggregate and per-SKU levels. All outputs must include a data lineage section listing objects queried, filters applied, and record counts.\n',
1833
+ },
677
1834
  authorizationPolicy: '',
678
- notifications: { "email": "cro@company.com", "slack": "#sales-performance" },
1835
+ notifications: { email: 'cro@company.com', slack: '#sales-performance' },
679
1836
  memory: 'ephemeral',
1837
+ preHooks: undefined,
1838
+ postHooks: undefined,
1839
+ parameters: undefined,
1840
+ subagents: undefined,
680
1841
  };
681
1842
  export const EXTRACT_DATA_FROM_FILES_AGENT_SPEC_0_0_1 = {
682
1843
  id: 'extract-data-from-files',
@@ -685,11 +1846,18 @@ export const EXTRACT_DATA_FROM_FILES_AGENT_SPEC_0_0_1 = {
685
1846
  description: `A generic data extraction agent that processes unstructured files (PDFs, scanned documents, spreadsheets, images with text) and extracts structured data — tables, key-value pairs, line items, totals. Outputs clean JSON or CSV ready for downstream systems. Applicable to invoices, receipts, forms, medical records, legal documents, and more.`,
686
1847
  tags: ['extraction', 'data', 'horizontal', 'automation', 'documents'],
687
1848
  enabled: false,
688
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
1849
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
689
1850
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
690
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
1851
+ skills: [
1852
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
1853
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
1854
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
1855
+ ],
691
1856
  tools: [],
692
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
1857
+ frontendTools: [
1858
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1859
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1860
+ ],
693
1861
  environmentName: 'ai-agents-env',
694
1862
  icon: 'database',
695
1863
  emoji: '🗃️',
@@ -704,17 +1872,67 @@ export const EXTRACT_DATA_FROM_FILES_AGENT_SPEC_0_0_1 = {
704
1872
  goal: `Extract structured data from unstructured files. Parse tables, key-value pairs, line items, dates, amounts, and named entities from PDFs, images, spreadsheets, and scanned documents. Output clean JSON and CSV with confidence scores for each extracted field.`,
705
1873
  protocol: 'vercel-ai',
706
1874
  uiExtension: 'a2ui',
707
- trigger: { "type": "event", "event": "file_uploaded", "description": "Triggered when new files are dropped into the extraction folder", "prompt": "Handle the 'file_uploaded' event and execute the workflow end-to-end." },
708
- modelConfig: { "temperature": 0.1, "max_tokens": 8192 },
709
- mcpServerTools: [{ "server": "File Processor", "tools": [{ "name": "read_pdf_tables", "approval": "auto" }, { "name": "ocr_image", "approval": "auto" }, { "name": "parse_spreadsheet", "approval": "auto" }] }, { "server": "Schema Mapper", "tools": [{ "name": "map_to_schema", "approval": "auto" }, { "name": "validate_output", "approval": "auto" }, { "name": "write_to_database", "approval": "manual" }] }],
710
- guardrails: [{ "name": "Default Platform User", "identity_provider": "datalayer", "identity_name": "extraction-bot@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": false, "send:email": false, "deploy:production": false }, "token_limits": { "per_run": "40K", "per_day": "400K", "per_month": "4M" } }],
711
- evals: [{ "name": "Table Extraction Accuracy", "category": "coding", "task_count": 450 }, { "name": "Key-Value Pair Extraction", "category": "coding", "task_count": 380 }, { "name": "Schema Mapping Quality", "category": "reasoning", "task_count": 250 }],
1875
+ trigger: {
1876
+ type: 'event',
1877
+ event: 'file_uploaded',
1878
+ description: 'Triggered when new files are dropped into the extraction folder',
1879
+ prompt: "Handle the 'file_uploaded' event and execute the workflow end-to-end.",
1880
+ },
1881
+ modelConfig: { temperature: 0.1, max_tokens: 8192 },
1882
+ mcpServerTools: [
1883
+ {
1884
+ server: 'File Processor',
1885
+ tools: [
1886
+ { name: 'read_pdf_tables', approval: 'auto' },
1887
+ { name: 'ocr_image', approval: 'auto' },
1888
+ { name: 'parse_spreadsheet', approval: 'auto' },
1889
+ ],
1890
+ },
1891
+ {
1892
+ server: 'Schema Mapper',
1893
+ tools: [
1894
+ { name: 'map_to_schema', approval: 'auto' },
1895
+ { name: 'validate_output', approval: 'auto' },
1896
+ { name: 'write_to_database', approval: 'manual' },
1897
+ ],
1898
+ },
1899
+ ],
1900
+ guardrails: [
1901
+ {
1902
+ name: 'Default Platform User',
1903
+ identity_provider: 'datalayer',
1904
+ identity_name: 'extraction-bot@acme.com',
1905
+ permissions: {
1906
+ 'read:data': true,
1907
+ 'write:data': true,
1908
+ 'execute:code': true,
1909
+ 'access:internet': false,
1910
+ 'send:email': false,
1911
+ 'deploy:production': false,
1912
+ },
1913
+ token_limits: { per_run: '40K', per_day: '400K', per_month: '4M' },
1914
+ },
1915
+ ],
1916
+ evals: [
1917
+ { name: 'Table Extraction Accuracy', category: 'coding', task_count: 450 },
1918
+ { name: 'Key-Value Pair Extraction', category: 'coding', task_count: 380 },
1919
+ { name: 'Schema Mapping Quality', category: 'reasoning', task_count: 250 },
1920
+ ],
712
1921
  codemode: undefined,
713
- output: { "type": "JSON", "formats": ["JSON", "CSV"], "template": "extraction-output-v1", "storage": "s3://acme-extractions/" },
1922
+ output: {
1923
+ type: 'JSON',
1924
+ formats: ['JSON', 'CSV'],
1925
+ template: 'extraction-output-v1',
1926
+ storage: 's3://acme-extractions/',
1927
+ },
714
1928
  advanced: undefined,
715
1929
  authorizationPolicy: undefined,
716
- notifications: { "slack": "#data-extraction", "email": "data-team@acme.com" },
1930
+ notifications: { slack: '#data-extraction', email: 'data-team@acme.com' },
717
1931
  memory: 'ephemeral',
1932
+ preHooks: undefined,
1933
+ postHooks: undefined,
1934
+ parameters: undefined,
1935
+ subagents: undefined,
718
1936
  };
719
1937
  export const FINANCIAL_VIZ_AGENT_SPEC_0_0_1 = {
720
1938
  id: 'financial-viz',
@@ -724,10 +1942,16 @@ export const FINANCIAL_VIZ_AGENT_SPEC_0_0_1 = {
724
1942
  tags: ['finance', 'stocks', 'visualization', 'charts'],
725
1943
  enabled: false,
726
1944
  model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
727
- mcpServers: [MCP_SERVER_MAP['alphavantage:0.0.1'], MCP_SERVER_MAP['chart:0.0.1']],
1945
+ mcpServers: [
1946
+ MCP_SERVER_MAP['alphavantage:0.0.1'],
1947
+ MCP_SERVER_MAP['chart:0.0.1'],
1948
+ ],
728
1949
  skills: [toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
729
1950
  tools: [],
730
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
1951
+ frontendTools: [
1952
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
1953
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
1954
+ ],
731
1955
  environmentName: 'ai-agents-env',
732
1956
  icon: 'trending-up',
733
1957
  emoji: '📈',
@@ -764,7 +1988,7 @@ export const FINANCIAL_VIZ_AGENT_SPEC_0_0_1 = {
764
1988
  ## Token Efficiency When possible, chain multiple tool calls in a single execute_code block. This reduces output tokens by processing intermediate results in code rather than returning them. If you want to examine results, print subsets, preview (maximum 20 first characters) and/or counts instead of full data, this is really important.
765
1989
  `,
766
1990
  goal: undefined,
767
- protocol: 'vercel-ai',
1991
+ protocol: undefined,
768
1992
  uiExtension: undefined,
769
1993
  trigger: undefined,
770
1994
  modelConfig: undefined,
@@ -777,6 +2001,10 @@ export const FINANCIAL_VIZ_AGENT_SPEC_0_0_1 = {
777
2001
  authorizationPolicy: undefined,
778
2002
  notifications: undefined,
779
2003
  memory: 'ephemeral',
2004
+ preHooks: undefined,
2005
+ postHooks: undefined,
2006
+ parameters: undefined,
2007
+ subagents: undefined,
780
2008
  };
781
2009
  export const FINANCIAL_AGENT_SPEC_0_0_1 = {
782
2010
  id: 'financial',
@@ -789,7 +2017,10 @@ export const FINANCIAL_AGENT_SPEC_0_0_1 = {
789
2017
  mcpServers: [MCP_SERVER_MAP['alphavantage:0.0.1']],
790
2018
  skills: [toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
791
2019
  tools: [],
792
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2020
+ frontendTools: [
2021
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2022
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2023
+ ],
793
2024
  environmentName: 'ai-agents-env',
794
2025
  icon: 'trending-up',
795
2026
  emoji: '📈',
@@ -826,7 +2057,7 @@ export const FINANCIAL_AGENT_SPEC_0_0_1 = {
826
2057
  ## Token Efficiency When possible, chain multiple tool calls in a single execute_code block. This reduces output tokens by processing intermediate results in code rather than returning them. If you want to examine results, print subsets, preview (maximum 20 first characters) and/or counts instead of full data, this is really important.
827
2058
  `,
828
2059
  goal: undefined,
829
- protocol: 'vercel-ai',
2060
+ protocol: undefined,
830
2061
  uiExtension: undefined,
831
2062
  trigger: undefined,
832
2063
  modelConfig: undefined,
@@ -839,6 +2070,10 @@ export const FINANCIAL_AGENT_SPEC_0_0_1 = {
839
2070
  authorizationPolicy: undefined,
840
2071
  notifications: undefined,
841
2072
  memory: 'ephemeral',
2073
+ preHooks: undefined,
2074
+ postHooks: undefined,
2075
+ parameters: undefined,
2076
+ subagents: undefined,
842
2077
  };
843
2078
  export const GENERATE_WEEKLY_REPORTS_AGENT_SPEC_0_0_1 = {
844
2079
  id: 'generate-weekly-reports',
@@ -847,19 +2082,28 @@ export const GENERATE_WEEKLY_REPORTS_AGENT_SPEC_0_0_1 = {
847
2082
  description: `Aggregates data across marketing, sales, and operations departments. Generates structured weekly reports with charts, KPI summaries, trend analysis, and executive-level takeaways.`,
848
2083
  tags: ['marketing', 'reports', 'weekly', 'analytics', 'automation'],
849
2084
  enabled: false,
850
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
851
- mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['slack:0.0.1']],
852
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
2085
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
2086
+ mcpServers: [
2087
+ MCP_SERVER_MAP['filesystem:0.0.1'],
2088
+ MCP_SERVER_MAP['slack:0.0.1'],
2089
+ ],
2090
+ skills: [
2091
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
2092
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2093
+ ],
853
2094
  tools: [],
854
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2095
+ frontendTools: [
2096
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2097
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2098
+ ],
855
2099
  environmentName: 'ai-agents-env',
856
2100
  icon: 'file',
857
2101
  emoji: '📝',
858
2102
  color: '#cf222e',
859
2103
  suggestions: [
860
- 'Generate this week\'s executive report',
2104
+ "Generate this week's executive report",
861
2105
  'Show marketing KPIs for the last 7 days',
862
- 'Compare this week\'s sales to last week',
2106
+ "Compare this week's sales to last week",
863
2107
  'What were the top operational issues this week?',
864
2108
  ],
865
2109
  welcomeMessage: "Hello! I'm the Weekly Report Generator. Every Monday I aggregate data from marketing, sales, and operations to produce a structured executive report with charts, KPI summaries, and actionable takeaways.\n",
@@ -872,17 +2116,72 @@ export const GENERATE_WEEKLY_REPORTS_AGENT_SPEC_0_0_1 = {
872
2116
  goal: `Aggregate data across marketing, sales, and operations departments every Monday. Generate a structured executive report with charts, KPI summaries, trend analysis, and the top 3 actionable takeaways for leadership.`,
873
2117
  protocol: 'vercel-ai',
874
2118
  uiExtension: 'a2ui',
875
- trigger: { "type": "schedule", "cron": "0 6 * * 1", "description": "Every Monday at 6:00 AM UTC", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
876
- modelConfig: { "temperature": 0.2, "max_tokens": 8192 },
877
- mcpServerTools: [{ "server": "Data Warehouse", "tools": [{ "name": "query_marketing_data", "approval": "auto" }, { "name": "query_sales_data", "approval": "auto" }, { "name": "query_operations_data", "approval": "auto" }] }, { "server": "Visualization Engine", "tools": [{ "name": "generate_charts", "approval": "auto" }, { "name": "create_dashboard", "approval": "auto" }] }, { "server": "Document Generator", "tools": [{ "name": "compile_report", "approval": "auto" }, { "name": "send_report", "approval": "manual" }] }],
878
- guardrails: [{ "name": "Data Engineering Power User", "identity_provider": "datalayer", "identity_name": "reports-bot@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": true, "send:email": true, "deploy:production": false }, "token_limits": { "per_run": "80K", "per_day": "500K", "per_month": "5M" } }],
879
- evals: [{ "name": "Report Completeness", "category": "coding", "task_count": 100 }, { "name": "Data Accuracy", "category": "reasoning", "task_count": 250 }],
880
- codemode: { "enabled": true, "token_reduction": "~90%", "speedup": "~2× faster" },
881
- output: { "type": "PDF", "template": "weekly_executive_report.pdf" },
882
- advanced: { "cost_limit": "$8.00 per run", "time_limit": "600 seconds", "max_iterations": 60, "validation": "Report must include all department KPIs and trend charts" },
2119
+ trigger: {
2120
+ type: 'schedule',
2121
+ cron: '0 6 * * 1',
2122
+ description: 'Every Monday at 6:00 AM UTC',
2123
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
2124
+ },
2125
+ modelConfig: { temperature: 0.2, max_tokens: 8192 },
2126
+ mcpServerTools: [
2127
+ {
2128
+ server: 'Data Warehouse',
2129
+ tools: [
2130
+ { name: 'query_marketing_data', approval: 'auto' },
2131
+ { name: 'query_sales_data', approval: 'auto' },
2132
+ { name: 'query_operations_data', approval: 'auto' },
2133
+ ],
2134
+ },
2135
+ {
2136
+ server: 'Visualization Engine',
2137
+ tools: [
2138
+ { name: 'generate_charts', approval: 'auto' },
2139
+ { name: 'create_dashboard', approval: 'auto' },
2140
+ ],
2141
+ },
2142
+ {
2143
+ server: 'Document Generator',
2144
+ tools: [
2145
+ { name: 'compile_report', approval: 'auto' },
2146
+ { name: 'send_report', approval: 'manual' },
2147
+ ],
2148
+ },
2149
+ ],
2150
+ guardrails: [
2151
+ {
2152
+ name: 'Data Engineering Power User',
2153
+ identity_provider: 'datalayer',
2154
+ identity_name: 'reports-bot@acme.com',
2155
+ permissions: {
2156
+ 'read:data': true,
2157
+ 'write:data': true,
2158
+ 'execute:code': true,
2159
+ 'access:internet': true,
2160
+ 'send:email': true,
2161
+ 'deploy:production': false,
2162
+ },
2163
+ token_limits: { per_run: '80K', per_day: '500K', per_month: '5M' },
2164
+ },
2165
+ ],
2166
+ evals: [
2167
+ { name: 'Report Completeness', category: 'coding', task_count: 100 },
2168
+ { name: 'Data Accuracy', category: 'reasoning', task_count: 250 },
2169
+ ],
2170
+ codemode: { enabled: true, token_reduction: '~90%', speedup: '~2× faster' },
2171
+ output: { type: 'PDF', template: 'weekly_executive_report.pdf' },
2172
+ advanced: {
2173
+ cost_limit: '$8.00 per run',
2174
+ time_limit: '600 seconds',
2175
+ max_iterations: 60,
2176
+ validation: 'Report must include all department KPIs and trend charts',
2177
+ },
883
2178
  authorizationPolicy: '',
884
- notifications: { "email": "robert.w@company.com", "slack": "#weekly-reports" },
2179
+ notifications: { email: 'robert.w@company.com', slack: '#weekly-reports' },
885
2180
  memory: 'ephemeral',
2181
+ preHooks: undefined,
2182
+ postHooks: undefined,
2183
+ parameters: undefined,
2184
+ subagents: undefined,
886
2185
  };
887
2186
  export const GITHUB_AGENT_SPEC_0_0_1 = {
888
2187
  id: 'github-agent',
@@ -893,9 +2192,15 @@ export const GITHUB_AGENT_SPEC_0_0_1 = {
893
2192
  enabled: false,
894
2193
  model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
895
2194
  mcpServers: [MCP_SERVER_MAP['google-workspace:0.0.1']],
896
- skills: [toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
2195
+ skills: [
2196
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
2197
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2198
+ ],
897
2199
  tools: [],
898
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2200
+ frontendTools: [
2201
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2202
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2203
+ ],
899
2204
  environmentName: 'ai-agents-env',
900
2205
  icon: 'git-branch',
901
2206
  emoji: '🐙',
@@ -932,7 +2237,7 @@ export const GITHUB_AGENT_SPEC_0_0_1 = {
932
2237
  ## Token Efficiency When possible, chain multiple tool calls in a single execute_code block. This reduces output tokens by processing intermediate results in code rather than returning them. If you want to examine results, print subsets, preview (maximum 20 first characters) and/or counts instead of full data, this is really important.
933
2238
  `,
934
2239
  goal: undefined,
935
- protocol: 'vercel-ai',
2240
+ protocol: undefined,
936
2241
  uiExtension: undefined,
937
2242
  trigger: undefined,
938
2243
  modelConfig: undefined,
@@ -945,6 +2250,10 @@ export const GITHUB_AGENT_SPEC_0_0_1 = {
945
2250
  authorizationPolicy: undefined,
946
2251
  notifications: undefined,
947
2252
  memory: 'ephemeral',
2253
+ preHooks: undefined,
2254
+ postHooks: undefined,
2255
+ parameters: undefined,
2256
+ subagents: undefined,
948
2257
  };
949
2258
  export const INFORMATION_ROUTING_AGENT_SPEC_0_0_1 = {
950
2259
  id: 'information-routing',
@@ -954,10 +2263,16 @@ export const INFORMATION_ROUTING_AGENT_SPEC_0_0_1 = {
954
2263
  tags: ['workflow', 'communication', 'gdrive'],
955
2264
  enabled: false,
956
2265
  model: 'bedrock:us.anthropic.claude-opus-4-6-v1',
957
- mcpServers: [MCP_SERVER_MAP['google-workspace:0.0.1'], MCP_SERVER_MAP['github:0.0.1']],
2266
+ mcpServers: [
2267
+ MCP_SERVER_MAP['google-workspace:0.0.1'],
2268
+ MCP_SERVER_MAP['github:0.0.1'],
2269
+ ],
958
2270
  skills: [toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
959
2271
  tools: [],
960
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2272
+ frontendTools: [
2273
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2274
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2275
+ ],
961
2276
  environmentName: 'ai-agents-env',
962
2277
  icon: 'share-2',
963
2278
  emoji: '🔀',
@@ -994,7 +2309,7 @@ export const INFORMATION_ROUTING_AGENT_SPEC_0_0_1 = {
994
2309
  ## Token Efficiency Always chain multiple tool calls in a single execute_code block. This reduces output tokens by processing intermediate results in code rather than returning them. If you want to examine results, print subsets, preview (maximum 20 first characters) and/or counts instead of full data, this is really important!!!!
995
2310
  `,
996
2311
  goal: undefined,
997
- protocol: 'vercel-ai',
2312
+ protocol: undefined,
998
2313
  uiExtension: undefined,
999
2314
  trigger: undefined,
1000
2315
  modelConfig: undefined,
@@ -1007,6 +2322,10 @@ export const INFORMATION_ROUTING_AGENT_SPEC_0_0_1 = {
1007
2322
  authorizationPolicy: undefined,
1008
2323
  notifications: undefined,
1009
2324
  memory: 'ephemeral',
2325
+ preHooks: undefined,
2326
+ postHooks: undefined,
2327
+ parameters: undefined,
2328
+ subagents: undefined,
1010
2329
  };
1011
2330
  export const MONITOR_SALES_KPIS_AGENT_SPEC_0_0_1 = {
1012
2331
  id: 'monitor-sales-kpis',
@@ -1015,17 +2334,28 @@ export const MONITOR_SALES_KPIS_AGENT_SPEC_0_0_1 = {
1015
2334
  description: `Monitor and analyze sales KPIs from the CRM system. Generate daily reports summarizing key performance metrics, identify trends, and flag anomalies. Send notifications when KPIs deviate more than 10% from targets.`,
1016
2335
  tags: ['support', 'chatbot', 'sales', 'kpi', 'monitoring'],
1017
2336
  enabled: false,
1018
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
2337
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1019
2338
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
1020
- skills: [toAgentSkillSpec(SKILL_MAP['github:0.0.1']), toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
1021
- tools: [TOOL_MAP['runtime-echo:0.0.1'], TOOL_MAP['runtime-sensitive-echo:0.0.1'], TOOL_MAP['runtime-send-mail:0.0.1']],
1022
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2339
+ skills: [
2340
+ toAgentSkillSpec(SKILL_MAP['github:0.0.1']),
2341
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
2342
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2343
+ ],
2344
+ tools: [
2345
+ TOOL_MAP['runtime-echo:0.0.1'],
2346
+ TOOL_MAP['runtime-sensitive-echo:0.0.1'],
2347
+ TOOL_MAP['runtime-send-mail:0.0.1'],
2348
+ ],
2349
+ frontendTools: [
2350
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2351
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2352
+ ],
1023
2353
  environmentName: 'ai-agents-env',
1024
2354
  icon: 'graph',
1025
2355
  emoji: '📊',
1026
2356
  color: '#2da44e',
1027
2357
  suggestions: [
1028
- 'Show me today\'s sales KPI dashboard',
2358
+ "Show me today's sales KPI dashboard",
1029
2359
  'What are the current revenue trends?',
1030
2360
  'Flag any KPIs that deviate more than 10% from targets',
1031
2361
  'Generate a weekly summary report',
@@ -1042,30 +2372,100 @@ export const MONITOR_SALES_KPIS_AGENT_SPEC_0_0_1 = {
1042
2372
  goal: `Monitor and analyze sales KPIs from the CRM system. Generate daily reports summarizing key performance metrics, identify trends, and flag anomalies. Send notifications when KPIs deviate more than 10% from targets.`,
1043
2373
  protocol: 'vercel-ai',
1044
2374
  uiExtension: 'a2ui',
1045
- trigger: { "type": "schedule", "cron": "0 8 * * *", "description": "Every day at 8:00 AM UTC", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
1046
- modelConfig: { "temperature": 0.3, "max_tokens": 4096 },
1047
- mcpServerTools: [{ "server": "CRM Data Server", "tools": [{ "name": "get_sales_data", "approval": "auto" }, { "name": "get_customer_list", "approval": "auto" }, { "name": "update_records", "approval": "manual" }] }, { "server": "Analytics Server", "tools": [{ "name": "run_analysis", "approval": "auto" }, { "name": "generate_charts", "approval": "auto" }] }],
1048
- guardrails: [{ "name": "Default Platform User", "identity_provider": "datalayer", "identity_name": "alice@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": true, "send:email": false, "deploy:production": false }, "token_limits": { "per_run": "50K", "per_day": "500K", "per_month": "5M" } }],
1049
- evals: [{ "name": "SWE-bench", "category": "coding", "task_count": 2294 }, { "name": "HumanEval", "category": "coding", "task_count": 164 }, { "name": "GPQA Diamond", "category": "reasoning", "task_count": 448 }, { "name": "TruthfulQA", "category": "safety", "task_count": 817 }],
1050
- codemode: { "enabled": true, "token_reduction": "~90%", "speedup": "~2× faster" },
1051
- output: { "type": "Notebook", "template": "kpi_report_template.ipynb" },
1052
- advanced: { "cost_limit": "$5.00 per run", "time_limit": "300 seconds", "max_iterations": 50, "validation": "Output must contain required KPI fields", "checkpoint_interval": 30, "context_window": { "max_tokens": 100000, "eviction_strategy": "sliding_window", "summary_threshold": 0.85 } },
2375
+ trigger: {
2376
+ type: 'schedule',
2377
+ cron: '0 8 * * *',
2378
+ description: 'Every day at 8:00 AM UTC',
2379
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
2380
+ },
2381
+ modelConfig: { temperature: 0.3, max_tokens: 4096 },
2382
+ mcpServerTools: [
2383
+ {
2384
+ server: 'CRM Data Server',
2385
+ tools: [
2386
+ { name: 'get_sales_data', approval: 'auto' },
2387
+ { name: 'get_customer_list', approval: 'auto' },
2388
+ { name: 'update_records', approval: 'manual' },
2389
+ ],
2390
+ },
2391
+ {
2392
+ server: 'Analytics Server',
2393
+ tools: [
2394
+ { name: 'run_analysis', approval: 'auto' },
2395
+ { name: 'generate_charts', approval: 'auto' },
2396
+ ],
2397
+ },
2398
+ ],
2399
+ guardrails: [
2400
+ {
2401
+ name: 'Default Platform User',
2402
+ identity_provider: 'datalayer',
2403
+ identity_name: 'alice@acme.com',
2404
+ permissions: {
2405
+ 'read:data': true,
2406
+ 'write:data': true,
2407
+ 'execute:code': true,
2408
+ 'access:internet': true,
2409
+ 'send:email': false,
2410
+ 'deploy:production': false,
2411
+ },
2412
+ token_limits: { per_run: '50K', per_day: '500K', per_month: '5M' },
2413
+ },
2414
+ ],
2415
+ evals: [
2416
+ { name: 'SWE-bench', category: 'coding', task_count: 2294 },
2417
+ { name: 'HumanEval', category: 'coding', task_count: 164 },
2418
+ { name: 'GPQA Diamond', category: 'reasoning', task_count: 448 },
2419
+ { name: 'TruthfulQA', category: 'safety', task_count: 817 },
2420
+ ],
2421
+ codemode: { enabled: true, token_reduction: '~90%', speedup: '~2× faster' },
2422
+ output: { type: 'Notebook', template: 'kpi_report_template.ipynb' },
2423
+ advanced: {
2424
+ cost_limit: '$5.00 per run',
2425
+ time_limit: '300 seconds',
2426
+ max_iterations: 50,
2427
+ validation: 'Output must contain required KPI fields',
2428
+ checkpoint_interval: 30,
2429
+ context_window: {
2430
+ max_tokens: 100000,
2431
+ eviction_strategy: 'sliding_window',
2432
+ summary_threshold: 0.85,
2433
+ },
2434
+ },
1053
2435
  authorizationPolicy: '',
1054
- notifications: { "email": "marcus.r@company.com", "slack": "#sales-kpis" },
2436
+ notifications: { email: 'marcus.r@company.com', slack: '#sales-kpis' },
1055
2437
  memory: 'mem0',
2438
+ preHooks: undefined,
2439
+ postHooks: undefined,
2440
+ parameters: undefined,
2441
+ subagents: undefined,
1056
2442
  };
1057
2443
  export const OPTIMIZE_DYNAMIC_PRICING_AGENT_SPEC_0_0_1 = {
1058
2444
  id: 'optimize-dynamic-pricing',
1059
2445
  version: '0.0.1',
1060
2446
  name: 'Optimize Dynamic Pricing',
1061
2447
  description: `Monitors competitor pricing across marketplaces, forecasts demand per SKU, and generates margin-optimised pricing recommendations in real time. Tracks 50K+ SKUs hourly across Amazon, Walmart, and niche channels, combining competitive intelligence with demand signals to maximise margins.`,
1062
- tags: ['retail', 'e-commerce', 'pricing', 'analytics', 'demand-forecasting', 'margins'],
2448
+ tags: [
2449
+ 'retail',
2450
+ 'e-commerce',
2451
+ 'pricing',
2452
+ 'analytics',
2453
+ 'demand-forecasting',
2454
+ 'margins',
2455
+ ],
1063
2456
  enabled: false,
1064
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
2457
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1065
2458
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
1066
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
2459
+ skills: [
2460
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
2461
+ toAgentSkillSpec(SKILL_MAP['crawl:0.0.1']),
2462
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2463
+ ],
1067
2464
  tools: [],
1068
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2465
+ frontendTools: [
2466
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2467
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2468
+ ],
1069
2469
  environmentName: 'ai-agents-env',
1070
2470
  icon: 'tag',
1071
2471
  emoji: '🏷️',
@@ -1075,7 +2475,7 @@ export const OPTIMIZE_DYNAMIC_PRICING_AGENT_SPEC_0_0_1 = {
1075
2475
  'Which SKUs have the highest price elasticity?',
1076
2476
  'Generate pricing recommendations for the electronics category',
1077
2477
  'Forecast demand for top 100 SKUs next week',
1078
- 'What\'s the projected revenue impact of current recommendations?',
2478
+ "What's the projected revenue impact of current recommendations?",
1079
2479
  ],
1080
2480
  welcomeMessage: "Hello! I'm the Dynamic Pricing agent. I monitor competitor prices across 50K+ SKUs hourly, forecast demand using historical and seasonal patterns, and generate margin-optimised pricing recommendations to keep you competitive while maximising profitability.\n",
1081
2481
  welcomeNotebook: undefined,
@@ -1087,30 +2487,109 @@ export const OPTIMIZE_DYNAMIC_PRICING_AGENT_SPEC_0_0_1 = {
1087
2487
  goal: `Track competitor pricing across 50K+ SKUs hourly on Amazon, Walmart, and niche marketplaces. Forecast demand per SKU-location pair using historical sales, seasonality, and external signals. Generate margin-optimised pricing recommendations with confidence intervals and projected revenue impact.`,
1088
2488
  protocol: 'vercel-ai',
1089
2489
  uiExtension: 'a2ui',
1090
- trigger: { "type": "schedule", "cron": "0 * * * *", "description": "Hourly competitive price scan and demand forecast update", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
1091
- modelConfig: { "temperature": 0.1, "max_tokens": 4096 },
1092
- mcpServerTools: [{ "server": "Marketplace Intelligence MCP", "tools": [{ "name": "scrape_competitor_prices", "approval": "auto" }, { "name": "fetch_marketplace_listings", "approval": "auto" }, { "name": "detect_new_products", "approval": "auto" }, { "name": "compute_price_elasticity", "approval": "auto" }, { "name": "forecast_demand", "approval": "auto" }, { "name": "generate_price_recommendations", "approval": "manual" }, { "name": "apply_price_changes", "approval": "manual" }] }],
1093
- guardrails: [{ "name": "Pricing Intelligence Analyst", "identity_provider": "datalayer", "identity_name": "pricing-bot@acme.com", "permissions": { "read:data": true, "write:data": false, "execute:code": true, "access:internet": true, "send:email": false, "deploy:production": false }, "data_handling": { "pii_detection": false }, "approval_policy": { "require_manual_approval_for": ["Any price change above 15% from current price", "Bulk price updates affecting more than 100 SKUs", "Below-cost pricing recommendations"], "auto_approved": ["Competitive price monitoring and data collection", "Demand forecasting and analysis", "Price recommendations within 15% band"] }, "token_limits": { "per_run": "25K", "per_day": "500K", "per_month": "10M" } }],
1094
- evals: [{ "name": "Price Tracking Accuracy", "category": "coding", "task_count": 500 }, { "name": "Demand Forecast MAPE", "category": "reasoning", "task_count": 300 }, { "name": "Margin Impact", "category": "coding", "task_count": 200 }],
1095
- codemode: { "enabled": true, "token_reduction": "~90%", "speedup": "~2× faster" },
1096
- output: { "formats": ["Dashboard", "JSON", "Spreadsheet"], "template": "Dynamic Pricing Report", "storage": "/outputs/dynamic-pricing/" },
1097
- advanced: { "cost_limit": "$1.50 per run", "time_limit": "300 seconds", "max_iterations": 20, "validation": "All recommended prices must maintain minimum margin thresholds. Demand forecasts must include confidence intervals.\n" },
2490
+ trigger: {
2491
+ type: 'schedule',
2492
+ cron: '0 * * * *',
2493
+ description: 'Hourly competitive price scan and demand forecast update',
2494
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
2495
+ },
2496
+ modelConfig: { temperature: 0.1, max_tokens: 4096 },
2497
+ mcpServerTools: [
2498
+ {
2499
+ server: 'Marketplace Intelligence MCP',
2500
+ tools: [
2501
+ { name: 'scrape_competitor_prices', approval: 'auto' },
2502
+ { name: 'fetch_marketplace_listings', approval: 'auto' },
2503
+ { name: 'detect_new_products', approval: 'auto' },
2504
+ { name: 'compute_price_elasticity', approval: 'auto' },
2505
+ { name: 'forecast_demand', approval: 'auto' },
2506
+ { name: 'generate_price_recommendations', approval: 'manual' },
2507
+ { name: 'apply_price_changes', approval: 'manual' },
2508
+ ],
2509
+ },
2510
+ ],
2511
+ guardrails: [
2512
+ {
2513
+ name: 'Pricing Intelligence Analyst',
2514
+ identity_provider: 'datalayer',
2515
+ identity_name: 'pricing-bot@acme.com',
2516
+ permissions: {
2517
+ 'read:data': true,
2518
+ 'write:data': false,
2519
+ 'execute:code': true,
2520
+ 'access:internet': true,
2521
+ 'send:email': false,
2522
+ 'deploy:production': false,
2523
+ },
2524
+ data_handling: { pii_detection: false },
2525
+ approval_policy: {
2526
+ require_manual_approval_for: [
2527
+ 'Any price change above 15% from current price',
2528
+ 'Bulk price updates affecting more than 100 SKUs',
2529
+ 'Below-cost pricing recommendations',
2530
+ ],
2531
+ auto_approved: [
2532
+ 'Competitive price monitoring and data collection',
2533
+ 'Demand forecasting and analysis',
2534
+ 'Price recommendations within 15% band',
2535
+ ],
2536
+ },
2537
+ token_limits: { per_run: '25K', per_day: '500K', per_month: '10M' },
2538
+ },
2539
+ ],
2540
+ evals: [
2541
+ { name: 'Price Tracking Accuracy', category: 'coding', task_count: 500 },
2542
+ { name: 'Demand Forecast MAPE', category: 'reasoning', task_count: 300 },
2543
+ { name: 'Margin Impact', category: 'coding', task_count: 200 },
2544
+ ],
2545
+ codemode: { enabled: true, token_reduction: '~90%', speedup: '~2× faster' },
2546
+ output: {
2547
+ formats: ['Dashboard', 'JSON', 'Spreadsheet'],
2548
+ template: 'Dynamic Pricing Report',
2549
+ storage: '/outputs/dynamic-pricing/',
2550
+ },
2551
+ advanced: {
2552
+ cost_limit: '$1.50 per run',
2553
+ time_limit: '300 seconds',
2554
+ max_iterations: 20,
2555
+ validation: 'All recommended prices must maintain minimum margin thresholds. Demand forecasts must include confidence intervals.\n',
2556
+ },
1098
2557
  authorizationPolicy: '',
1099
- notifications: { "email": "merchandising@company.com", "slack": "#pricing-intelligence" },
2558
+ notifications: {
2559
+ email: 'merchandising@company.com',
2560
+ slack: '#pricing-intelligence',
2561
+ },
1100
2562
  memory: 'ephemeral',
2563
+ preHooks: undefined,
2564
+ postHooks: undefined,
2565
+ parameters: undefined,
2566
+ subagents: undefined,
1101
2567
  };
1102
2568
  export const OPTIMIZE_GRID_OPERATIONS_AGENT_SPEC_0_0_1 = {
1103
2569
  id: 'optimize-grid-operations',
1104
2570
  version: '0.0.1',
1105
2571
  name: 'Optimize Grid Operations',
1106
2572
  description: `A multi-agent team that processes millions of IoT sensor data points from smart meters, substations, and renewable generation assets. Predicts equipment failures 2–4 weeks in advance, optimises load balancing across the grid, and reduces unplanned downtime by 50%.`,
1107
- tags: ['energy', 'utilities', 'smart-grid', 'iot', 'predictive-maintenance', 'sustainability'],
2573
+ tags: [
2574
+ 'energy',
2575
+ 'utilities',
2576
+ 'smart-grid',
2577
+ 'iot',
2578
+ 'predictive-maintenance',
2579
+ 'sustainability',
2580
+ ],
1108
2581
  enabled: false,
1109
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
2582
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1110
2583
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
1111
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
2584
+ skills: [
2585
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
2586
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2587
+ ],
1112
2588
  tools: [],
1113
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2589
+ frontendTools: [
2590
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2591
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2592
+ ],
1114
2593
  environmentName: 'ai-agents-env',
1115
2594
  icon: 'zap',
1116
2595
  emoji: '⚡',
@@ -1119,7 +2598,7 @@ export const OPTIMIZE_GRID_OPERATIONS_AGENT_SPEC_0_0_1 = {
1119
2598
  'Show current grid health across all substations',
1120
2599
  'Which assets have anomaly alerts right now?',
1121
2600
  'Predict failures for the next 4 weeks',
1122
- 'Optimise load balancing for tomorrow\'s forecast',
2601
+ "Optimise load balancing for tomorrow's forecast",
1123
2602
  'Generate a maintenance schedule for flagged assets',
1124
2603
  ],
1125
2604
  welcomeMessage: "Hello! I'm the Grid Operations team orchestrator. I coordinate four agents — Sensor Ingestion, Anomaly Detector, Failure Predictor, and Grid Balancer — to keep your grid running efficiently with predictive maintenance and intelligent load optimisation.\n",
@@ -1132,37 +2611,104 @@ export const OPTIMIZE_GRID_OPERATIONS_AGENT_SPEC_0_0_1 = {
1132
2611
  goal: `Process millions of IoT sensor data points from SCADA systems, smart meters, and renewable assets. Detect equipment anomalies in real time, predict failures 2–4 weeks in advance, and optimise grid load balancing across renewable and conventional sources to reduce unplanned downtime by 50%.`,
1133
2612
  protocol: 'vercel-ai',
1134
2613
  uiExtension: 'a2ui',
1135
- trigger: { "type": "schedule", "cron": "*/5 * * * *", "description": "Every 5 minutes for real-time grid monitoring and optimization", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
2614
+ trigger: {
2615
+ type: 'schedule',
2616
+ cron: '*/5 * * * *',
2617
+ description: 'Every 5 minutes for real-time grid monitoring and optimization',
2618
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
2619
+ },
1136
2620
  modelConfig: undefined,
1137
2621
  mcpServerTools: undefined,
1138
- guardrails: [{ "name": "Grid Operations Agent", "identity_provider": "datalayer", "identity_name": "grid-bot@acme.com", "permissions": { "read:data": true, "write:data": false, "execute:code": true, "access:internet": false, "send:email": true, "deploy:production": false }, "data_handling": { "pii_detection": false }, "approval_policy": { "require_manual_approval_for": ["Emergency load shedding recommendations", "Equipment shutdown orders", "Maintenance work orders above $50K"], "auto_approved": ["Sensor data ingestion and processing", "Anomaly detection and alerting", "Load balancing recommendations"] }, "token_limits": { "per_run": "60K", "per_day": "1M", "per_month": "15M" } }],
1139
- evals: [{ "name": "Anomaly Detection Accuracy", "category": "coding", "task_count": 600 }, { "name": "Failure Prediction Lead Time", "category": "reasoning", "task_count": 300 }, { "name": "Grid Stability Score", "category": "coding", "task_count": 200 }],
1140
- codemode: { "enabled": true, "token_reduction": "~95%", "speedup": "~3× faster" },
1141
- output: { "formats": ["Dashboard", "PDF", "JSON"], "template": "Grid Operations Report", "storage": "/outputs/grid-operations/" },
1142
- advanced: { "cost_limit": "$6.00 per run", "time_limit": "600 seconds", "max_iterations": 40, "validation": "All sensor readings must be validated against equipment specifications. Failure predictions must include confidence intervals and risk scores.\n" },
2622
+ guardrails: [
2623
+ {
2624
+ name: 'Grid Operations Agent',
2625
+ identity_provider: 'datalayer',
2626
+ identity_name: 'grid-bot@acme.com',
2627
+ permissions: {
2628
+ 'read:data': true,
2629
+ 'write:data': false,
2630
+ 'execute:code': true,
2631
+ 'access:internet': false,
2632
+ 'send:email': true,
2633
+ 'deploy:production': false,
2634
+ },
2635
+ data_handling: { pii_detection: false },
2636
+ approval_policy: {
2637
+ require_manual_approval_for: [
2638
+ 'Emergency load shedding recommendations',
2639
+ 'Equipment shutdown orders',
2640
+ 'Maintenance work orders above $50K',
2641
+ ],
2642
+ auto_approved: [
2643
+ 'Sensor data ingestion and processing',
2644
+ 'Anomaly detection and alerting',
2645
+ 'Load balancing recommendations',
2646
+ ],
2647
+ },
2648
+ token_limits: { per_run: '60K', per_day: '1M', per_month: '15M' },
2649
+ },
2650
+ ],
2651
+ evals: [
2652
+ { name: 'Anomaly Detection Accuracy', category: 'coding', task_count: 600 },
2653
+ {
2654
+ name: 'Failure Prediction Lead Time',
2655
+ category: 'reasoning',
2656
+ task_count: 300,
2657
+ },
2658
+ { name: 'Grid Stability Score', category: 'coding', task_count: 200 },
2659
+ ],
2660
+ codemode: { enabled: true, token_reduction: '~95%', speedup: '~3× faster' },
2661
+ output: {
2662
+ formats: ['Dashboard', 'PDF', 'JSON'],
2663
+ template: 'Grid Operations Report',
2664
+ storage: '/outputs/grid-operations/',
2665
+ },
2666
+ advanced: {
2667
+ cost_limit: '$6.00 per run',
2668
+ time_limit: '600 seconds',
2669
+ max_iterations: 40,
2670
+ validation: 'All sensor readings must be validated against equipment specifications. Failure predictions must include confidence intervals and risk scores.\n',
2671
+ },
1143
2672
  authorizationPolicy: '',
1144
- notifications: { "email": "grid-ops@company.com", "slack": "#grid-operations" },
2673
+ notifications: { email: 'grid-ops@company.com', slack: '#grid-operations' },
1145
2674
  memory: 'ephemeral',
2675
+ preHooks: undefined,
2676
+ postHooks: undefined,
2677
+ parameters: undefined,
2678
+ subagents: undefined,
1146
2679
  };
1147
2680
  export const PROCESS_CITIZEN_REQUESTS_AGENT_SPEC_0_0_1 = {
1148
2681
  id: 'process-citizen-requests',
1149
2682
  version: '0.0.1',
1150
2683
  name: 'Process Citizen Requests',
1151
2684
  description: `A multi-agent team that automates citizen request processing for government agencies. Classifies and triages permits, FOIA requests, and benefit claims from multiple channels. Models policy impacts across population datasets and ensures every automated decision is explainable, auditable, and compliant with transparency mandates.`,
1152
- tags: ['government', 'public-sector', 'civic', 'policy', 'compliance', 'transparency'],
2685
+ tags: [
2686
+ 'government',
2687
+ 'public-sector',
2688
+ 'civic',
2689
+ 'policy',
2690
+ 'compliance',
2691
+ 'transparency',
2692
+ ],
1153
2693
  enabled: false,
1154
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
2694
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1155
2695
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
1156
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
2696
+ skills: [
2697
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
2698
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2699
+ ],
1157
2700
  tools: [],
1158
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2701
+ frontendTools: [
2702
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2703
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2704
+ ],
1159
2705
  environmentName: 'ai-agents-env',
1160
2706
  icon: 'organization',
1161
2707
  emoji: '🏛️',
1162
2708
  color: '#0550ae',
1163
2709
  suggestions: [
1164
- 'Show today\'s citizen request intake summary',
1165
- 'What\'s the current processing backlog by type?',
2710
+ "Show today's citizen request intake summary",
2711
+ "What's the current processing backlog by type?",
1166
2712
  'Run a policy impact simulation for the proposed zoning change',
1167
2713
  'Generate a transparency report for this quarter',
1168
2714
  'Which requests are overdue for response?',
@@ -1177,30 +2723,106 @@ export const PROCESS_CITIZEN_REQUESTS_AGENT_SPEC_0_0_1 = {
1177
2723
  goal: `Process citizen requests from web portals, email, and scanned documents. Classify by type, urgency, and jurisdiction, route to appropriate departments, model policy impacts across population datasets with Monte Carlo simulation, and generate explainable, auditable decision documentation for public record.`,
1178
2724
  protocol: 'vercel-ai',
1179
2725
  uiExtension: 'a2ui',
1180
- trigger: { "type": "event", "description": "Triggered on new citizen request submission from any channel", "prompt": "Handle this event trigger: Triggered on new citizen request submission from any channel" },
2726
+ trigger: {
2727
+ type: 'event',
2728
+ description: 'Triggered on new citizen request submission from any channel',
2729
+ prompt: 'Handle this event trigger: Triggered on new citizen request submission from any channel',
2730
+ },
1181
2731
  modelConfig: undefined,
1182
2732
  mcpServerTools: undefined,
1183
- guardrails: [{ "name": "Government Services Agent", "identity_provider": "datalayer", "identity_name": "civic-bot@agency.gov", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": false, "send:email": true, "deploy:production": false }, "data_scope": { "denied_fields": ["*SSN*", "*TaxId*", "*BankAccount*", "*CreditCard*"] }, "data_handling": { "pii_detection": true, "pii_action": "redact", "default_aggregation": true }, "approval_policy": { "require_manual_approval_for": ["Benefit denial decisions", "Policy recommendations affecting more than 1,000 citizens", "Any FOIA response containing redacted content", "Escalations to elected officials"], "auto_approved": ["Request classification and triage", "Standard permit processing", "Aggregated statistics and reporting"] }, "token_limits": { "per_run": "40K", "per_day": "400K", "per_month": "5M" } }],
1184
- evals: [{ "name": "Classification Accuracy", "category": "reasoning", "task_count": 500 }, { "name": "Processing Time Reduction", "category": "coding", "task_count": 300 }, { "name": "Transparency Compliance Score", "category": "safety", "task_count": 200 }],
1185
- codemode: { "enabled": true, "token_reduction": "~85%", "speedup": "~2× faster" },
1186
- output: { "formats": ["PDF", "JSON", "Dashboard"], "template": "Citizen Services Report", "storage": "/outputs/citizen-requests/" },
1187
- advanced: { "cost_limit": "$4.00 per run", "time_limit": "300 seconds", "max_iterations": 30, "validation": "All automated decisions must include human-readable explanations. Every action must be logged with timestamps for FOIA compliance.\n" },
2733
+ guardrails: [
2734
+ {
2735
+ name: 'Government Services Agent',
2736
+ identity_provider: 'datalayer',
2737
+ identity_name: 'civic-bot@agency.gov',
2738
+ permissions: {
2739
+ 'read:data': true,
2740
+ 'write:data': true,
2741
+ 'execute:code': true,
2742
+ 'access:internet': false,
2743
+ 'send:email': true,
2744
+ 'deploy:production': false,
2745
+ },
2746
+ data_scope: {
2747
+ denied_fields: ['*SSN*', '*TaxId*', '*BankAccount*', '*CreditCard*'],
2748
+ },
2749
+ data_handling: {
2750
+ pii_detection: true,
2751
+ pii_action: 'redact',
2752
+ default_aggregation: true,
2753
+ },
2754
+ approval_policy: {
2755
+ require_manual_approval_for: [
2756
+ 'Benefit denial decisions',
2757
+ 'Policy recommendations affecting more than 1,000 citizens',
2758
+ 'Any FOIA response containing redacted content',
2759
+ 'Escalations to elected officials',
2760
+ ],
2761
+ auto_approved: [
2762
+ 'Request classification and triage',
2763
+ 'Standard permit processing',
2764
+ 'Aggregated statistics and reporting',
2765
+ ],
2766
+ },
2767
+ token_limits: { per_run: '40K', per_day: '400K', per_month: '5M' },
2768
+ },
2769
+ ],
2770
+ evals: [
2771
+ { name: 'Classification Accuracy', category: 'reasoning', task_count: 500 },
2772
+ { name: 'Processing Time Reduction', category: 'coding', task_count: 300 },
2773
+ {
2774
+ name: 'Transparency Compliance Score',
2775
+ category: 'safety',
2776
+ task_count: 200,
2777
+ },
2778
+ ],
2779
+ codemode: { enabled: true, token_reduction: '~85%', speedup: '~2× faster' },
2780
+ output: {
2781
+ formats: ['PDF', 'JSON', 'Dashboard'],
2782
+ template: 'Citizen Services Report',
2783
+ storage: '/outputs/citizen-requests/',
2784
+ },
2785
+ advanced: {
2786
+ cost_limit: '$4.00 per run',
2787
+ time_limit: '300 seconds',
2788
+ max_iterations: 30,
2789
+ validation: 'All automated decisions must include human-readable explanations. Every action must be logged with timestamps for FOIA compliance.\n',
2790
+ },
1188
2791
  authorizationPolicy: '',
1189
- notifications: { "email": "citizen-services@agency.gov", "slack": "#citizen-services" },
2792
+ notifications: {
2793
+ email: 'citizen-services@agency.gov',
2794
+ slack: '#citizen-services',
2795
+ },
1190
2796
  memory: 'ephemeral',
2797
+ preHooks: undefined,
2798
+ postHooks: undefined,
2799
+ parameters: undefined,
2800
+ subagents: undefined,
1191
2801
  };
1192
2802
  export const PROCESS_CLINICAL_TRIAL_DATA_AGENT_SPEC_0_0_1 = {
1193
2803
  id: 'process-clinical-trial-data',
1194
2804
  version: '0.0.1',
1195
2805
  name: 'Process Clinical Trial Data',
1196
2806
  description: `A multi-agent team that automates clinical trial data processing across dozens of trial sites. Harmonises patient records and lab results to CDISC SDTM format, detects safety signals and adverse events in real time, and prepares submission-ready datasets — all with strict HIPAA and GxP compliance guardrails.`,
1197
- tags: ['healthcare', 'pharma', 'clinical-trials', 'patient-data', 'compliance'],
2807
+ tags: [
2808
+ 'healthcare',
2809
+ 'pharma',
2810
+ 'clinical-trials',
2811
+ 'patient-data',
2812
+ 'compliance',
2813
+ ],
1198
2814
  enabled: false,
1199
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
2815
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1200
2816
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
1201
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
2817
+ skills: [
2818
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
2819
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2820
+ ],
1202
2821
  tools: [],
1203
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2822
+ frontendTools: [
2823
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2824
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2825
+ ],
1204
2826
  environmentName: 'ai-agents-env',
1205
2827
  icon: 'heart',
1206
2828
  emoji: '🏥',
@@ -1222,30 +2844,108 @@ export const PROCESS_CLINICAL_TRIAL_DATA_AGENT_SPEC_0_0_1 = {
1222
2844
  goal: `Process clinical trial data from multiple sites: ingest patient records and lab results, harmonise to CDISC SDTM format with MedDRA coding, screen for adverse events and safety signals in real time, and prepare submission-ready datasets with full validation and audit trails.`,
1223
2845
  protocol: 'vercel-ai',
1224
2846
  uiExtension: 'a2ui',
1225
- trigger: { "type": "event", "description": "Triggered on new data batch arrival from clinical sites", "prompt": "Handle this event trigger: Triggered on new data batch arrival from clinical sites" },
2847
+ trigger: {
2848
+ type: 'event',
2849
+ description: 'Triggered on new data batch arrival from clinical sites',
2850
+ prompt: 'Handle this event trigger: Triggered on new data batch arrival from clinical sites',
2851
+ },
1226
2852
  modelConfig: undefined,
1227
2853
  mcpServerTools: undefined,
1228
- guardrails: [{ "name": "HIPAA Compliant Clinical Agent", "identity_provider": "datalayer", "identity_name": "clinical-bot@acme.com", "permissions": { "read:data": true, "write:data": false, "execute:code": true, "access:internet": false, "send:email": false, "deploy:production": false }, "data_scope": { "denied_fields": ["*SSN*", "*PatientName*", "*DateOfBirth*", "*Address*", "*Phone*", "*Email*"] }, "data_handling": { "pii_detection": true, "pii_action": "redact", "default_aggregation": true }, "approval_policy": { "require_manual_approval_for": ["Any serious adverse event (SAE) escalation", "Patient-level data exports", "Safety signal notifications to regulators"], "auto_approved": ["Aggregated site-level statistics", "SDTM dataset transformations"] }, "token_limits": { "per_run": "80K", "per_day": "500K", "per_month": "5M" } }],
1229
- evals: [{ "name": "SDTM Mapping Accuracy", "category": "coding", "task_count": 500 }, { "name": "Adverse Event Detection Rate", "category": "safety", "task_count": 300 }, { "name": "Data Quality Score", "category": "reasoning", "task_count": 200 }],
1230
- codemode: { "enabled": true, "token_reduction": "~95%", "speedup": "~3× faster" },
1231
- output: { "formats": ["SDTM Dataset", "PDF", "Define.xml"], "template": "Clinical Trial Data Package", "storage": "/outputs/clinical-trials/" },
1232
- advanced: { "cost_limit": "$8.00 per run", "time_limit": "900 seconds", "max_iterations": 50, "validation": "All datasets must pass CDISC SDTM validation rules. PHI must never be sent through the LLM — all patient data processed via Codemode only.\n" },
2854
+ guardrails: [
2855
+ {
2856
+ name: 'HIPAA Compliant Clinical Agent',
2857
+ identity_provider: 'datalayer',
2858
+ identity_name: 'clinical-bot@acme.com',
2859
+ permissions: {
2860
+ 'read:data': true,
2861
+ 'write:data': false,
2862
+ 'execute:code': true,
2863
+ 'access:internet': false,
2864
+ 'send:email': false,
2865
+ 'deploy:production': false,
2866
+ },
2867
+ data_scope: {
2868
+ denied_fields: [
2869
+ '*SSN*',
2870
+ '*PatientName*',
2871
+ '*DateOfBirth*',
2872
+ '*Address*',
2873
+ '*Phone*',
2874
+ '*Email*',
2875
+ ],
2876
+ },
2877
+ data_handling: {
2878
+ pii_detection: true,
2879
+ pii_action: 'redact',
2880
+ default_aggregation: true,
2881
+ },
2882
+ approval_policy: {
2883
+ require_manual_approval_for: [
2884
+ 'Any serious adverse event (SAE) escalation',
2885
+ 'Patient-level data exports',
2886
+ 'Safety signal notifications to regulators',
2887
+ ],
2888
+ auto_approved: [
2889
+ 'Aggregated site-level statistics',
2890
+ 'SDTM dataset transformations',
2891
+ ],
2892
+ },
2893
+ token_limits: { per_run: '80K', per_day: '500K', per_month: '5M' },
2894
+ },
2895
+ ],
2896
+ evals: [
2897
+ { name: 'SDTM Mapping Accuracy', category: 'coding', task_count: 500 },
2898
+ {
2899
+ name: 'Adverse Event Detection Rate',
2900
+ category: 'safety',
2901
+ task_count: 300,
2902
+ },
2903
+ { name: 'Data Quality Score', category: 'reasoning', task_count: 200 },
2904
+ ],
2905
+ codemode: { enabled: true, token_reduction: '~95%', speedup: '~3× faster' },
2906
+ output: {
2907
+ formats: ['SDTM Dataset', 'PDF', 'Define.xml'],
2908
+ template: 'Clinical Trial Data Package',
2909
+ storage: '/outputs/clinical-trials/',
2910
+ },
2911
+ advanced: {
2912
+ cost_limit: '$8.00 per run',
2913
+ time_limit: '900 seconds',
2914
+ max_iterations: 50,
2915
+ validation: 'All datasets must pass CDISC SDTM validation rules. PHI must never be sent through the LLM — all patient data processed via Codemode only.\n',
2916
+ },
1233
2917
  authorizationPolicy: '',
1234
- notifications: { "email": "clinical-ops@company.com", "slack": "#clinical-data" },
2918
+ notifications: { email: 'clinical-ops@company.com', slack: '#clinical-data' },
1235
2919
  memory: 'ephemeral',
2920
+ preHooks: undefined,
2921
+ postHooks: undefined,
2922
+ parameters: undefined,
2923
+ subagents: undefined,
1236
2924
  };
1237
2925
  export const PROCESS_FINANCIAL_TRANSACTIONS_AGENT_SPEC_0_0_1 = {
1238
2926
  id: 'process-financial-transactions',
1239
2927
  version: '0.0.1',
1240
2928
  name: 'Process Financial Transactions',
1241
2929
  description: `Processes and validates financial transactions across accounts. Reconciles balances, detects anomalies, enforces compliance rules, and generates audit-ready transaction reports.`,
1242
- tags: ['moderation', 'finance', 'transactions', 'compliance', 'reconciliation'],
2930
+ tags: [
2931
+ 'moderation',
2932
+ 'finance',
2933
+ 'transactions',
2934
+ 'compliance',
2935
+ 'reconciliation',
2936
+ ],
1243
2937
  enabled: false,
1244
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
2938
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1245
2939
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
1246
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
2940
+ skills: [
2941
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
2942
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
2943
+ ],
1247
2944
  tools: [],
1248
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
2945
+ frontendTools: [
2946
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
2947
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
2948
+ ],
1249
2949
  environmentName: 'ai-agents-env',
1250
2950
  icon: 'credit-card',
1251
2951
  emoji: '💳',
@@ -1266,17 +2966,65 @@ export const PROCESS_FINANCIAL_TRANSACTIONS_AGENT_SPEC_0_0_1 = {
1266
2966
  goal: `Process and validate incoming financial transaction batches. Reconcile balances across accounts, run AML compliance checks, flag suspicious transactions for human review, and generate audit-ready reports.`,
1267
2967
  protocol: 'vercel-ai',
1268
2968
  uiExtension: 'a2ui',
1269
- trigger: { "type": "event", "description": "Triggered on new transaction batch arrival", "prompt": "Handle this event trigger: Triggered on new transaction batch arrival" },
1270
- modelConfig: { "temperature": 0.1, "max_tokens": 4096 },
1271
- mcpServerTools: [{ "server": "Transaction Ledger", "tools": [{ "name": "fetch_transactions", "approval": "auto" }, { "name": "validate_transaction", "approval": "auto" }, { "name": "flag_suspicious", "approval": "manual" }, { "name": "reconcile_balances", "approval": "auto" }] }, { "server": "Compliance Engine", "tools": [{ "name": "check_aml_rules", "approval": "auto" }, { "name": "generate_sar", "approval": "manual" }] }],
1272
- guardrails: [{ "name": "Financial Data Handler", "identity_provider": "datalayer", "identity_name": "finance-bot@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": false, "send:email": false, "deploy:production": false }, "token_limits": { "per_run": "30K", "per_day": "300K", "per_month": "3M" } }],
1273
- evals: [{ "name": "Transaction Accuracy", "category": "coding", "task_count": 500 }, { "name": "AML Detection Rate", "category": "safety", "task_count": 200 }],
1274
- codemode: { "enabled": true, "token_reduction": "~85%", "speedup": "~1.5× faster" },
1275
- output: { "type": "PDF", "template": "transaction_audit_report.pdf" },
1276
- advanced: { "cost_limit": "$3.00 per run", "time_limit": "600 seconds", "max_iterations": 30, "validation": "All transactions must reconcile to zero net balance" },
2969
+ trigger: {
2970
+ type: 'event',
2971
+ description: 'Triggered on new transaction batch arrival',
2972
+ prompt: 'Handle this event trigger: Triggered on new transaction batch arrival',
2973
+ },
2974
+ modelConfig: { temperature: 0.1, max_tokens: 4096 },
2975
+ mcpServerTools: [
2976
+ {
2977
+ server: 'Transaction Ledger',
2978
+ tools: [
2979
+ { name: 'fetch_transactions', approval: 'auto' },
2980
+ { name: 'validate_transaction', approval: 'auto' },
2981
+ { name: 'flag_suspicious', approval: 'manual' },
2982
+ { name: 'reconcile_balances', approval: 'auto' },
2983
+ ],
2984
+ },
2985
+ {
2986
+ server: 'Compliance Engine',
2987
+ tools: [
2988
+ { name: 'check_aml_rules', approval: 'auto' },
2989
+ { name: 'generate_sar', approval: 'manual' },
2990
+ ],
2991
+ },
2992
+ ],
2993
+ guardrails: [
2994
+ {
2995
+ name: 'Financial Data Handler',
2996
+ identity_provider: 'datalayer',
2997
+ identity_name: 'finance-bot@acme.com',
2998
+ permissions: {
2999
+ 'read:data': true,
3000
+ 'write:data': true,
3001
+ 'execute:code': true,
3002
+ 'access:internet': false,
3003
+ 'send:email': false,
3004
+ 'deploy:production': false,
3005
+ },
3006
+ token_limits: { per_run: '30K', per_day: '300K', per_month: '3M' },
3007
+ },
3008
+ ],
3009
+ evals: [
3010
+ { name: 'Transaction Accuracy', category: 'coding', task_count: 500 },
3011
+ { name: 'AML Detection Rate', category: 'safety', task_count: 200 },
3012
+ ],
3013
+ codemode: { enabled: true, token_reduction: '~85%', speedup: '~1.5× faster' },
3014
+ output: { type: 'PDF', template: 'transaction_audit_report.pdf' },
3015
+ advanced: {
3016
+ cost_limit: '$3.00 per run',
3017
+ time_limit: '600 seconds',
3018
+ max_iterations: 30,
3019
+ validation: 'All transactions must reconcile to zero net balance',
3020
+ },
1277
3021
  authorizationPolicy: '',
1278
- notifications: { "email": "david.t@company.com", "slack": "#finance-ops" },
3022
+ notifications: { email: 'david.t@company.com', slack: '#finance-ops' },
1279
3023
  memory: 'ephemeral',
3024
+ preHooks: undefined,
3025
+ postHooks: undefined,
3026
+ parameters: undefined,
3027
+ subagents: undefined,
1280
3028
  };
1281
3029
  export const SPATIAL_DATA_ANALYSIS_AGENT_SPEC_0_0_1 = {
1282
3030
  id: 'spatial-data-analysis',
@@ -1286,10 +3034,17 @@ export const SPATIAL_DATA_ANALYSIS_AGENT_SPEC_0_0_1 = {
1286
3034
  tags: ['geospatial', 'climate', 'earth-observation', 'analytics'],
1287
3035
  enabled: true,
1288
3036
  model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1289
- mcpServers: [MCP_SERVER_MAP['earthdata:0.0.1'], MCP_SERVER_MAP['eurus:0.0.1'], MCP_SERVER_MAP['filesystem:0.0.1']],
3037
+ mcpServers: [
3038
+ MCP_SERVER_MAP['earthdata:0.0.1'],
3039
+ MCP_SERVER_MAP['eurus:0.0.1'],
3040
+ MCP_SERVER_MAP['filesystem:0.0.1'],
3041
+ ],
1290
3042
  skills: [toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
1291
3043
  tools: [],
1292
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
3044
+ frontendTools: [
3045
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
3046
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
3047
+ ],
1293
3048
  environmentName: 'ai-agents-env',
1294
3049
  icon: 'globe',
1295
3050
  emoji: '🛰️',
@@ -1300,7 +3055,7 @@ export const SPATIAL_DATA_ANALYSIS_AGENT_SPEC_0_0_1 = {
1300
3055
  'Compare two regions for drought indicators and summarize differences',
1301
3056
  'Generate an event log for each processing step',
1302
3057
  ],
1303
- welcomeMessage: "Hello, I am the Spatial Data Analysis Agent. I can discover Earthdata datasets, run Eurus-powered spatial analyses, and generate reproducible outputs for geospatial investigations.\n",
3058
+ welcomeMessage: 'Hello, I am the Spatial Data Analysis Agent. I can discover Earthdata datasets, run Eurus-powered spatial analyses, and generate reproducible outputs for geospatial investigations.\n',
1304
3059
  welcomeNotebook: undefined,
1305
3060
  welcomeDocument: undefined,
1306
3061
  sandboxVariant: 'jupyter',
@@ -1311,7 +3066,7 @@ export const SPATIAL_DATA_ANALYSIS_AGENT_SPEC_0_0_1 = {
1311
3066
  ## Workflow Guidance 1. Discover available Earthdata and Eurus tools. 2. Validate spatial/temporal parameters before execution. 3. Execute transformations in code and keep outputs concise. 4. Persist important run states as events.
1312
3067
  `,
1313
3068
  goal: undefined,
1314
- protocol: 'vercel-ai',
3069
+ protocol: undefined,
1315
3070
  uiExtension: undefined,
1316
3071
  trigger: undefined,
1317
3072
  modelConfig: undefined,
@@ -1324,19 +3079,35 @@ export const SPATIAL_DATA_ANALYSIS_AGENT_SPEC_0_0_1 = {
1324
3079
  authorizationPolicy: undefined,
1325
3080
  notifications: undefined,
1326
3081
  memory: 'ephemeral',
3082
+ preHooks: undefined,
3083
+ postHooks: undefined,
3084
+ parameters: undefined,
3085
+ subagents: undefined,
1327
3086
  };
1328
3087
  export const SUMMARIZE_DOCUMENTS_AGENT_SPEC_0_0_1 = {
1329
3088
  id: 'summarize-documents',
1330
3089
  version: '0.0.1',
1331
3090
  name: 'Summarize Documents',
1332
3091
  description: `A generic document summarization agent that processes PDFs, Word files, Markdown, and plain text. Produces structured executive summaries with key findings, action items, and metadata extraction. Useful across every industry vertical — from legal contracts to research papers.`,
1333
- tags: ['documents', 'summarization', 'horizontal', 'automation', 'productivity'],
3092
+ tags: [
3093
+ 'documents',
3094
+ 'summarization',
3095
+ 'horizontal',
3096
+ 'automation',
3097
+ 'productivity',
3098
+ ],
1334
3099
  enabled: false,
1335
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
3100
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
1336
3101
  mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1']],
1337
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
3102
+ skills: [
3103
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
3104
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
3105
+ ],
1338
3106
  tools: [],
1339
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
3107
+ frontendTools: [
3108
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
3109
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
3110
+ ],
1340
3111
  environmentName: 'ai-agents-env',
1341
3112
  icon: 'file',
1342
3113
  emoji: '📄',
@@ -1351,17 +3122,66 @@ export const SUMMARIZE_DOCUMENTS_AGENT_SPEC_0_0_1 = {
1351
3122
  goal: `Summarize uploaded documents (PDFs, Word, Markdown, text) into structured executive summaries. Extract key findings, decisions, action items, dates, and named entities. Output a concise summary (max 500 words) plus metadata in JSON format.`,
1352
3123
  protocol: 'vercel-ai',
1353
3124
  uiExtension: 'a2ui',
1354
- trigger: { "type": "event", "event": "document_uploaded", "description": "Triggered when a new document is uploaded to the workspace", "prompt": "Handle the 'document_uploaded' event and execute the workflow end-to-end." },
1355
- modelConfig: { "temperature": 0.2, "max_tokens": 4096 },
1356
- mcpServerTools: [{ "server": "Document Reader", "tools": [{ "name": "read_pdf", "approval": "auto" }, { "name": "read_docx", "approval": "auto" }, { "name": "extract_text", "approval": "auto" }] }, { "server": "Output Writer", "tools": [{ "name": "write_summary", "approval": "auto" }, { "name": "store_metadata", "approval": "auto" }] }],
1357
- guardrails: [{ "name": "Default Platform User", "identity_provider": "datalayer", "identity_name": "doc-agent@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": false, "send:email": false, "deploy:production": false }, "token_limits": { "per_run": "30K", "per_day": "300K", "per_month": "3M" } }],
1358
- evals: [{ "name": "Summarization Accuracy", "category": "reasoning", "task_count": 350 }, { "name": "Key Finding Extraction", "category": "reasoning", "task_count": 280 }, { "name": "Action Item Detection", "category": "coding", "task_count": 200 }],
3125
+ trigger: {
3126
+ type: 'event',
3127
+ event: 'document_uploaded',
3128
+ description: 'Triggered when a new document is uploaded to the workspace',
3129
+ prompt: "Handle the 'document_uploaded' event and execute the workflow end-to-end.",
3130
+ },
3131
+ modelConfig: { temperature: 0.2, max_tokens: 4096 },
3132
+ mcpServerTools: [
3133
+ {
3134
+ server: 'Document Reader',
3135
+ tools: [
3136
+ { name: 'read_pdf', approval: 'auto' },
3137
+ { name: 'read_docx', approval: 'auto' },
3138
+ { name: 'extract_text', approval: 'auto' },
3139
+ ],
3140
+ },
3141
+ {
3142
+ server: 'Output Writer',
3143
+ tools: [
3144
+ { name: 'write_summary', approval: 'auto' },
3145
+ { name: 'store_metadata', approval: 'auto' },
3146
+ ],
3147
+ },
3148
+ ],
3149
+ guardrails: [
3150
+ {
3151
+ name: 'Default Platform User',
3152
+ identity_provider: 'datalayer',
3153
+ identity_name: 'doc-agent@acme.com',
3154
+ permissions: {
3155
+ 'read:data': true,
3156
+ 'write:data': true,
3157
+ 'execute:code': true,
3158
+ 'access:internet': false,
3159
+ 'send:email': false,
3160
+ 'deploy:production': false,
3161
+ },
3162
+ token_limits: { per_run: '30K', per_day: '300K', per_month: '3M' },
3163
+ },
3164
+ ],
3165
+ evals: [
3166
+ { name: 'Summarization Accuracy', category: 'reasoning', task_count: 350 },
3167
+ { name: 'Key Finding Extraction', category: 'reasoning', task_count: 280 },
3168
+ { name: 'Action Item Detection', category: 'coding', task_count: 200 },
3169
+ ],
1359
3170
  codemode: undefined,
1360
- output: { "type": "Markdown", "formats": ["Markdown", "JSON"], "template": "executive-summary-v1", "storage": "s3://acme-summaries/" },
3171
+ output: {
3172
+ type: 'Markdown',
3173
+ formats: ['Markdown', 'JSON'],
3174
+ template: 'executive-summary-v1',
3175
+ storage: 's3://acme-summaries/',
3176
+ },
1361
3177
  advanced: undefined,
1362
3178
  authorizationPolicy: undefined,
1363
- notifications: { "slack": "#document-summaries", "email": "team@acme.com" },
3179
+ notifications: { slack: '#document-summaries', email: 'team@acme.com' },
1364
3180
  memory: 'ephemeral',
3181
+ preHooks: undefined,
3182
+ postHooks: undefined,
3183
+ parameters: undefined,
3184
+ subagents: undefined,
1365
3185
  };
1366
3186
  export const SYNC_CRM_CONTACTS_AGENT_SPEC_0_0_1 = {
1367
3187
  id: 'sync-crm-contacts',
@@ -1370,11 +3190,20 @@ export const SYNC_CRM_CONTACTS_AGENT_SPEC_0_0_1 = {
1370
3190
  description: `A multi-agent team that collects and aggregates contact data from multiple CRM sources, analyzes and deduplicates records, writes cleaned data back, and generates sync summary reports.`,
1371
3191
  tags: ['sales', 'crm', 'data-sync', 'deduplication'],
1372
3192
  enabled: false,
1373
- model: 'bedrock:us.anthropic.claude-3-5-haiku-20241022-v1:0',
1374
- mcpServers: [MCP_SERVER_MAP['filesystem:0.0.1'], MCP_SERVER_MAP['slack:0.0.1']],
1375
- skills: [toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']), toAgentSkillSpec(SKILL_MAP['events:0.0.1'])],
3193
+ model: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0',
3194
+ mcpServers: [
3195
+ MCP_SERVER_MAP['filesystem:0.0.1'],
3196
+ MCP_SERVER_MAP['slack:0.0.1'],
3197
+ ],
3198
+ skills: [
3199
+ toAgentSkillSpec(SKILL_MAP['pdf:0.0.1']),
3200
+ toAgentSkillSpec(SKILL_MAP['events:0.0.1']),
3201
+ ],
1376
3202
  tools: [],
1377
- frontendTools: [FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'], FRONTEND_TOOL_MAP['lexical-document:0.0.1']],
3203
+ frontendTools: [
3204
+ FRONTEND_TOOL_MAP['jupyter-notebook:0.0.1'],
3205
+ FRONTEND_TOOL_MAP['lexical-document:0.0.1'],
3206
+ ],
1378
3207
  environmentName: 'ai-agents-env',
1379
3208
  icon: 'people',
1380
3209
  emoji: '🔄',
@@ -1395,17 +3224,53 @@ export const SYNC_CRM_CONTACTS_AGENT_SPEC_0_0_1 = {
1395
3224
  goal: `Collect and aggregate contact data from multiple CRM sources, analyze and deduplicate records, write cleaned data back to CRM systems, and generate sync summary reports with notifications.`,
1396
3225
  protocol: 'vercel-ai',
1397
3226
  uiExtension: 'a2ui',
1398
- trigger: { "type": "schedule", "cron": "0 2 * * *", "description": "Daily at 02:00 — sync CRM contacts across all sources during off-peak hours.\n", "prompt": "Run the scheduled workflow and produce the configured deliverable." },
3227
+ trigger: {
3228
+ type: 'schedule',
3229
+ cron: '0 2 * * *',
3230
+ description: 'Daily at 02:00 — sync CRM contacts across all sources during off-peak hours.\n',
3231
+ prompt: 'Run the scheduled workflow and produce the configured deliverable.',
3232
+ },
1399
3233
  modelConfig: undefined,
1400
3234
  mcpServerTools: undefined,
1401
- guardrails: [{ "name": "GitHub CI Bot", "identity_provider": "github", "identity_name": "ci-bot@acme.com", "permissions": { "read:data": true, "write:data": true, "execute:code": true, "access:internet": true, "send:email": true, "deploy:production": false }, "token_limits": { "per_run": "60K", "per_day": "600K", "per_month": "6M" } }],
1402
- evals: [{ "name": "Data Quality", "category": "coding", "task_count": 300 }, { "name": "Deduplication Accuracy", "category": "reasoning", "task_count": 150 }],
1403
- codemode: { "enabled": true, "token_reduction": "~85%", "speedup": "~1.5× faster" },
1404
- output: { "formats": ["JSON", "PDF"], "template": "CRM Sync Report", "storage": "/outputs/crm-sync/" },
1405
- advanced: { "cost_limit": "$10.00 per run", "time_limit": "600 seconds", "max_iterations": 100, "validation": "All CRM records must reconcile after sync" },
3235
+ guardrails: [
3236
+ {
3237
+ name: 'GitHub CI Bot',
3238
+ identity_provider: 'github',
3239
+ identity_name: 'ci-bot@acme.com',
3240
+ permissions: {
3241
+ 'read:data': true,
3242
+ 'write:data': true,
3243
+ 'execute:code': true,
3244
+ 'access:internet': true,
3245
+ 'send:email': true,
3246
+ 'deploy:production': false,
3247
+ },
3248
+ token_limits: { per_run: '60K', per_day: '600K', per_month: '6M' },
3249
+ },
3250
+ ],
3251
+ evals: [
3252
+ { name: 'Data Quality', category: 'coding', task_count: 300 },
3253
+ { name: 'Deduplication Accuracy', category: 'reasoning', task_count: 150 },
3254
+ ],
3255
+ codemode: { enabled: true, token_reduction: '~85%', speedup: '~1.5× faster' },
3256
+ output: {
3257
+ formats: ['JSON', 'PDF'],
3258
+ template: 'CRM Sync Report',
3259
+ storage: '/outputs/crm-sync/',
3260
+ },
3261
+ advanced: {
3262
+ cost_limit: '$10.00 per run',
3263
+ time_limit: '600 seconds',
3264
+ max_iterations: 100,
3265
+ validation: 'All CRM records must reconcile after sync',
3266
+ },
1406
3267
  authorizationPolicy: '',
1407
- notifications: { "email": "jennifer.c@company.com", "slack": "#crm-sync" },
3268
+ notifications: { email: 'jennifer.c@company.com', slack: '#crm-sync' },
1408
3269
  memory: 'ephemeral',
3270
+ preHooks: undefined,
3271
+ postHooks: undefined,
3272
+ parameters: undefined,
3273
+ subagents: undefined,
1409
3274
  };
1410
3275
  // ============================================================================
1411
3276
  // Agent Specs Registry
@@ -1417,16 +3282,26 @@ export const AGENT_SPECS = {
1417
3282
  'automate-regulatory-reporting': AUTOMATE_REGULATORY_REPORTING_AGENT_SPEC_0_0_1,
1418
3283
  'classify-route-emails': CLASSIFY_ROUTE_EMAILS_AGENT_SPEC_0_0_1,
1419
3284
  'comprehensive-sales-analytics': COMPREHENSIVE_SALES_ANALYTICS_AGENT_SPEC_0_0_1,
1420
- 'crawler': CRAWLER_AGENT_SPEC_0_0_1,
3285
+ crawler: CRAWLER_AGENT_SPEC_0_0_1,
1421
3286
  'data-acquisition': DATA_ACQUISITION_AGENT_SPEC_0_0_1,
3287
+ 'datalayer-agent': DATALAYER_AGENT_SPEC_0_0_1,
1422
3288
  'demo-full': DEMO_FULL_AGENT_SPEC_0_0_1,
3289
+ 'demo-guardrails': DEMO_GUARDRAILS_AGENT_SPEC_0_0_1,
3290
+ 'demo-hooks': DEMO_HOOKS_AGENT_SPEC_0_0_1,
3291
+ 'demo-mcp': DEMO_MCP_AGENT_SPEC_0_0_1,
3292
+ 'demo-monitoring': DEMO_MONITORING_AGENT_SPEC_0_0_1,
1423
3293
  'demo-one-trigger-approval': DEMO_ONE_TRIGGER_APPROVAL_AGENT_SPEC_0_0_1,
1424
3294
  'demo-one-trigger': DEMO_ONE_TRIGGER_AGENT_SPEC_0_0_1,
3295
+ 'demo-outputs': DEMO_OUTPUTS_AGENT_SPEC_0_0_1,
3296
+ 'demo-parameters': DEMO_PARAMETERS_AGENT_SPEC_0_0_1,
1425
3297
  'demo-simple': DEMO_SIMPLE_AGENT_SPEC_0_0_1,
3298
+ 'demo-subagents': DEMO_SUBAGENTS_AGENT_SPEC_0_0_1,
3299
+ 'demo-tavily-codemode': DEMO_TAVILY_CODEMODE_AGENT_SPEC_0_0_1,
3300
+ 'demo-tavily-no-codemode': DEMO_TAVILY_NO_CODEMODE_AGENT_SPEC_0_0_1,
1426
3301
  'end-of-month-sales-performance': END_OF_MONTH_SALES_PERFORMANCE_AGENT_SPEC_0_0_1,
1427
3302
  'extract-data-from-files': EXTRACT_DATA_FROM_FILES_AGENT_SPEC_0_0_1,
1428
3303
  'financial-viz': FINANCIAL_VIZ_AGENT_SPEC_0_0_1,
1429
- 'financial': FINANCIAL_AGENT_SPEC_0_0_1,
3304
+ financial: FINANCIAL_AGENT_SPEC_0_0_1,
1430
3305
  'generate-weekly-reports': GENERATE_WEEKLY_REPORTS_AGENT_SPEC_0_0_1,
1431
3306
  'github-agent': GITHUB_AGENT_SPEC_0_0_1,
1432
3307
  'information-routing': INFORMATION_ROUTING_AGENT_SPEC_0_0_1,
@@ -1464,7 +3339,9 @@ export function getAgentSpecs(agentId) {
1464
3339
  */
1465
3340
  export function listAgentSpecs(prefix) {
1466
3341
  const specs = Object.values(AGENT_SPECS);
1467
- return prefix !== undefined ? specs.filter(s => s.id.startsWith(prefix)) : specs;
3342
+ return prefix !== undefined
3343
+ ? specs.filter(s => s.id.startsWith(prefix))
3344
+ : specs;
1468
3345
  }
1469
3346
  /**
1470
3347
  * Collect all required environment variables for an agent spec.