feat(desktop): embed BoosAPI Desktop client as a subproject

Vendor the rebranded BoosAPI Desktop client (Tauri + Vue) into metapi as
a monorepo subdirectory under desktop/. Source only — node_modules,
dist, Cargo target and the upstream .git history are excluded.

desktop/ keeps its own independent Cargo workspace (desktop/src-tauri
with crates/*); it is not part of the backend boosapi crate, so a
`cargo check` at the metapi root still compiles only the backend. Build
the desktop app from desktop/src-tauri per desktop/README.md.

Note: app icons are still placeholder assets pending the final BoosAPI
logo. The updater signing keys live outside the repo and are not
included.
This commit is contained in:
boos
2026-06-22 11:32:57 +08:00
parent d9c78ecc73
commit e0a5f57793
2305 changed files with 449355 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
{
"name": "boosapi",
"private": true,
"version": "0.0.93",
"license": "AGPL-3.0-only",
"packageManager": "pnpm@10.32.1",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"tauri": "node scripts/tauri-cli.mjs",
"typecheck": "tsc --noEmit",
"test": "vitest",
"test:run": "vitest run",
"bump": "node scripts/bump-version.mjs"
},
"dependencies": {
"@ant-design/icons": "^6.1.0",
"@ant-design/x": "^2.4.0",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@lobehub/icons": "^5.0.1",
"@tanstack/react-virtual": "^3.13.23",
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-autostart": "^2.5.1",
"@tauri-apps/plugin-clipboard-manager": "^2.3.2",
"@tauri-apps/plugin-deep-link": "^2.4.8",
"@tauri-apps/plugin-dialog": "^2.6.0",
"@tauri-apps/plugin-fs": "^2.4.5",
"@tauri-apps/plugin-global-shortcut": "^2.3.1",
"@tauri-apps/plugin-opener": "^2",
"@tauri-apps/plugin-process": "^2.3.1",
"@tauri-apps/plugin-shell": "^2.3.5",
"@tauri-apps/plugin-updater": "^2.10.0",
"@terrastruct/d2": "^0.1.33",
"antd": "^6.4.3",
"antd-style": "^4.1.0",
"clsx": "^2.1.1",
"emoji-picker-element": "^1.29.1",
"html2canvas": "^1.4.1",
"i18next": "^25.9.0",
"i18next-browser-languagedetector": "^8.2.1",
"katex": "^0.16.40",
"lucide-react": "^0.577.0",
"markstream-react": "link:./libs/markstream-vue/packages/markstream-react",
"overlayscrollbars": "^2.14.0",
"overlayscrollbars-react": "^0.5.6",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-i18next": "^16.5.8",
"stream-markdown": "^0.0.15",
"stream-markdown-parser": "link:./libs/markstream-vue/packages/markdown-parser",
"stream-monaco": "link:./libs/stream-monaco",
"zustand": "^5.0.12"
},
"devDependencies": {
"@tailwindcss/vite": "^4.2.2",
"@tauri-apps/cli": "^2",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/node": "^25.5.0",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^4.6.0",
"autoprefixer": "^10.4.27",
"jsdom": "^29.0.1",
"tailwindcss": "^4.2.2",
"typescript": "~5.8.3",
"vite": "^7.0.4",
"vite-plugin-monaco-editor": "^1.1.0",
"vitest": "^4.1.0"
},
"pnpm": {
"overrides": {
"picomatch@>=4.0.0 <4.0.4": ">=4.0.4"
}
}
}