Files
Netcatty/package.json
T
陈大猫 bd8476fb34 fix(terminal): enable font ligatures from the terminal setting (#3557)
fontLigatures already defaulted to on, but the terminal never loaded
the ligatures addon, so Fira Code and Maple Mono kept drawing != as two
cells. Activate the addon after open and before WebGL, and rebuild the
WebGL atlas when the setting changes so glyphs are not rasterized
without the calt feature.

The addon bundles lru-cache's node:diagnostics_channel import. Alias
that builtin to a no-op channel in the Vite renderer build and in the
Electron live-test bundles.

Closes #3543
2026-09-29 17:34:00 +08:00

193 lines
11 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",
"workspaces": [
"packages/*",
"examples/plugins/*"
],
"author": "binaricat <support@netcatty.com>",
"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 && node scripts/patch-xterm-foreground-intense.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/mcp/*.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:local-file-drag:electron": "electron scripts/local-file-drag.live.test.cjs",
"test:tray-panel-layout": "electron scripts/tray-panel-layout.live.test.cjs",
"test:xterm-foreground-intense": "electron scripts/xterm-foreground-intense.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",
"@mimo-ai/sdk": "^0.1.15",
"@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",
"@noble/hashes": "^2.2.0",
"@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-ligatures": "0.11.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.258",
"@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"
}
}