fix: use selected vault for mcp bridge
This commit is contained in:
@@ -15,6 +15,7 @@ const mockInvokeFn = vi.fn((cmd: string, args?: Record<string, unknown>): Promis
|
||||
return Promise.resolve(null)
|
||||
}
|
||||
if (cmd === 'get_default_vault_path') return Promise.resolve(mockDefaultVaultPath)
|
||||
if (cmd === 'sync_mcp_bridge_vault') return Promise.resolve(args?.vaultPath ? 'started' : 'stopped')
|
||||
if (cmd === 'check_vault_exists') return Promise.resolve(true)
|
||||
return Promise.resolve(null)
|
||||
})
|
||||
@@ -56,6 +57,7 @@ describe('useVaultSwitcher', () => {
|
||||
return Promise.resolve(null)
|
||||
}
|
||||
if (cmd === 'get_default_vault_path') return Promise.resolve(mockDefaultVaultPath)
|
||||
if (cmd === 'sync_mcp_bridge_vault') return Promise.resolve(args?.vaultPath ? 'started' : 'stopped')
|
||||
if (cmd === 'check_vault_exists') {
|
||||
const checkVaultExists = overrides.checkVaultExists
|
||||
return Promise.resolve(typeof checkVaultExists === 'function'
|
||||
@@ -228,6 +230,46 @@ describe('useVaultSwitcher', () => {
|
||||
expect(mockVaultListStore.active_vault).toBeNull()
|
||||
})
|
||||
|
||||
it('stops the MCP bridge when there is no selected active vault', async () => {
|
||||
await renderLoadedVaultSwitcher()
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockInvokeFn).toHaveBeenCalledWith('sync_mcp_bridge_vault', { vaultPath: null })
|
||||
})
|
||||
})
|
||||
|
||||
it('syncs the MCP bridge to a persisted active vault', async () => {
|
||||
mockVaultListStore = {
|
||||
vaults: [{ label: 'Work', path: '/work/vault' }],
|
||||
active_vault: '/work/vault',
|
||||
hidden_defaults: [],
|
||||
}
|
||||
|
||||
await renderLoadedVaultSwitcher()
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockInvokeFn).toHaveBeenCalledWith('sync_mcp_bridge_vault', { vaultPath: '/work/vault' })
|
||||
})
|
||||
})
|
||||
|
||||
it('syncs the MCP bridge after switching vaults', async () => {
|
||||
mockVaultListStore = {
|
||||
vaults: [{ label: 'Work', path: '/work/vault' }],
|
||||
active_vault: null,
|
||||
hidden_defaults: [],
|
||||
}
|
||||
|
||||
const { result } = await renderLoadedVaultSwitcher()
|
||||
|
||||
act(() => {
|
||||
result.current.switchVault('/work/vault')
|
||||
})
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockInvokeFn).toHaveBeenCalledWith('sync_mcp_bridge_vault', { vaultPath: '/work/vault' })
|
||||
})
|
||||
})
|
||||
|
||||
it('keeps the implicit default vault out of the list when its path is missing', async () => {
|
||||
setMockInvokeBehavior({ checkVaultExists: false })
|
||||
|
||||
|
||||
@@ -162,6 +162,17 @@ function syncDefaultVaultExport(path: string) {
|
||||
DEFAULT_VAULTS[0] = { label: GETTING_STARTED_LABEL, path }
|
||||
}
|
||||
|
||||
function selectedBridgeVaultPath(selectedVaultPath: string | null): string | null {
|
||||
const path = selectedVaultPath?.trim()
|
||||
return path ? path : null
|
||||
}
|
||||
|
||||
async function syncMcpBridgeVault(selectedVaultPath: string | null): Promise<void> {
|
||||
await tauriCall<string>('sync_mcp_bridge_vault', {
|
||||
vaultPath: selectedBridgeVaultPath(selectedVaultPath),
|
||||
})
|
||||
}
|
||||
|
||||
function isCanonicalGettingStartedPath(path: string, resolvedDefaultPath: string): boolean {
|
||||
return path === resolvedDefaultPath
|
||||
}
|
||||
@@ -522,6 +533,16 @@ function usePersistedVaultState(onSwitchRef: MutableRefObject<() => void>): Pers
|
||||
}
|
||||
}
|
||||
|
||||
function useMcpBridgeVaultSync(loaded: boolean, selectedVaultPath: string | null) {
|
||||
useEffect(() => {
|
||||
if (!loaded) return
|
||||
|
||||
syncMcpBridgeVault(selectedVaultPath).catch(err => {
|
||||
console.warn('Failed to sync MCP bridge vault:', err)
|
||||
})
|
||||
}, [loaded, selectedVaultPath])
|
||||
}
|
||||
|
||||
function formatGettingStartedRestoreError(err: unknown): string {
|
||||
const message =
|
||||
typeof err === 'string'
|
||||
@@ -1145,6 +1166,8 @@ export function useVaultSwitcher({ onSwitch, onToast }: UseVaultSwitcherOptions)
|
||||
selectedVaultPath,
|
||||
vaultPath,
|
||||
} = persistedState
|
||||
useMcpBridgeVaultSync(loaded, selectedVaultPath)
|
||||
|
||||
const { allVaults, defaultVaults, isGettingStartedHidden } = useVaultCollections(
|
||||
defaultAvailable,
|
||||
defaultPath,
|
||||
|
||||
@@ -486,6 +486,7 @@ export const mockHandlers: Record<string, (args: any) => any> = {
|
||||
},
|
||||
register_mcp_tools: () => 'registered',
|
||||
check_mcp_status: () => 'installed',
|
||||
sync_mcp_bridge_vault: (args: { vaultPath?: string | null }) => args.vaultPath ? 'started' : 'stopped',
|
||||
repair_vault: (): string => {
|
||||
mockVaultAiGuidanceStatus = {
|
||||
agents_state: 'managed',
|
||||
|
||||
Reference in New Issue
Block a user