@multiplayer-app/sandbox 0.0.31 → 0.0.32

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 (186) hide show
  1. package/dist/agents/html-generator.agent.d.ts +3 -1
  2. package/dist/agents/html-generator.agent.d.ts.map +1 -1
  3. package/dist/agents/html-generator.agent.js +90 -4
  4. package/dist/agents/html-generator.agent.js.map +1 -1
  5. package/dist/agents/markdown-generator.agent.d.ts.map +1 -1
  6. package/dist/agents/markdown-generator.agent.js +5 -10
  7. package/dist/agents/markdown-generator.agent.js.map +1 -1
  8. package/dist/agents/shared/app-vm.tools.d.ts +4 -0
  9. package/dist/agents/shared/app-vm.tools.d.ts.map +1 -0
  10. package/dist/agents/shared/app-vm.tools.js +105 -0
  11. package/dist/agents/shared/app-vm.tools.js.map +1 -0
  12. package/dist/agents/shared/build-plan.tools.d.ts +5 -0
  13. package/dist/agents/shared/build-plan.tools.d.ts.map +1 -0
  14. package/dist/agents/shared/build-plan.tools.js +176 -0
  15. package/dist/agents/shared/build-plan.tools.js.map +1 -0
  16. package/dist/agents/shared/session-quality-report.tool.d.ts +7 -0
  17. package/dist/agents/shared/session-quality-report.tool.d.ts.map +1 -0
  18. package/dist/agents/shared/session-quality-report.tool.js +97 -0
  19. package/dist/agents/shared/session-quality-report.tool.js.map +1 -0
  20. package/dist/agents/shared/session-vm-bridge.d.ts +49 -0
  21. package/dist/agents/shared/session-vm-bridge.d.ts.map +1 -0
  22. package/dist/agents/shared/session-vm-bridge.js +9 -0
  23. package/dist/agents/shared/session-vm-bridge.js.map +1 -0
  24. package/dist/agents/skills/a11y.skill.d.ts +3 -0
  25. package/dist/agents/skills/a11y.skill.d.ts.map +1 -0
  26. package/dist/agents/skills/a11y.skill.js +23 -0
  27. package/dist/agents/skills/a11y.skill.js.map +1 -0
  28. package/dist/agents/skills/account-skill-loader.d.ts +13 -0
  29. package/dist/agents/skills/account-skill-loader.d.ts.map +1 -0
  30. package/dist/agents/skills/account-skill-loader.js +42 -0
  31. package/dist/agents/skills/account-skill-loader.js.map +1 -0
  32. package/dist/agents/skills/app-scaffold.skill.d.ts +3 -0
  33. package/dist/agents/skills/app-scaffold.skill.d.ts.map +1 -0
  34. package/dist/agents/skills/app-scaffold.skill.js +30 -0
  35. package/dist/agents/skills/app-scaffold.skill.js.map +1 -0
  36. package/dist/agents/skills/copywriting.skill.d.ts +3 -0
  37. package/dist/agents/skills/copywriting.skill.d.ts.map +1 -0
  38. package/dist/agents/skills/copywriting.skill.js +35 -0
  39. package/dist/agents/skills/copywriting.skill.js.map +1 -0
  40. package/dist/agents/skills/custom-skill-repository.d.ts +40 -0
  41. package/dist/agents/skills/custom-skill-repository.d.ts.map +1 -0
  42. package/dist/agents/skills/custom-skill-repository.js +3 -0
  43. package/dist/agents/skills/custom-skill-repository.js.map +1 -0
  44. package/dist/agents/skills/data-viz.skill.d.ts +3 -0
  45. package/dist/agents/skills/data-viz.skill.d.ts.map +1 -0
  46. package/dist/agents/skills/data-viz.skill.js +42 -0
  47. package/dist/agents/skills/data-viz.skill.js.map +1 -0
  48. package/dist/agents/skills/designer.skill.d.ts +3 -0
  49. package/dist/agents/skills/designer.skill.d.ts.map +1 -0
  50. package/dist/agents/skills/designer.skill.js +139 -0
  51. package/dist/agents/skills/designer.skill.js.map +1 -0
  52. package/dist/agents/skills/forms.skill.d.ts +3 -0
  53. package/dist/agents/skills/forms.skill.d.ts.map +1 -0
  54. package/dist/agents/skills/forms.skill.js +37 -0
  55. package/dist/agents/skills/forms.skill.js.map +1 -0
  56. package/dist/agents/skills/index.d.ts +6 -0
  57. package/dist/agents/skills/index.d.ts.map +1 -0
  58. package/dist/agents/skills/index.js +18 -0
  59. package/dist/agents/skills/index.js.map +1 -0
  60. package/dist/agents/skills/interactions.skill.d.ts +3 -0
  61. package/dist/agents/skills/interactions.skill.d.ts.map +1 -0
  62. package/dist/agents/skills/interactions.skill.js +31 -0
  63. package/dist/agents/skills/interactions.skill.js.map +1 -0
  64. package/dist/agents/skills/registry.d.ts +23 -0
  65. package/dist/agents/skills/registry.d.ts.map +1 -0
  66. package/dist/agents/skills/registry.js +75 -0
  67. package/dist/agents/skills/registry.js.map +1 -0
  68. package/dist/agents/skills/skill-injection.d.ts +52 -0
  69. package/dist/agents/skills/skill-injection.d.ts.map +1 -0
  70. package/dist/agents/skills/skill-injection.js +210 -0
  71. package/dist/agents/skills/skill-injection.js.map +1 -0
  72. package/dist/agents/skills/types.d.ts +12 -0
  73. package/dist/agents/skills/types.d.ts.map +1 -0
  74. package/dist/agents/skills/types.js +3 -0
  75. package/dist/agents/skills/types.js.map +1 -0
  76. package/dist/builder-api-config.d.ts +7 -0
  77. package/dist/builder-api-config.d.ts.map +1 -1
  78. package/dist/builder-api-config.js.map +1 -1
  79. package/dist/context.d.ts +7 -0
  80. package/dist/context.d.ts.map +1 -1
  81. package/dist/context.js +19 -0
  82. package/dist/context.js.map +1 -1
  83. package/dist/create-builder-api.d.ts +2 -3
  84. package/dist/create-builder-api.d.ts.map +1 -1
  85. package/dist/create-builder-api.js +18 -0
  86. package/dist/create-builder-api.js.map +1 -1
  87. package/dist/index.d.ts +2 -1
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +2 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/lib/library/list-library-items.d.ts +2 -2
  92. package/dist/lib/library/list-library-items.d.ts.map +1 -1
  93. package/dist/lib/library/list-library-items.js +49 -7
  94. package/dist/lib/library/list-library-items.js.map +1 -1
  95. package/dist/lib/object-storage/index.d.ts +3 -0
  96. package/dist/lib/object-storage/index.d.ts.map +1 -0
  97. package/dist/lib/object-storage/index.js +19 -0
  98. package/dist/lib/object-storage/index.js.map +1 -0
  99. package/dist/lib/object-storage/keys.d.ts +10 -0
  100. package/dist/lib/object-storage/keys.d.ts.map +1 -0
  101. package/dist/lib/object-storage/keys.js +51 -0
  102. package/dist/lib/object-storage/keys.js.map +1 -0
  103. package/dist/lib/object-storage/s3-object-store.d.ts +14 -0
  104. package/dist/lib/object-storage/s3-object-store.d.ts.map +1 -0
  105. package/dist/lib/object-storage/s3-object-store.js +64 -0
  106. package/dist/lib/object-storage/s3-object-store.js.map +1 -0
  107. package/dist/lib/session-pages/artifact-quality-audit.d.ts +16 -0
  108. package/dist/lib/session-pages/artifact-quality-audit.d.ts.map +1 -0
  109. package/dist/lib/session-pages/artifact-quality-audit.js +293 -0
  110. package/dist/lib/session-pages/artifact-quality-audit.js.map +1 -0
  111. package/dist/lib/session-pages/artifact-storage.d.ts +3 -0
  112. package/dist/lib/session-pages/artifact-storage.d.ts.map +1 -1
  113. package/dist/lib/session-pages/artifact-storage.js +94 -85
  114. package/dist/lib/session-pages/artifact-storage.js.map +1 -1
  115. package/dist/lib/session-pages/audit-session-html.d.ts +23 -0
  116. package/dist/lib/session-pages/audit-session-html.d.ts.map +1 -0
  117. package/dist/lib/session-pages/audit-session-html.js +82 -0
  118. package/dist/lib/session-pages/audit-session-html.js.map +1 -0
  119. package/dist/lib/session-pages/contrast-check.d.ts +25 -0
  120. package/dist/lib/session-pages/contrast-check.d.ts.map +1 -0
  121. package/dist/lib/session-pages/contrast-check.js +290 -0
  122. package/dist/lib/session-pages/contrast-check.js.map +1 -0
  123. package/dist/lib/session-pages/deferred-quality-rules.d.ts +7 -0
  124. package/dist/lib/session-pages/deferred-quality-rules.d.ts.map +1 -0
  125. package/dist/lib/session-pages/deferred-quality-rules.js +25 -0
  126. package/dist/lib/session-pages/deferred-quality-rules.js.map +1 -0
  127. package/dist/lib/session-pages/delete-session-artifact.d.ts.map +1 -1
  128. package/dist/lib/session-pages/delete-session-artifact.js +12 -41
  129. package/dist/lib/session-pages/delete-session-artifact.js.map +1 -1
  130. package/dist/lib/session-pages/delete-session-artifacts.d.ts +0 -6
  131. package/dist/lib/session-pages/delete-session-artifacts.d.ts.map +1 -1
  132. package/dist/lib/session-pages/delete-session-artifacts.js +51 -15
  133. package/dist/lib/session-pages/delete-session-artifacts.js.map +1 -1
  134. package/dist/lib/session-pages/list-session-artifacts.d.ts.map +1 -1
  135. package/dist/lib/session-pages/list-session-artifacts.js +48 -48
  136. package/dist/lib/session-pages/list-session-artifacts.js.map +1 -1
  137. package/dist/lib/session-pages/read-session-artifacts.d.ts.map +1 -1
  138. package/dist/lib/session-pages/read-session-artifacts.js +4 -26
  139. package/dist/lib/session-pages/read-session-artifacts.js.map +1 -1
  140. package/dist/lib/session-pages/resolve-session-account-id.d.ts +3 -0
  141. package/dist/lib/session-pages/resolve-session-account-id.d.ts.map +1 -0
  142. package/dist/lib/session-pages/resolve-session-account-id.js +31 -0
  143. package/dist/lib/session-pages/resolve-session-account-id.js.map +1 -0
  144. package/dist/lib/session-pages/write-session-artifacts.d.ts +0 -2
  145. package/dist/lib/session-pages/write-session-artifacts.d.ts.map +1 -1
  146. package/dist/lib/session-pages/write-session-artifacts.js +8 -0
  147. package/dist/lib/session-pages/write-session-artifacts.js.map +1 -1
  148. package/dist/lib/session-plans/build-plan.d.ts +64 -0
  149. package/dist/lib/session-plans/build-plan.d.ts.map +1 -0
  150. package/dist/lib/session-plans/build-plan.js +134 -0
  151. package/dist/lib/session-plans/build-plan.js.map +1 -0
  152. package/dist/lib/yjs-pending/flush-lock.d.ts +6 -0
  153. package/dist/lib/yjs-pending/flush-lock.d.ts.map +1 -0
  154. package/dist/lib/yjs-pending/flush-lock.js +43 -0
  155. package/dist/lib/yjs-pending/flush-lock.js.map +1 -0
  156. package/dist/lib/yjs-pending/flush-worker.d.ts +5 -0
  157. package/dist/lib/yjs-pending/flush-worker.d.ts.map +1 -0
  158. package/dist/lib/yjs-pending/flush-worker.js +75 -0
  159. package/dist/lib/yjs-pending/flush-worker.js.map +1 -0
  160. package/dist/lib/yjs-pending/yjs-pending-updates-repository.d.ts +22 -0
  161. package/dist/lib/yjs-pending/yjs-pending-updates-repository.d.ts.map +1 -0
  162. package/dist/lib/yjs-pending/yjs-pending-updates-repository.js +3 -0
  163. package/dist/lib/yjs-pending/yjs-pending-updates-repository.js.map +1 -0
  164. package/dist/lib/yjs-pending/yjs-persistence.d.ts +23 -0
  165. package/dist/lib/yjs-pending/yjs-persistence.d.ts.map +1 -0
  166. package/dist/lib/yjs-pending/yjs-persistence.js +222 -0
  167. package/dist/lib/yjs-pending/yjs-persistence.js.map +1 -0
  168. package/dist/realtime/reset-session-artifact-y-docs.d.ts.map +1 -1
  169. package/dist/realtime/reset-session-artifact-y-docs.js +1 -6
  170. package/dist/realtime/reset-session-artifact-y-docs.js.map +1 -1
  171. package/dist/realtime/session-artifact-y-socket-io.d.ts +0 -5
  172. package/dist/realtime/session-artifact-y-socket-io.d.ts.map +1 -1
  173. package/dist/realtime/session-artifact-y-socket-io.js +5 -69
  174. package/dist/realtime/session-artifact-y-socket-io.js.map +1 -1
  175. package/dist/realtime/session-artifact-yjs-store.d.ts +3 -35
  176. package/dist/realtime/session-artifact-yjs-store.d.ts.map +1 -1
  177. package/dist/realtime/session-artifact-yjs-store.js +75 -235
  178. package/dist/realtime/session-artifact-yjs-store.js.map +1 -1
  179. package/dist/routes/sessions.d.ts.map +1 -1
  180. package/dist/routes/sessions.js +26 -6
  181. package/dist/routes/sessions.js.map +1 -1
  182. package/dist/routes/skills.d.ts +2 -0
  183. package/dist/routes/skills.d.ts.map +1 -0
  184. package/dist/routes/skills.js +140 -0
  185. package/dist/routes/skills.js.map +1 -0
  186. package/package.json +2 -2
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getContextAccountId = exports.loadAccountSkills = exports.createSkillInjectingPrepareStep = exports.extractDesignTokens = exports.inferRequestedSkills = exports.extractRequestedSkills = exports.buildSkillGuidance = exports.mergeSkills = exports.getSkillCatalog = exports.STATIC_SKILL_GUIDES = exports.GENERATION_SKILLS = void 0;
4
+ var registry_1 = require("./registry");
5
+ Object.defineProperty(exports, "GENERATION_SKILLS", { enumerable: true, get: function () { return registry_1.GENERATION_SKILLS; } });
6
+ Object.defineProperty(exports, "STATIC_SKILL_GUIDES", { enumerable: true, get: function () { return registry_1.STATIC_SKILL_GUIDES; } });
7
+ Object.defineProperty(exports, "getSkillCatalog", { enumerable: true, get: function () { return registry_1.getSkillCatalog; } });
8
+ Object.defineProperty(exports, "mergeSkills", { enumerable: true, get: function () { return registry_1.mergeSkills; } });
9
+ Object.defineProperty(exports, "buildSkillGuidance", { enumerable: true, get: function () { return registry_1.buildSkillGuidance; } });
10
+ var skill_injection_1 = require("./skill-injection");
11
+ Object.defineProperty(exports, "extractRequestedSkills", { enumerable: true, get: function () { return skill_injection_1.extractRequestedSkills; } });
12
+ Object.defineProperty(exports, "inferRequestedSkills", { enumerable: true, get: function () { return skill_injection_1.inferRequestedSkills; } });
13
+ Object.defineProperty(exports, "extractDesignTokens", { enumerable: true, get: function () { return skill_injection_1.extractDesignTokens; } });
14
+ Object.defineProperty(exports, "createSkillInjectingPrepareStep", { enumerable: true, get: function () { return skill_injection_1.createSkillInjectingPrepareStep; } });
15
+ var account_skill_loader_1 = require("./account-skill-loader");
16
+ Object.defineProperty(exports, "loadAccountSkills", { enumerable: true, get: function () { return account_skill_loader_1.loadAccountSkills; } });
17
+ Object.defineProperty(exports, "getContextAccountId", { enumerable: true, get: function () { return account_skill_loader_1.getContextAccountId; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/skills/index.ts"],"names":[],"mappings":";;;AACA,uCAMmB;AALjB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,uGAAA,WAAW,OAAA;AACX,8GAAA,kBAAkB,OAAA;AAEpB,qDAK0B;AAJxB,yHAAA,sBAAsB,OAAA;AACtB,uHAAA,oBAAoB,OAAA;AACpB,sHAAA,mBAAmB,OAAA;AACnB,kIAAA,+BAA+B,OAAA;AAEjC,+DAI+B;AAH7B,yHAAA,iBAAiB,OAAA;AACjB,2HAAA,mBAAmB,OAAA"}
@@ -0,0 +1,3 @@
1
+ import type { GenerationSkill } from './types';
2
+ export declare const interactionsSkill: GenerationSkill;
3
+ //# sourceMappingURL=interactions.skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.skill.d.ts","sourceRoot":"","sources":["../../../src/agents/skills/interactions.skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,iBAAiB,EAAE,eA0B/B,CAAA"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.interactionsSkill = void 0;
4
+ exports.interactionsSkill = {
5
+ name: 'interactions',
6
+ description: 'Tabs, modals, filtering, sorting, scroll reveals, persisted state — vanilla JS recipes',
7
+ whenToUse: 'Pages with stateful behavior: switching views, filtering/sorting collections, dialogs, animated content.',
8
+ instructions: `## interactions
9
+
10
+ Real behavior in <script>, vanilla JS, no frameworks. Wire everything with addEventListener on DOMContentLoaded (or place scripts at fragment end); use data-* attributes to connect controls to targets; never inline onclick handlers.
11
+
12
+ ### Recipes
13
+ - **Mobile nav**: md:hidden menu button toggles a panel (fixed inset or header dropdown) with the same links; aria-expanded on the button; Esc + backdrop click closes. A sticky header without this looks broken on phones.
14
+ - **Tabs**: buttons with role="tab" + aria-selected in a role="tablist"; panels with role="tabpanel" + hidden attr. Arrow keys move focus between tabs. Toggle by flipping hidden + aria-selected.
15
+ - **Modal**: native <dialog>; open with dialog.showModal() (focus trap + Esc for free); close button inside plus click-on-backdrop close (event.target === dialog). Style ::backdrop with a blur.
16
+ - **Accordion**: native <details>/<summary> styled as cards; add name="group" for exclusive-open behavior.
17
+ - **Live filter/search**: one input, on 'input' toggle a .hidden class per item by textContent match (lowercased includes). Show an empty-state element when nothing matches. Debounce only if the list is huge.
18
+ - **Sortable table**: click th toggles asc/desc (aria-sort), sorts rows with Array.from(tbody.rows).sort(), re-appends. Numeric columns compare Number(cell.dataset.value ?? cell.textContent).
19
+ - **Reveal on scroll**: IntersectionObserver adds .visible once (then unobserve); CSS: .reveal { opacity: 0; translate: 0 16px; transition: .5s ease } .reveal.visible { opacity: 1; translate: 0 }.
20
+ - **Animated counters**: on first intersection, tween from 0 to target over ~800ms with requestAnimationFrame + ease-out; format with toLocaleString().
21
+ - **Persisted state**: read/write one JSON blob in localStorage (single namespaced key like 'app:<page>:state') for theme choice, filters, form drafts, todo items. Hydrate on load inside try/catch — corrupt storage must not break the page.
22
+ - **Toasts**: single fixed container; appended elements auto-remove after ~3.5s; role="status" so screen readers announce.
23
+
24
+ ### Rules
25
+ - Every animation and transition sits behind: @media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important } } — or gate JS tweens on matchMedia('(prefers-reduced-motion: reduce)').
26
+ - Keyboard first: anything clickable is a <button> or <a>, never a div with a handler. Esc closes overlays. Focus-visible styles stay intact.
27
+ - State updates re-render from data (an array of objects in JS), not by string-concatenating HTML across the page; use <template> elements for repeated items.
28
+ - Guard every querySelector result; a missing node must not throw and kill the rest of the script.
29
+ - No external JS libraries for these patterns — they are all ~20 lines of vanilla each. A CDN library is justified only for genuinely hard problems (charts, maps, 3D).`,
30
+ };
31
+ //# sourceMappingURL=interactions.skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.skill.js","sourceRoot":"","sources":["../../../src/agents/skills/interactions.skill.ts"],"names":[],"mappings":";;;AAEa,QAAA,iBAAiB,GAAoB;IAChD,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,wFAAwF;IACrG,SAAS,EAAE,0GAA0G;IACrH,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;wKAqBwJ;CACvK,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { GenerationSkill } from './types';
2
+ export declare const GENERATION_SKILLS: GenerationSkill[];
3
+ /**
4
+ * Universal HTML guides baked into artifact prompts. Optional domain guides
5
+ * (forms, charts, interactions) are selected per task by prepareStep. Baking
6
+ * every guide into every call added ~26KB of competing instructions.
7
+ */
8
+ export declare const STATIC_SKILL_GUIDES: string;
9
+ /**
10
+ * Merge account-defined skills over the built-ins. A custom skill with a
11
+ * built-in's name shadows it (brand packs can replace "designer" account-wide);
12
+ * new names are appended in the order given.
13
+ */
14
+ export declare function mergeSkills(customSkills?: GenerationSkill[]): GenerationSkill[];
15
+ /** Compact one-line-per-skill catalog for the orchestrator system prompt. */
16
+ export declare function getSkillCatalog(customSkills?: GenerationSkill[]): string;
17
+ /**
18
+ * Build task-specific guidance on top of the universal guides baked into the
19
+ * system prompt. Account guides remain account-wide and override built-ins.
20
+ * An explicit empty array (doc/data-only work) suppresses all dynamic guides.
21
+ */
22
+ export declare function buildSkillGuidance(names: string[] | undefined, customSkills?: GenerationSkill[]): string | undefined;
23
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agents/skills/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAS9C,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAQ9C,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAIjB,CAAA;AAEf;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,YAAY,GAAE,eAAe,EAAO,GAAG,eAAe,EAAE,CAMnF;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,YAAY,GAAE,eAAe,EAAO,GAAG,MAAM,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAC3B,YAAY,GAAE,eAAe,EAAO,GACnC,MAAM,GAAG,SAAS,CAuBpB"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STATIC_SKILL_GUIDES = exports.GENERATION_SKILLS = void 0;
4
+ exports.mergeSkills = mergeSkills;
5
+ exports.getSkillCatalog = getSkillCatalog;
6
+ exports.buildSkillGuidance = buildSkillGuidance;
7
+ const designer_skill_1 = require("./designer.skill");
8
+ const data_viz_skill_1 = require("./data-viz.skill");
9
+ const interactions_skill_1 = require("./interactions.skill");
10
+ const forms_skill_1 = require("./forms.skill");
11
+ const copywriting_skill_1 = require("./copywriting.skill");
12
+ const a11y_skill_1 = require("./a11y.skill");
13
+ const app_scaffold_skill_1 = require("./app-scaffold.skill");
14
+ exports.GENERATION_SKILLS = [
15
+ designer_skill_1.designerSkill,
16
+ data_viz_skill_1.dataVizSkill,
17
+ interactions_skill_1.interactionsSkill,
18
+ forms_skill_1.formsSkill,
19
+ copywriting_skill_1.copywritingSkill,
20
+ a11y_skill_1.a11ySkill,
21
+ app_scaffold_skill_1.appScaffoldSkill,
22
+ ];
23
+ const STATIC_SKILL_NAMES = new Set(['designer', 'a11y', 'copywriting']);
24
+ /**
25
+ * Universal HTML guides baked into artifact prompts. Optional domain guides
26
+ * (forms, charts, interactions) are selected per task by prepareStep. Baking
27
+ * every guide into every call added ~26KB of competing instructions.
28
+ */
29
+ exports.STATIC_SKILL_GUIDES = exports.GENERATION_SKILLS.filter((skill) => STATIC_SKILL_NAMES.has(skill.name))
30
+ .map((skill) => skill.instructions)
31
+ .join('\n\n');
32
+ /**
33
+ * Merge account-defined skills over the built-ins. A custom skill with a
34
+ * built-in's name shadows it (brand packs can replace "designer" account-wide);
35
+ * new names are appended in the order given.
36
+ */
37
+ function mergeSkills(customSkills = []) {
38
+ const merged = new Map(exports.GENERATION_SKILLS.map((skill) => [skill.name, skill]));
39
+ for (const skill of customSkills) {
40
+ merged.set(skill.name, skill);
41
+ }
42
+ return [...merged.values()];
43
+ }
44
+ /** Compact one-line-per-skill catalog for the orchestrator system prompt. */
45
+ function getSkillCatalog(customSkills = []) {
46
+ return mergeSkills(customSkills)
47
+ .map((skill) => `- ${skill.name} — ${skill.description}. Use for: ${skill.whenToUse}`)
48
+ .join('\n');
49
+ }
50
+ /**
51
+ * Build task-specific guidance on top of the universal guides baked into the
52
+ * system prompt. Account guides remain account-wide and override built-ins.
53
+ * An explicit empty array (doc/data-only work) suppresses all dynamic guides.
54
+ */
55
+ function buildSkillGuidance(names, customSkills = []) {
56
+ if (names !== undefined && names.length === 0) {
57
+ return undefined;
58
+ }
59
+ const customNames = new Set(customSkills.map((skill) => skill.name));
60
+ const requestedNames = new Set(names !== null && names !== void 0 ? names : []);
61
+ const selectedBuiltIns = exports.GENERATION_SKILLS.filter((skill) => requestedNames.has(skill.name) &&
62
+ !STATIC_SKILL_NAMES.has(skill.name) &&
63
+ skill.name !== app_scaffold_skill_1.appScaffoldSkill.name &&
64
+ !customNames.has(skill.name));
65
+ const selected = [...selectedBuiltIns, ...customSkills];
66
+ if (selected.length === 0) {
67
+ return undefined;
68
+ }
69
+ return `# Task-specific skill guides
70
+
71
+ Apply the relevant guides below. Account-defined guides override built-in guidance with the same name or topic.
72
+
73
+ ${selected.map((skill) => skill.instructions).join('\n\n')}`;
74
+ }
75
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agents/skills/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { AdditionalContext } from '@multiplayer-app/ai-agent-types';
2
+ import { type AccountSkillLoader } from './account-skill-loader';
3
+ interface MessageLike {
4
+ role?: string;
5
+ content?: unknown;
6
+ }
7
+ interface PrepareStepOptions {
8
+ messages?: MessageLike[];
9
+ stepCount?: number;
10
+ stepNumber?: number;
11
+ steps?: unknown[];
12
+ }
13
+ /**
14
+ * Subagents receive the parent tool input as their first user message (JSON).
15
+ * Extract the `skills` array from it; undefined when absent or unparsable.
16
+ */
17
+ export declare function extractRequestedSkills(messages: MessageLike[] | undefined): string[] | undefined;
18
+ /**
19
+ * Select optional generation guides from the concrete delegated task. This is
20
+ * deterministic orchestration: the parent does not need to remember skill
21
+ * names, and unrelated manuals do not compete for the model's attention.
22
+ */
23
+ export declare function inferRequestedSkills(messages: MessageLike[] | undefined): string[] | undefined;
24
+ /**
25
+ * Pull concrete tokens out of free-text designBrief so subagents see a
26
+ * machine-readable contract, not only prose.
27
+ */
28
+ export declare function extractDesignTokens(brief: string): string | undefined;
29
+ /**
30
+ * Cross-page consistency: subagents can't see previously published pages, so
31
+ * without this every page invents its own palette and chrome. Extract the
32
+ * session entry page's design system (style block + header + footer) and
33
+ * inject it verbatim so later pages reuse it.
34
+ */
35
+ export declare function buildSessionDesignContext(context?: AdditionalContext): Promise<string | undefined>;
36
+ /**
37
+ * prepareStep for artifact subagents. Universal designer/a11y guidance is
38
+ * baked into the prompt; optional guides are inferred from the delegated task,
39
+ * while account guides and the established session design system are appended
40
+ * at runtime. An explicit `skills: []` opts doc/data-only tasks out; empty
41
+ * skills on HTML/UI tasks are ignored so inference still runs. The FIRST
42
+ * step (and only the first — config-level
43
+ * 'required' loops because the framework's downgrade cannot see SDK-internal
44
+ * steps) also forces a tool call so models cannot reply with prose describing
45
+ * files they never created.
46
+ */
47
+ export declare function createSkillInjectingPrepareStep(loader?: AccountSkillLoader): (options: PrepareStepOptions, context?: AdditionalContext) => Promise<{
48
+ messages?: MessageLike[];
49
+ toolChoice?: "required";
50
+ } | undefined>;
51
+ export {};
52
+ //# sourceMappingURL=skill-injection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-injection.d.ts","sourceRoot":"","sources":["../../../src/agents/skills/skill-injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAOnF,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;CAClB;AAsBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CA6BhG;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAsC9F;AAUD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAarE;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6CxG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,GAAE,kBAAsC,IAE1F,SAAS,kBAAkB,EAC3B,UAAU,iBAAiB,KAC1B,OAAO,CAAC;IAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,SAAS,CAAC,CA0B9E"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractRequestedSkills = extractRequestedSkills;
4
+ exports.inferRequestedSkills = inferRequestedSkills;
5
+ exports.extractDesignTokens = extractDesignTokens;
6
+ exports.buildSessionDesignContext = buildSessionDesignContext;
7
+ exports.createSkillInjectingPrepareStep = createSkillInjectingPrepareStep;
8
+ const registry_1 = require("./registry");
9
+ const account_skill_loader_1 = require("./account-skill-loader");
10
+ const agent_context_1 = require("../shared/agent-context");
11
+ const session_pages_1 = require("../../lib/session-pages");
12
+ const build_plan_1 = require("../../lib/session-plans/build-plan");
13
+ const session_artifact_yjs_store_1 = require("../../realtime/session-artifact-yjs-store");
14
+ const logger_1 = require("../../logger");
15
+ function isFirstStep(options) {
16
+ var _a, _b;
17
+ if (Array.isArray(options.steps)) {
18
+ return options.steps.length === 0;
19
+ }
20
+ return ((_b = (_a = options.stepNumber) !== null && _a !== void 0 ? _a : options.stepCount) !== null && _b !== void 0 ? _b : 0) === 0;
21
+ }
22
+ function messageText(message) {
23
+ if (typeof message.content === 'string') {
24
+ return message.content;
25
+ }
26
+ if (Array.isArray(message.content)) {
27
+ const text = message.content
28
+ .map((part) => (part && typeof part === 'object' && typeof part.text === 'string' ? part.text : ''))
29
+ .join('');
30
+ return text || undefined;
31
+ }
32
+ return undefined;
33
+ }
34
+ /**
35
+ * Subagents receive the parent tool input as their first user message (JSON).
36
+ * Extract the `skills` array from it; undefined when absent or unparsable.
37
+ */
38
+ function extractRequestedSkills(messages) {
39
+ const firstUser = messages === null || messages === void 0 ? void 0 : messages.find((message) => message.role === 'user');
40
+ const text = firstUser ? messageText(firstUser) : undefined;
41
+ if (!text) {
42
+ return undefined;
43
+ }
44
+ try {
45
+ const input = JSON.parse(text);
46
+ const skills = input === null || input === void 0 ? void 0 : input.skills;
47
+ if (Array.isArray(skills)) {
48
+ const names = skills.filter((name) => typeof name === 'string');
49
+ // Parents often pass skills: [] on HTML by mistake. Empty means "docs/data
50
+ // only — skip guides"; for HTML/UI tasks treat empty as omit → inference.
51
+ if (names.length === 0) {
52
+ const lower = text.toLowerCase();
53
+ const isHtml = /\.html?\b/.test(lower) ||
54
+ /\b(?:web\s?page|landing|dashboard|website|hero|features?\s+section|footer|nav|ui)\b/.test(lower);
55
+ if (isHtml)
56
+ return undefined;
57
+ return [];
58
+ }
59
+ return names;
60
+ }
61
+ }
62
+ catch (_a) {
63
+ // Not JSON — fall through to defaults.
64
+ }
65
+ return undefined;
66
+ }
67
+ /**
68
+ * Select optional generation guides from the concrete delegated task. This is
69
+ * deterministic orchestration: the parent does not need to remember skill
70
+ * names, and unrelated manuals do not compete for the model's attention.
71
+ */
72
+ function inferRequestedSkills(messages) {
73
+ const firstUser = messages === null || messages === void 0 ? void 0 : messages.find((message) => message.role === 'user');
74
+ const text = firstUser ? messageText(firstUser) : undefined;
75
+ if (!text)
76
+ return undefined;
77
+ const lower = text.toLowerCase();
78
+ const isHtml = /\.html?\b/.test(lower) ||
79
+ /\b(?:web\s?page|landing page|dashboard|product site|website|ui)\b/.test(lower);
80
+ if (!isHtml)
81
+ return undefined;
82
+ const names = new Set(['designer', 'a11y', 'copywriting']);
83
+ // Interactions guide is heavy — only when the task clearly needs JS widgets,
84
+ // or when publishing a full new page (not a mid-build section/polish edit).
85
+ const isSectionOrPolishEdit = /\b(?:append|add (?:the )?section|features section|testimonials|footer section|polish|fix|contrast|consistency)\b/.test(lower);
86
+ const needsInteractions = /\b(?:nav|menu|modal|dialog|toggle|filter|tabs?|accordion|carousel|calculator|mobile menu|dropdown|searchable)\b/.test(lower) ||
87
+ (!isSectionOrPolishEdit &&
88
+ /\b(?:landing|hero|dashboard|index\.html|publish|new page|create .+page)\b/.test(lower));
89
+ if (needsInteractions) {
90
+ names.add('interactions');
91
+ }
92
+ if (/\b(?:form|contact|input|validation|request demo|sign[- ]?up|checkout)\b/.test(lower)) {
93
+ names.add('forms');
94
+ }
95
+ if (/\b(?:dashboard|chart|graph|plot|metric|kpi|analytics|table|timeseries|time series|data viz)\b/.test(lower)) {
96
+ names.add('data-viz');
97
+ }
98
+ return [...names];
99
+ }
100
+ const DESIGN_CONTEXT_STYLE_LIMIT = 4000;
101
+ const DESIGN_CONTEXT_CHROME_LIMIT = 1200;
102
+ function clipBlock(block, max) {
103
+ if (!block)
104
+ return undefined;
105
+ return block.length > max ? `${block.slice(0, max)}\n/* …clipped */` : block;
106
+ }
107
+ /**
108
+ * Pull concrete tokens out of free-text designBrief so subagents see a
109
+ * machine-readable contract, not only prose.
110
+ */
111
+ function extractDesignTokens(brief) {
112
+ var _a, _b, _c, _d;
113
+ const accents = [...brief.matchAll(/#([0-9a-fA-F]{3,8})\b/g)].map((match) => `#${match[1]}`);
114
+ const pack = (_b = (_a = brief.match(/\b(product|launch|editorial)\b/i)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.toLowerCase();
115
+ const fontLine = (_d = (_c = brief.match(/(?:fonts?|typeface|typography)\s*[:=]?\s*([^.;\n]+)/i)) === null || _c === void 0 ? void 0 : _c[1]) === null || _d === void 0 ? void 0 : _d.trim();
116
+ const lines = [
117
+ accents[0] ? `- accent: ${accents[0]}${accents[1] ? ` (hover/secondary: ${accents[1]})` : ''}` : undefined,
118
+ pack ? `- layout pack: ${pack}` : undefined,
119
+ fontLine ? `- fonts: ${fontLine}` : undefined,
120
+ ].filter(Boolean);
121
+ if (lines.length === 0)
122
+ return undefined;
123
+ return `## Parsed design tokens (authoritative — use these literal values)\n${lines.join('\n')}\nDo not substitute Inter or indigo/violet defaults.`;
124
+ }
125
+ /**
126
+ * Cross-page consistency: subagents can't see previously published pages, so
127
+ * without this every page invents its own palette and chrome. Extract the
128
+ * session entry page's design system (style block + header + footer) and
129
+ * inject it verbatim so later pages reuse it.
130
+ */
131
+ async function buildSessionDesignContext(context) {
132
+ var _a, _b, _c, _d;
133
+ try {
134
+ const sessionId = (0, agent_context_1.getRootChatId)(context);
135
+ if (!sessionId)
136
+ return undefined;
137
+ const sections = [];
138
+ const plan = (0, build_plan_1.parseBuildPlan)(await (0, session_artifact_yjs_store_1.getSessionArtifactYjsStore)()
139
+ .getLatestText(sessionId, build_plan_1.BUILD_PLAN_PATH)
140
+ .catch(() => ''));
141
+ if (plan === null || plan === void 0 ? void 0 : plan.designBrief) {
142
+ sections.push(`## Design brief (the session-wide contract — follow it exactly)\n${plan.designBrief}`);
143
+ const tokens = extractDesignTokens(plan.designBrief);
144
+ if (tokens)
145
+ sections.push(tokens);
146
+ }
147
+ const files = await (0, session_pages_1.listSessionArtifacts)(sessionId);
148
+ const entry = (_a = files.find((file) => file.path === 'index.html')) !== null && _a !== void 0 ? _a : files.find((file) => file.path.toLowerCase().endsWith('.html'));
149
+ if (entry) {
150
+ const [artifact] = await (0, session_pages_1.readSessionArtifacts)(sessionId, [entry.path]);
151
+ if ((artifact === null || artifact === void 0 ? void 0 : artifact.found) && artifact.content) {
152
+ const html = artifact.content;
153
+ const style = clipBlock((_b = html.match(/<style[^>]*>[\s\S]*?<\/style>/i)) === null || _b === void 0 ? void 0 : _b[0], DESIGN_CONTEXT_STYLE_LIMIT);
154
+ const header = clipBlock((_c = html.match(/<header[\s\S]*?<\/header>/i)) === null || _c === void 0 ? void 0 : _c[0], DESIGN_CONTEXT_CHROME_LIMIT);
155
+ const footer = clipBlock((_d = html.match(/<footer[\s\S]*?<\/footer>/i)) === null || _d === void 0 ? void 0 : _d[0], DESIGN_CONTEXT_CHROME_LIMIT);
156
+ const blocks = [style, header, footer].filter(Boolean);
157
+ if (blocks.length > 0) {
158
+ sections.push(`## Established chrome (extracted from ${entry.path})\nReuse the tokens, fonts, header/nav, and footer below EXACTLY — do not invent a second palette or chrome.\n\n${blocks.join('\n\n')}`);
159
+ }
160
+ }
161
+ }
162
+ if (sections.length === 0)
163
+ return undefined;
164
+ return `# Session design system\n\nEvery page in this session must look like ONE product.\n\n${sections.join('\n\n')}`;
165
+ }
166
+ catch (err) {
167
+ // Consistency context is best-effort — never block generation on it.
168
+ (0, logger_1.getBuilderApiLogger)().warn(`[skill-injection] design context failed: ${String(err)}`);
169
+ return undefined;
170
+ }
171
+ }
172
+ /**
173
+ * prepareStep for artifact subagents. Universal designer/a11y guidance is
174
+ * baked into the prompt; optional guides are inferred from the delegated task,
175
+ * while account guides and the established session design system are appended
176
+ * at runtime. An explicit `skills: []` opts doc/data-only tasks out; empty
177
+ * skills on HTML/UI tasks are ignored so inference still runs. The FIRST
178
+ * step (and only the first — config-level
179
+ * 'required' loops because the framework's downgrade cannot see SDK-internal
180
+ * steps) also forces a tool call so models cannot reply with prose describing
181
+ * files they never created.
182
+ */
183
+ function createSkillInjectingPrepareStep(loader = account_skill_loader_1.loadAccountSkills) {
184
+ return async (options, context) => {
185
+ var _a, _b, _c, _d, _e;
186
+ const messages = (_a = options.messages) !== null && _a !== void 0 ? _a : [];
187
+ const toolChoice = isFirstStep(options) ? 'required' : undefined;
188
+ const explicitSkills = extractRequestedSkills(messages);
189
+ const requested = explicitSkills !== null && explicitSkills !== void 0 ? explicitSkills : inferRequestedSkills(messages);
190
+ const customSkills = await loader(context);
191
+ const guidance = (0, registry_1.buildSkillGuidance)(requested, customSkills);
192
+ const designContext = await buildSessionDesignContext(context);
193
+ const injected = [designContext, guidance].filter((block) => Boolean(block));
194
+ const stepIndex = Array.isArray(options.steps)
195
+ ? options.steps.length
196
+ : (_c = (_b = options.stepNumber) !== null && _b !== void 0 ? _b : options.stepCount) !== null && _c !== void 0 ? _c : 0;
197
+ // String-first so both pino-style and winston-style host loggers print it.
198
+ // Logged EVERY step: if these lines never appear during a build, the
199
+ // framework is not delivering prepareStep to the subagent at all.
200
+ (0, logger_1.getBuilderApiLogger)().info(`[skill-injection] step=${stepIndex} toolChoice=${toolChoice !== null && toolChoice !== void 0 ? toolChoice : 'none'} requested=${JSON.stringify(requested !== null && requested !== void 0 ? requested : null)} customSkills=${customSkills.length} designContext=${(_d = designContext === null || designContext === void 0 ? void 0 : designContext.length) !== null && _d !== void 0 ? _d : 0}B guidance=${(_e = guidance === null || guidance === void 0 ? void 0 : guidance.length) !== null && _e !== void 0 ? _e : 0}B messages=${messages.length}`);
201
+ if (injected.length === 0) {
202
+ return toolChoice ? { toolChoice } : undefined;
203
+ }
204
+ return {
205
+ messages: [...messages, ...injected.map((content) => ({ role: 'system', content }))],
206
+ ...(toolChoice ? { toolChoice } : {}),
207
+ };
208
+ };
209
+ }
210
+ //# sourceMappingURL=skill-injection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-injection.js","sourceRoot":"","sources":["../../../src/agents/skills/skill-injection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** A generation skill: a named, self-contained pack of instructions injected into artifact subagents on demand. */
2
+ export interface GenerationSkill {
3
+ /** Unique kebab-case identifier the orchestrator passes in `skills: []`. */
4
+ name: string;
5
+ /** One-line summary shown in the orchestrator's skill catalog. */
6
+ description: string;
7
+ /** Selection hint: which tasks this skill should be attached to. */
8
+ whenToUse: string;
9
+ /** Full guidance (principles + concrete recipes) injected into the subagent context. */
10
+ instructions: string;
11
+ }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agents/skills/types.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAA;IACZ,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAA;IACjB,wFAAwF;IACxF,YAAY,EAAE,MAAM,CAAA;CACrB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/skills/types.ts"],"names":[],"mappings":""}
@@ -23,6 +23,13 @@ export interface BuilderApiConfig {
23
23
  bucket: string;
24
24
  };
25
25
  };
26
+ contentStorage: {
27
+ s3: {
28
+ bucket: string;
29
+ };
30
+ flushIntervalMs?: number;
31
+ pendingUpdatesLimit?: number;
32
+ };
26
33
  sessions: {
27
34
  rootDir: string;
28
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"builder-api-config.d.ts","sourceRoot":"","sources":["../src/builder-api-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAE7E,eAAO,MAAM,gBAAgB,iBAAiB,CAAA;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAA;IACjD,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;IACvC,EAAE,EAAE;QACF,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,WAAW,EAAE;QACX,WAAW,EAAE,MAAM,CAAA;QACnB,uBAAuB,EAAE,MAAM,CAAA;QAC/B,kBAAkB,EAAE,MAAM,CAAA;QAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;QAC3B,EAAE,EAAE;YACF,MAAM,EAAE,MAAM,CAAA;SACf,CAAA;KACF,CAAA;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,CAIjF"}
1
+ {"version":3,"file":"builder-api-config.d.ts","sourceRoot":"","sources":["../src/builder-api-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAE7E,eAAO,MAAM,gBAAgB,iBAAiB,CAAA;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAA;IACjD,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;IACvC,EAAE,EAAE;QACF,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,WAAW,EAAE;QACX,WAAW,EAAE,MAAM,CAAA;QACnB,uBAAuB,EAAE,MAAM,CAAA;QAC/B,kBAAkB,EAAE,MAAM,CAAA;QAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;QAC3B,EAAE,EAAE;YACF,MAAM,EAAE,MAAM,CAAA;SACf,CAAA;KACF,CAAA;IACD,cAAc,EAAE;QACd,EAAE,EAAE;YACF,MAAM,EAAE,MAAM,CAAA;SACf,CAAA;QACD,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAC7B,CAAA;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,CAIjF"}
@@ -1 +1 @@
1
- {"version":3,"file":"builder-api-config.js","sourceRoot":"","sources":["../src/builder-api-config.ts"],"names":[],"mappings":";;;AAoCA,kDAIC;AAtCY,QAAA,gBAAgB,GAAG,cAAc,CAAA;AAkC9C,SAAgB,mBAAmB,CAAC,MAAwB;;IAC1D,OAAO;QACL,YAAY,EAAE,MAAA,MAAM,CAAC,EAAE,CAAC,YAAY,mCAAI,wBAAgB;KACzD,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"builder-api-config.js","sourceRoot":"","sources":["../src/builder-api-config.ts"],"names":[],"mappings":";;;AA2CA,kDAIC;AA7CY,QAAA,gBAAgB,GAAG,cAAc,CAAA;AAyC9C,SAAgB,mBAAmB,CAAC,MAAwB;;IAC1D,OAAO;QACL,YAAY,EAAE,MAAA,MAAM,CAAC,EAAE,CAAC,YAAY,mCAAI,wBAAgB;KACzD,CAAA;AACH,CAAC"}
package/dist/context.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import type { AIAgentService, AIAgentServiceOptions } from '@multiplayer-app/ai-agent-node';
2
+ import type { RedisClientType } from 'redis';
2
3
  import type { BuilderApiConfig } from './builder-api-config';
3
4
  import type { BuilderApiLogger } from './logger';
4
5
  import type { AccountDbRepository } from './lib/account-dbs/account-db-repository';
5
6
  import type { NotebookRepository } from './lib/notebooks/notebook-repository';
6
7
  import type { SqlExecutor, SqlSchemaProvider } from './lib/sql-schema';
8
+ import type { YjsPendingUpdatesRepository } from './lib/yjs-pending/yjs-pending-updates-repository';
7
9
  export interface BuilderApiRepositories {
8
10
  chatRepository: AIAgentServiceOptions['chatRepository'];
9
11
  messageRepository: AIAgentServiceOptions['messageRepository'];
@@ -17,9 +19,14 @@ export interface BuilderApiContext {
17
19
  readonly accountDbRepository?: AccountDbRepository;
18
20
  readonly sqlSchemaProvider?: SqlSchemaProvider;
19
21
  readonly sqlExecutor?: SqlExecutor;
22
+ readonly yjsPendingUpdatesRepository?: YjsPendingUpdatesRepository;
23
+ readonly redisClient?: RedisClientType;
20
24
  }
21
25
  export declare function setBuilderApiContext(ctx: BuilderApiContext): void;
26
+ export declare function patchBuilderApiContext(patch: Partial<BuilderApiContext>): void;
22
27
  export declare function getBuilderApiContext(): BuilderApiContext;
23
28
  export declare function getAgentService(): AIAgentService;
24
29
  export declare function getBuilderApiRepositories(): BuilderApiRepositories;
30
+ export declare function getYjsPendingUpdatesRepository(): YjsPendingUpdatesRepository;
31
+ export declare function getSharedRedisClient(): RedisClientType | undefined;
25
32
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEtE,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAA;IACvD,iBAAiB,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAA;IACrC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAA;IAC7C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IAChD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CACnC;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAEjE;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAKxD;AAED,wBAAgB,eAAe,IAAI,cAAc,CAEhD;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAElE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAA;AAEnG,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAA;IACvD,iBAAiB,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAA;IACrC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAA;IAC7C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IAChD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,2BAA2B,CAAA;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;CACvC;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAEjE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAK9E;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAKxD;AAED,wBAAgB,eAAe,IAAI,cAAc,CAEhD;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAElE;AAED,wBAAgB,8BAA8B,IAAI,2BAA2B,CAM5E;AAED,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,SAAS,CAElE"}
package/dist/context.js CHANGED
@@ -1,13 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setBuilderApiContext = setBuilderApiContext;
4
+ exports.patchBuilderApiContext = patchBuilderApiContext;
4
5
  exports.getBuilderApiContext = getBuilderApiContext;
5
6
  exports.getAgentService = getAgentService;
6
7
  exports.getBuilderApiRepositories = getBuilderApiRepositories;
8
+ exports.getYjsPendingUpdatesRepository = getYjsPendingUpdatesRepository;
9
+ exports.getSharedRedisClient = getSharedRedisClient;
7
10
  let runtimeContext = null;
8
11
  function setBuilderApiContext(ctx) {
9
12
  runtimeContext = ctx;
10
13
  }
14
+ function patchBuilderApiContext(patch) {
15
+ if (!runtimeContext) {
16
+ throw new Error('Builder API context is not initialized');
17
+ }
18
+ runtimeContext = { ...runtimeContext, ...patch };
19
+ }
11
20
  function getBuilderApiContext() {
12
21
  if (!runtimeContext) {
13
22
  throw new Error('Builder API context is not initialized');
@@ -20,4 +29,14 @@ function getAgentService() {
20
29
  function getBuilderApiRepositories() {
21
30
  return getBuilderApiContext().repositories;
22
31
  }
32
+ function getYjsPendingUpdatesRepository() {
33
+ const repository = getBuilderApiContext().yjsPendingUpdatesRepository;
34
+ if (!repository) {
35
+ throw new Error('Yjs pending updates repository is not configured');
36
+ }
37
+ return repository;
38
+ }
39
+ function getSharedRedisClient() {
40
+ return getBuilderApiContext().redisClient;
41
+ }
23
42
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;AAyBA,oDAEC;AAED,oDAKC;AAED,0CAEC;AAED,8DAEC;AAnBD,IAAI,cAAc,GAA6B,IAAI,CAAA;AAEnD,SAAgB,oBAAoB,CAAC,GAAsB;IACzD,cAAc,GAAG,GAAG,CAAA;AACtB,CAAC;AAED,SAAgB,oBAAoB;IAClC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,oBAAoB,EAAE,CAAC,YAAY,CAAA;AAC5C,CAAC;AAED,SAAgB,yBAAyB;IACvC,OAAO,oBAAoB,EAAE,CAAC,YAAY,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;AA6BA,oDAEC;AAED,wDAKC;AAED,oDAKC;AAED,0CAEC;AAED,8DAEC;AAED,wEAMC;AAED,oDAEC;AAtCD,IAAI,cAAc,GAA6B,IAAI,CAAA;AAEnD,SAAgB,oBAAoB,CAAC,GAAsB;IACzD,cAAc,GAAG,GAAG,CAAA;AACtB,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAiC;IACtE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IACD,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,KAAK,EAAE,CAAA;AAClD,CAAC;AAED,SAAgB,oBAAoB;IAClC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,oBAAoB,EAAE,CAAC,YAAY,CAAA;AAC5C,CAAC;AAED,SAAgB,yBAAyB;IACvC,OAAO,oBAAoB,EAAE,CAAC,YAAY,CAAA;AAC5C,CAAC;AAED,SAAgB,8BAA8B;IAC5C,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC,2BAA2B,CAAA;IACrE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACrE,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,oBAAoB,EAAE,CAAC,WAAW,CAAA;AAC3C,CAAC"}