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

feat: Sequential numbering for forked session titles (Issue #10105) (#10321)

Ariane Emory 3 недель назад
Родитель
Сommit
e84d92da28
1 измененных файлов с 14 добавлено и 0 удалено
  1. 14 0
      packages/opencode/src/session/index.ts

+ 14 - 0
packages/opencode/src/session/index.ts

@@ -39,6 +39,16 @@ export namespace Session {
     ).test(title)
     ).test(title)
   }
   }
 
 
+  function getForkedTitle(title: string): string {
+    const match = title.match(/^(.+) \(fork #(\d+)\)$/)
+    if (match) {
+      const base = match[1]
+      const num = parseInt(match[2], 10)
+      return `${base} (fork #${num + 1})`
+    }
+    return `${title} (fork #1)`
+  }
+
   export const Info = z
   export const Info = z
     .object({
     .object({
       id: Identifier.schema("session"),
       id: Identifier.schema("session"),
@@ -151,8 +161,12 @@ export namespace Session {
       messageID: Identifier.schema("message").optional(),
       messageID: Identifier.schema("message").optional(),
     }),
     }),
     async (input) => {
     async (input) => {
+      const original = await get(input.sessionID)
+      if (!original) throw new Error("session not found")
+      const title = getForkedTitle(original.title)
       const session = await createNext({
       const session = await createNext({
         directory: Instance.directory,
         directory: Instance.directory,
+        title,
       })
       })
       const msgs = await messages({ sessionID: input.sessionID })
       const msgs = await messages({ sessionID: input.sessionID })
       const idMap = new Map<string, string>()
       const idMap = new Map<string, string>()