Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
106 lines
4.0 KiB
TypeScript
106 lines
4.0 KiB
TypeScript
import { useLayoutEffect, useMemo, useSyncExternalStore } from 'react';
|
|
|
|
import { getEffectiveKnownHosts } from '../../../infrastructure/syncHelpers';
|
|
import {
|
|
useVaultSnapshot,
|
|
useVaultSnapshotActions,
|
|
} from '../../state/vaultSnapshotStore';
|
|
import { getAppHandlers, subscribeAppHandlers } from '../appHandlersBridge';
|
|
import { publishAppShellDomainSlice } from '../appShellPropsStore';
|
|
import { useAppLocalUiStore } from '../appLocalUiStore';
|
|
import { APP_MOUNTS_DOMAIN } from './mountsDomain';
|
|
|
|
/**
|
|
* Vault island: catalog from `vaultSnapshotStore`, glue handlers from the
|
|
* app handlers bridge, local vault UI from `appLocalUiStore`. Assembles the
|
|
* full vault domain bag field-by-field — never spreads a prepared bag from
|
|
* AppSideEffects.
|
|
*/
|
|
export function VaultHost() {
|
|
const vault = useVaultSnapshot();
|
|
const actions = useVaultSnapshotActions();
|
|
const local = useAppLocalUiStore();
|
|
const handlers = useSyncExternalStore(
|
|
subscribeAppHandlers,
|
|
getAppHandlers,
|
|
getAppHandlers,
|
|
);
|
|
|
|
const effectiveKnownHosts = useMemo(
|
|
() => getEffectiveKnownHosts(vault.knownHosts as never) ?? [],
|
|
[vault.knownHosts],
|
|
);
|
|
|
|
const vaultDomain = useMemo(() => {
|
|
if (!handlers) return null;
|
|
return {
|
|
addShellHistoryEntry: actions?.addShellHistoryEntry,
|
|
removeShellHistoryEntry: actions?.removeShellHistoryEntry,
|
|
commitPluginImporterData: actions?.commitPluginImporterData,
|
|
commitVaultImportTransaction: actions?.commitVaultImportTransaction,
|
|
commitVaultGroupMutation: actions?.commitVaultGroupMutation,
|
|
convertKnownHostToHost: actions?.convertKnownHostToHost,
|
|
customGroups: vault.customGroups,
|
|
deepLinkHostDraft: local.deepLinkHostDraft,
|
|
effectiveKnownHosts,
|
|
groupConfigs: vault.groupConfigs,
|
|
handleAddKnownHost: handlers.handleAddKnownHost,
|
|
handleDeleteHost: handlers.handleDeleteHost,
|
|
handleOpenHostFromVaultNote: handlers.handleOpenHostFromVaultNote,
|
|
handleOpenVaultHostFromChat: handlers.handleOpenVaultHostFromChat,
|
|
handleOpenVaultNoteFromChat: handlers.handleOpenVaultNoteFromChat,
|
|
handleOpenVaultSectionFromChat: handlers.handleOpenVaultSectionFromChat,
|
|
handleOpenVaultSnippetFromChat: handlers.handleOpenVaultSnippetFromChat,
|
|
hosts: vault.hosts,
|
|
identities: vault.identities,
|
|
importOrReuseKey: actions?.importOrReuseKey,
|
|
keys: vault.keys,
|
|
managedSources: vault.managedSources,
|
|
navigateToSection: local.navigateToSection,
|
|
proxyProfiles: vault.proxyProfiles,
|
|
readPersistedHosts: actions?.readPersistedHosts,
|
|
readPersistedManagedSources: actions?.readPersistedManagedSources,
|
|
setDeepLinkHostDraft: handlers.setDeepLinkHostDraft,
|
|
setNavigateToSection: handlers.setNavigateToSection,
|
|
setVaultFocusRequest: handlers.setVaultFocusRequest,
|
|
snippetPackages: vault.snippetPackages,
|
|
snippets: vault.snippets,
|
|
unmanageSource: handlers.unmanageSource,
|
|
updateCustomGroups: actions?.updateCustomGroups,
|
|
updateGroupConfigs: actions?.updateGroupConfigs,
|
|
updateHosts: actions?.updateHosts,
|
|
updateIdentities: actions?.updateIdentities,
|
|
updateKeys: actions?.updateKeys,
|
|
updateKnownHosts: actions?.updateKnownHosts,
|
|
updateManagedSources: actions?.updateManagedSources,
|
|
updateProxyProfiles: actions?.updateProxyProfiles,
|
|
updateSnippetPackages: actions?.updateSnippetPackages,
|
|
updateSnippets: actions?.updateSnippets,
|
|
vaultFocusRequest: local.vaultFocusRequest,
|
|
};
|
|
}, [
|
|
actions,
|
|
effectiveKnownHosts,
|
|
handlers,
|
|
local.deepLinkHostDraft,
|
|
local.navigateToSection,
|
|
local.vaultFocusRequest,
|
|
vault.customGroups,
|
|
vault.groupConfigs,
|
|
vault.hosts,
|
|
vault.identities,
|
|
vault.keys,
|
|
vault.managedSources,
|
|
vault.proxyProfiles,
|
|
vault.snippetPackages,
|
|
vault.snippets,
|
|
]);
|
|
|
|
useLayoutEffect(() => {
|
|
if (vaultDomain) publishAppShellDomainSlice('vault', vaultDomain);
|
|
publishAppShellDomainSlice('mounts', APP_MOUNTS_DOMAIN);
|
|
}, [vaultDomain]);
|
|
|
|
return null;
|
|
}
|