summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/global-sync.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-12 07:07:54 -0600
committerAdam <[email protected]>2025-12-12 07:07:54 -0600
commitfeb8c4f3c60e1ada28bd24abd09d534375a6bc08 (patch)
treefc55e3bfe53c2707944a12c234e54287e7b1ff2f /packages/desktop/src/context/global-sync.tsx
parent3f5cd2c4a810168ed03094cbf1d3e51a4b62f261 (diff)
downloadopencode-feb8c4f3c60e1ada28bd24abd09d534375a6bc08.tar.gz
opencode-feb8c4f3c60e1ada28bd24abd09d534375a6bc08.zip
feat(desktop): archive sessions
Diffstat (limited to 'packages/desktop/src/context/global-sync.tsx')
-rw-r--r--packages/desktop/src/context/global-sync.tsx31
1 files changed, 22 insertions, 9 deletions
diff --git a/packages/desktop/src/context/global-sync.tsx b/packages/desktop/src/context/global-sync.tsx
index 39e0fd34a..4c461a4e9 100644
--- a/packages/desktop/src/context/global-sync.tsx
+++ b/packages/desktop/src/context/global-sync.tsx
@@ -69,8 +69,19 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple
children: {},
})
+ async function loadSessions(directory: string) {
+ globalSDK.client.session.list({ directory }).then((x) => {
+ const sessions = (x.data ?? [])
+ .slice()
+ .filter((s) => !s.time.archived)
+ .sort((a, b) => a.id.localeCompare(b.id))
+ .slice(0, 5)
+ setGlobalStore("children", directory, "session", sessions)
+ })
+ }
+
async function bootstrapInstance(directory: string) {
- const [store, setStore] = child(directory)
+ const [, setStore] = child(directory)
const sdk = createOpencodeClient({
baseUrl: globalSDK.url,
directory,
@@ -80,14 +91,7 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple
provider: () => sdk.provider.list().then((x) => setStore("provider", x.data!)),
path: () => sdk.path.get().then((x) => setStore("path", x.data!)),
agent: () => sdk.app.agents().then((x) => setStore("agent", x.data ?? [])),
- session: () =>
- sdk.session.list().then((x) => {
- const sessions = (x.data ?? [])
- .slice()
- .sort((a, b) => a.id.localeCompare(b.id))
- .slice(0, store.limit)
- setStore("session", sessions)
- }),
+ session: () => loadSessions(directory),
status: () => sdk.session.status().then((x) => setStore("session_status", x.data!)),
config: () => sdk.config.get().then((x) => setStore("config", x.data!)),
changes: () => sdk.file.status().then((x) => setStore("changes", x.data!)),
@@ -158,6 +162,12 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple
}
case "session.updated": {
const result = Binary.search(store.session, event.properties.info.id, (s) => s.id)
+ if (event.properties.info.time.archived) {
+ if (result.found) {
+ setStore("session", (s) => s.filter((x) => x.id !== event.properties.info.id))
+ }
+ break
+ }
if (result.found) {
setStore("session", result.index, reconcile(event.properties.info))
break
@@ -257,6 +267,9 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple
},
child,
bootstrap,
+ project: {
+ loadSessions,
+ },
}
},
})