{ "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", "workspaces": [ "packages/*", "examples/plugins/*" ], "author": "binaricat ", "license": "GPL-3.0-or-later", "engines": { "node": ">=22" }, "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 --strictPort\" \"npm:dev:electron\"", "dev:electron": "wait-on http-get://localhost:5173 && cross-env VITE_DEV_SERVER_URL=http://localhost:5173 node electron/launch.cjs", "clean:vite": "node scripts/clean-vite-cache.cjs", "dev:clean": "npm run clean:vite && npm run dev", "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:windows-hello-helper": "node scripts/build-windows-hello-helper.cjs", "build": "npm run build:plugin-packages && vite build", "build:plugin-runtime-deps": "npm run build --workspace @netcatty/plugin-contract && npm run build --workspace @netcatty/plugin-sdk && npm run build --workspace @netcatty/plugin-cli", "build:plugin-packages": "npm run generate:plugin-contract && npm run build:plugin-runtime-deps && npm run build --workspace @netcatty/example-hello-plugin", "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": "patch-package && node scripts/patch-xterm-macos-column-selection.cjs && electron-builder install-app-deps && node scripts/rebuildPatchedNodePty.cjs && node scripts/patch-xterm-webgl-atlas.cjs", "rebuild": "electron-builder install-app-deps", "tool:cli": "node electron/cli/netcatty-tool-cli.cjs", "generate:capability-tools": "node scripts/generate-capability-tools.cjs", "generate:codex-app-server-schema": "node scripts/generate-codex-app-server-schema.cjs", "check:codex-app-server-schema": "node scripts/generate-codex-app-server-schema.cjs --check", "check:codebuddy-sdk-contract": "tsc -p tsconfig.codebuddy-sdk-contract.json", "generate:plugin-contract": "node scripts/generate-plugin-contract.mjs", "check:plugin-contract": "node scripts/generate-plugin-contract.mjs --check", "lint": "eslint .", "lint:fix": "eslint . --fix", "pretest": "npm run build:plugin-runtime-deps && npm run check:codebuddy-sdk-contract", "test": "node --test --import tsx electron/*.test.cjs electron/preload/*.test.cjs electron/scripts/*.test.cjs electron/terminalWorker/*.test.cjs electron/capabilities/*.test.cjs electron/capabilities/*/*.test.cjs electron/capabilities/*/*/*.test.cjs electron/cli/*.test.cjs electron/bridges/*.test.cjs electron/bridges/*/*.test.cjs electron/bridges/aiBridge/codexAppServer/*.test.cjs electron/bridges/aiBridge/sdk/*.test.cjs scripts/*.test.cjs application/*.test.ts application/app/*.test.ts application/i18n/locales/*.test.ts application/state/*.test.ts application/state/*/*.test.ts components/*.test.ts components/*.test.tsx components/editor/*.test.ts components/editor/*.test.tsx components/notes/*.test.ts components/notes/*.test.tsx components/port-forwarding/*.test.ts components/scripts/*.test.tsx components/systemManager/*.test.ts components/terminalLayer/*.test.ts components/settings/*.test.tsx components/settings/tabs/*.test.ts components/settings/tabs/ai/*.test.ts components/settings/tabs/ai/*.test.tsx components/ai/*.test.ts components/ai/*.test.tsx components/ai/toolArtifacts/*.test.ts components/ai/toolArtifacts/*.test.tsx components/ai-elements/*.test.tsx components/sftp/*.test.ts components/terminal/*.test.ts components/terminal/*.test.tsx components/terminal/runtime/*.test.ts components/vault/*.test.ts components/vault/*.test.tsx domain/*.test.ts domain/*/*.test.ts infrastructure/ai/*.test.ts infrastructure/ai/*/*.test.ts infrastructure/ai/sdk/*.test.ts infrastructure/config/*.test.ts infrastructure/monaco/*.test.ts infrastructure/persistence/*.test.ts infrastructure/services/*.test.ts infrastructure/services/*/*.test.ts lib/*.test.ts packages/*/src/*.test.ts", "test:plugin-contract": "node --test --import tsx packages/*/src/*.test.ts", "pretest:plugin-runtime": "npm run build:plugin-runtime-deps", "test:plugin-runtime": "node --test electron/plugins/*.test.cjs", "pretest:plugin-runtime:electron": "npm run build:plugin-runtime-deps", "test:plugin-runtime:electron": "electron electron/plugins/electronRuntime.live.test.cjs", "test:sync-crdt": "node --test --import tsx domain/convergentSync/*.test.ts", "bench:sync-crdt": "tsx scripts/bench-sync-crdt.ts", "test:ssh-mfa-models": "node --test electron/bridges/sshMfaModels.live.test.cjs", "test:ssh-mfa-models:live": "SSH_MFA_LIVE=1 node --test electron/bridges/sshMfaModels.live.test.cjs", "test:tray-panel-layout": "electron scripts/tray-panel-layout.live.test.cjs", "test:terminal-background-rendering": "electron scripts/terminal-background-rendering.live.test.cjs", "test:xterm-webgl-overflow": "electron scripts/xterm-webgl-atlas-overflow.live.test.cjs", "test:xterm-macos-selection": "electron scripts/xterm-macos-column-selection.live.test.cjs", "test:xterm-keyword-highlight-performance": "electron scripts/xterm-keyword-highlight-performance.live.test.cjs", "test:xterm-keyword-highlight-throughput": "electron scripts/xterm-keyword-highlight-throughput.live.test.cjs" }, "dependencies": { "@ai-sdk/anthropic": "^4.0.0", "@ai-sdk/google": "^4.0.0", "@ai-sdk/openai": "^4.0.0", "@aws-sdk/client-s3": "^3.956.0", "@eslint-community/regexpp": "4.12.2", "@fontsource/jetbrains-mono": "^5.2.8", "@fontsource/mona-sans": "^5.2.8", "@fontsource/space-grotesk": "^5.2.10", "@mdxeditor/editor": "^4.0.4", "@modelcontextprotocol/sdk": "^1.29.0", "@monaco-editor/react": "^4.7.0", "@netcatty/plugin-cli": "0.1.0-internal", "@netcatty/plugin-contract": "0.1.0-internal", "@netcatty/plugin-sdk": "0.1.0-internal", "@openai/codex-sdk": "0.144.3", "@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-tabs": "1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@smithy/node-http-handler": "^4.4.9", "@streamdown/cjk": "^1.0.2", "@streamdown/code": "^1.1.0", "@tanstack/react-virtual": "^3.14.8", "@withfig/autocomplete": "^2.692.3", "@xterm/addon-fit": "0.12.0-beta.292", "@xterm/addon-image": "0.10.0-beta.292", "@xterm/addon-search": "0.17.0-beta.292", "@xterm/addon-serialize": "0.15.0-beta.292", "@xterm/addon-unicode-graphemes": "0.5.0-beta.292", "@xterm/addon-web-links": "0.13.0-beta.292", "@xterm/addon-webgl": "0.20.0-beta.291", "@xterm/xterm": "6.1.0-beta.292", "ai": "^7.0.2", "ajv": "8.18.0", "ajv-formats": "3.0.1", "clsx": "2.1.1", "electron-updater": "^6.8.3", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "iconv-lite": "^0.6.3", "katex": "^0.18.4", "lucide-react": "0.560.0", "mdast-util-from-markdown": "^2.0.3", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-to-string": "^4.0.0", "micromark-extension-gfm-strikethrough": "^2.1.0", "monaco-editor": "^0.55.1", "node-pty": "^1.1.0", "pinyin-pro": "^3.28.1", "re2js": "2.8.6", "react": "^19.2.1", "react-dom": "^19.2.1", "serialport": "^13.0.0", "socks-proxy-agent": "^8.0.5", "ssh2-sftp-client": "^12.0.1", "streamdown": "^2.4.0", "tailwind-merge": "3.4.0", "turndown": "^7.2.4", "turndown-plugin-gfm": "^1.0.2", "use-stick-to-bottom": "^1.1.3", "webdav": "^5.8.0", "zmodem.js": "^0.1.10", "zod": "^4.3.6" }, "devDependencies": { "@eslint/js": "^9.39.1", "@tailwindcss/vite": "^4.1.17", "@types/node": "^25.0.0", "@types/react-test-renderer": "^19.1.0", "@types/turndown": "^5.0.6", "@typescript-eslint/eslint-plugin": "^8.49.0", "@typescript-eslint/parser": "^8.49.0", "@vitejs/plugin-react": "^5.1.2", "concurrently": "^9.2.1", "cross-env": "^10.1.0", "electron": "^42.3.3", "electron-builder": "^26.15.2", "esbuild": "0.27.2", "eslint": "^9.39.1", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-unused-imports": "^4.3.0", "fast-check": "^4.9.0", "jsdom": "^29.1.1", "patch-package": "^8.0.0", "react-test-renderer": "^19.2.4", "sass": "^1.103.1", "simple-icons": "^16.23.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", "@cursor/sdk": "^1.0.18", "@github/copilot-sdk": "1.0.0", "@opencode-ai/sdk": "^1.17.9", "@tencent-ai/agent-sdk": "^0.3.230", "@vscode/windows-process-tree": "^0.7.0" }, "overrides": { "cpu-features": "npm:empty-npm-package@1.0.0", "axios": "1.13.5", "node-abi": "4.31.0", "@electron/asar": "4.2.0" } }