@multiplayer-app/sandbox 0.0.31 → 0.0.33-beta.1

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 (336) hide show
  1. package/dist/agents/content-generator.agent.d.ts +8 -0
  2. package/dist/agents/content-generator.agent.d.ts.map +1 -1
  3. package/dist/agents/content-generator.agent.js +53 -6
  4. package/dist/agents/content-generator.agent.js.map +1 -1
  5. package/dist/agents/html-generator.agent.d.ts +3 -1
  6. package/dist/agents/html-generator.agent.d.ts.map +1 -1
  7. package/dist/agents/html-generator.agent.js +90 -4
  8. package/dist/agents/html-generator.agent.js.map +1 -1
  9. package/dist/agents/markdown-generator.agent.d.ts.map +1 -1
  10. package/dist/agents/markdown-generator.agent.js +5 -10
  11. package/dist/agents/markdown-generator.agent.js.map +1 -1
  12. package/dist/agents/notebook.agent.d.ts.map +1 -1
  13. package/dist/agents/notebook.agent.js +2 -1
  14. package/dist/agents/notebook.agent.js.map +1 -1
  15. package/dist/agents/shared/app-vm.tools.d.ts +4 -0
  16. package/dist/agents/shared/app-vm.tools.d.ts.map +1 -0
  17. package/dist/agents/shared/app-vm.tools.js +105 -0
  18. package/dist/agents/shared/app-vm.tools.js.map +1 -0
  19. package/dist/agents/shared/build-plan.tools.d.ts +5 -0
  20. package/dist/agents/shared/build-plan.tools.d.ts.map +1 -0
  21. package/dist/agents/shared/build-plan.tools.js +176 -0
  22. package/dist/agents/shared/build-plan.tools.js.map +1 -0
  23. package/dist/agents/shared/content-generator-system-prompt.d.ts +3 -2
  24. package/dist/agents/shared/content-generator-system-prompt.d.ts.map +1 -1
  25. package/dist/agents/shared/content-generator-system-prompt.js +41 -24
  26. package/dist/agents/shared/content-generator-system-prompt.js.map +1 -1
  27. package/dist/agents/shared/design-skills.d.ts +48 -0
  28. package/dist/agents/shared/design-skills.d.ts.map +1 -0
  29. package/dist/agents/shared/design-skills.js +230 -0
  30. package/dist/agents/shared/design-skills.js.map +1 -0
  31. package/dist/agents/shared/generate-session-images.tool.d.ts +15 -0
  32. package/dist/agents/shared/generate-session-images.tool.d.ts.map +1 -0
  33. package/dist/agents/shared/generate-session-images.tool.js +98 -0
  34. package/dist/agents/shared/generate-session-images.tool.js.map +1 -0
  35. package/dist/agents/shared/publish-session-artifacts.tool.d.ts +5 -0
  36. package/dist/agents/shared/publish-session-artifacts.tool.d.ts.map +1 -1
  37. package/dist/agents/shared/publish-session-artifacts.tool.js +154 -15
  38. package/dist/agents/shared/publish-session-artifacts.tool.js.map +1 -1
  39. package/dist/agents/shared/session-quality-report.tool.d.ts +7 -0
  40. package/dist/agents/shared/session-quality-report.tool.d.ts.map +1 -0
  41. package/dist/agents/shared/session-quality-report.tool.js +97 -0
  42. package/dist/agents/shared/session-quality-report.tool.js.map +1 -0
  43. package/dist/agents/shared/session-vm-bridge.d.ts +49 -0
  44. package/dist/agents/shared/session-vm-bridge.d.ts.map +1 -0
  45. package/dist/agents/shared/session-vm-bridge.js +9 -0
  46. package/dist/agents/shared/session-vm-bridge.js.map +1 -0
  47. package/dist/agents/shared/update-session-artifacts.tool.d.ts +5 -0
  48. package/dist/agents/shared/update-session-artifacts.tool.d.ts.map +1 -1
  49. package/dist/agents/shared/update-session-artifacts.tool.js +136 -26
  50. package/dist/agents/shared/update-session-artifacts.tool.js.map +1 -1
  51. package/dist/agents/shared/validate-artifact-content.tools.d.ts +4 -0
  52. package/dist/agents/shared/validate-artifact-content.tools.d.ts.map +1 -1
  53. package/dist/agents/shared/validate-artifact-content.tools.js +24 -1
  54. package/dist/agents/shared/validate-artifact-content.tools.js.map +1 -1
  55. package/dist/agents/skills/a11y.skill.d.ts +3 -0
  56. package/dist/agents/skills/a11y.skill.d.ts.map +1 -0
  57. package/dist/agents/skills/a11y.skill.js +23 -0
  58. package/dist/agents/skills/a11y.skill.js.map +1 -0
  59. package/dist/agents/skills/account-skill-loader.d.ts +13 -0
  60. package/dist/agents/skills/account-skill-loader.d.ts.map +1 -0
  61. package/dist/agents/skills/account-skill-loader.js +42 -0
  62. package/dist/agents/skills/account-skill-loader.js.map +1 -0
  63. package/dist/agents/skills/app-scaffold.skill.d.ts +3 -0
  64. package/dist/agents/skills/app-scaffold.skill.d.ts.map +1 -0
  65. package/dist/agents/skills/app-scaffold.skill.js +30 -0
  66. package/dist/agents/skills/app-scaffold.skill.js.map +1 -0
  67. package/dist/agents/skills/copywriting.skill.d.ts +3 -0
  68. package/dist/agents/skills/copywriting.skill.d.ts.map +1 -0
  69. package/dist/agents/skills/copywriting.skill.js +35 -0
  70. package/dist/agents/skills/copywriting.skill.js.map +1 -0
  71. package/dist/agents/skills/custom-skill-repository.d.ts +40 -0
  72. package/dist/agents/skills/custom-skill-repository.d.ts.map +1 -0
  73. package/dist/agents/skills/custom-skill-repository.js +3 -0
  74. package/dist/agents/skills/custom-skill-repository.js.map +1 -0
  75. package/dist/agents/skills/data-viz.skill.d.ts +3 -0
  76. package/dist/agents/skills/data-viz.skill.d.ts.map +1 -0
  77. package/dist/agents/skills/data-viz.skill.js +42 -0
  78. package/dist/agents/skills/data-viz.skill.js.map +1 -0
  79. package/dist/agents/skills/designer.skill.d.ts +3 -0
  80. package/dist/agents/skills/designer.skill.d.ts.map +1 -0
  81. package/dist/agents/skills/designer.skill.js +101 -0
  82. package/dist/agents/skills/designer.skill.js.map +1 -0
  83. package/dist/agents/skills/forms.skill.d.ts +3 -0
  84. package/dist/agents/skills/forms.skill.d.ts.map +1 -0
  85. package/dist/agents/skills/forms.skill.js +37 -0
  86. package/dist/agents/skills/forms.skill.js.map +1 -0
  87. package/dist/agents/skills/index.d.ts +6 -0
  88. package/dist/agents/skills/index.d.ts.map +1 -0
  89. package/dist/agents/skills/index.js +18 -0
  90. package/dist/agents/skills/index.js.map +1 -0
  91. package/dist/agents/skills/interactions.skill.d.ts +3 -0
  92. package/dist/agents/skills/interactions.skill.d.ts.map +1 -0
  93. package/dist/agents/skills/interactions.skill.js +31 -0
  94. package/dist/agents/skills/interactions.skill.js.map +1 -0
  95. package/dist/agents/skills/registry.d.ts +23 -0
  96. package/dist/agents/skills/registry.d.ts.map +1 -0
  97. package/dist/agents/skills/registry.js +75 -0
  98. package/dist/agents/skills/registry.js.map +1 -0
  99. package/dist/agents/skills/skill-injection.d.ts +52 -0
  100. package/dist/agents/skills/skill-injection.d.ts.map +1 -0
  101. package/dist/agents/skills/skill-injection.js +216 -0
  102. package/dist/agents/skills/skill-injection.js.map +1 -0
  103. package/dist/agents/skills/types.d.ts +12 -0
  104. package/dist/agents/skills/types.d.ts.map +1 -0
  105. package/dist/agents/skills/types.js +3 -0
  106. package/dist/agents/skills/types.js.map +1 -0
  107. package/dist/builder-api-config.d.ts +7 -0
  108. package/dist/builder-api-config.d.ts.map +1 -1
  109. package/dist/builder-api-config.js.map +1 -1
  110. package/dist/context.d.ts +11 -0
  111. package/dist/context.d.ts.map +1 -1
  112. package/dist/context.js +19 -0
  113. package/dist/context.js.map +1 -1
  114. package/dist/create-builder-api.d.ts +8 -3
  115. package/dist/create-builder-api.d.ts.map +1 -1
  116. package/dist/create-builder-api.js +20 -0
  117. package/dist/create-builder-api.js.map +1 -1
  118. package/dist/index.d.ts +6 -1
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +7 -1
  121. package/dist/index.js.map +1 -1
  122. package/dist/lib/library/list-library-items.d.ts +2 -2
  123. package/dist/lib/library/list-library-items.d.ts.map +1 -1
  124. package/dist/lib/library/list-library-items.js +49 -7
  125. package/dist/lib/library/list-library-items.js.map +1 -1
  126. package/dist/lib/object-storage/index.d.ts +3 -0
  127. package/dist/lib/object-storage/index.d.ts.map +1 -0
  128. package/dist/lib/object-storage/index.js +19 -0
  129. package/dist/lib/object-storage/index.js.map +1 -0
  130. package/dist/lib/object-storage/keys.d.ts +10 -0
  131. package/dist/lib/object-storage/keys.d.ts.map +1 -0
  132. package/dist/lib/object-storage/keys.js +51 -0
  133. package/dist/lib/object-storage/keys.js.map +1 -0
  134. package/dist/lib/object-storage/s3-object-store.d.ts +14 -0
  135. package/dist/lib/object-storage/s3-object-store.d.ts.map +1 -0
  136. package/dist/lib/object-storage/s3-object-store.js +64 -0
  137. package/dist/lib/object-storage/s3-object-store.js.map +1 -0
  138. package/dist/lib/session-artifacts/hashline-diff-guide.d.ts +1 -1
  139. package/dist/lib/session-artifacts/hashline-diff-guide.d.ts.map +1 -1
  140. package/dist/lib/session-artifacts/hashline-diff-guide.js +9 -5
  141. package/dist/lib/session-artifacts/hashline-diff-guide.js.map +1 -1
  142. package/dist/lib/session-artifacts/parse-hashline-diff.d.ts +13 -0
  143. package/dist/lib/session-artifacts/parse-hashline-diff.d.ts.map +1 -1
  144. package/dist/lib/session-artifacts/parse-hashline-diff.js +72 -0
  145. package/dist/lib/session-artifacts/parse-hashline-diff.js.map +1 -1
  146. package/dist/lib/session-pages/artifact-quality-audit.d.ts +16 -0
  147. package/dist/lib/session-pages/artifact-quality-audit.d.ts.map +1 -0
  148. package/dist/lib/session-pages/artifact-quality-audit.js +298 -0
  149. package/dist/lib/session-pages/artifact-quality-audit.js.map +1 -0
  150. package/dist/lib/session-pages/artifact-storage.d.ts +3 -0
  151. package/dist/lib/session-pages/artifact-storage.d.ts.map +1 -1
  152. package/dist/lib/session-pages/artifact-storage.js +94 -85
  153. package/dist/lib/session-pages/artifact-storage.js.map +1 -1
  154. package/dist/lib/session-pages/audit-session-html.d.ts +23 -0
  155. package/dist/lib/session-pages/audit-session-html.d.ts.map +1 -0
  156. package/dist/lib/session-pages/audit-session-html.js +82 -0
  157. package/dist/lib/session-pages/audit-session-html.js.map +1 -0
  158. package/dist/lib/session-pages/contrast-check.d.ts +25 -0
  159. package/dist/lib/session-pages/contrast-check.d.ts.map +1 -0
  160. package/dist/lib/session-pages/contrast-check.js +290 -0
  161. package/dist/lib/session-pages/contrast-check.js.map +1 -0
  162. package/dist/lib/session-pages/deferred-quality-rules.d.ts +7 -0
  163. package/dist/lib/session-pages/deferred-quality-rules.d.ts.map +1 -0
  164. package/dist/lib/session-pages/deferred-quality-rules.js +25 -0
  165. package/dist/lib/session-pages/deferred-quality-rules.js.map +1 -0
  166. package/dist/lib/session-pages/delete-session-artifact.d.ts.map +1 -1
  167. package/dist/lib/session-pages/delete-session-artifact.js +12 -41
  168. package/dist/lib/session-pages/delete-session-artifact.js.map +1 -1
  169. package/dist/lib/session-pages/delete-session-artifacts.d.ts +0 -6
  170. package/dist/lib/session-pages/delete-session-artifacts.d.ts.map +1 -1
  171. package/dist/lib/session-pages/delete-session-artifacts.js +51 -15
  172. package/dist/lib/session-pages/delete-session-artifacts.js.map +1 -1
  173. package/dist/lib/session-pages/html-artifact-template.d.ts +16 -0
  174. package/dist/lib/session-pages/html-artifact-template.d.ts.map +1 -1
  175. package/dist/lib/session-pages/html-artifact-template.js +166 -10
  176. package/dist/lib/session-pages/html-artifact-template.js.map +1 -1
  177. package/dist/lib/session-pages/index.d.ts +4 -0
  178. package/dist/lib/session-pages/index.d.ts.map +1 -1
  179. package/dist/lib/session-pages/index.js +11 -1
  180. package/dist/lib/session-pages/index.js.map +1 -1
  181. package/dist/lib/session-pages/list-session-artifacts.d.ts.map +1 -1
  182. package/dist/lib/session-pages/list-session-artifacts.js +48 -48
  183. package/dist/lib/session-pages/list-session-artifacts.js.map +1 -1
  184. package/dist/lib/session-pages/read-session-artifacts.d.ts.map +1 -1
  185. package/dist/lib/session-pages/read-session-artifacts.js +4 -26
  186. package/dist/lib/session-pages/read-session-artifacts.js.map +1 -1
  187. package/dist/lib/session-pages/resolve-session-account-id.d.ts +3 -0
  188. package/dist/lib/session-pages/resolve-session-account-id.d.ts.map +1 -0
  189. package/dist/lib/session-pages/resolve-session-account-id.js +31 -0
  190. package/dist/lib/session-pages/resolve-session-account-id.js.map +1 -0
  191. package/dist/lib/session-pages/write-binary-session-artifact.d.ts +12 -0
  192. package/dist/lib/session-pages/write-binary-session-artifact.d.ts.map +1 -0
  193. package/dist/lib/session-pages/write-binary-session-artifact.js +23 -0
  194. package/dist/lib/session-pages/write-binary-session-artifact.js.map +1 -0
  195. package/dist/lib/session-pages/write-session-artifacts.d.ts +1 -2
  196. package/dist/lib/session-pages/write-session-artifacts.d.ts.map +1 -1
  197. package/dist/lib/session-pages/write-session-artifacts.js +12 -1
  198. package/dist/lib/session-pages/write-session-artifacts.js.map +1 -1
  199. package/dist/lib/session-plans/build-plan.d.ts +74 -0
  200. package/dist/lib/session-plans/build-plan.d.ts.map +1 -0
  201. package/dist/lib/session-plans/build-plan.js +165 -0
  202. package/dist/lib/session-plans/build-plan.js.map +1 -0
  203. package/dist/lib/yjs-pending/flush-lock.d.ts +6 -0
  204. package/dist/lib/yjs-pending/flush-lock.d.ts.map +1 -0
  205. package/dist/lib/yjs-pending/flush-lock.js +43 -0
  206. package/dist/lib/yjs-pending/flush-lock.js.map +1 -0
  207. package/dist/lib/yjs-pending/flush-worker.d.ts +5 -0
  208. package/dist/lib/yjs-pending/flush-worker.d.ts.map +1 -0
  209. package/dist/lib/yjs-pending/flush-worker.js +75 -0
  210. package/dist/lib/yjs-pending/flush-worker.js.map +1 -0
  211. package/dist/lib/yjs-pending/yjs-pending-updates-repository.d.ts +22 -0
  212. package/dist/lib/yjs-pending/yjs-pending-updates-repository.d.ts.map +1 -0
  213. package/dist/lib/yjs-pending/yjs-pending-updates-repository.js +3 -0
  214. package/dist/lib/yjs-pending/yjs-pending-updates-repository.js.map +1 -0
  215. package/dist/lib/yjs-pending/yjs-persistence.d.ts +23 -0
  216. package/dist/lib/yjs-pending/yjs-persistence.d.ts.map +1 -0
  217. package/dist/lib/yjs-pending/yjs-persistence.js +222 -0
  218. package/dist/lib/yjs-pending/yjs-persistence.js.map +1 -0
  219. package/dist/realtime/reset-session-artifact-y-docs.d.ts.map +1 -1
  220. package/dist/realtime/reset-session-artifact-y-docs.js +1 -6
  221. package/dist/realtime/reset-session-artifact-y-docs.js.map +1 -1
  222. package/dist/realtime/session-artifact-y-socket-io.d.ts +0 -5
  223. package/dist/realtime/session-artifact-y-socket-io.d.ts.map +1 -1
  224. package/dist/realtime/session-artifact-y-socket-io.js +5 -69
  225. package/dist/realtime/session-artifact-y-socket-io.js.map +1 -1
  226. package/dist/realtime/session-artifact-yjs-store.d.ts +18 -32
  227. package/dist/realtime/session-artifact-yjs-store.d.ts.map +1 -1
  228. package/dist/realtime/session-artifact-yjs-store.js +135 -233
  229. package/dist/realtime/session-artifact-yjs-store.js.map +1 -1
  230. package/dist/routes/sessions.d.ts.map +1 -1
  231. package/dist/routes/sessions.js +26 -6
  232. package/dist/routes/sessions.js.map +1 -1
  233. package/dist/routes/skills.d.ts +2 -0
  234. package/dist/routes/skills.d.ts.map +1 -0
  235. package/dist/routes/skills.js +140 -0
  236. package/dist/routes/skills.js.map +1 -0
  237. package/dist/server.d.ts.map +1 -1
  238. package/dist/server.js +2 -0
  239. package/dist/server.js.map +1 -1
  240. package/package.json +9 -9
  241. package/dist/agents/blocknote.agent.d.ts +0 -6
  242. package/dist/agents/blocknote.agent.d.ts.map +0 -1
  243. package/dist/agents/blocknote.agent.js +0 -18
  244. package/dist/agents/blocknote.agent.js.map +0 -1
  245. package/dist/agents/filingramp-fetch.agent.d.ts +0 -4
  246. package/dist/agents/filingramp-fetch.agent.d.ts.map +0 -1
  247. package/dist/agents/filingramp-fetch.agent.js +0 -195
  248. package/dist/agents/filingramp-fetch.agent.js.map +0 -1
  249. package/dist/agents/knowledge/filingramp-endpoints.d.ts +0 -23
  250. package/dist/agents/knowledge/filingramp-endpoints.d.ts.map +0 -1
  251. package/dist/agents/knowledge/filingramp-endpoints.js +0 -116
  252. package/dist/agents/knowledge/filingramp-endpoints.js.map +0 -1
  253. package/dist/agents/shared/blocknote-system-prompt.d.ts +0 -2
  254. package/dist/agents/shared/blocknote-system-prompt.d.ts.map +0 -1
  255. package/dist/agents/shared/blocknote-system-prompt.js +0 -40
  256. package/dist/agents/shared/blocknote-system-prompt.js.map +0 -1
  257. package/dist/agents/shared/get-latest-session-artifact.tool.d.ts +0 -7
  258. package/dist/agents/shared/get-latest-session-artifact.tool.d.ts.map +0 -1
  259. package/dist/agents/shared/get-latest-session-artifact.tool.js +0 -43
  260. package/dist/agents/shared/get-latest-session-artifact.tool.js.map +0 -1
  261. package/dist/agents/shared/get-session-artifact-content.tool.d.ts +0 -7
  262. package/dist/agents/shared/get-session-artifact-content.tool.d.ts.map +0 -1
  263. package/dist/agents/shared/get-session-artifact-content.tool.js +0 -44
  264. package/dist/agents/shared/get-session-artifact-content.tool.js.map +0 -1
  265. package/dist/agents/shared/list-session-artifact-paths.tool.d.ts +0 -5
  266. package/dist/agents/shared/list-session-artifact-paths.tool.d.ts.map +0 -1
  267. package/dist/agents/shared/list-session-artifact-paths.tool.js +0 -37
  268. package/dist/agents/shared/list-session-artifact-paths.tool.js.map +0 -1
  269. package/dist/lib/ai/agent-ai-service.d.ts +0 -3
  270. package/dist/lib/ai/agent-ai-service.d.ts.map +0 -1
  271. package/dist/lib/ai/agent-ai-service.js +0 -15
  272. package/dist/lib/ai/agent-ai-service.js.map +0 -1
  273. package/dist/lib/ai/ai-error-details.d.ts +0 -13
  274. package/dist/lib/ai/ai-error-details.d.ts.map +0 -1
  275. package/dist/lib/ai/ai-error-details.js +0 -84
  276. package/dist/lib/ai/ai-error-details.js.map +0 -1
  277. package/dist/lib/ai/generate-ai-text.d.ts +0 -12
  278. package/dist/lib/ai/generate-ai-text.d.ts.map +0 -1
  279. package/dist/lib/ai/generate-ai-text.js +0 -105
  280. package/dist/lib/ai/generate-ai-text.js.map +0 -1
  281. package/dist/lib/ai/run-explicit-agent.d.ts +0 -15
  282. package/dist/lib/ai/run-explicit-agent.d.ts.map +0 -1
  283. package/dist/lib/ai/run-explicit-agent.js +0 -30
  284. package/dist/lib/ai/run-explicit-agent.js.map +0 -1
  285. package/dist/lib/notebooks/notebook-sql-client.d.ts +0 -5
  286. package/dist/lib/notebooks/notebook-sql-client.d.ts.map +0 -1
  287. package/dist/lib/notebooks/notebook-sql-client.js +0 -37
  288. package/dist/lib/notebooks/notebook-sql-client.js.map +0 -1
  289. package/dist/lib/notebooks/notebook-sql-schema.d.ts +0 -16
  290. package/dist/lib/notebooks/notebook-sql-schema.d.ts.map +0 -1
  291. package/dist/lib/notebooks/notebook-sql-schema.js +0 -117
  292. package/dist/lib/notebooks/notebook-sql-schema.js.map +0 -1
  293. package/dist/lib/notebooks/notebook-sql.d.ts +0 -9
  294. package/dist/lib/notebooks/notebook-sql.d.ts.map +0 -1
  295. package/dist/lib/notebooks/notebook-sql.js +0 -36
  296. package/dist/lib/notebooks/notebook-sql.js.map +0 -1
  297. package/dist/lib/session-artifacts/apply-hashline-edits.d.ts +0 -3
  298. package/dist/lib/session-artifacts/apply-hashline-edits.d.ts.map +0 -1
  299. package/dist/lib/session-artifacts/apply-hashline-edits.js +0 -25
  300. package/dist/lib/session-artifacts/apply-hashline-edits.js.map +0 -1
  301. package/dist/lib/session-artifacts/artifact-text-edit.d.ts +0 -8
  302. package/dist/lib/session-artifacts/artifact-text-edit.d.ts.map +0 -1
  303. package/dist/lib/session-artifacts/artifact-text-edit.js +0 -23
  304. package/dist/lib/session-artifacts/artifact-text-edit.js.map +0 -1
  305. package/dist/lib/session-artifacts/hashline-tag.d.ts +0 -33
  306. package/dist/lib/session-artifacts/hashline-tag.d.ts.map +0 -1
  307. package/dist/lib/session-artifacts/hashline-tag.js +0 -80
  308. package/dist/lib/session-artifacts/hashline-tag.js.map +0 -1
  309. package/dist/lib/session-pages/inject-preview-error-reporter.d.ts +0 -3
  310. package/dist/lib/session-pages/inject-preview-error-reporter.d.ts.map +0 -1
  311. package/dist/lib/session-pages/inject-preview-error-reporter.js +0 -30
  312. package/dist/lib/session-pages/inject-preview-error-reporter.js.map +0 -1
  313. package/dist/lib/session-pages/read-session-artifact.d.ts +0 -7
  314. package/dist/lib/session-pages/read-session-artifact.d.ts.map +0 -1
  315. package/dist/lib/session-pages/read-session-artifact.js +0 -60
  316. package/dist/lib/session-pages/read-session-artifact.js.map +0 -1
  317. package/dist/lib/session-pages/session-pico-css.d.ts +0 -5
  318. package/dist/lib/session-pages/session-pico-css.d.ts.map +0 -1
  319. package/dist/lib/session-pages/session-pico-css.js +0 -11
  320. package/dist/lib/session-pages/session-pico-css.js.map +0 -1
  321. package/dist/realtime/realtime-auth.d.ts +0 -12
  322. package/dist/realtime/realtime-auth.d.ts.map +0 -1
  323. package/dist/realtime/realtime-auth.js +0 -25
  324. package/dist/realtime/realtime-auth.js.map +0 -1
  325. package/dist/realtime/yjs-account-namespace.d.ts +0 -5
  326. package/dist/realtime/yjs-account-namespace.d.ts.map +0 -1
  327. package/dist/realtime/yjs-account-namespace.js +0 -21
  328. package/dist/realtime/yjs-account-namespace.js.map +0 -1
  329. package/dist/routes/notebooks/sql-execute.d.ts +0 -3
  330. package/dist/routes/notebooks/sql-execute.d.ts.map +0 -1
  331. package/dist/routes/notebooks/sql-execute.js +0 -45
  332. package/dist/routes/notebooks/sql-execute.js.map +0 -1
  333. package/dist/routes/sql.d.ts +0 -2
  334. package/dist/routes/sql.d.ts.map +0 -1
  335. package/dist/routes/sql.js +0 -50
  336. package/dist/routes/sql.js.map +0 -1
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBuildPlanTool = exports.updateBuildTaskTool = exports.createBuildPlanTool = void 0;
4
+ const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
5
+ const zod_1 = require("zod");
6
+ const agent_context_1 = require("./agent-context");
7
+ const logger_1 = require("../../logger");
8
+ const session_artifact_yjs_store_1 = require("../../realtime/session-artifact-yjs-store");
9
+ const build_plan_1 = require("../../lib/session-plans/build-plan");
10
+ const session_pages_1 = require("../../lib/session-pages");
11
+ function requireSessionId(context) {
12
+ const sessionId = (0, agent_context_1.getRootChatId)(context);
13
+ if (!sessionId) {
14
+ throw new Error('Session ID is required');
15
+ }
16
+ return sessionId;
17
+ }
18
+ async function readPlan(sessionId) {
19
+ try {
20
+ const content = await (0, session_artifact_yjs_store_1.getSessionArtifactYjsStore)().getLatestText(sessionId, build_plan_1.BUILD_PLAN_PATH);
21
+ return (0, build_plan_1.parseBuildPlan)(content);
22
+ }
23
+ catch (_a) {
24
+ return null;
25
+ }
26
+ }
27
+ async function writePlan(sessionId, plan) {
28
+ await (0, session_artifact_yjs_store_1.getSessionArtifactYjsStore)().upsertFromContent(sessionId, build_plan_1.BUILD_PLAN_PATH, (0, build_plan_1.serializeBuildPlan)(plan));
29
+ }
30
+ const openAdvisorySchema = zod_1.z.object({
31
+ path: zod_1.z.string(),
32
+ findings: zod_1.z.array(zod_1.z.string()),
33
+ recordedAt: zod_1.z.string(),
34
+ });
35
+ function planSummary(plan) {
36
+ var _a;
37
+ const next = (0, build_plan_1.nextPendingTask)(plan);
38
+ return {
39
+ title: plan.title,
40
+ progress: (0, build_plan_1.planProgress)(plan),
41
+ nextTask: next ? { id: next.id, title: next.title, description: next.description, status: next.status } : null,
42
+ tasks: plan.tasks.map((task) => ({ id: task.id, title: task.title, status: task.status })),
43
+ openAdvisories: (_a = plan.openAdvisories) !== null && _a !== void 0 ? _a : [],
44
+ };
45
+ }
46
+ const planSummarySchema = zod_1.z.object({
47
+ title: zod_1.z.string(),
48
+ progress: zod_1.z.object({ done: zod_1.z.number(), total: zod_1.z.number(), remaining: zod_1.z.number() }),
49
+ nextTask: zod_1.z.object({ id: zod_1.z.string(), title: zod_1.z.string(), description: zod_1.z.string(), status: zod_1.z.string() }).nullable(),
50
+ tasks: zod_1.z.array(zod_1.z.object({ id: zod_1.z.string(), title: zod_1.z.string(), status: zod_1.z.string() })),
51
+ openAdvisories: zod_1.z.array(openAdvisorySchema),
52
+ });
53
+ const createPlanInputSchema = zod_1.z.object({
54
+ title: zod_1.z.string().min(1).max(200).describe('Short name of what is being built'),
55
+ designBrief: zod_1.z
56
+ .string()
57
+ .min(120)
58
+ .max(1400)
59
+ .describe(`Session-wide design contract BEFORE building. MUST include: (1) accent hex + darker hover hex (topic-fit, never default indigo), (2) neutral scale slate/zinc/stone/neutral, (3) Google Font pairing by name (never Inter), (4) tone, (5) layout pack ${build_plan_1.LAYOUT_PACKS.join('|')}, (6) signature layout+surface+motion (e.g. "signature: split + hard grid + scroll reveal"), (7) radius sharp|soft|pill and/or density airy|comfortable|dense, (8) light/dark strategy, (9) atmosphere matching the signature (not always blur-orb+glass), (10) anti-cliché note (explicitly ban the default centered blur-orb SaaS hero unless the pack requires it). Pick a pack that fits the product — vary across sessions.`),
60
+ tasks: zod_1.z
61
+ .array(zod_1.z.object({
62
+ title: zod_1.z.string().min(1).max(120).describe('One concrete deliverable, e.g. "Landing page hero + nav"'),
63
+ description: zod_1.z.string().min(1).max(1000).describe('What this task produces: artifact paths, sections, behaviors'),
64
+ }))
65
+ .min(2)
66
+ .max(6)
67
+ .describe('Ordered tasks. Prefer 2–3 for a landing page (complete index.html publish + consistency). Max 6. Last must be consistency/polish.'),
68
+ });
69
+ exports.createBuildPlanTool = {
70
+ type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
71
+ userConfigurable: true,
72
+ data: {
73
+ needsApproval: false,
74
+ title: 'createBuildPlan',
75
+ description: 'Create the build plan for this session: an ordered task list that will be executed one task at a time. Replaces any previous plan. The plan is stored as plan.json and visible to the user. Last task must be a consistency/polish pass.',
76
+ inputSchema: createPlanInputSchema,
77
+ outputSchema: planSummarySchema,
78
+ execute: async (input, context) => {
79
+ try {
80
+ const sessionId = requireSessionId(context);
81
+ (0, build_plan_1.assertDesignBriefQuality)(input.designBrief);
82
+ const last = input.tasks[input.tasks.length - 1];
83
+ if (!last || !(0, build_plan_1.isConsistencyPassTask)(last)) {
84
+ throw new Error('The last task MUST be a consistency/polish pass (title or description must mention consistency, polish, qa, or quality). Prefer a light error check — do not end the plan on a new page.');
85
+ }
86
+ const plan = (0, build_plan_1.createBuildPlan)(input.title, input.tasks, new Date().toISOString(), input.designBrief);
87
+ await writePlan(sessionId, plan);
88
+ return planSummary(plan);
89
+ }
90
+ catch (err) {
91
+ (0, logger_1.getBuilderApiLogger)().error({ err });
92
+ throw err;
93
+ }
94
+ },
95
+ },
96
+ };
97
+ const updateTaskInputSchema = zod_1.z.object({
98
+ taskId: zod_1.z.string().min(1).describe('Task id from the plan, e.g. t1'),
99
+ status: zod_1.z.enum(['in_progress', 'done', 'skipped']),
100
+ paths: zod_1.z.array(zod_1.z.string()).optional().describe('Artifact paths this task produced or edited'),
101
+ note: zod_1.z.string().max(500).optional().describe('Short outcome note, e.g. the previewUrl or why skipped'),
102
+ });
103
+ exports.updateBuildTaskTool = {
104
+ type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
105
+ userConfigurable: true,
106
+ data: {
107
+ needsApproval: false,
108
+ title: 'updateBuildTask',
109
+ description: 'Update a build-plan task status. Returns remaining progress, openAdvisories, and the next pending task — when nextTask is not null, continue building it immediately.',
110
+ inputSchema: updateTaskInputSchema,
111
+ outputSchema: planSummarySchema,
112
+ execute: async (input, context) => {
113
+ var _a;
114
+ try {
115
+ const sessionId = requireSessionId(context);
116
+ const plan = await readPlan(sessionId);
117
+ if (!plan) {
118
+ throw new Error('No build plan exists — call createBuildPlan first');
119
+ }
120
+ const task = plan.tasks.find((candidate) => candidate.id === input.taskId);
121
+ const now = new Date().toISOString();
122
+ // Never mark a task done for HTML paths that were never published.
123
+ // (Parent previously claimed index.html after a failed publish.)
124
+ if (input.status === 'done' && ((_a = input.paths) === null || _a === void 0 ? void 0 : _a.length)) {
125
+ const existing = new Set((await (0, session_pages_1.listSessionArtifacts)(sessionId)).map((file) => file.path));
126
+ const missing = input.paths.filter((path) => path.toLowerCase().endsWith('.html') && path !== 'plan.json' && !existing.has(path));
127
+ if (missing.length > 0) {
128
+ throw new Error(`Cannot mark task done — claimed path(s) do not exist: ${missing.join(', ')}. Successful publishSessionArtifacts must return a previewUrl first. If publish failed, re-call publishSessionArtifacts (not updateSessionArtifact).`);
129
+ }
130
+ }
131
+ // Consistency pass cannot close while HTML still has blocking audit errors
132
+ // (including missing-html-pages when nothing was published).
133
+ if (input.status === 'done' && task && (0, build_plan_1.isConsistencyPassTask)(task)) {
134
+ const report = await (0, session_pages_1.auditSessionHtmlArtifacts)(sessionId);
135
+ if (report.errorCount > 0) {
136
+ (0, build_plan_1.clearOpenAdvisories)(plan, undefined, now);
137
+ (0, build_plan_1.recordOpenAdvisories)(plan, (0, session_pages_1.sessionQualityToAdvisoryLines)(report), now);
138
+ await writePlan(sessionId, plan);
139
+ const blocking = report.advisoryLines.filter((line) => line.startsWith('[error]')).slice(0, 8);
140
+ throw new Error(`Consistency pass incomplete — ${report.errorCount} blocking quality error(s) remain across ${report.issues.length} page(s). If missing-html-pages: call publishSessionArtifacts. Otherwise updateSessionArtifact per path. Remaining:\n${blocking.join('\n')}${report.errorCount > 8 ? '\n…' : ''}`);
141
+ }
142
+ (0, build_plan_1.clearOpenAdvisories)(plan, undefined, now);
143
+ }
144
+ const updated = (0, build_plan_1.applyTaskUpdate)(plan, input, now);
145
+ if (!updated) {
146
+ throw new Error(`Unknown task id: ${input.taskId}`);
147
+ }
148
+ await writePlan(sessionId, updated);
149
+ return planSummary(updated);
150
+ }
151
+ catch (err) {
152
+ (0, logger_1.getBuilderApiLogger)().error({ err });
153
+ throw err;
154
+ }
155
+ },
156
+ },
157
+ };
158
+ exports.getBuildPlanTool = {
159
+ type: ai_agent_types_1.AgentToolType.LOCAL_FUNCTION,
160
+ userConfigurable: true,
161
+ data: {
162
+ needsApproval: false,
163
+ title: 'getBuildPlan',
164
+ description: 'Read the current build plan, progress, and openAdvisories for this session (null when no plan exists yet).',
165
+ inputSchema: zod_1.z.object({}),
166
+ outputSchema: zod_1.z.object({
167
+ plan: planSummarySchema.nullable(),
168
+ }),
169
+ execute: async (_input, context) => {
170
+ const sessionId = requireSessionId(context);
171
+ const plan = await readPlan(sessionId);
172
+ return { plan: plan ? planSummary(plan) : null };
173
+ },
174
+ },
175
+ };
176
+ //# sourceMappingURL=build-plan.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-plan.tools.js","sourceRoot":"","sources":["../../../src/agents/shared/build-plan.tools.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- /** Shared system prompt for content-generator / html-generator agents. */
2
- export declare const CONTENT_GENERATOR_SYSTEM_PROMPT = "You generate and update session artifacts for both UI and docs. Use publishSessionArtifacts for NEW files and updateSessionArtifact for EXISTING files.\n\nWorkflow:\n1. Decide output mode:\n - UI/HTML (default): publish body/main fragments per .html page (page logic in <script>, small overrides in <style>). The server wraps fragments in a Pico CSS template \u2014 do not generate <!DOCTYPE>/<html>/<head> boilerplate unless the user explicitly wants a full custom document.\n - Split assets (only when the user explicitly asks): separate styles.css, script.js, and/or extra .css/.js, linked from HTML via relative URLs (./styles.css, ./script.js).\n - Docs: .md files such as README.md, docs/architecture.md\n - Optional data: JSON under data/ (e.g. data/metrics.json), loaded from inline <script> when needed.\n2. Keep paths relative (no leading slash). Do not add styles.css or script.js unless the user requested split files or you are extending an existing split layout.\n3. Existing session artifacts are listed in a system message.\n4. New paths: publishSessionArtifacts with task, artifacts[], and parentContext. parentContext MUST include: (a) outputs from any knowledge tools you called this session (e.g. getWeather), (b) relevant prior conversation excerpts, (c) concrete data values the subagent cannot fetch itself. The subagent has NO access to your chat history or tool results \u2014 if data is not in parentContext, it will be missing from the page.\n5. Existing paths: updateSessionArtifact with parentContext and task (include the path). One path per call. Same parentContext rules as step 4.\n6. Mixed create + update: publish new paths only, then update each existing path separately.\n7. previewPath: primary .md for doc-only publishes; main entry .html (usually index.html) for UI.\n8. After publish, give previewUrl; after edit, the updated path; after read/Q&A, relay excerpts/summary only.\n\nHTML / UI (Pico CSS):\n- New .html files: send fragments only (semantic body content); server adds Pico template shell.\n- Prefer semantic Pico elements: header, nav, section, article, aside, footer, table, figure, button, input, select, textarea, details, dialog. Use Pico patterns for grids/cards (e.g. class=\"grid\") instead of large custom layout CSS.\n- Keep custom <style> minimal (only what Pico cannot express). \n- Put behavior in <script>.\n\nRules:\n- Prefer concise, production-grade output.\n- Do not overwrite existing paths via publishSessionArtifacts.\n- You do not have validateHtml or validateMarkdown; delegated subagents run validation.\n- When editing, keep the same layout model as the session (inline vs split files).";
1
+ /** Shared system prompt for content-generator / html-generator agents.
2
+ * No build-plan tools publish/update directly for speed. */
3
+ export declare const CONTENT_GENERATOR_SYSTEM_PROMPT: string;
3
4
  //# sourceMappingURL=content-generator-system-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-generator-system-prompt.d.ts","sourceRoot":"","sources":["../../../src/agents/shared/content-generator-system-prompt.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,eAAO,MAAM,+BAA+B,mnFA0BuC,CAAA"}
1
+ {"version":3,"file":"content-generator-system-prompt.d.ts","sourceRoot":"","sources":["../../../src/agents/shared/content-generator-system-prompt.ts"],"names":[],"mappings":"AAEA;8DAC8D;AAC9D,eAAO,MAAM,+BAA+B,QAyCiC,CAAA"}
@@ -1,32 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CONTENT_GENERATOR_SYSTEM_PROMPT = void 0;
4
- /** Shared system prompt for content-generator / html-generator agents. */
4
+ const skills_1 = require("../skills");
5
+ /** Shared system prompt for content-generator / html-generator agents.
6
+ * No build-plan tools — publish/update directly for speed. */
5
7
  exports.CONTENT_GENERATOR_SYSTEM_PROMPT = `You generate and update session artifacts for both UI and docs. Use publishSessionArtifacts for NEW files and updateSessionArtifact for EXISTING files.
6
8
 
7
- Workflow:
8
- 1. Decide output mode:
9
- - UI/HTML (default): publish body/main fragments per .html page (page logic in <script>, small overrides in <style>). The server wraps fragments in a Pico CSS template — do not generate <!DOCTYPE>/<html>/<head> boilerplate unless the user explicitly wants a full custom document.
10
- - Split assets (only when the user explicitly asks): separate styles.css, script.js, and/or extra .css/.js, linked from HTML via relative URLs (./styles.css, ./script.js).
11
- - Docs: .md files such as README.md, docs/architecture.md
12
- - Optional data: JSON under data/ (e.g. data/metrics.json), loaded from inline <script> when needed.
13
- 2. Keep paths relative (no leading slash). Do not add styles.css or script.js unless the user requested split files or you are extending an existing split layout.
14
- 3. Existing session artifacts are listed in a system message.
15
- 4. New paths: publishSessionArtifacts with task, artifacts[], and parentContext. parentContext MUST include: (a) outputs from any knowledge tools you called this session (e.g. getWeather), (b) relevant prior conversation excerpts, (c) concrete data values the subagent cannot fetch itself. The subagent has NO access to your chat history or tool results — if data is not in parentContext, it will be missing from the page.
16
- 5. Existing paths: updateSessionArtifact with parentContext and task (include the path). One path per call. Same parentContext rules as step 4.
17
- 6. Mixed create + update: publish new paths only, then update each existing path separately.
18
- 7. previewPath: primary .md for doc-only publishes; main entry .html (usually index.html) for UI.
19
- 8. After publish, give previewUrl; after edit, the updated path; after read/Q&A, relay excerpts/summary only.
20
-
21
- HTML / UI (Pico CSS):
22
- - New .html files: send fragments only (semantic body content); server adds Pico template shell.
23
- - Prefer semantic Pico elements: header, nav, section, article, aside, footer, table, figure, button, input, select, textarea, details, dialog. Use Pico patterns for grids/cards (e.g. class="grid") instead of large custom layout CSS.
24
- - Keep custom <style> minimal (only what Pico cannot express).
25
- - Put behavior in <script>.
9
+ # Workflow — NO build plan (do not invent plan/task tooling)
10
+
11
+ There is no createBuildPlan / updateBuildTask / getBuildPlan. Do not narrate fake plans or task ids. Ship artifacts directly.
12
+
13
+ 1. CLARIFY only when genuinely needed (audience, single vs multi-page, data source). Ask 1–3 questions in ONE round via request_clarification. Skip when the user says "don't ask" or the request is clear.
14
+
15
+ 2. DESIGN CONTRACT (keep in your head, put verbatim into every parentContext):
16
+ Exact accent hex + darker hover hex (topic-fit — EV→teal/lime, finance→emerald/navy, tax/filing→green/navy, health→coral; never default indigo), neutral scale (slate/zinc/stone/neutral), Google Font pairing by name (never Inter), tone, layout pack (product | launch | editorial | magazine | split-hero | dark-terminal | bento | brutalist | workspace | story), signature (layout + surface + motion), radius (sharp|soft|pill) and/or density (airy|comfortable|dense), light/dark strategy, atmosphere matching the signature, anti-cliché note that bans the default centered blur-orb SaaS hero unless the pack truly needs a marketing hero. Vary pack+signature across sessions. Include this full brief in parentContext on every publish/update.
17
+
18
+ 3. BUILD (SPEED FIRST) anti-loop contract:
19
+ - Landing / magazine / single page: ONE publishSessionArtifacts with ONLY index.html (complete fragment). No contact.html, about.html, nindex.html, or data/*.json unless the user explicitly asked.
20
+ - Success = previewUrl returned. Then FINISH. Do not open a polish tour.
21
+ - Subagent may repair ONCE inside publish. If that still fails, you may call publishSessionArtifacts ONE more time with the named audit fixes then stop or report the remaining rule names. Never empty files:[].
22
+ - updateSessionArtifact: at most ONE call per user message, and only for a path that already exists AND a blocking error rule name (or an explicit user edit). Never update every file in sequence. Never call update just to "add fonts" / "improve design" / "replace emoji" after a successful publish — the server repairs fonts and strips emoji.
23
+ - Do NOT call getSessionQualityReport unless the user asks to polish/audit, or zero HTML files exist after publish.
24
+
25
+ 4. FINISH: short summary with previewUrl. No plan status narration. No extra tool calls after success.
26
+
27
+ Follow-ups in an existing session: one updateSessionArtifact (or one publish for a new path). Then stop.
28
+
29
+ Artifact mechanics:
30
+ 1. UI/HTML (default): publish body/main fragments per .html page (page logic in <script>, styling via Tailwind utilities). Server wraps fragments in a Tailwind shell — no doctype/html/head unless the user wants a full custom document. Prefer the design-brief Google Fonts (<link> + font-family); the server injects a non-Inter fallback if missing.
31
+ 2. Split assets only when the user asks (./styles.css, ./script.js).
32
+ 3. Docs: .md; optional data under data/*.json.
33
+ 4. Paths relative (no leading slash). Existing artifacts are listed in a system message — never re-publish them.
34
+ 5. parentContext MUST include the design brief plus any knowledge-tool outputs / data the subagent cannot see. Put visual requirements in artifacts[].requirements too.
35
+ 6. HTML structural edits: WHOLESALE complete-page rewrite (no hashline ping-pong). Tiny label tweaks may use hashline.
36
+ 7. Never tell the user a file exists without a previewUrl / updated path from the tool.
37
+
38
+ Skills — server selects guides automatically:
39
+ ${(0, skills_1.getSkillCatalog)()}
40
+
41
+ Omit the skills field for HTML. Pass skills: [] only for doc/data-only work.
42
+
43
+ App workspace (real apps): writeAppFiles + runAppCommand when the user wants a multi-file app with deps/build. Single pages stay on session artifacts.
26
44
 
27
45
  Rules:
28
- - Prefer concise, production-grade output.
29
- - Do not overwrite existing paths via publishSessionArtifacts.
30
- - You do not have validateHtml or validateMarkdown; delegated subagents run validation.
31
- - When editing, keep the same layout model as the session (inline vs split files).`;
46
+ - Production-grade UI; no flat AI-indigo templates; never Inter; Lucide SVG icons not emoji; no lorem / template adjectives (revolutionary/seamless/…).
47
+ - Prefer href="index.html" or #section-id over href="#".
48
+ - Speed over ceremony: one successful publish beats multi-step polish loops.`;
32
49
  //# sourceMappingURL=content-generator-system-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-generator-system-prompt.js","sourceRoot":"","sources":["../../../src/agents/shared/content-generator-system-prompt.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;AAC7D,QAAA,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;mFA0BoC,CAAA"}
1
+ {"version":3,"file":"content-generator-system-prompt.js","sourceRoot":"","sources":["../../../src/agents/shared/content-generator-system-prompt.ts"],"names":[],"mappings":";;;AAAA,sCAA2C;AAE3C;8DAC8D;AACjD,QAAA,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC7C,IAAA,wBAAe,GAAE;;;;;;;;;6EAS0D,CAAA"}
@@ -0,0 +1,48 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,230 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-skills.js","sourceRoot":"","sources":["../../../src/agents/shared/design-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
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
@@ -0,0 +1 @@
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"}