{ "name": "open-pencil-app", "private": true, "version": "0.8.0", "license": "MIT", "type": "module", "workspaces": [ "packages/*" ], "scripts": { "dev": "vite", "build": "bun run lint && vite build", "preview": "vite preview", "tauri": "tauri", "lint": "oxlint -c oxlint.json --type-aware --type-check src/ packages/core/src/ packages/cli/src/ packages/mcp/src/ packages/acp/src/", "format": "oxfmt --write src/", "check": "bun run lint", "test": "playwright test --project=openpencil", "test:update": "playwright test --project=openpencil --update-snapshots", "test:figma": "playwright test --project=figma", "figma:debug": "open -a Figma --args --remote-debugging-port=9222", "test:unit": "bun test ./tests/engine", "test:coverage": "bun test --coverage ./tests/engine", "test:dupes": "jscpd packages/core/src packages/cli/src src --min-lines 5 --min-tokens 50 --format typescript", "open-pencil": "bun packages/cli/src/index.ts", "docs:dev": "bun --filter @open-pencil/docs dev", "docs:build": "bun --filter @open-pencil/docs build", "docs:preview": "bun --filter @open-pencil/docs preview", "visual-compare": "bun scripts/visual-compare.ts" }, "dependencies": { "@ai-sdk/anthropic": "^3.0.58", "@ai-sdk/google": "^3.0.43", "@ai-sdk/openai": "^3.0.37", "@ai-sdk/valibot": "^2.0.17", "@ai-sdk/vue": "^3.0.105", "@open-pencil/cli": "workspace:*", "@open-pencil/core": "workspace:*", "@openrouter/ai-sdk-provider": "^2.2.3", "@tailwindcss/vite": "^4.2.1", "@tanstack/vue-table": "^8.21.3", "@tauri-apps/api": "^2", "@tauri-apps/plugin-dialog": "^2.6.0", "@tauri-apps/plugin-fs": "^2.4.5", "@tauri-apps/plugin-opener": "^2", "@unhead/vue": "^2.1.10", "@vueuse/core": "^14.2.1", "ai": "^6.0.105", "canvaskit-wasm": "^0.40.0", "culori": "^4.0.2", "dedent": "^1.7.1", "fflate": "^0.8.2", "fzstd": "^0.1.1", "lib0": "^0.2.117", "motion-v": "^2.0.0", "prismjs": "^1.30.0", "reka-ui": "^2.9.0", "tailwind-merge": "^3.5.0", "tailwind-variants": "^3.2.2", "tailwindcss": "^4.2.1", "trystero": "^0.22.0", "valibot": "^1.2.0", "vue": "^3.5.29", "vue-router": "^5.0.3", "vue-stream-markdown": "^0.6.0", "y-indexeddb": "^9.0.12", "y-protocols": "^1.0.7", "yjs": "^13.6.29", "yoga-layout": "npm:@open-pencil/yoga-layout@3.3.0-grid.2" }, "devDependencies": { "@agentclientprotocol/sdk": "^0.14.1", "@hono/node-server": "^1.19.11", "@iconify-json/lucide": "^1.2.94", "@modelcontextprotocol/sdk": "^1.27.1", "@playwright/test": "^1.58.2", "@tauri-apps/cli": "^2", "@types/culori": "^4.0.1", "@types/node": "^25.3.2", "@types/prismjs": "^1.26.6", "@types/ws": "^8.18.1", "@typescript/native-preview": "^7.0.0-dev.20260228.1", "@vitejs/plugin-vue": "^6.0.4", "esbuild": "^0.27.3", "hono": "^4.12.5", "jscpd": "^4.0.8", "mitata": "^1.0.34", "oxfmt": "^0.35.0", "oxlint": "^1.50.0", "oxlint-tsgolint": "^0.16.0", "tw-animate-css": "^1.4.0", "typescript": "~5.8.3", "unplugin-icons": "^23.0.1", "unplugin-vue-components": "^31.0.0", "vite": "^7.0.4", "vite-plugin-pwa": "^1.2.0", "workbox-window": "^7.4.0", "ws": "^8.19.0" } }