mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-21 03:39:54 +00:00
928280ca2c
A user-reported failure on Windows-on-ARM: a pre-installed Python 3.13 on PATH makes findSystemPython() succeed, so resolveHermesBackend returns a backend pointing at it -- but hermes_cli isn't in that interpreter's site-packages. The spawn dies with ModuleNotFoundError and the user sees a dead GUI instead of the first-launch installer. Same shape can hit step 4 (existing `hermes` on PATH) when a stale shim survives a partial uninstall. Add cheap exit-code probes -- `python -c "import hermes_cli"` for step 5, `<hermes> --version` for step 4 -- and fall through to step 6 (bootstrap-needed) on failure. install.ps1 then runs as if on a clean box and the venv gets built. Probes live in a standalone electron/backend-probes.cjs module so they can be unit-tested with node --test, same pattern as bootstrap-platform.cjs and hardening.cjs. New test file wired into test:desktop:platforms.
215 lines
7.4 KiB
JSON
215 lines
7.4 KiB
JSON
{
|
|
"name": "hermes",
|
|
"productName": "Hermes",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"description": "Native desktop shell for Hermes Agent.",
|
|
"author": "Nous Research",
|
|
"type": "module",
|
|
"main": "electron/main.cjs",
|
|
"scripts": {
|
|
"dev": "concurrently -k \"npm:dev:renderer\" \"npm:dev:electron\"",
|
|
"dev:fake-boot": "cross-env HERMES_DESKTOP_BOOT_FAKE=1 HERMES_DESKTOP_BOOT_FAKE_STEP_MS=650 npm run dev",
|
|
"dev:renderer": "node scripts/assert-root-install.cjs && vite --host 127.0.0.1 --port 5174",
|
|
"dev:electron": "wait-on http://127.0.0.1:5174 && cross-env XCURSOR_SIZE=24 HERMES_DESKTOP_DEV_SERVER=http://127.0.0.1:5174 electron .",
|
|
"profile:main": "wait-on http://127.0.0.1:5174 && cross-env XCURSOR_SIZE=24 HERMES_DESKTOP_DEV_SERVER=http://127.0.0.1:5174 electron --inspect=9229 .",
|
|
"profile:main:cpu": "wait-on http://127.0.0.1:5174 && cross-env XCURSOR_SIZE=24 NODE_OPTIONS=--cpu-prof HERMES_DESKTOP_DEV_SERVER=http://127.0.0.1:5174 electron .",
|
|
"start": "npm run build && electron .",
|
|
"build": "node scripts/assert-root-install.cjs && node scripts/write-build-stamp.cjs && node scripts/stage-native-deps.cjs && tsc -b && vite build",
|
|
"builder": "cross-env NODE_OPTIONS=--max-old-space-size=16384 electron-builder",
|
|
"pack": "npm run build && npm run builder -- --dir",
|
|
"dist": "npm run build && npm run builder",
|
|
"dist:mac": "npm run build && npm run builder -- --mac",
|
|
"dist:mac:dmg": "npm run build && npm run builder -- --mac dmg",
|
|
"dist:mac:zip": "npm run build && npm run builder -- --mac zip",
|
|
"dist:win": "npm run build && npm run builder -- --win",
|
|
"dist:win:msi": "npm run build && npm run builder -- --win msi",
|
|
"dist:win:nsis": "npm run build && npm run builder -- --win nsis",
|
|
"test:desktop": "node scripts/test-desktop.mjs",
|
|
"test:desktop:all": "node scripts/test-desktop.mjs all",
|
|
"test:desktop:dmg": "node scripts/test-desktop.mjs dmg",
|
|
"test:desktop:nsis": "node scripts/test-desktop.mjs nsis",
|
|
"test:desktop:existing": "node scripts/test-desktop.mjs existing",
|
|
"test:desktop:fresh": "node scripts/test-desktop.mjs fresh",
|
|
"test:desktop:platforms": "node --test electron/bootstrap-platform.test.cjs electron/hardening.test.cjs electron/backend-probes.test.cjs",
|
|
"type-check": "tsc -b",
|
|
"lint": "eslint src/ electron/",
|
|
"lint:fix": "eslint src/ electron/ --fix",
|
|
"fmt": "prettier --write 'src/**/*.{ts,tsx}' 'electron/**/*.{js,cjs}' 'vite.config.ts'",
|
|
"fix": "npm run lint:fix && npm run fmt",
|
|
"test:ui": "vitest run --environment jsdom",
|
|
"preview": "node scripts/assert-root-install.cjs && vite preview --host 127.0.0.1 --port 4174"
|
|
},
|
|
"dependencies": {
|
|
"@assistant-ui/react": "^0.12.28",
|
|
"@assistant-ui/react-streamdown": "^0.1.11",
|
|
"@audiowave/react": "^0.6.2",
|
|
"@chenglou/pretext": "^0.0.6",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@hermes/shared": "file:../shared",
|
|
"@nanostores/react": "^1.1.0",
|
|
"@nous-research/ui": "^0.13.0",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@streamdown/code": "^1.1.1",
|
|
"@tabler/icons-react": "^3.41.1",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"@tailwindcss/vite": "^4.2.4",
|
|
"@tanstack/react-query": "^5.100.6",
|
|
"@tanstack/react-virtual": "^3.13.24",
|
|
"@vscode/codicons": "^0.0.45",
|
|
"@xterm/addon-fit": "^0.11.0",
|
|
"@xterm/addon-unicode11": "^0.9.0",
|
|
"@xterm/addon-web-links": "^0.12.0",
|
|
"@xterm/addon-webgl": "^0.19.0",
|
|
"@xterm/xterm": "^6.0.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"hast-util-from-html-isomorphic": "^2.0.0",
|
|
"hast-util-to-text": "^4.0.2",
|
|
"ignore": "^7.0.5",
|
|
"katex": "^0.16.45",
|
|
"leva": "^0.10.1",
|
|
"motion": "^12.38.0",
|
|
"nanostores": "^1.3.0",
|
|
"node-pty": "1.1.0",
|
|
"radix-ui": "^1.4.3",
|
|
"react": "^19.2.5",
|
|
"react-arborist": "^3.5.0",
|
|
"react-dom": "^19.2.5",
|
|
"react-router-dom": "^7.14.2",
|
|
"react-shiki": "^0.9.3",
|
|
"remark-math": "^6.0.0",
|
|
"shiki": "^4.0.2",
|
|
"streamdown": "^2.5.0",
|
|
"tailwind-merge": "^3.5.0",
|
|
"tailwindcss": "^4.2.4",
|
|
"tw-shimmer": "^0.4.11",
|
|
"unicode-animations": "^1.0.3",
|
|
"unified": "^11.0.5",
|
|
"unist-util-visit-parents": "^6.0.2",
|
|
"vfile": "^6.0.3",
|
|
"web-haptics": "^0.0.6"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.39.4",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/hast": "^3.0.4",
|
|
"@types/node": "^24.12.2",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@typescript-eslint/eslint-plugin": "^8.59.1",
|
|
"@typescript-eslint/parser": "^8.59.1",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"concurrently": "^9.2.1",
|
|
"cross-env": "^10.1.0",
|
|
"electron": "^40.9.3",
|
|
"electron-builder": "^26.8.1",
|
|
"eslint": "^9.39.4",
|
|
"eslint-plugin-perfectionist": "^5.9.0",
|
|
"eslint-plugin-react": "^7.37.5",
|
|
"eslint-plugin-react-compiler": "^19.1.0-rc.2",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
"globals": "^16.5.0",
|
|
"jsdom": "^29.1.1",
|
|
"prettier": "^3.8.3",
|
|
"typescript": "^6.0.3",
|
|
"vite": "^8.0.10",
|
|
"vitest": "^4.1.5",
|
|
"wait-on": "^9.0.5"
|
|
},
|
|
"build": {
|
|
"electronVersion": "40.9.3",
|
|
"appId": "com.nousresearch.hermes",
|
|
"productName": "Hermes",
|
|
"executableName": "Hermes",
|
|
"artifactName": "Hermes-${version}-${os}-${arch}.${ext}",
|
|
"icon": "assets/icon",
|
|
"directories": {
|
|
"output": "release"
|
|
},
|
|
"files": [
|
|
"dist/**",
|
|
"assets/**",
|
|
"electron/**",
|
|
"public/**",
|
|
"package.json"
|
|
],
|
|
"beforeBuild": "scripts/before-build.cjs",
|
|
"extraResources": [
|
|
{
|
|
"from": "build/install-stamp.json",
|
|
"to": "install-stamp.json"
|
|
},
|
|
{
|
|
"from": "build/native-deps",
|
|
"to": "native-deps"
|
|
}
|
|
],
|
|
"asar": true,
|
|
"afterSign": "scripts/notarize.cjs",
|
|
"asarUnpack": [
|
|
"**/*.node",
|
|
"**/prebuilds/**"
|
|
],
|
|
"mac": {
|
|
"category": "public.app-category.developer-tools",
|
|
"entitlements": "electron/entitlements.mac.plist",
|
|
"entitlementsInherit": "electron/entitlements.mac.inherit.plist",
|
|
"extendInfo": {
|
|
"CFBundleDisplayName": "Hermes",
|
|
"CFBundleExecutable": "Hermes",
|
|
"CFBundleName": "Hermes",
|
|
"NSAudioCaptureUsageDescription": "Hermes uses audio capture for voice conversations.",
|
|
"NSMicrophoneUsageDescription": "Hermes uses the microphone for voice input and voice conversations."
|
|
},
|
|
"gatekeeperAssess": false,
|
|
"hardenedRuntime": true,
|
|
"target": [
|
|
"dmg",
|
|
"zip"
|
|
]
|
|
},
|
|
"dmg": {
|
|
"title": "Install Hermes",
|
|
"backgroundColor": "#f5f5f7",
|
|
"iconSize": 96,
|
|
"window": {
|
|
"width": 560,
|
|
"height": 360
|
|
},
|
|
"contents": [
|
|
{
|
|
"x": 160,
|
|
"y": 170,
|
|
"type": "file"
|
|
},
|
|
{
|
|
"x": 400,
|
|
"y": 170,
|
|
"type": "link",
|
|
"path": "/Applications"
|
|
}
|
|
]
|
|
},
|
|
"win": {
|
|
"legalTrademarks": "Hermes",
|
|
"target": [
|
|
"nsis",
|
|
"msi"
|
|
]
|
|
},
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"allowToChangeInstallationDirectory": true,
|
|
"perMachine": false,
|
|
"shortcutName": "Hermes",
|
|
"uninstallDisplayName": "Hermes",
|
|
"warningsAsErrors": false
|
|
}
|
|
}
|
|
}
|