summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-11-05 16:49:17 -0500
committerDax Raad <[email protected]>2025-11-05 16:49:17 -0500
commit05ae99a09bf90ea641e70b3f3539fd978d0eef3c (patch)
treefa1edc52478b00b237e9bf2f9ac610cccc7fa61d /packages
parent6e22b45905ed78c3df71e62fd17b8c8058788dfa (diff)
downloadopencode-05ae99a09bf90ea641e70b3f3539fd978d0eef3c.tar.gz
opencode-05ae99a09bf90ea641e70b3f3539fd978d0eef3c.zip
fix sidebar modified files
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/cli/cmd/tui/context/sync.tsx13
-rw-r--r--packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx5
-rw-r--r--packages/opencode/src/session/index.ts7
-rw-r--r--packages/opencode/src/session/summary.ts5
-rw-r--r--packages/sdk/js/src/gen/types.gen.ts9
5 files changed, 36 insertions, 3 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
index 4b6b0affb..5d8f1dac8 100644
--- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx
+++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
@@ -16,6 +16,7 @@ import { createStore, produce, reconcile } from "solid-js/store"
import { useSDK } from "@tui/context/sdk"
import { Binary } from "@/util/binary"
import { createSimpleContext } from "./helper"
+import type { Snapshot } from "@/snapshot"
export const { use: useSync, provider: SyncProvider } = createSimpleContext({
name: "Sync",
@@ -30,6 +31,9 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
}
config: Config
session: Session[]
+ session_diff: {
+ [sessionID: string]: Snapshot.FileDiff[]
+ }
todo: {
[sessionID: string]: Todo[]
}
@@ -52,6 +56,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
command: [],
provider: [],
session: [],
+ session_diff: {},
todo: {},
message: {},
part: {},
@@ -104,6 +109,10 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
setStore("todo", event.properties.sessionID, event.properties.todos)
break
+ case "session.diff":
+ setStore("session_diff", event.properties.sessionID, event.properties.diff)
+ break
+
case "session.deleted": {
const result = Binary.search(store.session, event.properties.info.id, (s) => s.id)
if (result.found) {
@@ -260,10 +269,11 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
},
async sync(sessionID: string) {
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.messages({ 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)
setStore(
@@ -276,6 +286,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
for (const message of messages.data!) {
draft.part[message.info.id] = message.parts
}
+ draft.session_diff[sessionID] = diff.data ?? []
}),
)
console.log("synced in " + (Date.now() - now), sessionID)
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
index 2f1451a5f..776b80bfd 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
@@ -9,6 +9,7 @@ export function Sidebar(props: { sessionID: string }) {
const sync = useSync()
const { theme } = useTheme()
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 messages = createMemo(() => sync.data.message[props.sessionID] ?? [])
@@ -122,12 +123,12 @@ export function Sidebar(props: { sessionID: string }) {
</For>
</box>
</Show>
- <Show when={session().summary?.diffs}>
+ <Show when={diff().length > 0}>
<box>
<text fg={theme.text}>
<b>Modified Files</b>
</text>
- <For each={session().summary?.diffs || []}>
+ <For each={diff() || []}>
{(item) => {
const file = createMemo(() => {
const splits = item.file.split(path.sep).filter(Boolean)
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 90eee24e2..4b4d1f5a9 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -103,6 +103,13 @@ export namespace Session {
info: Info,
}),
),
+ Diff: Bus.event(
+ "session.diff",
+ z.object({
+ sessionID: z.string(),
+ diff: Snapshot.FileDiff.array(),
+ }),
+ ),
Error: Bus.event(
"session.error",
z.object({
diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts
index f7ab0fb52..377e75c73 100644
--- a/packages/opencode/src/session/summary.ts
+++ b/packages/opencode/src/session/summary.ts
@@ -12,6 +12,7 @@ import { Log } from "@/util/log"
import path from "path"
import { Instance } from "@/project/instance"
import { Storage } from "@/storage/storage"
+import { Bus } from "@/bus"
export namespace SessionSummary {
const log = Log.create({ service: "session.summary" })
@@ -51,6 +52,10 @@ export namespace SessionSummary {
}
})
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[] }) {
diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts
index b25c8bd73..78e98be59 100644
--- a/packages/sdk/js/src/gen/types.gen.ts
+++ b/packages/sdk/js/src/gen/types.gen.ts
@@ -1300,6 +1300,14 @@ export type EventSessionDeleted = {
}
}
+export type EventSessionDiff = {
+ type: "session.diff"
+ properties: {
+ sessionID: string
+ diff: Array<FileDiff>
+ }
+}
+
export type EventSessionError = {
type: "session.error"
properties: {
@@ -1346,6 +1354,7 @@ export type Event =
| EventSessionCreated
| EventSessionUpdated
| EventSessionDeleted
+ | EventSessionDiff
| EventSessionError
| EventTuiPromptAppend
| EventTuiCommandExecute