* fix(ai): make SDK deps optional, degrade gracefully when missing - Move @anthropic-ai/claude-agent-sdk and @github/copilot-sdk from dependencies to optionalDependencies so npm install does not fail when they are unavailable - claudeDriver.listClaudeModels: catch import error, return [] silently - copilotDriver.listCopilotModels: catch import error, return [] silently - sdkStreamHandlers: downgrade log from console.error to console.debug The renderer already falls back to curated model presets when list-models returns [], so no functional change. * fixup: honor queryFn before SDK import; regenerate lockfile with optional markers * fixup: guard runTurn against missing SDK modules runClaudeTurn and runCopilotTurn now catch dynamic import errors and emit a user-friendly error message instead of crashing with a raw module-not-found error.
123 lines
6.2 KiB
JSON
123 lines
6.2 KiB
JSON
{
|
|
"name": "netcatty",
|
|
"description": "Netcatty is a modern SSH manager and terminal app with host grouping, SFTP, keychain, port forwarding, and a rich UI.",
|
|
"homepage": "https://github.com/binaricat/Netcatty",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"author": "binaricat <support@netcatty.com>",
|
|
"license": "GPL-3.0-or-later",
|
|
"main": "electron/main.cjs",
|
|
"bin": {
|
|
"netcatty-tool-cli": "./electron/cli/netcatty-tool-cli.cjs"
|
|
},
|
|
"scripts": {
|
|
"dev": "npm run fetch:mosh:dev && npm run fetch:et:dev && npm run lint && concurrently -k \"vite\" \"npm:dev:electron\"",
|
|
"dev:electron": "wait-on http-get://localhost:5173 && cross-env VITE_DEV_SERVER_URL=http://localhost:5173 node electron/launch.cjs",
|
|
"prebuild": "node scripts/copy-monaco.cjs",
|
|
"fetch:mosh": "node scripts/fetch-mosh-binaries.cjs",
|
|
"fetch:mosh:dev": "node scripts/fetch-mosh-binaries.cjs --host --resolve-release",
|
|
"fetch:et": "node scripts/fetch-et-binaries.cjs",
|
|
"fetch:et:dev": "node scripts/fetch-et-binaries.cjs --host --resolve-release",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"start": "node electron/launch.cjs",
|
|
"pack": "npm run build && cross-env NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --publish=never",
|
|
"pack:dir": "npm run build && cross-env NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --dir --publish=never",
|
|
"pack:win": "npm run build && cross-env npm_config_arch=x64 NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --win --x64 --publish=never && cross-env npm_config_arch=arm64 NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --win --arm64 --publish=never",
|
|
"pack:win-x64": "npm run build && cross-env npm_config_arch=x64 NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --win --x64 --publish=never",
|
|
"pack:mac": "npm run build && cross-env NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --mac --publish=never",
|
|
"pack:linux": "npm run build && cross-env NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --linux --publish=never",
|
|
"pack:linux-x64": "npm run build && cross-env npm_config_arch=x64 NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --linux --x64 --publish=never",
|
|
"pack:linux-arm64": "npm run build && cross-env npm_config_arch=arm64 NODE_OPTIONS=--disable-warning=DEP0190 electron-builder --config electron-builder.config.cjs --linux --arm64 --publish=never",
|
|
"postinstall": "electron-builder install-app-deps && patch-package && node scripts/patch-xterm-webgl-atlas.cjs",
|
|
"rebuild": "electron-builder install-app-deps",
|
|
"tool:cli": "node electron/cli/netcatty-tool-cli.cjs",
|
|
"lint": "eslint .",
|
|
"lint:fix": "eslint . --fix",
|
|
"test": "node --test --import tsx electron/bridges/*.test.cjs electron/bridges/*/*.test.cjs electron/bridges/aiBridge/sdk/*.test.cjs scripts/*.test.cjs application/*.test.ts application/state/*.test.ts application/state/*/*.test.ts components/*.test.tsx components/editor/*.test.tsx components/settings/tabs/ai/*.test.ts components/ai/*.test.ts components/ai-elements/*.test.tsx components/terminal/*.test.ts components/terminal/runtime/*.test.ts domain/*.test.ts infrastructure/ai/*.test.ts infrastructure/config/*.test.ts infrastructure/services/*/*.test.ts lib/*.test.ts"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/anthropic": "^3.0.58",
|
|
"@ai-sdk/google": "^3.0.43",
|
|
"@ai-sdk/openai": "^3.0.41",
|
|
"@aws-sdk/client-s3": "^3.956.0",
|
|
"@fontsource/jetbrains-mono": "^5.2.8",
|
|
"@fontsource/space-grotesk": "^5.2.10",
|
|
"@google/genai": "1.33.0",
|
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
"@monaco-editor/react": "^4.7.0",
|
|
"@openai/codex-sdk": "^0.136.0",
|
|
"@radix-ui/react-collapsible": "1.1.12",
|
|
"@radix-ui/react-context-menu": "2.2.16",
|
|
"@radix-ui/react-dialog": "1.1.15",
|
|
"@radix-ui/react-hover-card": "^1.1.15",
|
|
"@radix-ui/react-popover": "1.1.15",
|
|
"@radix-ui/react-scroll-area": "1.2.10",
|
|
"@radix-ui/react-select": "2.2.6",
|
|
"@radix-ui/react-slot": "1.2.4",
|
|
"@radix-ui/react-tabs": "1.1.13",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@streamdown/cjk": "^1.0.2",
|
|
"@streamdown/code": "^1.1.0",
|
|
"@withfig/autocomplete": "^2.692.3",
|
|
"@xterm/addon-fit": "^0.11.0",
|
|
"@xterm/addon-search": "^0.16.0",
|
|
"@xterm/addon-serialize": "^0.14.0",
|
|
"@xterm/addon-unicode-graphemes": "^0.4.0",
|
|
"@xterm/addon-web-links": "^0.12.0",
|
|
"@xterm/addon-webgl": "^0.19.0",
|
|
"@xterm/xterm": "^6.0.0",
|
|
"ai": "^6.0.116",
|
|
"clsx": "2.1.1",
|
|
"electron-updater": "^6.8.3",
|
|
"iconv-lite": "^0.6.3",
|
|
"lucide-react": "0.560.0",
|
|
"monaco-editor": "^0.55.1",
|
|
"node-pty": "1.1.0",
|
|
"react": "^19.2.1",
|
|
"react-dom": "^19.2.1",
|
|
"serialport": "^13.0.0",
|
|
"ssh2-sftp-client": "^12.0.1",
|
|
"streamdown": "^2.4.0",
|
|
"tailwind-merge": "3.4.0",
|
|
"use-stick-to-bottom": "^1.1.3",
|
|
"uuid": "^13.0.0",
|
|
"webdav": "^5.8.0",
|
|
"zmodem.js": "^0.1.10",
|
|
"zod": "^4.3.6"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.39.1",
|
|
"@tailwindcss/postcss": "^4.1.17",
|
|
"@tailwindcss/vite": "^4.1.17",
|
|
"@types/node": "^25.0.0",
|
|
"@typescript-eslint/eslint-plugin": "^8.49.0",
|
|
"@typescript-eslint/parser": "^8.49.0",
|
|
"@vitejs/plugin-react": "^5.1.2",
|
|
"@withfig/autocomplete-types": "^1.31.0",
|
|
"concurrently": "^9.2.1",
|
|
"cross-env": "^10.1.0",
|
|
"electron": "^40.8.5",
|
|
"electron-builder": "^26.0.12",
|
|
"eslint": "^9.39.1",
|
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
"eslint-plugin-unused-imports": "^4.3.0",
|
|
"patch-package": "^8.0.0",
|
|
"tailwindcss": "^4.1.17",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "~5.9.3",
|
|
"vite": "^7.3.2",
|
|
"wait-on": "^9.0.3"
|
|
},
|
|
"optionalDependencies": {
|
|
"@anthropic-ai/claude-agent-sdk": "^0.3.161",
|
|
"@github/copilot-sdk": "1.0.0",
|
|
"@vscode/windows-process-tree": "^0.7.0"
|
|
},
|
|
"overrides": {
|
|
"cpu-features": "npm:empty-npm-package@1.0.0",
|
|
"axios": "1.13.5"
|
|
}
|
|
}
|