Files
Memoh/apps/desktop/package.json
T
Acbox 46365726b9 feat: introduce electron desktop app (#405)
* refactor: use Electron instead of Tauri

* feat: two level windows and self-managed vite project

* feat(desktop): macOS hidden-inset chrome and floating chat title

Apply hiddenInset titleBarStyle on darwin so the system titlebar is hidden
but native traffic lights remain. Reusable web sidebars inject a new
DesktopShellKey to reserve a 36px TopBar that holds the traffic-light
inset (drag region + right border) without colliding with the bot list,
and the sidebar stays pinned open in the Electron shell so window resize
doesn't fight the layout.

Overlay a centered "Title - BotName" header above the chat content with a
bottom shadow gradient that obscures scrolling messages, and reserve top
padding so the first message stays visible when content fits the viewport.
Route the sidebar + action by path (/settings/bots) so the chat router's
/settings/* interception forwards it to the settings window cleanly while
remaining a normal navigation in web.

* docs(desktop): add AGENTS.md for Electron shell

Document the multi-window architecture, web reuse strategy, type-stubbing
trick, macOS chrome, IPC surface, routing, icons, and packaging — captures
the non-obvious bits that bit us during the Tauri → Electron refactor so
future agents don't relearn them.
2026-04-25 12:16:23 +08:00

57 lines
2.0 KiB
JSON

{
"name": "@memohai/desktop",
"private": true,
"version": "0.7.1",
"type": "module",
"description": "Memoh Electron desktop application (self-managed bootstrap reusing @memohai/web components)",
"main": "./out/main/index.js",
"scripts": {
"dev": "electron-vite dev",
"start": "electron-vite preview",
"build": "electron-vite build && electron-builder",
"build:dir": "electron-vite build && electron-builder --dir",
"build:unpack": "electron-vite build && electron-builder --dir",
"build:mac": "electron-vite build && electron-builder --mac",
"build:linux": "electron-vite build && electron-builder --linux",
"build:win": "electron-vite build && electron-builder --win",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
"typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false",
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
"icons": "node scripts/build-icons.mjs"
},
"dependencies": {
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^4.0.0",
"@memohai/icon": "workspace:*",
"@memohai/sdk": "workspace:*",
"@memohai/ui": "workspace:*",
"@memohai/web": "workspace:*"
},
"devDependencies": {
"@electron-toolkit/tsconfig": "^1.0.1",
"@memohai/config": "workspace:*",
"@pinia/colada": "^0.21.2",
"@tailwindcss/vite": "^4.2.2",
"@types/node": "^24.10.1",
"@vitejs/plugin-vue": "^6.0.5",
"@vue/tsconfig": "^0.8.1",
"animate.css": "^4.1.1",
"electron": "^34.5.0",
"electron-builder": "^26.0.12",
"electron-vite": "^4.0.0",
"katex": "^0.16.37",
"markstream-vue": "0.0.7-beta.2",
"pinia": "^3.0.4",
"pinia-plugin-persistedstate": "^4.7.1",
"png-to-ico": "^3.0.1",
"sharp": "^0.34.5",
"typescript": "~5.9.3",
"vite": "^8.0.1",
"vue": "^3.5.24",
"vue-i18n": "^11.2.8",
"vue-router": "^4.6.4",
"vue-sonner": "^2.0.9",
"vue-tsc": "^3.1.4"
}
}