* feat: shell controller, TabStage, layout and theme plugins with repair view

* feat: move the classic layout into its own bundled plugin

* feat: move color themes into a bundled themes plugin

* fix: plugin tests and type checks work with a linked sdk

* fix: home tab, layout switch and missing layout fallbacks for looks

* chore: add classic layout and themes to the readme

* chore: drop example plugin links from the plugin guide

* feat: plugin filters by type, paged browse, hide plugins needing newer termix

* feat: move desktop, status, import, audit and branding features into plugins

* feat: host lock api so a plugin can load hosts from a config file (#1581)

* chore: add hosts config to the plugin table

* feat: login policy hook for plugins and optional https redirect (#1584)

* chore: add login security to the plugin table

* feat: api key socket tickets so a master can open remote sessions (#1654)

* feat: sync moves to a plugin, desktop gets multiple accounts (#1580, #1654)

* chore: add sync to the plugin table

* feat: move the sync screens and wizard out of core into the plugin (#1580)

* fix: add a neutral linked desktop hook for plugins (#1580)

* fix: show the linked account's name and admin flag in the app (#1580)

* feat: ssh transport providers, core ssh relay and plugin folders api

* feat: support FIDO2 security keys through ssh agent

* feat: add companion panels beside host tabs

* feat: mTLS client certificates for desktop server links

* feat: native web view for plugins in the desktop app

* fix: detect the desktop link window by Electron's default user agent

Fixes #1675

* fix: changelog for desktop link fix

* fix: keep text primary keys in the plugin data export

* fix: ship sharp binaries for Windows arm64 builds

* feat: client cert on the sync link types (sdk 1.0.18)

* chore: update translations

* feat: themed title bar for the desktop app (#1690)

* chore: changelog for the themed title bar

* fix: draw the title bar in the sidebar color

* feat: per host layout for the terminal panel bar

* chore: sdk 1.0.19 for the panel bar layout

* chore: bundle all 43 plugins for 26.10.3

* chore: update translations

---------

Co-authored-by: SirHephaistos <60616553+SirHephaistos@users.noreply.github.com>
Co-authored-by: Giovanny Aranda <garanda21@gmail.com>
This commit is contained in:
authored and GitHub committed 2026-10-20 16:03:29 -05:00
1 parent aff29a9581
commit a89ccc6b07
577 files changed
+76479 -101831

No files matched your search

+470
View File
@@ -152,6 +152,9 @@ export { useTabs, useTabsSafe } from "@/shell/TabContext";
// Slots: a plugin can offer places for other plugins to fill.
export { ActionSlot, ComponentSlot } from "@/shell/ActionSlot";
// For layouts: where tabs show, and the confirm a tab close asks with.
export { TabStage } from "@/shell/stage/TabStage";
export { ShellConfirmCapture } from "@/shell/controller/ShellControllerProvider";
// A plugin's manifest host settings, drawn inside its own host editor section.
export {
@@ -350,3 +353,470 @@ export {
type ConnectionGateProps,
} from "@/components/connection/ConnectionGate";
export { type ConnectionUnavailable } from "@/components/connection/ConnectionScreen";
// For shell-level plugins such as a layout: the API client, shared types and
// the shell's own state. These reach into core, so they may change with a core
// release. An ordinary plugin should not need them.
export { APP_VERSION } from "@/lib/app-version";
// The palette's own input has to share the Command it sits in, so cmdk is
// the shell's copy.
export { Command as CommandPrimitive } from "cmdk";
export {
type AuthOverrideProtocol,
SSH_AUTH_PROTOCOL,
} from "@/types/auth-protocols";
export {
CREDENTIAL_ROW_FIELD_KEYS,
type CredentialDensity,
type CredentialRowFields,
type CredentialSidebarFilterState,
type CredentialSidebarPreferences,
type CredentialSortKey,
type CredentialTrayTrigger,
defaultCredentialRowFields,
defaultCredentialSidebarPreferences,
sanitizeCredentialSidebarPreferences,
} from "@/types/credential-sidebar-preferences";
export {
CORE_HOST_DEFAULTS,
CORE_NAMESPACE,
type DefaultOverrides,
defaultValuesEqual,
findCoreHostDefault,
type HostDefaultsLevel,
type ResolvedHostDefault,
splitDefaultKey,
} from "@/types/host-defaults";
export {
defaultHostRowFields,
defaultHostSidebarPreferences,
type HostClickBehavior,
type HostDensity,
type HostGroupKey,
type HostRowFields,
type HostSidebarFilterState,
type HostSidebarPreferences,
type HostTrayTrigger,
sanitizeHostSidebarPreferences,
type SortKey,
} from "@/types/host-sidebar-preferences";
export type {
HostData,
HostLock,
HostProtocolAuthInput,
ProxyNode,
SSHHost,
SSHHostData,
} from "@/types";
export {
PRESETS,
UI_AREA_KEYS,
type UiAreaKey,
type UiPreset,
} from "@/types/ui-preferences";
export type {
AdminSection,
Credential,
DashboardCardId,
FontSizeId,
Host,
HostFolder,
SharePermissionLevel,
Tab,
TabType,
ThemeId,
ToolsTab,
UiFontId,
} from "@/types/ui-types";
export {
type AuditLog,
type AuditLogFilters,
getAuditLogActions,
getAuditLogs,
} from "@/api/audit-log-api";
export {
getUserSecondFactors,
resetUserSecondFactors,
type UserSecondFactorSummary,
} from "@/api/auth-methods-api";
export { getCredentials } from "@/api/credentials-api";
export {
getFolderDefaultsId,
getHostDefaultsLevel,
type HostDefaultsChange,
type HostDefaultsTarget,
previewHostDefaultsLevel,
resetHostToDefaults,
resolveHostDefaults,
saveHostDefaultsLevel,
waitForDefaultsJob,
} from "@/api/host-defaults-api";
export { getHostTags, saveHostTags } from "@/api/host-tags-api";
export {
getSessionTimeoutMinutes,
getUserPreferences,
parseCustomKeybindings,
saveUserPreferences,
} from "@/api/open-tabs-api";
export {
getDeveloperMode,
getPluginAdminSettings,
getPluginHostSettings,
getPlugins,
getPluginUserSettings,
type PluginSettingsErrors,
type PluginSettingsField,
PluginSettingsValidationError,
type PluginSummary,
setAllPluginChannels,
setDeveloperMode,
setPluginOptions,
updatePluginAdminSettings,
updatePluginHostSettings,
updatePluginUserSettings,
} from "@/api/plugins-api";
export {
getNotificationPrivateEndpoints,
setNotificationPrivateEndpoints,
} from "@/api/private-endpoints-api";
export {
type CredentialPermissionLevel,
type FolderAccessRule,
getCredentialAccess,
getFolderAccess,
getRoles,
revokeCredentialAccess,
revokeFolderAccess,
shareCredential,
type ShareTarget,
} from "@/api/rbac-api";
export { type BrandingSettings, getBranding } from "@/api/settings-api";
export {
getChannelReleases,
getUpdateChannel,
type ReleaseInfo,
setUpdateChannel,
type UpdateChannelState,
} from "@/api/system-status-api";
export {
getTlsStatus,
type TlsStatus,
uploadTlsCertificate,
} from "@/api/tls-api";
export {
Command,
CommandEmpty,
CommandGroup,
CommandItem,
CommandList,
} from "@/components/command";
export { usePluginDocsUrl } from "@/components/docs-link";
export {
DEFAULT_FOLDER_COLOR,
DEFAULT_FOLDER_ICON,
FolderIconEl,
HexColorPicker,
IconPicker,
} from "@/components/folder-style";
export { useTheme } from "@/components/theme-provider";
export { VersionBadge } from "@/components/version-badge";
export { useBranding } from "@/contexts/BrandingContext";
export {
useAreaPreferences,
useUiPreference,
useUiPreferencesContext,
} from "@/contexts/UiPreferencesContext";
export {
getRegisteredDashboardCard,
useRegisteredDashboardCards,
} from "@/dashboard/dashboard-cards-registry";
export { useActionSlot } from "@/hooks/use-action-slot";
export { useInstalledPlugins } from "@/hooks/use-installed-plugins";
export { usePageVisibleInterval } from "@/hooks/use-page-visible-interval";
export { usePermissions } from "@/hooks/use-permissions";
export {
getStatusClasses,
useStatusColorScheme,
} from "@/hooks/use-status-color-scheme";
export { useSshAuthProviders } from "@/hooks/useSshAuthProviders";
export { changeAppLanguage, normalizeLanguageCode } from "@/i18n/i18n";
export { LANGUAGES } from "@/i18n/languages";
export {
getLiveHostStatus,
useHostStatus,
useServerStatus,
useServerStatusMeta,
} from "@/lib/ServerStatusContext";
export { activityTarget } from "@/lib/activity-types";
export { applyPresetSideEffects } from "@/lib/apply-ui-preset";
export { getDatabaseTransferUrl } from "@/lib/database-transfer-url";
export {
canConfigureUpdates,
type DesktopUpdateMode,
desktopUpdates,
type DesktopUpdateState,
useDesktopUpdate,
} from "@/lib/desktop-updates";
export { type DocsPage, docsUrl } from "@/lib/docs";
export { getErrorMessage } from "@/lib/error-message";
export {
getDefaultConnectionTab,
resolveHostTabType,
} from "@/lib/host-connection-tabs";
export {
DefaultsOnly,
HostDefaultsContext,
type HostDefaultsContextValue,
HostOnly,
} from "@/lib/host-defaults-context";
export {
invalidateHostsAndStatusCaches,
invalidateServerStatusCache,
} from "@/lib/hosts-request-cache";
export { reportBetaFeedbackUrl, reportCoreIssueUrl } from "@/lib/issue-url";
export { notifySyncChanged, useDesktopLinked } from "@/lib/linked-server";
export {
clearLocalAdaptivePreferences,
getPreferredHostAction,
recordHostActionPreference,
} from "@/lib/local-adaptive-preferences";
export { pluginKey, pluginName } from "@/lib/plugin-i18n";
export { PluginIcon } from "@/lib/plugin-icon";
export { rem } from "@/lib/rem";
export { getConnectedRemoteApi } from "@/lib/remote-server-api";
export { roleLabel } from "@/lib/role-label";
export type { StatusValue } from "@/lib/server-status-store";
export { parseServerTime } from "@/lib/server-time";
export { tabJumpHotkeyKeys } from "@/lib/tab-jump-hotkey";
export {
ACCENT_PRESET_COLORS,
applyAccentColor,
applyFontSize,
applyUiFont,
DASHBOARD_CARDS,
FONT_SIZES,
UI_FONTS,
} from "@/lib/theme";
export { registerLayout } from "@/look/layout-registry";
export { useChooseTheme } from "@/look/use-look-theme";
export {
type AccessRecord,
type ActiveSessionInfo,
adminCreateUser,
adminCreateUserCredential,
adminCreateUserHost,
adminDeleteUserCredential,
adminDeleteUserHost,
adminExportUserData,
adminGetHostPassword,
adminGetUserCredentials,
adminGetUserHosts,
adminResetUserPassword,
adminUpdateUserCredential,
adminUpdateUserHost,
type ApiKey,
assignRoleToUser,
bulkUpdateSSHHosts,
changePassword,
createApiKey,
createCredential,
type CreatedApiKey,
createRole,
createSSHHost,
deleteAccount,
deleteAllHostsInFolder,
deleteApiKey,
deleteCredential,
deleteOpenTab,
deleteRole,
deleteSSHHost,
deleteUser,
duplicateCredential,
getActiveSessions,
getApiKeys,
getCredentialDetails,
getCredentialSidebarPreferences,
getExternalAutoProvision,
getHostAccess,
getHostAuthOverride,
getHostPassword,
getHostPolicy,
type HostPolicy,
getHostSidebarPreferences,
getHttpsSettings,
type HttpsSettings,
getLogLevel,
getPasswordLoginAllowed,
getPasswordResetAllowed,
getPermissionsCatalog,
getRegistrationAllowed,
getSecondFactorAfterExternalLogin,
getSessions,
getSessionTimeout,
getSSHFolders,
getSSHHosts,
getStatusCheckSettings,
getUserInfo,
getUserList,
getUserRoles,
type LinkedAccountInfo,
linkExternalToPasswordAccount,
logoutUser,
makeUserAdmin,
type OpenTabRecord,
type PermissionCatalogEntry,
releaseUrlFrom,
removeAdminStatus,
removeRoleFromUser,
renameCredentialFolder,
renameFolder,
reorderCredentials,
reorderFolders,
reorderSSHHosts,
resetRecentActivity,
revokeAllUserSessions,
revokeHostAccess,
revokeSession,
type Role,
saveCredentialSidebarPreferences,
saveHostSidebarPreferences,
setHostAuthOverride,
shareFolder,
shareHost,
type SSHHostWithStatus,
unlinkExternalFromPasswordAccount,
updateCredential,
updateExternalAutoProvision,
updateFolderMetadata,
updateHostAccess,
updateHttpsSettings,
updateLogLevel,
updatePasswordLoginAllowed,
updatePasswordResetAllowed,
updateRegistrationAllowed,
updateRole,
updateSecondFactorAfterExternalLogin,
updateSessionTimeout,
updateSSHHost,
updateStatusCheckSettings,
type UserPreferences,
type UserRole,
} from "@/main-axios";
export {
MANAGE_REQUEST_EVENT,
type ManageMode,
type ManageRequest,
requestFromLegacyEvent,
requestManage,
takePendingManageRequest,
} from "@/manage/manage-requests";
export { useSshAuthEditors } from "@/plugin-host/auth-registry";
export { usePluginStore } from "@/plugin-host/plugin-store";
export { shell } from "@/plugin-host/shell-bridge";
export { OPEN_PLUGINS_EVENT } from "@/plugins/open-plugins";
export { isPrerelease } from "@/plugins/plugin-model";
export { usePluginHostSections } from "@/settings/HostPluginSections";
export { SettingsFieldRow } from "@/settings/SettingsFields";
export { LookSettings } from "@/look/LookSettings";
export { useThemeOptions } from "@/settings/appearance/appearance-controls";
export {
hasVisibleFields,
isFieldShown,
} from "@/settings/settings-fields-util";
export { NativeView, type NativeViewProps } from "./NativeView";
export { useShellController } from "@/shell/controller/ShellControllerProvider";
export {
type KeybindingActionDef,
useKeybindingActions,
useKeybindingDefaults,
} from "@/shell/keybinding-registry";
export {
filterPaletteItems,
loadPaletteGroup,
paletteEntriesFor,
type PaletteItemDef,
usePaletteEntries,
usePaletteGroups,
} from "@/shell/palette-registry";
export { getPanel, usePanels } from "@/shell/panel-registry";
export { SplitLayoutMenu } from "@/shell/split/SplitLayoutMenu";
export {
beginSplitDrag,
endSplitDrag,
isSplitDragging,
moveSplitDrag,
} from "@/shell/split/split-drag";
export {
canJoinSplit,
isSplitTab,
type SplitSummary,
type TabSplitAction,
} from "@/shell/split/split-tabs";
export {
openInSplit,
type SplitOpenTarget,
useSplitTargets,
} from "@/shell/split/split-targets";
export { MAX_PANES } from "@/shell/split/split-tree";
export { registerTabCloseGuard } from "@/shell/tab-close-guards";
export { useTabHandlesVersion } from "@/shell/tab-handles";
export {
getTabType,
isPersistentTabType,
isSessionTabType,
type TabShellCallbacks,
} from "@/shell/tab-registry";
export {
markTabSurfaceUsed,
preloadTabSurface,
tabIcon,
} from "@/shell/tabUtils";
export { AuthEnrollmentSections } from "@/sidebar/AuthEnrollmentSections";
export { mapCredentials, sshHostToHost } from "@/sidebar/HostManagerData";
export {
getHostEditorSection,
makeHostSshSubTabs,
makeHostTabs,
useHostEditorSections,
} from "@/sidebar/HostManagerTabs";
export {
actionOrder,
defaultConnectAction,
type HostActionDef,
hostActionsFor,
hostBadgesFor,
hostEditorToolbarItemsFor,
hostMenuItemsFor,
hostStatusIndicatorsFor,
listHostActions,
runHostAction,
useHostActions,
useHostBadges,
useHostContextMenuItems,
useHostEditorToolbarItems,
useHostStatusIndicators,
} from "@/sidebar/host-contributions";
export { useEditorDefaultKeys } from "@/sidebar/host-defaults/catalog";
export {
enabledHostProtocols,
type HostProtocolDef,
hostProtocolFlags,
type HostProtocols,
listHostProtocols,
protocolEnabled,
protocolPort,
useHostProtocols,
withProtocolSettings,
} from "@/sidebar/host-protocols";
export { quickConnectTargets } from "@/sidebar/quick-connect-host";
export {
groupRailItems,
isCoreRailView,
moveRailItem,
promotableIds,
type RailGroup,
type RailItemDef,
railItemLabel,
rightDockableIds,
useRailItems,
} from "@/sidebar/rail-items";