Просмотр исходного кода

fix: --continue pull the latest session id consistently (#918)

Co-authored-by: Dax Raad <[email protected]>
Jase Kraft 7 месяцев назад
Родитель
Сommit
294a11752e
2 измененных файлов с 14 добавлено и 14 удалено
  1. 4 5
      packages/opencode/src/session/index.ts
  2. 10 9
      packages/opencode/src/storage/storage.ts

+ 4 - 5
packages/opencode/src/session/index.ts

@@ -230,8 +230,7 @@ export namespace Session {
       info: MessageV2.Info
       info: MessageV2.Info
       parts: MessageV2.Part[]
       parts: MessageV2.Part[]
     }[]
     }[]
-    const list = Storage.list("session/message/" + sessionID)
-    for await (const p of list) {
+    for (const p of await Storage.list("session/message/" + sessionID)) {
       const read = await Storage.readJSON<MessageV2.Info>(p)
       const read = await Storage.readJSON<MessageV2.Info>(p)
       result.push({
       result.push({
         info: read,
         info: read,
@@ -248,7 +247,7 @@ export namespace Session {
 
 
   export async function parts(sessionID: string, messageID: string) {
   export async function parts(sessionID: string, messageID: string) {
     const result = [] as MessageV2.Part[]
     const result = [] as MessageV2.Part[]
-    for await (const item of Storage.list("session/part/" + sessionID + "/" + messageID)) {
+    for (const item of await Storage.list("session/part/" + sessionID + "/" + messageID)) {
       const read = await Storage.readJSON<MessageV2.Part>(item)
       const read = await Storage.readJSON<MessageV2.Part>(item)
       result.push(read)
       result.push(read)
     }
     }
@@ -257,7 +256,7 @@ export namespace Session {
   }
   }
 
 
   export async function* list() {
   export async function* list() {
-    for await (const item of Storage.list("session/info")) {
+    for (const item of await Storage.list("session/info")) {
       const sessionID = path.basename(item, ".json")
       const sessionID = path.basename(item, ".json")
       yield get(sessionID)
       yield get(sessionID)
     }
     }
@@ -265,7 +264,7 @@ export namespace Session {
 
 
   export async function children(parentID: string) {
   export async function children(parentID: string) {
     const result = [] as Session.Info[]
     const result = [] as Session.Info[]
-    for await (const item of Storage.list("session/info")) {
+    for (const item of await Storage.list("session/info")) {
       const sessionID = path.basename(item, ".json")
       const sessionID = path.basename(item, ".json")
       const session = await get(sessionID)
       const session = await get(sessionID)
       if (session.parentID !== parentID) continue
       if (session.parentID !== parentID) continue

+ 10 - 9
packages/opencode/src/storage/storage.ts

@@ -121,18 +121,19 @@ export namespace Storage {
   }
   }
 
 
   const glob = new Bun.Glob("**/*")
   const glob = new Bun.Glob("**/*")
-  export async function* list(prefix: string) {
+  export async function list(prefix: string) {
     const dir = await state().then((x) => x.dir)
     const dir = await state().then((x) => x.dir)
     try {
     try {
-      for await (const item of glob.scan({
-        cwd: path.join(dir, prefix),
-        onlyFiles: true,
-      })) {
-        const result = path.join(prefix, item.slice(0, -5))
-        yield result
-      }
+      const result = await Array.fromAsync(
+        glob.scan({
+          cwd: path.join(dir, prefix),
+          onlyFiles: true,
+        }),
+      )
+      result.sort()
+      return result
     } catch {
     } catch {
-      return
+      return []
     }
     }
   }
   }
 }
 }