216 lines
17 KiB
JSON
216 lines
17 KiB
JSON
{
|
||
"name": "ycode",
|
||
"version": "0.0.8",
|
||
"private": true,
|
||
"description": "YCode - 个人 AI Agent 桌面应用(Electron)",
|
||
"author": "YCode",
|
||
"main": "./out/main/index.mjs",
|
||
"scripts": {
|
||
"test": "npm run test:core",
|
||
"test:core": "npm run typecheck && npm run test:chat && npm run test:sessions && npm run test:persistence && npm run test:conversation",
|
||
"test:alignment": "node scripts/run-alignment-regression.mjs",
|
||
"test:alignment:dom": "node scripts/run-alignment-regression.mjs --require-dom",
|
||
"test:image-lifecycle": "node scripts/test-image-lifecycle.mjs",
|
||
"test:permissions:loopback": "node scripts/build-full-access-loopback-kernel.mjs && node scripts/test-full-access-loopback.mjs --kernel",
|
||
"test:reporting": "node --test scripts/regression-reporting.test.mjs",
|
||
"test:capability-slash:ui": "node scripts/test-capability-slash-ui.mjs",
|
||
"test:recommended-skills": "esbuild scripts/recommended-skills-backend-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/recommended-skills-backend-regression.mjs --log-level=warning && node .tmp/recommended-skills-backend-regression.mjs",
|
||
"test:recommended-skills:ui": "node scripts/test-recommended-skills-ui.mjs",
|
||
"test:recommended-skills:dom": "node scripts/test-recommended-skills-dom.mjs",
|
||
"test:recommended-skills:app": "node scripts/verify-recommended-skills-app.cjs",
|
||
"test:recommended-skills:package": "node scripts/test-recommended-archify-package.mjs",
|
||
"test:composer-capabilities": "node scripts/run-composer-capabilities-regression.mjs",
|
||
"test:claude-append": "node scripts/build-claude-append-probe.mjs && node .tmp/claude-append-protocol-probe.mjs",
|
||
"test:claude-append:app": "node scripts/verify-claude-append-app.cjs",
|
||
"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",
|
||
"check:tokens": "node scripts/check-design-tokens.mjs",
|
||
"test:settings-performance": "node scripts/verify-settings-performance.cjs",
|
||
"models:sync-metadata": "node scripts/sync-model-metadata.mjs",
|
||
"test:model-metadata": "esbuild scripts/model-metadata-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/model-metadata-regression.mjs --log-level=warning && node .tmp/model-metadata-regression.mjs",
|
||
"test:claude-kernel": "esbuild scripts/claude-endpoint-regression.ts scripts/claude-tool-input-regression.ts --bundle --platform=node --format=esm --out-extension:.js=.mjs --outdir=.tmp/claude-tests --log-level=warning && node .tmp/claude-tests/claude-endpoint-regression.mjs && node .tmp/claude-tests/claude-tool-input-regression.mjs && node scripts/build-claude-kernel-regression.mjs && node .tmp/claude-kernel-integration.mjs && node scripts/claude-kernel-smoke.mjs",
|
||
"test:browser-agent": "esbuild scripts/browser-agent-host-regression.ts --bundle --platform=node --format=cjs --external:electron --outfile=.tmp/browser-agent-host-regression.cjs --log-level=warning && electron .tmp/browser-agent-host-regression.cjs",
|
||
"test:chat": "esbuild scripts/message-order-regression.ts scripts/chat-store-regression.ts scripts/chat-stream-committer-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",
|
||
"test:references": "esbuild scripts/reference-content-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --outfile=.tmp/reference-content-regression.cjs --log-level=error && node .tmp/reference-content-regression.cjs",
|
||
"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",
|
||
"icon:build": "node scripts/gen-icon.mjs",
|
||
"dist": "npm run build && electron-builder --win dir",
|
||
"dist:installer": "npm run build && electron-builder --win nsis",
|
||
"release": "node scripts/updates/release.mjs",
|
||
"test:release": "node scripts/updates/release-selftest.mjs",
|
||
"test:updates": "esbuild scripts/update-backend-regression.ts scripts/update-maintenance-regression.ts --bundle --platform=node --format=esm --out-extension:.js=.mjs --outdir=.tmp/update-tests --log-level=warning && node .tmp/update-tests/update-backend-regression.mjs && node .tmp/update-tests/update-maintenance-regression.mjs && node scripts/updates/selftest.mjs && node scripts/updates/contract-selftest.mjs && node scripts/updates/nsis-safety-regression.mjs",
|
||
"test:updates:ui": "node scripts/verify-updates-ui.cjs",
|
||
"updates:key": "node scripts/updates/init-key.mjs",
|
||
"updates:prepare": "node scripts/updates/prepare-release.mjs",
|
||
"updates:deploy": "node scripts/updates/deploy.mjs",
|
||
"verify:ui": "node scripts/verify-ui.mjs",
|
||
"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/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/streaming-footer-regression.cjs && node .tmp/conversation-tests/completed-fold-regression.cjs",
|
||
"test:workbench-escape": "esbuild scripts/workbench-escape-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/workbench-escape-regression.mjs --log-level=warning && node .tmp/workbench-escape-regression.mjs",
|
||
"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: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",
|
||
"test:memory": "node scripts/verify-memory-settings.cjs",
|
||
"test:remediation": "esbuild scripts/remediation-pure-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/remediation-pure-regression.mjs --log-level=warning && node .tmp/remediation-pure-regression.mjs",
|
||
"test:archived-tasks": "node scripts/verify-archived-tasks.cjs",
|
||
"test:app-discover": "node scripts/verify-app-discover.cjs",
|
||
"test:automations": "esbuild scripts/automation-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/automation-regression.mjs --log-level=warning && node .tmp/automation-regression.mjs",
|
||
"test:library": "esbuild scripts/library-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/library-regression.mjs --log-level=warning && node .tmp/library-regression.mjs",
|
||
"test:library-ui": "esbuild scripts/library-ui-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --loader:.svg=dataurl --outfile=.tmp/library-ui-regression.cjs --log-level=warning && node .tmp/library-ui-regression.cjs",
|
||
"test:module-ui": "node scripts/verify-module-ui-parity.cjs",
|
||
"test:project-tasks": "esbuild scripts/project-task-regression.ts --bundle --platform=node --format=esm --outfile=.tmp/project-task-regression.mjs --log-level=warning && node .tmp/project-task-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": {
|
||
"@anthropic-ai/claude-agent-sdk": "^0.3.304",
|
||
"@anthropic-ai/sdk": "^0.135.0",
|
||
"@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",
|
||
"rrule": "^2.8.1",
|
||
"slate": "0.143.0",
|
||
"slate-dom": "0.142.0",
|
||
"slate-history": "0.140.0",
|
||
"slate-react": "0.142.0",
|
||
"svg-pan-zoom": "3.6.2",
|
||
"yaml": "^2.9.1",
|
||
"zod": "^4.6.7",
|
||
"zustand": "^5.0.15"
|
||
},
|
||
"devDependencies": {
|
||
"@babel/generator": "^8.0.6",
|
||
"@babel/parser": "^8.0.7",
|
||
"@resvg/resvg-js": "^2.6.2",
|
||
"@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-builder": "^26.15.3",
|
||
"electron-vite": "^5.0.0",
|
||
"postcss": "8.5.30",
|
||
"typescript": "^7.0.2",
|
||
"vite": "^8.3.4"
|
||
},
|
||
"build": {
|
||
"appId": "com.ycode.app",
|
||
"productName": "YCode",
|
||
"directories": {
|
||
"output": "release",
|
||
"buildResources": "build"
|
||
},
|
||
"files": [
|
||
"out/**/*",
|
||
"package.json",
|
||
"!node_modules/@anthropic-ai/claude-agent-sdk-win32-x64/**"
|
||
],
|
||
"npmRebuild": false,
|
||
"asarUnpack": [
|
||
"node_modules/@anthropic-ai/claude-agent-sdk/**"
|
||
],
|
||
"extraResources": [
|
||
{
|
||
"from": "resources/updates/public-key.pem",
|
||
"to": "updates/public-key.pem"
|
||
},
|
||
{
|
||
"from": "resources/model-metadata",
|
||
"to": "model-metadata",
|
||
"filter": [
|
||
"models.dev.json",
|
||
"manifest.json",
|
||
"LICENSE"
|
||
]
|
||
},
|
||
{
|
||
"from": "node_modules/@anthropic-ai/claude-agent-sdk-win32-x64",
|
||
"to": "claude",
|
||
"filter": [
|
||
"claude.exe",
|
||
"LICENSE.md",
|
||
"README.md",
|
||
"package.json"
|
||
]
|
||
},
|
||
{
|
||
"from": "resources/icon.png",
|
||
"to": "icon.png"
|
||
},
|
||
{
|
||
"from": "resources/tray.png",
|
||
"to": "tray.png"
|
||
}
|
||
],
|
||
"win": {
|
||
"icon": "build/icon.ico",
|
||
"artifactName": "YCode-${version}-Setup-${arch}.${ext}",
|
||
"target": [
|
||
"dir"
|
||
]
|
||
},
|
||
"nsis": {
|
||
"include": "build/installer.nsh",
|
||
"oneClick": false,
|
||
"perMachine": false,
|
||
"allowToChangeInstallationDirectory": true,
|
||
"deleteAppDataOnUninstall": false,
|
||
"createDesktopShortcut": true,
|
||
"createStartMenuShortcut": true,
|
||
"shortcutName": "YCode"
|
||
}
|
||
}
|
||
}
|