{ "name": "ncurator", "version": "1.0.11", "description": "Local-first AI workspace for documents, research, and task execution", "main": "./out/main/index.js", "author": "NCurator", "license": "AGPL-3.0-only", "homepage": "https://www.guanzhangai.cn", "scripts": { "format": "prettier --write .", "lint": "eslint --cache .", "knip": "knip", "doc:ai-tool-prompt-audit": "pnpm dlx tsx scripts/doc/generate-ai-tool-prompt-audit.mts", "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", "typecheck": "tsc --noEmit -p tsconfig.node.json --composite false && tsc --noEmit -p tsconfig.web.json --composite false", "build:sidecar": "node scripts/build/sidecar/build.mjs", "test:ai:backend": "node scripts/test/workflow.mjs --domain ai --type backend", "test:ai:non-live": "node scripts/test/workflow.mjs --domain ai --type backend --exclude-group live", "test:ai:tool": "node scripts/test/workflow.mjs --domain ai --suite tool --type backend", "test:ai:human:mock-llm": "node scripts/test/workflow.mjs --domain ai --suite human --group mock-llm --type backend", "test:ai:human:live": "node scripts/test/workflow.mjs --domain ai --suite human --group live --type backend", "test:knowledge:backend": "node scripts/test/workflow.mjs --domain knowledge --type backend", "test:unit": "node scripts/test/workflow.mjs --domain unit --type backend", "test:unit:ai": "node scripts/test/workflow.mjs --domain unit --suite ai --type backend", "test:terminal": "node scripts/build/native/node-pty.mjs ensure node && vitest run --config vitest.backend.config.mts tests/case/unit/ai/terminal-session-manager.test.ts tests/case/unit/ai/terminal-protocol.test.ts tests/case/unit/ai/terminal-platform-adapter.test.ts tests/case/unit/ai/terminal-command-policy.test.ts", "test:e2e:source": "node scripts/test/workflow.mjs --type e2e --target source", "test:e2e:package": "node scripts/test/workflow.mjs --type e2e --target package", "test:settings:e2e": "node scripts/test/workflow.mjs --domain settings --type e2e --target source", "test:update": "pnpm run test:update:backend && pnpm run test:update:e2e", "test:update:backend": "node scripts/test/workflow.mjs --domain unit --suite release --type backend", "test:update:e2e": "node scripts/test/workflow.mjs --domain workbench --type e2e --case sidebar-app-update --case database-version-update-required --target source", "test:update:real:win": "node scripts/test/update-real-windows.mjs", "release:start": "node scripts/release/prepare.mjs", "release:abort": "node scripts/release/abort.mjs", "release:win": "node scripts/release/windows.mjs", "release:doctor": "node scripts/release/doctor.mjs", "release:signing:setup": "node scripts/release/setup-macos-signing.mjs", "release:mac": "node scripts/release/macos.mjs", "release:storage:finalize": "node scripts/release/r2/finalize.mjs", "test:workbench:e2e": "node scripts/test/workflow.mjs --domain workbench --type e2e --target source", "test:workbench:provider-matrix": "node scripts/test/workflow.mjs --domain workbench --type e2e --target source --case live-preset-provider-smoke", "test:workbench:wps-office": "node scripts/test/workflow.mjs --domain workbench --type e2e --target source --case wps-office-reload-on-write-and-revert", "test:showcase": "node scripts/test/showcase.mjs", "start": "electron-vite preview", "dev": "node scripts/build/native/better-sqlite3.mjs ensure electron && node scripts/build/native/node-pty.mjs ensure electron && node scripts/build/sidecar/ensure.mjs && electron-vite dev", "dev:no-sidecar": "node scripts/build/native/better-sqlite3.mjs ensure electron && node scripts/build/native/node-pty.mjs ensure electron && electron-vite dev", "build": "pnpm run i18n:check && node scripts/build/native/better-sqlite3.mjs ensure node && node scripts/build/native/node-pty.mjs ensure node && tsc --noEmit -p tsconfig.node.json --composite false && tsc --noEmit -p tsconfig.web.json --composite false && node scripts/build/sidecar/build.mjs && node scripts/build/vditor-assets.mjs && node scripts/build/native/better-sqlite3.mjs export-electron-resource && electron-vite build && node scripts/build/runtime/verify-bundles.mjs && node scripts/build/native/node-pty.mjs ensure electron && node scripts/build/package/prepare-stage.mjs", "postinstall": "node scripts/postinstall.mjs", "package:audit:stage": "node scripts/build/package/audit-stage.mjs", "package:audit": "node scripts/build/package/audit-app.mjs dist release-stage/runtime-trace-report.json", "package:audit:summary": "node scripts/build/package/audit-summary.mjs dist/package-audit.json", "build:unpack": "pnpm run build && electron-builder --dir && pnpm run package:audit", "build:win": "node scripts/build/native/electron-builder-windows.mjs && pnpm run build && node scripts/build/package/distributions.mjs win", "build:mac:arm64": "pnpm run build && node scripts/build/package/distributions.mjs mac", "build:mac:release:arm64": "pnpm run build && node scripts/build/package/distributions.mjs mac --signed", "native:node": "node scripts/build/native/better-sqlite3.mjs ensure node", "native:electron": "node scripts/build/native/better-sqlite3.mjs ensure electron", "native:pty:node": "node scripts/build/native/node-pty.mjs ensure node", "native:pty:electron": "node scripts/build/native/node-pty.mjs ensure electron", "native:status": "node scripts/build/native/better-sqlite3.mjs status && node scripts/build/native/node-pty.mjs status", "native:prepare": "node scripts/build/native/better-sqlite3.mjs prepare && node scripts/build/native/node-pty.mjs prepare", "native:clean": "node scripts/build/native/better-sqlite3.mjs clean && node scripts/build/native/node-pty.mjs clean", "i18n:check": "node scripts/build/validate-i18n.mjs" }, "dependencies": { "@ant-design/icons": "^6.1.0", "@browserbasehq/stagehand": "^3.5.0", "@electron-toolkit/preload": "^3.0.2", "@electron-toolkit/utils": "^4.0.0", "@huggingface/transformers": "^3.8.1", "@js-preview/docx": "^1.6.4", "@lancedb/lancedb": "0.22.3", "@langchain/community": "^1.1.1", "@langchain/core": "^1.1.44", "@langchain/deepseek": "^1.0.25", "@langchain/langgraph": "^1.1.5", "@langchain/openai": "^1.4.5", "@langchain/textsplitters": "^1.0.1", "@napi-rs/canvas": "0.1.80", "@node-rs/jieba": "^2.0.1", "@react-pdf/renderer": "^4.1.0", "@resvg/resvg-js": "2.6.2", "@univerjs/core": "0.25.1", "@univerjs/engine-formula": "0.25.1", "@univerjs/preset-sheets-core": "0.25.1", "@univerjs/sheets": "0.25.1", "@univerjs/sheets-formula": "0.25.1", "@xmldom/xmldom": "^0.8.11", "antd": "5.22.1", "apache-arrow": "^17.0.0", "better-sqlite3": "^12.11.1", "cheerio": "^1.2.0", "dayjs": "^1.11.19", "diff": "^9.0.0", "docx": "^9.5.1", "electron": "^39.2.7", "electron-updater": "^6.3.9", "exceljs": "^4.4.0", "i18next": "^26.5.3", "jsonrepair": "^3.15.0", "jszip": "^3.10.1", "katex": "^0.16.28", "mammoth": "^1.11.0", "mathjax-full": "^3.2.2", "mdast-util-from-markdown": "^2.0.2", "mdast-util-gfm-footnote": "^2.1.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "micromark-extension-gfm-footnote": "^2.1.0", "micromark-extension-gfm-strikethrough": "^2.1.0", "micromark-extension-gfm-table": "^2.1.1", "micromark-extension-gfm-task-list-item": "^2.1.0", "micromark-util-combine-extensions": "^2.0.1", "monaco-editor": "0.57.0", "node-pty": "1.2.0-beta.15", "pdf-parse": "^1.1.1", "pdfjs-dist": "5.4.296", "playwright": "^1.58.2", "pptx-kit": "0.11.1", "pptx-kit-preview": "0.6.2", "react-doc-viewer": "^0.1.15", "react-i18next": "^17.1.0", "react-icons": "^5.5.0", "react-markdown": "^10.1.0", "react-pdf": "^10.3.0", "react-router-dom": "^7.12.0", "react-syntax-highlighter": "^16.1.0", "rehype-katex": "^7.0.1", "remark-math": "^6.0.0", "rxjs": "7.8.2", "uuid": "^13.0.0", "vditor": "^3.11.3", "word-extractor": "^1.0.4", "yaml": "2.8.2", "zod": "^4.3.6" }, "devDependencies": { "@electron-toolkit/eslint-config-prettier": "^3.0.0", "@electron-toolkit/eslint-config-ts": "^3.1.0", "@electron-toolkit/tsconfig": "^2.0.0", "@electron/asar": "3.4.1", "@electron/rebuild": "3.7.0", "@tailwindcss/vite": "^4.1.18", "@types/better-sqlite3": "^7.6.13", "@types/node": "^22.19.1", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "@vercel/nft": "1.10.2", "@vitejs/plugin-react": "^5.1.1", "electron-builder": "^26.0.12", "electron-vite": "^5.0.0", "eslint": "^9.39.1", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "javascript-obfuscator": "5.5.0", "jsdom": "^26.1.0", "knip": "^6.33.0", "less": "^4.5.1", "prettier": "^3.7.4", "react": "^19.2.1", "react-dom": "^19.2.1", "semver": "^7.7.3", "tailwindcss": "^4.1.18", "typescript": "^5.9.3", "vite": "^7.2.6", "vitest": "^4.0.18" }, "packageManager": "pnpm@9.12.2+sha512.22721b3a11f81661ae1ec68ce1a7b879425a1ca5b991c975b074ac220b187ce56c708fe5db69f4c962c989452eee76c82877f4ee80f474cebd61ee13461b6228", "pnpm": { "patchedDependencies": { "pptx-kit-preview@0.6.2": "patches/pptx-kit-preview@0.6.2.patch", "@js-preview/docx@1.6.4": "patches/@js-preview__docx@1.6.4.patch", "monaco-editor@0.57.0": "patches/monaco-editor@0.57.0.patch" } } }