{ "name": "ycode", "version": "0.1.0", "private": true, "description": "YCode - 个人 AI Agent 桌面应用(Electron)", "author": "YCode", "main": "./out/main/index.mjs", "scripts": { "dev": "electron-vite dev", "dev:renderer": "electron-vite dev --rendererOnly", "build": "npm run typecheck && electron-vite build", "start": "electron-vite preview", "typecheck": "tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.web.json", "smoke": "esbuild scripts/smoke.ts --bundle --platform=node --format=esm --outfile=.tmp/smoke.mjs --log-level=warning && node .tmp/smoke.mjs", "test:omp": "esbuild scripts/omp-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/omp-regression.mjs --log-level=warning && node .tmp/omp-regression.mjs", "test:omp-session": "esbuild scripts/omp-session-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/omp-session-regression.mjs --log-level=warning && node .tmp/omp-session-regression.mjs", "test:chat": "esbuild scripts/message-order-regression.ts scripts/chat-store-regression.ts scripts/chat-stream-committer-regression.ts scripts/tool-output-regression.ts --bundle --platform=node --format=esm --out-extension:.js=.mjs --outdir=.tmp/chat-tests --log-level=warning && node .tmp/chat-tests/message-order-regression.mjs && node .tmp/chat-tests/chat-store-regression.mjs && node .tmp/chat-tests/chat-stream-committer-regression.mjs && node .tmp/chat-tests/tool-output-regression.mjs", "test:expert-usage": "esbuild scripts/expert-usage-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/expert-usage-regression.mjs --log-level=warning && node .tmp/expert-usage-regression.mjs", "test:markdown": "esbuild scripts/markdown-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --outfile=.tmp/markdown-regression.cjs --log-level=warning && node .tmp/markdown-regression.cjs", "test:recovered": "esbuild scripts/recovered-parser-regression.ts scripts/source-projection-regression.ts scripts/code-block-regression.tsx scripts/incremental-markdown-regression.ts scripts/math-renderer-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --out-extension:.js=.cjs --outdir=.tmp/recovered-tests --log-level=warning && node .tmp/recovered-tests/recovered-parser-regression.cjs && node .tmp/recovered-tests/source-projection-regression.cjs && node .tmp/recovered-tests/code-block-regression.cjs && node .tmp/recovered-tests/incremental-markdown-regression.cjs && node .tmp/recovered-tests/math-renderer-regression.cjs", "recover:chat-reference": "node scripts/rea/recover-chat-reference.mjs", "test:persistence": "esbuild scripts/chat-persistence-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/chat-persistence-regression.mjs --log-level=warning && node .tmp/chat-persistence-regression.mjs", "test:sessions": "esbuild scripts/session-store-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/session-store-regression.mjs --log-level=warning && node .tmp/session-store-regression.mjs", "shot": "node scripts/shot.mjs", "verify:ui": "node scripts/verify-ui.mjs", "wb:capture": "node scripts/wb-capture.mjs 9223 .tmp/wb-capture", "test:media": "esbuild scripts/mermaid-regression.ts --bundle --platform=node --format=esm --packages=external --jsx=automatic --loader:.css=empty --outfile=.tmp/media-tests/mermaid-regression.mjs --log-level=warning && node .tmp/media-tests/mermaid-regression.mjs && esbuild scripts/image-renderer-regression.tsx scripts/path-renderer-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --out-extension:.js=.cjs --outdir=.tmp/media-tests --log-level=warning && node .tmp/media-tests/image-renderer-regression.cjs && node .tmp/media-tests/path-renderer-regression.cjs", "test:resources": "esbuild scripts/resource-bridge-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/resource-bridge-regression.mjs --log-level=warning && node .tmp/resource-bridge-regression.mjs", "recover:typography": "node scripts/rea/recover-typography-reference.mjs", "test:font-size": "esbuild scripts/font-size-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/font-size-regression.mjs --log-level=warning && node .tmp/font-size-regression.mjs", "test:conversation": "esbuild scripts/conversation-renderer-regression.tsx scripts/composer-regression.tsx scripts/conversation-runtime-regression.ts scripts/completed-fold-regression.tsx scripts/streaming-footer-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=text --out-extension:.js=.cjs --outdir=.tmp/conversation-tests --log-level=error && node .tmp/conversation-tests/conversation-renderer-regression.cjs && node .tmp/conversation-tests/composer-regression.cjs && node .tmp/conversation-tests/conversation-runtime-regression.cjs && node .tmp/conversation-tests/streaming-footer-regression.cjs && node .tmp/conversation-tests/completed-fold-regression.cjs", "test:assistant-footer": "esbuild scripts/assistant-message-footer-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --outfile=.tmp/assistant-message-footer-regression.cjs --log-level=error && node .tmp/assistant-message-footer-regression.cjs", "test:omp-protocol": "esbuild scripts/omp-protocol-probe.ts --bundle --platform=node --format=esm --outfile=.tmp/omp-protocol-probe.mjs --log-level=warning && node .tmp/omp-protocol-probe.mjs", "test:conversation-ipc": "esbuild scripts/conversation-ipc-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/conversation-ipc-regression.mjs --log-level=warning && node .tmp/conversation-ipc-regression.mjs", "test:personalization": "esbuild scripts/personalization-prompt-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/personalization-prompt-regression.mjs --log-level=warning && node .tmp/personalization-prompt-regression.mjs", "recover:artifact-reference": "node scripts/rea/recover-artifact-reference.mjs", "test:artifacts": "esbuild scripts/artifact-diff-regression.ts scripts/artifact-renderer-regression.tsx scripts/specialized-block-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --out-extension:.js=.cjs --outdir=.tmp/artifact-tests --log-level=warning && node .tmp/artifact-tests/artifact-diff-regression.cjs && node .tmp/artifact-tests/artifact-renderer-regression.cjs && node .tmp/artifact-tests/specialized-block-regression.cjs", "recover:conversation-labels": "node scripts/rea/recover-conversation-labels.mjs", "rea:css:prepare": "node scripts/rea/prepare-css-runtime.mjs", "rea:css:capture": "node scripts/rea/capture-css.mjs", "recover:css-reference": "node scripts/rea/export-css-reference.mjs", "test:rea-css": "node scripts/rea/css-capture-regression.mjs && node scripts/rea/css-runtime-contract-regression.mjs && node scripts/rea/visual-capture-regression.mjs && node scripts/rea/visual-probe-regression.mjs && node scripts/rea/visual-probe-budget-regression.mjs && node scripts/rea/media-assets-regression.mjs && node scripts/rea/selected-artifact-text-regression.mjs && node scripts/rea/css-mcp-regression.mjs && node scripts/rea/css-runtime-integrity.mjs", "test:rea-visual-live": "node scripts/rea/visual-probe-live-regression.mjs", "test:visual-pixels": "node scripts/rea/compare-visual-pixels.mjs --self-test", "test:font-platform": "node scripts/rea/capture-ycode-font-platform-fixture.mjs && node scripts/rea/verify-font-platform-parity.mjs .tmp/ycode-font-platform-selftest-reference.json .tmp/ycode-font-platform-selftest-result.json", "verify:previews": "node scripts/verify-conversation-previews.cjs", "test:pierre": "node scripts/rea/test-recovered-pierre-diff.mjs", "test:tool-virtualizer": "node scripts/rea/test-recovered-tool-virtualizer.mjs", "verify:pierre": "node scripts/verify-pierre-diff.cjs", "rea:visual:capture": "node scripts/rea/capture-css.mjs --visuals", "recover:conversation-styles": "node scripts/rea/recover-conversation-styles.mjs && node scripts/rea/recover-composer-styles.mjs && node scripts/rea/recover-question-styles.mjs && node scripts/rea/recover-task-styles.mjs && node scripts/rea/recover-tool-result-styles.mjs && node scripts/rea/recover-artifact-styles.mjs", "recover:streaming-footer": "node scripts/rea/recover-streaming-loading-tips.mjs && node scripts/rea/recover-streaming-footer-styles.mjs", "recover:conversation-icons": "node scripts/rea/recover-action-icons.mjs && node scripts/rea/recover-runtime-icons.mjs && node scripts/rea/recover-question-icons.mjs && node scripts/rea/recover-approval-icon.mjs", "recover:modern-conversation-labels": "node scripts/rea/recover-modern-conversation-labels.mjs", "test:modern-conversation-labels": "node scripts/rea/modern-conversation-labels-regression.mjs", "test:tool-approvals": "esbuild scripts/tool-approval-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=text --outfile=.tmp/tool-approval-regression.cjs --log-level=error && node .tmp/tool-approval-regression.cjs", "verify:conversation-states": "node scripts/verify-conversation-states.cjs", "recover:fold-summary": "node scripts/rea/recover-fold-summary.mjs", "test:fold-summary": "node scripts/rea/recovered-fold-summary-regression.mjs", "test:tool-styles": "node scripts/rea/tool-result-styles-regression.mjs", "test:workbuddy-import": "esbuild scripts/workbuddy-import-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/workbuddy-import-regression.mjs --log-level=warning && node .tmp/workbuddy-import-regression.mjs", "test:rea-conversation": "node scripts/rea/selected-conversation-regression.mjs" }, "dependencies": { "@floating-ui/react": "0.27.20", "@modelcontextprotocol/sdk": "^1.32.1", "@xterm/addon-fit": "0.11.0", "@xterm/xterm": "6.0.0", "dompurify": "3.4.17", "fflate": "^0.8.3", "get-east-asian-width": "^1.4.0", "html-react-parser": "^6.1.8", "katex": "0.16.47", "markdown-it": "^14.1.0", "markdown-it-texmath": "^1.0.0", "mermaid": "11.17.2", "node-pty": "1.1.0", "prismjs": "^1.30.0", "react": "^19.3.0", "react-dom": "^19.3.0", "svg-pan-zoom": "3.6.2", "yaml": "^2.9.1", "zustand": "^5.0.15" }, "devDependencies": { "@babel/generator": "^8.0.6", "@babel/parser": "^8.0.7", "@types/katex": "^0.16.8", "@types/markdown-it": "^14.2.0", "@types/node": "^26.6.5", "@types/prismjs": "^1.26.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@types/svg-pan-zoom": "^3.3.0", "@vitejs/plugin-react": "^6.1.2", "electron": "^37.10.3", "electron-vite": "^5.0.0", "postcss": "8.5.30", "typescript": "^7.0.2", "vite": "^8.3.4" } }