@multiplayer-app/sandbox 0.0.25 → 0.0.26

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 (115) hide show
  1. package/dist/agents/html-generator.agent.d.ts +3 -1
  2. package/dist/agents/html-generator.agent.d.ts.map +1 -1
  3. package/dist/agents/html-generator.agent.js +90 -4
  4. package/dist/agents/html-generator.agent.js.map +1 -1
  5. package/dist/agents/markdown-generator.agent.d.ts.map +1 -1
  6. package/dist/agents/markdown-generator.agent.js +5 -10
  7. package/dist/agents/markdown-generator.agent.js.map +1 -1
  8. package/dist/lib/library/list-library-items.d.ts +20 -0
  9. package/dist/lib/library/list-library-items.d.ts.map +1 -0
  10. package/dist/lib/library/list-library-items.js +53 -0
  11. package/dist/lib/library/list-library-items.js.map +1 -0
  12. package/dist/routes/library.d.ts +2 -0
  13. package/dist/routes/library.d.ts.map +1 -0
  14. package/dist/routes/library.js +34 -0
  15. package/dist/routes/library.js.map +1 -0
  16. package/dist/server.d.ts.map +1 -1
  17. package/dist/server.js +2 -0
  18. package/dist/server.js.map +1 -1
  19. package/package.json +9 -9
  20. package/dist/agents/blocknote.agent.d.ts +0 -6
  21. package/dist/agents/blocknote.agent.d.ts.map +0 -1
  22. package/dist/agents/blocknote.agent.js +0 -18
  23. package/dist/agents/blocknote.agent.js.map +0 -1
  24. package/dist/agents/filingramp-fetch.agent.d.ts +0 -4
  25. package/dist/agents/filingramp-fetch.agent.d.ts.map +0 -1
  26. package/dist/agents/filingramp-fetch.agent.js +0 -195
  27. package/dist/agents/filingramp-fetch.agent.js.map +0 -1
  28. package/dist/agents/knowledge/filingramp-endpoints.d.ts +0 -23
  29. package/dist/agents/knowledge/filingramp-endpoints.d.ts.map +0 -1
  30. package/dist/agents/knowledge/filingramp-endpoints.js +0 -116
  31. package/dist/agents/knowledge/filingramp-endpoints.js.map +0 -1
  32. package/dist/agents/shared/blocknote-system-prompt.d.ts +0 -2
  33. package/dist/agents/shared/blocknote-system-prompt.d.ts.map +0 -1
  34. package/dist/agents/shared/blocknote-system-prompt.js +0 -40
  35. package/dist/agents/shared/blocknote-system-prompt.js.map +0 -1
  36. package/dist/agents/shared/get-latest-session-artifact.tool.d.ts +0 -7
  37. package/dist/agents/shared/get-latest-session-artifact.tool.d.ts.map +0 -1
  38. package/dist/agents/shared/get-latest-session-artifact.tool.js +0 -43
  39. package/dist/agents/shared/get-latest-session-artifact.tool.js.map +0 -1
  40. package/dist/agents/shared/get-session-artifact-content.tool.d.ts +0 -7
  41. package/dist/agents/shared/get-session-artifact-content.tool.d.ts.map +0 -1
  42. package/dist/agents/shared/get-session-artifact-content.tool.js +0 -44
  43. package/dist/agents/shared/get-session-artifact-content.tool.js.map +0 -1
  44. package/dist/agents/shared/list-session-artifact-paths.tool.d.ts +0 -5
  45. package/dist/agents/shared/list-session-artifact-paths.tool.d.ts.map +0 -1
  46. package/dist/agents/shared/list-session-artifact-paths.tool.js +0 -37
  47. package/dist/agents/shared/list-session-artifact-paths.tool.js.map +0 -1
  48. package/dist/lib/ai/agent-ai-service.d.ts +0 -3
  49. package/dist/lib/ai/agent-ai-service.d.ts.map +0 -1
  50. package/dist/lib/ai/agent-ai-service.js +0 -15
  51. package/dist/lib/ai/agent-ai-service.js.map +0 -1
  52. package/dist/lib/ai/ai-error-details.d.ts +0 -13
  53. package/dist/lib/ai/ai-error-details.d.ts.map +0 -1
  54. package/dist/lib/ai/ai-error-details.js +0 -84
  55. package/dist/lib/ai/ai-error-details.js.map +0 -1
  56. package/dist/lib/ai/generate-ai-text.d.ts +0 -12
  57. package/dist/lib/ai/generate-ai-text.d.ts.map +0 -1
  58. package/dist/lib/ai/generate-ai-text.js +0 -105
  59. package/dist/lib/ai/generate-ai-text.js.map +0 -1
  60. package/dist/lib/ai/run-explicit-agent.d.ts +0 -15
  61. package/dist/lib/ai/run-explicit-agent.d.ts.map +0 -1
  62. package/dist/lib/ai/run-explicit-agent.js +0 -30
  63. package/dist/lib/ai/run-explicit-agent.js.map +0 -1
  64. package/dist/lib/notebooks/notebook-sql-client.d.ts +0 -5
  65. package/dist/lib/notebooks/notebook-sql-client.d.ts.map +0 -1
  66. package/dist/lib/notebooks/notebook-sql-client.js +0 -37
  67. package/dist/lib/notebooks/notebook-sql-client.js.map +0 -1
  68. package/dist/lib/notebooks/notebook-sql-schema.d.ts +0 -16
  69. package/dist/lib/notebooks/notebook-sql-schema.d.ts.map +0 -1
  70. package/dist/lib/notebooks/notebook-sql-schema.js +0 -117
  71. package/dist/lib/notebooks/notebook-sql-schema.js.map +0 -1
  72. package/dist/lib/notebooks/notebook-sql.d.ts +0 -9
  73. package/dist/lib/notebooks/notebook-sql.d.ts.map +0 -1
  74. package/dist/lib/notebooks/notebook-sql.js +0 -36
  75. package/dist/lib/notebooks/notebook-sql.js.map +0 -1
  76. package/dist/lib/session-artifacts/apply-hashline-edits.d.ts +0 -3
  77. package/dist/lib/session-artifacts/apply-hashline-edits.d.ts.map +0 -1
  78. package/dist/lib/session-artifacts/apply-hashline-edits.js +0 -25
  79. package/dist/lib/session-artifacts/apply-hashline-edits.js.map +0 -1
  80. package/dist/lib/session-artifacts/artifact-text-edit.d.ts +0 -8
  81. package/dist/lib/session-artifacts/artifact-text-edit.d.ts.map +0 -1
  82. package/dist/lib/session-artifacts/artifact-text-edit.js +0 -23
  83. package/dist/lib/session-artifacts/artifact-text-edit.js.map +0 -1
  84. package/dist/lib/session-artifacts/hashline-tag.d.ts +0 -33
  85. package/dist/lib/session-artifacts/hashline-tag.d.ts.map +0 -1
  86. package/dist/lib/session-artifacts/hashline-tag.js +0 -80
  87. package/dist/lib/session-artifacts/hashline-tag.js.map +0 -1
  88. package/dist/lib/session-pages/inject-preview-error-reporter.d.ts +0 -3
  89. package/dist/lib/session-pages/inject-preview-error-reporter.d.ts.map +0 -1
  90. package/dist/lib/session-pages/inject-preview-error-reporter.js +0 -30
  91. package/dist/lib/session-pages/inject-preview-error-reporter.js.map +0 -1
  92. package/dist/lib/session-pages/read-session-artifact.d.ts +0 -7
  93. package/dist/lib/session-pages/read-session-artifact.d.ts.map +0 -1
  94. package/dist/lib/session-pages/read-session-artifact.js +0 -60
  95. package/dist/lib/session-pages/read-session-artifact.js.map +0 -1
  96. package/dist/lib/session-pages/session-pico-css.d.ts +0 -5
  97. package/dist/lib/session-pages/session-pico-css.d.ts.map +0 -1
  98. package/dist/lib/session-pages/session-pico-css.js +0 -11
  99. package/dist/lib/session-pages/session-pico-css.js.map +0 -1
  100. package/dist/realtime/realtime-auth.d.ts +0 -12
  101. package/dist/realtime/realtime-auth.d.ts.map +0 -1
  102. package/dist/realtime/realtime-auth.js +0 -25
  103. package/dist/realtime/realtime-auth.js.map +0 -1
  104. package/dist/realtime/yjs-account-namespace.d.ts +0 -5
  105. package/dist/realtime/yjs-account-namespace.d.ts.map +0 -1
  106. package/dist/realtime/yjs-account-namespace.js +0 -21
  107. package/dist/realtime/yjs-account-namespace.js.map +0 -1
  108. package/dist/routes/notebooks/sql-execute.d.ts +0 -3
  109. package/dist/routes/notebooks/sql-execute.d.ts.map +0 -1
  110. package/dist/routes/notebooks/sql-execute.js +0 -45
  111. package/dist/routes/notebooks/sql-execute.js.map +0 -1
  112. package/dist/routes/sql.d.ts +0 -2
  113. package/dist/routes/sql.d.ts.map +0 -1
  114. package/dist/routes/sql.js +0 -50
  115. package/dist/routes/sql.js.map +0 -1
@@ -1,2 +1,4 @@
1
- export { createContentGeneratorAgent, createContentGeneratorAgent as createHtmlGeneratorAgent, } from './content-generator.agent';
1
+ import type { AgentConfig } from '@multiplayer-app/ai-agent-types';
2
+ import type { BuilderApiAgentDeps } from '../builder-api-config';
3
+ export declare function createHtmlGeneratorAgent(deps: BuilderApiAgentDeps): AgentConfig;
2
4
  //# sourceMappingURL=html-generator.agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-generator.agent.d.ts","sourceRoot":"","sources":["../../src/agents/html-generator.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,IAAI,wBAAwB,GACxD,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"html-generator.agent.d.ts","sourceRoot":"","sources":["../../src/agents/html-generator.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAGlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AA0DhE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,CAwC/E"}
@@ -1,7 +1,93 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createHtmlGeneratorAgent = exports.createContentGeneratorAgent = void 0;
4
- var content_generator_agent_1 = require("./content-generator.agent");
5
- Object.defineProperty(exports, "createContentGeneratorAgent", { enumerable: true, get: function () { return content_generator_agent_1.createContentGeneratorAgent; } });
6
- Object.defineProperty(exports, "createHtmlGeneratorAgent", { enumerable: true, get: function () { return content_generator_agent_1.createContentGeneratorAgent; } });
3
+ exports.createHtmlGeneratorAgent = createHtmlGeneratorAgent;
4
+ const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
5
+ const zod_1 = require("zod");
6
+ const publish_session_artifacts_tool_1 = require("./shared/publish-session-artifacts.tool");
7
+ const validateHtmlInputSchema = zod_1.z.object({
8
+ html: zod_1.z.string().min(1).describe('HTML to validate'),
9
+ });
10
+ function basicHtmlValidation(html) {
11
+ const errors = [];
12
+ const warnings = [];
13
+ if (!html.trim()) {
14
+ errors.push('HTML is empty');
15
+ }
16
+ const openTags = [...html.matchAll(/<([a-z][a-z0-9]*)\b[^>]*(?<!\/)>/gi)];
17
+ const closeTags = [...html.matchAll(/<\/([a-z][a-z0-9]*)\s*>/gi)];
18
+ const stack = [];
19
+ for (const match of openTags) {
20
+ const tag = match[1].toLowerCase();
21
+ if (![
22
+ 'area',
23
+ 'base',
24
+ 'br',
25
+ 'col',
26
+ 'embed',
27
+ 'hr',
28
+ 'img',
29
+ 'input',
30
+ 'link',
31
+ 'meta',
32
+ 'param',
33
+ 'source',
34
+ 'track',
35
+ 'wbr',
36
+ ].includes(tag)) {
37
+ stack.push(tag);
38
+ }
39
+ }
40
+ for (const match of closeTags) {
41
+ const tag = match[1].toLowerCase();
42
+ const last = stack.pop();
43
+ if (last !== tag) {
44
+ warnings.push(`Possible mismatched closing tag </${tag}>`);
45
+ }
46
+ }
47
+ if (stack.length > 0) {
48
+ warnings.push(`Unclosed elements: ${stack.join(', ')}`);
49
+ }
50
+ return { valid: errors.length === 0, warnings, errors };
51
+ }
52
+ function createHtmlGeneratorAgent(deps) {
53
+ return {
54
+ name: 'html-generator',
55
+ description: 'Builds session previews: HTML dashboards, CSS, JavaScript, and data files',
56
+ defaultModel: deps.defaultModel,
57
+ systemPrompt: `You build data dashboards and previews for user data. Every response that produces or updates UI MUST end with publishSessionArtifacts — nothing is saved until you publish.
58
+
59
+ Workflow:
60
+ 1. Generate artifacts — typically index.html, styles.css, script.js, and optional JSON under data/.
61
+ 2. Keep paths relative (no leading slash). Link assets from HTML with relative URLs (./styles.css, ./script.js, ./data/metrics.json).
62
+ 3. Put layout/styling in styles.css and data fetching or rendering in script.js.
63
+ 4. For dashboards: use a shell with sidebar + main, KPI cards (.metrics article), and tables (.data-table).
64
+ 5. Call validateHtml on index.html when markup is non-trivial.
65
+ 6. Always call publishSessionArtifacts in the same turn. Include only files you created or modified in this turn — omit unchanged files; they remain on disk.
66
+ 7. Tell the user the previewUrl from the publish result so they can open App Preview.
67
+
68
+ Base styles are merged into styles.css automatically unless includeBaseStyles is false.`,
69
+ stopWhen: () => false,
70
+ tools: [
71
+ { type: ai_agent_types_1.AgentToolType.WEB_SEARCH, userConfigurable: true },
72
+ { type: ai_agent_types_1.AgentToolType.REQUEST_CLARIFICATION, userConfigurable: true },
73
+ {
74
+ type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
75
+ userConfigurable: true,
76
+ data: {
77
+ title: 'validateHtml',
78
+ needsApproval: false,
79
+ description: 'Run basic structural checks on HTML before publishing',
80
+ inputSchema: validateHtmlInputSchema,
81
+ outputSchema: zod_1.z.object({
82
+ valid: zod_1.z.boolean(),
83
+ warnings: zod_1.z.array(zod_1.z.string()),
84
+ errors: zod_1.z.array(zod_1.z.string()),
85
+ }),
86
+ execute: (input) => basicHtmlValidation(input.html),
87
+ },
88
+ },
89
+ (0, publish_session_artifacts_tool_1.createPublishSessionArtifactsTool)({ needsApproval: false, validateIndexHtml: true }),
90
+ ],
91
+ };
92
+ }
7
93
  //# sourceMappingURL=html-generator.agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-generator.agent.js","sourceRoot":"","sources":["../../src/agents/html-generator.agent.ts"],"names":[],"mappings":";;;AAAA,qEAGkC;AAFhC,sIAAA,2BAA2B,OAAA;AAC3B,mIAAA,2BAA2B,OAA4B"}
1
+ {"version":3,"file":"html-generator.agent.js","sourceRoot":"","sources":["../../src/agents/html-generator.agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-generator.agent.d.ts","sourceRoot":"","sources":["../../src/agents/markdown-generator.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAGlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAgEhE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,CAiDnF"}
1
+ {"version":3,"file":"markdown-generator.agent.d.ts","sourceRoot":"","sources":["../../src/agents/markdown-generator.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAGlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AA8DhE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,CA8CnF"}
@@ -3,9 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createMarkdownGeneratorAgent = createMarkdownGeneratorAgent;
4
4
  const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
5
5
  const zod_1 = require("zod");
6
- const list_session_artifact_paths_tool_1 = require("./shared/list-session-artifact-paths.tool");
7
6
  const publish_session_artifacts_tool_1 = require("./shared/publish-session-artifacts.tool");
8
- const update_session_artifacts_tool_1 = require("./shared/update-session-artifacts.tool");
9
7
  const validateMarkdownInputSchema = zod_1.z.object({
10
8
  markdown: zod_1.z.string().min(1).describe('Markdown source to validate'),
11
9
  path: zod_1.z
@@ -59,17 +57,16 @@ function createMarkdownGeneratorAgent(deps) {
59
57
  name: 'markdown-generator',
60
58
  description: 'Writes and updates Markdown documentation in the session artifact store',
61
59
  defaultModel: deps.defaultModel,
62
- systemPrompt: `You create and refine Markdown (.md) documents for the active session. New files use publishSessionArtifacts; changes to existing files use updateSessionArtifact.
60
+ systemPrompt: `You create and refine Markdown (.md) documents for the active session. Every response that produces or updates docs MUST end with publishSessionArtifacts nothing is saved until you publish.
63
61
 
64
62
  Workflow:
65
63
  1. Clarify purpose (README, design doc, runbook, release notes, API summary, etc.).
66
64
  2. Write valid GitHub-Flavored Markdown (GFM): headings, lists, tables, fenced code blocks with language tags, links, blockquotes.
67
65
  3. Use session-relative paths without a leading slash, e.g. README.md, docs/architecture.md, notes/todo.md.
68
66
  4. Call validateMarkdown on substantial content before publishing.
69
- 5. New paths: call publishSessionArtifacts with sessionId and only files that do not exist yet.
70
- 6. Existing paths: call updateSessionArtifact with sessionId, path, and a clear instruction.
71
- 7. Set previewPath to your primary doc (e.g. README.md) when publishing markdown-only artifacts.
72
- 8. Summarize what was published or which path was updated (Code tab / file explorer).
67
+ 5. Call publishSessionArtifacts in the same turn. Include only files you created or modified — omit unchanged files; they remain on disk.
68
+ 6. Set previewPath to your primary doc (e.g. README.md) when publishing markdown-only artifacts.
69
+ 7. Summarize what was published and where the user can read it (Code tab / file explorer).
73
70
 
74
71
  Style:
75
72
  - Prefer one H1 per document; use ## / ### for structure.
@@ -97,9 +94,7 @@ Style:
97
94
  execute: (input) => basicMarkdownValidation(input.markdown, input.path),
98
95
  },
99
96
  },
100
- (0, list_session_artifact_paths_tool_1.getListSessionArtifactPathsTool)(),
101
- publish_session_artifacts_tool_1.publishSessionArtifactsSubagentTool,
102
- update_session_artifacts_tool_1.updateSessionArtifactsSubagentTool,
97
+ (0, publish_session_artifacts_tool_1.createPublishSessionArtifactsTool)({ needsApproval: false, validateIndexHtml: false }),
103
98
  ],
104
99
  };
105
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-generator.agent.js","sourceRoot":"","sources":["../../src/agents/markdown-generator.agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-generator.agent.js","sourceRoot":"","sources":["../../src/agents/markdown-generator.agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type LibraryItemKind = 'notebook' | 'web';
2
+ export type LibraryItemStatus = 'live' | 'draft';
3
+ export interface LibraryItem {
4
+ id: string;
5
+ kind: LibraryItemKind;
6
+ title: string;
7
+ createdAt: string;
8
+ updatedAt: string;
9
+ status: LibraryItemStatus;
10
+ /** API-relative preview path for web items, e.g. /sessions/:id/index.html */
11
+ url?: string;
12
+ fileCount?: number;
13
+ owner?: string;
14
+ }
15
+ export interface ListLibraryItemsParams {
16
+ accountId: string;
17
+ userId: string;
18
+ }
19
+ export declare function listLibraryItems(params: ListLibraryItemsParams): Promise<LibraryItem[]>;
20
+ //# sourceMappingURL=list-library-items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-library-items.d.ts","sourceRoot":"","sources":["../../../src/lib/library/list-library-items.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,KAAK,CAAA;AAChD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAA;AAEhD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,eAAe,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,iBAAiB,CAAA;IACzB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AA2CD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAM7F"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listLibraryItems = listLibraryItems;
4
+ const context_1 = require("../../context");
5
+ const chat_access_1 = require("../chat-access");
6
+ const list_user_chats_1 = require("../list-user-chats");
7
+ const list_session_artifacts_1 = require("../session-pages/list-session-artifacts");
8
+ async function listNotebookItems(accountId) {
9
+ const repository = (0, context_1.getBuilderApiContext)().notebookRepository;
10
+ if (!repository) {
11
+ return [];
12
+ }
13
+ const notebooks = await repository.listByAccount(accountId);
14
+ return notebooks.map((notebook) => ({
15
+ id: notebook.notebookId,
16
+ kind: 'notebook',
17
+ title: notebook.title,
18
+ createdAt: notebook.createdAt,
19
+ updatedAt: notebook.updatedAt,
20
+ status: 'live',
21
+ }));
22
+ }
23
+ async function listWebItems(userId) {
24
+ const { data: chats } = await (0, list_user_chats_1.listUserChats)({ userId });
25
+ const items = await Promise.all(chats.map(async (chat) => {
26
+ var _a;
27
+ const files = await (0, list_session_artifacts_1.listSessionArtifacts)(chat.id);
28
+ if (files.length === 0) {
29
+ return null;
30
+ }
31
+ const hasIndex = files.some((file) => file.path === 'index.html');
32
+ return {
33
+ id: chat.id,
34
+ kind: 'web',
35
+ title: ((_a = chat.title) === null || _a === void 0 ? void 0 : _a.trim()) || 'Untitled app',
36
+ createdAt: chat.createdAt,
37
+ updatedAt: chat.updatedAt,
38
+ status: hasIndex ? 'live' : 'draft',
39
+ ...(hasIndex ? { url: `/sessions/${chat.id}/index.html` } : {}),
40
+ fileCount: files.length,
41
+ owner: (0, chat_access_1.getChatOwnerId)(chat),
42
+ };
43
+ }));
44
+ return items.filter((item) => item !== null);
45
+ }
46
+ async function listLibraryItems(params) {
47
+ const [notebookItems, webItems] = await Promise.all([
48
+ listNotebookItems(params.accountId),
49
+ listWebItems(params.userId),
50
+ ]);
51
+ return [...notebookItems, ...webItems].sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
52
+ }
53
+ //# sourceMappingURL=list-library-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-library-items.js","sourceRoot":"","sources":["../../../src/lib/library/list-library-items.ts"],"names":[],"mappings":";;AAmEA,4CAMC;AAzED,2CAAoD;AACpD,gDAA+C;AAC/C,wDAAkD;AAClD,oFAA8E;AAuB9E,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IAChD,MAAM,UAAU,GAAG,IAAA,8BAAoB,GAAE,CAAC,kBAAkB,CAAA;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;IAC3D,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,EAAE,EAAE,QAAQ,CAAC,UAAU;QACvB,IAAI,EAAE,UAAmB;QACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,MAAe;KACxB,CAAC,CAAC,CAAA;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAc;IACxC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,+BAAa,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAA+B,EAAE;;QACpD,MAAM,KAAK,GAAG,MAAM,IAAA,6CAAoB,EAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAA;QACjE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,EAAE,KAAI,cAAc;YAC3C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YACnC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,KAAK,EAAE,IAAA,4BAAc,EAAC,IAAI,CAAC;SAC5B,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAuB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AACnE,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,MAA8B;IACnE,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC;QACnC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;KAC5B,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAC/F,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const libraryRoutes: import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/routes/library.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,aAAa,4CAAmB,CAAA"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.libraryRoutes = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const chat_access_1 = require("../lib/chat-access");
9
+ const list_library_items_1 = require("../lib/library/list-library-items");
10
+ function requireAccountId(req) {
11
+ if (!req.accountId) {
12
+ throw new Error('Unauthorized: accountId is required');
13
+ }
14
+ return req.accountId;
15
+ }
16
+ const listLibrary = async (req, res) => {
17
+ try {
18
+ const accountId = requireAccountId(req);
19
+ const userId = (0, chat_access_1.requireUserId)(req);
20
+ const items = await (0, list_library_items_1.listLibraryItems)({ accountId, userId });
21
+ res.json({ accountId, items });
22
+ }
23
+ catch (error) {
24
+ const message = error instanceof Error ? error.message : String(error);
25
+ if (message.includes('Unauthorized')) {
26
+ res.status(401).json({ message });
27
+ return;
28
+ }
29
+ res.status(500).json({ message });
30
+ }
31
+ };
32
+ exports.libraryRoutes = express_1.default.Router();
33
+ exports.libraryRoutes.get('/library', listLibrary);
34
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/routes/library.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAsD;AACtD,oDAAkD;AAClD,0EAAoE;AAEpE,SAAS,gBAAgB,CAAC,GAAoB;IAC5C,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,GAAG,CAAC,SAAS,CAAA;AACtB,CAAC;AAED,MAAM,WAAW,GAAmB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,IAAA,2BAAa,EAAC,GAAG,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,MAAM,IAAA,qCAAgB,EAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YACjC,OAAM;QACR,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACnC,CAAC;AACH,CAAC,CAAA;AAEY,QAAA,aAAa,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE7C,qBAAa,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAW7B,wBAAgB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAYpD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAY7B,wBAAgB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAapD"}
package/dist/server.js CHANGED
@@ -10,6 +10,7 @@ const activities_1 = require("./routes/activities");
10
10
  const agents_1 = require("./routes/agents");
11
11
  const chats_1 = require("./routes/chats");
12
12
  const files_1 = require("./routes/files");
13
+ const library_1 = require("./routes/library");
13
14
  const models_1 = require("./routes/models");
14
15
  const notebooks_1 = require("./routes/notebooks");
15
16
  const sessions_1 = require("./routes/sessions");
@@ -18,6 +19,7 @@ function getBuilderApiRouter() {
18
19
  const api = express_1.default.Router();
19
20
  api.use(sessions_1.sessionRoutes);
20
21
  api.use(notebooks_1.notebookRoutes);
22
+ api.use(library_1.libraryRoutes);
21
23
  api.use(account_dbs_1.accountDbRoutes);
22
24
  api.use(chats_1.chatRoutes);
23
25
  api.use(models_1.modelRoutes);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;AAWA,kDAYC;AAvBD,sDAA6B;AAC7B,sDAAsD;AACtD,oDAAoD;AACpD,4CAA6C;AAC7C,0CAA2C;AAC3C,0CAA2C;AAC3C,4CAA6C;AAC7C,kDAAmD;AACnD,gDAAiD;AACjD,8CAA+C;AAE/C,SAAgB,mBAAmB;IACjC,MAAM,GAAG,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;IAC5B,GAAG,CAAC,GAAG,CAAC,wBAAa,CAAC,CAAA;IACtB,GAAG,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAA;IACvB,GAAG,CAAC,GAAG,CAAC,6BAAe,CAAC,CAAA;IACxB,GAAG,CAAC,GAAG,CAAC,kBAAU,CAAC,CAAA;IACnB,GAAG,CAAC,GAAG,CAAC,oBAAW,CAAC,CAAA;IACpB,GAAG,CAAC,GAAG,CAAC,kBAAU,CAAC,CAAA;IACnB,GAAG,CAAC,GAAG,CAAC,oBAAW,CAAC,CAAA;IACpB,GAAG,CAAC,GAAG,CAAC,sBAAY,CAAC,CAAA;IACrB,GAAG,CAAC,GAAG,CAAC,2BAAc,CAAC,CAAA;IACvB,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;AAYA,kDAaC;AAzBD,sDAA6B;AAC7B,sDAAsD;AACtD,oDAAoD;AACpD,4CAA6C;AAC7C,0CAA2C;AAC3C,0CAA2C;AAC3C,8CAAgD;AAChD,4CAA6C;AAC7C,kDAAmD;AACnD,gDAAiD;AACjD,8CAA+C;AAE/C,SAAgB,mBAAmB;IACjC,MAAM,GAAG,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;IAC5B,GAAG,CAAC,GAAG,CAAC,wBAAa,CAAC,CAAA;IACtB,GAAG,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAA;IACvB,GAAG,CAAC,GAAG,CAAC,uBAAa,CAAC,CAAA;IACtB,GAAG,CAAC,GAAG,CAAC,6BAAe,CAAC,CAAA;IACxB,GAAG,CAAC,GAAG,CAAC,kBAAU,CAAC,CAAA;IACnB,GAAG,CAAC,GAAG,CAAC,oBAAW,CAAC,CAAA;IACpB,GAAG,CAAC,GAAG,CAAC,kBAAU,CAAC,CAAA;IACnB,GAAG,CAAC,GAAG,CAAC,oBAAW,CAAC,CAAA;IACpB,GAAG,CAAC,GAAG,CAAC,sBAAY,CAAC,CAAA;IACrB,GAAG,CAAC,GAAG,CAAC,2BAAc,CAAC,CAAA;IACvB,OAAO,GAAG,CAAA;AACZ,CAAC"}
package/package.json CHANGED
@@ -1,18 +1,23 @@
1
1
  {
2
2
  "name": "@multiplayer-app/sandbox",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "Embeddable Builder HTTP API and agent runtime",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
8
  "dist"
9
9
  ],
10
+ "scripts": {
11
+ "build": "tsc --build --force",
12
+ "lint": "eslint src/**/*.ts --config ../../eslint.config.js",
13
+ "test": "tsc -p tsconfig.test.json && node --test 'dist-test/lib/session-artifacts/**/*.test.js' 'dist-test/lib/session-pages/**/*.test.js' 'dist-test/lib/chat-access.test.js' 'dist-test/lib/notebooks/**/*.test.js' 'dist-test/realtime/notebook-document-id.test.js'"
14
+ },
10
15
  "dependencies": {
11
16
  "@ai-sdk/anthropic": "3.0.42",
12
17
  "@ai-sdk/google": "3.0.26",
13
18
  "@ai-sdk/openai": "3.0.27",
14
- "@multiplayer-app/ai-agent-node": "0.2.0",
15
- "@multiplayer-app/ai-agent-types": "0.2.0",
19
+ "@multiplayer-app/ai-agent-node": "0.1.0-beta.103",
20
+ "@multiplayer-app/ai-agent-types": "0.1.0-beta.103",
16
21
  "@multiplayer-app/realtime-server": "0.1.6",
17
22
  "@openrouter/ai-sdk-provider": "2.2.3",
18
23
  "ai": "6.0.3",
@@ -25,10 +30,5 @@
25
30
  "@types/express": "^5.0.6",
26
31
  "@types/node": "^25.8.0",
27
32
  "typescript": "^6.0.3"
28
- },
29
- "scripts": {
30
- "build": "tsc --build --force",
31
- "lint": "eslint src/**/*.ts --config ../../eslint.config.js",
32
- "test": "tsc -p tsconfig.test.json && node --test 'dist-test/lib/session-artifacts/**/*.test.js' 'dist-test/lib/session-pages/**/*.test.js' 'dist-test/lib/chat-access.test.js' 'dist-test/lib/notebooks/**/*.test.js' 'dist-test/realtime/notebook-document-id.test.js'"
33
33
  }
34
- }
34
+ }
@@ -1,6 +0,0 @@
1
- import type { AgentConfig } from '@multiplayer-app/ai-agent-types';
2
- import type { BuilderApiAgentDeps } from '../builder-api-config';
3
- export declare const BLOCKNOTE_CONTEXT_KEY = "blocknote";
4
- export declare const BLOCKNOTE_AGENT_NAME = "blocknote-generator";
5
- export declare function createBlocknoteAgent(deps: BuilderApiAgentDeps): AgentConfig;
6
- //# sourceMappingURL=blocknote.agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blocknote.agent.d.ts","sourceRoot":"","sources":["../../src/agents/blocknote.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAGhE,eAAO,MAAM,qBAAqB,cAAc,CAAA;AAChD,eAAO,MAAM,oBAAoB,wBAAwB,CAAA;AAEzD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,CAS3E"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BLOCKNOTE_AGENT_NAME = exports.BLOCKNOTE_CONTEXT_KEY = void 0;
4
- exports.createBlocknoteAgent = createBlocknoteAgent;
5
- const blocknote_system_prompt_1 = require("./shared/blocknote-system-prompt");
6
- exports.BLOCKNOTE_CONTEXT_KEY = 'blocknote';
7
- exports.BLOCKNOTE_AGENT_NAME = 'blocknote-generator';
8
- function createBlocknoteAgent(deps) {
9
- return {
10
- name: exports.BLOCKNOTE_AGENT_NAME,
11
- description: 'Generates and adjusts BlockNote/TipTap blocks for notebooks',
12
- defaultModel: deps.defaultModel,
13
- systemPrompt: blocknote_system_prompt_1.BLOCKNOTE_SYSTEM_PROMPT,
14
- stopWhen: () => true,
15
- tools: [],
16
- };
17
- }
18
- //# sourceMappingURL=blocknote.agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blocknote.agent.js","sourceRoot":"","sources":["../../src/agents/blocknote.agent.ts"],"names":[],"mappings":";;;AAOA,oDASC;AAdD,8EAA0E;AAE7D,QAAA,qBAAqB,GAAG,WAAW,CAAA;AACnC,QAAA,oBAAoB,GAAG,qBAAqB,CAAA;AAEzD,SAAgB,oBAAoB,CAAC,IAAyB;IAC5D,OAAO;QACL,IAAI,EAAE,4BAAoB;QAC1B,WAAW,EAAE,6DAA6D;QAC1E,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,YAAY,EAAE,iDAAuB;QACrC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;QACpB,KAAK,EAAE,EAAE;KACV,CAAA;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { AgentConfig } from '@multiplayer-app/ai-agent-types';
2
- import type { BuilderApiAgentDeps } from '../builder-api-config';
3
- export declare function createFilingRampFetchAgent(deps: BuilderApiAgentDeps): AgentConfig;
4
- //# sourceMappingURL=filingramp-fetch.agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filingramp-fetch.agent.d.ts","sourceRoot":"","sources":["../../src/agents/filingramp-fetch.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAGlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AA0EhE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,CA+HjF"}
@@ -1,195 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createFilingRampFetchAgent = createFilingRampFetchAgent;
4
- const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
5
- const zod_1 = require("zod");
6
- const filingramp_endpoints_1 = require("./knowledge/filingramp-endpoints");
7
- const publish_session_artifacts_tool_1 = require("./shared/publish-session-artifacts.tool");
8
- const searchEndpointsInputSchema = zod_1.z.object({
9
- query: zod_1.z
10
- .string()
11
- .optional()
12
- .describe('Search path, summary, tags, or parameter names (e.g. filings, dashboard, productId)'),
13
- service: zod_1.z
14
- .string()
15
- .optional()
16
- .describe('Filter by service section (e.g. ramp-web-api, ramp-library-service)'),
17
- tag: zod_1.z.string().optional().describe('Filter by OpenAPI tag (e.g. filings, products)'),
18
- limit: zod_1.z.number().int().min(1).max(50).optional().describe('Max endpoints to return (default 25)'),
19
- });
20
- function buildFetchScaffold(baseUrl) {
21
- return `/**
22
- * FilingRamp read-only fetch helpers (GET catalog only).
23
- * Set before running: window.__FILINGRAMP_API_KEY__ = '<api-key>';
24
- */
25
- const FILINGRAMP_BASE_URL = ${JSON.stringify(baseUrl.replace(/\/$/, ''))};
26
-
27
- /**
28
- * @param {string} path - Absolute path from catalog, e.g. "/v1/products"
29
- * @param {Record<string, string | number | boolean | undefined>} [query]
30
- */
31
- async function filingRampGet(path, query = {}) {
32
- const url = new URL(path.startsWith('/') ? path : \`/\${path}\`, FILINGRAMP_BASE_URL);
33
- for (const [key, value] of Object.entries(query)) {
34
- if (value === undefined || value === null) continue;
35
- if (Array.isArray(value)) {
36
- for (const item of value) url.searchParams.append(key, String(item));
37
- } else {
38
- url.searchParams.set(key, String(value));
39
- }
40
- }
41
-
42
- const token = globalThis.__FILINGRAMP_API_KEY__ ?? '';
43
- const headers = { Accept: 'application/json' };
44
- if (token) headers.Authorization = \`Bearer \${token}\`;
45
-
46
- const response = await fetch(url.toString(), { headers, method: 'GET' });
47
- if (!response.ok) {
48
- const detail = await response.text().catch(() => '');
49
- throw new Error(\`FilingRamp \${response.status} \${response.statusText}: \${detail}\`.trim());
50
- }
51
- const contentType = response.headers.get('content-type') ?? '';
52
- if (contentType.includes('application/json')) return response.json();
53
- return response.text();
54
- }
55
-
56
- /** Paginate list endpoints that support limit/offset. */
57
- async function filingRampList(path, query = {}, { pageSize = 50, maxPages = 20 } = {}) {
58
- const items = [];
59
- let offset = Number(query.offset ?? 0);
60
- for (let page = 0; page < maxPages; page += 1) {
61
- const batch = await filingRampGet(path, { ...query, limit: pageSize, offset });
62
- const rows = Array.isArray(batch) ? batch : batch?.data ?? batch?.items ?? [];
63
- if (!Array.isArray(rows) || rows.length === 0) break;
64
- items.push(...rows);
65
- if (rows.length < pageSize) break;
66
- offset += rows.length;
67
- }
68
- return items;
69
- }
70
- `;
71
- }
72
- function createFilingRampFetchAgent(deps) {
73
- const { baseUrl, apiKey } = deps.filingramp;
74
- return {
75
- name: 'filingramp-fetch',
76
- description: 'Generates JavaScript to fetch read-only data from the FilingRamp API',
77
- defaultModel: deps.defaultModel,
78
- systemPrompt: `You write browser-ready JavaScript that loads data from the FilingRamp platform using GET endpoints only.
79
-
80
- Workflow:
81
- 1. Call getFilingRampConfig for base URL and auth notes.
82
- 2. Call getFilingRampEndpoints to find real paths, required query params, and tags — never invent URLs.
83
- 3. Call getFilingRampFetchScaffold for the standard fetch helper, then extend it with domain functions (e.g. loadProducts, loadFiling).
84
- 4. Publish script.js (and optional lib/filingramp-client.js, data/*.json) via publishSessionArtifacts.
85
- 5. Dashboard HTML may be published separately or by the html-generator agent; focus on correct API access here.
86
-
87
- Rules:
88
- - Only use endpoints from the catalog (GET / list). No POST, PUT, PATCH, or DELETE.
89
- - Path params use {id} notation in the catalog — substitute real ids at runtime.
90
- - Array query params (fields[], productIds[]) must be appended repeatedly in URLSearchParams.
91
- - Use filingRampGet for single resources and filingRampList when paginating list endpoints.
92
- - Handle errors with clear messages; do not swallow HTTP failures.
93
- - Prefer small, composable functions that return JSON ready for charts/tables.`,
94
- stopWhen: () => false,
95
- tools: [
96
- {
97
- type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
98
- userConfigurable: true,
99
- data: {
100
- title: 'getFilingRampConfig',
101
- needsApproval: false,
102
- description: 'Runtime FilingRamp API base URL and auth setup for generated scripts',
103
- inputSchema: zod_1.z.object({}),
104
- outputSchema: zod_1.z.object({
105
- baseUrl: zod_1.z.string(),
106
- apiKeyConfigured: zod_1.z.boolean(),
107
- authNotes: zod_1.z.string(),
108
- }),
109
- execute: () => ({
110
- baseUrl,
111
- apiKeyConfigured: Boolean(apiKey),
112
- authNotes: 'Browser scripts read window.__FILINGRAMP_API_KEY__. The API server may use FILINGRAMP_API_KEY from env when proxying; set the token in the preview host or inject before running script.js.',
113
- }),
114
- },
115
- },
116
- {
117
- type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
118
- userConfigurable: true,
119
- data: {
120
- title: 'getFilingRampEndpoints',
121
- needsApproval: false,
122
- description: 'Search the FilingRamp GET endpoint catalog (from knowledge/filingramp-endpoints.md)',
123
- inputSchema: searchEndpointsInputSchema,
124
- outputSchema: zod_1.z.object({
125
- total: zod_1.z.number(),
126
- endpoints: zod_1.z.array(zod_1.z.object({
127
- service: zod_1.z.string(),
128
- method: zod_1.z.literal('GET'),
129
- path: zod_1.z.string(),
130
- type: zod_1.z.string(),
131
- summary: zod_1.z.string().optional(),
132
- tags: zod_1.z.array(zod_1.z.string()),
133
- parameters: zod_1.z.array(zod_1.z.string()),
134
- })),
135
- catalogSize: zod_1.z.number(),
136
- }),
137
- execute: (input) => {
138
- const result = (0, filingramp_endpoints_1.searchFilingRampEndpoints)(input);
139
- return {
140
- ...result,
141
- catalogSize: (0, filingramp_endpoints_1.getFilingRampEndpointCatalog)().length,
142
- };
143
- },
144
- },
145
- },
146
- {
147
- type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
148
- userConfigurable: true,
149
- data: {
150
- title: 'getFilingRampEndpointsReference',
151
- needsApproval: false,
152
- description: 'Return the full markdown endpoint catalog (large; use search tool first)',
153
- inputSchema: zod_1.z.object({
154
- confirm: zod_1.z
155
- .boolean()
156
- .describe('Must be true — catalog is large (~90 endpoints)'),
157
- }),
158
- outputSchema: zod_1.z.object({
159
- markdown: zod_1.z.string(),
160
- catalogSize: zod_1.z.number(),
161
- }),
162
- execute: (input) => {
163
- if (!input.confirm) {
164
- throw new Error('Set confirm: true to load the full catalog');
165
- }
166
- return {
167
- markdown: (0, filingramp_endpoints_1.loadFilingRampEndpointsMarkdown)(),
168
- catalogSize: (0, filingramp_endpoints_1.getFilingRampEndpointCatalog)().length,
169
- };
170
- },
171
- },
172
- },
173
- {
174
- type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
175
- userConfigurable: true,
176
- data: {
177
- title: 'getFilingRampFetchScaffold',
178
- needsApproval: false,
179
- description: 'Starter script.js with filingRampGet and filingRampList helpers',
180
- inputSchema: zod_1.z.object({}),
181
- outputSchema: zod_1.z.object({
182
- baseUrl: zod_1.z.string(),
183
- script: zod_1.z.string(),
184
- }),
185
- execute: () => ({
186
- baseUrl,
187
- script: buildFetchScaffold(baseUrl),
188
- }),
189
- },
190
- },
191
- (0, publish_session_artifacts_tool_1.createPublishSessionArtifactsTool)({ needsApproval: true, validateIndexHtml: false }),
192
- ],
193
- };
194
- }
195
- //# sourceMappingURL=filingramp-fetch.agent.js.map