mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-30 15:15:24 +00:00
* feat: let the login page send the token back to the mobile app * feat: add host-scripts entry to the plugin sdk * feat: let plugins say how they show in the mobile app * feat: frame host for running one plugin view outside the shell * fix: build the SDK host modules in production mode * chore: note the SDK host build fix in the changelog * feat: list plugin engine ranges for the mobile app * feat: host color and icon columns that sync * chore: update translations and plugin pins * fix: test * fix: show source address when rejecting proxy auth * fix: deleting your own account removes all of its data * fix(deps): update body-parser to 2.4.0 (#1736) * fix: body-parser 보안 패치 반영 * chore: 자동 검사를 막던 기존 JSON 서식 정리 --------- Co-authored-by: renovys <180682734+renovys@users.noreply.github.com> * fix(sdk): decode command output as GBK when it is not valid UTF-8 (#1735) * fix: honor shared credentials on shared hosts (#1730) * fix: honor shared credentials on shared hosts and in personal SSH auth * fix: snapshot shared SSH auth from a credential shared with the host owner * fix: size DataView list columns by the table's own width (#1713) * fix: size DataView list columns by the table's own width The list grid was built from every column, so columns hidden below md/lg left empty tracks and the visible cells landed under the wrong headers. Each width now gets a template of only its visible columns (CSS variables + container queries on the table, so a narrow panel counts, not the window), the header uses the same gap as the rows, and rows use a minimum height so wrapped cells no longer overlap. * test: wait for the title bar offset effect before asserting The bar shows once getTitleBarVisible resolves, but --termix-titlebar-height is set in a later passive effect, so reading it right after findByText raced (3-5 of 40 runs under load, on main too). * chore: rerun CI against dev-26.10.6 * fix: unlock passphrase keys once per connect burst (#1737) * feat: give ssh transports the host origin and sync id (#1717) * fix: wake other clients after a sync push (Plugin-Sync#1) * feat: look up local row ids by sync id for the sync plugin (Plugin-Sync#4) * feat: rail items can show a status dot (Plugin-Sync#5) * fix: add the desktop shared copy banner text (#1709) * feat: sidebar preference for alternating rows (#1712) * fix: striped rows text * feat: shell can open a saved host's editor for plugins (Plugin-SSH-Terminal#36) * fix: show the logo in the macos menu bar (#1728) * fix: number shortcuts skip the home tab (#1724) * fix: show plugins that could not be downloaded as failed (#1714) * fix: pass the host id as text when opening its editor * fix: retry a plugin bundle that was not ready yet (#1708) * fix: let commonjs plugins fall back to core packages on the desktop * fix: let non docker installs switch nginx to https (#1711) * feat: remove a folder share from its hosts too (#1719) * chore: changelog for merged pull requests * fix: accept the release .sig when installing a plugin from a file * feat: folder logins for shared hosts, read only plugin sync, full desktop builds * fix: test * fix: stop dev runner restart loops and narrow plugin watchers * chore: update translations and plugin pins * chore: lint, format, and bump version to 26.10.6 --------- Co-authored-by: renovys <renovy@gmail.com> Co-authored-by: renovys <180682734+renovys@users.noreply.github.com> Co-authored-by: Sebastian Cao <cycsmail@gmail.com> Co-authored-by: Jonathan Rehuel Lewerissa <jonathan.rehuel16@gmail.com> Co-authored-by: Rhiz3K <33246262+Rhiz3K@users.noreply.github.com>
201 lines
7.7 KiB
JSON
201 lines
7.7 KiB
JSON
{
|
|
"name": "termix",
|
|
"private": true,
|
|
"workspaces": [
|
|
"packages/*"
|
|
],
|
|
"version": "26.10.6",
|
|
"description": "Self-hosted, plugin-based server management.",
|
|
"author": "Karmaa",
|
|
"main": "electron/main.cjs",
|
|
"engines": {
|
|
"node": ">=22.12.0",
|
|
"npm": ">=11"
|
|
},
|
|
"scripts": {
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"postinstall": "node scripts/patch-app-builder-lib.cjs && node scripts/patch-better-sqlite3.cjs && node scripts/patch-nan.cjs && node scripts/patch-node-pty.cjs && node scripts/patch-ssh2-agent.cjs && node scripts/patch-ssh2-sk.cjs",
|
|
"prepare": "husky || true",
|
|
"prebuild": "node scripts/write-electron-build-info.cjs",
|
|
"lint": "node scripts/generate-dialect-schema.cjs --check && eslint . && node scripts/check-importmap-csp.cjs && node scripts/check-core-plugin-ids.cjs && node scripts/check-sdk-ui-exports.cjs && node scripts/check-button-colors.cjs && node scripts/check-sdk-guide.cjs && node scripts/check-test-locations.cjs && node scripts/check-changelog.cjs && node scripts/check-env-catalog.cjs",
|
|
"lint:fix": "eslint --fix .",
|
|
"type-check": "npm run build:sdk && tsc -b --force",
|
|
"test": "vitest run",
|
|
"verify:dialect": "tsx scripts/verify-dialects.mjs",
|
|
"test:watch": "vitest",
|
|
"test:ui": "vitest --ui",
|
|
"test:coverage": "vitest run --coverage",
|
|
"dev": "node scripts/dev.mjs",
|
|
"dev:electron": "node scripts/dev.mjs electron",
|
|
"dev:docker": "node scripts/dev.mjs docker",
|
|
"dev:frontend": "vite",
|
|
"build": "npm run build:sdk && vite build && node scripts/stamp-sw-build-info.cjs && tsc -p tsconfig.node.json && node -e \"require('fs').copyFileSync('src/backend/package.json','dist/backend/package.json')\" && npm run build:plugins",
|
|
"build:backend:core": "npm run build:sdk && tsc -p tsconfig.node.json && node -e \"require('fs').copyFileSync('src/backend/package.json','dist/backend/package.json')\"",
|
|
"build:backend": "npm run build:backend:core && npm run build:plugins",
|
|
"generate:openapi": "npm run build:sdk && node scripts/generate-openapi.mjs",
|
|
"electron:rebuild": "electron-rebuild -f -o better-sqlite3,@serialport/bindings-cpp,node-pty",
|
|
"build:win-portable": "npm run build && npm run electron:rebuild && electron-builder --win --dir",
|
|
"build:win-installer": "npm run build && npm run electron:rebuild && electron-builder --win --publish=never",
|
|
"build:linux-appimage": "npm run build && npm run electron:rebuild && electron-builder --linux AppImage",
|
|
"build:linux-targz": "npm run build && npm run electron:rebuild && electron-builder --linux tar.gz",
|
|
"build:mac": "npm run build && npm run electron:rebuild && electron-builder --mac --universal",
|
|
"schema:generate": "node scripts/generate-dialect-schema.cjs",
|
|
"schema:check": "node scripts/generate-dialect-schema.cjs --check",
|
|
"schema:migrations": "drizzle-kit generate --config=drizzle.config.sqlite.ts && drizzle-kit generate --config=drizzle.config.pg.ts && drizzle-kit generate --config=drizzle.config.mysql.ts",
|
|
"build:sdk": "npm run build --workspace @termix-ssh/plugin-sdk && node scripts/build-sdk-host.mjs",
|
|
"build:plugins": "node scripts/build-plugins.cjs",
|
|
"plugins:pin": "node scripts/pin-bundled-plugins.cjs"
|
|
},
|
|
"dependencies": {
|
|
"@noble/hashes": "^2.4.0",
|
|
"@tanstack/react-virtual": "^3.14.13",
|
|
"@types/compression": "^1.8.1",
|
|
"@types/semver": "^7.8.0",
|
|
"axios": "^1.19.0",
|
|
"bcryptjs": "^3.0.3",
|
|
"better-sqlite3": "^13.0.3",
|
|
"body-parser": "^2.4.0",
|
|
"chalk": "^6.0.0",
|
|
"compression": "^1.8.2",
|
|
"cookie-parser": "^1.4.7",
|
|
"cors": "^2.8.6",
|
|
"dotenv": "^17.4.2",
|
|
"drizzle-orm": "^0.45.2",
|
|
"electron-updater": "^6.8.9",
|
|
"express": "^5.2.1",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"motion": "^13.1.1",
|
|
"multer": "^2.3.0",
|
|
"mysql2": "^3.23.4",
|
|
"nanoid": "^6.0.1",
|
|
"node-pty": "^1.1.0",
|
|
"pg": "^8.23.0",
|
|
"semver": "^7.8.5",
|
|
"serialport": "^13.0.0",
|
|
"sharp": "^0.35.4",
|
|
"socks": "^2.8.10",
|
|
"ssh2": "^1.17.0",
|
|
"sshpk": "^1.18.0",
|
|
"tar": "^7.5.22",
|
|
"undici": "^8.10.2",
|
|
"ws": "^8.21.3"
|
|
},
|
|
"devDependencies": {
|
|
"@codemirror/theme-one-dark": "^6.1.3",
|
|
"@codemirror/view": "^6.43.12",
|
|
"@commitlint/cli": "^21.2.2",
|
|
"@commitlint/config-conventional": "^21.2.0",
|
|
"@deadendjs/swagger-jsdoc": "^8.1.2",
|
|
"@electron/notarize": "^3.1.1",
|
|
"@electron/rebuild": "^4.2.0",
|
|
"@eslint/js": "^10.0.1",
|
|
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
"@fontsource/fira-code": "^5.3.0",
|
|
"@fontsource/jetbrains-mono": "^5.3.0",
|
|
"@fontsource/source-code-pro": "^5.3.0",
|
|
"@peculiar/x509": "^2.1.0",
|
|
"@radix-ui/react-alert-dialog": "^1.1.23",
|
|
"@radix-ui/react-checkbox": "^1.3.11",
|
|
"@radix-ui/react-label": "^2.1.15",
|
|
"@radix-ui/react-popover": "^1.1.23",
|
|
"@radix-ui/react-scroll-area": "^1.2.18",
|
|
"@radix-ui/react-select": "^2.3.7",
|
|
"@radix-ui/react-slider": "^1.4.7",
|
|
"@radix-ui/react-slot": "^1.3.3",
|
|
"@radix-ui/react-switch": "^1.3.7",
|
|
"@radix-ui/react-tabs": "^1.1.21",
|
|
"@tailwindcss/vite": "^4.3.3",
|
|
"@testing-library/dom": "^10.4.2",
|
|
"@testing-library/jest-dom": "^7.0.1",
|
|
"@testing-library/react": "^16.3.3",
|
|
"@testing-library/user-event": "^14.6.7",
|
|
"@types/better-sqlite3": "^9.6.0",
|
|
"@types/cookie-parser": "^1.4.10",
|
|
"@types/cors": "^2.8.19",
|
|
"@types/express": "^5.0.6",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/multer": "^2.2.0",
|
|
"@types/node": "^26.2.0",
|
|
"@types/pg": "^8.23.1",
|
|
"@types/react": "^19.2.18",
|
|
"@types/react-dom": "^19.2.4",
|
|
"@types/ssh2": "^1.15.6",
|
|
"@types/sshpk": "^1.17.5",
|
|
"@types/supertest": "^7.2.1",
|
|
"@types/ws": "^8.18.1",
|
|
"@uiw/react-codemirror": "^4.25.11",
|
|
"@vitejs/plugin-react": "^6.1.1",
|
|
"@vitest/coverage-v8": "^4.1.11",
|
|
"@vitest/ui": "^4.1.11",
|
|
"@xterm/addon-clipboard": "^0.2.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"drizzle-kit": "^0.31.10",
|
|
"electron": "^43.4.1",
|
|
"electron-builder": "^26.15.3",
|
|
"eslint": "^10.8.1",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"eslint-plugin-react-refresh": "^0.5.7",
|
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
"globals": "^17.13.0",
|
|
"husky": "^9.1.7",
|
|
"i18next": "^26.4.2",
|
|
"i18next-browser-languagedetector": "^8.2.1",
|
|
"js-yaml": "^4.3.2",
|
|
"jsdom": "^30.0.1",
|
|
"lint-staged": "^17.2.0",
|
|
"lucide-react": "^1.33.0",
|
|
"postcss-pxtorem": "^6.1.0",
|
|
"prettier": "3.9.9",
|
|
"radix-ui": "^1.6.7",
|
|
"react": "^19.2.8",
|
|
"react-dom": "^19.2.8",
|
|
"react-i18next": "^17.0.14",
|
|
"reflect-metadata": "^0.2.2",
|
|
"sonner": "^2.0.8",
|
|
"supertest": "^7.3.0",
|
|
"tailwind-merge": "^3.5.0",
|
|
"tailwindcss": "^4.2.4",
|
|
"tw-animate-css": "^1.4.0",
|
|
"typescript": "~6.0.3",
|
|
"typescript-eslint": "^8.66.0",
|
|
"vite": "^8.2.2",
|
|
"vite-plugin-svgr": "^5.2.0",
|
|
"vitest": "^4.1.11"
|
|
},
|
|
"lint-staged": {
|
|
"*.{ts,tsx}": [
|
|
"eslint --fix",
|
|
"prettier --write"
|
|
],
|
|
"*.{js,jsx,mjs,cjs,json,css,md}": [
|
|
"prettier --write"
|
|
]
|
|
},
|
|
"overrides": {
|
|
"@electron/asar": "^4.2.0",
|
|
"@electron/get": "^5.0.0",
|
|
"dompurify": "^3.4.1",
|
|
"eslint-visitor-keys": "^4.2.1",
|
|
"prebuild-install": "npm:@mmomtchev/prebuild-install@1.0.2",
|
|
"rimraf": "file:vendor/rimraf-compat",
|
|
"brace-expansion@1": "^1.1.18",
|
|
"brace-expansion@2": "^2.1.4",
|
|
"brace-expansion@5": "^5.0.9",
|
|
"esbuild": "^0.28.1",
|
|
"fast-uri@3": "^3.1.6",
|
|
"ip-address": "^10.5.0",
|
|
"js-yaml@4": "^4.3.2",
|
|
"nanoid@3": "^3.3.18",
|
|
"postcss": "^8.5.26",
|
|
"tar": "^7.5.22",
|
|
"undici@6": "^6.28.0",
|
|
"undici@7": "^7.29.0",
|
|
"@xmldom/xmldom": "^0.8.15",
|
|
"browserslist": "^4.28.7",
|
|
"qs": "^6.16.0"
|
|
}
|
|
}
|