{ "name": "infinite-canvas", "version": "0.1.0", "private": true, "type": "module", "scripts": { "build:bridge": "bun ../canvas-agent/scripts/build-comfy-bridge.ts", "dev": "vite --host 0.0.0.0 --port 3000", "build": "bun run build:bridge && tsc --noEmit && vite build", "pretest": "bun test test/admin-ui-regressions.test.ts test/announcement-prompt-regressions.test.ts test/password-reset.test.ts test/oss-settings.test.ts", "typecheck": "tsc --noEmit", "test:canvas": "bun test test/canvas-media-performance.test.ts test/canvas-node-title-interaction.test.ts test/canvas-spatial-index.test.ts", "test": "bun test test/api-request.test.ts test/video-api-contracts.test.ts test/image-api-contracts.test.ts test/channel-model-catalog.test.ts test/model-pricing.test.ts test/model-protocols.test.ts test/model-capabilities.test.ts test/agent-prompt-cache.test.ts test/canvas-agent-context.test.ts test/canvas-batch-connection.test.ts test/canvas-character-reference.test.ts test/canvas-document.test.ts test/canvas-drawing-engine.test.ts test/canvas-emotion-edit-plan.test.ts test/canvas-extension-nodes.test.ts test/canvas-folder.test.ts test/canvas-generation-layout.test.ts test/canvas-generation-submission.test.ts test/canvas-image-batch-retry.test.ts test/canvas-keyboard.test.ts test/canvas-node-generation-mentions.test.ts test/canvas-node-search.test.ts test/canvas-leafer-viewport.test.ts test/canvas-media-download.test.ts test/canvas-local-runtime.test.ts test/canvas-model-policy.test.ts test/canvas-resource-mention-editor.test.ts test/canvas-resource-references.test.ts test/canvas-storyboard-assets.test.ts test/canvas-storyboard-references.test.ts test/canvas-node-config-reset.test.ts test/canvas-node-registry.test.ts test/canvas-video-frame.test.ts test/canvas-video-regeneration.test.ts test/canvas-video-timeline-segments.test.ts test/create-canvas-handoff.test.ts test/create-library-button.test.ts test/creation-references.test.ts test/director-transform-semantics.test.ts test/director-bone-precedence.test.ts test/director-gesture-transaction.test.ts test/director-transaction-lifecycle.test.ts test/director-session-authority.test.ts test/director-placement.test.ts test/director-resources.test.ts test/director-recovery.test.ts test/director-node-preview.test.ts test/generation-asset-repository.node.test.ts test/generation-storage-consistency.test.ts test/generation-task-durability.node.test.ts test/generation-task-local.test.ts test/generation-task-materializer.test.ts test/task-media-fallback.test.ts test/user-scoped-generation-persistence.test.ts test/local-channel-permission.test.ts test/local-channel-runtime-projection.node.test.mjs test/local-channel-task-center.node.test.mjs test/local-channel-ui.node.test.mjs test/local-cli-settings.test.ts test/local-dreamina-cli.test.ts test/local-dreamina-generation.test.ts test/local-dreamina-model-catalog.test.ts test/local-runtime-bootstrap.test.ts test/local-runtime-connection.test.ts test/local-runtime.test.ts test/client-id.test.ts test/grok-image-prompt-limit.test.ts test/image-resolution-tiers.test.ts test/gemini-image.test.ts test/libtv-import.test.ts test/timeline-to-ffmpeg.test.ts test/canvas-video-segment-args.test.ts test/tapnow-import.test.ts test/prompt-optimizer-drawer.test.ts test/director-save-coordinator.test.ts test/director-save-wiring.test.ts test/director-diagnostics.test.ts test/director-repro-runtime.test.ts test/director-diagnostics-recorder.test.ts test/director-keyframe-editing.test.ts test/director-shortcuts.test.ts test/director-keyframe-delete-wiring.test.ts test/director-templates.test.ts test/director-modes.test.ts test/director-template-mode-wiring.test.ts test/director-view-modes.test.ts && bun test test/local-dreamina-cross-runtime.test.ts", "test:director:e2e": "bun scripts/director-p0-chrome-e2e.mjs", "start": "vite preview --host 0.0.0.0 --port 3000", "format": "prettier --write .", "format:check": "prettier --check ." }, "dependencies": { "@ant-design/icons": "^6.3.2", "@ant-design/x": "^2.9.0", "@codemirror/lang-json": "^6.0.2", "@excalidraw/excalidraw": "0.18.1", "@ffmpeg/core": "0.12.10", "@ffmpeg/ffmpeg": "^0.12.15", "@ffmpeg/util": "^0.12.2", "@lobehub/icons": "5.16.0", "@mediapipe/tasks-vision": "^1.0.1", "@react-three/drei": "^10.7.7", "@react-three/fiber": "^9.6.1", "@streamdown/code": "^1.1.1", "@tanstack/react-query": "^5.101.2", "@tanstack/react-virtual": "^3.14.8", "@tiptap/core": "3.28.0", "@tiptap/extension-character-count": "^3.28.0", "@tiptap/extension-color": "^3.28.0", "@tiptap/extension-highlight": "^3.28.0", "@tiptap/extension-placeholder": "^3.28.0", "@tiptap/extension-text-align": "^3.28.0", "@tiptap/extension-text-style": "^3.28.0", "@tiptap/react": "^3.28.0", "@tiptap/starter-kit": "^3.28.0", "@uiw/react-codemirror": "^4.25.11", "@vidstack/react": "1.15.6", "antd": "^6.5.1", "axios": "^1.18.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "copy-to-clipboard": "^4.0.2", "dayjs": "^1.11.21", "fflate": "^0.8.3", "file-saver": "^2.0.5", "idb": "8.0.3", "json-canonicalize": "2.0.0", "leafer-ui": "^2.2.7", "localforage": "^1.10.0", "lucide-react": "^1.25.0", "mammoth": "^1.12.0", "motion": "^12.42.2", "nanoid": "^6.0.0", "react": "19.2.7", "react-dom": "19.2.7", "react-markdown": "^10.1.0", "react-router": "^8.2.0", "recharts": "^3.9.2", "remark-gfm": "^4.0.1", "shadcn": "^4.13.1", "streamdown": "^2.5.0", "tailwind-merge": "^3.6.0", "tailwindcss": "^4.3.3", "three": "^0.185.1", "three-stdlib": "^2.36.1", "tldraw": "5.2.5", "tw-animate-css": "^1.4.0", "zustand": "^5.0.14" }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", "@types/file-saver": "^2.0.7", "@types/node": "^20.19.43", "@types/react": "19.2.17", "@types/react-dom": "19.2.3", "@types/three": "0.185.4", "@vitejs/plugin-react": "^6.0.3", "prettier": "^3.9.5", "typescript": "^7.0.2", "vite": "^8.1.5" }, "overrides": { "@babel/core": "7.29.7", "form-data": "4.0.6", "hono": "4.12.30", "js-yaml": "4.3.0", "prismjs": "1.30.0", "qs": "6.15.3" } }