Files
Termix/plugins/ssh-terminal/locales/translated/ja_JP.json
T
3643e7af97 release-2.9.0 (#1532)
* fix(macos): skip single-instance lock in Mac App Store builds (#1454)

fix(macos): skip single-instance lock in Mac App Store builds

* Fix/backend optional sharp (#1455)

Fix/backend optional sharp

* feat: issue #1218 (#1218)

https://github.com/Termix-SSH/Support/issues/1218

* feat: Add option to use saved global custom theme under Connection Defaults (#1209)

https://github.com/Termix-SSH/Support/issues/1209

* feat: Add Fleet Sharing functionality to the UI (#1228)

https://github.com/Termix-SSH/Support/issues/1228

* feat: Add a list view to the Docker management page (#1237)

https://github.com/Termix-SSH/Support/issues/1237

* feat: issue #1264 (#1264)

https://github.com/Termix-SSH/Support/issues/1264

* feat: 2FA With FortiToken (#1288)

https://github.com/Termix-SSH/Support/issues/1288

* feat: Allow to disable showing paths to folders (#1274)

https://github.com/Termix-SSH/Support/issues/1274

* feat: Sync Network Graph between Desktop and Remote Server (#1245)

https://github.com/Termix-SSH/Support/issues/1245

* feat: Version Number on offline servers (#1291)

https://github.com/Termix-SSH/Support/issues/1291

* feat: Support OrbStack Docker socket path on macOS / Fix "Docker is not installed" on mac... (#1302)

https://github.com/Termix-SSH/Support/issues/1302

* feat: Sidebar host click should focus existing tab instead of opening a new connection (#1289)

https://github.com/Termix-SSH/Support/issues/1289

* fix: Search in side bar shows overlapping hosts when grouped by tags (#1303)

https://github.com/Termix-SSH/Support/issues/1303

* fix: I can't send a file on its own. (#1304)

https://github.com/Termix-SSH/Support/issues/1304

* fix: sudo password not autofilling (#1248)

https://github.com/Termix-SSH/Support/issues/1248

* fix: node-MainThread (#1300)

https://github.com/Termix-SSH/Support/issues/1300

* fix: Tunnel authentication with shared credentials (#1295)

https://github.com/Termix-SSH/Support/issues/1295

* fix: host key updates not syncing, metrics 404 race on first connect

Host key writes never bumped updatedAt so sync never picked them up.
Also retry the first metrics fetch briefly instead of failing right away.

* chore: increment ver

* feat: add category and icon fields to plugin manifest schema

* ci(deps): bump the github-actions group with 2 updates (#1458)

Bumps the github-actions group with 2 updates: [crowdin/github-action](https://github.com/crowdin/github-action) and [actions/github-script](https://github.com/actions/github-script).


Updates `crowdin/github-action` from 2 to 3
- [Release notes](https://github.com/crowdin/github-action/releases)
- [Commits](https://github.com/crowdin/github-action/compare/v2...v3)

Updates `actions/github-script` from 7 to 9
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v7...v9)

---
updated-dependencies:
- dependency-name: crowdin/github-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/github-script
  dependency-version: '9'
  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 13 updates (#1459)

Bumps the dev-patch-updates group with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [@codemirror/commands](https://github.com/codemirror/commands) | `6.11.0` | `6.11.1` |
| [@codemirror/search](https://github.com/codemirror/search) | `6.7.1` | `6.7.2` |
| [@codemirror/view](https://github.com/codemirror/view) | `6.43.9` | `6.43.12` |
| [@testing-library/dom](https://github.com/testing-library/dom-testing-library) | `10.4.1` | `10.4.2` |
| [@testing-library/react](https://github.com/testing-library/react-testing-library) | `16.3.2` | `16.3.3` |
| [@testing-library/user-event](https://github.com/testing-library/user-event) | `14.6.5` | `14.6.7` |
| [@types/ssh2](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ssh2) | `1.15.5` | `1.15.6` |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.1.0` | `6.1.1` |
| [cytoscape](https://github.com/cytoscape/cytoscape.js) | `3.34.1` | `3.34.3` |
| [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh) | `0.5.4` | `0.5.7` |
| [i18next](https://github.com/i18next/i18next) | `26.4.0` | `26.4.2` |
| [prettier](https://github.com/prettier/prettier) | `3.9.6` | `3.9.8` |
| [react-i18next](https://github.com/i18next/react-i18next) | `17.0.12` | `17.0.14` |


Updates `@codemirror/commands` from 6.11.0 to 6.11.1
- [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codemirror/commands/commits)

Updates `@codemirror/search` from 6.7.1 to 6.7.2
- [Changelog](https://github.com/codemirror/search/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codemirror/search/commits)

Updates `@codemirror/view` from 6.43.9 to 6.43.12
- [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codemirror/view/commits)

Updates `@testing-library/dom` from 10.4.1 to 10.4.2
- [Release notes](https://github.com/testing-library/dom-testing-library/releases)
- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.4.1...v10.4.2)

Updates `@testing-library/react` from 16.3.2 to 16.3.3
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.3.2...v16.3.3)

Updates `@testing-library/user-event` from 14.6.5 to 14.6.7
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.6.5...v14.6.7)

Updates `@types/ssh2` from 1.15.5 to 1.15.6
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ssh2)

Updates `@vitejs/plugin-react` from 6.1.0 to 6.1.1
- [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.1.1/packages/plugin-react)

Updates `cytoscape` from 3.34.1 to 3.34.3
- [Release notes](https://github.com/cytoscape/cytoscape.js/releases)
- [Commits](https://github.com/cytoscape/cytoscape.js/compare/v3.34.1...v3.34.3)

Updates `eslint-plugin-react-refresh` from 0.5.4 to 0.5.7
- [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.4...v0.5.7)

Updates `i18next` from 26.4.0 to 26.4.2
- [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.4.0...v26.4.2)

Updates `prettier` from 3.9.6 to 3.9.8
- [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.9.6...3.9.8)

Updates `react-i18next` from 17.0.12 to 17.0.14
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v17.0.12...v17.0.14)

---
updated-dependencies:
- dependency-name: "@codemirror/commands"
  dependency-version: 6.11.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@codemirror/search"
  dependency-version: 6.7.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@codemirror/view"
  dependency-version: 6.43.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@testing-library/dom"
  dependency-version: 10.4.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@testing-library/react"
  dependency-version: 16.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@testing-library/user-event"
  dependency-version: 14.6.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/ssh2"
  dependency-version: 1.15.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: cytoscape
  dependency-version: 3.34.3
  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.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: i18next
  dependency-version: 26.4.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: prettier
  dependency-version: 3.9.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-i18next
  dependency-version: 17.0.14
  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 the prod-patch-updates group with 6 updates (#1461)

Bumps the prod-patch-updates group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [@tanstack/react-virtual](https://github.com/TanStack/virtual/tree/HEAD/packages/react-virtual) | `3.14.10` | `3.14.13` |
| [compression](https://github.com/expressjs/compression) | `1.8.1` | `1.8.2` |
| [jose](https://github.com/panva/jose) | `6.2.9` | `6.2.12` |
| [jszip](https://github.com/Stuk/jszip) | `3.10.1` | `3.10.2` |
| [socks](https://github.com/JoshGlazebrook/socks) | `2.8.9` | `2.8.10` |
| [undici](https://github.com/nodejs/undici) | `8.10.0` | `8.10.2` |


Updates `@tanstack/react-virtual` from 3.14.10 to 3.14.13
- [Release notes](https://github.com/TanStack/virtual/releases)
- [Changelog](https://github.com/TanStack/virtual/blob/main/packages/react-virtual/CHANGELOG.md)
- [Commits](https://github.com/TanStack/virtual/commits/@tanstack/react-virtual@3.14.13/packages/react-virtual)

Updates `compression` from 1.8.1 to 1.8.2
- [Release notes](https://github.com/expressjs/compression/releases)
- [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/compression/compare/v1.8.1...v1.8.2)

Updates `jose` from 6.2.9 to 6.2.12
- [Release notes](https://github.com/panva/jose/releases)
- [Changelog](https://github.com/panva/jose/blob/main/CHANGELOG.md)
- [Commits](https://github.com/panva/jose/compare/v6.2.9...v6.2.12)

Updates `jszip` from 3.10.1 to 3.10.2
- [Changelog](https://github.com/Stuk/jszip/blob/main/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.10.1...v3.10.2)

Updates `socks` from 2.8.9 to 2.8.10
- [Release notes](https://github.com/JoshGlazebrook/socks/releases)
- [Commits](https://github.com/JoshGlazebrook/socks/compare/2.8.9...2.8.10)

Updates `undici` from 8.10.0 to 8.10.2
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v8.10.0...v8.10.2)

---
updated-dependencies:
- dependency-name: "@tanstack/react-virtual"
  dependency-version: 3.14.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: compression
  dependency-version: 1.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: jose
  dependency-version: 6.2.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: jszip
  dependency-version: 3.10.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: socks
  dependency-version: 2.8.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: undici
  dependency-version: 8.10.2
  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>

* feat: add plugin worker protocol, bootstrap and plugin_storage table

Worker-side ctx proxy plus the message envelope it talks over, and the
per-plugin key/value table behind ctx.storage with migrations for all
three dialects. Rows cascade with the plugin so uninstalling leaves
nothing behind.

* feat: add allowlisted host view for plugins

An allowlist rather than a list of fields to strip. A blocklist rots:
the moment a new secret-bearing column lands on SSHHost it starts
leaking silently. With an allowlist a new field stays invisible to
plugins until someone adds it here on purpose.

* feat: add plugin loader with manifest validation and crash restart

Validates an unpacked plugin, spawns a worker_threads worker and manages
activate/deactivate/crash-restart with backoff, disabling after three
tries.

The crash counter clears only after a plugin stays up past a stability
window, not on activation. Clearing it on activation let a plugin that
activates cleanly and then dies restart forever, because every attempt
looked like the first.

loader.ts documents what the worker boundary does and does not buy you.
Node's permission model is process-wide, not per-worker, so it cannot be
enabled for plugin workers alone and is not claimed here.

* feat: route internal events through a shared plugin event bus

Formalises three ad-hoc publish paths that already existed:
automation-events.ts, metrics/automation-bridge.ts and the
hostSessionStatus singleton, now the host.session.status topic.

Both invariants the old code relied on are preserved. Publishing stays
fire-and-forget, so a failing subscriber cannot disturb a metrics poll or
a host delete. The automations engine subscribes to the bus at scheduler
start instead of being imported ad hoc, which keeps the edge
one-directional: automations may import repositories, hosts modules must
not import automations.

* feat: add plugin ctx broker with permission gate and audit

Every ctx call a plugin makes is checked against its granted
capabilities, performed by the main thread, then audited. A capability
must be both declared in the manifest and granted in the database, so
widening a plugin's reach always needs a new manifest the user can see,
never just a database row.

Audit attribution is set by the broker, not the plugin. The plugin
supplies only the details, so it cannot forge the actor.

fix: stop plugin workers seeing plaintext credentials in error messages

A failing ctx.ssh.connect handed the worker the raw error from deep in
the SSH stack, which embeds the connect config. The worker received, in
full:

  Authentication failed for root using password <SECRET>

where <SECRET> was the host's real plaintext password. Any plugin with
ssh.exec could read it by catching the error, defeating the whole point
of the handle-based ssh API.

Errors crossing the boundary are now sanitised. Only PluginFacingError
and PluginPermissionError, both authored here, reach a plugin verbatim;
anything else becomes a generic message and the real one goes to the
log. This uses a marker class rather than matching on message text,
because matching would start leaking again the moment an upstream error
happened to contain a familiar phrase.

Covered by credential-isolation.test.ts, which plants a sentinel in
every secret-bearing field and asserts it appears in no message the
worker ever receives.

* feat: dispatch plugin HTTP routes and wire the runtime into startup

ctx.http.route now registers a real router on the /plugin-api/:pluginId
dispatcher, replacing its stub 404. A plugin never touches the Express
req/res: it gets a plain summary and returns a plain object, so sockets
and session cookies stay on this side of the boundary. Authorization and
cookie headers are not forwarded.

Plugins load last in the start-up sequence, after the server is fully
wired, and are terminated before the database on shutdown so none can
outlive it. A plugin that fails to load cannot stop the backend.

fix: correct the nginx plugin-api location regex

The pattern was ^/plugin-api/(/.*)?$, which needs a double slash and so
never matched /plugin-api/<id>/<route>. Every other block in the file
uses ^/prefix(/.*)?$. Left alone, plugin routes would work in dev and
404 only behind Docker.

* fix: update stale SFTP transfer test for single file destination paths

The test still asserted transferToHost was called with the destination
directory "/srv". Commit 7727fa09 (#1304) deliberately changed a single
file transfer to send the full destination path including the filename,
so the correct expectation is "/srv/remote-1.txt". The code was right
and the test was left behind.

* feat: ship the ssh terminal as a first-party in-process plugin

Adds a hardcoded process:transport-owner tier so the terminal can own its
WebSocket server and ssh2 clients, which cannot cross the worker boundary.

* feat: ship docker as a first-party in-process plugin

Moves docker backend and frontend into plugins/docker/, alongside
ssh-terminal. Adds a host editor tab seam, a dashboard card registry,
and a build step to compile plugin backends into dist.

* feat: ship host metrics as a first-party in-process plugin

* fix: harden plugin auth and add per-request identity for ctx calls

Require auth on /plugin-api, gate plugin enable/grant/revoke routes
behind admin.plugins.manage, and thread the calling user through
worker ctx.hosts/ctx.ssh calls instead of always using the install
owner. Also adds the plugin permissions grant/revoke UI.

* feat: ship the AI assistant as a first-party in-process plugin

Moves src/backend/ai and its routes into plugins/ai, mounted through a
small /ai dispatcher instead of its own port. Moves the ai-enabled and
ai-private-endpoints settings routes out of user-settings-routes.ts
into the plugin too, so it has no leftover core dependents.

* fix: remove compiled plugin JS left behind in plugins/ after build

copy-bundled-plugins.cjs compiled and rewrote plugin backend TS in
place, copied it to dist/plugins, but never deleted the .js it had
just emitted next to the .ts sources. Those files shadowed the real
source for vitest/tsx and had import paths rewritten for the dist
layout, so tests failed with "Cannot find module" once a local build
had run. Affects docker, host-metrics and ai, not just this one.

* feat: add a permission-gated backend service registry for plugins

* feat: add a permission-gated UI action registry and action slots for plugins

Moves the terminal toolbar's hardwired AI button into a slot the ssh-terminal
plugin offers and the ai plugin fills, gated on ai.services.use.

* feat: add cross-plugin secret references gated by the provider's RBAC permission

* feat: move proxmox discovery/import/sync into a first-party plugin

* feat: move remote desktop (RDP/VNC/Telnet) into a first-party plugin

Relocates guacamole backend/frontend source and tests into
plugins/remote-desktop, following the ssh-terminal/docker pattern.

* feat: wire remote-desktop plugin into core and rename i18n keys

Repoints core consumers (dispatcher, collab, session-sharing, tab
utils) at the plugin, adds isTabTypeAvailable gating for rdp/vnc/
telnet, widens hostCapability to accept an array, and renames the
guacamole i18n namespace to remoteDesktop.

* feat: move fleets into a first-party plugin

* feat: move automations into a first-party plugin

* feat: remove legacy alert rules, superseded by automations

Alert rules already auto-migrate into automations on boot and the old
engine stands down after. Deletes the rule/firing tables, routes, UI,
and AI tools; keeps notification channels since automations still use
them. Also fixes automations' notify step, which still called the
deleted repository.

* feat: move network topology into a first-party plugin

* feat: move tailscale device discovery and settings into a plugin

Adds plugins/tailscale/ with a devices sidebar tab, admin settings
section, and re-auth dialog. Host Metrics tailscale manager card and
SSH re-auth banner parsing stay in core.

* feat: move workspaces into a first-party plugin

* feat: move web endpoint into a first-party plugin

* feat: collapse plugin runtime to one tier behind a plugin SDK

* feat: make each plugin an npm workspace built by a termix-plugin CLI

* feat: give plugins their own tables, migrations and sync entities

* feat: serve plugin http and websockets from one mount instead of ports

* feat: namespace plugin permissions and keep them valid when a plugin is off

* feat: give plugins their own settings and one settings screen

* feat: load plugin frontends at runtime and remove plugin ids from the shell

* fix: mock the ai status fetch in its activate test

* feat: add auth extension points and one ssh connect pipeline

* feat: rebuild workspaces as the reference plugin

* fix: gate second factors after SSO/LDAP behind an admin setting

* feat: convert network-topology to a full plugin (B1)

* feat: move snippets backend and tables into a plugin (B2)

* feat: point core frontend snippets pickers at the plugin (B2)

* feat: add the snippets plugin (B2)

* feat: wire ai, automations, fleets and ssh-terminal to snippets (B2)

* feat: finish the tailscale plugin, including SSH auth (B3)

* feat: finish the fleets plugin, add ctx.hosts and host-commands SDK (B4)

* chore: update proxmox and host-metrics locale files for B5

* chore: regenerate drizzle migration journals for B5

* feat: add ctx.hosts create/update to the SDK, host-metrics drops proxmox

* feat: move proxmox node stats and collectors into the proxmox plugin

* feat: drop proxmox host columns, use plugin settings instead

* feat: finish the fleets plugin, add ctx.hosts and host-commands SDK (B4)

* feat: convert file manager into a plugin

* feat: convert ssh tunnels into a plugin

* feat: finish the web-endpoint plugin, add ctx.desktop (B8)

* feat: move the terminal fully into the ssh-terminal plugin (B9)

* feat: convert tmux monitoring into a plugin (B10)

* feat: convert serial console into the serial plugin

* feat: move session sharing and collab rooms into a plugin (B12)

* feat: turn session recording into a plugin (B13)

* feat: finish the remote-desktop plugin (B14)

* feat: finish the host-metrics plugin, move host status into core (B16)

* feat: finish the docker plugin (B15)

* feat: finish the automations plugin (B17)

* feat: finish the ai plugin (B18)

* feat: finish the homepage plugin, move service links and canvas out of core (B19)

* feat: convert wake-on-lan into a plugin (B20)

* feat: convert secret-sources into a plugin (B20)

* feat: move totp and passkeys into plugins (C1)

* feat: move sso and ldap logins into plugins (C2)

* feat: move opkssh and warpgate into plugins (C3)

* feat: move step-ca into a plugin (C4)

* feat: move vault ssh signing into a plugin (C5)

* feat: move termix identity into a plugin (C6)

* feat: move acme certificate automation into a plugin (C7)

* fix: finish 2.9.0 plugin moves and get every check green

* chore: lock the plugin boundary and remove 2.9.0 leftovers

* fix: harden the plugin runtime after the 2.9.0 security review

* feat: add plugin packing, signing, pinned trust and tmxplug bundling

* test: prove 2.8 to 2.9.0 upgrade is lossless and fix what it caught

* fix: give bundled plugin backends a real require for CJS deps

* feat: improve UI loading time and jitter

* feat: show credential sharing inline in the sidebar like host sharing

* feat: tailscale add host and copy ip, fix outbound fetch hang and plugin ESM warning

* feat: unify alerts into one plugin, channels, rules and inbox

* feat: rebuild desktop sync as linked server accounts, fix packaged plugin bundles and UI scaling

* fix: set blacksmith builder cache-key to stop broken gha cache fallback

* fix: link plugin-sdk workspace before npm ci in docker deps stage

* fix: link every plugin workspace before npm ci in docker deps stage

* fix(host-metrics): exclude image and firmware filesystems (#1469)

* fix(host-metrics): exclude image and firmware filesystems

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(hosts): normalize imported jump host references (#1470)

* fix(hosts): normalize imported jump host references

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(ci): build plugin SDK and repair MySQL settings migration (#1471)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): keep inline rename consistent (#1476)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): keep inline rename consistent

* fix(dashboard): reuse translated host status labels (#1475)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(dashboard): reuse translated host status labels

* docs(api): clarify local and remote version fields (#1474)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* docs(api): clarify local and remote version fields

* fix(file-manager): preserve selected backgrounds on hover (#1473)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): preserve selection feedback on hover

* test(ui): await dialog focus cleanup before teardown

* fix(file-manager): restore Ctrl/Cmd+F file search (#1472)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): focus file search with Ctrl or Cmd F

* fix: keep rounded-full circular in production builds

* fix(file-manager): cancel uploads and stop remote writes (#1477)

* fix(file-manager): cancel uploads and stop remote writes

* test(css): exercise the configured PostCSS plugin chain

* fix(file-manager): apply compact density to directory tree (#1478)

* fix(file-manager): apply compact density to directory tree

* test(css): exercise the configured PostCSS plugin chain

* fix(file-manager): preserve font sizes in compact mode (#1480)

* fix(file-manager): preserve font sizes in compact mode

* test(css): exercise the configured PostCSS plugin chain

* fix(file-manager): prioritize file names in narrow lists (#1483)

* fix(file-manager): prioritize file names in narrow lists

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* test(remote-desktop): always mutate ciphertext in tamper test

* fix(remote-desktop): probe the saved host guacd endpoint (#1481)

* fix(remote-desktop): probe the saved host guacd endpoint

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* fix(homepage): check allowlisted private service reachability (#1479)

* fix(homepage): check allowlisted private service reachability

* test(css): exercise the configured PostCSS plugin chain

* fix(remote-desktop): stop unsolicited clipboard read prompts (#1482)

* fix(remote-desktop): read clipboard only on explicit paste

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* test(remote-desktop): always mutate ciphertext in tamper test

* chore: simplify plugin readmes, changelogs and manifest descriptions

* fix: keep plugins loaded after signing in from the login screen

* fix(file-manager): accept OS file drops over existing rows (#1484)

* fix(file-manager): accept OS file drops over existing rows

* test(file-manager): target the file label in drop tests

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* test(remote-desktop): always mutate ciphertext in tamper test

* fix(file-manager): pipeline SFTP download reads (#1485)

* feat: add plugin sdk build to beta release

* fix: make link-store secret check immune to random base64 matches

* fix(ldap): preserve the directory-provided bind DN (#1486)

* fix: compute beta changes across dev branches and move the beta tag

* chore: untrack plugin sdk ARCHITECTURE.md

* chore: remove references to plugin sdk ARCHITECTURE.md

* feat: merge host editor terminal tabs into one owned by ssh-terminal

* feat: add descriptions to plugin host enable toggles

* fix(file-manager): show download progress in file viewers (#1487)

* fix(electron): signal backend readiness over IPC (#1488)

* fix(split-screen): allow layout creation without randomUUID (#1490)

* fix(split-screen): allow layout creation without randomUUID

* test(credentials): avoid flaky Ed25519 key generation

* fix(sidebar): remeasure visible rows after density changes (#1489)

* fix(sidebar): remeasure visible rows after density changes

* test(credentials): avoid flaky Ed25519 key generation

* feat(split-screen): redesign split screen with free-form panes and pane picker

* feat(sidebar): add host click behavior setting, default to always opening a new tab

* feat(snippets): redesign panel to match the host list

* fix(session-recording): stop session logs panel from refetching in a loop

* feat(snippets): bring back sharing, target hosts and drag reorder

* feat(ssh-terminal): add toolbar position, start state, display and fade host settings

* feat(ssh-terminal): add host setting to turn off password prompt auto-fill

* fix(ai): stop streams getting cut off and keep tool steps across messages

* feat: improve quick connect system using plugin api

* fix: proxmox guest sync, startup snippet sync, drop dead cloudflare ssh transport

* feat: move terminal settings, look and ssh tools into ssh-terminal plugin

* feat: move snippets, keybinding actions and macros out of core into plugins

* feat: store rdp, vnc and telnet logins in a generic per-protocol table

* feat: type the plugin host record, move plugin strings out of core and add lint checks

* feat: replace core homepage widget registry with generic extension points

* feat: plugins only see their own host settings in the browser

* feat: harden plugin api for separate repos, signed updates and generic external login

* fix: keep plugin css below core utilities and version plugin assets by their css

* fix: load and save plugin host settings in the editor and tighten settings row spacing

* feat: redesign user host defaults system

* fix(remote-desktop): release held keys on focus loss (#1498)

* fix(session-sharing): replace local presentation after takeover (#1500)

* fix(file-manager): refresh disk usage with directory listing (#1503)

* fix(ssh-terminal): preserve input order during local echo reconciliation (#1505)

* feat(remote-desktop): expose display zoom controls for RDP (#1514)

* fix(file-manager): restore text selection and copying in Markdown previews (#1518)

* fix(sidebar): keep compact host addresses visible (#1524)

* fix(hosts): preserve plugin settings when reopening the editor (#1499)

* fix(ssh-terminal): close owner sockets when presentations unmount (#1501)

* fix(session-sharing): synchronize shared SSH terminal dimensions (#1502)

* fix(session-sharing): show participant presence in member terminals (#1504)

* fix(ai): sync provider configuration and keys across linked devices (#1506)

* feat(ssh-terminal): add a duplicate tab action (#1510)

* feat(file-manager): allow disabling move-to-trash confirmation (#1511)

* feat(file-manager): default to the remote login directory (#1512)

* feat(homepage): synchronize canvas layouts across devices (#1515)

* fix(shortcuts): prevent accidental double-Shift palette activation (#1519)

* feat(tmux-monitor): add a unified multi-host view (#1520)

* fix(electron): allow explicit quit with active connections (#1522)

* feat: reconnect all disconnected terminal tabs (#1523)

* fix(hosts): preserve recording and sharing settings in the dev editor (#1509)

* fix(database): preserve RDP domain during startup backfill (#1497)

* feat(sidebar): add keyboard type-ahead search for hosts (#1516)

* feat(automations): add per-host maintenance mode and recurring schedules (#1521)

* feat(tmux): add a per-host mouse toggle and preserve remote configuration (#1513)

* fix(session-sharing): use the linked server for desktop meetings and links (#1507)

* fix(tunnels): support TOTP for client tunnels and jump hosts (#1508)

* fix: type errors and lint failures from merged plugin prs

* feat(installer): make the Windows desktop shortcut optional (#1517)

* fix: ship the plugin sdk and serialport in desktop builds

* fix: prefer ipv4 when resolving ssh host names (#1365)

* fix: readable terminal selection with the light theme (#1319)

* fix: build desktop session share links on the linked server (#1350)

* fix: show meeting guests to members and hide the roster from guests (#1353)

* fix: reliable file manager saves with sudo prompt and no base64 guessing (#1335)

* fix: show disk usage for the mount being browsed (#1347)

* fix: load the linux tray icon reliably and log tray failures (#1332)

* fix: cover the gnome close path in the desktop quit test (#1332)

* fix: prompt for jump host TOTP in terminal, file manager and metrics (#1312)

* feat: optional auto reconnect for dropped ssh sessions (#1321)

* feat: tighter compact host rows with inline tags (#1325)

* feat: bring back the alert feed homepage widget

* feat: pick target terminals for snippets again

* feat: share button on connection tabs again

* feat: recent servers list when linking the desktop app

* feat: list the fixed app shortcuts in keyboard shortcuts

* fix: translate hardcoded toasts and drop em dashes from ui text

* fix: translate leftover hardcoded ui text

* fix: toolbar files button opens at the shell directory again

* fix: show the remote desktop note under connection origin again

* chore: openapi docs for host metrics manager routes

* chore: openapi docs for undocumented routes and fix two broken doc blocks

* fix: declare terminal.listSessions use for snippet targets

* revert: drop the alert feed widget, the notification center replaces it

* feat: restore the alert feed homepage widget

* fix: quick connect fills the host address from plugin auth editors like tailscale

* fix: docker container logs use the base background color

* chore: fix dependabot alerts and apply safe npm upgrades

* fix: proxmox stats tab reads its switch from plugin host settings

* fix: count plugin ssh logins toward host status and stop showing reachable as a warning

* fix: hide the built-in source pill in the host editor

* fix: host status shows online when the port answers and only warns on a failed login

* fix: drop the top border on the split layout menu

* fix: host defaults tabs sit where the host editor puts them and skip plugins with nothing to default

* fix: remote desktop auth method labels and notes for vnc and telnet

* fix: add description to the web endpoint enable switch

* fix: crowdin sync and pretranslate for plugin locales, run plugin tests on release

* feat: move telemetry out of core into a usage statistics plugin

* fix: recent activity card no longer cuts off host names early

* fix: remove duplicate top border on split screen menu

* fix: redesign session log player controls, fix tooltip overlap and drop dot separators

* fix: file manager and sftp text showing raw i18n keys

* fix: onboarding rerunning for existing users after upgrading

* fix: fleet detail buttons overflowing the sidebar

* fix: session log player scrolling off screen horizontally

* fix: network graph lag when adding hosts and on every render

* fix: maintenance index name, shared host read only view and badge polling

* fix: meeting tabs, workspace tab merging, rail panels as tabs and general ui lag

* chore: update release notes

* fix: remote desktop tabs reconnecting on every tab switch

* fix: build plugin sdk before linting in release workflow

* chore: lint, format, and bump version to 2.9.0

* chore: skip crowdin pre-translate in release for now

* chore: sync Crowdin translations for 2.9.0

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Koi <38512047+datlt4@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
2026-10-01 16:20:16 -05:00

706 lines
36 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"mobileKeyboard": {
"addQuickKey": "追加",
"arrowDown": "↓",
"arrowLeft": "←",
"arrowRight": "→",
"arrowUp": "↑",
"backTab": "⇥",
"ctrl": "Ctrl",
"delete": "Del",
"done": "完了",
"editQuickKeys": "クイックキー編集",
"end": "エンド",
"esc": "Esc",
"home": "ホーム",
"pageDown": "PgDn",
"pageUp": "PgUp",
"paste": "貼り付け",
"quickKeyPlaceholder": "例: sudo ",
"quickKeysDesc": "× をタップして削除します。最大8文字まで対応。",
"quickKeysTitle": "クイックキー",
"removeQuickKey": "削除",
"resetDefaults": "デフォルトにリセット",
"shift": "Shift",
"tab": "Tab"
},
"terminal": {
"autoTmuxEnableFailed": "Auto-Tmux の有効化に失敗しました",
"autoTmuxEnabled": "{{host}}に対して Auto-Tmux が有効になりました。これは次回の接続時に適用されます。",
"clipboardHttpWarning": "クリップボードを読み取れませんでした。一部のブラウザはHTTPS接続以外でのクリップボードへのアクセスを制限しています。代わりにCtrl+Vを試すか、TermixをHTTPS経由で提供してみてください。",
"closeTab": "閉じる",
"connecting": "接続中...",
"connectionLost": "接続切断",
"connectionRejected": "サーバーによって接続が拒否されました。認証設定とネットワーク構成を確認してください。",
"connectionTimeout": "接続タイムアウト",
"enableAutoTmuxAction": "Auto-Tmux を有効にする",
"hostKeyRejected": "SSHホストキーの検証が拒否されました。接続がキャンセルされました。",
"linkDialogCopy": "コピー",
"linkDialogOpen": "開く",
"linkDialogTitle": "リンクを開く",
"maxReconnectAttemptsReached": "再接続の最大試行回数に達しました",
"noHostSelected": "ホストが選択されていません",
"passwordPromptFillTitle": "保存されたパスワードをこのプロンプトに入力しますか?",
"reconnect": "再接続",
"reconnected": "再接続完了",
"reconnecting": "再接続中... ({{attempt}}/{{max}})",
"autoReconnecting": "接続が切断されました。再接続中です。",
"searchCaseSensitive": "マッチケース",
"searchClose": "閉じる(Escキー)",
"searchNext": "次の試合(入場)",
"searchNoResults": "検索結果なし",
"searchPlaceholder": "探す",
"searchPrevious": "前の試合 (Shift+Enter)",
"searchRegex": "正規表現を使用する",
"searchResultCount": "{{index}} / {{count}}",
"searchWholeWord": "単語全体を一致させる",
"sessionExpiredNotice": "{{host}} での前回のセッションは {{minutes}} 分後に切断され、シェルおよびそこで実行されていたすべてのものが失われました。セッションを維持するには、このホストで Auto-Tmux を有効にしてください。",
"sessionExpiredNoticeNoMinutes": "{{host}} での前回のセッションは、接続が切断された状態で期限切れになりました。シェルおよびシェル内で実行されていたすべてのプロセスは失われています。セッションを維持するには、このホストで Auto-Tmux を有効にしてください。",
"sessionTakenOver": "セッションが別のタブで開かれました。再接続中...",
"tmuxAttached": "接続クライアント",
"tmuxAttachedCount": "{{count}} 接続",
"tmuxCopyHint": "選択範囲を調整してEnterでクリップボードにコピー",
"tmuxCreateNew": "新規セッションを開始",
"tmuxDetached": "tmuxセッションからデタッチしました",
"tmuxLastActivity": "最終アクティビティ",
"tmuxSessionAttached": "tmuxセッションに接続しました: {{name}}",
"tmuxSessionCreated": "tmuxセッションが作成されました: {{name}}",
"tmuxSessionPickerDesc": "このホストに既存のtmuxセッションがあります。再アタッチするか、新しいセッションを作成してください。",
"tmuxSessionPickerTitle": "tmuxセッション",
"tmuxTimeDays": "{{count}}日前",
"tmuxTimeHours": "{{count}}時間前",
"tmuxTimeJustNow": "たった今",
"tmuxTimeMinutes": "{{count}}分前",
"tmuxUnavailable": "リモートホストにtmuxがインストールされていません。標準シェルにフォールバックします。",
"tmuxWindowCount": "{{count}} ウィンドウ",
"tmuxWindows": "ウィンドウ",
"unknownError": "不明なエラーが発生しました",
"websocketAbnormalClose": "接続が予期せず切断されました。リバースプロキシまたはSSLの設定に問題がある可能性があります。サーバーログを確認してください。",
"websocketError": "WebSocket接続エラー",
"clipboardReadFailed": "クリップボードからの読み取りに失敗しました。クリップボードのアクセス許可が付与されていることを確認してください。",
"clipboardWriteFailed": "クリップボードへのコピーに失敗しました。ページがHTTPSまたはlocalhostで提供されていることを確認してください。",
"connected": "接続中",
"totpCodeLabel": "確認コード",
"duplicateTab": "重複タブ",
"imageChooseFile": "画像ファイルを選択してください",
"imageUploaded": "アップロードされた画像: {{path}}",
"imageClipboardUnavailable": "このブラウザはクリップボードから画像を読み取ることができません",
"imageClipboardEmpty": "クリップボードに画像が見つかりませんでした",
"localShell": "ローカル端末シェル",
"autocompleteHintComplete": "タブキーまたはエンターキーを押して完了",
"autocompleteHintNavigate": "↑↓でナビゲート",
"autocompleteHintClose": "Escキーを押して閉じる"
},
"terminalToolbar": {
"detachTmux": "tmuxをデタッチする",
"detachTmuxDescription": "tmuxセッションをデタッチする",
"dismissError": "画像エラーを非表示にする",
"hideToolbar": "ツールバーを非表示にする",
"image": "画像アクション(画像のみ)",
"imageActionFailed": "画像操作が失敗しました",
"layout": "ツールバー表示モード",
"layoutExpanded": "指標を追加して拡張",
"layoutIcon": "アイコンのみ",
"layoutLabeled": "アイコンとラベル",
"moveToolbar": "ツールバーを移動",
"moveToolbarHint": "ツールバーをドラッグして位置を変更します",
"paste": "画像を貼り付ける",
"pasteImage": "クリップボードから画像を貼り付ける(画像のみ)",
"retry": "再試行",
"showToolbar": "ツールバーを展開",
"upload": "画像をアップロード",
"uploadImage": "ホストに画像をアップロードする",
"uploadingImage": "アップロード中..."
},
"history": {
"noTerminalSelected": "ターミナルが選択されていません",
"noTerminalSelectedHint": "SSH ターミナルタブを開いてコマンド履歴を表示",
"searchPlaceholder": "履歴を検索...",
"clearAll": "すべてクリア",
"noHistoryEntries": "履歴エントリがありません",
"trackingDisabled": "履歴の追跡が無効です",
"trackingDisabledHint": "このホストのSSHターミナルタブでコマンド履歴を有効にしてください。",
"commandCount_one": "{{count}} コマンド",
"commandCount_other": "{{count}} コマンド"
},
"touchInput": {
"enabled": "タッチ入力を有効にする",
"enabledDesc": "端末で指一本でのスクロールを可能にする",
"momentumEnabled": "勢いを加速させる",
"momentumEnabledDesc": "スワイプ後、少しスクロールを続ける",
"advanced": "高度な",
"resetDefaults": "デフォルトにリセット",
"dragThreshold": "ドラッグしきい値",
"maxWheelDelta": "最大ホイールデルタ",
"momentumSampleWindow": "モメンタムサンプルウィンドウ",
"releaseGracePeriod": "釈放猶予期間",
"minimumVelocity": "最小速度",
"maximumVelocity": "最大速度",
"maximumDuration": "最大持続時間",
"maximumTravel": "最大移動距離",
"decayTime": "減衰時間",
"pixelsPerTick": "ピクセル/ティック",
"maximumFrameInterval": "最大フレーム間隔",
"maximumTicksPerFrame": "フレームあたりの最大ティック数"
},
"imageStorage": {
"instanceId": "端末セッションインスタンスID",
"instanceIdDesc": "接続されているターミナルタブのいずれかのインスタンスID。表示テストに使用されます。",
"selectedModeUnavailable": "利用不可",
"test": "テスト",
"testing": "テスト中...",
"testFailed": "画像ストレージのテストに失敗しました",
"testConnected": "端末セッションが接続されました。",
"testNotConnected": "このインスタンスIDで接続されている端末セッションはありません。",
"testSelectedMode": "アップロードには以下を使用します: {{mode}}",
"testLocalVisible": "ローカルディレクトリは、接続されているホストから参照可能です。",
"testLocalNotVisible": "ローカルディレクトリは、接続されているホストからアクセスできません。"
},
"settings": {
"admin": {
"group": {
"touch": "タッチ入力",
"images": "画像ストレージ",
"sessions": "セッション",
"newHosts": "新しいホスト"
},
"sessionTimeoutMinutes": {
"label": "端末セッションの永続性",
"description": "切断された端末がサーバー上で閉じられるまでの時間。最小1分、最大1440分。この時間を超えてセッションを継続する必要がある場合は、ホスト上でAuto-Tmuxを有効にしてください。"
},
"commandHistoryEnabled": {
"label": "コマンド履歴",
"description": "コマンド履歴の記録を許可します。無効にすると、ホストごとの設定に関わらず履歴は保存されません。"
},
"commandHistoryForNewHosts": {
"label": "新規ホストのコマンド履歴",
"description": "新しいホストがコマンド履歴を有効にした状態で起動するかどうか。"
},
"imageStorageMode": {
"label": "ストレージモード",
"description": "貼り付けおよびアップロードされた端末イメージが書き込まれる場所。接続による自動選択、ローカルおよびリモート(SFTP)が固定されています。",
"auto": "自動",
"local": "ローカル",
"remoteSftp": "リモート(SFTP)"
},
"imageLocalDir": {
"label": "ローカルディレクトリ",
"description": "Termixバックエンド上の、ローカルモードが画像を書き込む絶対パス。保存後は表示されません。空欄の場合はTERMIX_IMAGE_DIRが使用されます。"
},
"imageHostPath": {
"label": "ホストパス",
"description": "端末エージェントが受信するローカルディレクトリのホスト側ビュー。"
},
"imageTtlMs": {
"label": "TTL(ミリ秒)",
"description": "アップロードされた画像が保持される期間(ミリ秒単位)。空欄の場合はTERMIX_IMAGE_TTL_MS(1時間)が使用されます。"
},
"imageMaxCount": {
"label": "最大画像数",
"description": "ほとんどの画像は一度に保持されます。空の場合はTERMIX_MAX_IMAGE_COUNTまたは100が使用されます。"
},
"imageMaxBytes": {
"label": "最大ストレージバイト数",
"description": "一度に保持される画像の最大バイト数。空の場合はTERMIX_MAX_IMAGE_STORAGE_BYTESまたは5 GiBを使用します。"
},
"sessionPersistence": {
"label": "切断後もセッションを維持する",
"description": "上記時間の間、サーバー上で切断された端末をアクティブな状態にしておくことで、そのタブを再度開いたときに、前回中断したところから作業が再開されます。"
},
"newHostAutoTmux": {
"label": "Auto-Tmux",
"description": "tmux内で新しいホストのターミナルを実行することで、セッションが切断後も維持されます(ホストにtmuxがインストールされている必要があります)。"
},
"newHostTheme": {
"label": "新規ホスト向けテーマ",
"description": "新しいホストが起動時に使用するターミナルテーマ。"
},
"newHostFontFamily": {
"label": "新規ホスト用のフォント",
"description": "新しいホストが起動時に使用するターミナルフォント。"
},
"newHostFontSize": {
"label": "新規ホスト向けのフォントサイズ",
"description": "新しいホストが最初に使用する端末のフォントサイズ(ピクセル単位)。"
},
"newHostCursorStyle": {
"label": "新規ホスト向けのカーソルスタイル"
},
"newHostCursorBlink": {
"label": "新規ホストの場合はカーソルが点滅します"
}
},
"host": {
"enableTerminalToolbar": {
"label": "ターミナルツールバーを有効にする",
"description": "このホストのツールとリアルタイム統計情報に素早くアクセスできるツールバーを、アクティブなターミナルにドッキングして表示します。"
},
"terminalToolbarPosition": {
"label": "ツールバーの位置",
"description": "ターミナル内のツールバーの位置です。そこからドラッグして移動することもできます。",
"bottom": "下中央",
"bottomLeft": "左下",
"bottomRight": "右下",
"top": "中央上部",
"topLeft": "左上",
"topRight": "右上"
},
"terminalToolbarStartState": {
"label": "ツールバーの開始状態",
"description": "端末が接続されたときにツールバーが展開された状態で開くか、最小化された状態で開くか",
"expanded": "拡張版",
"collapsed": "最小化"
},
"terminalToolbarDisplay": {
"label": "ツールバー表示モード",
"description": "ツールバーボタンの表示方法。最後に使用したボタンは、ツールバーに保持されます。",
"remember": "最終使用日時",
"icon": "アイコンのみ",
"labeled": "アイコンとラベル",
"expanded": "統計情報を追加"
},
"terminalToolbarShowStatus": {
"label": "ライブ統計を表示",
"description": "展開モードでツールバーボタンの上にホストのライブ統計情報を表示する"
},
"terminalToolbarFade": {
"label": "アイドル時にフェードアウト",
"description": "ツールバーをマウスオーバーするまでフェードアウトさせる"
},
"enableCommandHistory": {
"label": "コマンド履歴",
"description": "このターミナルで実行されたコマンドを履歴とオートコンプリート用に記録します"
},
"enableTerminal": {
"label": "ターミナルを有効化",
"description": "このホストにSSHターミナルを提供します。"
},
"inheritAppearance": {
"label": "ユーザーデフォルトを使用する"
},
"theme": {
"label": "テーマ"
},
"cursorBlink": {
"label": "点滅するカーソル"
},
"cursorStyle": {
"label": "カーソルスタイル"
},
"fontSize": {
"label": "フォントサイズ"
},
"fontFamily": {
"label": "フォント"
},
"scrollback": {
"label": "スクロールバック"
},
"letterSpacing": {
"label": "文字間隔"
},
"lineHeight": {
"label": "行の高さ"
},
"bellStyle": {
"label": "ベル"
},
"minimumContrastRatio": {
"label": "最小コントラスト比"
},
"backgroundImage": {
"label": "背景画像"
},
"backgroundImageOpacity": {
"label": "背景画像の不透明度"
},
"customThemeColors": {
"label": "カスタムテーマカラー"
},
"rightClickSelectsWord": {
"label": "右クリックで単語を選択"
},
"macOptionIsMeta": {
"label": "オプションはメタです"
},
"fastScrollModifier": {
"label": "高速スクロールキー"
},
"fastScrollSensitivity": {
"label": "高速スクロール速度"
},
"backspaceMode": {
"label": "バックスペース"
},
"autoMosh": {
"label": "オートモッシュ"
},
"moshCommand": {
"label": "モッシュコマンド"
},
"autoTmux": {
"label": "自動tmux"
},
"useSSHTitle": {
"label": "SSHタイトルを使用する"
},
"syntaxHighlighting": {
"label": "構文ハイライト"
},
"syntaxHighlightingOptions": {
"label": "構文強調表示カテゴリ"
},
"linkClickBehavior": {
"label": "リンクをクリック"
},
"localEcho": {
"label": "ローカルエコー"
},
"passwordPromptAutoFill": {
"label": "パスワード入力欄への入力を代行する。"
},
"sudoPasswordAutoFill": {
"label": "sudoプロンプトに記入してください"
},
"autoReconnect": {
"label": "自動的に再接続します"
}
},
"user": {
"commandAutocomplete": {
"label": "コマンド補完",
"description": "タブキーを押すと入力中にオートコンプリートを表示する"
},
"localEcho": {
"label": "ローカルエコー",
"description": "安全なローカルキーストローク予測を使用して、体感入力遅延を低減する"
},
"linkClickBehavior": {
"label": "ターミナルリンククリック",
"description": "ターミナル内のリンクをクリックしたときのデフォルト動作"
},
"customThemes": {
"label": "保存されたテーマ"
}
}
},
"palette": {
"localTerminal": "ローカル端末"
},
"permissions": {
"sessions": {
"title": "ライブターミナルセッションを使用する",
"description": "セッション共有や録画などの他の機能を、ライブのターミナルセッションで利用できるようにします。"
},
"history": {
"title": "コマンド履歴を読む",
"description": "AIアシスタントなどの他の機能が、あなたのコマンド履歴を読み取れるようにします。"
}
},
"hosts": {
"tabTerminal": "ターミナル",
"addHost": "ホストを追加",
"applyGlobalThemeTooltip": "このテーマを適用する",
"backgroundImageDesc": "ターミナルの背景画像のオプションURL",
"backgroundImageLabel": "背景画像 URL",
"backgroundImageOpacityLabel": "背景画像の不透明度",
"backspaceMode": "バックスペースモード",
"backspaceModeControlH": "コントロールH(BS)",
"backspaceModeLabel": "バックスペースモード",
"backspaceModeNormal": "通常(DEL)",
"behaviorAndAdvanced": "動作と詳細設定",
"bellStyle": "ベルスタイル",
"bellStyleBoth": "両方",
"bellStyleLabel": "ベルスタイル",
"bellStyleNone": "すべて解除",
"bellStyleSound": "音",
"bellStyleVisual": "ビジュアル",
"colorTheme": "カラーテーマ",
"cursorBlink": "カーソル点滅",
"cursorBlinking": "カーソル点滅",
"cursorBlinkingDesc": "ターミナルカーソルの点滅アニメーションを有効にします",
"cursorStyle": "カーソルスタイル",
"cursorStyleBar": "バー",
"cursorStyleBlock": "ブロック",
"cursorStyleLabel": "カーソルスタイル",
"cursorStyleUnderline": "下線",
"customThemeAnsiColors": "ANSIカラー",
"customThemeBackground": "背景",
"customThemeBlack": "黒",
"customThemeBlue": "ブルー",
"customThemeBrightBlack": "ブライトブラック",
"customThemeBrightBlue": "ブライトブルー",
"customThemeBrightCyan": "ブライトシアン",
"customThemeBrightGreen": "ブライトグリーン",
"customThemeBrightMagenta": "ブライトマゼンタ",
"customThemeBrightRed": "ブライトレッド",
"customThemeBrightWhite": "ブライトホワイト",
"customThemeBrightYellow": "ブライトイエロー",
"customThemeColors": "カスタムカラー",
"customThemeCursor": "カーソル",
"customThemeCursorAccent": "カーソルアクセント",
"customThemeCyan": "シアン",
"customThemeForeground": "前景",
"customThemeGreen": "緑",
"customThemeMagenta": "マゼンタ",
"customThemeRed": "赤",
"customThemeResetTooltip": "デフォルトにリセット",
"customThemeSelection": "選択",
"customThemeWhite": "ホワイト",
"customThemeYellow": "黄",
"deleteGlobalThemeTooltip": "このテーマを削除",
"docsLink": "ドキュメントを表示",
"enableAutoMosh": "Auto-Mosh を有効にする",
"enableAutoMoshDesc": "利用可能な場合、SSH よりも Mosh を優先します",
"enableAutoTmux": "Auto-Tmux を有効にする",
"enableAutoTmuxDesc": "tmux内で実行することで、接続切断やブラウザの再起動後もシェルとその中で実行されているすべての処理を正常に実行状態に保つことができます(ホストにtmuxがインストールされている必要があります)。",
"fastScrollModifier": "高速スクロール修飾キー",
"fastScrollModifierAlt": "Alt",
"fastScrollModifierCtrl": "Ctrl",
"fastScrollModifierLabel": "高速スクロールの修飾キー",
"fastScrollModifierShift": "Shift",
"fastScrollSensitivity": "高速スクロール感度",
"fastScrollSensitivityLabel": "高速スクロールの感度",
"fontFamily": "フォントファミリー",
"fontFamilyCustomHint": "同梱のフォントを選択するか、「カスタム」を選択して、システムに既にインストールされているフォントの正確な名前を入力してください(例:MesloLGS NF、Noto Sans Mono)。Termixはフォントをインストールできませんので、まずTermixをOSにインストールしてください。",
"fontFamilyCustomOption": "カスタム...",
"fontFamilyCustomPlaceholder": "正確なフォント名(例:MesloLGS NF)",
"fontFamilyLabel": "フォントファミリー",
"fontSize": "フォントサイズ",
"fontSizeLabel": "フォントサイズ",
"hostNotFound": "ホストが見つかりません",
"letterSpacing": "文字間隔",
"letterSpacingPx": "文字間隔 (px)",
"lineHeight": "行の高さ",
"lineHeightLabel": "行の高さ",
"linkClickBehaviorConfirm": "開くまたはコピーするポップアップを表示",
"linkClickBehaviorDesc": "ターミナル内のリンクをクリックしたときの動作を制御します。「デフォルト」を選択することで、アプリ全体の設定に従います。",
"linkClickBehaviorDirect": "直接開く",
"linkClickBehaviorLabel": "リンククリック時の動作",
"loadingHost": "ホストを読み込み中...",
"localEchoAuto": "自動",
"localEchoDesc": "低速回線でも、印刷可能な安全なキー入力をローカルで予測します。パスワード入力や制御入力はエコーバックされません。",
"localEchoLabel": "ローカルエコー",
"localEchoOff": "オフ",
"localEchoOn": "常時接続",
"macOptionIsMetaLabel": "Optionキーでメタデータを送信",
"macOptionIsMetaShortDesc": "macOSで特殊文字(@や|など)を入力する際に、Metaを送信する代わりにOption/Altキーを使用するのを無効にする",
"moshCommand": "Mosh コマンド",
"moshCommandLabel": "Mosh コマンド",
"noSavedThemes": "まだ保存されたテーマはありません",
"none": "なし",
"passwordPromptAutoFillDesc": "端末でパスワードの入力を求められた際に、保存済みのパスワードを入力するよう促します。このホストではパスワードの自動入力を一切行わないようにするには、この設定を無効にします。",
"passwordPromptAutoFillLabel": "パスワードの自動入力機能を提供する",
"autoReconnectLabel": "自動再接続",
"autoReconnectDesc": "ネットワーク障害やスリープ状態などによりSSH接続が切断された場合、自動的に再接続します。スクロールバックした状態は保持されます。",
"rightClickSelectsWord": "右クリックで単語選択",
"rightClickSelectsWordLabel": "右クリックで単語選択",
"rightClickSelectsWordShortDesc": "右クリック時にカーソル下の単語を選択します",
"saveAsGlobalTheme": "グローバルテーマとして保存",
"saveGlobalThemeError": "テーマの保存に失敗しました",
"saveGlobalThemeNamePrompt": "このテーマの名前を入力してください",
"saveGlobalThemeSuccess": "テーマが保存されました",
"savedThemesLabel": "保存済みテーマ",
"scrollbackBufferLabel": "スクロールバッファ",
"scrollbackMaxLines": "履歴に保持する最大行数",
"sudoPasswordAutoFill": "Sudo パスワードの自動入力",
"sudoPasswordAutoFillDesc": "sudo パスワードを保存して、ホストメトリクス、ターミナルプロンプトなどが自動的に特権コマンドを実行できるようにします",
"sudoPasswordAutoFillLabel": "sudo パスワードの自動入力",
"syntaxCategoryIpAddresses": "IPアドレス",
"syntaxCategoryIpAddressesDesc": "192.168.1.1, 10.0.0.1:8080",
"syntaxCategoryLogLevels": "ログレベル",
"syntaxCategoryLogLevelsDesc": "error, warn, info, debug, fatal",
"syntaxCategoryNumbers": "ラベル付き数値",
"syntaxCategoryNumbersDesc": "port 8080, exit 1, status 404",
"syntaxCategoryPaths": "ファイルパス",
"syntaxCategoryPathsDesc": "/usr/share/doc, ~/file.txt",
"syntaxCategoryTimestamps": "タイムスタンプ",
"syntaxCategoryTimestampsDesc": "[12:34:56], 2024-01-15",
"syntaxCategoryUrls": "URL",
"syntaxCategoryUrlsDesc": "https://example.com",
"syntaxHighlightingDesc": "ターミナル出力に色を付ける(エラー、パス、IP、タイムスタンプ)",
"syntaxHighlightingLabel": "シンタックスハイライト",
"terminalAppearance": "ターミナルの外観",
"theme": "テーマ",
"themePreview": "テーマプレビュー",
"useSSHTitleDesc": "タブのタイトルをホスト名ではなくシェルのウィンドウタイトルから更新する",
"useSSHTitleLabel": "SSHウィンドウタイトルを使用する",
"enableTunnel": "トンネルを有効にする",
"enableFileManager": "ファイルマネージャーを有効にする",
"enableDocker": "Dockerを有効にする",
"startupSnippet": "起動時スニペット",
"quickActions": "クイックアクション",
"proxmoxLastSyncStatus": {
"success": "成功"
},
"proxmoxResultSkippedNoIp": "{{count}} スキップしました(IPアドレスが見つかりませんでした)",
"proxmoxStatsUrlCopied": "Proxmox Stats URL がクリップボードにコピーされました",
"rdpUrlCopied": "RDP URL をコピーしました",
"vncUrlCopied": "VNC URL をコピーしました",
"filterAuthStepca": "ステップCA",
"guac": {
"noCredential": "認証情報なし (直接入力は以下)",
"authTypeDirect": "直接",
"authTypeCredential": "認証情報",
"authTypeNone": "すべて解除",
"recordingPath": "録画パス",
"recordingName": "録画名",
"saveHostFirst": "最初にホストを保存してください。",
"sharingOptionsAfterSave": "共有オプションはホストの保存後に利用可能です。",
"permissionLevel": "権限レベル",
"typeHeader": "タイプ",
"targetHeader": "ターゲット",
"permissionHeader": "権限",
"cancelBtn": "キャンセル",
"savingBtn": "保存中...",
"updateHostBtn": "ホストを更新",
"addHostBtn": "ホストを追加"
},
"filterAuthVault": "金庫"
},
"nav": {
"history": "履歴",
"localTerminal": "ローカル端末",
"sshTools": "SSHツール",
"terminal": "ターミナル",
"macros": "マクロ"
},
"sshTools": {
"broadcastInputPlaceholder": "ここに入力してキーをブロードキャスト...",
"copyOnSelect": "選択したテキストを自動的にコピーします",
"enableRightClickCopyPaste": "右クリックでのコピー/貼り付けを有効にする",
"fillPassword": "パスワードを自動入力",
"fillPasswordMissing": "選択した {{count}} 個のターミナルに保存されたパスワードがありません",
"fillPasswordSuccess": "{{count}} 個のターミナルにパスワードを入力しました",
"keyRecordingTitle": "キー記録",
"noTerminalTabsOpen": "開いている端末タブはありません",
"recordToTerminals": "ターミナルに記録",
"selectAll": "すべて選択",
"selectNone": "すべて解除",
"selectTerminalsAbove": "上のターミナルを選択",
"settingsTitle": "設定",
"startRecording": "記録開始",
"stopRecording": "記録停止"
},
"keybindings": {
"copy": "選択範囲をコピー",
"paste": "貼り付け",
"sendControlCode": "Ctrlキーと文字キーを同時に押して信号を送る",
"sendText": "テキストを送信",
"controlCodeLabel": "手紙",
"textLabel": "送信するテキスト",
"appendEnterLabel": "送信後にEnterキーを押してください。",
"clipboardPermissionNote": "一部のブラウザでは、初回使用時にクリップボードのアクセス許可を求められる場合があります。",
"textRequired": "送信するテキストを入力してください",
"controlCodeRequired": "制御コードとして1文字を入力してください",
"builtIn": {
"copyCtrlC": "選択範囲をコピーする(Ctrl+C、テキストが選択されている場合のみ)",
"copyCtrlShiftC": "選択範囲をコピーする(Ctrl+Shift+C)",
"copyCmdC": "選択範囲をコピーする(Cmd+C)",
"pasteCtrlShiftV": "クリップボードから貼り付け(Ctrl+Shift+V)",
"ctrlW": "Ctrl+Wをシェルに送信する(ブラウザタブを閉じることができない)",
"ctrlT": "Ctrl+T をシェルに送信してください(ブラウザのタブを開くことがブロックされます)。",
"ctrlN": "Ctrl+Nをシェルに送信する(ブラウザウィンドウを開くことがブロックされる)",
"ctrlQ": "Ctrl+Q をシェルに送信してください(ブラウザの終了がブロックされます)。"
}
},
"macros": {
"title": "マクロ",
"description": "ターミナルで保存済みのコマンド系列を実行し、サーバーからの応答に応じて処理を行います。",
"target": "ターゲット",
"noTerminal": "端末が開いていません",
"empty": "マクロはまだありません",
"emptyHint": "ログイン、サービスの再起動、プロンプトへの応答など、ターミナル操作の流れを自動化するマクロを作成します。",
"create": "新しいマクロ",
"back": "マクロに戻る",
"name": "名前",
"namePlaceholder": "ウェブサーバーを再起動します",
"nameRequired": "保存する前にマクロに名前を付けてください。",
"descriptionLabel": "説明",
"descriptionPlaceholder": "このマクロの機能(オプション)",
"unsaved": "保存されていない変更があります",
"save": "保存",
"saved": "マクロが保存されました",
"saveFailed": "マクロを保存できませんでした",
"delete": "削除",
"deleteTitle": "このマクロを削除しますか?",
"deleteBody": "\"{{name}}\" は完全に削除されます。元に戻すことはできません。",
"deleted": "マクロが削除されました",
"cancel": "キャンセル",
"run": "実行",
"stop": "ストップ",
"running": "実行中...",
"completed": "マクロ撮影終了",
"failed": "マクロが失敗しました",
"loadFailed": "マクロを読み込めませんでした",
"needTerminal": "まずターミナルを開いて接続します。",
"noSteps": "このマクロにはまだ手順がありません。以下に手順を追加してください。",
"addStep": "ステップを追加する",
"stepNumber": "ステップ {{number}}",
"removeStep": "削除手順",
"confirmRunTitle": "このマクロを実行しますか?",
"confirmRunBody": "\"{{name}}\" は {{host}} にコマンドを送信します。",
"confirmRunAction": "マクロを実行する",
"stepTypes": {
"send": {
"label": "コマンドを送信",
"help": "端末にテキストを入力します。まるで手入力したかのように表示されます。"
},
"wait": {
"label": "出力を待つ",
"help": "サーバーが指定したテキスト(パスワード入力画面など)を表示するまで一時停止します。"
},
"delay": {
"label": "一時停止",
"help": "次のステップに進む前に、一定時間待機します。"
},
"if": {
"label": "出力に以下が含まれる場合",
"help": "サーバーがこれまでに出力したすべての内容を確認し、その後、2つの分岐のうちいずれか1つを実行します。"
},
"repeat": {
"label": "繰り返す",
"help": "指定された回数だけ、その中の手順を実行します。"
}
},
"send": {
"text": "コマンドまたはテキスト",
"textPlaceholder": "systemctl restart nginx",
"pressEnter": "送信後にEnterキーを押してください。",
"pressEnterHelp": "テキストを送信せずに入力する場合は、これをオフにしてください。"
},
"wait": {
"pattern": "出力に以下が含まれるまで待機してください",
"patternPlaceholder": "パスワード:",
"timeout": "諦めた後",
"onTimeout": "それが決して現れない場合",
"stop": "マクロを停止する",
"continue": "とにかく続けて"
},
"delay": {
"duration": "待って"
},
"ifStep": {
"pattern": "出力に以下が含まれる場合",
"patternPlaceholder": "アクティブ:アクティブ(実行中)",
"then": "次にこれを実行してください",
"else": "そうでなければ、これを実行してください。",
"emptyBranch": "階段なし"
},
"repeat": {
"count": "回数",
"times": "タイムズ"
},
"match": {
"useRegex": "正規表現で一致させる",
"useRegexHelp": "原文と完全に一致させるには、この部分を削除してください。",
"invalidRegex": "有効な正規表現ではないため、プレーンテキストとしてマッチします。"
},
"seconds": "秒",
"secondsShort": "{{count}}s"
},
"errors": {
"remoteServerRequired": "リモートサーバーが必要です。この接続タイプを使用するには、設定でリモートサーバーを接続してください。"
}
}