fix sidebar modified files

This commit is contained in:
Dax Raad
2025-11-05 16:49:17 -05:00
parent 6e22b45905
commit 05ae99a09b
5 changed files with 36 additions and 3 deletions

View File

@@ -16,6 +16,7 @@ import { createStore, produce, reconcile } from "solid-js/store"
import { useSDK } from "@tui/context/sdk" import { useSDK } from "@tui/context/sdk"
import { Binary } from "@/util/binary" import { Binary } from "@/util/binary"
import { createSimpleContext } from "./helper" import { createSimpleContext } from "./helper"
import type { Snapshot } from "@/snapshot"
export const { use: useSync, provider: SyncProvider } = createSimpleContext({ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
name: "Sync", name: "Sync",
@@ -30,6 +31,9 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
} }
config: Config config: Config
session: Session[] session: Session[]
session_diff: {
[sessionID: string]: Snapshot.FileDiff[]
}
todo: { todo: {
[sessionID: string]: Todo[] [sessionID: string]: Todo[]
} }
@@ -52,6 +56,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
command: [], command: [],
provider: [], provider: [],
session: [], session: [],
session_diff: {},
todo: {}, todo: {},
message: {}, message: {},
part: {}, part: {},
@@ -104,6 +109,10 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
setStore("todo", event.properties.sessionID, event.properties.todos) setStore("todo", event.properties.sessionID, event.properties.todos)
break break
case "session.diff":
setStore("session_diff", event.properties.sessionID, event.properties.diff)
break
case "session.deleted": { case "session.deleted": {
const result = Binary.search(store.session, event.properties.info.id, (s) => s.id) const result = Binary.search(store.session, event.properties.info.id, (s) => s.id)
if (result.found) { if (result.found) {
@@ -260,10 +269,11 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
}, },
async sync(sessionID: string) { async sync(sessionID: string) {
const now = Date.now() const now = Date.now()
const [session, messages, todo] = await Promise.all([ const [session, messages, todo, diff] = await Promise.all([
sdk.client.session.get({ path: { id: sessionID }, throwOnError: true }), sdk.client.session.get({ path: { id: sessionID }, throwOnError: true }),
sdk.client.session.messages({ path: { id: sessionID } }), sdk.client.session.messages({ path: { id: sessionID } }),
sdk.client.session.todo({ path: { id: sessionID } }), sdk.client.session.todo({ path: { id: sessionID } }),
sdk.client.session.diff({ path: { id: sessionID } }),
]) ])
console.log("fetched in " + (Date.now() - now), sessionID) console.log("fetched in " + (Date.now() - now), sessionID)
setStore( setStore(
@@ -276,6 +286,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
for (const message of messages.data!) { for (const message of messages.data!) {
draft.part[message.info.id] = message.parts draft.part[message.info.id] = message.parts
} }
draft.session_diff[sessionID] = diff.data ?? []
}), }),
) )
console.log("synced in " + (Date.now() - now), sessionID) console.log("synced in " + (Date.now() - now), sessionID)

View File

@@ -9,6 +9,7 @@ export function Sidebar(props: { sessionID: string }) {
const sync = useSync() const sync = useSync()
const { theme } = useTheme() const { theme } = useTheme()
const session = createMemo(() => sync.session.get(props.sessionID)!) const session = createMemo(() => sync.session.get(props.sessionID)!)
const diff = createMemo(() => sync.data.session_diff[props.sessionID] ?? [])
const todo = createMemo(() => sync.data.todo[props.sessionID] ?? []) const todo = createMemo(() => sync.data.todo[props.sessionID] ?? [])
const messages = createMemo(() => sync.data.message[props.sessionID] ?? []) const messages = createMemo(() => sync.data.message[props.sessionID] ?? [])
@@ -122,12 +123,12 @@ export function Sidebar(props: { sessionID: string }) {
</For> </For>
</box> </box>
</Show> </Show>
<Show when={session().summary?.diffs}> <Show when={diff().length > 0}>
<box> <box>
<text fg={theme.text}> <text fg={theme.text}>
<b>Modified Files</b> <b>Modified Files</b>
</text> </text>
<For each={session().summary?.diffs || []}> <For each={diff() || []}>
{(item) => { {(item) => {
const file = createMemo(() => { const file = createMemo(() => {
const splits = item.file.split(path.sep).filter(Boolean) const splits = item.file.split(path.sep).filter(Boolean)

View File

@@ -103,6 +103,13 @@ export namespace Session {
info: Info, info: Info,
}), }),
), ),
Diff: Bus.event(
"session.diff",
z.object({
sessionID: z.string(),
diff: Snapshot.FileDiff.array(),
}),
),
Error: Bus.event( Error: Bus.event(
"session.error", "session.error",
z.object({ z.object({

View File

@@ -12,6 +12,7 @@ import { Log } from "@/util/log"
import path from "path" import path from "path"
import { Instance } from "@/project/instance" import { Instance } from "@/project/instance"
import { Storage } from "@/storage/storage" import { Storage } from "@/storage/storage"
import { Bus } from "@/bus"
export namespace SessionSummary { export namespace SessionSummary {
const log = Log.create({ service: "session.summary" }) const log = Log.create({ service: "session.summary" })
@@ -51,6 +52,10 @@ export namespace SessionSummary {
} }
}) })
await Storage.write(["session_diff", input.sessionID], diffs) await Storage.write(["session_diff", input.sessionID], diffs)
Bus.publish(Session.Event.Diff, {
sessionID: input.sessionID,
diff: diffs,
})
} }
async function summarizeMessage(input: { messageID: string; messages: MessageV2.WithParts[] }) { async function summarizeMessage(input: { messageID: string; messages: MessageV2.WithParts[] }) {

View File

@@ -1300,6 +1300,14 @@ export type EventSessionDeleted = {
} }
} }
export type EventSessionDiff = {
type: "session.diff"
properties: {
sessionID: string
diff: Array<FileDiff>
}
}
export type EventSessionError = { export type EventSessionError = {
type: "session.error" type: "session.error"
properties: { properties: {
@@ -1346,6 +1354,7 @@ export type Event =
| EventSessionCreated | EventSessionCreated
| EventSessionUpdated | EventSessionUpdated
| EventSessionDeleted | EventSessionDeleted
| EventSessionDiff
| EventSessionError | EventSessionError
| EventTuiPromptAppend | EventTuiPromptAppend
| EventTuiCommandExecute | EventTuiCommandExecute