refactor(tui): reduce legacy sync usage

This commit is contained in:
Dax Raad 2026-07-11 17:05:23 -04:00
commit 0fa9e5039e
19 changed files with 166 additions and 194 deletions

View file

@ -9,6 +9,7 @@ import type {
FormInfo,
IntegrationInfo,
LocationRef,
McpResource,
McpServer,
ModelInfo,
PermissionSavedInfo,
@ -43,7 +44,10 @@ type LocationData = {
agent?: AgentInfo[]
command?: CommandInfo[]
integration?: IntegrationInfo[]
mcp?: McpServer[]
mcp?: {
server?: McpServer[]
resource?: McpResource[]
}
model?: ModelInfo[]
provider?: ProviderV2Info[]
reference?: ReferenceInfo[]
@ -801,7 +805,10 @@ export const { use: useData, provider: DataProvider } = createSimpleContext({
// so the mcp list refreshes here rather than off integration.updated.
case "mcp.status.changed":
if (bootstrapping) break
void result.location.mcp.refresh(event.location)
void result.location.mcp.server.refresh(event.location)
break
case "mcp.resources.changed":
void result.location.mcp.resource.refresh(event.location)
break
}
}
@ -987,13 +994,31 @@ export const { use: useData, provider: DataProvider } = createSimpleContext({
},
},
mcp: {
list(location?: LocationRef) {
return store.location[locationKey(location ?? defaultLocation())]?.mcp
server: {
list(location?: LocationRef) {
return store.location[locationKey(location ?? defaultLocation())]?.mcp?.server
},
async refresh(ref?: LocationRef) {
const result = await sdk.api.mcp.list({ location: locationQuery(ref) })
const key = locationKey(result.location)
setStore("location", key, {
...store.location[key],
mcp: { ...store.location[key]?.mcp, server: result.data },
})
},
},
async refresh(ref?: LocationRef) {
const result = await sdk.api["server.mcp"].list({ location: locationQuery(ref) })
const key = locationKey(result.location)
setStore("location", key, { ...store.location[key], mcp: result.data })
resource: {
list(location?: LocationRef) {
return store.location[locationKey(location ?? defaultLocation())]?.mcp?.resource
},
async refresh(ref?: LocationRef) {
const result = await sdk.api.mcp.resource.catalog({ location: locationQuery(ref) })
const key = locationKey(result.location)
setStore("location", key, {
...store.location[key],
mcp: { ...store.location[key]?.mcp, resource: result.data.resources },
})
},
},
},
model: {
@ -1089,7 +1114,8 @@ export const { use: useData, provider: DataProvider } = createSimpleContext({
result.location.refresh(),
result.location.agent.refresh(),
result.location.integration.refresh(),
result.location.mcp.refresh(),
result.location.mcp.server.refresh(),
result.location.mcp.resource.refresh(),
result.location.model.refresh(),
result.location.provider.refresh(),
result.location.reference.refresh(),

View file

@ -1,17 +1,13 @@
import { createMemo } from "solid-js"
import { useProject } from "./project"
import { useSync } from "./sync"
import { abbreviateHome } from "../runtime"
import { useTuiPaths } from "./runtime"
export function useDirectory() {
const project = useProject()
const sync = useSync()
const paths = useTuiPaths()
return createMemo(() => {
const directory = project.instance.path().directory || paths.cwd
const result = abbreviateHome(directory, paths.home)
if (sync.data.vcs?.branch) return result + ":" + sync.data.vcs.branch
return result
return abbreviateHome(directory, paths.home)
})
}

View file

@ -1,7 +1,6 @@
import { createStore } from "solid-js/store"
import { createSimpleContext } from "./helper"
import { batch, createEffect, createMemo } from "solid-js"
import { useSync } from "./sync"
import { useEvent } from "./event"
import path from "path"
import { useTuiPaths } from "./runtime"
@ -52,7 +51,6 @@ export function recentModels(
export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
name: "Local",
init: () => {
const sync = useSync()
const data = useData()
const sdk = useSDK()
const toast = useToast()
@ -210,16 +208,6 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
}
}
if (sync.data.config.model) {
const { providerID, modelID } = parseModel(sync.data.config.model)
if (isModelValid({ providerID, modelID })) {
return {
providerID,
modelID,
}
}
}
for (const item of modelStore.recent) {
if (isModelValid(item)) {
return item
@ -507,12 +495,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
const mcp = {
isEnabled(name: string) {
const status = sync.data.mcp[name]
return status?.status === "connected"
return data.location.mcp.server.list()?.find((item) => item.name === name)?.status.status === "connected"
},
async toggle(name: string) {
const status = sync.data.mcp[name]
if (status?.status === "connected") {
const status = data.location.mcp.server.list()?.find((item) => item.name === name)?.status.status
if (status === "connected") {
// Disable: disconnect the MCP
await sdk.client.mcp.disconnect({ name })
} else {