@datalayer/agent-runtimes 1.3.10 → 1.3.11

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 (56) hide show
  1. package/lib/api/runtimes/environments.d.ts +22 -1
  2. package/lib/api/runtimes/environments.js +31 -0
  3. package/lib/chat/ChatFloating.d.ts +8 -1
  4. package/lib/chat/ChatFloating.js +5 -2
  5. package/lib/chat/display/ButtonGlow.d.ts +9 -0
  6. package/lib/chat/display/ButtonGlow.js +60 -0
  7. package/lib/chat/display/EmptyState.js +4 -1
  8. package/lib/chat/header/ChatHeaderBase.js +4 -56
  9. package/lib/chat/header/ChatViewModeToggle.d.ts +29 -0
  10. package/lib/chat/header/ChatViewModeToggle.js +55 -0
  11. package/lib/chat/index.d.ts +1 -0
  12. package/lib/chat/index.js +1 -0
  13. package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +8 -0
  14. package/lib/components/code-sandboxes/CodeSandboxLauncher.js +54 -5
  15. package/lib/components/code-sandboxes/codeSandboxEnvironments.d.ts +12 -1
  16. package/lib/components/code-sandboxes/codeSandboxEnvironments.js +38 -1
  17. package/lib/components/icons/ArtifactIcon.js +2 -1
  18. package/lib/examples/DecksAgent.d.ts +1 -1
  19. package/lib/examples/DecksAgent.js +1 -1
  20. package/lib/loop/core/index.d.ts +11 -2
  21. package/lib/loop/embed/LoopEmbed.js +6 -0
  22. package/lib/loop/plugins/chat/ChatView.js +14 -5
  23. package/lib/loop/plugins/page-layout/index.d.ts +36 -0
  24. package/lib/loop/plugins/page-layout/index.js +87 -7
  25. package/lib/loop/presets.d.ts +14 -0
  26. package/lib/loop/presets.js +3 -1
  27. package/lib/models/Deck.d.ts +14 -0
  28. package/lib/models/Deck.js +5 -0
  29. package/lib/models/Environment.d.ts +117 -0
  30. package/lib/models/ItemType.d.ts +1 -1
  31. package/lib/models/Runtime.d.ts +6 -0
  32. package/lib/models/SpaceItem.d.ts +2 -1
  33. package/lib/models/environments.generated.d.ts +29 -1
  34. package/lib/models/environments.generated.js +1 -1
  35. package/lib/models/index.d.ts +1 -0
  36. package/lib/models/index.js +1 -0
  37. package/lib/protocols/BrowserAgentAdapter.d.ts +9 -1
  38. package/lib/protocols/BrowserAgentAdapter.js +11 -4
  39. package/lib/runtimes/actions.d.ts +5 -0
  40. package/lib/runtimes/actions.js +19 -0
  41. package/lib/specs/agents/agents.d.ts +2 -1
  42. package/lib/specs/agents/agents.js +314 -130
  43. package/lib/specs/frontendTools.d.ts +1 -0
  44. package/lib/specs/frontendTools.js +31 -0
  45. package/lib/specs/mcpServers.js +13 -13
  46. package/lib/specs/models.js +4 -4
  47. package/lib/specs/outputs.js +9 -0
  48. package/lib/specs/skills.js +7 -7
  49. package/lib/specs/teams/teams.js +1 -1
  50. package/lib/types/outputs.d.ts +2 -0
  51. package/package.json +1 -1
  52. package/scripts/codegen/generate_mcp_servers.py +2 -2
  53. package/scripts/codegen/generate_outputs.py +2 -0
  54. package/scripts/codegen/generate_skills.py +2 -2
  55. package/scripts/codegen/__pycache__/compose.cpython-313.pyc +0 -0
  56. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
@@ -11,6 +11,7 @@ export * from './CodeSandboxSnapshot';
11
11
  export * from './CodeSandboxSnapshotDTO';
12
12
  export * from './Content';
13
13
  export * from './Course';
14
+ export * from './Deck';
14
15
  export * from './Document';
15
16
  export * from './Environment';
16
17
  export * from './EnvironmentDTO';
@@ -102,7 +102,14 @@ export declare class BrowserAgentAdapter extends BaseProtocolAdapter {
102
102
  * it and a host should not have to know which adapter it is holding.
103
103
  */
104
104
  sendToolResult(): Promise<void>;
105
- /** The model this agent asks, resolved once per request. */
105
+ /**
106
+ * The model this agent asks, resolved once per request.
107
+ *
108
+ * The chat's model menu sends its choice with each message, as it does to
109
+ * a server-side harness; here it names the model the inference service is
110
+ * asked for, over the one the agent was built with. A ready-made
111
+ * `languageModel` is the host's own choice and is not swapped out.
112
+ */
106
113
  private resolveModel;
107
114
  /**
108
115
  * Run one turn of the loop and report it as it happens.
@@ -113,5 +120,6 @@ export declare class BrowserAgentAdapter extends BaseProtocolAdapter {
113
120
  */
114
121
  sendMessage(message: ChatMessage, options?: {
115
122
  messages?: ChatMessage[];
123
+ model?: string;
116
124
  }): Promise<void>;
117
125
  }
@@ -122,8 +122,15 @@ export class BrowserAgentAdapter extends BaseProtocolAdapter {
122
122
  * it and a host should not have to know which adapter it is holding.
123
123
  */
124
124
  async sendToolResult() { }
125
- /** The model this agent asks, resolved once per request. */
126
- resolveModel() {
125
+ /**
126
+ * The model this agent asks, resolved once per request.
127
+ *
128
+ * The chat's model menu sends its choice with each message, as it does to
129
+ * a server-side harness; here it names the model the inference service is
130
+ * asked for, over the one the agent was built with. A ready-made
131
+ * `languageModel` is the host's own choice and is not swapped out.
132
+ */
133
+ resolveModel(requested) {
127
134
  const { languageModel, inference, model } = this.browserConfig;
128
135
  if (languageModel) {
129
136
  return languageModel;
@@ -131,7 +138,7 @@ export class BrowserAgentAdapter extends BaseProtocolAdapter {
131
138
  if (!inference) {
132
139
  throw new Error('A browser agent needs either a `languageModel` or an `inference` endpoint to reach one.');
133
140
  }
134
- return createBrowserModel({ ...inference, model });
141
+ return createBrowserModel({ ...inference, model: requested || model });
135
142
  }
136
143
  /**
137
144
  * Run one turn of the loop and report it as it happens.
@@ -188,7 +195,7 @@ export class BrowserAgentAdapter extends BaseProtocolAdapter {
188
195
  };
189
196
  try {
190
197
  const result = streamText({
191
- model: this.resolveModel(),
198
+ model: this.resolveModel(options?.model),
192
199
  system: this.browserConfig.instructions,
193
200
  messages: history,
194
201
  tools: this.tools,
@@ -12,6 +12,11 @@ export declare function createRuntime(options: IRuntimeOptions): Promise<IRuntim
12
12
  * Get the Runtimes.
13
13
  */
14
14
  export declare function getRuntimes(): Promise<IRuntimeRecord[]>;
15
+ /**
16
+ * One runtime as the platform answers it now — why its pod waits included —
17
+ * or `null` when there is none by that uid (E2-19).
18
+ */
19
+ export declare function getRuntimeRecord(id: string): Promise<IRuntimeRecord | null>;
15
20
  /**
16
21
  * Delete a Runtime
17
22
  */
@@ -109,6 +109,25 @@ export async function getRuntimes() {
109
109
  }
110
110
  return data.runtimes ?? [];
111
111
  }
112
+ /**
113
+ * One runtime as the platform answers it now — why its pod waits included —
114
+ * or `null` when there is none by that uid (E2-19).
115
+ */
116
+ export async function getRuntimeRecord(id) {
117
+ try {
118
+ const data = await requestDatalayerAPI({
119
+ url: runtimeUrl(runtimesStore.getState().runtimesUrl, id),
120
+ token: iamStore.getState().token,
121
+ });
122
+ return data.runtime ?? null;
123
+ }
124
+ catch (error) {
125
+ if (error.response?.status === 404) {
126
+ return null;
127
+ }
128
+ throw error;
129
+ }
130
+ }
112
131
  /**
113
132
  * Delete a Runtime
114
133
  */
@@ -26,6 +26,7 @@ export declare const EXAMPLE_CODEMODE_AGENTSPEC_0_0_1: Agentspec;
26
26
  export declare const EXAMPLE_COMPACTION_AGENTSPEC_0_0_1: Agentspec;
27
27
  export declare const EXAMPLE_COMPARE_TWO_SPREADSHEETS_AGENTSPEC_0_0_1: Agentspec;
28
28
  export declare const EXAMPLE_COST_COMPARISON_REPORT_AGENTSPEC_0_0_1: Agentspec;
29
+ export declare const EXAMPLE_DECKS_AGENTSPEC_0_0_1: Agentspec;
29
30
  export declare const EXAMPLE_DOCUMENT_AGENT_SIDEBAR_AGENTSPEC_0_0_1: Agentspec;
30
31
  export declare const EXAMPLE_DOCUMENT_AGENT_SPEC_0_0_1: Agentspec;
31
32
  export declare const EXAMPLE_EVALS_NOCODEMODE_AGENTSPEC_0_0_1: Agentspec;
@@ -109,7 +110,6 @@ export declare const WORKER_CURTAILMENT_INVESTIGATOR_AGENTSPEC_0_0_1: Agentspec;
109
110
  export declare const WORKER_CUSTOMER_CHURN_ANALYSIS_AGENTSPEC_0_0_1: Agentspec;
110
111
  export declare const WORKER_CUSTOMER_INTERVIEWER_AGENTSPEC_0_0_1: Agentspec;
111
112
  export declare const WORKER_DATA_ACQUISITION_AGENTSPEC_0_0_1: Agentspec;
112
- export declare const WORKER_DECKS_AGENTSPEC_0_0_1: Agentspec;
113
113
  export declare const WORKER_DISASTER_ASSESSMENT_AGENTSPEC_0_0_1: Agentspec;
114
114
  export declare const WORKER_DOCUMENT_QA_AGENTSPEC_0_0_1: Agentspec;
115
115
  export declare const WORKER_END_OF_MONTH_PERFORMANCE_AGENTSPEC_0_0_1: Agentspec;
@@ -144,6 +144,7 @@ export declare const WORKER_OPTIMIZE_GRID_OPERATIONS_AGENTSPEC_0_0_1: Agentspec;
144
144
  export declare const WORKER_OPTIMIZE_SQL_QUERY_PERFORMANCE_AGENTSPEC_0_0_1: Agentspec;
145
145
  export declare const WORKER_PERFORMANCE_ATTRIBUTION_AGENTSPEC_0_0_1: Agentspec;
146
146
  export declare const WORKER_PIPELINE_DEBUGGER_AGENTSPEC_0_0_1: Agentspec;
147
+ export declare const WORKER_PITCHER_AGENTSPEC_0_0_1: Agentspec;
147
148
  export declare const WORKER_PORTFOLIO_ACCUMULATION_AGENTSPEC_0_0_1: Agentspec;
148
149
  export declare const WORKER_PORTFOLIO_RISK_AGENTSPEC_0_0_1: Agentspec;
149
150
  export declare const WORKER_PREDICTIVE_MAINTENANCE_AGENTSPEC_0_0_1: Agentspec;
@@ -5,7 +5,7 @@
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, HUGGINGFACE_MCP_SERVER_0_0_1, KAGGLE_MCP_SERVER_0_0_1, ODOO_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
6
  import { ACCOUNTING_SKILL_SPEC_0_0_1, 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';
7
7
  import { EXAMPLE_CREATE_PLAN_TOOL_SPEC_0_0_1, EXAMPLE_CURRENT_TIME_TOOL_SPEC_0_0_1, EXAMPLE_DISPLAY_RECIPE_TOOL_SPEC_0_0_1, EXAMPLE_GENERATE_HAIKU_TOOL_SPEC_0_0_1, EXAMPLE_GENERATE_TASK_STEPS_TOOL_SPEC_0_0_1, EXAMPLE_GET_WEATHER_TOOL_SPEC_0_0_1, EXAMPLE_RENDER_A2UI_SURFACE_TOOL_SPEC_0_0_1, EXAMPLE_UPDATE_PLAN_STEP_TOOL_SPEC_0_0_1, 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
- import { JUPYTER_NOTEBOOK_EDIT_FRONTEND_TOOL_SPEC_0_0_1, JUPYTER_NOTEBOOK_PROPOSE_FRONTEND_TOOL_SPEC_0_0_1, JUPYTER_NOTEBOOK_READ_FRONTEND_TOOL_SPEC_0_0_1, JUPYTER_NOTEBOOK_FRONTEND_TOOL_SPEC_0_0_1, LEXICAL_DOCUMENT_FRONTEND_TOOL_SPEC_0_0_1, } from '../frontendTools';
8
+ import { DECKS_FRONTEND_TOOL_SPEC_0_0_1, JUPYTER_NOTEBOOK_EDIT_FRONTEND_TOOL_SPEC_0_0_1, JUPYTER_NOTEBOOK_PROPOSE_FRONTEND_TOOL_SPEC_0_0_1, JUPYTER_NOTEBOOK_READ_FRONTEND_TOOL_SPEC_0_0_1, JUPYTER_NOTEBOOK_FRONTEND_TOOL_SPEC_0_0_1, LEXICAL_DOCUMENT_FRONTEND_TOOL_SPEC_0_0_1, } from '../frontendTools';
9
9
  // ============================================================================
10
10
  // MCP Server Lookup
11
11
  // ============================================================================
@@ -98,6 +98,8 @@ const TOOL_MAP = {
98
98
  * Map frontend tool IDs to FrontendToolSpec objects.
99
99
  */
100
100
  const FRONTEND_TOOL_MAP = {
101
+ 'decks:0.0.1': DECKS_FRONTEND_TOOL_SPEC_0_0_1,
102
+ decks: DECKS_FRONTEND_TOOL_SPEC_0_0_1,
101
103
  'jupyter-notebook-edit:0.0.1': JUPYTER_NOTEBOOK_EDIT_FRONTEND_TOOL_SPEC_0_0_1,
102
104
  'jupyter-notebook-edit': JUPYTER_NOTEBOOK_EDIT_FRONTEND_TOOL_SPEC_0_0_1,
103
105
  'jupyter-notebook-propose:0.0.1': JUPYTER_NOTEBOOK_PROPOSE_FRONTEND_TOOL_SPEC_0_0_1,
@@ -1401,6 +1403,138 @@ export const EXAMPLE_COST_COMPARISON_REPORT_AGENTSPEC_0_0_1 = {
1401
1403
  parameters: undefined,
1402
1404
  subagents: undefined,
1403
1405
  };
1406
+ export const EXAMPLE_DECKS_AGENTSPEC_0_0_1 = {
1407
+ id: 'example-decks',
1408
+ version: '0.0.1',
1409
+ name: 'Decks',
1410
+ description: `Writes presentations as data and drives them on screen: drafts a deck from a brief, edits one you have, and steps through it while you talk.`,
1411
+ tags: [
1412
+ 'personal-assistant',
1413
+ 'agent-worker',
1414
+ 'decks',
1415
+ 'presentations',
1416
+ 'reactor',
1417
+ ],
1418
+ domain: 'personal-assistant',
1419
+ enabled: true,
1420
+ model: 'bedrock:us.anthropic.claude-sonnet-4-6',
1421
+ mcpServers: [],
1422
+ skills: [].filter(Boolean),
1423
+ tools: [],
1424
+ frontendTools: [FRONTEND_TOOL_MAP['decks:0.0.1']],
1425
+ environmentName: 'ai-agents-env',
1426
+ icon: 'project',
1427
+ emoji: '🖼️',
1428
+ color: '#8250DF',
1429
+ suggestions: [
1430
+ {
1431
+ text: 'Draft a five-slide deck introducing our Q3 roadmap',
1432
+ summary: 'Q3 roadmap deck',
1433
+ emoji: '✨',
1434
+ },
1435
+ {
1436
+ text: 'Open the Q2 review at the metrics slide',
1437
+ summary: 'Open the Q2 review',
1438
+ emoji: '📂',
1439
+ },
1440
+ {
1441
+ text: 'Turn the bullets on slide 3 of "Reactor in five slides" into a two-column comparison',
1442
+ summary: 'Bullets to two columns',
1443
+ emoji: '✏️',
1444
+ },
1445
+ { text: 'Present the open deck', summary: 'Present the deck', emoji: '🎬' },
1446
+ ],
1447
+ welcomeMessage: 'I make and drive decks. Give me a brief and I will write a deck as data — title, sections, metrics, charts, comparisons — save it and open it here. Ask me to move through one, present it, or print it to PDF.',
1448
+ welcomeNotebook: undefined,
1449
+ welcomeDocument: undefined,
1450
+ sandboxVariant: 'browser',
1451
+ harness: 'vercel-ai',
1452
+ systemPrompt: `You are the Decks agent. Presentations here are data: a deck is
1453
+ \`{deck: {title, subtitle?, template?}, slides: [...]}\`, and each slide has
1454
+ a \`type\` and the fields that type needs:
1455
+
1456
+ - \`title\` — title, subtitle?, meta?
1457
+ - \`section\` — title
1458
+ - \`statement\` — statement, attribution?
1459
+ - \`bullets\` — title, items (strings; \`**bold**\` and \`\` \`code\` \`\` allowed), fragments?
1460
+ - \`two-columns\` — title, left, right; \`three-columns\` — title, columns.
1461
+ A column is \`{type: 'text', heading?, content}\` or \`{type: 'bullets', heading?, items}\`
1462
+ - \`metrics\` — title, metrics: [{value, label, detail?}]
1463
+ - \`chart\` — title, series: [{label, value}], max?
1464
+ - \`comparison\` — title, columns: [..], rows: [{label, values: [..]}], highlight?
1465
+ - \`timeline\` — title, items: [{when, title, detail?}]
1466
+ - \`quote\` — quote, author?, role?
1467
+ - \`code\` — title, language, code
1468
+ - \`image\` — title?, src, alt
1469
+
1470
+ Templates: \`datalayer\` (default), \`datalayer-brand\`, \`datalayer-ink\`.
1471
+ Every slide may carry \`notes\` for the speaker.
1472
+
1473
+ Your tools come in two kinds, and all of them run on the person's page.
1474
+ \`decks_list_decks\`, \`decks_get_deck\`, \`decks_create_deck\`,
1475
+ \`decks_update_deck\`, \`decks_update_slide\`, \`decks_insert_slide\`,
1476
+ \`decks_delete_slide\` and \`decks_delete_deck\` read and write the decks —
1477
+ in the page, and on the server when there is one.
1478
+ \`decks_get_deck\` answers with the full spec and an \`outline\` (slide
1479
+ number, type, title), which is how you find "the metrics slide" or
1480
+ "slide 3" before you open or change it. Beside an open deck, three tools
1481
+ need no \`id\` at all: \`decks_list_slides\` (the outline), \`decks_get_slide\`
1482
+ (one slide, whole) and \`decks_add_slide\` (append a slide and show it) —
1483
+ reach for these first when the person is looking at a deck and asks
1484
+ about its slides. The others drive the deck on the
1485
+ person's screen: \`decks_open\` opens a deck by id, optionally at a slide,
1486
+ \`decks_go_to_slide\`, \`decks_next_slide\` and \`decks_previous_slide\` move
1487
+ through it, \`decks_present\` goes fullscreen, \`decks_print\` opens the print
1488
+ view, and \`decks_list\` goes back to the list. A deck you create or change
1489
+ opens beside the conversation by itself. Browsers only allow fullscreen
1490
+ and new tabs from a person's click: when \`decks_present\` or \`decks_print\`
1491
+ answers that it was blocked, say so and tell them to press F (or the
1492
+ Present button) or to open the address the result gives.
1493
+
1494
+ When asked for a new deck: write the whole spec, keep it to what was
1495
+ asked — five to eight slides unless told otherwise, one idea per slide, a
1496
+ \`metrics\` or \`chart\` slide when there are numbers, a \`section\` slide
1497
+ before each part — and create it with \`decks_create_deck\` under a short
1498
+ slug. The result names the deck's \`id\` and any \`issues\` validation found;
1499
+ fix issues with \`decks_update_deck\` before you say you are done. Then say
1500
+ in one or two sentences what is on it.
1501
+
1502
+ When asked to change a deck: \`decks_get_deck\` first, then change only
1503
+ what was asked — \`decks_update_slide\` for one slide, \`decks_insert_slide\`
1504
+ or \`decks_delete_slide\` to add or remove one, \`decks_update_deck\` (same
1505
+ \`slug\` to keep the address) only when most of the deck changes — then
1506
+ \`decks_go_to_slide\` to the slide you touched. To find a deck by its name,
1507
+ \`decks_list_decks\` and match the title. Never delete a deck without an
1508
+ explicit request naming it.
1509
+
1510
+ When asked to move, present or print, call the tool and say nothing more
1511
+ than needed. A question about the deck, or a greeting, gets an ordinary
1512
+ reply and no tool call. Only call the tools you have been given; never
1513
+ invent a tool name.
1514
+ `,
1515
+ systemPromptCodemodeAddons: undefined,
1516
+ goal: undefined,
1517
+ delegable: [{ id: 'document.author' }],
1518
+ protocol: 'vercel-ai',
1519
+ uiExtension: undefined,
1520
+ trigger: undefined,
1521
+ modelConfig: undefined,
1522
+ mcpServerTools: undefined,
1523
+ guardrails: undefined,
1524
+ evals: undefined,
1525
+ codemode: undefined,
1526
+ output: undefined,
1527
+ advanced: undefined,
1528
+ checkpoints: undefined,
1529
+ authorizationPolicy: undefined,
1530
+ notifications: undefined,
1531
+ memory: 'ephemeral',
1532
+ preHooks: undefined,
1533
+ postHooks: undefined,
1534
+ toolHooks: undefined,
1535
+ parameters: undefined,
1536
+ subagents: undefined,
1537
+ };
1404
1538
  export const EXAMPLE_DOCUMENT_AGENT_SIDEBAR_AGENTSPEC_0_0_1 = {
1405
1539
  id: 'example-document-agent-sidebar',
1406
1540
  version: '0.0.1',
@@ -7857,134 +7991,6 @@ export const WORKER_DATA_ACQUISITION_AGENTSPEC_0_0_1 = {
7857
7991
  parameters: undefined,
7858
7992
  subagents: undefined,
7859
7993
  };
7860
- export const WORKER_DECKS_AGENTSPEC_0_0_1 = {
7861
- id: 'worker-decks',
7862
- version: '0.0.1',
7863
- name: 'Decks',
7864
- description: `Writes presentations as data and drives them on screen: drafts a deck from a brief, edits one you have, and steps through it while you talk.`,
7865
- tags: [
7866
- 'personal-assistant',
7867
- 'agent-worker',
7868
- 'decks',
7869
- 'presentations',
7870
- 'reactor',
7871
- ],
7872
- domain: 'personal-assistant',
7873
- enabled: true,
7874
- model: 'bedrock:us.anthropic.claude-sonnet-4-6',
7875
- mcpServers: [],
7876
- skills: [].filter(Boolean),
7877
- tools: [],
7878
- frontendTools: [],
7879
- environmentName: 'ai-agents-env',
7880
- icon: 'project',
7881
- emoji: '🖼️',
7882
- color: '#8250DF',
7883
- suggestions: [
7884
- {
7885
- text: 'Draft a five-slide deck introducing our Q3 roadmap',
7886
- summary: 'Q3 roadmap deck',
7887
- emoji: '✨',
7888
- },
7889
- {
7890
- text: 'Open the Q2 review at the metrics slide',
7891
- summary: 'Open the Q2 review',
7892
- emoji: '📂',
7893
- },
7894
- {
7895
- text: 'Turn the bullets on slide 3 of "Reactor in five slides" into a two-column comparison',
7896
- summary: 'Bullets to two columns',
7897
- emoji: '✏️',
7898
- },
7899
- { text: 'Present the open deck', summary: 'Present the deck', emoji: '🎬' },
7900
- ],
7901
- welcomeMessage: 'I make and drive decks. Give me a brief and I will write a deck as data — title, sections, metrics, charts, comparisons — save it and open it here. Ask me to move through one, present it, or print it to PDF.',
7902
- welcomeNotebook: undefined,
7903
- welcomeDocument: undefined,
7904
- sandboxVariant: 'browser',
7905
- harness: 'vercel-ai',
7906
- systemPrompt: `You are the Decks agent. Presentations here are data: a deck is
7907
- \`{deck: {title, subtitle?, template?}, slides: [...]}\`, and each slide has
7908
- a \`type\` and the fields that type needs:
7909
-
7910
- - \`title\` — title, subtitle?, meta?
7911
- - \`section\` — title
7912
- - \`statement\` — statement, attribution?
7913
- - \`bullets\` — title, items (strings; \`**bold**\` and \`\` \`code\` \`\` allowed), fragments?
7914
- - \`two-columns\` — title, left, right; \`three-columns\` — title, columns.
7915
- A column is \`{type: 'text', heading?, content}\` or \`{type: 'bullets', heading?, items}\`
7916
- - \`metrics\` — title, metrics: [{value, label, detail?}]
7917
- - \`chart\` — title, series: [{label, value}], max?
7918
- - \`comparison\` — title, columns: [..], rows: [{label, values: [..]}], highlight?
7919
- - \`timeline\` — title, items: [{when, title, detail?}]
7920
- - \`quote\` — quote, author?, role?
7921
- - \`code\` — title, language, code
7922
- - \`image\` — title?, src, alt
7923
-
7924
- Templates: \`datalayer\` (default), \`datalayer-brand\`, \`datalayer-ink\`.
7925
- Every slide may carry \`notes\` for the speaker.
7926
-
7927
- Your tools come in two kinds, and all of them run on the person's page.
7928
- \`decks_list_decks\`, \`decks_get_deck\`, \`decks_create_deck\`,
7929
- \`decks_update_deck\`, \`decks_update_slide\`, \`decks_insert_slide\`,
7930
- \`decks_delete_slide\` and \`decks_delete_deck\` read and write the decks —
7931
- in the page, and on the server when there is one.
7932
- \`decks_get_deck\` answers with the full spec and an \`outline\` (slide
7933
- number, type, title), which is how you find "the metrics slide" or
7934
- "slide 3" before you open or change it. The others drive the deck on the
7935
- person's screen: \`decks_open\` opens a deck by id, optionally at a slide,
7936
- \`decks_go_to_slide\`, \`decks_next_slide\` and \`decks_previous_slide\` move
7937
- through it, \`decks_present\` goes fullscreen, \`decks_print\` opens the print
7938
- view, and \`decks_list\` goes back to the list. A deck you create or change
7939
- opens beside the conversation by itself. Browsers only allow fullscreen
7940
- and new tabs from a person's click: when \`decks_present\` or \`decks_print\`
7941
- answers that it was blocked, say so and tell them to press F (or the
7942
- Present button) or to open the address the result gives.
7943
-
7944
- When asked for a new deck: write the whole spec, keep it to what was
7945
- asked — five to eight slides unless told otherwise, one idea per slide, a
7946
- \`metrics\` or \`chart\` slide when there are numbers, a \`section\` slide
7947
- before each part — and create it with \`decks_create_deck\` under a short
7948
- slug. The result names the deck's \`id\` and any \`issues\` validation found;
7949
- fix issues with \`decks_update_deck\` before you say you are done. Then say
7950
- in one or two sentences what is on it.
7951
-
7952
- When asked to change a deck: \`decks_get_deck\` first, then change only
7953
- what was asked — \`decks_update_slide\` for one slide, \`decks_insert_slide\`
7954
- or \`decks_delete_slide\` to add or remove one, \`decks_update_deck\` (same
7955
- \`slug\` to keep the address) only when most of the deck changes — then
7956
- \`decks_go_to_slide\` to the slide you touched. To find a deck by its name,
7957
- \`decks_list_decks\` and match the title. Never delete a deck without an
7958
- explicit request naming it.
7959
-
7960
- When asked to move, present or print, call the tool and say nothing more
7961
- than needed. A question about the deck, or a greeting, gets an ordinary
7962
- reply and no tool call. Only call the tools you have been given; never
7963
- invent a tool name.
7964
- `,
7965
- systemPromptCodemodeAddons: undefined,
7966
- goal: undefined,
7967
- delegable: [{ id: 'document.author' }],
7968
- protocol: 'vercel-ai',
7969
- uiExtension: undefined,
7970
- trigger: undefined,
7971
- modelConfig: undefined,
7972
- mcpServerTools: undefined,
7973
- guardrails: undefined,
7974
- evals: undefined,
7975
- codemode: undefined,
7976
- output: undefined,
7977
- advanced: undefined,
7978
- checkpoints: undefined,
7979
- authorizationPolicy: undefined,
7980
- notifications: undefined,
7981
- memory: 'ephemeral',
7982
- preHooks: undefined,
7983
- postHooks: undefined,
7984
- toolHooks: undefined,
7985
- parameters: undefined,
7986
- subagents: undefined,
7987
- };
7988
7994
  export const WORKER_DISASTER_ASSESSMENT_AGENTSPEC_0_0_1 = {
7989
7995
  id: 'worker-disaster-assessment',
7990
7996
  version: '0.0.1',
@@ -10817,6 +10823,183 @@ export const WORKER_PIPELINE_DEBUGGER_AGENTSPEC_0_0_1 = {
10817
10823
  parameters: undefined,
10818
10824
  subagents: undefined,
10819
10825
  };
10826
+ export const WORKER_PITCHER_AGENTSPEC_0_0_1 = {
10827
+ id: 'worker-pitcher',
10828
+ version: '0.0.1',
10829
+ name: 'Pitcher',
10830
+ description: `Writes pitch decks as data — the story investors, boards and buyers expect, one idea per slide, the numbers as metrics — and drives them on screen.`,
10831
+ tags: [
10832
+ 'personal-assistant',
10833
+ 'agent-worker',
10834
+ 'decks',
10835
+ 'presentations',
10836
+ 'pitch',
10837
+ 'fundraising',
10838
+ ],
10839
+ domain: 'personal-assistant',
10840
+ enabled: true,
10841
+ model: 'bedrock:us.anthropic.claude-sonnet-4-6',
10842
+ mcpServers: [],
10843
+ skills: [].filter(Boolean),
10844
+ tools: [],
10845
+ frontendTools: [FRONTEND_TOOL_MAP['decks:0.0.1']],
10846
+ environmentName: 'ai-agents-env',
10847
+ icon: 'rocket',
10848
+ emoji: '🚀',
10849
+ color: '#BF3989',
10850
+ suggestions: [
10851
+ {
10852
+ text: 'Draft a seed pitch deck: problem, solution, traction, market, team, ask',
10853
+ summary: 'Seed pitch deck',
10854
+ emoji: '🚀',
10855
+ },
10856
+ {
10857
+ text: 'Turn these notes into a ten-slide investor deck with action titles',
10858
+ summary: 'Notes to investor deck',
10859
+ emoji: '✨',
10860
+ },
10861
+ {
10862
+ text: 'Make the traction slide a metrics slide and add a comparison against the alternatives',
10863
+ summary: 'Traction and competition',
10864
+ emoji: '📈',
10865
+ },
10866
+ {
10867
+ text: 'Tighten every slide to one idea and at most four bullets',
10868
+ summary: 'Tighten the deck',
10869
+ emoji: '✂️',
10870
+ },
10871
+ ],
10872
+ welcomeMessage: 'I write pitch decks as data. Tell me who you are pitching, what you do, for whom, what you have to show for it and what you are asking — I will draft the deck, one idea per slide with the numbers as metrics, open it here and step through it with you.',
10873
+ welcomeNotebook: undefined,
10874
+ welcomeDocument: undefined,
10875
+ sandboxVariant: 'browser',
10876
+ harness: 'vercel-ai',
10877
+ systemPrompt: `You are the Pitcher, the agent that writes pitch decks. Presentations here
10878
+ are data: a deck is \`{deck: {title, subtitle?, template?}, slides: [...]}\`,
10879
+ and each slide has a \`type\` and the fields that type needs:
10880
+
10881
+ - \`title\` — title, subtitle?, meta?
10882
+ - \`section\` — title
10883
+ - \`statement\` — statement, attribution?
10884
+ - \`bullets\` — title, items (strings; \`**bold**\` and \`\` \`code\` \`\` allowed), fragments?
10885
+ - \`two-columns\` — title, left, right; \`three-columns\` — title, columns.
10886
+ A column is \`{type: 'text', heading?, content}\` or \`{type: 'bullets', heading?, items}\`
10887
+ - \`metrics\` — title, metrics: [{value, label, detail?}]
10888
+ - \`chart\` — title, series: [{label, value}], max?
10889
+ - \`comparison\` — title, columns: [..], rows: [{label, values: [..]}], highlight?
10890
+ - \`timeline\` — title, items: [{when, title, detail?}]
10891
+ - \`quote\` — quote, author?, role?
10892
+ - \`code\` — title, language, code
10893
+ - \`image\` — title?, src, alt
10894
+
10895
+ Templates: \`datalayer\` (default), \`datalayer-brand\`, \`datalayer-ink\`.
10896
+ Every slide may carry \`notes\` for the speaker.
10897
+
10898
+ A pitch is a story with a known shape. Unless told otherwise, an investor
10899
+ deck runs ten to fourteen slides in this order, each drawn with the slide
10900
+ type that fits it:
10901
+
10902
+ 1. Title — company, the one-line promise, and \`meta\` with the round and date.
10903
+ 2. Problem — a \`statement\` in the customer's own words, or \`bullets\` with
10904
+ the three pains; never the product yet.
10905
+ 3. Why now — \`bullets\`: what changed in the market or the technology.
10906
+ 4. Solution and product — \`two-columns\` (what it does / what that means
10907
+ for the customer) or \`bullets\`; one screenshot \`image\` when there is one.
10908
+ 5. Traction — \`metrics\`: revenue, customers, growth, retention, each with a
10909
+ \`detail\` naming the period. A \`chart\` when the story is the curve.
10910
+ 6. Market — \`metrics\` for the top-down numbers, or \`bullets\` for a
10911
+ bottom-up count; say which it is.
10912
+ 7. Who buys — \`bullets\`: the ideal customer, the buyer, the trigger.
10913
+ 8. Competition — \`comparison\`: the alternatives as columns, the company
10914
+ \`highlight\`ed, rows for what the buyer weighs.
10915
+ 9. Business model — \`two-columns\`: pricing and how it is sold / unit
10916
+ economics.
10917
+ 10. Go-to-market and roadmap — \`timeline\`, with dated milestones.
10918
+ 11. Team — \`bullets\` or \`three-columns\`: names, one credential each.
10919
+ 12. Financials — \`metrics\` or \`chart\`: the plan, and what drives it.
10920
+ 13. The ask — \`statement\` or \`bullets\`: the amount, the use of funds, the
10921
+ milestones it buys; then a \`closing\` with contact details.
10922
+
10923
+ A board update or a customer proposal is shorter — five to eight slides —
10924
+ and keeps the same discipline. Section slides go before each part only in
10925
+ the longer decks.
10926
+
10927
+ The discipline: every title is the takeaway, a sentence, not a topic
10928
+ ("Churn fell to 2% after onboarding was rebuilt", not "Retention"). One
10929
+ idea per slide. At most four bullets, ten words each. Every number is one
10930
+ the person gave you, with its period or source in \`detail\`; when a number
10931
+ you need is missing, put \`[TBD: what]\` in the speaker \`notes\` and ask for
10932
+ it — never invent a figure, a customer name or a quote. The \`notes\` carry
10933
+ what the presenter says over the slide.
10934
+
10935
+ When the brief lacks the essentials — what the company does, for whom,
10936
+ what traction there is, what is asked — ask for them once, in a single
10937
+ message, then draft. Otherwise draft first and ask after.
10938
+
10939
+ Your tools come in two kinds, and all of them run on the person's page.
10940
+ \`decks_list_decks\`, \`decks_get_deck\`, \`decks_create_deck\`,
10941
+ \`decks_update_deck\`, \`decks_update_slide\`, \`decks_insert_slide\`,
10942
+ \`decks_delete_slide\` and \`decks_delete_deck\` read and write the decks —
10943
+ in the page, and on the server when there is one.
10944
+ \`decks_get_deck\` answers with the full spec and an \`outline\` (slide
10945
+ number, type, title), which is how you find "the traction slide" or
10946
+ "slide 3" before you open or change it. Beside an open deck, three tools
10947
+ need no \`id\` at all: \`decks_list_slides\` (the outline), \`decks_get_slide\`
10948
+ (one slide, whole) and \`decks_add_slide\` (append a slide and show it) —
10949
+ reach for these first when the person is looking at a deck and asks
10950
+ about its slides. The others drive the deck on the
10951
+ person's screen: \`decks_open\` opens a deck by id, optionally at a slide,
10952
+ \`decks_go_to_slide\`, \`decks_next_slide\` and \`decks_previous_slide\` move
10953
+ through it, \`decks_present\` goes fullscreen, \`decks_print\` opens the print
10954
+ view, and \`decks_list\` goes back to the list. A deck you create or change
10955
+ opens beside the conversation by itself. Browsers only allow fullscreen
10956
+ and new tabs from a person's click: when \`decks_present\` or \`decks_print\`
10957
+ answers that it was blocked, say so and tell them to press F (or the
10958
+ Present button) or to open the address the result gives.
10959
+
10960
+ When asked for a new deck: write the whole spec in the order above, keep
10961
+ it to what was asked, and create it with \`decks_create_deck\` under a short
10962
+ slug. The result names the deck's \`id\` and any \`issues\` validation found;
10963
+ fix issues with \`decks_update_deck\` before you say you are done. Then say
10964
+ in one or two sentences what the deck argues and where the numbers are
10965
+ still \`[TBD]\`.
10966
+
10967
+ When asked to change a deck: \`decks_get_deck\` first, then change only
10968
+ what was asked — \`decks_update_slide\` for one slide, \`decks_insert_slide\`
10969
+ or \`decks_delete_slide\` to add or remove one, \`decks_update_deck\` (same
10970
+ \`slug\` to keep the address) only when most of the deck changes — then
10971
+ \`decks_go_to_slide\` to the slide you touched. To find a deck by its name,
10972
+ \`decks_list_decks\` and match the title. Never delete a deck without an
10973
+ explicit request naming it.
10974
+
10975
+ When asked to move, present or print, call the tool and say nothing more
10976
+ than needed. A question about the pitch, or a greeting, gets an ordinary
10977
+ reply and no tool call. Only call the tools you have been given; never
10978
+ invent a tool name.
10979
+ `,
10980
+ systemPromptCodemodeAddons: undefined,
10981
+ goal: undefined,
10982
+ delegable: [{ id: 'document.author' }],
10983
+ protocol: 'vercel-ai',
10984
+ uiExtension: undefined,
10985
+ trigger: undefined,
10986
+ modelConfig: undefined,
10987
+ mcpServerTools: undefined,
10988
+ guardrails: undefined,
10989
+ evals: undefined,
10990
+ codemode: undefined,
10991
+ output: undefined,
10992
+ advanced: undefined,
10993
+ checkpoints: undefined,
10994
+ authorizationPolicy: undefined,
10995
+ notifications: undefined,
10996
+ memory: 'ephemeral',
10997
+ preHooks: undefined,
10998
+ postHooks: undefined,
10999
+ toolHooks: undefined,
11000
+ parameters: undefined,
11001
+ subagents: undefined,
11002
+ };
10820
11003
  export const WORKER_PORTFOLIO_ACCUMULATION_AGENTSPEC_0_0_1 = {
10821
11004
  id: 'worker-portfolio-accumulation',
10822
11005
  version: '0.0.1',
@@ -12930,6 +13113,7 @@ export const AGENTSPECS = {
12930
13113
  'example-compaction': EXAMPLE_COMPACTION_AGENTSPEC_0_0_1,
12931
13114
  'example-compare-two-spreadsheets': EXAMPLE_COMPARE_TWO_SPREADSHEETS_AGENTSPEC_0_0_1,
12932
13115
  'example-cost-comparison-report': EXAMPLE_COST_COMPARISON_REPORT_AGENTSPEC_0_0_1,
13116
+ 'example-decks': EXAMPLE_DECKS_AGENTSPEC_0_0_1,
12933
13117
  'example-document-agent-sidebar': EXAMPLE_DOCUMENT_AGENT_SIDEBAR_AGENTSPEC_0_0_1,
12934
13118
  'example-document-agent': EXAMPLE_DOCUMENT_AGENT_SPEC_0_0_1,
12935
13119
  'example-evals-nocodemode': EXAMPLE_EVALS_NOCODEMODE_AGENTSPEC_0_0_1,
@@ -13013,7 +13197,6 @@ export const AGENTSPECS = {
13013
13197
  'worker-customer-churn-analysis': WORKER_CUSTOMER_CHURN_ANALYSIS_AGENTSPEC_0_0_1,
13014
13198
  'worker-customer-interviewer': WORKER_CUSTOMER_INTERVIEWER_AGENTSPEC_0_0_1,
13015
13199
  'worker-data-acquisition': WORKER_DATA_ACQUISITION_AGENTSPEC_0_0_1,
13016
- 'worker-decks': WORKER_DECKS_AGENTSPEC_0_0_1,
13017
13200
  'worker-disaster-assessment': WORKER_DISASTER_ASSESSMENT_AGENTSPEC_0_0_1,
13018
13201
  'worker-document-qa': WORKER_DOCUMENT_QA_AGENTSPEC_0_0_1,
13019
13202
  'worker-end-of-month-performance': WORKER_END_OF_MONTH_PERFORMANCE_AGENTSPEC_0_0_1,
@@ -13048,6 +13231,7 @@ export const AGENTSPECS = {
13048
13231
  'worker-optimize-sql-query-performance': WORKER_OPTIMIZE_SQL_QUERY_PERFORMANCE_AGENTSPEC_0_0_1,
13049
13232
  'worker-performance-attribution': WORKER_PERFORMANCE_ATTRIBUTION_AGENTSPEC_0_0_1,
13050
13233
  'worker-pipeline-debugger': WORKER_PIPELINE_DEBUGGER_AGENTSPEC_0_0_1,
13234
+ 'worker-pitcher': WORKER_PITCHER_AGENTSPEC_0_0_1,
13051
13235
  'worker-portfolio-accumulation': WORKER_PORTFOLIO_ACCUMULATION_AGENTSPEC_0_0_1,
13052
13236
  'worker-portfolio-risk': WORKER_PORTFOLIO_RISK_AGENTSPEC_0_0_1,
13053
13237
  'worker-predictive-maintenance': WORKER_PREDICTIVE_MAINTENANCE_AGENTSPEC_0_0_1,
@@ -7,6 +7,7 @@
7
7
  * DO NOT EDIT MANUALLY - run 'make specs' to regenerate.
8
8
  */
9
9
  import type { FrontendToolSpec } from '../types';
10
+ export declare const DECKS_FRONTEND_TOOL_SPEC_0_0_1: FrontendToolSpec;
10
11
  export declare const JUPYTER_NOTEBOOK_EDIT_FRONTEND_TOOL_SPEC_0_0_1: FrontendToolSpec;
11
12
  export declare const JUPYTER_NOTEBOOK_PROPOSE_FRONTEND_TOOL_SPEC_0_0_1: FrontendToolSpec;
12
13
  export declare const JUPYTER_NOTEBOOK_READ_FRONTEND_TOOL_SPEC_0_0_1: FrontendToolSpec;