@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.
- package/dist/DesignCanvas-UNL34LS2.js +12 -0
- package/dist/DesignCanvasEditor-FJIVYOA2.js +13 -0
- package/dist/IntakeInterview-3ZIQMZS6.js +8 -0
- package/dist/InvitationsPanel-CJ7DR4F7.js +8 -0
- package/dist/MembersPanel-BB4OD2KB.js +8 -0
- package/dist/{TimelineEditor-I35SJJAJ.js → TimelineEditor-2ECKSU6P.js} +3 -3
- package/dist/{VaultPane-DrQ_tH6c.d.ts → VaultPane-BDP6SB_K.d.ts} +1 -0
- package/dist/{access-BZ81Btt5.d.ts → access-490O6aOU.d.ts} +16 -1
- package/dist/app-auth/index.d.ts +6 -1
- package/dist/app-auth/index.js +3 -3
- package/dist/app-auth/index.js.map +1 -1
- package/dist/{apply-Gk4raT2j.d.ts → apply-6wlMOLf8.d.ts} +30 -1
- package/dist/assets/index.d.ts +41 -0
- package/dist/assets/index.js +1 -1
- package/dist/assistant/index.d.ts +26 -6
- package/dist/assistant/index.js +13 -12
- package/dist/assistant/index.js.map +1 -1
- package/dist/{attachment-validation-D0csjCvz.d.ts → attachment-validation-tPRp-PP1.d.ts} +7 -1
- package/dist/{auth-DuptSkWh.d.ts → auth-_FU8w01b.d.ts} +4 -1
- package/dist/billing/index.d.ts +8 -0
- package/dist/billing/index.js +1 -1
- package/dist/brand/index.d.ts +2 -0
- package/dist/brand/index.js.map +1 -1
- package/dist/brand-extraction/index.d.ts +3 -0
- package/dist/brand-extraction/index.js.map +1 -1
- package/dist/catalog/index.d.ts +2 -0
- package/dist/catalog/index.js +1 -1
- package/dist/chat-routes/index.d.ts +41 -10
- package/dist/chat-routes/index.js +15 -15
- package/dist/chat-routes/index.js.map +1 -1
- package/dist/chat-store/index.d.ts +18 -4
- package/dist/chat-store/index.js +4 -4
- package/dist/chat-store/index.js.map +1 -1
- package/dist/{chunk-H5FM75MR.js → chunk-22GLESKE.js} +3 -3
- package/dist/chunk-22GLESKE.js.map +1 -0
- package/dist/{chunk-WEBBJBDH.js → chunk-2DRYTJHI.js} +1 -1
- package/dist/chunk-2DRYTJHI.js.map +1 -0
- package/dist/{chunk-7EVZUIHW.js → chunk-3EJ6SFJI.js} +1 -1
- package/dist/chunk-3EJ6SFJI.js.map +1 -0
- package/dist/{chunk-HRJJH3RX.js → chunk-3OFQFW5K.js} +4 -4
- package/dist/chunk-3OFQFW5K.js.map +1 -0
- package/dist/{chunk-7SUPA2YT.js → chunk-4KKXZQPT.js} +2 -2
- package/dist/chunk-4KKXZQPT.js.map +1 -0
- package/dist/{chunk-5PTGEJZL.js → chunk-5SD6HT2V.js} +1 -1
- package/dist/chunk-5SD6HT2V.js.map +1 -0
- package/dist/{chunk-7C64WKAH.js → chunk-5SXS3YAB.js} +2 -2
- package/dist/{chunk-L2TG5DBW.js → chunk-5TESA4SN.js} +1 -1
- package/dist/chunk-5TESA4SN.js.map +1 -0
- package/dist/{chunk-63CE7FEZ.js → chunk-6XIAPIW6.js} +1 -1
- package/dist/chunk-6XIAPIW6.js.map +1 -0
- package/dist/{chunk-MFRCM32T.js → chunk-7CTIUCQ4.js} +1 -1
- package/dist/chunk-7CTIUCQ4.js.map +1 -0
- package/dist/{chunk-6KVH5SP5.js → chunk-7YW6EBDX.js} +2 -2
- package/dist/chunk-7YW6EBDX.js.map +1 -0
- package/dist/{chunk-ZXNXAQAH.js → chunk-AP2UXKUK.js} +1 -1
- package/dist/chunk-AP2UXKUK.js.map +1 -0
- package/dist/{chunk-K63OWUDJ.js → chunk-BPSV5AA2.js} +2 -2
- package/dist/chunk-BPSV5AA2.js.map +1 -0
- package/dist/{chunk-MFI4ZM7W.js → chunk-BT4QFCTB.js} +1 -1
- package/dist/chunk-BT4QFCTB.js.map +1 -0
- package/dist/{chunk-ZYBWGSAZ.js → chunk-BVKQKGRK.js} +1 -1
- package/dist/chunk-BVKQKGRK.js.map +1 -0
- package/dist/{chunk-RVUISYUE.js → chunk-C3NSB66C.js} +7 -7
- package/dist/chunk-C3NSB66C.js.map +1 -0
- package/dist/{chunk-BQV42AFK.js → chunk-CCVWR33L.js} +1 -1
- package/dist/chunk-CCVWR33L.js.map +1 -0
- package/dist/{chunk-MCJSS6SM.js → chunk-CQZSAR77.js} +1 -1
- package/dist/chunk-CQZSAR77.js.map +1 -0
- package/dist/{chunk-3SVAA3MA.js → chunk-DJ4VJIH5.js} +1 -1
- package/dist/chunk-DJ4VJIH5.js.map +1 -0
- package/dist/{chunk-XKBIYSSM.js → chunk-DTSPS2HV.js} +3 -3
- package/dist/chunk-DTSPS2HV.js.map +1 -0
- package/dist/{chunk-4QN75UHX.js → chunk-E7N67FYI.js} +8 -8
- package/dist/chunk-E7N67FYI.js.map +1 -0
- package/dist/{chunk-2QI7XV2T.js → chunk-FBVLEGEG.js} +1 -1
- package/dist/{chunk-2QI7XV2T.js.map → chunk-FBVLEGEG.js.map} +1 -1
- package/dist/{chunk-5RMIUJDI.js → chunk-FKCB5FTD.js} +1 -1
- package/dist/chunk-FKCB5FTD.js.map +1 -0
- package/dist/{chunk-EEPJGZJW.js → chunk-GPBRL2XR.js} +1 -1
- package/dist/chunk-GPBRL2XR.js.map +1 -0
- package/dist/{chunk-G3HCU7TA.js → chunk-GXE6KHTS.js} +1 -1
- package/dist/chunk-GXE6KHTS.js.map +1 -0
- package/dist/{chunk-65P3HJY3.js → chunk-HCOROIRT.js} +1 -1
- package/dist/chunk-HCOROIRT.js.map +1 -0
- package/dist/{chunk-54GSK2KK.js → chunk-HYTIHYNV.js} +2 -2
- package/dist/chunk-HYTIHYNV.js.map +1 -0
- package/dist/{chunk-5MG74GVQ.js → chunk-IG46XCZM.js} +3 -3
- package/dist/chunk-IG46XCZM.js.map +1 -0
- package/dist/{chunk-ND3XEGBE.js → chunk-JDEGS53O.js} +1 -1
- package/dist/chunk-JDEGS53O.js.map +1 -0
- package/dist/{chunk-7W5XSTUF.js → chunk-JML7WKWU.js} +1 -1
- package/dist/chunk-JML7WKWU.js.map +1 -0
- package/dist/{chunk-Q4TKVF3L.js → chunk-JTLYXUEV.js} +1 -1
- package/dist/chunk-JTLYXUEV.js.map +1 -0
- package/dist/{chunk-CCRVDLV3.js → chunk-JWBZ74TW.js} +2 -2
- package/dist/chunk-JWBZ74TW.js.map +1 -0
- package/dist/{chunk-ZU5GNSOJ.js → chunk-K3LIPKFV.js} +3 -3
- package/dist/chunk-K3LIPKFV.js.map +1 -0
- package/dist/{chunk-GQRL6VNU.js → chunk-LGBO24FL.js} +1 -1
- package/dist/chunk-LGBO24FL.js.map +1 -0
- package/dist/{chunk-SWUVTGMR.js → chunk-MEUNTJL5.js} +3 -3
- package/dist/{chunk-SWUVTGMR.js.map → chunk-MEUNTJL5.js.map} +1 -1
- package/dist/{chunk-YNALYIQ3.js → chunk-NLSSFLLS.js} +1 -1
- package/dist/chunk-NLSSFLLS.js.map +1 -0
- package/dist/{chunk-HFC4BTWJ.js → chunk-PTUMBMVH.js} +1 -1
- package/dist/chunk-PTUMBMVH.js.map +1 -0
- package/dist/{chunk-R4NOKZMD.js → chunk-ROLFDOMJ.js} +3 -3
- package/dist/{chunk-NYATNLRK.js → chunk-RT5RKAFX.js} +1 -1
- package/dist/chunk-RT5RKAFX.js.map +1 -0
- package/dist/{chunk-GNL3MG5J.js → chunk-S564OFTL.js} +2 -2
- package/dist/{chunk-GUSCYE3S.js → chunk-TQOFR6XY.js} +1 -1
- package/dist/chunk-TQOFR6XY.js.map +1 -0
- package/dist/{chunk-47C6PJCW.js → chunk-TZO3SOUL.js} +1 -1
- package/dist/chunk-TZO3SOUL.js.map +1 -0
- package/dist/{chunk-YGUNTIT5.js → chunk-UKTYKG57.js} +1 -1
- package/dist/chunk-UKTYKG57.js.map +1 -0
- package/dist/{chunk-23LUHHHN.js → chunk-VCOD5AOR.js} +1 -1
- package/dist/chunk-VCOD5AOR.js.map +1 -0
- package/dist/{chunk-5I72FRZY.js → chunk-VOJB7MVG.js} +2 -2
- package/dist/{chunk-XWJXZ6WE.js → chunk-VTWKH4YU.js} +2 -2
- package/dist/chunk-VTWKH4YU.js.map +1 -0
- package/dist/{chunk-4K7BZYO7.js → chunk-VWAEWOWK.js} +3 -3
- package/dist/chunk-VWAEWOWK.js.map +1 -0
- package/dist/{chunk-M2EBUDZ7.js → chunk-VWOPOLVO.js} +2 -2
- package/dist/chunk-VWOPOLVO.js.map +1 -0
- package/dist/{chunk-BN2USWIR.js → chunk-VYECQAGM.js} +2 -2
- package/dist/chunk-VYECQAGM.js.map +1 -0
- package/dist/{chunk-SIXYZ2FB.js → chunk-YJMCRXQQ.js} +1 -1
- package/dist/chunk-YJMCRXQQ.js.map +1 -0
- package/dist/{chunk-PJC4NXPA.js → chunk-YKBDH2UY.js} +3 -3
- package/dist/chunk-YKBDH2UY.js.map +1 -0
- package/dist/{chunk-XAWFPMAR.js → chunk-YKOM4ZLQ.js} +1 -1
- package/dist/chunk-YKOM4ZLQ.js.map +1 -0
- package/dist/{chunk-TKVJE63N.js → chunk-YRMLYFVR.js} +3 -3
- package/dist/chunk-YRMLYFVR.js.map +1 -0
- package/dist/{chunk-USYXHDKE.js → chunk-YZ6KQULN.js} +2 -2
- package/dist/{command-stack-B_-WNfZU.d.ts → command-stack-TNPWJCzW.d.ts} +14 -2
- package/dist/{completion-Kaqp_tWk.d.ts → completion-CvcNUz07.d.ts} +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/{contract-KfqJh_au.d.ts → contract-TjB68uqA.d.ts} +17 -0
- package/dist/design-canvas/drizzle.d.ts +10 -2
- package/dist/design-canvas/drizzle.js.map +1 -1
- package/dist/design-canvas/index.d.ts +29 -11
- package/dist/design-canvas/index.js +1070 -17
- package/dist/design-canvas/index.js.map +1 -1
- package/dist/design-canvas-react/engine.d.ts +42 -6
- package/dist/design-canvas-react/engine.js +4 -4
- package/dist/design-canvas-react/index.d.ts +12 -7
- package/dist/design-canvas-react/index.js +11 -11
- package/dist/design-canvas-react/index.js.map +1 -1
- package/dist/design-canvas-react/lazy.d.ts +4 -4
- package/dist/design-canvas-react/lazy.js +1 -1
- package/dist/durable-chat/index.d.ts +46 -1
- package/dist/durable-chat/index.js +3 -3
- package/dist/eval/index.d.ts +1 -1
- package/dist/{export-presets-DAsU5Wal.d.ts → export-presets-mgVulRaV.d.ts} +10 -1
- package/dist/{flow-types-Cb_AblZs.d.ts → flow-types-CqomVAUN.d.ts} +1 -0
- package/dist/harness/index.d.ts +5 -0
- package/dist/harness/index.js +1 -1
- package/dist/index.d.ts +10 -18
- package/dist/index.js +30 -231
- package/dist/intakes/api.d.ts +3 -2
- package/dist/intakes/api.js +3 -3
- package/dist/intakes/api.js.map +1 -1
- package/dist/intakes/drizzle.d.ts +10 -2
- package/dist/intakes/drizzle.js +3 -3
- package/dist/intakes/drizzle.js.map +1 -1
- package/dist/intakes/index.d.ts +2 -2
- package/dist/intakes/index.js +2 -2
- package/dist/intakes-react/index.d.ts +2 -1
- package/dist/intakes-react/index.js +2 -2
- package/dist/intakes-react/lazy.d.ts +2 -1
- package/dist/intakes-react/lazy.js +1 -1
- package/dist/intakes-react/lazy.js.map +1 -1
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.js +1 -1
- package/dist/interactions/index.d.ts +13 -2
- package/dist/interactions/index.js +2 -2
- package/dist/{invitations-CZ5G2tIn.d.ts → invitations-DoYMvXea.d.ts} +11 -1
- package/dist/{invitations-schema-DaMO4hZE.d.ts → invitations-schema-_fI7HkJP.d.ts} +5 -1
- package/dist/knowledge/index.d.ts +2 -0
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge-loop/index.d.ts +4 -1
- package/dist/knowledge-loop/index.js +1 -1
- package/dist/{lazy-C7LiVeFt.d.ts → lazy-DrkVyDpe.d.ts} +2 -2
- package/dist/{mcp-BHfIoGLW.d.ts → mcp-BjPqQ-3C.d.ts} +4 -2
- package/dist/{mcp-rpc-DLw_r9PQ.d.ts → mcp-rpc-BfUOsalw.d.ts} +3 -0
- package/dist/missions/index.d.ts +25 -0
- package/dist/missions/index.js +1 -1
- package/dist/{model-Bzi5i63l.d.ts → model-C8U0HZxL.d.ts} +1 -0
- package/dist/{model-dF2h4xT9.d.ts → model-DmdkIteM.d.ts} +19 -0
- package/dist/{model-BBwyOuWG.d.ts → model-DnfO_PdJ.d.ts} +25 -1
- package/dist/model-resolution/index.d.ts +10 -0
- package/dist/model-resolution/index.js.map +1 -1
- package/dist/{operations-DLIvvD00.d.ts → operations-ByJ6yXOW.d.ts} +20 -2
- package/dist/{parts-1sRYSPjF.d.ts → parts-n9XUon0a.d.ts} +29 -1
- package/dist/plans/index.d.ts +6 -0
- package/dist/plans/index.js +1 -1
- package/dist/platform/index.d.ts +24 -2
- package/dist/platform/index.js +3 -3
- package/dist/platform/index.js.map +1 -1
- package/dist/preflight/index.d.ts +3 -0
- package/dist/preflight/index.js +1 -1
- package/dist/preset-cloudflare/index.d.ts +4 -1
- package/dist/preset-cloudflare/index.js +2 -2
- package/dist/redact/index.d.ts +5 -0
- package/dist/redact/index.js +1 -1
- package/dist/{roles-BC1n4t37.d.ts → roles-B4nU3jDi.d.ts} +12 -0
- package/dist/run/index.d.ts +3 -0
- package/dist/run/index.js +1 -1
- package/dist/run/index.js.map +1 -1
- package/dist/runtime/index.d.ts +11 -4
- package/dist/runtime/index.js +4 -4
- package/dist/sandbox/index.d.ts +96 -3
- package/dist/sandbox/index.js +6 -6
- package/dist/{sandbox-terminal-BIIC__CP.d.ts → sandbox-terminal-ChNEdHF8.d.ts} +5 -0
- package/dist/sequences/drizzle.d.ts +11 -1
- package/dist/sequences/drizzle.js +1 -1
- package/dist/sequences/drizzle.js.map +1 -1
- package/dist/sequences/index.d.ts +32 -7
- package/dist/sequences/index.js +1562 -47
- package/dist/sequences/index.js.map +1 -1
- package/dist/sequences-react/index.d.ts +32 -2
- package/dist/sequences-react/index.js +3 -3
- package/dist/sequences-react/index.js.map +1 -1
- package/dist/{sso-CNOsARMJ.d.ts → sso-Cm00S61u.d.ts} +13 -0
- package/dist/{stale-turn-lock-C8Na1cFZ.d.ts → stale-turn-lock-DucQzvXu.d.ts} +2 -0
- package/dist/store/index.d.ts +5 -0
- package/dist/store/index.js.map +1 -1
- package/dist/{store-gckrNq-g.d.ts → store-B7LLlk9p.d.ts} +22 -1
- package/dist/{store-CFyxgTlD.d.ts → store-CqfDtnPQ.d.ts} +8 -2
- package/dist/stream/index.d.ts +10 -4
- package/dist/stream/index.js +4 -4
- package/dist/{stream-normalizer-DWvtmY6F.d.ts → stream-normalizer-C3M--r6y.d.ts} +17 -1
- package/dist/studio/index.d.ts +37 -0
- package/dist/studio/index.js +1 -1
- package/dist/studio-react/index.d.ts +3 -0
- package/dist/studio-react/index.js +1 -1
- package/dist/studio-react/index.js.map +1 -1
- package/dist/tangle/index.d.ts +3 -0
- package/dist/tangle/index.js +1 -1
- package/dist/teams/drizzle.d.ts +8 -4
- package/dist/teams/drizzle.js +1 -1
- package/dist/teams/drizzle.js.map +1 -1
- package/dist/teams/index.d.ts +4 -2
- package/dist/teams/index.js +3 -3
- package/dist/teams/invitations-api.d.ts +10 -4
- package/dist/teams/invitations-api.js +4 -4
- package/dist/teams/invitations-api.js.map +1 -1
- package/dist/teams/members-api.d.ts +4 -2
- package/dist/teams/members-api.js +3 -3
- package/dist/teams/resend.d.ts +5 -4
- package/dist/teams/resend.js +1 -1
- package/dist/teams/resend.js.map +1 -1
- package/dist/teams-react/index.d.ts +7 -2
- package/dist/teams-react/index.js +3 -3
- package/dist/teams-react/lazy.d.ts +5 -2
- package/dist/teams-react/lazy.js +2 -2
- package/dist/teams-react/lazy.js.map +1 -1
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.js +1 -1
- package/dist/theme/tailwind-preset.d.ts +1 -0
- package/dist/theme/tailwind-preset.js.map +1 -1
- package/dist/theme-contract/cli.js +1 -1
- package/dist/theme-contract/index.d.ts +3 -0
- package/dist/theme-contract/index.js +1 -1
- package/dist/tools/index.d.ts +13 -6
- package/dist/tools/index.js +3 -3
- package/dist/trace/index.d.ts +6 -1
- package/dist/trace/index.js +2 -2
- package/dist/{turn-buffer-C9mEgoop.d.ts → turn-buffer-DGnAPKwa.d.ts} +6 -0
- package/dist/turn-stream/index.d.ts +28 -2
- package/dist/turn-stream/index.js +1 -1
- package/dist/turn-stream/index.js.map +1 -1
- package/dist/{types-BEOvc_ue.d.ts → types-CBRyqijY.d.ts} +10 -0
- package/dist/vault/index.d.ts +1 -1
- package/dist/vault/lazy.d.ts +3 -2
- package/dist/vault/lazy.js.map +1 -1
- package/dist/web/index.d.ts +4 -0
- package/dist/web/index.js +1 -1
- package/dist/web-react/index.d.ts +51 -8
- package/dist/web-react/index.js +9 -9
- package/dist/web-react/terminal.d.ts +2 -2
- package/dist/web-react/terminal.js +1 -1
- package/package.json +3 -2
- package/dist/DesignCanvas-5DJAFDNC.js +0 -12
- package/dist/DesignCanvasEditor-XUJZARSN.js +0 -13
- package/dist/IntakeInterview-WHVKMNQW.js +0 -8
- package/dist/InvitationsPanel-XUUWZBPV.js +0 -8
- package/dist/MembersPanel-FOVHWUQ3.js +0 -8
- package/dist/chunk-23LUHHHN.js.map +0 -1
- package/dist/chunk-3SVAA3MA.js.map +0 -1
- package/dist/chunk-47C6PJCW.js.map +0 -1
- package/dist/chunk-4K7BZYO7.js.map +0 -1
- package/dist/chunk-4QN75UHX.js.map +0 -1
- package/dist/chunk-54GSK2KK.js.map +0 -1
- package/dist/chunk-5MG74GVQ.js.map +0 -1
- package/dist/chunk-5PTGEJZL.js.map +0 -1
- package/dist/chunk-5RMIUJDI.js.map +0 -1
- package/dist/chunk-63CE7FEZ.js.map +0 -1
- package/dist/chunk-65P3HJY3.js.map +0 -1
- package/dist/chunk-6KVH5SP5.js.map +0 -1
- package/dist/chunk-7EVZUIHW.js.map +0 -1
- package/dist/chunk-7SUPA2YT.js.map +0 -1
- package/dist/chunk-7W5XSTUF.js.map +0 -1
- package/dist/chunk-BN2USWIR.js.map +0 -1
- package/dist/chunk-BQV42AFK.js.map +0 -1
- package/dist/chunk-CCRVDLV3.js.map +0 -1
- package/dist/chunk-EEPJGZJW.js.map +0 -1
- package/dist/chunk-G3HCU7TA.js.map +0 -1
- package/dist/chunk-GQRL6VNU.js.map +0 -1
- package/dist/chunk-GUSCYE3S.js.map +0 -1
- package/dist/chunk-H5FM75MR.js.map +0 -1
- package/dist/chunk-HFC4BTWJ.js.map +0 -1
- package/dist/chunk-HRJJH3RX.js.map +0 -1
- package/dist/chunk-K63OWUDJ.js.map +0 -1
- package/dist/chunk-L2TG5DBW.js.map +0 -1
- package/dist/chunk-M2EBUDZ7.js.map +0 -1
- package/dist/chunk-MCJSS6SM.js.map +0 -1
- package/dist/chunk-MFI4ZM7W.js.map +0 -1
- package/dist/chunk-MFRCM32T.js.map +0 -1
- package/dist/chunk-ND3XEGBE.js.map +0 -1
- package/dist/chunk-NEOV2NQ3.js +0 -1617
- package/dist/chunk-NEOV2NQ3.js.map +0 -1
- package/dist/chunk-NYATNLRK.js.map +0 -1
- package/dist/chunk-PJC4NXPA.js.map +0 -1
- package/dist/chunk-Q4TKVF3L.js.map +0 -1
- package/dist/chunk-RVUISYUE.js.map +0 -1
- package/dist/chunk-SIXYZ2FB.js.map +0 -1
- package/dist/chunk-TKVJE63N.js.map +0 -1
- package/dist/chunk-WEBBJBDH.js.map +0 -1
- package/dist/chunk-WFMUDX5J.js +0 -1092
- package/dist/chunk-WFMUDX5J.js.map +0 -1
- package/dist/chunk-XAWFPMAR.js.map +0 -1
- package/dist/chunk-XKBIYSSM.js.map +0 -1
- package/dist/chunk-XWJXZ6WE.js.map +0 -1
- package/dist/chunk-YGUNTIT5.js.map +0 -1
- package/dist/chunk-YNALYIQ3.js.map +0 -1
- package/dist/chunk-ZU5GNSOJ.js.map +0 -1
- package/dist/chunk-ZXNXAQAH.js.map +0 -1
- package/dist/chunk-ZYBWGSAZ.js.map +0 -1
- /package/dist/{DesignCanvas-5DJAFDNC.js.map → DesignCanvas-UNL34LS2.js.map} +0 -0
- /package/dist/{DesignCanvasEditor-XUJZARSN.js.map → DesignCanvasEditor-FJIVYOA2.js.map} +0 -0
- /package/dist/{IntakeInterview-WHVKMNQW.js.map → IntakeInterview-3ZIQMZS6.js.map} +0 -0
- /package/dist/{InvitationsPanel-XUUWZBPV.js.map → InvitationsPanel-CJ7DR4F7.js.map} +0 -0
- /package/dist/{MembersPanel-FOVHWUQ3.js.map → MembersPanel-BB4OD2KB.js.map} +0 -0
- /package/dist/{TimelineEditor-I35SJJAJ.js.map → TimelineEditor-2ECKSU6P.js.map} +0 -0
- /package/dist/{chunk-7C64WKAH.js.map → chunk-5SXS3YAB.js.map} +0 -0
- /package/dist/{chunk-R4NOKZMD.js.map → chunk-ROLFDOMJ.js.map} +0 -0
- /package/dist/{chunk-GNL3MG5J.js.map → chunk-S564OFTL.js.map} +0 -0
- /package/dist/{chunk-5I72FRZY.js.map → chunk-VOJB7MVG.js.map} +0 -0
- /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-
|
|
4
|
-
import {
|
|
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,
|
|
2
|
-
export { B as Bounds, E as EllipseElement, G as GroupElement, I as ImageElement, L as LineElement, N as NewPageOptions, P as PageBleed,
|
|
3
|
-
import {
|
|
4
|
-
export { A as AddElementOperation,
|
|
5
|
-
import {
|
|
6
|
-
export {
|
|
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-
|
|
8
|
-
import { c as McpToolDefinition } from '../mcp-rpc-
|
|
9
|
-
import { S as ScopedMcpServerEntryOptions, A as AppToolMcpServer } from '../mcp-
|
|
10
|
-
import '../types-
|
|
11
|
-
import '../auth-
|
|
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;
|