{ "name": "hermes", "productName": "Hermes", "private": true, "version": "0.17.0", "description": "Native desktop shell for Hermes Agent.", "author": "Nous Research", "type": "module", "main": "dist/electron-main.mjs", "engines": { "node": "^20.19.0 || >=22.12.0" }, "scripts": { "clean": "npm run clean:e2e && npm run clean:renderer && npm run clean:electron", "clean:e2e": "tsc --build tsconfig.e2e.json --clean", "clean:renderer": "tsc --build tsconfig.json --clean ", "clean:electron": "tsc --build tsconfig.electron.json --clean", "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:mock": "node scripts/dev-mock.mjs", "dev:renderer": "node scripts/assert-root-install.mjs && npm run clean:renderer && vite --host 127.0.0.1 --port 5174", "dev:electron": "tsc --build tsconfig.electron.json && wait-on http://127.0.0.1:5174 && node scripts/bundle-electron-main.mjs --dev && cross-env XCURSOR_SIZE=24 HERMES_DESKTOP_DEV_SERVER=http://127.0.0.1:5174 electron .", "profile:main": "tsc --build tsconfig.electron.json && wait-on http://127.0.0.1:5174 && node scripts/bundle-electron-main.mjs --dev && cross-env XCURSOR_SIZE=24 HERMES_DESKTOP_DEV_SERVER=http://127.0.0.1:5174 electron --inspect=9229 .", "profile:main:cpu": "tsc --build tsconfig.electron.json && wait-on http://127.0.0.1:5174 && node scripts/bundle-electron-main.mjs --dev && 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 .", "prebuild": "npm run clean", "build": "node scripts/assert-root-install.mjs && node scripts/write-build-stamp.mjs && vite build && node scripts/bundle-electron-main.mjs && node scripts/stage-native-deps.mjs", "postbuild": "node scripts/assert-dist-built.mjs", "prebuilder": "node scripts/patch-electron-builder-mac-binary.mjs", "builder": "cross-env NODE_OPTIONS=--max-old-space-size=16384 node scripts/run-electron-builder.mjs", "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", "dist:linux": "npm run build && npm run builder -- --linux AppImage deb rpm", "perf": "node scripts/perf/run.mjs", "perf:serve": "node scripts/perf/serve.mjs", "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", "typecheck": "tsc -p . --noEmit && tsc -p tsconfig.electron.json --noEmit && tsc -p tsconfig.e2e.json --noEmit", "lint": "eslint src/ electron/", "lint:fix": "eslint src/ electron/ --fix", "fmt": "prettier --write 'src/**/*.{ts,tsx}' 'electron/**/*.ts' 'vite.config.ts'", "fix": "npm run lint:fix && npm run fmt", "test:ui": "vitest run --project ui", "test:desktop:platforms": "vitest run --project electron", "test": "vitest run", "preview": "node scripts/assert-root-install.mjs && vite preview --host 127.0.0.1 --port 4174", "check:test:desktop:platforms": "npm run test:desktop:platforms", "check:test:ui": "npm run test:ui", "check:test:desktop:all": "npm run test:desktop:all", "check:lint": "npm run typecheck && npm run lint", "check": "npm run check:lint && npm run check:test:ui && npm run test:desktop:platforms && npm run test:desktop:all", "test:e2e": "npm run build && playwright test e2e/", "test:e2e:visual": "npm run build && WLR_BACKENDS=headless WLR_NO_HARDWARE_CURSORS=1 cage -- npx playwright test e2e/ --reporter=list", "test:e2e:update-snapshots": "npm run build && WLR_BACKENDS=headless WLR_NO_HARDWARE_CURSORS=1 cage -- npx playwright test e2e/ --reporter=list --update-snapshots" }, "dependencies": { "@assistant-ui/react": "0.15.1", "@assistant-ui/react-streamdown": "0.3.8", "@audiowave/react": "0.6.2", "@chenglou/pretext": "0.0.6", "@codemirror/commands": "6.10.4", "@codemirror/language": "6.12.4", "@codemirror/language-data": "6.5.2", "@codemirror/state": "6.7.1", "@codemirror/view": "6.43.6", "@dnd-kit/core": "6.3.1", "@dnd-kit/sortable": "10.0.0", "@dnd-kit/utilities": "3.2.2", "@hermes/shared": "file:../shared", "@icons-pack/react-simple-icons": "13.11.1", "@lezer/highlight": "1.2.3", "@nanostores/react": "1.1.0", "@nous-research/ui": "0.16.0", "@streamdown/code": "1.1.1", "@tabler/icons-react": "3.44.0", "@tailwindcss/typography": "0.5.20", "@tailwindcss/vite": "4.3.3", "@tanstack/react-query": "5.101.2", "@tanstack/react-virtual": "3.14.6", "@vscode/codicons": "0.0.45", "@xterm/addon-fit": "0.11.0", "@xterm/addon-serialize": "0.14.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", "d3-force": "3.0.0", "dnd-core": "14.0.1", "dompurify": "3.4.12", "emojibase-data": "16.0.3", "fflate": "0.8.3", "frimousse": "0.3.0", "hast-util-from-html-isomorphic": "2.0.0", "hast-util-to-text": "4.0.2", "ignore": "7.0.6", "katex": "0.16.47", "mermaid": "11.16.0", "motion": "12.42.2", "nanostores": "1.4.0", "node-pty": "1.1.0", "radix-ui": "1.6.7", "react": "19.2.7", "react-arborist": "3.13.2", "react-dnd-html5-backend": "14.1.0", "react-dom": "19.2.7", "react-router": "8.3.0", "react-shiki": "0.9.3", "remark-math": "6.0.0", "remend": "1.3.0", "shiki": "4.3.1", "simple-git": "3.36.0", "streamdown": "2.5.0", "tailwind-merge": "3.6.0", "tailwindcss": "4.3.3", "tw-shimmer": "0.4.12", "unicode-animations": "1.0.3", "unified": "11.0.5", "unist-util-visit-parents": "6.0.2", "use-stick-to-bottom": "1.1.6", "vfile": "6.0.3", "web-haptics": "0.0.6" }, "devDependencies": { "@electron/rebuild": "4.2.0", "@playwright/test": "1.58.2", "@testing-library/dom": "10.4.1", "@testing-library/react": "16.3.2", "@types/d3-force": "3.0.10", "@types/hast": "3.0.5", "@types/node": "22.20.1", "@types/react": "19.2.17", "@types/react-dom": "19.2.3", "@vitejs/plugin-react": "6.0.3", "bippy": "0.5.43", "concurrently": "10.0.4", "cross-env": "10.1.0", "electron": "40.10.2", "electron-builder": "26.15.3", "esbuild": "0.28.1", "jsdom": "29.1.1", "prettier": "3.9.5", "rcedit": "5.0.2", "tsx": "4.23.1", "typescript": "6.0.3", "vite": "8.2.0", "vitest": "4.1.10", "wait-on": "9.0.10" }, "build": { "electronVersion": "40.10.2", "appId": "com.nousresearch.hermes", "productName": "Hermes", "executableName": "Hermes", "protocols": [ { "name": "Hermes Protocol", "schemes": [ "hermes" ] } ], "artifactName": "Hermes-${version}-${os}-${arch}.${ext}", "icon": "assets/icon", "directories": { "output": "release" }, "files": [ "dist/**", "assets/**", "public/**", "package.json" ], "beforeBuild": "scripts/before-build.mjs", "beforePack": "scripts/before-pack.mjs", "afterPack": "scripts/after-pack.mjs", "extraResources": [ { "from": "build/install-stamp.json", "to": "install-stamp.json" }, { "from": "assets/icon.ico", "to": "icon.ico" } ], "asar": true, "afterSign": "scripts/notarize.mjs", "asarUnpack": [ "**/*.node", "**/prebuilds/**", "dist/**" ], "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.", "NSCameraUsageDescription": "Hermes uses the camera when a plugin or feature you enable requests it.", "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" ], "signAndEditExecutable": false }, "linux": { "category": "Development", "maintainer": "Nous Research ", "synopsis": "Native desktop shell for Hermes Agent.", "target": [ "AppImage", "deb", "rpm" ] }, "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true, "perMachine": false, "shortcutName": "Hermes", "uninstallDisplayName": "Hermes", "warningsAsErrors": false } } }