@multiplayer-app/sandbox 0.0.34 → 0.0.36

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 (146) hide show
  1. package/dist/agents/blocknote.agent.d.ts +6 -0
  2. package/dist/agents/blocknote.agent.d.ts.map +1 -0
  3. package/dist/agents/blocknote.agent.js +18 -0
  4. package/dist/agents/blocknote.agent.js.map +1 -0
  5. package/dist/agents/filingramp-fetch.agent.d.ts +4 -0
  6. package/dist/agents/filingramp-fetch.agent.d.ts.map +1 -0
  7. package/dist/agents/filingramp-fetch.agent.js +195 -0
  8. package/dist/agents/filingramp-fetch.agent.js.map +1 -0
  9. package/dist/agents/knowledge/filingramp-endpoints.d.ts +23 -0
  10. package/dist/agents/knowledge/filingramp-endpoints.d.ts.map +1 -0
  11. package/dist/agents/knowledge/filingramp-endpoints.js +116 -0
  12. package/dist/agents/knowledge/filingramp-endpoints.js.map +1 -0
  13. package/dist/agents/notebook.agent.js +2 -2
  14. package/dist/agents/notebook.agent.js.map +1 -1
  15. package/dist/agents/shared/blocknote-system-prompt.d.ts +2 -0
  16. package/dist/agents/shared/blocknote-system-prompt.d.ts.map +1 -0
  17. package/dist/agents/shared/blocknote-system-prompt.js +40 -0
  18. package/dist/agents/shared/blocknote-system-prompt.js.map +1 -0
  19. package/dist/agents/shared/get-latest-session-artifact.tool.d.ts +7 -0
  20. package/dist/agents/shared/get-latest-session-artifact.tool.d.ts.map +1 -0
  21. package/dist/agents/shared/get-latest-session-artifact.tool.js +43 -0
  22. package/dist/agents/shared/get-latest-session-artifact.tool.js.map +1 -0
  23. package/dist/agents/shared/get-session-artifact-content.tool.d.ts +7 -0
  24. package/dist/agents/shared/get-session-artifact-content.tool.d.ts.map +1 -0
  25. package/dist/agents/shared/get-session-artifact-content.tool.js +44 -0
  26. package/dist/agents/shared/get-session-artifact-content.tool.js.map +1 -0
  27. package/dist/agents/shared/list-session-artifact-paths.tool.d.ts +5 -0
  28. package/dist/agents/shared/list-session-artifact-paths.tool.d.ts.map +1 -0
  29. package/dist/agents/shared/list-session-artifact-paths.tool.js +37 -0
  30. package/dist/agents/shared/list-session-artifact-paths.tool.js.map +1 -0
  31. package/dist/agents/shared/notebook-tools.d.ts.map +1 -1
  32. package/dist/agents/shared/notebook-tools.js +1 -2
  33. package/dist/agents/shared/notebook-tools.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +4 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/ai/agent-ai-service.d.ts +3 -0
  39. package/dist/lib/ai/agent-ai-service.d.ts.map +1 -0
  40. package/dist/lib/ai/agent-ai-service.js +15 -0
  41. package/dist/lib/ai/agent-ai-service.js.map +1 -0
  42. package/dist/lib/ai/ai-error-details.d.ts +13 -0
  43. package/dist/lib/ai/ai-error-details.d.ts.map +1 -0
  44. package/dist/lib/ai/ai-error-details.js +84 -0
  45. package/dist/lib/ai/ai-error-details.js.map +1 -0
  46. package/dist/lib/ai/generate-ai-text.d.ts +12 -0
  47. package/dist/lib/ai/generate-ai-text.d.ts.map +1 -0
  48. package/dist/lib/ai/generate-ai-text.js +105 -0
  49. package/dist/lib/ai/generate-ai-text.js.map +1 -0
  50. package/dist/lib/ai/run-explicit-agent.d.ts +15 -0
  51. package/dist/lib/ai/run-explicit-agent.d.ts.map +1 -0
  52. package/dist/lib/ai/run-explicit-agent.js +30 -0
  53. package/dist/lib/ai/run-explicit-agent.js.map +1 -0
  54. package/dist/lib/notebooks/notebook-merged-state.d.ts +3 -0
  55. package/dist/lib/notebooks/notebook-merged-state.d.ts.map +1 -0
  56. package/dist/lib/notebooks/notebook-merged-state.js +19 -0
  57. package/dist/lib/notebooks/notebook-merged-state.js.map +1 -0
  58. package/dist/lib/notebooks/notebook-sql-client.d.ts +5 -0
  59. package/dist/lib/notebooks/notebook-sql-client.d.ts.map +1 -0
  60. package/dist/lib/notebooks/notebook-sql-client.js +37 -0
  61. package/dist/lib/notebooks/notebook-sql-client.js.map +1 -0
  62. package/dist/lib/notebooks/notebook-sql-schema.d.ts +16 -0
  63. package/dist/lib/notebooks/notebook-sql-schema.d.ts.map +1 -0
  64. package/dist/lib/notebooks/notebook-sql-schema.js +117 -0
  65. package/dist/lib/notebooks/notebook-sql-schema.js.map +1 -0
  66. package/dist/lib/notebooks/notebook-sql.d.ts +9 -0
  67. package/dist/lib/notebooks/notebook-sql.d.ts.map +1 -0
  68. package/dist/lib/notebooks/notebook-sql.js +36 -0
  69. package/dist/lib/notebooks/notebook-sql.js.map +1 -0
  70. package/dist/lib/session-artifacts/apply-hashline-edits.d.ts +3 -0
  71. package/dist/lib/session-artifacts/apply-hashline-edits.d.ts.map +1 -0
  72. package/dist/lib/session-artifacts/apply-hashline-edits.js +25 -0
  73. package/dist/lib/session-artifacts/apply-hashline-edits.js.map +1 -0
  74. package/dist/lib/session-artifacts/artifact-text-edit.d.ts +8 -0
  75. package/dist/lib/session-artifacts/artifact-text-edit.d.ts.map +1 -0
  76. package/dist/lib/session-artifacts/artifact-text-edit.js +23 -0
  77. package/dist/lib/session-artifacts/artifact-text-edit.js.map +1 -0
  78. package/dist/lib/session-artifacts/hashline-tag.d.ts +33 -0
  79. package/dist/lib/session-artifacts/hashline-tag.d.ts.map +1 -0
  80. package/dist/lib/session-artifacts/hashline-tag.js +80 -0
  81. package/dist/lib/session-artifacts/hashline-tag.js.map +1 -0
  82. package/dist/lib/session-pages/artifact-storage.d.ts +1 -1
  83. package/dist/lib/session-pages/artifact-storage.d.ts.map +1 -1
  84. package/dist/lib/session-pages/artifact-storage.js +17 -7
  85. package/dist/lib/session-pages/artifact-storage.js.map +1 -1
  86. package/dist/lib/session-pages/delete-session-artifact.d.ts.map +1 -1
  87. package/dist/lib/session-pages/delete-session-artifact.js +0 -2
  88. package/dist/lib/session-pages/delete-session-artifact.js.map +1 -1
  89. package/dist/lib/session-pages/delete-session-artifacts.d.ts.map +1 -1
  90. package/dist/lib/session-pages/delete-session-artifacts.js +0 -5
  91. package/dist/lib/session-pages/delete-session-artifacts.js.map +1 -1
  92. package/dist/lib/session-pages/inject-preview-error-reporter.d.ts +3 -0
  93. package/dist/lib/session-pages/inject-preview-error-reporter.d.ts.map +1 -0
  94. package/dist/lib/session-pages/inject-preview-error-reporter.js +30 -0
  95. package/dist/lib/session-pages/inject-preview-error-reporter.js.map +1 -0
  96. package/dist/lib/session-pages/read-session-artifact.d.ts +7 -0
  97. package/dist/lib/session-pages/read-session-artifact.d.ts.map +1 -0
  98. package/dist/lib/session-pages/read-session-artifact.js +60 -0
  99. package/dist/lib/session-pages/read-session-artifact.js.map +1 -0
  100. package/dist/lib/session-pages/session-pico-css.d.ts +5 -0
  101. package/dist/lib/session-pages/session-pico-css.d.ts.map +1 -0
  102. package/dist/lib/session-pages/session-pico-css.js +11 -0
  103. package/dist/lib/session-pages/session-pico-css.js.map +1 -0
  104. package/dist/realtime/init-realtime.d.ts.map +1 -1
  105. package/dist/realtime/init-realtime.js +2 -18
  106. package/dist/realtime/init-realtime.js.map +1 -1
  107. package/dist/realtime/realtime-auth.d.ts +12 -0
  108. package/dist/realtime/realtime-auth.d.ts.map +1 -0
  109. package/dist/realtime/realtime-auth.js +25 -0
  110. package/dist/realtime/realtime-auth.js.map +1 -0
  111. package/dist/realtime/session-artifact-y-socket-io.d.ts +3 -3
  112. package/dist/realtime/session-artifact-y-socket-io.d.ts.map +1 -1
  113. package/dist/realtime/session-artifact-y-socket-io.js +25 -16
  114. package/dist/realtime/session-artifact-y-socket-io.js.map +1 -1
  115. package/dist/realtime/session-artifact-yjs-store.d.ts +4 -10
  116. package/dist/realtime/session-artifact-yjs-store.d.ts.map +1 -1
  117. package/dist/realtime/session-artifact-yjs-store.js +36 -22
  118. package/dist/realtime/session-artifact-yjs-store.js.map +1 -1
  119. package/dist/realtime/yjs-account-namespace.d.ts +5 -0
  120. package/dist/realtime/yjs-account-namespace.d.ts.map +1 -0
  121. package/dist/realtime/yjs-account-namespace.js +21 -0
  122. package/dist/realtime/yjs-account-namespace.js.map +1 -0
  123. package/dist/routes/notebooks/sql-execute.d.ts +3 -0
  124. package/dist/routes/notebooks/sql-execute.d.ts.map +1 -0
  125. package/dist/routes/notebooks/sql-execute.js +45 -0
  126. package/dist/routes/notebooks/sql-execute.js.map +1 -0
  127. package/dist/routes/notebooks.d.ts.map +1 -1
  128. package/dist/routes/notebooks.js +17 -3
  129. package/dist/routes/notebooks.js.map +1 -1
  130. package/dist/routes/sql.d.ts +2 -0
  131. package/dist/routes/sql.d.ts.map +1 -0
  132. package/dist/routes/sql.js +50 -0
  133. package/dist/routes/sql.js.map +1 -0
  134. package/package.json +8 -8
  135. package/dist/agents/shared/design-skills.d.ts +0 -48
  136. package/dist/agents/shared/design-skills.d.ts.map +0 -1
  137. package/dist/agents/shared/design-skills.js +0 -230
  138. package/dist/agents/shared/design-skills.js.map +0 -1
  139. package/dist/agents/shared/generate-session-images.tool.d.ts +0 -15
  140. package/dist/agents/shared/generate-session-images.tool.d.ts.map +0 -1
  141. package/dist/agents/shared/generate-session-images.tool.js +0 -98
  142. package/dist/agents/shared/generate-session-images.tool.js.map +0 -1
  143. package/dist/lib/session-pages/write-binary-session-artifact.d.ts +0 -12
  144. package/dist/lib/session-pages/write-binary-session-artifact.d.ts.map +0 -1
  145. package/dist/lib/session-pages/write-binary-session-artifact.js +0 -23
  146. package/dist/lib/session-pages/write-binary-session-artifact.js.map +0 -1
@@ -71,7 +71,13 @@ const getNotebook = async (req, res) => {
71
71
  res.status(404).json({ message: 'Notebook not found' });
72
72
  return;
73
73
  }
74
- res.json({ notebook: toNotebookApiRecord(notebook) });
74
+ const mergedContent = await (0, session_artifact_yjs_store_1.getSessionArtifactYjsStore)().getNotebookContent(accountId, notebookId);
75
+ res.json({
76
+ notebook: toNotebookApiRecord({
77
+ ...notebook,
78
+ content: mergedContent,
79
+ }),
80
+ });
75
81
  }
76
82
  catch (error) {
77
83
  (0, errors_1.respondNotebookError)(res, error);
@@ -91,18 +97,26 @@ const updateNotebook = async (req, res) => {
91
97
  if (content !== undefined && !title) {
92
98
  title = (0, notebook_content_1.parseNotebookContent)(content).title;
93
99
  }
100
+ if (content !== undefined) {
101
+ await (0, session_artifact_yjs_store_1.getSessionArtifactYjsStore)().replaceNotebookFromContent(accountId, notebookId, content);
102
+ }
94
103
  const updated = await getNotebookRepository().update({
95
104
  accountId,
96
105
  notebookId,
97
106
  title,
98
- content,
99
107
  updatedBy: userId,
100
108
  });
101
109
  if (!updated) {
102
110
  res.status(404).json({ message: 'Notebook not found' });
103
111
  return;
104
112
  }
105
- res.json({ notebook: toNotebookApiRecord(updated) });
113
+ const mergedContent = await (0, session_artifact_yjs_store_1.getSessionArtifactYjsStore)().getNotebookContent(accountId, notebookId);
114
+ res.json({
115
+ notebook: toNotebookApiRecord({
116
+ ...updated,
117
+ content: mergedContent,
118
+ }),
119
+ });
106
120
  }
107
121
  catch (error) {
108
122
  (0, errors_1.respondNotebookError)(res, error);
@@ -1 +1 @@
1
- {"version":3,"file":"notebooks.js","sourceRoot":"","sources":["../../src/routes/notebooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notebooks.js","sourceRoot":"","sources":["../../src/routes/notebooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const sqlRoutes: import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/routes/sql.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,SAAS,4CAAmB,CAAA"}
@@ -0,0 +1,50 @@
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.sqlRoutes = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const zod_1 = require("zod");
9
+ const notebook_sql_schema_1 = require("../lib/notebooks/notebook-sql-schema");
10
+ const errors_1 = require("./notebooks/errors");
11
+ const tableNameSchema = zod_1.z.object({
12
+ params: zod_1.z.object({
13
+ tableName: zod_1.z.string().min(1),
14
+ }),
15
+ });
16
+ const listSqlTables = async (req, res) => {
17
+ try {
18
+ if (!req.accountId) {
19
+ res.status(401).json({ message: 'Unauthorized: accountId is required' });
20
+ return;
21
+ }
22
+ const tables = await (0, notebook_sql_schema_1.listNotebookSqlTables)();
23
+ res.json({ tables });
24
+ }
25
+ catch (error) {
26
+ (0, errors_1.respondNotebookError)(res, error);
27
+ }
28
+ };
29
+ const getSqlTableSchema = async (req, res) => {
30
+ try {
31
+ const { params } = tableNameSchema.parse({ params: req.params });
32
+ if (!req.accountId) {
33
+ res.status(401).json({ message: 'Unauthorized: accountId is required' });
34
+ return;
35
+ }
36
+ const table = await (0, notebook_sql_schema_1.getNotebookSqlTableSchema)(params.tableName);
37
+ if (!table) {
38
+ res.status(404).json({ message: `Table "${params.tableName}" not found` });
39
+ return;
40
+ }
41
+ res.json({ table });
42
+ }
43
+ catch (error) {
44
+ (0, errors_1.respondNotebookError)(res, error);
45
+ }
46
+ };
47
+ exports.sqlRoutes = express_1.default.Router();
48
+ exports.sqlRoutes.get('/sql/tables', listSqlTables);
49
+ exports.sqlRoutes.get('/sql/tables/:tableName', getSqlTableSchema);
50
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/routes/sql.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAsD;AACtD,6BAAuB;AACvB,8EAAuG;AACvG,+CAAyD;AAEzD,MAAM,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,aAAa,GAAmB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACvD,IAAI,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAA;YACxE,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,2CAAqB,GAAE,CAAA;QAC5C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,6BAAoB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAmB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAEhE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAA;YACxE,OAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAA,+CAAyB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;YAC1E,OAAM;QACR,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,6BAAoB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC;AACH,CAAC,CAAA;AAEY,QAAA,SAAS,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAEzC,iBAAS,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;AAC3C,iBAAS,CAAC,GAAG,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,24 +1,19 @@
1
1
  {
2
2
  "name": "@multiplayer-app/sandbox",
3
- "version": "0.0.34",
3
+ "version": "0.0.36",
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/agents/**/*.test.js' 'dist-test/lib/session-artifacts/**/*.test.js' 'dist-test/lib/session-pages/**/*.test.js' 'dist-test/lib/session-plans/**/*.test.js' 'dist-test/lib/object-storage/**/*.test.js' 'dist-test/lib/yjs-pending/**/*.test.js' 'dist-test/lib/chat-access.test.js' 'dist-test/lib/notebooks/**/*.test.js' 'dist-test/realtime/notebook-document-id.test.js'"
14
- },
15
10
  "dependencies": {
16
11
  "@ai-sdk/anthropic": "3.0.42",
17
12
  "@ai-sdk/google": "3.0.26",
18
13
  "@ai-sdk/openai": "3.0.27",
19
14
  "@multiplayer-app/ai-agent-node": "0.4.0",
20
15
  "@multiplayer-app/ai-agent-types": "0.4.0",
21
- "@multiplayer-app/realtime-server": "0.1.6",
16
+ "@multiplayer-app/realtime-server": "0.2.0",
22
17
  "@openrouter/ai-sdk-provider": "2.2.3",
23
18
  "ai": "6.0.3",
24
19
  "express": "^5.2.1",
@@ -30,5 +25,10 @@
30
25
  "@types/express": "^5.0.6",
31
26
  "@types/node": "^25.8.0",
32
27
  "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/agents/**/*.test.js' 'dist-test/lib/session-artifacts/**/*.test.js' 'dist-test/lib/session-pages/**/*.test.js' 'dist-test/lib/session-plans/**/*.test.js' 'dist-test/lib/object-storage/**/*.test.js' 'dist-test/lib/yjs-pending/**/*.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,48 +0,0 @@
1
- /**
2
- * Injectable design skills for UI-generating subagents.
3
- *
4
- * The orchestrator picks skill names per task; the subagent's prepareStep
5
- * resolves them to content and injects a system message before the first step.
6
- * `visual-foundation` is the baseline and is always injected for UI work.
7
- */
8
- export declare const VISUAL_FOUNDATION_SKILL = "visual-foundation";
9
- export interface DesignSkill {
10
- /** One-line summary shown in the orchestrator's skill catalog. */
11
- description: string;
12
- content: string;
13
- }
14
- export declare const DESIGN_SKILLS: Record<string, DesignSkill>;
15
- export declare const DESIGN_SKILL_NAMES: [string, ...string[]];
16
- /** One line per skill, for the orchestrator system prompt. */
17
- export declare function designSkillsCatalog(): string;
18
- /**
19
- * Resolve skill names to injectable content. Unknown names are ignored.
20
- * Pass alwaysIncludeFoundation for UI-producing agents.
21
- */
22
- export declare function resolveDesignSkills(names: string[], options?: {
23
- alwaysIncludeFoundation?: boolean;
24
- }): string;
25
- /**
26
- * Extract a `skills: string[]` field from a subagent's first user message,
27
- * which the framework serializes as JSON.stringify(tool input).
28
- */
29
- export declare function parseSkillsFromMessages(messages: Array<{
30
- role: string;
31
- content: unknown;
32
- }>): string[];
33
- /**
34
- * Infer page-specific design guides from the delegated task payload. This is a
35
- * safety net for smaller orchestrator models: UI quality must not depend on the
36
- * parent remembering an optional `skills` field.
37
- */
38
- export declare function inferDesignSkillsFromMessages(messages: Array<{
39
- role: string;
40
- content: unknown;
41
- }>): string[];
42
- export declare function resolveRequestedAndInferredDesignSkills(messages: Array<{
43
- role: string;
44
- content: unknown;
45
- }>, options?: {
46
- alwaysIncludeFoundation?: boolean;
47
- }): string;
48
- //# sourceMappingURL=design-skills.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-skills.d.ts","sourceRoot":"","sources":["../../../src/agents/shared/design-skills.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,uBAAuB,sBAAsB,CAAA;AAwG1D,MAAM,WAAW,WAAW;IAC1B,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA6BrD,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAiC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAErF,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,MAAM,CAI5C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,GAClD,MAAM,EAAE,CAsBV;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,GAClD,MAAM,EAAE,CA8BV;AAED,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EACnD,OAAO,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,MAAM,CAMR"}
@@ -1,230 +0,0 @@
1
- "use strict";
2
- /**
3
- * Injectable design skills for UI-generating subagents.
4
- *
5
- * The orchestrator picks skill names per task; the subagent's prepareStep
6
- * resolves them to content and injects a system message before the first step.
7
- * `visual-foundation` is the baseline and is always injected for UI work.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.DESIGN_SKILL_NAMES = exports.DESIGN_SKILLS = exports.VISUAL_FOUNDATION_SKILL = void 0;
11
- exports.designSkillsCatalog = designSkillsCatalog;
12
- exports.resolveDesignSkills = resolveDesignSkills;
13
- exports.parseSkillsFromMessages = parseSkillsFromMessages;
14
- exports.inferDesignSkillsFromMessages = inferDesignSkillsFromMessages;
15
- exports.resolveRequestedAndInferredDesignSkills = resolveRequestedAndInferredDesignSkills;
16
- exports.VISUAL_FOUNDATION_SKILL = 'visual-foundation';
17
- const visualFoundation = `## Design skill: visual foundation (always applies to UI pages)
18
- Pico CSS is only the base layer. Every page MUST open with a page-scoped <style> block that gives it an intentional design; a default-styled document is not acceptable output.
19
-
20
- Accent color — pick ONE that fits the content and set it via Pico variables at the top of <style>:
21
- :root {
22
- --pico-primary: <accent>;
23
- --pico-primary-background: <accent>;
24
- --pico-primary-hover-background: <~10% darker>;
25
- --pico-primary-underline: <accent>;
26
- }
27
- Use color-mix(in srgb, <accent> 10%, transparent) for tinted section/badge backgrounds so light and dark mode both work. For all other colors use Pico variables (var(--pico-muted-color), var(--pico-muted-border-color), var(--pico-card-background-color)) — never hard-coded grays.
28
-
29
- Hierarchy: one clear h1 (clamp(2rem, 4vw, 2.75rem), tight letter-spacing), a muted one-line subtitle under it, then sections separated by generous whitespace (3-4rem). Never a wall of same-sized text.
30
-
31
- Layout: CSS grid for cards, features, and stats — grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 1.25rem.
32
-
33
- Composition: do not place the entire experience in one narrow text column. Use contrasting section rhythms, asymmetric compositions where appropriate, layered surfaces, and deliberate negative space. For full-width bands inside the server container use a full-bleed utility; keep inner content aligned to a shared max-width.
34
-
35
- Cards: <article> with ~1.25-1.5rem padding; hover lift (translateY(-2px) + stronger shadow, 150ms transition) only when clickable.
36
-
37
- Icons: small inline SVGs (24px viewBox, stroke="currentColor", stroke-width 1.5-2, fill="none") — not emoji.
38
-
39
- Restraint: one accent + neutrals only, at most two extra font weights, one border-radius value, spacing from a 0.5/1/1.5/2/3rem scale. No gradients-on-everything, no more than one decorative flourish per page.
40
-
41
- Responsive: grids collapse via auto-fit; no fixed pixel widths on containers; verify mentally at 375px.`;
42
- const landingPage = `## Design skill: landing page
43
- Structure top to bottom: hero → social proof strip → 3 feature cards or alternating feature rows → deep-dive section → pricing (if relevant) → final CTA band → footer.
44
-
45
- Hero: full-width section, 5-6rem vertical padding. Headline clamp(2.5rem, 6vw, 4rem), font-weight 800, letter-spacing -0.03em, max-width 16ch when centered. One-sentence subhead in var(--pico-muted-color), max-width 55ch. Two CTAs side by side: primary button + secondary outline. Optionally a generated hero image below or beside (split hero: grid 1.1fr 1fr, text left, image right with border-radius and subtle shadow).
46
-
47
- Social proof: a muted "Trusted by" line with 4-6 grayscale text logos or stat pair, 0.85rem, uppercase, letter-spacing 0.05em.
48
-
49
- Feature sections: alternate text/image sides in split rows (grid, gap 3rem, align-items center). Each feature: small tinted icon chip (2.5rem square, border-radius, accent at 10% via color-mix), h3, 2-line description.
50
-
51
- Pricing: 2-3 cards in a grid; highlight the recommended tier with an accent border, a small "Popular" pill, and slightly larger scale. Price big (2.5rem bold), features as a checkmark list (inline SVG checks in accent color).
52
-
53
- Final CTA band: tinted background (accent 8% via color-mix), centered h2 + one primary button, 4rem padding.
54
-
55
- Images: generate ONE hero image (and at most one supporting illustration) with generateSessionImages; describe a consistent art style in the prompt (e.g. "clean minimal 3D render, soft studio lighting, single <accent-name> accent color on light neutral background"). Never generate images for icons or logos.`;
56
- const dashboard = `## Design skill: dashboard
57
- Shell: sticky top bar (product name left, actions/avatar right, border-bottom var(--pico-muted-border-color), backdrop-filter blur) over a content area with max-width 1200px. Add a slim sidebar only if there are 5+ nav destinations.
58
-
59
- Top of content: page title (1.5rem, 700) + date/filter controls right-aligned in one row (flex, space-between).
60
-
61
- Stat tiles first: 3-4 in a grid row. Tile = article with label (0.8rem, uppercase, letter-spacing 0.05em, var(--pico-muted-color)) above value (2rem, 700, tabular-nums) plus a small delta pill (green/red tinted background via color-mix, ▲/▼ arrow, 0.8rem).
62
-
63
- Charts: render with inline <svg> (line/area/bar drawn from the data — no chart library). Area fills use the accent at 15% opacity, 2px accent stroke, subtle horizontal gridlines (var(--pico-muted-border-color)), axis labels 0.75rem muted. Chart lives in a card with a title row (h3 + time-range select).
64
-
65
- Tables: compact (0.9rem), th uppercase 0.75rem muted, numeric columns right-aligned with font-variant-numeric: tabular-nums, status as small pill badges, row hover background color-mix(in srgb, var(--pico-primary) 4%, transparent).
66
-
67
- Density: dashboards are the one page type where whitespace shrinks — 1rem gaps, 1rem card padding. Everything aligns to the same grid; no orphan widgets. Do not generate images for dashboards.`;
68
- const dataTable = `## Design skill: data table
69
- Wrap in a card: article with zero padding, table inside, header row with title + search input + primary action button (padding 1rem 1.25rem, border-bottom).
70
-
71
- Table: font-size 0.9rem; th 0.75rem uppercase letter-spacing 0.05em var(--pico-muted-color); text columns left-aligned, numeric right-aligned with tabular-nums; dates muted. Sticky header (position: sticky, top: 0, background var(--pico-card-background-color)) when the table scrolls.
72
-
73
- Rows: 1px separators only (no zebra unless 20+ dense rows), hover tint color-mix(in srgb, var(--pico-primary) 4%, transparent). First column can pair an avatar-initial circle (2rem, accent 15% background, 600 weight initials) with a name + muted sub-line.
74
-
75
- Status: pill badges — 0.75rem, 600, padding 0.15rem 0.6rem, border-radius 999px, tinted background + matching darker text (green=active, amber=pending, red=failed, gray=archived), all via color-mix so dark mode works.
76
-
77
- Footer row: "Showing X–Y of Z" muted left, page buttons right (small outline buttons, current page solid accent).
78
-
79
- Empty state: centered in the card — muted inline SVG icon (48px), one bold line, one muted line, primary action button. Never render an empty <table>.`;
80
- const formApp = `## Design skill: forms
81
- Container: single column card, max-width 480px (560px for complex forms), centered; h2 + one muted context line above the fields.
82
-
83
- Fields: label every input (0.85rem, 500). Group related fields with a 0.75rem-uppercase muted group heading and 2rem top margin. Pair short fields (city/zip) in a 2-column grid; never 3+ columns.
84
-
85
- Primary action: full-width solid accent button at the bottom; secondary action as a text link beside/below it — never two solid buttons. Destructive actions are red outline.
86
-
87
- Validation: on error add aria-invalid="true" and a 0.8rem red helper line under the field; on success keep quiet (no green everywhere). Disable the submit button while submitting with a busy label.
88
-
89
- Multi-step: slim progress indicator on top (steps as dots/short labels, done in accent, current bold, future muted); Back as text button left, Next as solid accent right.
90
-
91
- Finish with a success state: replace the form with a centered check icon in a tinted circle (accent 12%), bold confirmation line, muted detail line, one follow-up action.`;
92
- const docsPage = `## Design skill: docs / long-form
93
- Reading column: max-width 70ch, line-height 1.7; page h1 then a muted lede paragraph. If 5+ sections, add a right-side "On this page" TOC (sticky, 0.85rem, muted links, accent on active) using a two-column grid 1fr 220px that collapses on mobile.
94
-
95
- Headings: h2 with 3rem top margin and optional subtle border-top separator; h3 at 2rem top margin. Every heading gets an id for anchor links.
96
-
97
- Code: inline code in tinted background chips; blocks in <pre> with 1rem padding, border-radius, overflow-x auto, and a small muted language label. Keep Pico's code styling, don't re-theme it.
98
-
99
- Callouts: blockquote variants with a 3px left accent border and tinted background — info (accent), warning (amber), danger (red) via color-mix; bold first word ("Note:", "Warning:").
100
-
101
- Tables for API/params: parameter names in code style, types muted, required as a small pill. Navigation footer: prev/next as two outline cards (muted "Previous"/"Next" label above the page title) in a 2-column grid.`;
102
- const portfolioGallery = `## Design skill: portfolio / gallery
103
- Intro: short hero — name/title (clamp(2rem, 5vw, 3rem), 800), one-line positioning statement, muted; social/contact as small outline icon buttons.
104
-
105
- Grid: cards in repeat(auto-fill, minmax(280px, 1fr)), gap 1.5rem. Card = image on top (aspect-ratio 16/10, object-fit cover, border-radius on top corners only), then 1.25rem padded body: title (1.1rem, 600), one-line muted description, tag pills row (0.75rem, tinted).
106
-
107
- Hover: image scales 1.03 inside overflow-hidden container + card lifts; 200ms ease transitions.
108
-
109
- Category filter: pill buttons row above the grid — active pill solid accent, inactive outline muted.
110
-
111
- Images: generate one image per showcased item with generateSessionImages, all sharing ONE art-style phrase in their prompts (e.g. "soft-gradient abstract 3D shapes, matte texture, muted <accent> palette") so the grid reads as a curated set; vary only the subject per item. Square or landscape, never portrait mixed with landscape in one grid.`;
112
- exports.DESIGN_SKILLS = {
113
- [exports.VISUAL_FOUNDATION_SKILL]: {
114
- description: 'Baseline visual system: accent via Pico variables, hierarchy, spacing, cards, restraint. Always applied to UI.',
115
- content: visualFoundation,
116
- },
117
- 'landing-page': {
118
- description: 'Marketing/landing pages: hero, social proof, feature rows, pricing, CTA band, hero imagery.',
119
- content: landingPage,
120
- },
121
- dashboard: {
122
- description: 'App dashboards: shell, stat tiles, inline SVG charts, dense tables, filters.',
123
- content: dashboard,
124
- },
125
- 'data-table': {
126
- description: 'Record lists and admin tables: alignment, status pills, pagination, empty states.',
127
- content: dataTable,
128
- },
129
- 'form-app': {
130
- description: 'Forms and wizards: field layout, grouping, validation, multi-step, success states.',
131
- content: formApp,
132
- },
133
- 'docs-page': {
134
- description: 'Docs and long-form reading: measure, TOC, code blocks, callouts, prev/next.',
135
- content: docsPage,
136
- },
137
- 'portfolio-gallery': {
138
- description: 'Portfolios and image grids: card grid, hover, filters, cohesive generated imagery.',
139
- content: portfolioGallery,
140
- },
141
- };
142
- exports.DESIGN_SKILL_NAMES = Object.keys(exports.DESIGN_SKILLS);
143
- /** One line per skill, for the orchestrator system prompt. */
144
- function designSkillsCatalog() {
145
- return Object.entries(exports.DESIGN_SKILLS)
146
- .map(([name, skill]) => `- ${name}: ${skill.description}`)
147
- .join('\n');
148
- }
149
- /**
150
- * Resolve skill names to injectable content. Unknown names are ignored.
151
- * Pass alwaysIncludeFoundation for UI-producing agents.
152
- */
153
- function resolveDesignSkills(names, options = {}) {
154
- const selected = new Set(options.alwaysIncludeFoundation ? [exports.VISUAL_FOUNDATION_SKILL] : []);
155
- for (const name of names) {
156
- if (exports.DESIGN_SKILLS[name]) {
157
- selected.add(name);
158
- }
159
- }
160
- if (selected.size === 0) {
161
- return '';
162
- }
163
- return [...selected].map((name) => exports.DESIGN_SKILLS[name].content).join('\n\n');
164
- }
165
- /**
166
- * Extract a `skills: string[]` field from a subagent's first user message,
167
- * which the framework serializes as JSON.stringify(tool input).
168
- */
169
- function parseSkillsFromMessages(messages) {
170
- const firstUser = messages.find((message) => message.role === 'user');
171
- if (!firstUser) {
172
- return [];
173
- }
174
- const text = typeof firstUser.content === 'string'
175
- ? firstUser.content
176
- : Array.isArray(firstUser.content)
177
- ? firstUser.content
178
- .map((part) => (typeof part === 'object' && part && 'text' in part ? String(part.text) : ''))
179
- .join('')
180
- : '';
181
- try {
182
- const parsed = JSON.parse(text);
183
- if (Array.isArray(parsed.skills)) {
184
- return parsed.skills.filter((skill) => typeof skill === 'string');
185
- }
186
- }
187
- catch (_a) {
188
- // Task payload was not JSON — no skills requested.
189
- }
190
- return [];
191
- }
192
- /**
193
- * Infer page-specific design guides from the delegated task payload. This is a
194
- * safety net for smaller orchestrator models: UI quality must not depend on the
195
- * parent remembering an optional `skills` field.
196
- */
197
- function inferDesignSkillsFromMessages(messages) {
198
- const text = messages
199
- .filter((message) => message.role === 'user')
200
- .map((message) => typeof message.content === 'string'
201
- ? message.content
202
- : JSON.stringify(message.content))
203
- .join('\n')
204
- .toLowerCase();
205
- const inferred = new Set();
206
- const addWhen = (pattern, skill) => {
207
- if (pattern.test(text))
208
- inferred.add(skill);
209
- };
210
- addWhen(/landing|marketing|saas|startup|product page|pricing|hero|conversion|waitlist/, 'landing-page');
211
- addWhen(/dashboard|analytics|metrics|kpi|admin|overview|chart|reporting/, 'dashboard');
212
- addWhen(/table|records|customers|orders|inventory|directory|list view|management/, 'data-table');
213
- addWhen(/form|sign[ -]?up|login|checkout|onboarding|wizard|survey|settings/, 'form-app');
214
- addWhen(/documentation|docs|guide|reference|article|knowledge base/, 'docs-page');
215
- addWhen(/portfolio|gallery|showcase|photography|projects|case studies|real estate|travel|restaurant|fashion/, 'portfolio-gallery');
216
- // A generic public-facing page benefits more from a landing composition than
217
- // from receiving only the baseline visual tokens.
218
- if (inferred.size === 0 && /\.html|website|web page|site|homepage/.test(text)) {
219
- inferred.add('landing-page');
220
- }
221
- return [...inferred];
222
- }
223
- function resolveRequestedAndInferredDesignSkills(messages, options = {}) {
224
- const names = [
225
- ...parseSkillsFromMessages(messages),
226
- ...inferDesignSkillsFromMessages(messages),
227
- ];
228
- return resolveDesignSkills(names, options);
229
- }
230
- //# sourceMappingURL=design-skills.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-skills.js","sourceRoot":"","sources":["../../../src/agents/shared/design-skills.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAkJH,kDAIC;AAMD,kDAcC;AAMD,0DAwBC;AAOD,sEAgCC;AAED,0FASC;AAxPY,QAAA,uBAAuB,GAAG,mBAAmB,CAAA;AAE1D,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;wGAwB+E,CAAA;AAExG,MAAM,WAAW,GAAG;;;;;;;;;;;;;qTAaiS,CAAA;AAErT,MAAM,SAAS,GAAG;;;;;;;;;;;iMAW+K,CAAA;AAEjM,MAAM,SAAS,GAAG;;;;;;;;;;;uJAWqI,CAAA;AAEvJ,MAAM,OAAO,GAAG;;;;;;;;;;;2KAW2J,CAAA;AAE3K,MAAM,QAAQ,GAAG;;;;;;;;;wNASuM,CAAA;AAExN,MAAM,gBAAgB,GAAG;;;;;;;;;uVAS8T,CAAA;AAQ1U,QAAA,aAAa,GAAgC;IACxD,CAAC,+BAAuB,CAAC,EAAE;QACzB,WAAW,EAAE,gHAAgH;QAC7H,OAAO,EAAE,gBAAgB;KAC1B;IACD,cAAc,EAAE;QACd,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,WAAW;KACrB;IACD,SAAS,EAAE;QACT,WAAW,EAAE,8EAA8E;QAC3F,OAAO,EAAE,SAAS;KACnB;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,mFAAmF;QAChG,OAAO,EAAE,SAAS;KACnB;IACD,UAAU,EAAE;QACV,WAAW,EAAE,oFAAoF;QACjG,OAAO,EAAE,OAAO;KACjB;IACD,WAAW,EAAE;QACX,WAAW,EAAE,6EAA6E;QAC1F,OAAO,EAAE,QAAQ;KAClB;IACD,mBAAmB,EAAE;QACnB,WAAW,EAAE,oFAAoF;QACjG,OAAO,EAAE,gBAAgB;KAC1B;CACF,CAAA;AAEY,QAAA,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAa,CAA0B,CAAA;AAErF,8DAA8D;AAC9D,SAAgB,mBAAmB;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC,qBAAa,CAAC;SACjC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;SACzD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,KAAe,EACf,UAAiD,EAAE;IAEnD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,+BAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC1F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,qBAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC9E,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,QAAmD;IAEnD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;IACrE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,IAAI,GACR,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACnC,CAAC,CAAC,SAAS,CAAC,OAAO;QACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YAChC,CAAC,CAAC,SAAS,CAAC,OAAO;iBAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAE,IAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACnH,IAAI,CAAC,EAAE,CAAC;YACX,CAAC,CAAC,EAAE,CAAA;IACV,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAA;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAA;QACpF,CAAC;IACH,CAAC;IAAC,WAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;GAIG;AACH,SAAgB,6BAA6B,CAC3C,QAAmD;IAEnD,MAAM,IAAI,GAAG,QAAQ;SAClB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;SAC5C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QACjC,CAAC,CAAC,OAAO,CAAC,OAAO;QACjB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CACpC;SACA,IAAI,CAAC,IAAI,CAAC;SACV,WAAW,EAAE,CAAA;IAEhB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,KAAa,EAAE,EAAE;QACjD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC,CAAA;IAED,OAAO,CAAC,8EAA8E,EAAE,cAAc,CAAC,CAAA;IACvG,OAAO,CAAC,gEAAgE,EAAE,WAAW,CAAC,CAAA;IACtF,OAAO,CAAC,yEAAyE,EAAE,YAAY,CAAC,CAAA;IAChG,OAAO,CAAC,mEAAmE,EAAE,UAAU,CAAC,CAAA;IACxF,OAAO,CAAC,2DAA2D,EAAE,WAAW,CAAC,CAAA;IACjF,OAAO,CAAC,oGAAoG,EAAE,mBAAmB,CAAC,CAAA;IAElI,6EAA6E;IAC7E,kDAAkD;IAClD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAA;AACtB,CAAC;AAED,SAAgB,uCAAuC,CACrD,QAAmD,EACnD,UAAiD,EAAE;IAEnD,MAAM,KAAK,GAAG;QACZ,GAAG,uBAAuB,CAAC,QAAQ,CAAC;QACpC,GAAG,6BAA6B,CAAC,QAAQ,CAAC;KAC3C,CAAA;IACD,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC"}
@@ -1,15 +0,0 @@
1
- import type { AgentTool } from '@multiplayer-app/ai-agent-types';
2
- import { z } from 'zod';
3
- export declare const generateSessionImagesInputSchema: z.ZodObject<{
4
- images: z.ZodArray<z.ZodObject<{
5
- path: z.ZodString;
6
- prompt: z.ZodString;
7
- size: z.ZodDefault<z.ZodEnum<{
8
- square: "square";
9
- landscape: "landscape";
10
- portrait: "portrait";
11
- }>>;
12
- }, z.core.$strip>>;
13
- }, z.core.$strip>;
14
- export declare const generateSessionImagesTool: AgentTool;
15
- //# sourceMappingURL=generate-session-images.tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-session-images.tool.d.ts","sourceRoot":"","sources":["../../../src/agents/shared/generate-session-images.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAInF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAuCvB,eAAO,MAAM,gCAAgC;;;;;;;;;;iBAE3C,CAAA;AA8DF,eAAO,MAAM,yBAAyB,EAAE,SAcvC,CAAA"}
@@ -1,98 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateSessionImagesTool = exports.generateSessionImagesInputSchema = void 0;
4
- const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
5
- const openai_1 = require("@ai-sdk/openai");
6
- const ai_1 = require("ai");
7
- const zod_1 = require("zod");
8
- const context_1 = require("../../context");
9
- const agent_context_1 = require("./agent-context");
10
- const artifact_events_1 = require("../../lib/socket/artifact-events");
11
- const session_pages_1 = require("../../lib/session-pages");
12
- const logger_1 = require("../../logger");
13
- const IMAGE_MODEL = 'gpt-image-1';
14
- const IMAGE_SIZES = {
15
- square: '1024x1024',
16
- landscape: '1536x1024',
17
- portrait: '1024x1536',
18
- };
19
- const imageRequestSchema = zod_1.z.object({
20
- path: zod_1.z
21
- .string()
22
- .min(1)
23
- .regex(/\.png$/i, 'Image paths must end with .png')
24
- .describe('Relative session path for the image, e.g. images/hero.png'),
25
- prompt: zod_1.z
26
- .string()
27
- .min(1)
28
- .describe('Full visual description: subject, art style, lighting, palette. Reuse one art-style phrase across all images in a session for cohesion.'),
29
- size: zod_1.z
30
- .enum(['square', 'landscape', 'portrait'])
31
- .default('landscape')
32
- .describe('square 1024x1024, landscape 1536x1024, portrait 1024x1536'),
33
- });
34
- exports.generateSessionImagesInputSchema = zod_1.z.object({
35
- images: zod_1.z.array(imageRequestSchema).min(1).max(4),
36
- });
37
- async function resolveOpenAiImageProvider(sessionId) {
38
- var _a;
39
- const service = (0, context_1.getAgentService)();
40
- const chat = await service.getChatProcessor().getChat(sessionId);
41
- const credentials = await service
42
- .getTenantCredentialResolver()
43
- .resolveCredentials((_a = chat.tenants) !== null && _a !== void 0 ? _a : {});
44
- if (!credentials.openaiApiKey) {
45
- throw new Error('Image generation requires an OpenAI API key. Add one via tenant credentials, then retry — or build the page without generated images.');
46
- }
47
- return (0, openai_1.createOpenAI)({
48
- apiKey: credentials.openaiApiKey,
49
- ...(credentials.openaiBaseUrl ? { baseURL: credentials.openaiBaseUrl } : {}),
50
- });
51
- }
52
- async function executeGenerateSessionImages(input, context) {
53
- const sessionId = (0, agent_context_1.getRootChatId)(context);
54
- if (!sessionId) {
55
- throw new Error('Session ID is required');
56
- }
57
- try {
58
- const openai = await resolveOpenAiImageProvider(sessionId);
59
- const model = openai.image(IMAGE_MODEL);
60
- const images = await Promise.all(input.images.map(async (request) => {
61
- const { image } = await (0, ai_1.generateImage)({
62
- model,
63
- prompt: request.prompt,
64
- size: IMAGE_SIZES[request.size],
65
- });
66
- return await (0, session_pages_1.writeBinarySessionArtifact)(sessionId, request.path, image.uint8Array);
67
- }));
68
- const publishedAt = new Date().toISOString();
69
- const socketPayload = {
70
- sessionId,
71
- files: images,
72
- previewUrl: `${(0, context_1.getBuilderApiContext)().config.apiPrefix}/sessions/${sessionId}/${images[0].path}`,
73
- publishedAt,
74
- };
75
- const notifyUserIds = await (0, session_pages_1.resolveArtifactNotifyUserIds)(sessionId, context);
76
- (0, artifact_events_1.emitArtifactUpdateToUsers)(notifyUserIds, socketPayload);
77
- return { images };
78
- }
79
- catch (err) {
80
- (0, logger_1.getBuilderApiLogger)().error({ err });
81
- throw err;
82
- }
83
- }
84
- exports.generateSessionImagesTool = {
85
- type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
86
- userConfigurable: true,
87
- data: {
88
- needsApproval: false,
89
- title: 'generateSessionImages',
90
- description: 'Generate PNG images with an AI image model and save them under the session (e.g. images/hero.png) for use in pages via relative src. Up to 4 per call; generation takes tens of seconds per image, so request only images that materially improve the design.',
91
- inputSchema: exports.generateSessionImagesInputSchema,
92
- outputSchema: zod_1.z.object({
93
- images: zod_1.z.array(zod_1.z.object({ path: zod_1.z.string(), bytes: zod_1.z.number() })),
94
- }),
95
- execute: async (input, context) => await executeGenerateSessionImages(input, context),
96
- },
97
- };
98
- //# sourceMappingURL=generate-session-images.tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-session-images.tool.js","sourceRoot":"","sources":["../../../src/agents/shared/generate-session-images.tool.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export interface BinarySessionArtifact {
2
- path: string;
3
- bytes: number;
4
- }
5
- /**
6
- * Write a binary artifact (e.g. a generated image) directly into the session
7
- * directory. Binary files bypass the Yjs text store: they are not
8
- * collaboratively edited, and listSessionArtifacts / the artifact GET route
9
- * pick them up straight from disk.
10
- */
11
- export declare function writeBinarySessionArtifact(sessionId: string, artifactPath: string, data: Uint8Array): Promise<BinarySessionArtifact>;
12
- //# sourceMappingURL=write-binary-session-artifact.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write-binary-session-artifact.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/write-binary-session-artifact.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,qBAAqB,CAAC,CAMhC"}
@@ -1,23 +0,0 @@
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.writeBinarySessionArtifact = writeBinarySessionArtifact;
7
- const promises_1 = __importDefault(require("node:fs/promises"));
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const paths_1 = require("./paths");
10
- /**
11
- * Write a binary artifact (e.g. a generated image) directly into the session
12
- * directory. Binary files bypass the Yjs text store: they are not
13
- * collaboratively edited, and listSessionArtifacts / the artifact GET route
14
- * pick them up straight from disk.
15
- */
16
- async function writeBinarySessionArtifact(sessionId, artifactPath, data) {
17
- const relativePath = (0, paths_1.normalizeArtifactPath)(artifactPath);
18
- const absolutePath = (0, paths_1.resolveArtifactPath)(sessionId, relativePath);
19
- await promises_1.default.mkdir(node_path_1.default.dirname(absolutePath), { recursive: true });
20
- await promises_1.default.writeFile(absolutePath, Buffer.from(data));
21
- return { path: relativePath, bytes: data.byteLength };
22
- }
23
- //# sourceMappingURL=write-binary-session-artifact.js.map