mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-08-29 18:31:33 +00:00
release-2.5.1 (#1067)
* chore(deps): bump node from 24-slim to 26-slim in /docker in the docker-major-updates group (#1021) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * chore(deps): bump node in /docker in the docker-major-updates group Bumps the docker-major-updates group in /docker with 1 update: node. Updates `node` from 24-slim to 26-slim --- updated-dependencies: - dependency-name: node dependency-version: 26-slim dependency-type: direct:production dependency-group: docker-major-updates ... Signed-off-by: dependabot[bot] <support@github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the dev-patch-updates group with 24 updates (#1023) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * chore(deps-dev): bump the dev-patch-updates group with 24 updates Bumps the dev-patch-updates group with 24 updates: | Package | From | To | | --- | --- | --- | | [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) | `2.5.1` | `2.5.2` | | [@codemirror/commands](https://github.com/codemirror/commands) | `6.10.3` | `6.10.4` | | [@codemirror/view](https://github.com/codemirror/view) | `6.43.1` | `6.43.5` | | [@radix-ui/react-accordion](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/accordion) | `1.2.14` | `1.2.15` | | [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog) | `1.1.17` | `1.1.18` | | [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/checkbox) | `1.3.5` | `1.3.6` | | [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.17` | `1.1.18` | | [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.18` | `2.1.19` | | [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label) | `2.1.10` | `2.1.11` | | [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.17` | `1.1.18` | | [@radix-ui/react-progress](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/progress) | `1.1.10` | `1.1.11` | | [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/scroll-area) | `1.2.12` | `1.2.13` | | [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.1` | `2.3.2` | | [@radix-ui/react-separator](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/separator) | `1.1.10` | `1.1.11` | | [@radix-ui/react-slider](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/slider) | `1.4.1` | `1.4.2` | | [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.1` | `1.3.2` | | [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs) | `1.1.15` | `1.1.16` | | [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.10` | `1.2.11` | | [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.1` | `4.3.2` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.2` | `6.0.3` | | [i18next](https://github.com/i18next/i18next) | `26.3.1` | `26.3.4` | | [radix-ui](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/radix-ui) | `1.6.0` | `1.6.1` | | [sharp](https://github.com/lovell/sharp) | `0.35.2` | `0.35.3` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.1` | `4.3.2` | Updates `@biomejs/biome` from 2.5.1 to 2.5.2 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.2/packages/@biomejs/biome) Updates `@codemirror/commands` from 6.10.3 to 6.10.4 - [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/commands/commits) Updates `@codemirror/view` from 6.43.1 to 6.43.5 - [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/view/commits) Updates `@radix-ui/react-accordion` from 1.2.14 to 1.2.15 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/accordion/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/accordion) Updates `@radix-ui/react-alert-dialog` from 1.1.17 to 1.1.18 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog) Updates `@radix-ui/react-checkbox` from 1.3.5 to 1.3.6 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/checkbox/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/checkbox) Updates `@radix-ui/react-dialog` from 1.1.17 to 1.1.18 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog) Updates `@radix-ui/react-dropdown-menu` from 2.1.18 to 2.1.19 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu) Updates `@radix-ui/react-label` from 2.1.10 to 2.1.11 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label) Updates `@radix-ui/react-popover` from 1.1.17 to 1.1.18 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover) Updates `@radix-ui/react-progress` from 1.1.10 to 1.1.11 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/progress/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/progress) Updates `@radix-ui/react-scroll-area` from 1.2.12 to 1.2.13 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/scroll-area) Updates `@radix-ui/react-select` from 2.3.1 to 2.3.2 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select) Updates `@radix-ui/react-separator` from 1.1.10 to 1.1.11 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/separator/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/separator) Updates `@radix-ui/react-slider` from 1.4.1 to 1.4.2 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slider/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slider) Updates `@radix-ui/react-switch` from 1.3.1 to 1.3.2 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch) Updates `@radix-ui/react-tabs` from 1.1.15 to 1.1.16 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs) Updates `@radix-ui/react-tooltip` from 1.2.10 to 1.2.11 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip) Updates `@tailwindcss/vite` from 4.3.1 to 4.3.2 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/@tailwindcss-vite) Updates `@vitejs/plugin-react` from 6.0.2 to 6.0.3 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.0.3/packages/plugin-react) Updates `i18next` from 26.3.1 to 26.3.4 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v26.3.1...v26.3.4) Updates `radix-ui` from 1.6.0 to 1.6.1 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/radix-ui/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/radix-ui) Updates `sharp` from 0.35.2 to 0.35.3 - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](https://github.com/lovell/sharp/compare/v0.35.2...v0.35.3) Updates `tailwindcss` from 4.3.1 to 4.3.2 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/tailwindcss) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.5.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@codemirror/commands" dependency-version: 6.10.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@codemirror/view" dependency-version: 6.43.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-accordion" dependency-version: 1.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-alert-dialog" dependency-version: 1.1.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-checkbox" dependency-version: 1.3.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dialog" dependency-version: 1.1.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dropdown-menu" dependency-version: 2.1.19 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-label" dependency-version: 2.1.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-popover" dependency-version: 1.1.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-progress" dependency-version: 1.1.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-scroll-area" dependency-version: 1.2.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-select" dependency-version: 2.3.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-separator" dependency-version: 1.1.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-slider" dependency-version: 1.4.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-switch" dependency-version: 1.3.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tabs" dependency-version: 1.1.16 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tooltip" dependency-version: 1.2.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@tailwindcss/vite" dependency-version: 4.3.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitejs/plugin-react" dependency-version: 6.0.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: i18next dependency-version: 26.3.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: radix-ui dependency-version: 1.6.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: sharp dependency-version: 0.35.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: tailwindcss dependency-version: 4.3.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the prod-patch-updates group with 2 updates (#1025) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * chore(deps): bump the prod-patch-updates group with 2 updates Bumps the prod-patch-updates group with 2 updates: [axios](https://github.com/axios/axios) and [nanoid](https://github.com/ai/nanoid). Updates `axios` from 1.18.0 to 1.18.1 - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.18.0...v1.18.1) Updates `nanoid` from 5.1.15 to 5.1.16 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/5.1.15...5.1.16) --- updated-dependencies: - dependency-name: axios dependency-version: 1.18.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: nanoid dependency-version: 5.1.16 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the prod-minor-updates group with 3 updates (#1026) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * chore(deps): bump the prod-minor-updates group with 3 updates Bumps the prod-minor-updates group with 3 updates: [js-yaml](https://github.com/nodeca/js-yaml), [motion](https://github.com/motiondivision/motion) and [undici](https://github.com/nodejs/undici). Updates `js-yaml` from 5.0.0 to 5.2.1 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/5.0.0...5.2.1) Updates `motion` from 12.40.0 to 12.42.2 - [Changelog](https://github.com/motiondivision/motion/blob/main/CHANGELOG.md) - [Commits](https://github.com/motiondivision/motion/compare/v12.40.0...v12.42.2) Updates `undici` from 8.5.0 to 8.7.0 - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v8.5.0...v8.7.0) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 5.2.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: motion dependency-version: 12.42.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: undici dependency-version: 8.7.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates ... Signed-off-by: dependabot[bot] <support@github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump electron from 42.4.1 to 43.0.0 in the major-updates group (#1027) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * chore(deps-dev): bump electron in the major-updates group Bumps the major-updates group with 1 update: [electron](https://github.com/electron/electron). Updates `electron` from 42.4.1 to 43.0.0 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v42.4.1...v43.0.0) --- updated-dependencies: - dependency-name: electron dependency-version: 43.0.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates ... Signed-off-by: dependabot[bot] <support@github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix MC syntax highlighting artifacts (#996) * Filter dashboard status hosts (#997) * Persist dashboard service link changes (#999) * Fix snippet text overflow (#1000) * Persist remote desktop credential auth (#1001) * Guard language switching failures (#1002) * Resolve tunnel source credentials (#1003) * Support Vault auth for monitors (#1004) * Fix Windows file delete command (#1005) * Fix release artifact checkout ref (#1006) * Fix command palette escape in fullscreen (#1008) * Fix alerts and audit log data normalization (#1010) * Fix macOS VNC protocol negotiation (#1012) * Fix port knocking before SSH connect (#1013) * Allow Escape to close link confirmation (#1014) * Prevent Electron modifier wheel zoom (#1016) * Fix credential auth optional password (#1009) * Retry transient terminal DNS lookups (#1011) * Retry transient terminal DNS lookups * Apply DNS retry to SSH entry points * Fix OIDC redirect forwarded port handling (#1007) * Preserve recent open tabs on startup (#1015) * Fix fish prompt OSC highlighting (#998) * Fix terminal font selection (#1018) * fix: font legibility (#1019) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * fix: font legibility Text was entirely unreadable in places for me. Especially with themes like Catppuccin. The muted-foreground text and the tags too similiar to the background. --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: russell <git@0896c69e.com> * fix(file-manager): chunked uploads fail with 'Expected multipart/form-data request' (#1020) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * fix(file-manager): use postForm for chunked uploads so multipart content-type is sent The fileManagerApi axios instance defaults to Content-Type: application/json. Axios 1.x's default transformRequest converts a FormData body to JSON whenever the request content type is application/json, so every chunk POSTed to /ssh/uploadFileChunk arrived as a JSON body like {"chunk":{}} and the backend rejected it with 400 'Expected multipart/form-data request'. This breaks all uploads of files larger than the 1.5 GiB chunking threshold. The non-chunked path already uses postForm for /ssh/uploadFileStream; use it for the chunk path too so axios keeps the FormData intact and the browser sets the multipart boundary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: implement OIDC back-channel logout support with session management (#1028) * feat: implement OIDC back-channel logout support with session management * Fix OIDC back-channel logout handling * Require logout token replay identifiers --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com> * Add API key host enrollment endpoint (#1029) * Fix tmux detection for non-POSIX shells (#1030) * Fix OPKSSH js-yaml ESM import (#1031) * Fix Android Vietnamese IME input (#1032) * Fix Firefox RDP clipboard paste (#1033) * Fix Proxmox discovery over HTTPS (#1041) * Fix external editor actions in file preview (#1042) * Allow pinned hosts with name sorting (#1043) * Fix Firefox desktop OIDC callback (#1044) * feat(session): add recording and replay (#1049) * Fix status checks through jump hosts (#1045) * Add terminal font size shortcuts (#1047) * feat: add Open File Manager to tab right-click menu (#1051) Co-authored-by: SankeerthNara <sankeerthnara@gmail.com> * perf: frontend request cache, poll pause, and code-split shell (#1052) Host/status caching, shell code-split, SSH pool waits, host-metrics concurrency, background-tab idle, per-host status subscriptions, homepage poll quieting, and virtualized host sidebar + file manager lists. * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * Merge commit from fork * feat: save quick connect sessions as hosts (#1055) * fix: restore sudo password autofill settings (#1056) * fix: preserve file editor position on save (#1057) * fix: sync cloud preference storage mode (#1058) * fix: render RDP sessions at native pixel density (#1059) * fix: restore database import in embedded desktop mode (#1060) * Update Auto-complete.tsx (#1061) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * chore: donation bar reporting wrong result * feat: add Open File Manager to tab right-click menu (#1046) * Revert "feat: add Open File Manager to tab right-click menu (#1046)" (#1050) This reverts commit0712fdd731. * Remove donation badge from README Removed donation badge from README. * Delete .github/workflows/donation-goal.yml * Update Auto-complete.tsx --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com> * feat(auth): opt-in OIDC DEK unlock for API-key requests (ALLOW_APIKEY_DATA_UNLOCK) (#1064) * chore: fix release workflow to merge docs branch * fix: svg donation generator push fail * fix: svg donation generator push fail * Update termix.rb * fix: svg donation generator push fail * chore: move donation badge to badges branch to avoid ruleset conflicts * chore: remove unneeded token from donation badge workflow * chore: debug donation badge commit step * fix: escape < character in donation SVG * fix: point donation badge to badges branch * chore: remove unused donation badge svg from main * Add Rack Genius logo to README Added Rack Genius logo to the README. * chore: improve donation goal svg generator to include stablecoins * chore: donation goal generator syntax error * chore: donation goal generator incorrect docs url usage * chore: donation bar reporting wrong result * feat: add Open File Manager to tab right-click menu (#1046) * Revert "feat: add Open File Manager to tab right-click menu (#1046)" (#1050) This reverts commit0712fdd731. * Remove donation badge from README Removed donation badge from README. * Delete .github/workflows/donation-goal.yml * feat(auth): opt-in OIDC DEK unlock for API-key requests API keys authenticate but cannot touch the encrypted credential/host store ('User data not unlocked') unless the user has a live interactive session, making them unusable for headless automation. For OIDC users the DEK is server-derivable (deriveOIDCSystemKey), so handleApiKeyAuth can unlock it without a password. Gated behind ALLOW_APIKEY_DATA_UNLOCK (default off) because enabling it widens the blast radius of a leaked API key. OIDC-only; password users are untouched. Refs #1063 --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Sankeerth Nara <sankeerthnara@gmail.com> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com> * chore: package lock sync * Add Proxmox guest auto sync (#1053) * draft: database layer refactor (#1054) * feat(sshid) - sshid.io equivalent for termix (#919) * feat(ssh-id): database schema, migrations and field encryption Adds ssh_identities, ssh_identity_keys and ssh_identity_ca tables (public keys stored plaintext for the unauthenticated resolver; CA private key registered for per-user field encryption), with UNIQUE(user_id), an index on ssh_identity_keys(identity_id), and idempotent CREATE TABLE migrations. * feat(ssh-id): backend API — resolver, key management, CA and certificates Mounts /sshid (nginx route added). Public text/plain authorized_keys resolver (+ exact /:algo filter, HTML viewer) and CA public-key endpoint; no-store + noindex headers on every resolver response including early 404s. Authenticated management: claim/rename/delete handle, add/import/generate/enable/delete keys, and a per-user CA (create/rotate/delete) with pure-Node OpenSSH certificate issuance. Audit logging on all mutations; UNIQUE races map to a precise 409. Unit tests for key parsing and certificate signing (ssh-keygen-validated). * feat(ssh-id): frontend panel, API client and i18n SSH ID panel wired into the app rail and AppShell: claim handle, resolver URL + curl one-liner, key list, generate, paste/import, CA enable/rotate/remove with server trust command, and per-key certificate issuance. API client re-exported through main-axios.ts; all strings i18n'd. * style(ssh-id): align panel and resolver page with Termix theme - Rebuild the SSH ID sidebar panel with the theme's square components (SectionCard / SettingRow / FakeSwitch) instead of rounded ad-hoc cards; use accent-brand and destructive tokens rather than raw red/green. - Fix panel scrolling: move overflow to a block scroll container so the cards keep their natural height instead of being clipped. - Restyle the public resolver HTML page (/sshid/u/:handle) to the Termix dark theme: square corners, #18181b/#303032 palette, #f59145 accent, uppercase section labels. - Tidy copy: 'Save To Credentials' label, drop the redundant generate intro, and correct the generate tooltip (the key is stored when saving to vault). * feat: rename to Termix ID, improve UI, backend inconsistencies, and general bug fixes --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * ci(deps): bump actions/checkout from 6 to 7 in the github-actions group (#922) Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 6 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the dev-patch-updates group with 11 updates (#923) Bumps the dev-patch-updates group with 11 updates: | Package | From | To | | --- | --- | --- | | [@codemirror/search](https://github.com/codemirror/search) | `6.7.0` | `6.7.1` | | [@codemirror/view](https://github.com/codemirror/view) | `6.43.0` | `6.43.1` | | [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.0` | `4.3.1` | | [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.8` | `4.1.9` | | [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) | `4.1.8` | `4.1.9` | | [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh) | `0.5.2` | `0.5.3` | | [lint-staged](https://github.com/lint-staged/lint-staged) | `17.0.7` | `17.0.8` | | [prettier](https://github.com/prettier/prettier) | `3.8.3` | `3.8.4` | | [sharp](https://github.com/lovell/sharp) | `0.35.1` | `0.35.2` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.0` | `4.3.1` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.8` | `4.1.9` | Updates `@codemirror/search` from 6.7.0 to 6.7.1 - [Changelog](https://github.com/codemirror/search/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/search/commits) Updates `@codemirror/view` from 6.43.0 to 6.43.1 - [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/view/commits) Updates `@tailwindcss/vite` from 4.3.0 to 4.3.1 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/@tailwindcss-vite) Updates `@vitest/coverage-v8` from 4.1.8 to 4.1.9 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/coverage-v8) Updates `@vitest/ui` from 4.1.8 to 4.1.9 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/ui) Updates `eslint-plugin-react-refresh` from 0.5.2 to 0.5.3 - [Release notes](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases) - [Changelog](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md) - [Commits](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/compare/v0.5.2...v0.5.3) Updates `lint-staged` from 17.0.7 to 17.0.8 - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v17.0.7...v17.0.8) Updates `prettier` from 3.8.3 to 3.8.4 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.8.3...3.8.4) Updates `sharp` from 0.35.1 to 0.35.2 - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](https://github.com/lovell/sharp/compare/v0.35.1...v0.35.2) Updates `tailwindcss` from 4.3.0 to 4.3.1 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/tailwindcss) Updates `vitest` from 4.1.8 to 4.1.9 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/vitest) --- updated-dependencies: - dependency-name: "@codemirror/search" dependency-version: 6.7.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@codemirror/view" dependency-version: 6.43.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@tailwindcss/vite" dependency-version: 4.3.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/coverage-v8" dependency-version: 4.1.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/ui" dependency-version: 4.1.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: eslint-plugin-react-refresh dependency-version: 0.5.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: lint-staged dependency-version: 17.0.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: prettier dependency-version: 3.8.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: sharp dependency-version: 0.35.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: tailwindcss dependency-version: 4.3.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: vitest dependency-version: 4.1.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump nanoid in the prod-patch-updates group (#925) Bumps the prod-patch-updates group with 1 update: [nanoid](https://github.com/ai/nanoid). Updates `nanoid` from 5.1.11 to 5.1.15 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/5.1.11...5.1.15) --- updated-dependencies: - dependency-name: nanoid dependency-version: 5.1.15 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the major-updates group with 5 updates (#926) Bumps the major-updates group with 5 updates: | Package | From | To | | --- | --- | --- | | [js-yaml](https://github.com/nodeca/js-yaml) | `4.2.0` | `5.0.0` | | [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.39.4` | `10.0.1` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.9.2` | `26.0.0` | | [concurrently](https://github.com/open-cli-tools/concurrently) | `9.2.1` | `10.0.3` | | [eslint](https://github.com/eslint/eslint) | `9.39.4` | `10.5.0` | Updates `js-yaml` from 4.2.0 to 5.0.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...5.0.0) Updates `@eslint/js` from 9.39.4 to 10.0.1 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/commits/v10.0.1/packages/js) Updates `@types/node` from 25.9.2 to 26.0.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `concurrently` from 9.2.1 to 10.0.3 - [Release notes](https://github.com/open-cli-tools/concurrently/releases) - [Commits](https://github.com/open-cli-tools/concurrently/compare/v9.2.1...v10.0.3) Updates `eslint` from 9.39.4 to 10.5.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/compare/v9.39.4...v10.5.0) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-updates - dependency-name: "@eslint/js" dependency-version: 10.0.1 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates - dependency-name: "@types/node" dependency-version: 26.0.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates - dependency-name: concurrently dependency-version: 10.0.3 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates - dependency-name: eslint dependency-version: 10.5.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat(ssh): add HashiCorp Vault SSH signer authentication * fix: small fixes to vault feature to align with Termix codebase * chore: add view docs links for vault/termix id * fix: file upload fails with 400 and missing schema migrations on upgrade (#929) Two bugs introduced in v2.4.1: 1. uploadFileStream uses fileManagerApi.post() which triggers axios's transformRequest to JSON-serialize the FormData because the instance default Content-Type is application/json. Change to postForm() which sets Content-Type: multipart/form-data so the browser XHR sends the correct multipart body with boundary. 2. Two schema items added to schema.ts were not included in migrateSchema() in db/index.ts, causing 500 errors on existing installations upgrading from v2.4.0: - user_preferences.status_color_scheme (no such column) - dashboard_service_links table (no such table) Fixes #928 Co-authored-by: sash <sash@fominykh.io> * fix: support PuTTY PPK ssh keys (#930) * fix: chunk large file manager uploads (#932) * fix: route dashboard hosts by protocol (#934) * fix: resolve tunnel endpoints reliably (#935) * Fix Electron OIDC browser auth failures (#936) * Allow RDP connections without stored credentials (#937) * Sync role credential shares for OIDC users (#938) * Fix terminal link dialog layering (#940) * Confirm large files before opening editor (#942) * Confirm closing active host connections (#943) * Preserve file path case in file manager UI (#941) * fix: preserve unicode guacamole tokens (#933) * Persist VNC authentication settings (#944) * Fix Guacamole websocket base path (#946) * Promote file manager terminals to tabs (#939) * Guard Guacamole disconnect during startup (#945) * chore: increment ver * feat: bitwarden ssh agent integration * feat: serial connections support * fix: various small bug fixes * feat: open all sessions in a folder and terminal custom theme color support * feat: cross host file manager clipboard and several small bug fixes * feat: tailscale/wireguard support and added a new status state for when backend is checking status * feat: grafana like server stats history, new alert system, ntfy/webhook support * feat: new grid and widget based homepage function * feat: new donate button in dashboard * fix: alert ui incorrectly using termix css and fixed issue with alert system not loading * chore: start database layer refactor * docs: plan database layer refactor * docs: audit database layer refactor phase zero * chore: add database runtime adapter skeleton * chore: add settings repository skeleton * chore: add user session repository skeleton * chore: add host credential repository skeleton * chore: add field encryption boundary * chore: migrate settings route slice * chore: migrate user settings routes * chore: migrate host metrics settings routes * chore: migrate acme settings route * chore: migrate terminal settings route * chore: migrate tailscale settings read * chore: migrate guacamole settings reads * chore: migrate session timeout settings reads * chore: migrate auth route settings reads * chore: migrate host metrics settings reads * chore: migrate startup settings reads * chore: migrate user settings cleanup * chore: migrate password reset settings * chore: migrate oidc legacy settings read * chore: migrate user route settings slice * chore: migrate oidc state settings * chore: migrate user login settings reads * chore: migrate user crypto settings * chore: consolidate startup settings defaults * chore: consolidate database settings import export * chore: migrate core session auth paths * chore: migrate remaining session auth paths * chore: migrate admin user routes * chore: migrate user route admin checks * chore: migrate user lifecycle routes * chore: migrate auth user lookups * chore: migrate oidc user routes * chore: migrate api key repository paths * docs: add database gray rollout guide * chore: migrate trusted device paths * chore: migrate user session route user lookups * chore: add database repository rollout guard * chore: expose repository rollout status * chore: warn on repository rollout misconfiguration * chore: migrate remaining user lookup helpers * chore: migrate ssh user lookups * chore: migrate user settings admin lookups * chore: migrate acme ssl user lookups * chore: migrate audit log admin checks * chore: migrate oidc account user updates * chore: migrate password reset user updates * chore: migrate user deletion core records * chore: migrate snippet audit user lookups * chore: migrate ldap user sync paths * chore: migrate totp user updates * chore: migrate rbac user checks * chore: migrate rbac role paths * chore: migrate permission role lookups * chore: migrate rbac access list reads * chore: migrate shared rbac reads * chore: migrate rbac access writes * chore: migrate permission host access * chore: migrate role host access lookup * chore: migrate snippet access lookup * chore: migrate shared credential access lookups * chore: migrate host access cleanup writes * chore: migrate host list access checks * chore: migrate host access cleanup routes * chore: migrate shared credential role lookups * chore: migrate user role cleanup * chore: migrate admin role sync * chore: migrate ldap role sync * chore: migrate user role assignment * chore: migrate sso provider access * chore: migrate audit log access * chore: migrate user preference access * chore: migrate open tab access * chore: migrate dismissed alert access * chore: migrate homepage layout access * chore: migrate network topology access * chore: migrate dashboard service link access * chore: migrate command history access * chore: migrate recent activity cleanup * chore: migrate ssh credential usage access * chore: migrate transfer recent access * chore: migrate file manager bookmark access * chore: migrate c2s tunnel preset access * chore: migrate homepage item access * chore: migrate session recording access * chore: migrate tmux session tag access * chore: migrate opkssh token access * chore: migrate vault token access * chore: migrate vault profile access * chore: migrate host metrics preference access * chore: migrate host health access * chore: migrate host metrics history access * chore: migrate alert persistence access * chore: route alert host lookup through repository * chore: migrate user data export reads * chore: route host metrics stats sync through repository * chore: migrate host folder persistence * chore: migrate host resolution reads * chore: route jump host resolution reads * chore: route docker console jump host reads * chore: route docker ssh resolution reads * chore: route proxmox discovery resolution reads * chore: route file manager activity host reads * chore: route host metrics resolution reads * chore: route ssh auth credential reads * chore: route tunnel endpoint credential reads * chore: route credential deployment resolution reads * chore: route command history host flag reads * chore: route snippet execution resolution reads * chore: route terminal host resolution reads * chore: route vault oidc host resolution reads * chore: route wake on lan host reads * chore: route internal host list reads * chore: route host key verification persistence * chore: route credential read paths * chore: route credential host usage reads * chore: route credential folder rename * chore: route host owner access checks * chore: route shared credential source reads * chore: route user host credential cleanup * chore: route credential delete reads * chore: route credential update reads * chore: route host credential reads * chore: route host read paths * chore: route host projection reads * chore: route host list reads * chore: route snippet read paths * chore: route snippet folder writes * chore: route snippet crud paths * chore: route snippet bulk import * chore: route rbac ownership reads * chore: route user count reads * chore: route cleanup snippets folders * chore: route shared credential persistence * chore: route dashboard activity * chore: route guacamole host reads * chore: route host bulk lookups * chore: remove unlock-only simple db ops * chore: route host autostart persistence * chore: route ldap provisioning through users * chore: route credential encrypted writes * chore: route host encrypted writes * chore: route bulk host encrypted writes * chore: route termix id credentials * chore: route termix id ca persistence * chore: route termix identity persistence * chore: route credential system migration * chore: isolate user encryption migration storage * chore: remove legacy simple db ops * chore: isolate legacy sqlite migration copy * chore: route database settings import export * chore: route database host credential export * chore: route database host credential import * chore: route database file-manager import export * chore: route database alert usage import export * chore: route database user checks * chore: isolate auth lazy migration storage * chore: route explicit database saves * chore: initialize database save boundary * chore: route migration snapshot saves * chore: isolate sqlite import constraints * chore: route import sqlite boundary * chore: route user encryption migration store * chore: centralize current repository runtime * chore: route more current repositories * chore: route activity repository runtimes * chore: route token repository runtimes * chore: route health repository runtimes * chore: route identity repository runtimes * chore: route rbac repository runtime * chore: centralize current sqlite runtime access * chore: route user deletion key cleanup * chore: route user deletion vault cleanup * chore: route user deletion homepage cleanup * chore: route user deletion health cleanup * chore: route user deletion alert cleanup * chore: route user deletion identity cleanup * chore: add database layer preupgrade backup * Fix database repository type errors * fix: complete post-merge compile fixes for database refactor Restore missing DatabaseSaveTrigger/getDb imports, session log format fallback, OIDC provider resolution, guacamole recording insert, and passwordFallbackOnly typing after merging current dev. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: DivByZero <mr.oplus@yahoo.fr> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: devdanetra <46488477+devdanetra@users.noreply.github.com> Co-authored-by: Aleksandr Fominykh <neoformalex@users.noreply.github.com> Co-authored-by: sash <sash@fominykh.io> * refactor(db): collapse repository rollout scaffolding into single factory Repositories are now the only data path. Replaces the 41 current-*-repository wrapper files, the DATABASE_LAYER_REPOSITORY_ROLLOUT flag/alias map and the unused database/runtime adapter with repositories/factory.ts, a plain DatabaseContext type and an in-memory TestSqliteDatabase test harness. * refactor(db): route remaining raw DB access through repositories proxmox, session-log, oidc-utils, webauthn and guacamole recording now use repositories (new WebauthnCredentialRepository; SsoProviderRepository listEnabled; HostRepository findDecryptedByIdAs/listProxmoxEnabled). Remaining raw access: db boot code, simple-db-ops and docker.ts, which are removed/restructured in later phases. * feat(crypto): add UserKeyManager with system-wrapped per-user DEKs New utils/user-keys.ts: one random 32-byte DEK per user, wrapped AES-256-GCM under an HKDF key derived from the system ENCRYPTION_KEY (per-user info string + AAD binding, versioned v3 wrap format stored in settings). Synchronous unwrap-on-demand with a 15-minute cache so the existing DataCrypto facade keeps its sync call sites. Not wired up yet. * feat(crypto): boot-time DEK migration to system-wrapped v3 format utils/crypto-migration/dek-migration.ts carries the legacy unwrap paths (PBKDF2 password KEK, OIDC/WebAuthn system keys, hardcoded-default fallback) and migrates every server-unwrappable DEK to the v3 wrap at startup. Password-wrapped DEKs migrate at next login or from a live session via adoptRecoveredDEK. Legacy rows are kept for now; cleanup flips on once the new path is authoritative. * refactor(crypto): make system-wrapped DEKs the authoritative key path DataCrypto and AuthManager now read keys through UserKeyManager: DEKs are always unwrappable server-side, so the in-memory unlock session, DEK-in-JWT wrapping, session-expiry data locks and ALLOW_APIKEY_DATA_UNLOCK are gone. utils/user-crypto.ts is deleted; boot migration now cleans legacy wraps. A one-release shim adopts DEKs from legacy dataKeyWrap tokens so active password users migrate without re-login. Password login migrates legacy password-wrapped DEKs via migratePasswordUserAtLogin. * refactor(crypto): remove pending share queue and credential sharing key With server-unwrappable DEKs both sides of a share are always available, so the needsReEncryption queue, CREDENTIAL_SHARING_KEY and the system_* shadow columns on ssh_credentials are gone. A one-time boot cleanup re-creates legacy pending share copies where possible (dropping unresolvable ones with a warning) and drops the legacy columns. * feat(auth): non-destructive password resets and admin reset endpoint Password resets no longer destroy user data: the DEK is system-wrapped, so forgot-password and admin resets are just a hash update plus session revoke. The wipe branch survives only for accounts that never logged in since the encryption upgrade and now requires explicit confirmDataWipe (surfaced as a 409 DATA_WIPE_REQUIRED; the reset UI asks for confirmation). Adds POST /users/admin/reset-password and removes the dead re-encryption paths. * refactor(ssh): consolidate four jump-host chain copies into one module terminal, host-metrics and docker now use ssh/jump-host-chain.ts (already shared by file-manager, tmux-monitor and docker-console); docker's inline copy also drops its raw SimpleDBOps host/credential lookups in favor of repositories. * refactor(ssh): single shared createConnectionLog helper file-manager-log.ts becomes ssh/connection-log.ts; the copies in docker.ts and host-metrics-helpers.ts are gone. * refactor(ssh): split docker module into layered directory ssh/docker/{index,routes,session-manager,container-routes,console}.ts: server boot and wiring in index, HTTP handlers in routes, SSH session registry and command execution in session-manager. Code motion only; port 30007/30009 and endpoints unchanged. Swagger now scans ssh subdirectories. * refactor(ssh): split tunnel module into layered directory ssh/tunnel/{index,routes,manager}.ts: server boot in index, HTTP handlers in routes, tunnel state and engine (connect/retry/autostart) in manager. Code motion only; port 30003 and endpoints unchanged. * refactor(backend): reorganize top-level layout - ssh/ renamed to hosts/ (it covers SSH, RDP, VNC, Telnet, Docker, metrics) - serial/serial.ts and guacamole/ moved inside hosts/ - dashboard.ts and homepage.ts moved to services/ - swagger.ts moved to utils/ with adjusted scan globs Import paths and the generate:openapi script updated; ports and endpoints unchanged. * refactor(tests): move backend tests into src/backend/tests mirror tree Backend *.test.ts files (and the test-support harness) no longer sit next to source files; they live under src/backend/tests/ mirroring the source layout. Imports rewritten accordingly; CLAUDE.md convention updated. * refactor(hosts): group host modules into per-feature directories file-manager/, metrics/ (incl. widgets, managers, alert-engine), terminal/, tmux/ and tunnel/ each own their files; docker/ gains container-runtime. Genuinely shared helpers (jump-host chain, host resolver, connection pool, opkssh, vault, serial) stay at hosts/ root. Pure file moves with import path updates; mirrored test paths follow. * refactor(backend): final cleanup pass - re-register WebAuthn passkey routes (registration was dropped in the #1054 merge, breaking passkey login) and document all six endpoints - delete utils/simple-db-ops.ts (last caller migrated to DataCrypto) - starter: use the typed serverReady export, collapse the four-way version lookup to env then package.json candidates - add OpenAPI JSDoc to c2s-tunnel-presets endpoints - strip block-divider comment banners * feat: remove legacy "data_unlocked" field * feat: refactor rbac/sharing to support new permissions and auth types * feat: refactor rbac/sharing to support new permissions and auth types * feat: add "id" to user profile hide list * chore: root cleanup * feat: add more donation references and a 30-day donation reminder * chore: update readme * feat: automate beta tests * feat: add links to milestones * fix: hoist github/google SSO defaults to module scope (#1065) * fix(ssh-tools): allow clipboard paste in key recording field (#1066) The broadcast key-recording input was marked readOnly, which makes browsers block paste entirely (no context-menu Paste, Ctrl+V does nothing). handleKeyDown also called preventDefault() unconditionally, swallowing the Ctrl+V shortcut before a paste event could even fire. Let Ctrl/Cmd+V pass through in handleKeyDown, drop readOnly, and add an onPaste handler that reads the clipboard text and broadcasts it to the selected terminals like any other captured keystroke. Signed-off-by: emreumar <emreumar@users.noreply.github.com> Co-authored-by: emreumar <emreumar@users.noreply.github.com> * chore: write release notes * chore: update release notes * chore: update readmes * chore: add crypto only reminder in en.json * fix: macOS and cask errors on release workflow * chore: sync Crowdin translations for 2.5.1 --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: emreumar <emreumar@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com> Co-authored-by: Russell Poovey <09.our_seekers@icloud.com> Co-authored-by: russell <git@0896c69e.com> Co-authored-by: Subedi Bibek <77529535+questbibek@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Alexander Elsner <101340634+Bensonheimer992@users.noreply.github.com> Co-authored-by: SankeerthNara <sankeerthnara@gmail.com> Co-authored-by: Stephan Groth <96803994+Kalvalax@users.noreply.github.com> Co-authored-by: DivByZero <mr.oplus@yahoo.fr> Co-authored-by: devdanetra <46488477+devdanetra@users.noreply.github.com> Co-authored-by: Aleksandr Fominykh <neoformalex@users.noreply.github.com> Co-authored-by: sash <sash@fominykh.io> Co-authored-by: lhojun <ldgs3324@gmail.com> Co-authored-by: Yunus Emre Umar <77045015+emre155@users.noreply.github.com> Co-authored-by: emreumar <emreumar@users.noreply.github.com>
This commit is contained in:
co-authored by
emreumar
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ZacharyZcR
Russell Poovey
russell
Subedi Bibek
Claude Fable 5
Alexander Elsner
SankeerthNara
Stephan Groth
DivByZero
devdanetra
Aleksandr Fominykh
sash
lhojun
Yunus Emre Umar
parent
fba645e92e
commit
ddbdd5c437
+418
-287
@@ -106,8 +106,265 @@
|
||||
"filterTagsGroup": "Tags"
|
||||
},
|
||||
"homepage": {
|
||||
"failedToLoadAlerts": "Failed to load alerts",
|
||||
"failedToDismissAlert": "Failed to dismiss alert"
|
||||
"title": "Homepage",
|
||||
"addWidget": "Add Widget",
|
||||
"editWidget": "Edit Widget",
|
||||
"deleteWidget": "Delete",
|
||||
"widgetTypes": "Widget Types",
|
||||
"serviceLink": "Service Link",
|
||||
"folder": "Folder",
|
||||
"clock": "Clock",
|
||||
"notes": "Notes",
|
||||
"hostStatus": "Host Status",
|
||||
"bookmarkList": "Bookmarks",
|
||||
"zoomIn": "Zoom In",
|
||||
"zoomOut": "Zoom Out",
|
||||
"resetView": "Reset View",
|
||||
"lockLayout": "Lock Layout",
|
||||
"unlockLayout": "Unlock Layout",
|
||||
"noWidgets": "Right-click or click + to add your first widget",
|
||||
"openFullView": "Open Full View",
|
||||
"previewTitle": "Homepage Preview",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"title_label": "Title",
|
||||
"widgetTitlePlaceholder": "Widget title (optional)",
|
||||
"url": "URL",
|
||||
"imageUrl": "Custom Image URL",
|
||||
"imageUrlHint": "Leave blank to use the site favicon automatically",
|
||||
"showImage": "Show Image",
|
||||
"description": "Description",
|
||||
"color": "Color",
|
||||
"icon": "Icon",
|
||||
"expanded": "Expanded by default",
|
||||
"timezone": "Timezone",
|
||||
"showSeconds": "Show seconds",
|
||||
"format12h": "12-hour",
|
||||
"format24h": "24-hour",
|
||||
"content": "Content",
|
||||
"backgroundColor": "Background Color",
|
||||
"host": "Host",
|
||||
"showMetrics": "Show Metrics",
|
||||
"links": "Links",
|
||||
"addLink": "Add Link",
|
||||
"linkLabel": "Label",
|
||||
"linkUrl": "URL",
|
||||
"removeLink": "Remove",
|
||||
"categoryLinks": "Links",
|
||||
"categoryInfo": "Info",
|
||||
"categorySystem": "System",
|
||||
"widgetServiceLinkDesc": "A clickable tile linking to a service URL",
|
||||
"widgetFolderDesc": "A container to group related widgets",
|
||||
"widgetClockDesc": "A live clock with configurable timezone",
|
||||
"widgetNotesDesc": "A markdown notes widget",
|
||||
"widgetHostStatusDesc": "Shows live CPU, memory and disk for an SSH host",
|
||||
"widgetBookmarkListDesc": "A list of quick links",
|
||||
"copyLink": "Copy Link",
|
||||
"linkCopied": "Link copied!",
|
||||
"location": "Location",
|
||||
"temperatureUnit": "Temperature Unit",
|
||||
"showForecast": "Show 3-day forecast",
|
||||
"scrolling": "Allow Scrolling",
|
||||
"feedUrl": "Feed URL",
|
||||
"maxItems": "Max Items",
|
||||
"showDescription": "Show Description",
|
||||
"widgetWeatherName": "Weather",
|
||||
"widgetWeatherDesc": "Live weather for any location",
|
||||
"widgetIframeName": "iFrame Embed",
|
||||
"widgetIframeDesc": "Embed any URL in an iframe",
|
||||
"widgetRssName": "RSS Feed",
|
||||
"widgetRssDesc": "Display items from an RSS or Atom feed",
|
||||
"dragToFolder": "Drag widgets here or use + to add",
|
||||
"showDisk": "Show Disk Usage",
|
||||
"addToFolder": "Add widget to folder",
|
||||
"noHostSelected": "No host selected",
|
||||
"metricsNotAvailable": "Metrics not available",
|
||||
"selectHost": "Select a host...",
|
||||
"displayedMetrics": "Displayed Metrics",
|
||||
"metricCpu": "CPU",
|
||||
"metricMemory": "Memory",
|
||||
"metricDisk": "Disk",
|
||||
"metricUptime": "Uptime",
|
||||
"metricSystem": "System",
|
||||
"metricOs": "OS",
|
||||
"metricKernel": "Kernel",
|
||||
"metricHostname": "Hostname",
|
||||
"metricNetwork": "Network",
|
||||
"metricProcesses": "Processes",
|
||||
"metricProcessesTotal": "total",
|
||||
"metricProcessesRunning": "running",
|
||||
"categoryMonitoring": "Monitoring",
|
||||
"loading": "Loading...",
|
||||
"noData": "No data available",
|
||||
"allClear": "All clear",
|
||||
"acknowledgeAlert": "Acknowledge",
|
||||
"noPingUrls": "No URLs configured",
|
||||
"pingLabel": "Label",
|
||||
"addPingUrl": "Add URL",
|
||||
"showLatency": "Show Latency",
|
||||
"refreshInterval": "Refresh Interval",
|
||||
"seconds": "seconds",
|
||||
"filterActivityTypes": "Filter Types",
|
||||
"filterTypesHint": "Leave empty to show all",
|
||||
"showTimestamp": "Show Timestamp",
|
||||
"uptimeUnavailable": "Uptime unavailable",
|
||||
"uptimeLabel": "Uptime",
|
||||
"overviewVersion": "Version",
|
||||
"overviewUpdate": "Up to date",
|
||||
"overviewUpdateAvailable": "Update available",
|
||||
"overviewDatabase": "Database",
|
||||
"overviewUptime": "Uptime",
|
||||
"noHosts": "No hosts configured",
|
||||
"hostGridHosts": "Hosts",
|
||||
"hostGridAllHint": "Leave empty to show all hosts",
|
||||
"columns": "Columns",
|
||||
"showIp": "Show IP Address",
|
||||
"connectionType": "Connection Type",
|
||||
"layout": "Layout",
|
||||
"showStatus": "Show Status",
|
||||
"showHostName": "Show Host Name",
|
||||
"noDockerActivity": "No Docker activity",
|
||||
"noActivity": "No activity",
|
||||
"showAcknowledged": "Show Acknowledged",
|
||||
"showCurrentValue": "Show Current Value",
|
||||
"chartMetric": "Metric",
|
||||
"metricRange": "Range",
|
||||
"widgetMetricsChartName": "Metrics Chart",
|
||||
"widgetMetricsChartDesc": "Historical CPU, memory, disk or network chart for a host",
|
||||
"widgetHostGridName": "Host Grid",
|
||||
"widgetHostGridDesc": "Grid view of SSH host statuses",
|
||||
"widgetAlertFeedName": "Alert Feed",
|
||||
"widgetAlertFeedDesc": "Live alert firings with acknowledge support",
|
||||
"widgetPingStatusName": "Ping Status",
|
||||
"widgetPingStatusDesc": "HTTP ping status for one or more URLs",
|
||||
"widgetRecentActivityName": "Recent Activity",
|
||||
"widgetRecentActivityDesc": "Scrollable feed of recent Termix activity",
|
||||
"widgetTermixUptimeName": "Termix Uptime",
|
||||
"widgetTermixUptimeDesc": "Live uptime counter for the Termix server",
|
||||
"widgetSystemOverviewName": "System Overview",
|
||||
"widgetSystemOverviewDesc": "Termix version, database health and uptime at a glance",
|
||||
"widgetSshQuickConnectName": "SSH Quick Connect",
|
||||
"widgetSshQuickConnectDesc": "One-click buttons to open SSH sessions",
|
||||
"widgetDockerActivityName": "Docker Activity",
|
||||
"widgetDockerActivityDesc": "Recent Docker container events across all hosts",
|
||||
"widgetCalendarName": "Calendar",
|
||||
"widgetCalendarDesc": "A monthly calendar with today highlighted",
|
||||
"widgetCountdownName": "Countdown",
|
||||
"widgetCountdownDesc": "Countdown timer to a target date",
|
||||
"widgetSearchBarName": "Search Bar",
|
||||
"widgetSearchBarDesc": "Quick web search widget",
|
||||
"widgetTextBannerName": "Text Banner",
|
||||
"widgetTextBannerDesc": "A bold label or section header for the canvas",
|
||||
"widgetImageWidgetName": "Image",
|
||||
"widgetImageWidgetDesc": "Display an image from a URL",
|
||||
"widgetMarkdownNotesName": "Markdown Notes",
|
||||
"widgetMarkdownNotesDesc": "Rich notes with inline markdown rendering",
|
||||
"widgetCustomApiName": "Custom API",
|
||||
"widgetCustomApiDesc": "Fetch and display data from any JSON API",
|
||||
"widgetServiceGridName": "Service Grid",
|
||||
"widgetServiceGridDesc": "A configurable grid of service tile links",
|
||||
"widgetDashboardLinksName": "Dashboard Links",
|
||||
"widgetDashboardLinksDesc": "Display your configured service links from the dashboard",
|
||||
"widgetSearchLinksName": "Search Shortcuts",
|
||||
"widgetSearchLinksDesc": "Quick search shortcut buttons with inline input",
|
||||
"widgetLinkTreeName": "Link Tree",
|
||||
"widgetLinkTreeDesc": "Grouped sections of links with headings",
|
||||
"calMon": "Mo",
|
||||
"calTue": "Tu",
|
||||
"calWed": "We",
|
||||
"calThu": "Th",
|
||||
"calFri": "Fr",
|
||||
"calSat": "Sa",
|
||||
"calSun": "Su",
|
||||
"startOnMonday": "Start week on Monday",
|
||||
"countdownNoDate": "No target date set",
|
||||
"countdownPast": "Event has passed",
|
||||
"countdownDays": "days",
|
||||
"countdownHours": "hrs",
|
||||
"countdownMinutes": "min",
|
||||
"countdownSeconds": "sec",
|
||||
"countdownLabel": "Label",
|
||||
"countdownLabelPlaceholder": "e.g. Launch Day",
|
||||
"countdownShowDays": "Show Days",
|
||||
"countdownShowHours": "Show Hours",
|
||||
"targetDate": "Target Date",
|
||||
"searchEngine": "Search Engine",
|
||||
"customSearchUrl": "Custom Search URL",
|
||||
"searchPlaceholder": "Search...",
|
||||
"searchGo": "Go",
|
||||
"searchPlaceholderLabel": "Placeholder Text",
|
||||
"searchPlaceholderHint": "Text shown inside the search input",
|
||||
"openInNewTab": "Open in New Tab",
|
||||
"searchQueryPlaceholder": "Enter query...",
|
||||
"noSearchShortcuts": "No shortcuts configured",
|
||||
"addSearchShortcut": "Add Shortcut",
|
||||
"fontSize": "Font Size",
|
||||
"textAlign": "Text Align",
|
||||
"fontWeight": "Font Weight",
|
||||
"clearColor": "Clear Color",
|
||||
"imageFit": "Image Fit",
|
||||
"imageLinkUrl": "Link URL",
|
||||
"noImage": "No image URL set",
|
||||
"altText": "Alt Text",
|
||||
"altTextPlaceholder": "Describe the image",
|
||||
"renderMarkdown": "Render Markdown",
|
||||
"displayMode": "Display Mode",
|
||||
"displayField": "Display Field",
|
||||
"jsonPath": "JSON Path",
|
||||
"customApiLabel": "Label",
|
||||
"customApiLabelPlaceholder": "e.g. Temperature",
|
||||
"customApiUnit": "Unit",
|
||||
"customApiNoUrl": "No API URL configured",
|
||||
"customApiError": "Failed to fetch",
|
||||
"customApiNotArray": "Response is not an array",
|
||||
"addService": "Add Service",
|
||||
"showLabels": "Show Labels",
|
||||
"iconSize": "Icon Size",
|
||||
"noDashboardLinks": "No dashboard links configured",
|
||||
"noLimit": "No limit",
|
||||
"sectionHeading": "Section Heading",
|
||||
"addSection": "Add Section",
|
||||
"compactMode": "Compact Mode",
|
||||
"showDetailed": "Show Detailed",
|
||||
"selectHosts": "Select Hosts",
|
||||
"allHosts": "All hosts",
|
||||
"listLayout": "List",
|
||||
"gridLayout": "Grid",
|
||||
"terminal": "Terminal",
|
||||
"files": "Files",
|
||||
"docker": "Docker",
|
||||
"range15m": "15 minutes",
|
||||
"range1h": "1 hour",
|
||||
"range6h": "6 hours",
|
||||
"range24h": "24 hours",
|
||||
"metricNetRx": "Net Download",
|
||||
"metricNetTx": "Net Upload",
|
||||
"severityFilter": "Severity Filter",
|
||||
"filterAll": "All",
|
||||
"accentColor": "Accent Color",
|
||||
"widgetSshTerminalName": "SSH Terminal",
|
||||
"widgetSshTerminalDesc": "An inline SSH terminal connected to a configured host",
|
||||
"sshTerminalNoHost": "No host configured",
|
||||
"sshTerminalConnect": "Connect",
|
||||
"sshTerminalAutoConnect": "Auto-connect on load",
|
||||
"widgetQuickConnectName": "Quick Connect",
|
||||
"widgetQuickConnectDesc": "One-click launch buttons for any connection type across your hosts",
|
||||
"connectionTypes": "Connection Types",
|
||||
"connType_terminal": "Terminal",
|
||||
"connType_files": "File Manager",
|
||||
"connType_docker": "Docker",
|
||||
"connType_tunnel": "Tunnel",
|
||||
"connType_host-metrics": "Host Metrics",
|
||||
"connType_rdp": "RDP",
|
||||
"connType_vnc": "VNC",
|
||||
"connType_telnet": "Telnet",
|
||||
"widgetFileManagerName": "File Manager",
|
||||
"widgetFileManagerDesc": "Embedded SFTP file manager for a configured host",
|
||||
"widgetDockerName": "Docker Manager",
|
||||
"widgetDockerDesc": "Embedded Docker container manager for a configured host",
|
||||
"widgetTunnelName": "Tunnel Manager",
|
||||
"widgetTunnelDesc": "Embedded SSH tunnel manager for a configured host",
|
||||
"widgetNoHostSelected": "No host configured"
|
||||
},
|
||||
"serverConfig": {
|
||||
"title": "Server Configuration",
|
||||
@@ -317,7 +574,7 @@
|
||||
"status": "Status",
|
||||
"folderRenamed": "Folder \"{{oldName}}\" renamed to \"{{newName}}\" successfully",
|
||||
"failedToRenameFolder": "Failed to rename folder",
|
||||
"movedToFolder": "Moved to \"{{folder}}\"",
|
||||
"movedToFolder": "Moved {{count}} host(s) to \"{{folder}}\"",
|
||||
"editHostTooltip": "Edit host",
|
||||
"statusChecks": "Status Checks",
|
||||
"metricsCollection": "Metrics Collection",
|
||||
@@ -607,6 +864,21 @@
|
||||
"proxmoxDockerDetectionDesc": "Comma-separated name patterns that enable Docker for matching guests",
|
||||
"proxmoxPreferredRanges": "Preferred IP ranges",
|
||||
"proxmoxPreferredRangesDesc": "Comma-separated prefixes in priority order for IP selection when a guest has multiple interfaces",
|
||||
"proxmoxAutoSync": "Auto sync guests",
|
||||
"proxmoxAutoSyncDesc": "Periodically discover this Proxmox node and create or update imported guest hosts while your session is unlocked.",
|
||||
"proxmoxSyncInterval": "Sync interval (minutes)",
|
||||
"proxmoxSyncIntervalDesc": "Minimum 5 minutes. The scheduler skips locked user sessions.",
|
||||
"proxmoxMarkMissing": "Mark missing guests",
|
||||
"proxmoxMarkMissingDesc": "Add a proxmox-missing tag when a previously imported guest disappears instead of deleting it.",
|
||||
"proxmoxLastSync": "Last sync",
|
||||
"proxmoxLastSyncNever": "Not synced yet",
|
||||
"proxmoxLastSyncNoResult": "No result details",
|
||||
"proxmoxLastSyncSummary": "{{created}} created, {{updated}} updated, {{markedMissing}} missing, {{skipped}} skipped",
|
||||
"proxmoxLastSyncStatus": {
|
||||
"success": "Success",
|
||||
"error": "Failed",
|
||||
"pending": "Pending"
|
||||
},
|
||||
"proxmoxDiscoverAction": "Discover & import Proxmox guests",
|
||||
"proxmoxImportTitle": "Import from Proxmox",
|
||||
"proxmoxSelectHost": "Select a Proxmox host…",
|
||||
@@ -741,7 +1013,6 @@
|
||||
"failedToSaveFolder": "Failed to save folder",
|
||||
"folderDeleted": "Deleted folder \"{{name}}\"",
|
||||
"deleteFolderConfirm": "Delete \"{{name}}\" and its {{count}} host(s)? This cannot be undone.",
|
||||
"movedToFolder": "Moved {{count}} host(s) to \"{{folder}}\"",
|
||||
"failedToMoveHosts": "Failed to move hosts",
|
||||
"expandAll": "Expand all folders",
|
||||
"collapseAll": "Collapse all folders",
|
||||
@@ -791,7 +1062,6 @@
|
||||
"failedToDeployKey": "Failed to deploy key",
|
||||
"deleteHostsConfirm": "Delete {{count}} host{{plural}}? This cannot be undone.",
|
||||
"movedToRoot": "Moved to root",
|
||||
"failedToMoveHosts": "Failed to move hosts",
|
||||
"enableTerminalFeature": "Enable Terminal",
|
||||
"disableTerminalFeature": "Disable Terminal",
|
||||
"enableFilesFeature": "Enable Files",
|
||||
@@ -912,7 +1182,57 @@
|
||||
"shareHost": "Share Host",
|
||||
"shareHostTitle": "Share: {{name}}",
|
||||
"sharing": {
|
||||
"requiresCredential": "This host must use a credential to enable sharing. Edit the host and assign a credential first."
|
||||
"loadError": "Failed to load sharing data. Please try again.",
|
||||
"shareWithSection": "Share with",
|
||||
"usersTab": "Users",
|
||||
"rolesTab": "Roles",
|
||||
"searchPlaceholder": "Search users or roles...",
|
||||
"noMatches": "No matches found",
|
||||
"permissionLevelLabel": "Permission level",
|
||||
"levels": {
|
||||
"connect": {
|
||||
"label": "Connect",
|
||||
"description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration."
|
||||
},
|
||||
"view": {
|
||||
"label": "View",
|
||||
"description": "Connect, plus see the host configuration. Secrets are never shown."
|
||||
},
|
||||
"edit": {
|
||||
"label": "Edit",
|
||||
"description": "View, plus modify the host. Secrets can be replaced but never read; credential assignments stay owner-only."
|
||||
},
|
||||
"manage": {
|
||||
"label": "Manage",
|
||||
"description": "Edit, plus share the host with others, change permission levels and revoke access."
|
||||
}
|
||||
},
|
||||
"expiryLabel": "Access expiry",
|
||||
"expiry": {
|
||||
"never": "Never",
|
||||
"oneHour": "1 hour",
|
||||
"oneDay": "24 hours",
|
||||
"sevenDays": "7 days",
|
||||
"thirtyDays": "30 days",
|
||||
"custom": "Custom"
|
||||
},
|
||||
"customHoursPlaceholder": "Hours until access expires",
|
||||
"shareButton": "Share",
|
||||
"shareWithCount": "Share ({{count}})",
|
||||
"currentAccess": "Current access",
|
||||
"noAccessEntries": "This host has not been shared yet",
|
||||
"grantedBy": "Granted by",
|
||||
"expires": "Expires",
|
||||
"expired": "Expired",
|
||||
"never": "Never",
|
||||
"revoke": "Revoke",
|
||||
"accessUpdated": "Access updated",
|
||||
"accessUpdateFailed": "Failed to update access",
|
||||
"sharedBadge": "Shared",
|
||||
"sharedBadgeTooltip": "Shared by {{owner}} ({{level}} access)",
|
||||
"viewOnlyBanner": "This host is shared with you by {{owner}} with view access. The configuration is read-only.",
|
||||
"sharedEditBanner": "This host is shared with you by {{owner}} with edit access. Changes apply to the real host; authentication references can only be changed by the owner.",
|
||||
"ownerOnlyControl": "Only the host owner can change this"
|
||||
},
|
||||
"guac": {
|
||||
"connection": "Connection",
|
||||
@@ -1047,28 +1367,10 @@
|
||||
"backspaceKey": "Backspace Key",
|
||||
"saveHostFirst": "Save the host first.",
|
||||
"sharingOptionsAfterSave": "Sharing options are available after the host has been saved.",
|
||||
"sharingLoadError": "Failed to load sharing data. Check your connection and try again.",
|
||||
"shareHostSection": "Share Host",
|
||||
"shareWithUser": "Share with User",
|
||||
"shareWithRole": "Share with Role",
|
||||
"selectUser": "Select User",
|
||||
"selectRole": "Select Role",
|
||||
"selectUserOption": "Select a user...",
|
||||
"selectRoleOption": "Select a role...",
|
||||
"permissionLevel": "Permission Level",
|
||||
"expiresInHours": "Expires in (hours)",
|
||||
"noExpiryPlaceholder": "Leave empty for no expiry",
|
||||
"shareBtn": "Share",
|
||||
"currentAccess": "Current Access",
|
||||
"typeHeader": "Type",
|
||||
"targetHeader": "Target",
|
||||
"permissionHeader": "Permission",
|
||||
"grantedByHeader": "Granted By",
|
||||
"expiresHeader": "Expires",
|
||||
"noAccessEntries": "No access entries yet.",
|
||||
"expiredLabel": "Expired",
|
||||
"neverLabel": "Never",
|
||||
"revokeBtn": "Revoke",
|
||||
"cancelBtn": "Cancel",
|
||||
"savingBtn": "Saving...",
|
||||
"updateHostBtn": "Update Host",
|
||||
@@ -1935,7 +2237,8 @@
|
||||
"passwordLoginDisabledDesc": "Password login is disabled. Use a passkey or an external authentication provider.",
|
||||
"signInWithPasskey": "Sign in with passkey",
|
||||
"passkeyLoginFailed": "Passkey login failed",
|
||||
"attemptsRemaining": "{{count}} attempts remaining"
|
||||
"attemptsRemaining": "{{count}} attempts remaining",
|
||||
"confirmResetDataWipe": "This account has not logged in since the encryption upgrade, so its stored data cannot be recovered without the old password. Resetting will permanently delete its hosts, credentials and snippets. Continue?"
|
||||
},
|
||||
"hostKey": {
|
||||
"verifyNewHost": "Verify SSH Host Key",
|
||||
@@ -2068,6 +2371,13 @@
|
||||
"serviceLinks": "Service Links",
|
||||
"homepagePreview": "Homepage Preview"
|
||||
},
|
||||
"donation": {
|
||||
"title": "Enjoying Termix?",
|
||||
"body": "Termix is free and open source, built and maintained by a two-person team in our spare time. If it's replaced a commercial tool you'd otherwise be paying for, a donation helps cover hosting costs and keeps development going. As of now, donations are crypto only.",
|
||||
"milestones": "Donations also help fund the time to research and learn what's needed to build features like SAML and Kubernetes support. See the progress on the donate page.",
|
||||
"cta": "Donate",
|
||||
"dismiss": "Maybe later"
|
||||
},
|
||||
"dashboardTab": {
|
||||
"stable": "STABLE",
|
||||
"hostsOnline": "Hosts Online",
|
||||
@@ -2535,6 +2845,71 @@
|
||||
"updateAdminStatusFailed": "Failed to update admin status",
|
||||
"allSessionsRevoked": "All sessions revoked",
|
||||
"revokeSessionsFailed": "Failed to revoke sessions",
|
||||
"manageUserData": "Manage user data",
|
||||
"backToUsers": "Back to users",
|
||||
"manageTabAccount": "Account",
|
||||
"manageTabHosts": "Hosts",
|
||||
"manageTabCredentials": "Credentials",
|
||||
"manageTabSnippets": "Snippets",
|
||||
"manageTabSessions": "Sessions",
|
||||
"manageTabDanger": "Danger",
|
||||
"manageEditorBack": "Back to {{username}}'s data",
|
||||
"dataLockedBadge": "LOCKED",
|
||||
"dataLockedNotice": "{{username}}'s data stays locked until they next log in. Their hosts, credentials and snippets cannot be viewed or edited until then.",
|
||||
"resetPasswordTitle": "Reset Password",
|
||||
"resetPasswordOidcOnly": "This user signs in through an external provider and has no password.",
|
||||
"resetPasswordPlaceholder": "New password",
|
||||
"resetPasswordBtn": "Reset",
|
||||
"resetPasswordWorking": "Resetting...",
|
||||
"resetPasswordSuccess": "Password reset",
|
||||
"resetPasswordSuccessWiped": "Password reset. The user's encrypted data was wiped.",
|
||||
"resetPasswordFailed": "Failed to reset password",
|
||||
"resetPasswordConfirmWipe": "{{username}} has not logged in since the encryption upgrade, so their data cannot be recovered. Resetting now will delete their hosts, credentials and snippets. Continue?",
|
||||
"totpSectionTitle": "Two-Factor Authentication",
|
||||
"totpStatusEnabled": "TOTP is enabled for this user",
|
||||
"totpStatusDisabled": "TOTP is not enabled for this user",
|
||||
"disableTotp": "Disable",
|
||||
"disableTotpConfirm": "Disable two-factor authentication for {{username}}? They will be able to log in with only their password.",
|
||||
"totpDisabledSuccess": "TOTP disabled",
|
||||
"totpDisableFailed": "Failed to disable TOTP",
|
||||
"manageApiKeys": "API Keys",
|
||||
"apiKeyNamePlaceholder": "Key name",
|
||||
"apiKeyCopyNotice": "Copy this key now, it won't be shown again.",
|
||||
"noApiKeysForUser": "No API keys",
|
||||
"apiKeyDeleteFailed": "Failed to delete API key",
|
||||
"exportUserData": "Data Export",
|
||||
"exportUserDataDesc": "Download this user's hosts, credentials and file manager data as JSON. Secrets are decrypted.",
|
||||
"exportUserDataSuccess": "User data exported",
|
||||
"exportUserDataFailed": "Failed to export user data",
|
||||
"hostsCount": "{{count}} hosts",
|
||||
"addHostForUser": "Add Host",
|
||||
"noHostsForUser": "This user has no hosts",
|
||||
"connectToHost": "Connect",
|
||||
"deleteHostConfirm": "Delete host \"{{name}}\" belonging to {{username}}?",
|
||||
"hostDeletedSuccess": "Host deleted",
|
||||
"hostDeleteFailed": "Failed to delete host",
|
||||
"credentialsCount": "{{count}} credentials",
|
||||
"addCredentialForUser": "Add Credential",
|
||||
"noCredentialsForUser": "This user has no credentials",
|
||||
"deleteCredentialConfirm": "Delete credential \"{{name}}\" belonging to {{username}}?",
|
||||
"credentialDeletedSuccess": "Credential deleted",
|
||||
"credentialDeleteFailed": "Failed to delete credential",
|
||||
"snippetsCount": "{{count}} snippets",
|
||||
"addSnippetForUser": "Add Snippet",
|
||||
"noSnippetsForUser": "This user has no snippets",
|
||||
"snippetRequiredFields": "Snippet name and content are required",
|
||||
"snippetNamePlaceholder": "Snippet name",
|
||||
"snippetContentPlaceholder": "Command content",
|
||||
"snippetFolderPlaceholder": "Folder (optional)",
|
||||
"snippetSaved": "Snippet saved",
|
||||
"snippetSaveFailed": "Failed to save snippet",
|
||||
"deleteSnippetConfirm": "Delete snippet \"{{name}}\" belonging to {{username}}?",
|
||||
"snippetDeletedSuccess": "Snippet deleted",
|
||||
"snippetDeleteFailed": "Failed to delete snippet",
|
||||
"noSessionsForUser": "No active sessions",
|
||||
"deleteUserDangerDesc": "Permanently delete {{username}} and all of their data (hosts, credentials, snippets, history). This cannot be undone.",
|
||||
"deleteUserConfirm": "Permanently delete {{username}} and all of their data?",
|
||||
"deleteUserAdminBlocked": "Remove admin status before deleting this user.",
|
||||
"createRoleRequired": "Name and display name are required",
|
||||
"createRoleSuccess": "Role \"{{name}}\" created",
|
||||
"createRoleFailed": "Failed to create role",
|
||||
@@ -2567,7 +2942,16 @@
|
||||
"hostDefaultsCommandHistory": "Command History",
|
||||
"hostDefaultsCommandHistoryDesc": "Track command history on new hosts by default",
|
||||
"hostDefaultsSaved": "Host defaults saved",
|
||||
"hostDefaultsSaveFailed": "Failed to save host defaults"
|
||||
"hostDefaultsSaveFailed": "Failed to save host defaults",
|
||||
"rolePermissions": {
|
||||
"count": "{{count}} permissions",
|
||||
"editAction": "Edit permissions",
|
||||
"loadError": "Failed to load the permissions catalog",
|
||||
"saved": "Role permissions saved",
|
||||
"saveError": "Failed to save role permissions",
|
||||
"save": "Save",
|
||||
"saving": "Saving..."
|
||||
}
|
||||
},
|
||||
"newUi": {
|
||||
"sidebar": {
|
||||
@@ -2736,6 +3120,10 @@
|
||||
"executionFailed": "Failed"
|
||||
},
|
||||
"userProfile": {
|
||||
"donateTitle": "Keep Termix alive",
|
||||
"donateDescription": "Termix is free, self-hosted, and built by only a few people in their spare time. If it's saved you time or money, a crypto donation helps keep it going.",
|
||||
"donateMilestones": "Donations help fund the time to research and learn what's needed to build SAML, Kubernetes, and Agent support. See the progress and donate.",
|
||||
"donateButton": "Donate crypto",
|
||||
"storageModeLocal": "Browser",
|
||||
"storageModeCloud": "Database",
|
||||
"storageModeDescription": "Browser stores settings in this browser only. Database syncs to the server and loads on any device.",
|
||||
@@ -2756,6 +3144,10 @@
|
||||
"twoFaOn": "On",
|
||||
"twoFaOff": "Off",
|
||||
"versionLabel": "Version",
|
||||
"betaProgramTitle": "Beta Program",
|
||||
"betaProgramDescription": "Try upcoming features early with the weekly rolling :beta Docker tag. Unstable, not for production.",
|
||||
"betaProgramFeedback": "Found a bug? Report it here.",
|
||||
"betaProgramLearnMore": "Learn More",
|
||||
"deleteAccount": "Delete Account",
|
||||
"deleteAccountDescription": "Permanently delete your account",
|
||||
"changeServerDescription": "Switch to a different Termix backend server",
|
||||
@@ -3076,266 +3468,5 @@
|
||||
"channels": "Notification Channels",
|
||||
"noChannelsHint": "Add channels in the Channels tab first",
|
||||
"ruleSaveFailed": "Failed to save rule"
|
||||
},
|
||||
"homepage": {
|
||||
"title": "Homepage",
|
||||
"addWidget": "Add Widget",
|
||||
"editWidget": "Edit Widget",
|
||||
"deleteWidget": "Delete",
|
||||
"widgetTypes": "Widget Types",
|
||||
"serviceLink": "Service Link",
|
||||
"folder": "Folder",
|
||||
"clock": "Clock",
|
||||
"notes": "Notes",
|
||||
"hostStatus": "Host Status",
|
||||
"bookmarkList": "Bookmarks",
|
||||
"zoomIn": "Zoom In",
|
||||
"zoomOut": "Zoom Out",
|
||||
"resetView": "Reset View",
|
||||
"lockLayout": "Lock Layout",
|
||||
"unlockLayout": "Unlock Layout",
|
||||
"noWidgets": "Right-click or click + to add your first widget",
|
||||
"openFullView": "Open Full View",
|
||||
"previewTitle": "Homepage Preview",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"title_label": "Title",
|
||||
"widgetTitlePlaceholder": "Widget title (optional)",
|
||||
"url": "URL",
|
||||
"imageUrl": "Custom Image URL",
|
||||
"imageUrlHint": "Leave blank to use the site favicon automatically",
|
||||
"showImage": "Show Image",
|
||||
"description": "Description",
|
||||
"color": "Color",
|
||||
"icon": "Icon",
|
||||
"expanded": "Expanded by default",
|
||||
"timezone": "Timezone",
|
||||
"showSeconds": "Show seconds",
|
||||
"format12h": "12-hour",
|
||||
"format24h": "24-hour",
|
||||
"content": "Content",
|
||||
"backgroundColor": "Background Color",
|
||||
"host": "Host",
|
||||
"showMetrics": "Show Metrics",
|
||||
"links": "Links",
|
||||
"addLink": "Add Link",
|
||||
"linkLabel": "Label",
|
||||
"linkUrl": "URL",
|
||||
"removeLink": "Remove",
|
||||
"categoryLinks": "Links",
|
||||
"categoryInfo": "Info",
|
||||
"categorySystem": "System",
|
||||
"widgetServiceLinkDesc": "A clickable tile linking to a service URL",
|
||||
"widgetFolderDesc": "A container to group related widgets",
|
||||
"widgetClockDesc": "A live clock with configurable timezone",
|
||||
"widgetNotesDesc": "A markdown notes widget",
|
||||
"widgetHostStatusDesc": "Shows live CPU, memory and disk for an SSH host",
|
||||
"widgetBookmarkListDesc": "A list of quick links",
|
||||
"copyLink": "Copy Link",
|
||||
"linkCopied": "Link copied!",
|
||||
"location": "Location",
|
||||
"temperatureUnit": "Temperature Unit",
|
||||
"showForecast": "Show 3-day forecast",
|
||||
"scrolling": "Allow Scrolling",
|
||||
"feedUrl": "Feed URL",
|
||||
"maxItems": "Max Items",
|
||||
"showDescription": "Show Description",
|
||||
"widgetWeatherName": "Weather",
|
||||
"widgetWeatherDesc": "Live weather for any location",
|
||||
"widgetIframeName": "iFrame Embed",
|
||||
"widgetIframeDesc": "Embed any URL in an iframe",
|
||||
"widgetRssName": "RSS Feed",
|
||||
"widgetRssDesc": "Display items from an RSS or Atom feed",
|
||||
"dragToFolder": "Drag widgets here or use + to add",
|
||||
"showDisk": "Show Disk Usage",
|
||||
"addToFolder": "Add widget to folder",
|
||||
"noHostSelected": "No host selected",
|
||||
"metricsNotAvailable": "Metrics not available",
|
||||
"selectHost": "Select a host...",
|
||||
"displayedMetrics": "Displayed Metrics",
|
||||
"metricCpu": "CPU",
|
||||
"metricMemory": "Memory",
|
||||
"metricDisk": "Disk",
|
||||
"metricUptime": "Uptime",
|
||||
"metricSystem": "System",
|
||||
"metricOs": "OS",
|
||||
"metricKernel": "Kernel",
|
||||
"metricHostname": "Hostname",
|
||||
"metricNetwork": "Network",
|
||||
"metricProcesses": "Processes",
|
||||
"metricProcessesTotal": "total",
|
||||
"metricProcessesRunning": "running",
|
||||
"categoryMonitoring": "Monitoring",
|
||||
"loading": "Loading...",
|
||||
"noData": "No data available",
|
||||
"allClear": "All clear",
|
||||
"acknowledgeAlert": "Acknowledge",
|
||||
"noPingUrls": "No URLs configured",
|
||||
"pingLabel": "Label",
|
||||
"addPingUrl": "Add URL",
|
||||
"showLatency": "Show Latency",
|
||||
"refreshInterval": "Refresh Interval",
|
||||
"seconds": "seconds",
|
||||
"filterActivityTypes": "Filter Types",
|
||||
"filterTypesHint": "Leave empty to show all",
|
||||
"showTimestamp": "Show Timestamp",
|
||||
"uptimeUnavailable": "Uptime unavailable",
|
||||
"uptimeLabel": "Uptime",
|
||||
"overviewVersion": "Version",
|
||||
"overviewUpdate": "Up to date",
|
||||
"overviewUpdateAvailable": "Update available",
|
||||
"overviewDatabase": "Database",
|
||||
"overviewUptime": "Uptime",
|
||||
"noHosts": "No hosts configured",
|
||||
"hostGridHosts": "Hosts",
|
||||
"hostGridAllHint": "Leave empty to show all hosts",
|
||||
"columns": "Columns",
|
||||
"showIp": "Show IP Address",
|
||||
"connectionType": "Connection Type",
|
||||
"layout": "Layout",
|
||||
"showStatus": "Show Status",
|
||||
"showHostName": "Show Host Name",
|
||||
"noDockerActivity": "No Docker activity",
|
||||
"noActivity": "No activity",
|
||||
"showAcknowledged": "Show Acknowledged",
|
||||
"showCurrentValue": "Show Current Value",
|
||||
"chartMetric": "Metric",
|
||||
"metricRange": "Range",
|
||||
"widgetMetricsChartName": "Metrics Chart",
|
||||
"widgetMetricsChartDesc": "Historical CPU, memory, disk or network chart for a host",
|
||||
"widgetHostGridName": "Host Grid",
|
||||
"widgetHostGridDesc": "Grid view of SSH host statuses",
|
||||
"widgetAlertFeedName": "Alert Feed",
|
||||
"widgetAlertFeedDesc": "Live alert firings with acknowledge support",
|
||||
"widgetPingStatusName": "Ping Status",
|
||||
"widgetPingStatusDesc": "HTTP ping status for one or more URLs",
|
||||
"widgetRecentActivityName": "Recent Activity",
|
||||
"widgetRecentActivityDesc": "Scrollable feed of recent Termix activity",
|
||||
"widgetTermixUptimeName": "Termix Uptime",
|
||||
"widgetTermixUptimeDesc": "Live uptime counter for the Termix server",
|
||||
"widgetSystemOverviewName": "System Overview",
|
||||
"widgetSystemOverviewDesc": "Termix version, database health and uptime at a glance",
|
||||
"widgetSshQuickConnectName": "SSH Quick Connect",
|
||||
"widgetSshQuickConnectDesc": "One-click buttons to open SSH sessions",
|
||||
"widgetDockerActivityName": "Docker Activity",
|
||||
"widgetDockerActivityDesc": "Recent Docker container events across all hosts",
|
||||
"widgetCalendarName": "Calendar",
|
||||
"widgetCalendarDesc": "A monthly calendar with today highlighted",
|
||||
"widgetCountdownName": "Countdown",
|
||||
"widgetCountdownDesc": "Countdown timer to a target date",
|
||||
"widgetSearchBarName": "Search Bar",
|
||||
"widgetSearchBarDesc": "Quick web search widget",
|
||||
"widgetTextBannerName": "Text Banner",
|
||||
"widgetTextBannerDesc": "A bold label or section header for the canvas",
|
||||
"widgetImageWidgetName": "Image",
|
||||
"widgetImageWidgetDesc": "Display an image from a URL",
|
||||
"widgetMarkdownNotesName": "Markdown Notes",
|
||||
"widgetMarkdownNotesDesc": "Rich notes with inline markdown rendering",
|
||||
"widgetCustomApiName": "Custom API",
|
||||
"widgetCustomApiDesc": "Fetch and display data from any JSON API",
|
||||
"widgetServiceGridName": "Service Grid",
|
||||
"widgetServiceGridDesc": "A configurable grid of service tile links",
|
||||
"widgetDashboardLinksName": "Dashboard Links",
|
||||
"widgetDashboardLinksDesc": "Display your configured service links from the dashboard",
|
||||
"widgetSearchLinksName": "Search Shortcuts",
|
||||
"widgetSearchLinksDesc": "Quick search shortcut buttons with inline input",
|
||||
"widgetLinkTreeName": "Link Tree",
|
||||
"widgetLinkTreeDesc": "Grouped sections of links with headings",
|
||||
"calMon": "Mo",
|
||||
"calTue": "Tu",
|
||||
"calWed": "We",
|
||||
"calThu": "Th",
|
||||
"calFri": "Fr",
|
||||
"calSat": "Sa",
|
||||
"calSun": "Su",
|
||||
"startOnMonday": "Start week on Monday",
|
||||
"countdownNoDate": "No target date set",
|
||||
"countdownPast": "Event has passed",
|
||||
"countdownDays": "days",
|
||||
"countdownHours": "hrs",
|
||||
"countdownMinutes": "min",
|
||||
"countdownSeconds": "sec",
|
||||
"countdownLabel": "Label",
|
||||
"countdownLabelPlaceholder": "e.g. Launch Day",
|
||||
"countdownShowDays": "Show Days",
|
||||
"countdownShowHours": "Show Hours",
|
||||
"targetDate": "Target Date",
|
||||
"searchEngine": "Search Engine",
|
||||
"customSearchUrl": "Custom Search URL",
|
||||
"searchPlaceholder": "Search...",
|
||||
"searchGo": "Go",
|
||||
"searchPlaceholderLabel": "Placeholder Text",
|
||||
"searchPlaceholderHint": "Text shown inside the search input",
|
||||
"openInNewTab": "Open in New Tab",
|
||||
"searchQueryPlaceholder": "Enter query...",
|
||||
"noSearchShortcuts": "No shortcuts configured",
|
||||
"addSearchShortcut": "Add Shortcut",
|
||||
"fontSize": "Font Size",
|
||||
"textAlign": "Text Align",
|
||||
"fontWeight": "Font Weight",
|
||||
"clearColor": "Clear Color",
|
||||
"imageFit": "Image Fit",
|
||||
"imageLinkUrl": "Link URL",
|
||||
"noImage": "No image URL set",
|
||||
"altText": "Alt Text",
|
||||
"altTextPlaceholder": "Describe the image",
|
||||
"renderMarkdown": "Render Markdown",
|
||||
"displayMode": "Display Mode",
|
||||
"displayField": "Display Field",
|
||||
"jsonPath": "JSON Path",
|
||||
"customApiLabel": "Label",
|
||||
"customApiLabelPlaceholder": "e.g. Temperature",
|
||||
"customApiUnit": "Unit",
|
||||
"customApiNoUrl": "No API URL configured",
|
||||
"customApiError": "Failed to fetch",
|
||||
"customApiNotArray": "Response is not an array",
|
||||
"addService": "Add Service",
|
||||
"showLabels": "Show Labels",
|
||||
"iconSize": "Icon Size",
|
||||
"noDashboardLinks": "No dashboard links configured",
|
||||
"noLimit": "No limit",
|
||||
"sectionHeading": "Section Heading",
|
||||
"addSection": "Add Section",
|
||||
"compactMode": "Compact Mode",
|
||||
"showDetailed": "Show Detailed",
|
||||
"selectHosts": "Select Hosts",
|
||||
"allHosts": "All hosts",
|
||||
"listLayout": "List",
|
||||
"gridLayout": "Grid",
|
||||
"terminal": "Terminal",
|
||||
"files": "Files",
|
||||
"docker": "Docker",
|
||||
"range15m": "15 minutes",
|
||||
"range1h": "1 hour",
|
||||
"range6h": "6 hours",
|
||||
"range24h": "24 hours",
|
||||
"metricNetRx": "Net Download",
|
||||
"metricNetTx": "Net Upload",
|
||||
"severityFilter": "Severity Filter",
|
||||
"filterAll": "All",
|
||||
"accentColor": "Accent Color",
|
||||
"widgetSshTerminalName": "SSH Terminal",
|
||||
"widgetSshTerminalDesc": "An inline SSH terminal connected to a configured host",
|
||||
"sshTerminalNoHost": "No host configured",
|
||||
"sshTerminalConnect": "Connect",
|
||||
"sshTerminalAutoConnect": "Auto-connect on load",
|
||||
"widgetQuickConnectName": "Quick Connect",
|
||||
"widgetQuickConnectDesc": "One-click launch buttons for any connection type across your hosts",
|
||||
"connectionTypes": "Connection Types",
|
||||
"connType_terminal": "Terminal",
|
||||
"connType_files": "File Manager",
|
||||
"connType_docker": "Docker",
|
||||
"connType_tunnel": "Tunnel",
|
||||
"connType_host-metrics": "Host Metrics",
|
||||
"connType_rdp": "RDP",
|
||||
"connType_vnc": "VNC",
|
||||
"connType_telnet": "Telnet",
|
||||
"widgetFileManagerName": "File Manager",
|
||||
"widgetFileManagerDesc": "Embedded SFTP file manager for a configured host",
|
||||
"widgetDockerName": "Docker Manager",
|
||||
"widgetDockerDesc": "Embedded Docker container manager for a configured host",
|
||||
"widgetTunnelName": "Tunnel Manager",
|
||||
"widgetTunnelDesc": "Embedded SSH tunnel manager for a configured host",
|
||||
"widgetNoHostSelected": "No host configured"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user