@tangle-network/agent-app 0.43.55 → 0.43.57

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 (352) hide show
  1. package/dist/DesignCanvas-UNL34LS2.js +12 -0
  2. package/dist/DesignCanvasEditor-FJIVYOA2.js +13 -0
  3. package/dist/IntakeInterview-3ZIQMZS6.js +8 -0
  4. package/dist/InvitationsPanel-CJ7DR4F7.js +8 -0
  5. package/dist/MembersPanel-BB4OD2KB.js +8 -0
  6. package/dist/{TimelineEditor-I35SJJAJ.js → TimelineEditor-2ECKSU6P.js} +3 -3
  7. package/dist/{VaultPane-DrQ_tH6c.d.ts → VaultPane-BDP6SB_K.d.ts} +1 -0
  8. package/dist/{access-BZ81Btt5.d.ts → access-490O6aOU.d.ts} +16 -1
  9. package/dist/app-auth/index.d.ts +6 -1
  10. package/dist/app-auth/index.js +3 -3
  11. package/dist/app-auth/index.js.map +1 -1
  12. package/dist/{apply-Gk4raT2j.d.ts → apply-6wlMOLf8.d.ts} +30 -1
  13. package/dist/assets/index.d.ts +41 -0
  14. package/dist/assets/index.js +1 -1
  15. package/dist/assistant/index.d.ts +26 -6
  16. package/dist/assistant/index.js +13 -12
  17. package/dist/assistant/index.js.map +1 -1
  18. package/dist/{attachment-validation-D0csjCvz.d.ts → attachment-validation-tPRp-PP1.d.ts} +7 -1
  19. package/dist/{auth-DuptSkWh.d.ts → auth-_FU8w01b.d.ts} +4 -1
  20. package/dist/billing/index.d.ts +8 -0
  21. package/dist/billing/index.js +1 -1
  22. package/dist/brand/index.d.ts +2 -0
  23. package/dist/brand/index.js.map +1 -1
  24. package/dist/brand-extraction/index.d.ts +3 -0
  25. package/dist/brand-extraction/index.js.map +1 -1
  26. package/dist/catalog/index.d.ts +2 -0
  27. package/dist/catalog/index.js +1 -1
  28. package/dist/chat-routes/index.d.ts +41 -10
  29. package/dist/chat-routes/index.js +15 -15
  30. package/dist/chat-routes/index.js.map +1 -1
  31. package/dist/chat-store/index.d.ts +18 -4
  32. package/dist/chat-store/index.js +4 -4
  33. package/dist/chat-store/index.js.map +1 -1
  34. package/dist/{chunk-H5FM75MR.js → chunk-22GLESKE.js} +3 -3
  35. package/dist/chunk-22GLESKE.js.map +1 -0
  36. package/dist/{chunk-WEBBJBDH.js → chunk-2DRYTJHI.js} +1 -1
  37. package/dist/chunk-2DRYTJHI.js.map +1 -0
  38. package/dist/{chunk-7EVZUIHW.js → chunk-3EJ6SFJI.js} +1 -1
  39. package/dist/chunk-3EJ6SFJI.js.map +1 -0
  40. package/dist/{chunk-HRJJH3RX.js → chunk-3OFQFW5K.js} +4 -4
  41. package/dist/chunk-3OFQFW5K.js.map +1 -0
  42. package/dist/{chunk-7SUPA2YT.js → chunk-4KKXZQPT.js} +2 -2
  43. package/dist/chunk-4KKXZQPT.js.map +1 -0
  44. package/dist/{chunk-5PTGEJZL.js → chunk-5SD6HT2V.js} +1 -1
  45. package/dist/chunk-5SD6HT2V.js.map +1 -0
  46. package/dist/{chunk-7C64WKAH.js → chunk-5SXS3YAB.js} +2 -2
  47. package/dist/{chunk-L2TG5DBW.js → chunk-5TESA4SN.js} +1 -1
  48. package/dist/chunk-5TESA4SN.js.map +1 -0
  49. package/dist/{chunk-63CE7FEZ.js → chunk-6XIAPIW6.js} +1 -1
  50. package/dist/chunk-6XIAPIW6.js.map +1 -0
  51. package/dist/{chunk-MFRCM32T.js → chunk-7CTIUCQ4.js} +1 -1
  52. package/dist/chunk-7CTIUCQ4.js.map +1 -0
  53. package/dist/{chunk-6KVH5SP5.js → chunk-7YW6EBDX.js} +2 -2
  54. package/dist/chunk-7YW6EBDX.js.map +1 -0
  55. package/dist/{chunk-ZXNXAQAH.js → chunk-AP2UXKUK.js} +1 -1
  56. package/dist/chunk-AP2UXKUK.js.map +1 -0
  57. package/dist/{chunk-K63OWUDJ.js → chunk-BPSV5AA2.js} +2 -2
  58. package/dist/chunk-BPSV5AA2.js.map +1 -0
  59. package/dist/{chunk-MFI4ZM7W.js → chunk-BT4QFCTB.js} +1 -1
  60. package/dist/chunk-BT4QFCTB.js.map +1 -0
  61. package/dist/{chunk-ZYBWGSAZ.js → chunk-BVKQKGRK.js} +1 -1
  62. package/dist/chunk-BVKQKGRK.js.map +1 -0
  63. package/dist/{chunk-RVUISYUE.js → chunk-C3NSB66C.js} +7 -7
  64. package/dist/chunk-C3NSB66C.js.map +1 -0
  65. package/dist/{chunk-BQV42AFK.js → chunk-CCVWR33L.js} +1 -1
  66. package/dist/chunk-CCVWR33L.js.map +1 -0
  67. package/dist/{chunk-MCJSS6SM.js → chunk-CQZSAR77.js} +1 -1
  68. package/dist/chunk-CQZSAR77.js.map +1 -0
  69. package/dist/{chunk-3SVAA3MA.js → chunk-DJ4VJIH5.js} +1 -1
  70. package/dist/chunk-DJ4VJIH5.js.map +1 -0
  71. package/dist/{chunk-XKBIYSSM.js → chunk-DTSPS2HV.js} +3 -3
  72. package/dist/chunk-DTSPS2HV.js.map +1 -0
  73. package/dist/{chunk-4QN75UHX.js → chunk-E7N67FYI.js} +8 -8
  74. package/dist/chunk-E7N67FYI.js.map +1 -0
  75. package/dist/{chunk-2QI7XV2T.js → chunk-FBVLEGEG.js} +1 -1
  76. package/dist/{chunk-2QI7XV2T.js.map → chunk-FBVLEGEG.js.map} +1 -1
  77. package/dist/{chunk-5RMIUJDI.js → chunk-FKCB5FTD.js} +1 -1
  78. package/dist/chunk-FKCB5FTD.js.map +1 -0
  79. package/dist/{chunk-EEPJGZJW.js → chunk-GPBRL2XR.js} +1 -1
  80. package/dist/chunk-GPBRL2XR.js.map +1 -0
  81. package/dist/{chunk-G3HCU7TA.js → chunk-GXE6KHTS.js} +1 -1
  82. package/dist/chunk-GXE6KHTS.js.map +1 -0
  83. package/dist/{chunk-65P3HJY3.js → chunk-HCOROIRT.js} +1 -1
  84. package/dist/chunk-HCOROIRT.js.map +1 -0
  85. package/dist/{chunk-54GSK2KK.js → chunk-HYTIHYNV.js} +2 -2
  86. package/dist/chunk-HYTIHYNV.js.map +1 -0
  87. package/dist/{chunk-5MG74GVQ.js → chunk-IG46XCZM.js} +3 -3
  88. package/dist/chunk-IG46XCZM.js.map +1 -0
  89. package/dist/{chunk-ND3XEGBE.js → chunk-JDEGS53O.js} +1 -1
  90. package/dist/chunk-JDEGS53O.js.map +1 -0
  91. package/dist/{chunk-7W5XSTUF.js → chunk-JML7WKWU.js} +1 -1
  92. package/dist/chunk-JML7WKWU.js.map +1 -0
  93. package/dist/{chunk-Q4TKVF3L.js → chunk-JTLYXUEV.js} +1 -1
  94. package/dist/chunk-JTLYXUEV.js.map +1 -0
  95. package/dist/{chunk-CCRVDLV3.js → chunk-JWBZ74TW.js} +2 -2
  96. package/dist/chunk-JWBZ74TW.js.map +1 -0
  97. package/dist/{chunk-ZU5GNSOJ.js → chunk-K3LIPKFV.js} +3 -3
  98. package/dist/chunk-K3LIPKFV.js.map +1 -0
  99. package/dist/{chunk-GQRL6VNU.js → chunk-LGBO24FL.js} +1 -1
  100. package/dist/chunk-LGBO24FL.js.map +1 -0
  101. package/dist/{chunk-SWUVTGMR.js → chunk-MEUNTJL5.js} +3 -3
  102. package/dist/{chunk-SWUVTGMR.js.map → chunk-MEUNTJL5.js.map} +1 -1
  103. package/dist/{chunk-YNALYIQ3.js → chunk-NLSSFLLS.js} +1 -1
  104. package/dist/chunk-NLSSFLLS.js.map +1 -0
  105. package/dist/{chunk-HFC4BTWJ.js → chunk-PTUMBMVH.js} +1 -1
  106. package/dist/chunk-PTUMBMVH.js.map +1 -0
  107. package/dist/{chunk-R4NOKZMD.js → chunk-ROLFDOMJ.js} +3 -3
  108. package/dist/{chunk-NYATNLRK.js → chunk-RT5RKAFX.js} +1 -1
  109. package/dist/chunk-RT5RKAFX.js.map +1 -0
  110. package/dist/{chunk-GNL3MG5J.js → chunk-S564OFTL.js} +2 -2
  111. package/dist/{chunk-GUSCYE3S.js → chunk-TQOFR6XY.js} +1 -1
  112. package/dist/chunk-TQOFR6XY.js.map +1 -0
  113. package/dist/{chunk-47C6PJCW.js → chunk-TZO3SOUL.js} +1 -1
  114. package/dist/chunk-TZO3SOUL.js.map +1 -0
  115. package/dist/{chunk-YGUNTIT5.js → chunk-UKTYKG57.js} +1 -1
  116. package/dist/chunk-UKTYKG57.js.map +1 -0
  117. package/dist/{chunk-23LUHHHN.js → chunk-VCOD5AOR.js} +1 -1
  118. package/dist/chunk-VCOD5AOR.js.map +1 -0
  119. package/dist/{chunk-5I72FRZY.js → chunk-VOJB7MVG.js} +2 -2
  120. package/dist/{chunk-XWJXZ6WE.js → chunk-VTWKH4YU.js} +2 -2
  121. package/dist/chunk-VTWKH4YU.js.map +1 -0
  122. package/dist/{chunk-4K7BZYO7.js → chunk-VWAEWOWK.js} +3 -3
  123. package/dist/chunk-VWAEWOWK.js.map +1 -0
  124. package/dist/{chunk-M2EBUDZ7.js → chunk-VWOPOLVO.js} +2 -2
  125. package/dist/chunk-VWOPOLVO.js.map +1 -0
  126. package/dist/{chunk-BN2USWIR.js → chunk-VYECQAGM.js} +2 -2
  127. package/dist/chunk-VYECQAGM.js.map +1 -0
  128. package/dist/{chunk-SIXYZ2FB.js → chunk-YJMCRXQQ.js} +1 -1
  129. package/dist/chunk-YJMCRXQQ.js.map +1 -0
  130. package/dist/{chunk-PJC4NXPA.js → chunk-YKBDH2UY.js} +3 -3
  131. package/dist/chunk-YKBDH2UY.js.map +1 -0
  132. package/dist/{chunk-XAWFPMAR.js → chunk-YKOM4ZLQ.js} +1 -1
  133. package/dist/chunk-YKOM4ZLQ.js.map +1 -0
  134. package/dist/{chunk-TKVJE63N.js → chunk-YRMLYFVR.js} +3 -3
  135. package/dist/chunk-YRMLYFVR.js.map +1 -0
  136. package/dist/{chunk-USYXHDKE.js → chunk-YZ6KQULN.js} +2 -2
  137. package/dist/{command-stack-B_-WNfZU.d.ts → command-stack-TNPWJCzW.d.ts} +14 -2
  138. package/dist/{completion-Kaqp_tWk.d.ts → completion-CvcNUz07.d.ts} +1 -1
  139. package/dist/config/index.d.ts +1 -1
  140. package/dist/{contract-KfqJh_au.d.ts → contract-TjB68uqA.d.ts} +17 -0
  141. package/dist/design-canvas/drizzle.d.ts +10 -2
  142. package/dist/design-canvas/drizzle.js.map +1 -1
  143. package/dist/design-canvas/index.d.ts +29 -11
  144. package/dist/design-canvas/index.js +1070 -17
  145. package/dist/design-canvas/index.js.map +1 -1
  146. package/dist/design-canvas-react/engine.d.ts +42 -6
  147. package/dist/design-canvas-react/engine.js +4 -4
  148. package/dist/design-canvas-react/index.d.ts +12 -7
  149. package/dist/design-canvas-react/index.js +11 -11
  150. package/dist/design-canvas-react/index.js.map +1 -1
  151. package/dist/design-canvas-react/lazy.d.ts +4 -4
  152. package/dist/design-canvas-react/lazy.js +1 -1
  153. package/dist/durable-chat/index.d.ts +46 -1
  154. package/dist/durable-chat/index.js +3 -3
  155. package/dist/eval/index.d.ts +1 -1
  156. package/dist/{export-presets-DAsU5Wal.d.ts → export-presets-mgVulRaV.d.ts} +10 -1
  157. package/dist/{flow-types-Cb_AblZs.d.ts → flow-types-CqomVAUN.d.ts} +1 -0
  158. package/dist/harness/index.d.ts +5 -0
  159. package/dist/harness/index.js +1 -1
  160. package/dist/index.d.ts +10 -18
  161. package/dist/index.js +30 -231
  162. package/dist/intakes/api.d.ts +3 -2
  163. package/dist/intakes/api.js +3 -3
  164. package/dist/intakes/api.js.map +1 -1
  165. package/dist/intakes/drizzle.d.ts +10 -2
  166. package/dist/intakes/drizzle.js +3 -3
  167. package/dist/intakes/drizzle.js.map +1 -1
  168. package/dist/intakes/index.d.ts +2 -2
  169. package/dist/intakes/index.js +2 -2
  170. package/dist/intakes-react/index.d.ts +2 -1
  171. package/dist/intakes-react/index.js +2 -2
  172. package/dist/intakes-react/lazy.d.ts +2 -1
  173. package/dist/intakes-react/lazy.js +1 -1
  174. package/dist/intakes-react/lazy.js.map +1 -1
  175. package/dist/integrations/index.d.ts +4 -0
  176. package/dist/integrations/index.js +1 -1
  177. package/dist/interactions/index.d.ts +13 -2
  178. package/dist/interactions/index.js +2 -2
  179. package/dist/{invitations-CZ5G2tIn.d.ts → invitations-DoYMvXea.d.ts} +11 -1
  180. package/dist/{invitations-schema-DaMO4hZE.d.ts → invitations-schema-_fI7HkJP.d.ts} +5 -1
  181. package/dist/knowledge/index.d.ts +2 -0
  182. package/dist/knowledge/index.js +1 -1
  183. package/dist/knowledge-loop/index.d.ts +4 -1
  184. package/dist/knowledge-loop/index.js +1 -1
  185. package/dist/{lazy-C7LiVeFt.d.ts → lazy-DrkVyDpe.d.ts} +2 -2
  186. package/dist/{mcp-BHfIoGLW.d.ts → mcp-BjPqQ-3C.d.ts} +4 -2
  187. package/dist/{mcp-rpc-DLw_r9PQ.d.ts → mcp-rpc-BfUOsalw.d.ts} +3 -0
  188. package/dist/missions/index.d.ts +25 -0
  189. package/dist/missions/index.js +1 -1
  190. package/dist/{model-Bzi5i63l.d.ts → model-C8U0HZxL.d.ts} +1 -0
  191. package/dist/{model-dF2h4xT9.d.ts → model-DmdkIteM.d.ts} +19 -0
  192. package/dist/{model-BBwyOuWG.d.ts → model-DnfO_PdJ.d.ts} +25 -1
  193. package/dist/model-resolution/index.d.ts +10 -0
  194. package/dist/model-resolution/index.js.map +1 -1
  195. package/dist/{operations-DLIvvD00.d.ts → operations-ByJ6yXOW.d.ts} +20 -2
  196. package/dist/{parts-1sRYSPjF.d.ts → parts-n9XUon0a.d.ts} +29 -1
  197. package/dist/plans/index.d.ts +6 -0
  198. package/dist/plans/index.js +1 -1
  199. package/dist/platform/index.d.ts +24 -2
  200. package/dist/platform/index.js +3 -3
  201. package/dist/platform/index.js.map +1 -1
  202. package/dist/preflight/index.d.ts +3 -0
  203. package/dist/preflight/index.js +1 -1
  204. package/dist/preset-cloudflare/index.d.ts +4 -1
  205. package/dist/preset-cloudflare/index.js +2 -2
  206. package/dist/redact/index.d.ts +5 -0
  207. package/dist/redact/index.js +1 -1
  208. package/dist/{roles-BC1n4t37.d.ts → roles-B4nU3jDi.d.ts} +12 -0
  209. package/dist/run/index.d.ts +3 -0
  210. package/dist/run/index.js +1 -1
  211. package/dist/run/index.js.map +1 -1
  212. package/dist/runtime/index.d.ts +11 -4
  213. package/dist/runtime/index.js +4 -4
  214. package/dist/sandbox/index.d.ts +96 -3
  215. package/dist/sandbox/index.js +6 -6
  216. package/dist/{sandbox-terminal-BIIC__CP.d.ts → sandbox-terminal-ChNEdHF8.d.ts} +5 -0
  217. package/dist/sequences/drizzle.d.ts +11 -1
  218. package/dist/sequences/drizzle.js +1 -1
  219. package/dist/sequences/drizzle.js.map +1 -1
  220. package/dist/sequences/index.d.ts +32 -7
  221. package/dist/sequences/index.js +1562 -47
  222. package/dist/sequences/index.js.map +1 -1
  223. package/dist/sequences-react/index.d.ts +32 -2
  224. package/dist/sequences-react/index.js +3 -3
  225. package/dist/sequences-react/index.js.map +1 -1
  226. package/dist/{sso-CNOsARMJ.d.ts → sso-Cm00S61u.d.ts} +13 -0
  227. package/dist/{stale-turn-lock-C8Na1cFZ.d.ts → stale-turn-lock-DucQzvXu.d.ts} +2 -0
  228. package/dist/store/index.d.ts +5 -0
  229. package/dist/store/index.js.map +1 -1
  230. package/dist/{store-gckrNq-g.d.ts → store-B7LLlk9p.d.ts} +22 -1
  231. package/dist/{store-CFyxgTlD.d.ts → store-CqfDtnPQ.d.ts} +8 -2
  232. package/dist/stream/index.d.ts +10 -4
  233. package/dist/stream/index.js +4 -4
  234. package/dist/{stream-normalizer-DWvtmY6F.d.ts → stream-normalizer-C3M--r6y.d.ts} +17 -1
  235. package/dist/studio/index.d.ts +37 -0
  236. package/dist/studio/index.js +1 -1
  237. package/dist/studio-react/index.d.ts +3 -0
  238. package/dist/studio-react/index.js +1 -1
  239. package/dist/studio-react/index.js.map +1 -1
  240. package/dist/tangle/index.d.ts +3 -0
  241. package/dist/tangle/index.js +1 -1
  242. package/dist/teams/drizzle.d.ts +8 -4
  243. package/dist/teams/drizzle.js +1 -1
  244. package/dist/teams/drizzle.js.map +1 -1
  245. package/dist/teams/index.d.ts +4 -2
  246. package/dist/teams/index.js +3 -3
  247. package/dist/teams/invitations-api.d.ts +10 -4
  248. package/dist/teams/invitations-api.js +4 -4
  249. package/dist/teams/invitations-api.js.map +1 -1
  250. package/dist/teams/members-api.d.ts +4 -2
  251. package/dist/teams/members-api.js +3 -3
  252. package/dist/teams/resend.d.ts +5 -4
  253. package/dist/teams/resend.js +1 -1
  254. package/dist/teams/resend.js.map +1 -1
  255. package/dist/teams-react/index.d.ts +7 -2
  256. package/dist/teams-react/index.js +3 -3
  257. package/dist/teams-react/lazy.d.ts +5 -2
  258. package/dist/teams-react/lazy.js +2 -2
  259. package/dist/teams-react/lazy.js.map +1 -1
  260. package/dist/theme/index.d.ts +2 -0
  261. package/dist/theme/index.js +1 -1
  262. package/dist/theme/tailwind-preset.d.ts +1 -0
  263. package/dist/theme/tailwind-preset.js.map +1 -1
  264. package/dist/theme-contract/cli.js +1 -1
  265. package/dist/theme-contract/index.d.ts +3 -0
  266. package/dist/theme-contract/index.js +1 -1
  267. package/dist/tools/index.d.ts +13 -6
  268. package/dist/tools/index.js +3 -3
  269. package/dist/trace/index.d.ts +6 -1
  270. package/dist/trace/index.js +2 -2
  271. package/dist/{turn-buffer-C9mEgoop.d.ts → turn-buffer-DGnAPKwa.d.ts} +6 -0
  272. package/dist/turn-stream/index.d.ts +28 -2
  273. package/dist/turn-stream/index.js +1 -1
  274. package/dist/turn-stream/index.js.map +1 -1
  275. package/dist/{types-BEOvc_ue.d.ts → types-CBRyqijY.d.ts} +10 -0
  276. package/dist/vault/index.d.ts +1 -1
  277. package/dist/vault/lazy.d.ts +3 -2
  278. package/dist/vault/lazy.js.map +1 -1
  279. package/dist/web/index.d.ts +4 -0
  280. package/dist/web/index.js +1 -1
  281. package/dist/web-react/index.d.ts +51 -8
  282. package/dist/web-react/index.js +9 -9
  283. package/dist/web-react/terminal.d.ts +2 -2
  284. package/dist/web-react/terminal.js +1 -1
  285. package/package.json +3 -2
  286. package/dist/DesignCanvas-5DJAFDNC.js +0 -12
  287. package/dist/DesignCanvasEditor-XUJZARSN.js +0 -13
  288. package/dist/IntakeInterview-WHVKMNQW.js +0 -8
  289. package/dist/InvitationsPanel-XUUWZBPV.js +0 -8
  290. package/dist/MembersPanel-FOVHWUQ3.js +0 -8
  291. package/dist/chunk-23LUHHHN.js.map +0 -1
  292. package/dist/chunk-3SVAA3MA.js.map +0 -1
  293. package/dist/chunk-47C6PJCW.js.map +0 -1
  294. package/dist/chunk-4K7BZYO7.js.map +0 -1
  295. package/dist/chunk-4QN75UHX.js.map +0 -1
  296. package/dist/chunk-54GSK2KK.js.map +0 -1
  297. package/dist/chunk-5MG74GVQ.js.map +0 -1
  298. package/dist/chunk-5PTGEJZL.js.map +0 -1
  299. package/dist/chunk-5RMIUJDI.js.map +0 -1
  300. package/dist/chunk-63CE7FEZ.js.map +0 -1
  301. package/dist/chunk-65P3HJY3.js.map +0 -1
  302. package/dist/chunk-6KVH5SP5.js.map +0 -1
  303. package/dist/chunk-7EVZUIHW.js.map +0 -1
  304. package/dist/chunk-7SUPA2YT.js.map +0 -1
  305. package/dist/chunk-7W5XSTUF.js.map +0 -1
  306. package/dist/chunk-BN2USWIR.js.map +0 -1
  307. package/dist/chunk-BQV42AFK.js.map +0 -1
  308. package/dist/chunk-CCRVDLV3.js.map +0 -1
  309. package/dist/chunk-EEPJGZJW.js.map +0 -1
  310. package/dist/chunk-G3HCU7TA.js.map +0 -1
  311. package/dist/chunk-GQRL6VNU.js.map +0 -1
  312. package/dist/chunk-GUSCYE3S.js.map +0 -1
  313. package/dist/chunk-H5FM75MR.js.map +0 -1
  314. package/dist/chunk-HFC4BTWJ.js.map +0 -1
  315. package/dist/chunk-HRJJH3RX.js.map +0 -1
  316. package/dist/chunk-K63OWUDJ.js.map +0 -1
  317. package/dist/chunk-L2TG5DBW.js.map +0 -1
  318. package/dist/chunk-M2EBUDZ7.js.map +0 -1
  319. package/dist/chunk-MCJSS6SM.js.map +0 -1
  320. package/dist/chunk-MFI4ZM7W.js.map +0 -1
  321. package/dist/chunk-MFRCM32T.js.map +0 -1
  322. package/dist/chunk-ND3XEGBE.js.map +0 -1
  323. package/dist/chunk-NEOV2NQ3.js +0 -1617
  324. package/dist/chunk-NEOV2NQ3.js.map +0 -1
  325. package/dist/chunk-NYATNLRK.js.map +0 -1
  326. package/dist/chunk-PJC4NXPA.js.map +0 -1
  327. package/dist/chunk-Q4TKVF3L.js.map +0 -1
  328. package/dist/chunk-RVUISYUE.js.map +0 -1
  329. package/dist/chunk-SIXYZ2FB.js.map +0 -1
  330. package/dist/chunk-TKVJE63N.js.map +0 -1
  331. package/dist/chunk-WEBBJBDH.js.map +0 -1
  332. package/dist/chunk-WFMUDX5J.js +0 -1092
  333. package/dist/chunk-WFMUDX5J.js.map +0 -1
  334. package/dist/chunk-XAWFPMAR.js.map +0 -1
  335. package/dist/chunk-XKBIYSSM.js.map +0 -1
  336. package/dist/chunk-XWJXZ6WE.js.map +0 -1
  337. package/dist/chunk-YGUNTIT5.js.map +0 -1
  338. package/dist/chunk-YNALYIQ3.js.map +0 -1
  339. package/dist/chunk-ZU5GNSOJ.js.map +0 -1
  340. package/dist/chunk-ZXNXAQAH.js.map +0 -1
  341. package/dist/chunk-ZYBWGSAZ.js.map +0 -1
  342. /package/dist/{DesignCanvas-5DJAFDNC.js.map → DesignCanvas-UNL34LS2.js.map} +0 -0
  343. /package/dist/{DesignCanvasEditor-XUJZARSN.js.map → DesignCanvasEditor-FJIVYOA2.js.map} +0 -0
  344. /package/dist/{IntakeInterview-WHVKMNQW.js.map → IntakeInterview-3ZIQMZS6.js.map} +0 -0
  345. /package/dist/{InvitationsPanel-XUUWZBPV.js.map → InvitationsPanel-CJ7DR4F7.js.map} +0 -0
  346. /package/dist/{MembersPanel-FOVHWUQ3.js.map → MembersPanel-BB4OD2KB.js.map} +0 -0
  347. /package/dist/{TimelineEditor-I35SJJAJ.js.map → TimelineEditor-2ECKSU6P.js.map} +0 -0
  348. /package/dist/{chunk-7C64WKAH.js.map → chunk-5SXS3YAB.js.map} +0 -0
  349. /package/dist/{chunk-R4NOKZMD.js.map → chunk-ROLFDOMJ.js.map} +0 -0
  350. /package/dist/{chunk-GNL3MG5J.js.map → chunk-S564OFTL.js.map} +0 -0
  351. /package/dist/{chunk-5I72FRZY.js.map → chunk-VOJB7MVG.js.map} +0 -0
  352. /package/dist/{chunk-USYXHDKE.js.map → chunk-YZ6KQULN.js.map} +0 -0
@@ -1,16 +1,18 @@
1
1
  import * as drizzle_orm_sqlite_core from 'drizzle-orm/sqlite-core';
2
2
  import { AnySQLiteTable, AnySQLiteColumn, BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
3
- import { c as SceneDocument } from '../model-BBwyOuWG.js';
4
- import { e as SceneStoreScope, d as SceneStore } from '../store-CFyxgTlD.js';
3
+ import { c as SceneDocument } from '../model-DnfO_PdJ.js';
4
+ import { S as SceneStoreScope, a as SceneStore } from '../store-CqfDtnPQ.js';
5
5
 
6
6
  /** A product table referenced by FK — only the `id` column is touched. */
7
7
  type DesignCanvasParentTable = AnySQLiteTable & {
8
8
  id: AnySQLiteColumn;
9
9
  };
10
+ /** Define options for creating design canvas tables including workspace and user table configurations */
10
11
  interface CreateDesignCanvasTablesOptions {
11
12
  workspaceTable: DesignCanvasParentTable;
12
13
  userTable: DesignCanvasParentTable;
13
14
  }
15
+ /** Build SQLite tables for design documents with workspace and user references */
14
16
  declare function createDesignCanvasTables(opts: CreateDesignCanvasTablesOptions): {
15
17
  designDocuments: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
16
18
  name: "design_document";
@@ -535,9 +537,13 @@ declare function createDesignCanvasTables(opts: CreateDesignCanvasTablesOptions)
535
537
  dialect: "sqlite";
536
538
  }>;
537
539
  };
540
+ /** Resolve the structure and data of design canvas tables for rendering and manipulation */
538
541
  type DesignCanvasTables = ReturnType<typeof createDesignCanvasTables>;
542
+ /** Resolve the selected structure of a design document row from design canvas tables */
539
543
  type DesignDocumentRow = DesignCanvasTables['designDocuments']['$inferSelect'];
544
+ /** Resolve a design decision row from the design decisions table selection */
540
545
  type DesignDecisionRow = DesignCanvasTables['designDecisions']['$inferSelect'];
546
+ /** Resolve the selected fields of designExports from DesignCanvasTables */
541
547
  type DesignExportRow = DesignCanvasTables['designExports']['$inferSelect'];
542
548
 
543
549
  /**
@@ -559,11 +565,13 @@ type DesignExportRow = DesignCanvasTables['designExports']['$inferSelect'];
559
565
  /** Any SQLite drizzle database — `any` erases the driver-specific run-result
560
566
  * and schema generics so better-sqlite3, D1, and libsql handles all fit. */
561
567
  type DesignCanvasDatabase = BaseSQLiteDatabase<'sync' | 'async', any, any>;
568
+ /** Define options for creating a Drizzle scene store including database, tables, and scope */
562
569
  interface CreateDrizzleSceneStoreOptions {
563
570
  db: DesignCanvasDatabase;
564
571
  tables: DesignCanvasTables;
565
572
  scope: SceneStoreScope;
566
573
  }
574
+ /** Create a scene store configured with database tables and scoped to a specific document and workspace */
567
575
  declare function createDrizzleSceneStore(options: CreateDrizzleSceneStoreOptions): SceneStore;
568
576
 
569
577
  export { type CreateDesignCanvasTablesOptions, type CreateDrizzleSceneStoreOptions, type DesignCanvasDatabase, type DesignCanvasParentTable, type DesignCanvasTables, type DesignDecisionRow, type DesignDocumentRow, type DesignExportRow, createDesignCanvasTables, createDrizzleSceneStore };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/design-canvas/schema.ts","../../src/design-canvas/drizzle-store.ts"],"sourcesContent":["/**\n * Drizzle schema factory for design-canvas tables. The product owns the\n * workspace/user tables; the factory wires design-canvas foreign keys into\n * them so the whole graph lives in one drizzle schema with real cascade\n * semantics. Column names and conventions mirror the sequences schema so\n * products with both surfaces share a DDL style.\n *\n * The `document` column persists the full SceneDocument as JSON. Rev starts\n * at 1 on insert and increments atomically on every successful saveDocument —\n * optimistic concurrency without merge machinery.\n *\n * `isTemplate` marks documents that serve as fill-in-slots templates; the\n * index on (workspaceId, isTemplate) makes template browsing fast.\n */\n\nimport { sql } from 'drizzle-orm'\nimport { index, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport type { AnySQLiteColumn, AnySQLiteTable } from 'drizzle-orm/sqlite-core'\nimport type { SceneDocument } from './model'\n\n/** A product table referenced by FK — only the `id` column is touched. */\nexport type DesignCanvasParentTable = AnySQLiteTable & { id: AnySQLiteColumn }\n\nexport interface CreateDesignCanvasTablesOptions {\n workspaceTable: DesignCanvasParentTable\n userTable: DesignCanvasParentTable\n}\n\nconst hexId = () => text('id').primaryKey().default(sql`(lower(hex(randomblob(16))))`)\n\nconst jsonMetadata = () => text('metadata', { mode: 'json' }).$type<Record<string, unknown>>().default({})\n\nconst createdAt = () => integer('created_at', { mode: 'timestamp' }).notNull().default(sql`(unixepoch())`)\n\nconst updatedAt = () => integer('updated_at', { mode: 'timestamp' }).notNull().default(sql`(unixepoch())`)\n\nexport function createDesignCanvasTables(opts: CreateDesignCanvasTablesOptions) {\n const { workspaceTable, userTable } = opts\n\n const designDocuments = sqliteTable('design_document', {\n id: hexId(),\n workspaceId: text('workspace_id').notNull().references(() => workspaceTable.id, { onDelete: 'cascade' }),\n title: text('title').notNull(),\n /** Full SceneDocument serialized as JSON — persisted and replaced atomically. */\n document: text('document', { mode: 'json' }).$type<SceneDocument>().notNull(),\n /** Monotonic revision; starts at 1, incremented by every successful save. */\n rev: integer('rev').notNull().default(1),\n /** True when this document is a slot-fillable template for data binding. */\n isTemplate: integer('is_template', { mode: 'boolean' }).notNull().default(false),\n createdBy: text('created_by').notNull().references(() => userTable.id),\n createdAt: createdAt(),\n updatedAt: updatedAt(),\n }, (table) => [\n index('idx_design_document_workspace_updated').on(table.workspaceId, table.updatedAt),\n index('idx_design_document_workspace_template').on(table.workspaceId, table.isTemplate),\n ])\n\n const designDecisions = sqliteTable('design_decision', {\n id: hexId(),\n documentId: text('document_id').notNull().references(() => designDocuments.id, { onDelete: 'cascade' }),\n workspaceId: text('workspace_id').notNull().references(() => workspaceTable.id, { onDelete: 'cascade' }),\n kind: text('kind', { enum: ['human_edit', 'agent_edit', 'agent_proposal', 'export', 'note'] }).notNull(),\n instruction: text('instruction').notNull(),\n reasoningSummary: text('reasoning_summary'),\n metadata: jsonMetadata(),\n createdBy: text('created_by').notNull().references(() => userTable.id),\n createdAt: createdAt(),\n }, (table) => [\n index('idx_design_decision_document').on(table.documentId, table.createdAt),\n index('idx_design_decision_workspace').on(table.workspaceId),\n ])\n\n const designExports = sqliteTable('design_export', {\n id: hexId(),\n documentId: text('document_id').notNull().references(() => designDocuments.id, { onDelete: 'cascade' }),\n workspaceId: text('workspace_id').notNull().references(() => workspaceTable.id, { onDelete: 'cascade' }),\n format: text('format', { enum: ['png', 'jpeg', 'json'] }).notNull(),\n status: text('status', { enum: ['queued', 'processing', 'completed', 'failed'] }).notNull().default('queued'),\n resultUrl: text('result_url'),\n metadata: jsonMetadata(),\n createdBy: text('created_by').notNull().references(() => userTable.id),\n createdAt: createdAt(),\n }, (table) => [\n index('idx_design_export_document').on(table.documentId, table.createdAt),\n index('idx_design_export_workspace').on(table.workspaceId),\n ])\n\n return { designDocuments, designDecisions, designExports }\n}\n\nexport type DesignCanvasTables = ReturnType<typeof createDesignCanvasTables>\n\nexport type DesignDocumentRow = DesignCanvasTables['designDocuments']['$inferSelect']\nexport type DesignDecisionRow = DesignCanvasTables['designDecisions']['$inferSelect']\nexport type DesignExportRow = DesignCanvasTables['designExports']['$inferSelect']\n","/**\n * Drizzle-backed `SceneStore` over the tables from `createDesignCanvasTables`.\n * Works against any SQLite drizzle driver (better-sqlite3, D1, libsql).\n *\n * Defense in depth: RBAC runs before the store is constructed, but every\n * query still pins `workspaceId` AND `documentId` from the scope in its WHERE\n * clause, so a leaked or attacker-supplied row id from another workspace can\n * never read or write across the boundary — it surfaces as \"not found\".\n *\n * Optimistic concurrency for saveDocument: the UPDATE WHERE clause includes\n * `rev = expectedRev`; when 0 rows are changed (stale revision or missing\n * document), the store reads back the row to emit a precise error — either\n * \"stale rev\" or \"not found\" — so callers know whether to refetch-and-replay\n * or abort.\n */\n\nimport { and, desc, eq, sql } from 'drizzle-orm'\nimport type { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core'\nimport type { SceneDocument } from './model'\nimport type {\n NewSceneDecision,\n SceneDecision,\n SceneDocumentRecord,\n SceneExportFormat,\n SceneExportRecord,\n SceneStore,\n SceneStoreScope,\n} from './store'\nimport type {\n DesignCanvasTables,\n DesignDecisionRow,\n DesignDocumentRow,\n DesignExportRow,\n} from './schema'\n\n/** Any SQLite drizzle database — `any` erases the driver-specific run-result\n * and schema generics so better-sqlite3, D1, and libsql handles all fit. */\nexport type DesignCanvasDatabase = BaseSQLiteDatabase<'sync' | 'async', any, any>\n\nexport interface CreateDrizzleSceneStoreOptions {\n db: DesignCanvasDatabase\n tables: DesignCanvasTables\n scope: SceneStoreScope\n}\n\nconst DEFAULT_LIST_LIMIT = 50\n\nexport function createDrizzleSceneStore(options: CreateDrizzleSceneStoreOptions): SceneStore {\n const { db, tables, scope } = options\n const { designDocuments, designDecisions, designExports } = tables\n\n const docScope = () => and(\n eq(designDocuments.id, scope.documentId),\n eq(designDocuments.workspaceId, scope.workspaceId),\n )\n\n const decisionScope = () => and(\n eq(designDecisions.documentId, scope.documentId),\n eq(designDecisions.workspaceId, scope.workspaceId),\n )\n\n const exportScope = () => and(\n eq(designExports.documentId, scope.documentId),\n eq(designExports.workspaceId, scope.workspaceId),\n )\n\n async function requireDocumentRow(): Promise<DesignDocumentRow> {\n const [row] = await db.select().from(designDocuments).where(docScope()).limit(1)\n if (!row) {\n throw new Error(`Design document ${scope.documentId} not found in workspace ${scope.workspaceId}`)\n }\n return row\n }\n\n return {\n async getDocument(): Promise<SceneDocumentRecord> {\n const row = await requireDocumentRow()\n return mapDocument(row)\n },\n\n async saveDocument(document: SceneDocument, expectedRev: number): Promise<SceneDocumentRecord> {\n const result = await db\n .update(designDocuments)\n .set({\n document,\n rev: sql`${designDocuments.rev} + 1`,\n updatedAt: new Date(),\n })\n .where(and(\n docScope(),\n eq(designDocuments.rev, expectedRev),\n ))\n .returning()\n\n if (result.length === 0) {\n // Distinguish stale-rev from missing document so callers get an\n // actionable error message rather than a generic \"not found\".\n const [existing] = await db.select().from(designDocuments).where(docScope()).limit(1)\n if (!existing) {\n throw new Error(\n `Design document ${scope.documentId} not found in workspace ${scope.workspaceId}`,\n )\n }\n throw new Error(\n `Stale revision: expected rev ${expectedRev} but document is at rev ${existing.rev}. ` +\n `Refetch the document and replay your operations.`,\n )\n }\n\n const [row] = result\n if (!row) throw new Error('saveDocument UPDATE returned no row')\n return mapDocument(row)\n },\n\n async recordDecision(input: NewSceneDecision): Promise<SceneDecision> {\n // Verify the document exists in this workspace before writing the FK row.\n await requireDocumentRow()\n const [row] = await db.insert(designDecisions).values({\n documentId: scope.documentId,\n workspaceId: scope.workspaceId,\n kind: input.kind,\n instruction: input.instruction,\n reasoningSummary: input.reasoningSummary ?? null,\n metadata: input.metadata ?? {},\n createdBy: scope.userId,\n }).returning()\n if (!row) throw new Error('design_decision insert returned no row')\n return mapDecision(row)\n },\n\n async createExport(format: SceneExportFormat, metadata?: Record<string, unknown>): Promise<SceneExportRecord> {\n await requireDocumentRow()\n const [row] = await db.insert(designExports).values({\n documentId: scope.documentId,\n workspaceId: scope.workspaceId,\n format,\n metadata: metadata ?? {},\n createdBy: scope.userId,\n }).returning()\n if (!row) throw new Error('design_export insert returned no row')\n return mapExport(row)\n },\n\n async listDecisions(limit = DEFAULT_LIST_LIMIT): Promise<SceneDecision[]> {\n assertListLimit(limit)\n const rows = await db.select().from(designDecisions)\n .where(decisionScope())\n .orderBy(desc(designDecisions.createdAt), desc(sql`rowid`))\n .limit(limit)\n return rows.map(mapDecision)\n },\n\n async listExports(limit = DEFAULT_LIST_LIMIT): Promise<SceneExportRecord[]> {\n assertListLimit(limit)\n const rows = await db.select().from(designExports)\n .where(exportScope())\n .orderBy(desc(designExports.createdAt), desc(sql`rowid`))\n .limit(limit)\n return rows.map(mapExport)\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Row → model mapping. `metadata` is nullable with a `{}` default in the\n// schema; SQL NULL and `{}` are both \"no metadata\" — `?? {}` is a lossless\n// representation conversion, not an error-hiding fallback.\n// ---------------------------------------------------------------------------\n\nfunction mapDocument(row: DesignDocumentRow): SceneDocumentRecord {\n return {\n document: row.document,\n rev: row.rev,\n }\n}\n\nfunction mapDecision(row: DesignDecisionRow): SceneDecision {\n return {\n id: row.id,\n kind: row.kind,\n instruction: row.instruction,\n reasoningSummary: row.reasoningSummary,\n metadata: row.metadata ?? {},\n createdAt: row.createdAt,\n }\n}\n\nfunction mapExport(row: DesignExportRow): SceneExportRecord {\n return {\n id: row.id,\n format: row.format,\n status: row.status,\n resultUrl: row.resultUrl,\n metadata: row.metadata ?? {},\n createdAt: row.createdAt,\n }\n}\n\nfunction assertListLimit(limit: number): void {\n if (!Number.isInteger(limit) || limit < 1) throw new Error('limit must be a positive integer')\n}\n"],"mappings":"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","names":["sql"]}
1
+ {"version":3,"sources":["../../src/design-canvas/schema.ts","../../src/design-canvas/drizzle-store.ts"],"sourcesContent":["/**\n * Drizzle schema factory for design-canvas tables. The product owns the\n * workspace/user tables; the factory wires design-canvas foreign keys into\n * them so the whole graph lives in one drizzle schema with real cascade\n * semantics. Column names and conventions mirror the sequences schema so\n * products with both surfaces share a DDL style.\n *\n * The `document` column persists the full SceneDocument as JSON. Rev starts\n * at 1 on insert and increments atomically on every successful saveDocument —\n * optimistic concurrency without merge machinery.\n *\n * `isTemplate` marks documents that serve as fill-in-slots templates; the\n * index on (workspaceId, isTemplate) makes template browsing fast.\n */\n\nimport { sql } from 'drizzle-orm'\nimport { index, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport type { AnySQLiteColumn, AnySQLiteTable } from 'drizzle-orm/sqlite-core'\nimport type { SceneDocument } from './model'\n\n/** A product table referenced by FK — only the `id` column is touched. */\nexport type DesignCanvasParentTable = AnySQLiteTable & { id: AnySQLiteColumn }\n\n/** Define options for creating design canvas tables including workspace and user table configurations */\nexport interface CreateDesignCanvasTablesOptions {\n workspaceTable: DesignCanvasParentTable\n userTable: DesignCanvasParentTable\n}\n\nconst hexId = () => text('id').primaryKey().default(sql`(lower(hex(randomblob(16))))`)\n\nconst jsonMetadata = () => text('metadata', { mode: 'json' }).$type<Record<string, unknown>>().default({})\n\nconst createdAt = () => integer('created_at', { mode: 'timestamp' }).notNull().default(sql`(unixepoch())`)\n\nconst updatedAt = () => integer('updated_at', { mode: 'timestamp' }).notNull().default(sql`(unixepoch())`)\n\n/** Build SQLite tables for design documents with workspace and user references */\nexport function createDesignCanvasTables(opts: CreateDesignCanvasTablesOptions) {\n const { workspaceTable, userTable } = opts\n\n const designDocuments = sqliteTable('design_document', {\n id: hexId(),\n workspaceId: text('workspace_id').notNull().references(() => workspaceTable.id, { onDelete: 'cascade' }),\n title: text('title').notNull(),\n /** Full SceneDocument serialized as JSON — persisted and replaced atomically. */\n document: text('document', { mode: 'json' }).$type<SceneDocument>().notNull(),\n /** Monotonic revision; starts at 1, incremented by every successful save. */\n rev: integer('rev').notNull().default(1),\n /** True when this document is a slot-fillable template for data binding. */\n isTemplate: integer('is_template', { mode: 'boolean' }).notNull().default(false),\n createdBy: text('created_by').notNull().references(() => userTable.id),\n createdAt: createdAt(),\n updatedAt: updatedAt(),\n }, (table) => [\n index('idx_design_document_workspace_updated').on(table.workspaceId, table.updatedAt),\n index('idx_design_document_workspace_template').on(table.workspaceId, table.isTemplate),\n ])\n\n const designDecisions = sqliteTable('design_decision', {\n id: hexId(),\n documentId: text('document_id').notNull().references(() => designDocuments.id, { onDelete: 'cascade' }),\n workspaceId: text('workspace_id').notNull().references(() => workspaceTable.id, { onDelete: 'cascade' }),\n kind: text('kind', { enum: ['human_edit', 'agent_edit', 'agent_proposal', 'export', 'note'] }).notNull(),\n instruction: text('instruction').notNull(),\n reasoningSummary: text('reasoning_summary'),\n metadata: jsonMetadata(),\n createdBy: text('created_by').notNull().references(() => userTable.id),\n createdAt: createdAt(),\n }, (table) => [\n index('idx_design_decision_document').on(table.documentId, table.createdAt),\n index('idx_design_decision_workspace').on(table.workspaceId),\n ])\n\n const designExports = sqliteTable('design_export', {\n id: hexId(),\n documentId: text('document_id').notNull().references(() => designDocuments.id, { onDelete: 'cascade' }),\n workspaceId: text('workspace_id').notNull().references(() => workspaceTable.id, { onDelete: 'cascade' }),\n format: text('format', { enum: ['png', 'jpeg', 'json'] }).notNull(),\n status: text('status', { enum: ['queued', 'processing', 'completed', 'failed'] }).notNull().default('queued'),\n resultUrl: text('result_url'),\n metadata: jsonMetadata(),\n createdBy: text('created_by').notNull().references(() => userTable.id),\n createdAt: createdAt(),\n }, (table) => [\n index('idx_design_export_document').on(table.documentId, table.createdAt),\n index('idx_design_export_workspace').on(table.workspaceId),\n ])\n\n return { designDocuments, designDecisions, designExports }\n}\n\n/** Resolve the structure and data of design canvas tables for rendering and manipulation */\nexport type DesignCanvasTables = ReturnType<typeof createDesignCanvasTables>\n\n/** Resolve the selected structure of a design document row from design canvas tables */\nexport type DesignDocumentRow = DesignCanvasTables['designDocuments']['$inferSelect']\n/** Resolve a design decision row from the design decisions table selection */\nexport type DesignDecisionRow = DesignCanvasTables['designDecisions']['$inferSelect']\n/** Resolve the selected fields of designExports from DesignCanvasTables */\nexport type DesignExportRow = DesignCanvasTables['designExports']['$inferSelect']\n","/**\n * Drizzle-backed `SceneStore` over the tables from `createDesignCanvasTables`.\n * Works against any SQLite drizzle driver (better-sqlite3, D1, libsql).\n *\n * Defense in depth: RBAC runs before the store is constructed, but every\n * query still pins `workspaceId` AND `documentId` from the scope in its WHERE\n * clause, so a leaked or attacker-supplied row id from another workspace can\n * never read or write across the boundary — it surfaces as \"not found\".\n *\n * Optimistic concurrency for saveDocument: the UPDATE WHERE clause includes\n * `rev = expectedRev`; when 0 rows are changed (stale revision or missing\n * document), the store reads back the row to emit a precise error — either\n * \"stale rev\" or \"not found\" — so callers know whether to refetch-and-replay\n * or abort.\n */\n\nimport { and, desc, eq, sql } from 'drizzle-orm'\nimport type { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core'\nimport type { SceneDocument } from './model'\nimport type {\n NewSceneDecision,\n SceneDecision,\n SceneDocumentRecord,\n SceneExportFormat,\n SceneExportRecord,\n SceneStore,\n SceneStoreScope,\n} from './store'\nimport type {\n DesignCanvasTables,\n DesignDecisionRow,\n DesignDocumentRow,\n DesignExportRow,\n} from './schema'\n\n/** Any SQLite drizzle database — `any` erases the driver-specific run-result\n * and schema generics so better-sqlite3, D1, and libsql handles all fit. */\nexport type DesignCanvasDatabase = BaseSQLiteDatabase<'sync' | 'async', any, any>\n\n/** Define options for creating a Drizzle scene store including database, tables, and scope */\nexport interface CreateDrizzleSceneStoreOptions {\n db: DesignCanvasDatabase\n tables: DesignCanvasTables\n scope: SceneStoreScope\n}\n\nconst DEFAULT_LIST_LIMIT = 50\n\n/** Create a scene store configured with database tables and scoped to a specific document and workspace */\nexport function createDrizzleSceneStore(options: CreateDrizzleSceneStoreOptions): SceneStore {\n const { db, tables, scope } = options\n const { designDocuments, designDecisions, designExports } = tables\n\n const docScope = () => and(\n eq(designDocuments.id, scope.documentId),\n eq(designDocuments.workspaceId, scope.workspaceId),\n )\n\n const decisionScope = () => and(\n eq(designDecisions.documentId, scope.documentId),\n eq(designDecisions.workspaceId, scope.workspaceId),\n )\n\n const exportScope = () => and(\n eq(designExports.documentId, scope.documentId),\n eq(designExports.workspaceId, scope.workspaceId),\n )\n\n async function requireDocumentRow(): Promise<DesignDocumentRow> {\n const [row] = await db.select().from(designDocuments).where(docScope()).limit(1)\n if (!row) {\n throw new Error(`Design document ${scope.documentId} not found in workspace ${scope.workspaceId}`)\n }\n return row\n }\n\n return {\n async getDocument(): Promise<SceneDocumentRecord> {\n const row = await requireDocumentRow()\n return mapDocument(row)\n },\n\n async saveDocument(document: SceneDocument, expectedRev: number): Promise<SceneDocumentRecord> {\n const result = await db\n .update(designDocuments)\n .set({\n document,\n rev: sql`${designDocuments.rev} + 1`,\n updatedAt: new Date(),\n })\n .where(and(\n docScope(),\n eq(designDocuments.rev, expectedRev),\n ))\n .returning()\n\n if (result.length === 0) {\n // Distinguish stale-rev from missing document so callers get an\n // actionable error message rather than a generic \"not found\".\n const [existing] = await db.select().from(designDocuments).where(docScope()).limit(1)\n if (!existing) {\n throw new Error(\n `Design document ${scope.documentId} not found in workspace ${scope.workspaceId}`,\n )\n }\n throw new Error(\n `Stale revision: expected rev ${expectedRev} but document is at rev ${existing.rev}. ` +\n `Refetch the document and replay your operations.`,\n )\n }\n\n const [row] = result\n if (!row) throw new Error('saveDocument UPDATE returned no row')\n return mapDocument(row)\n },\n\n async recordDecision(input: NewSceneDecision): Promise<SceneDecision> {\n // Verify the document exists in this workspace before writing the FK row.\n await requireDocumentRow()\n const [row] = await db.insert(designDecisions).values({\n documentId: scope.documentId,\n workspaceId: scope.workspaceId,\n kind: input.kind,\n instruction: input.instruction,\n reasoningSummary: input.reasoningSummary ?? null,\n metadata: input.metadata ?? {},\n createdBy: scope.userId,\n }).returning()\n if (!row) throw new Error('design_decision insert returned no row')\n return mapDecision(row)\n },\n\n async createExport(format: SceneExportFormat, metadata?: Record<string, unknown>): Promise<SceneExportRecord> {\n await requireDocumentRow()\n const [row] = await db.insert(designExports).values({\n documentId: scope.documentId,\n workspaceId: scope.workspaceId,\n format,\n metadata: metadata ?? {},\n createdBy: scope.userId,\n }).returning()\n if (!row) throw new Error('design_export insert returned no row')\n return mapExport(row)\n },\n\n async listDecisions(limit = DEFAULT_LIST_LIMIT): Promise<SceneDecision[]> {\n assertListLimit(limit)\n const rows = await db.select().from(designDecisions)\n .where(decisionScope())\n .orderBy(desc(designDecisions.createdAt), desc(sql`rowid`))\n .limit(limit)\n return rows.map(mapDecision)\n },\n\n async listExports(limit = DEFAULT_LIST_LIMIT): Promise<SceneExportRecord[]> {\n assertListLimit(limit)\n const rows = await db.select().from(designExports)\n .where(exportScope())\n .orderBy(desc(designExports.createdAt), desc(sql`rowid`))\n .limit(limit)\n return rows.map(mapExport)\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Row → model mapping. `metadata` is nullable with a `{}` default in the\n// schema; SQL NULL and `{}` are both \"no metadata\" — `?? {}` is a lossless\n// representation conversion, not an error-hiding fallback.\n// ---------------------------------------------------------------------------\n\nfunction mapDocument(row: DesignDocumentRow): SceneDocumentRecord {\n return {\n document: row.document,\n rev: row.rev,\n }\n}\n\nfunction mapDecision(row: DesignDecisionRow): SceneDecision {\n return {\n id: row.id,\n kind: row.kind,\n instruction: row.instruction,\n reasoningSummary: row.reasoningSummary,\n metadata: row.metadata ?? {},\n createdAt: row.createdAt,\n }\n}\n\nfunction mapExport(row: DesignExportRow): SceneExportRecord {\n return {\n id: row.id,\n format: row.format,\n status: row.status,\n resultUrl: row.resultUrl,\n metadata: row.metadata ?? {},\n createdAt: row.createdAt,\n }\n}\n\nfunction assertListLimit(limit: number): void {\n if (!Number.isInteger(limit) || limit < 1) throw new Error('limit must be a positive integer')\n}\n"],"mappings":"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","names":["sql"]}
@@ -1,14 +1,14 @@
1
- import { c as SceneDocument, f as SceneElementKind, d as SceneElement, g as ScenePage } from '../model-BBwyOuWG.js';
2
- export { B as Bounds, E as EllipseElement, G as GroupElement, I as ImageElement, L as LineElement, N as NewPageOptions, P as PageBleed, a as PageGuides, R as RectElement, S as SCENE_ELEMENT_KINDS, b as SCENE_SCHEMA_VERSION, e as SceneElementBase, h as SceneSettings, T as TextElement, V as VideoElement, i as assertColor, j as assertFinite, k as assertPositiveFinite, l as assertSceneMediaSrc, m as boundsIntersect, n as collectSlots, o as createEmptyDocument, p as createPage, q as elementAabb, r as elementExtent, s as estimateTextHeight, t as findElement, u as requireElement, v as requirePage } from '../model-BBwyOuWG.js';
3
- import { g as SceneOperation, i as ScenePlan } from '../operations-DLIvvD00.js';
4
- export { A as AddElementOperation, a as AddPageOperation, b as ApplyDataOperation, B as BindSlotOperation, D as DeleteElementOperation, c as DeletePageOperation, d as DuplicatePageOperation, G as GroupElementsOperation, R as ReorderElementOperation, e as ReorderPageOperation, S as SCENE_OPERATION_TYPES, f as SceneAttrsPatch, h as SceneOperationType, j as SetAttrsOperation, k as SetDocumentTitleOperation, l as SetPageGuidesOperation, m as SetPagePropsOperation, U as UngroupElementOperation } from '../operations-DLIvvD00.js';
5
- import { d as SceneStore, N as NewSceneDecision, a as SceneDocumentRecord } from '../store-CFyxgTlD.js';
6
- export { S as SceneDecision, b as SceneExportFormat, c as SceneExportRecord, e as SceneStoreScope } from '../store-CFyxgTlD.js';
7
- export { C as CHANNEL_PRESETS, a as ChannelPreset, b as ChannelPresetId, c as ChannelScaleResult, E as EXPORT_PRESETS, d as ExportCropRect, e as ExportFormat, f as ExportPreset, S as SIZE_PRESETS, g as SizePreset, h as bleedAwareExportBounds, i as bleedAwareExportRect, j as findPreset, m as matchPreset, r as requireChannelPreset, s as scaleForPreset, k as scalePageForChannelPreset } from '../export-presets-DAsU5Wal.js';
8
- import { c as McpToolDefinition } from '../mcp-rpc-DLw_r9PQ.js';
9
- import { S as ScopedMcpServerEntryOptions, A as AppToolMcpServer } from '../mcp-BHfIoGLW.js';
10
- import '../types-BEOvc_ue.js';
11
- import '../auth-DuptSkWh.js';
1
+ import { c as SceneDocument, d as SceneElementKind, a as SceneElement, S as ScenePage } from '../model-DnfO_PdJ.js';
2
+ export { B as Bounds, E as EllipseElement, G as GroupElement, I as ImageElement, L as LineElement, N as NewPageOptions, P as PageBleed, b as PageGuides, R as RectElement, e as SCENE_ELEMENT_KINDS, f as SCENE_SCHEMA_VERSION, g as SceneElementBase, h as SceneSettings, T as TextElement, V as VideoElement, i as assertColor, j as assertFinite, k as assertPositiveFinite, l as assertSceneMediaSrc, m as boundsIntersect, n as collectSlots, o as createEmptyDocument, p as createPage, q as elementAabb, r as elementExtent, s as estimateTextHeight, t as findElement, u as requireElement, v as requirePage } from '../model-DnfO_PdJ.js';
3
+ import { S as SceneOperation, a as ScenePlan } from '../operations-ByJ6yXOW.js';
4
+ export { A as AddElementOperation, b as AddPageOperation, c as ApplyDataOperation, B as BindSlotOperation, D as DeleteElementOperation, d as DeletePageOperation, e as DuplicatePageOperation, G as GroupElementsOperation, R as ReorderElementOperation, f as ReorderPageOperation, g as SCENE_OPERATION_TYPES, h as SceneAttrsPatch, i as SceneOperationType, j as SetAttrsOperation, k as SetDocumentTitleOperation, l as SetPageGuidesOperation, m as SetPagePropsOperation, U as UngroupElementOperation } from '../operations-ByJ6yXOW.js';
5
+ import { a as SceneStore, N as NewSceneDecision, b as SceneDocumentRecord } from '../store-CqfDtnPQ.js';
6
+ export { c as SceneDecision, d as SceneExportFormat, e as SceneExportRecord, S as SceneStoreScope } from '../store-CqfDtnPQ.js';
7
+ export { C as CHANNEL_PRESETS, a as ChannelPreset, b as ChannelPresetId, c as ChannelScaleResult, E as EXPORT_PRESETS, d as ExportCropRect, e as ExportFormat, f as ExportPreset, S as SIZE_PRESETS, g as SizePreset, h as bleedAwareExportBounds, i as bleedAwareExportRect, j as findPreset, m as matchPreset, r as requireChannelPreset, s as scaleForPreset, k as scalePageForChannelPreset } from '../export-presets-mgVulRaV.js';
8
+ import { c as McpToolDefinition } from '../mcp-rpc-BfUOsalw.js';
9
+ import { S as ScopedMcpServerEntryOptions, A as AppToolMcpServer } from '../mcp-BjPqQ-3C.js';
10
+ import '../types-CBRyqijY.js';
11
+ import '../auth-_FU8w01b.js';
12
12
 
13
13
  /**
14
14
  * Pre-write validation for scene operations. Every rule runs against a
@@ -32,7 +32,9 @@ import '../auth-DuptSkWh.js';
32
32
  * group elements → value must pass assertColor (fill/stroke passed down to children)
33
33
  */
34
34
 
35
+ /** Validate each scene operation against the document and throw detailed errors for invalid operations */
35
36
  declare function validateSceneOperations(document: SceneDocument, operations: SceneOperation[]): void;
37
+ /** Validate a scene operation against the document to ensure it meets required constraints */
36
38
  declare function validateSceneOperation(document: SceneDocument, operation: SceneOperation): void;
37
39
  /**
38
40
  * Validates that a slot binding value matches the slot element's kind.
@@ -64,6 +66,7 @@ declare function validateSlotValue(slotName: string, elementKind: SceneElementKi
64
66
  * stale-rev by refetch + revalidate + reapply.
65
67
  */
66
68
 
69
+ /** Represent the result of applying changes to a scene as an element, page, or entire document */
67
70
  type SceneApplyResult = {
68
71
  kind: 'element';
69
72
  pageId: string;
@@ -74,6 +77,7 @@ type SceneApplyResult = {
74
77
  } | {
75
78
  kind: 'document';
76
79
  };
80
+ /** Resolve element ID conflicts by providing fresh unique identifiers during scene application */
77
81
  interface ApplySceneOptions {
78
82
  /**
79
83
  * Provides fresh ids when duplicate_page re-mints element ids. Never called
@@ -98,6 +102,7 @@ declare function applySceneOperations(document: SceneDocument, operations: Scene
98
102
  * Equivalent to `applySceneOperations(doc, [op])` but returns `SceneDocument`
99
103
  * directly — the common case in editor commands and tests. */
100
104
  declare function applySceneOperation(document: SceneDocument, operation: SceneOperation): SceneDocument;
105
+ /** Resolve and apply a scene plan to the store with specified actor context and generate results */
101
106
  declare function storeApplyScenePlan(store: SceneStore, plan: ScenePlan, opts: {
102
107
  actorKind: NewSceneDecision['kind'];
103
108
  mintId: () => string;
@@ -122,7 +127,9 @@ declare function storeApplyScenePlan(store: SceneStore, plan: ScenePlan, opts: {
122
127
  * `validateBindings` or accept that the throw is the signal to fix their data.
123
128
  */
124
129
 
130
+ /** Define allowed string literals representing different slot fill kinds */
125
131
  type SlotFillKind = 'text' | 'src' | 'color';
132
+ /** Define a slot template specifying its name, page, element, and fill characteristics */
126
133
  interface TemplateSlot {
127
134
  name: string;
128
135
  pageId: string;
@@ -143,6 +150,7 @@ declare function listTemplateSlots(document: SceneDocument): TemplateSlot[];
143
150
  * can surface a structured error instead of catching.
144
151
  */
145
152
  declare function validateBindings(document: SceneDocument, bindings: Record<string, string>): string[];
153
+ /** Define options for instantiating a document with title, optional bindings, and custom id minting */
146
154
  interface InstantiateOptions {
147
155
  /** Human-readable title for the new document. */
148
156
  title: string;
@@ -191,14 +199,19 @@ declare function applyBindingsToDocument(document: SceneDocument, bindings: Reco
191
199
  * code path to drift.
192
200
  */
193
201
 
202
+ /** Define the environment for MCP tool with a scene store and ID minting function */
194
203
  interface DesignCanvasMcpToolEnv {
195
204
  store: SceneStore;
196
205
  mintId: () => string;
197
206
  }
207
+ /** Provide a collection of MCP tool definitions for manipulating and querying the design canvas environment */
198
208
  declare const CANVAS_MCP_TOOLS: McpToolDefinition<DesignCanvasMcpToolEnv>[];
199
209
 
210
+ /** Find the canvas MCP tool definition matching the given name or return undefined */
200
211
  declare function findCanvasMcpTool(name: string): McpToolDefinition<DesignCanvasMcpToolEnv> | undefined;
212
+ /** Extract names of all tools from the CANVAS_MCP_TOOLS array */
201
213
  declare const CANVAS_MCP_TOOL_NAMES: string[];
214
+ /** Provide a readonly array of string identifiers representing canvas element kinds */
202
215
  declare const CANVAS_ELEMENT_KINDS: readonly string[];
203
216
 
204
217
  /**
@@ -218,10 +231,12 @@ declare const CANVAS_ELEMENT_KINDS: readonly string[];
218
231
  * the caller-supplied id-minting function.
219
232
  */
220
233
 
234
+ /** Describe design canvas MCP server information including name and version */
221
235
  interface DesignCanvasMcpServerInfo {
222
236
  name: string;
223
237
  version: string;
224
238
  }
239
+ /** Define options for creating a design canvas MCP handler including store, ID minting, and optional server info */
225
240
  interface CreateDesignCanvasMcpHandlerOptions {
226
241
  /** Already scoped + authorized for one (workspace, document, actor). */
227
242
  store: SceneStore;
@@ -231,6 +246,7 @@ interface CreateDesignCanvasMcpHandlerOptions {
231
246
  mintId: () => string;
232
247
  serverInfo?: DesignCanvasMcpServerInfo;
233
248
  }
249
+ /** Create a request handler for the design canvas MCP tool with specified options */
234
250
  declare function createDesignCanvasMcpHandler(opts: CreateDesignCanvasMcpHandlerOptions): (request: Request) => Promise<Response>;
235
251
 
236
252
  /**
@@ -242,7 +258,9 @@ declare function createDesignCanvasMcpHandler(opts: CreateDesignCanvasMcpHandler
242
258
  * domain-specific values are this channel's default description and name.
243
259
  */
244
260
 
261
+ /** Describe the live visual asset editor capabilities for the current design document using CSS pixel coordinates */
245
262
  declare const DEFAULT_DESIGN_CANVAS_MCP_DESCRIPTION = "Live visual asset editor for the current design document: read scene state, add/move/resize/delete elements, manage pages, bind template slots, apply data, and queue exports. All coordinates are CSS pixels.";
263
+ /** Build scoped MCP server entry options for the design canvas environment */
246
264
  type BuildDesignCanvasMcpServerEntryOptions = ScopedMcpServerEntryOptions;
247
265
  /** Build the `AgentProfileMcpServer`-shaped entry for the design-canvas channel. */
248
266
  declare function buildDesignCanvasMcpServerEntry(opts: BuildDesignCanvasMcpServerEntryOptions): AppToolMcpServer;