mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-30 07:05:24 +00:00
* feat: let the login page send the token back to the mobile app * feat: add host-scripts entry to the plugin sdk * feat: let plugins say how they show in the mobile app * feat: frame host for running one plugin view outside the shell * fix: build the SDK host modules in production mode * chore: note the SDK host build fix in the changelog * feat: list plugin engine ranges for the mobile app * feat: host color and icon columns that sync * chore: update translations and plugin pins * fix: test * fix: show source address when rejecting proxy auth * fix: deleting your own account removes all of its data * fix(deps): update body-parser to 2.4.0 (#1736) * fix: body-parser 보안 패치 반영 * chore: 자동 검사를 막던 기존 JSON 서식 정리 --------- Co-authored-by: renovys <180682734+renovys@users.noreply.github.com> * fix(sdk): decode command output as GBK when it is not valid UTF-8 (#1735) * fix: honor shared credentials on shared hosts (#1730) * fix: honor shared credentials on shared hosts and in personal SSH auth * fix: snapshot shared SSH auth from a credential shared with the host owner * fix: size DataView list columns by the table's own width (#1713) * fix: size DataView list columns by the table's own width The list grid was built from every column, so columns hidden below md/lg left empty tracks and the visible cells landed under the wrong headers. Each width now gets a template of only its visible columns (CSS variables + container queries on the table, so a narrow panel counts, not the window), the header uses the same gap as the rows, and rows use a minimum height so wrapped cells no longer overlap. * test: wait for the title bar offset effect before asserting The bar shows once getTitleBarVisible resolves, but --termix-titlebar-height is set in a later passive effect, so reading it right after findByText raced (3-5 of 40 runs under load, on main too). * chore: rerun CI against dev-26.10.6 * fix: unlock passphrase keys once per connect burst (#1737) * feat: give ssh transports the host origin and sync id (#1717) * fix: wake other clients after a sync push (Plugin-Sync#1) * feat: look up local row ids by sync id for the sync plugin (Plugin-Sync#4) * feat: rail items can show a status dot (Plugin-Sync#5) * fix: add the desktop shared copy banner text (#1709) * feat: sidebar preference for alternating rows (#1712) * fix: striped rows text * feat: shell can open a saved host's editor for plugins (Plugin-SSH-Terminal#36) * fix: show the logo in the macos menu bar (#1728) * fix: number shortcuts skip the home tab (#1724) * fix: show plugins that could not be downloaded as failed (#1714) * fix: pass the host id as text when opening its editor * fix: retry a plugin bundle that was not ready yet (#1708) * fix: let commonjs plugins fall back to core packages on the desktop * fix: let non docker installs switch nginx to https (#1711) * feat: remove a folder share from its hosts too (#1719) * chore: changelog for merged pull requests * fix: accept the release .sig when installing a plugin from a file * feat: folder logins for shared hosts, read only plugin sync, full desktop builds * fix: test * fix: stop dev runner restart loops and narrow plugin watchers * chore: update translations and plugin pins * chore: lint, format, and bump version to 26.10.6 --------- Co-authored-by: renovys <renovy@gmail.com> Co-authored-by: renovys <180682734+renovys@users.noreply.github.com> Co-authored-by: Sebastian Cao <cycsmail@gmail.com> Co-authored-by: Jonathan Rehuel Lewerissa <jonathan.rehuel16@gmail.com> Co-authored-by: Rhiz3K <33246262+Rhiz3K@users.noreply.github.com>
12 KiB
12 KiB
Changelog
1.0.22
Plugin API 1.13.0.
Added
contributes.mobilein the manifest says how a plugin shows in the Termix mobile app:webview,nativeornone, with an optional mobile bundle, screen sizes, views and a notetermix-plugin buildbundlessrc/mobileinto thecontributes.mobile.entryfile, andvalidatechecks that it exists@termix-ssh/plugin-sdk/frame-hostruns one plugin view outside the shell, with core's bridge, registries and CSS, so the mobile app can showwebviewplugins- SSH transport providers get the host's owner, sync id, connection origin and local only flag in
claimsandopen, and core's SSH relay takes asyncIdinstead of a host id ctx.sync.host.entities.idsOfmaps sync ids to the local ids of the user's own rows of one type- Rail items take
useStatusfor a small ok, warning or error dot on the icon shell.editHost(hostId)opens the editor of a saved host- A sync entity can be read only with
load,writeanderase, so a plugin can sync rows a user does not own, like a shared library, down to linked desktops getFolderAuthOverrideandsetFolderAuthOverridein@termix-ssh/plugin-sdk/uiread and set a user's own login for the shared hosts in a folder
Fixed
@termix-ssh/plugin-sdk/uiis built in production mode, so outside Termix it no longer sends requests to the Vite dev server pathexecCommandbuffers output and decodes it once as strict UTF-8 with a GBK fallback, exposed asdecodeCommandOutput, so messages from a Windows host on a legacy codepage are readable instead of � characters
1.0.21
Plugin API 1.12.0.
Added
@termix-ssh/plugin-sdk/host-scripts: Docker, Linux metrics, systemd, journal and OpenRC command builders and parsers, plusscriptShell()andpasswordSudoScript()to send scripts tobash -son stdin. It has no Node or ssh2 imports, so the Termix mobile app runs the same code
1.0.20
Plugin API 1.12.0.
Added
columnsandonColumnsonViewToggleshow a cards per row picker: Auto fits as many as the pane has room for, or pick 1 to 6sizeandminCardWidthonDataView, so a card grid follows that pick, and theGridSizetypeusePluginPanelViewalso keepscolumns, the cards per row pick, withsetColumns
1.0.19
Plugin API 1.11.0.
Added
app.registerCompanionLayoutanduseCompanions, so a plugin can let each host turn the panel bar on or off, move it and choose which panels show and in what order
1.0.18
Plugin API 1.10.0.
Added
clientCerton the sync link, link patch and remote target, and theclient_certremote error kind, so a sync plugin can link to a server that needs mutual TLS
1.0.17
Plugin API 1.9.0.
Added
app.registerCompanionandapp.toggleCompanion, so a plugin can add a panel beside any host tab. The user opens, resizes and moves it, and the tab keeps runningNativeViewin@termix-ssh/plugin-sdk/ui, which shows a web page in a native view in the desktop app, for sites that do not work in an iframe
1.0.16
Plugin API 1.8.0.
Added
ctx.sync.provideand thesync:providecapability, so a plugin can answer every /sync requestctx.ssh.transports.provideand thessh:transportcapability, so a plugin can carry SSH connections over its own streamctx.hosts.folders.ensureandremoveEmpty
Removed
- The sync screens and calls in
@termix-ssh/plugin-sdk/ui:LinkServerDialog,ProxySettingsFields,useSyncStatus,refreshSyncStatus,setSyncStatus,getSyncConflicts,getSyncErrors,retrySyncErrors,settleSyncConflict,syncNow,unlinkServer,updateSyncSettingsand their types. They moved into the sync plugin
1.0.15
Plugin API 1.7.0.
Added
ctx.auth.policy.provideand theauth:policycapability, so a plugin can set an idle timeout, cap session length, turn off remember me and require a second factorctx.auth.listSecondFactorslists the second factors from every running pluginAuthEnrollmentSectionstakesfactorsOnlygetHttpsSettingsandupdateHttpsSettingsin@termix-ssh/plugin-sdk/ui
Fixed
- Plugin frontend tests against a locally linked SDK failed with a second copy of React
1.0.14
Plugin API 1.6.0.
Added
ctx.hosts.locks.provideand thehosts:lockcapability, so a plugin can manage hosts that stay read only for everyone else and block adding hosts by handctx.hosts.setSharesto replace every grant on a host in one callctx.credentials.listreturns the acting user's credentials by name, without secretsctx.hosts.createandupdatetakepassword,key,keyPassword,keyType,sudoPassword,protocolAuthandpluginEnable
1.0.13
Plugin API 1.5.0.
Added
runtime: "desktop"in the manifest for a plugin that only loads on the desktop appdesktop:localandctx.desktop.local: file system, local shell and machine info on the desktop app's own backendctx.audit.subscribe,ctx.audit.listandctx.audit.exportBatchesunderaudit:readctx.hosts.importMany,importSshConfig,exportManyandregisterImportNormalizer, with thehosts:exportcapabilityctx.credentials.publicKeyandresolveKeyRefs,ctx.ssh.exec, and@termix-ssh/plugin-sdk/ssh-keysctx.hosts.status.provideandctx.hosts.activity.provideso a plugin can own host status and recent activity, withctx.network.tcpProbe,ctx.ssh.probe,ctx.hosts.probeTargetsandctx.hosts.sessionActiveregisterHostStatusIndicatorandregisterHostEditorToolbarItem, andorderfor host badges- Onboarding steps can sit in a
startsection, take apositionandreplacesa core step - A plugin can provide the app name, tagline and logo through the
<id>.brandingProviderregistry key
1.0.12
Plugin API 1.4.0.
Added
contributes.layoutsandapp.registerLayout()for a whole-app layout, with theui:layoutcapability. Needsengine.api1.4contributes.themesfor CSS-only themes, with theui:themecapability.termix-plugin validatechecks theme CSS andpackships ituseShell()gives a layout the live shell: tabs, splits, hosts, docks, the command palette and the registries. The shell's home tab is left out until some plugin registers adashboardtab typeTabStageandShellConfirmCapturein@termix-ssh/plugin-sdk/ui, for a layout to place tabsvalidateThemeCss()in@termix-ssh/plugin-sdk/manifest@termix-ssh/plugin-sdk/uialso exports what a whole layout is built from: the API client, shared types, hooks,useShellController()andAPP_VERSION. These reach into core, so they can change with a core release@termix-ssh/plugin-sdk/testing-hostexports the registries and permission seam a layout's own tests fill directly- A plugin that only holds themes needs no source:
termix-plugin buildwrites an empty backend andvalidatedoes not ask for a frontend termix-plugin validateflagsui:layoutorui:themewith nothing contributed, and a layout plugin with no frontend
Fixed
- The manifest JSON schema lists the
notify:hubandplugins:readcapabilities - Plugin tests and type checks work with the SDK linked from a local Termix checkout
1.0.11
Plugin API 1.3.0.
Added
ctx.auth.issueUserToken()mints a short-lived session for a user, for calling Termix's own API as them from background work. Needsusers:impersonateandengine.api1.3ctx.users.getLocale()reads a user's UI language. Needsusers:readandengine.api1.3
1.0.10
Changed
termix-plugin packincludes the plugin'sLICENSEandNOTICEfiles, so third-party notices ship with it
1.0.9
Added
- Worker entries in
package.jsontermix.workers, each bundled on its own intodist/workers/<name>.js - A
.wasm,.ttfor.otfimport gives the file's bytes, intermix-plugin buildand in plugin tests
Fixed
- The plugin guide listed jszip, guacamole-lite and @anthropic-ai/sdk as shared packages, but they are bundled
1.0.8
Added
publicRateLimitonctx.http.router(), for a plugin whose public routes serve a proxied page
1.0.7
Fixed
- A migration file, or a part of one, holding only comments made core fail to start the plugin
1.0.6
Added
PLUGIN-GUIDE.md, a guide to building, testing and releasing a plugin, written so AI coding tools can read it too
1.0.5
Fixed
execCommandtimeout errors no longer include the command, which could hold a sudo passwordtermix-plugin validatefails when a plugin ships migrations for some database engines but not all threetermix-plugin migrationsloads the table definitions from a path with a#or other URL characters in it- Text, json and encrypted columns are
longtexton MySQL in new migrations, so they are no longer capped at 64KB. Existing migrations keeptext i18next,react-dom,react-i18nextandsonnerare optional peer dependencies, so npm stops installing them into backend-only pluginstermix-plugin validateaccepts a beta version like1.1.0-beta.1when the changelog's newest release is1.1.0or older, so beta releases pass
1.0.4
Fixed
termix-plugin buildputs a plugin's own Tailwind classes in core's utilities layer, so responsive, hover and group variants andclassNameoverrides on SDK components work. Plain classes core already ships stay below core's utilities as before, while variants core ships go with the plugin's own somax-h-56 md:max-h-nonekeeps its order. Rebuild a plugin to pick it up
1.0.3
Plugin API 1.2.0.
Added
docsmanifest field: an https link to the plugin's docs. Termix shows it as a Documentation link on the plugin's page and in its settingsenvmanifest field: the environment variables the plugin reads, listed in its docs and on its pageapp.docsanduseDocsUrl()for links into the plugin's own docs, andDocsLinkin@termix-ssh/plugin-sdk/uiPanelShelltakes adocslink and shows it as a book icon in the header@termix-ssh/plugin-sdk/openapiwithbuildOpenApi(), andtermix-plugin openapi, which writesdist/openapi.jsonfrom the@openapiblocks insrc/backend.buildruns it too@termix-ssh/plugin-sdk/docswithpluginDocsUrl(),pluginDocsPage()andpluginEnvVars()termix-plugin validatewarns whendocs/index.mdis missing or the source reads an env var the manifest does not list
1.0.2
Added
featuresmanifest field: up to 20 short lines about what the plugin does, shown on its page.pluginFeatures()reads them
Changed
parseChangelog()andvalidateChangelog()flag a## Unreleasedsection. Notes go under the version they ship in
Removed
Changelog.unreleased
1.0.1
Added
- Plugin API 1.1
app.registerOnboardingStep()adds a step to onboarding, withOnboardingStepPropsandOnboardingStepContribution. Needsengine.api1.1videomanifest field: a YouTube link shown at the top of the plugin's page, read withyoutubeVideoId()@termix-ssh/plugin-sdk/changelogparses and checks a plugin'sCHANGELOG.mdtermix-plugin changelogprints one version's notes fromCHANGELOG.mdtermix-plugin devinstalls a plugin on a running server and reinstalls it on every change. Needs developer mode and an admin API keyrenderOnboardingStep()andregistered.onboardingSteps()inrenderWithApp()AddButton,FormFooter,ListRow,ListRowAction,ListRowFolder,ListBadgeandPanelListin@termix-ssh/plugin-sdk/uiPanelSearchtakesdisabled,title,onEnterandinputRef, andSurfaceScopetakesonClose
Changed
- Release notes moved from
CHANGELOG.jsontoCHANGELOG.md, whichpacknow ships.validateflags a leftoverCHANGELOG.json ConnectionScreendroppederrorMessageandretryLabeland gainedonClose.ConnectionLogPaneldroppedposition- Plugin tests run in worker threads, since forked workers crash now and then on Windows
- The test setup stubs
ResizeObserverfor Radix controls under jsdom onboardingis a reserved plugin id
Deprecated
- The
onboarding.*action slots. UseregisterOnboardingStep()
Removed
schema/changelog.schema.json
1.0.0
Added
- Backend, frontend, database, manifest, capability and settings types for plugin API 1.0
- Testing helpers and a Vitest preset for plugin tests
- The
@termix-ssh/plugin-sdk/uicomponent set - The
termix-pluginCLI to build, validate, test, pack, sign and write migrations