@juspay/shooter 1.16.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/.claude/hooks/codex-hooks.example.json +75 -0
  2. package/.claude/hooks/notifier.cjs +158 -8
  3. package/build/client/_app/immutable/assets/{0.DEfoFaGR.css → 0.NV8k8wxG.css} +1 -1
  4. package/build/client/_app/immutable/assets/0.NV8k8wxG.css.br +0 -0
  5. package/build/client/_app/immutable/assets/0.NV8k8wxG.css.gz +0 -0
  6. package/build/client/_app/immutable/chunks/8lO1IL7u.js +1 -0
  7. package/build/client/_app/immutable/chunks/8lO1IL7u.js.br +0 -0
  8. package/build/client/_app/immutable/chunks/8lO1IL7u.js.gz +0 -0
  9. package/build/client/_app/immutable/chunks/B9WQy_3X.js +1 -0
  10. package/build/client/_app/immutable/chunks/B9WQy_3X.js.br +0 -0
  11. package/build/client/_app/immutable/chunks/B9WQy_3X.js.gz +0 -0
  12. package/build/client/_app/immutable/chunks/BdtLzPpO.js +1 -0
  13. package/build/client/_app/immutable/chunks/BdtLzPpO.js.br +0 -0
  14. package/build/client/_app/immutable/chunks/BdtLzPpO.js.gz +0 -0
  15. package/build/client/_app/immutable/chunks/{DlS3abGJ.js → DJvX78LW.js} +1 -1
  16. package/build/client/_app/immutable/chunks/DJvX78LW.js.br +0 -0
  17. package/build/client/_app/immutable/chunks/DJvX78LW.js.gz +0 -0
  18. package/build/client/_app/immutable/chunks/nWG9RHyB.js +3 -0
  19. package/build/client/_app/immutable/chunks/nWG9RHyB.js.br +0 -0
  20. package/build/client/_app/immutable/chunks/nWG9RHyB.js.gz +0 -0
  21. package/build/client/_app/immutable/entry/{app.CSJG7N9H.js → app.f46Ko1hu.js} +2 -2
  22. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.br +0 -0
  23. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.gz +0 -0
  24. package/build/client/_app/immutable/entry/start.BVDjNnXt.js +1 -0
  25. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.br +2 -0
  26. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.gz +0 -0
  27. package/build/client/_app/immutable/nodes/{0.qOL7xtFn.js → 0.D_9EwVmq.js} +1 -1
  28. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.br +0 -0
  29. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.gz +0 -0
  30. package/build/client/_app/immutable/nodes/{1.Di708Ago.js → 1.C4eFlqSB.js} +1 -1
  31. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.br +0 -0
  32. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.gz +0 -0
  33. package/build/client/_app/immutable/nodes/{2.DSM1znqa.js → 2.CdC092Za.js} +1 -1
  34. package/build/client/_app/immutable/nodes/2.CdC092Za.js.br +0 -0
  35. package/build/client/_app/immutable/nodes/2.CdC092Za.js.gz +0 -0
  36. package/build/client/_app/immutable/nodes/{3.BPa5fh75.js → 3.Dhf4ZWW0.js} +1 -1
  37. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.br +0 -0
  38. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.gz +0 -0
  39. package/build/client/_app/immutable/nodes/6.B3SEB_li.js +1 -0
  40. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.br +0 -0
  41. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.gz +0 -0
  42. package/build/client/_app/immutable/nodes/{7.B7UJd8GQ.js → 7.DV8cJ1lX.js} +3 -3
  43. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.br +0 -0
  44. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.gz +0 -0
  45. package/build/client/_app/immutable/nodes/8.Bs362gyb.js +2 -0
  46. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.br +0 -0
  47. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.gz +0 -0
  48. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js +2 -0
  49. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.br +0 -0
  50. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.gz +0 -0
  51. package/build/client/_app/version.json +1 -1
  52. package/build/client/_app/version.json.br +0 -0
  53. package/build/client/_app/version.json.gz +0 -0
  54. package/build/server/chunks/{0-D8uPamNd.js → 0-Cd7jY0a7.js} +3 -3
  55. package/build/server/chunks/{0-D8uPamNd.js.map → 0-Cd7jY0a7.js.map} +1 -1
  56. package/build/server/chunks/{1-DhtioHbs.js → 1-C4BOGoJY.js} +2 -2
  57. package/build/server/chunks/{1-DhtioHbs.js.map → 1-C4BOGoJY.js.map} +1 -1
  58. package/build/server/chunks/{2-Cgh7ZFgE.js → 2-Ba0mNwJ6.js} +2 -2
  59. package/build/server/chunks/{2-Cgh7ZFgE.js.map → 2-Ba0mNwJ6.js.map} +1 -1
  60. package/build/server/chunks/{3-I6hnjssH.js → 3-Pg8t1uJU.js} +2 -2
  61. package/build/server/chunks/{3-I6hnjssH.js.map → 3-Pg8t1uJU.js.map} +1 -1
  62. package/build/server/chunks/{6-bPDbH1_W.js → 6-D8xbnTSo.js} +2 -2
  63. package/build/server/chunks/6-D8xbnTSo.js.map +1 -0
  64. package/build/server/chunks/{7-CpBrOkxQ.js → 7-CkVK06S0.js} +2 -2
  65. package/build/server/chunks/7-CkVK06S0.js.map +1 -0
  66. package/build/server/chunks/{8-BRGAVfze.js → 8-C8qVhrds.js} +2 -2
  67. package/build/server/chunks/8-C8qVhrds.js.map +1 -0
  68. package/build/server/chunks/{9-C6xuAb_Y.js → 9-fL5zqN0T.js} +2 -2
  69. package/build/server/chunks/9-fL5zqN0T.js.map +1 -0
  70. package/build/server/chunks/{_server.ts-BrRZXr-8.js → _server.ts-BA_uWcPw.js} +9 -9
  71. package/build/server/chunks/_server.ts-BA_uWcPw.js.map +1 -0
  72. package/build/server/chunks/{_server.ts-C6xbNz6d.js → _server.ts-Bu3s5hfv.js} +3 -3
  73. package/build/server/chunks/{_server.ts-C6xbNz6d.js.map → _server.ts-Bu3s5hfv.js.map} +1 -1
  74. package/build/server/chunks/{_server.ts-Cq9_scaV.js → _server.ts-CwAjt91u.js} +18 -18
  75. package/build/server/chunks/_server.ts-CwAjt91u.js.map +1 -0
  76. package/build/server/chunks/{_server.ts-CFX-S_8q.js → _server.ts-DZ5naqSL.js} +2 -2
  77. package/build/server/chunks/{_server.ts-CFX-S_8q.js.map → _server.ts-DZ5naqSL.js.map} +1 -1
  78. package/build/server/chunks/{_server.ts-Dekgb6Hx.js → _server.ts-DZP2lhaY.js} +3 -3
  79. package/build/server/chunks/{_server.ts-Dekgb6Hx.js.map → _server.ts-DZP2lhaY.js.map} +1 -1
  80. package/build/server/chunks/_server.ts-DZgfQKiH.js +81 -0
  81. package/build/server/chunks/_server.ts-DZgfQKiH.js.map +1 -0
  82. package/build/server/chunks/{_server.ts-CjK0g9dO.js → _server.ts-MbnroWEF.js} +25 -16
  83. package/build/server/chunks/_server.ts-MbnroWEF.js.map +1 -0
  84. package/build/server/chunks/{pty-manager-aFpChJah.js → pty-manager-DmNSCKAr.js} +99 -2
  85. package/build/server/chunks/pty-manager-DmNSCKAr.js.map +1 -0
  86. package/build/server/chunks/qwen-reader-DGfUbKaJ.js +2112 -0
  87. package/build/server/chunks/qwen-reader-DGfUbKaJ.js.map +1 -0
  88. package/build/server/chunks/{_server.ts-D--_NXt2.js → registry-Kcw2UCMv.js} +132 -106
  89. package/build/server/chunks/registry-Kcw2UCMv.js.map +1 -0
  90. package/build/server/index.js +1 -1
  91. package/build/server/index.js.map +1 -1
  92. package/build/server/manifest.js +16 -16
  93. package/build/server/manifest.js.map +1 -1
  94. package/package.json +2 -2
  95. package/scripts/e2e-all-features.sh +165 -0
  96. package/scripts/e2e-cross-terminal.sh +168 -0
  97. package/server.ts +12 -0
  98. package/src/lib/modules/client/common/index.ts +1 -1
  99. package/src/lib/modules/client/common/provider.ts +11 -0
  100. package/src/lib/modules/client/terminal/ChatView.svelte +9 -2
  101. package/src/lib/modules/client/terminal/LaunchSheet.svelte +4 -0
  102. package/src/lib/modules/server/sessions/amp-reader.ts +439 -0
  103. package/src/lib/modules/server/sessions/codex-reader.ts +34 -33
  104. package/src/lib/modules/server/sessions/copilot-reader.ts +542 -0
  105. package/src/lib/modules/server/sessions/cursor-reader.ts +634 -0
  106. package/src/lib/modules/server/sessions/gemini-reader.ts +594 -0
  107. package/src/lib/modules/server/sessions/opencode-db-path.ts +19 -10
  108. package/src/lib/modules/server/sessions/opencode-reader.ts +13 -12
  109. package/src/lib/modules/server/sessions/process-detector.ts +39 -18
  110. package/src/lib/modules/server/sessions/provider-paths.ts +173 -0
  111. package/src/lib/modules/server/sessions/qwen-reader.ts +336 -0
  112. package/src/lib/modules/server/sessions/registry.ts +178 -0
  113. package/src/lib/modules/server/terminal/codex-watcher.ts +4 -1
  114. package/src/lib/modules/server/terminal/generic-session-watcher.ts +163 -0
  115. package/src/lib/modules/server/terminal/pty-manager.ts +51 -0
  116. package/src/lib/modules/server/ws/session-handler.ts +34 -20
  117. package/src/lib/theme.css +32 -0
  118. package/src/lib/types/gemini.ts +100 -0
  119. package/src/lib/types/generated/Sessions.ts +17 -1
  120. package/src/lib/types/index.ts +1 -0
  121. package/src/lib/types/server.ts +23 -6
  122. package/src/lib/types/sessions.ts +14 -2
  123. package/src/routes/api/sessions/+server.ts +5 -52
  124. package/src/routes/api/sessions/connect/+server.ts +18 -11
  125. package/src/routes/api/terminals/+server.ts +7 -5
  126. package/src/routes/terminals/+page.svelte +7 -2
  127. package/src/routes/terminals/[id]/+page.svelte +1 -2
  128. package/build/client/_app/immutable/assets/0.DEfoFaGR.css.br +0 -0
  129. package/build/client/_app/immutable/assets/0.DEfoFaGR.css.gz +0 -0
  130. package/build/client/_app/immutable/chunks/Bkqjn62J.js +0 -1
  131. package/build/client/_app/immutable/chunks/Bkqjn62J.js.br +0 -1
  132. package/build/client/_app/immutable/chunks/Bkqjn62J.js.gz +0 -0
  133. package/build/client/_app/immutable/chunks/DOHhmtDH.js +0 -3
  134. package/build/client/_app/immutable/chunks/DOHhmtDH.js.br +0 -0
  135. package/build/client/_app/immutable/chunks/DOHhmtDH.js.gz +0 -0
  136. package/build/client/_app/immutable/chunks/DlS3abGJ.js.br +0 -0
  137. package/build/client/_app/immutable/chunks/DlS3abGJ.js.gz +0 -0
  138. package/build/client/_app/immutable/chunks/Pw0jDB7M.js +0 -1
  139. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.br +0 -0
  140. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.gz +0 -0
  141. package/build/client/_app/immutable/entry/app.CSJG7N9H.js.br +0 -0
  142. package/build/client/_app/immutable/entry/app.CSJG7N9H.js.gz +0 -0
  143. package/build/client/_app/immutable/entry/start.CTt1901T.js +0 -1
  144. package/build/client/_app/immutable/entry/start.CTt1901T.js.br +0 -2
  145. package/build/client/_app/immutable/entry/start.CTt1901T.js.gz +0 -0
  146. package/build/client/_app/immutable/nodes/0.qOL7xtFn.js.br +0 -0
  147. package/build/client/_app/immutable/nodes/0.qOL7xtFn.js.gz +0 -0
  148. package/build/client/_app/immutable/nodes/1.Di708Ago.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/1.Di708Ago.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/2.DSM1znqa.js.br +0 -0
  151. package/build/client/_app/immutable/nodes/2.DSM1znqa.js.gz +0 -0
  152. package/build/client/_app/immutable/nodes/3.BPa5fh75.js.br +0 -0
  153. package/build/client/_app/immutable/nodes/3.BPa5fh75.js.gz +0 -0
  154. package/build/client/_app/immutable/nodes/6.B1LwwEF-.js +0 -1
  155. package/build/client/_app/immutable/nodes/6.B1LwwEF-.js.br +0 -0
  156. package/build/client/_app/immutable/nodes/6.B1LwwEF-.js.gz +0 -0
  157. package/build/client/_app/immutable/nodes/7.B7UJd8GQ.js.br +0 -0
  158. package/build/client/_app/immutable/nodes/7.B7UJd8GQ.js.gz +0 -0
  159. package/build/client/_app/immutable/nodes/8.CG0mrgBU.js +0 -2
  160. package/build/client/_app/immutable/nodes/8.CG0mrgBU.js.br +0 -0
  161. package/build/client/_app/immutable/nodes/8.CG0mrgBU.js.gz +0 -0
  162. package/build/client/_app/immutable/nodes/9.KwzWaMHj.js +0 -2
  163. package/build/client/_app/immutable/nodes/9.KwzWaMHj.js.br +0 -0
  164. package/build/client/_app/immutable/nodes/9.KwzWaMHj.js.gz +0 -0
  165. package/build/server/chunks/6-bPDbH1_W.js.map +0 -1
  166. package/build/server/chunks/7-CpBrOkxQ.js.map +0 -1
  167. package/build/server/chunks/8-BRGAVfze.js.map +0 -1
  168. package/build/server/chunks/9-C6xuAb_Y.js.map +0 -1
  169. package/build/server/chunks/_server.ts-BrRZXr-8.js.map +0 -1
  170. package/build/server/chunks/_server.ts-CjK0g9dO.js.map +0 -1
  171. package/build/server/chunks/_server.ts-Cq9_scaV.js.map +0 -1
  172. package/build/server/chunks/_server.ts-D--_NXt2.js.map +0 -1
  173. package/build/server/chunks/opencode-db-path-CRgzBK5U.js +0 -402
  174. package/build/server/chunks/opencode-db-path-CRgzBK5U.js.map +0 -1
  175. package/build/server/chunks/pty-manager-aFpChJah.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qwen-reader-DGfUbKaJ.js","sources":["../../../.svelte-kit/adapter-node/chunks/qwen-reader.js"],"sourcesContent":["import * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport { existsSync } from \"fs\";\nimport { homedir } from \"os\";\nimport * as path from \"path\";\nclass TurnBuilder {\n current = null;\n messages = [];\n /** Messages flushed so far (excludes the still-open run). */\n completed() {\n return this.messages;\n }\n flush() {\n if (this.current && this.current.parts.length > 0) {\n this.messages.push({\n id: `codex-${this.messages.length}`,\n parts: this.current.parts,\n role: this.current.role,\n timestamp: this.current.timestamp\n });\n }\n this.current = null;\n }\n push(role, part, timestamp) {\n const category = role === \"user\" ? \"user\" : part.type === \"tool_result\" ? \"system\" : \"assistant\";\n const messageRole = category === \"system\" ? \"system\" : role;\n if (this.current?.category !== category) {\n this.flush();\n this.current = { category, parts: [], role: messageRole, timestamp };\n }\n this.current.parts.push(part);\n }\n result() {\n this.flush();\n return this.messages;\n }\n}\nfunction parseCodexMeta(line) {\n try {\n const entry = JSON.parse(line);\n if (!isRecord$3(entry) || entry.type !== \"session_meta\" || !isRecord$3(entry.payload)) {\n return null;\n }\n const p = entry.payload;\n if (!str(p, \"id\") || !str(p, \"cwd\")) {\n return null;\n }\n return {\n cliVersion: str(p, \"cli_version\"),\n cwd: str(p, \"cwd\"),\n id: str(p, \"id\"),\n model: str(p, \"model\") || str(p, \"model_provider\"),\n startedAt: str(p, \"timestamp\") || str(entry, \"timestamp\")\n };\n } catch {\n return null;\n }\n}\nfunction parseCodexRollout(text) {\n const builder = new TurnBuilder();\n let meta = null;\n for (const line of text.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n let entry;\n try {\n entry = JSON.parse(trimmed);\n } catch {\n continue;\n }\n if (!isRecord$3(entry)) {\n continue;\n }\n const ts = str(entry, \"timestamp\");\n if (entry.type === \"session_meta\") {\n meta = parseCodexMeta(trimmed);\n continue;\n }\n if (entry.type !== \"response_item\" || !isRecord$3(entry.payload)) {\n continue;\n }\n const mapped = responseItemToPart(entry.payload);\n if (mapped) {\n builder.push(mapped.role, mapped.part, ts);\n }\n }\n return { messages: builder.result(), meta };\n}\nfunction isRecord$3(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction joinMessageText(content) {\n if (!Array.isArray(content)) {\n return typeof content === \"string\" ? content : \"\";\n }\n return content.filter((c) => isRecord$3(c)).filter((c) => c.type === \"input_text\" || c.type === \"output_text\" || c.type === \"text\").map((c) => str(c, \"text\")).join(\"\\n\").trim();\n}\nfunction parseToolInput(raw) {\n if (isRecord$3(raw)) {\n return raw;\n }\n if (typeof raw === \"string\") {\n try {\n const parsed = JSON.parse(raw);\n return isRecord$3(parsed) ? parsed : { raw };\n } catch {\n return { raw };\n }\n }\n return {};\n}\nfunction reasoningText(payload) {\n const summary = payload.summary;\n if (Array.isArray(summary) && summary.length > 0) {\n const text = summary.map((s) => typeof s === \"string\" ? s : isRecord$3(s) ? str(s, \"text\") : \"\").join(\"\\n\").trim();\n if (text) {\n return text;\n }\n }\n return typeof payload.content === \"string\" ? payload.content.trim() : \"\";\n}\nfunction responseItemToPart(p) {\n switch (p.type) {\n case \"custom_tool_call\":\n case \"function_call\": {\n const args = p.type === \"function_call\" ? p.arguments : p.input;\n return {\n part: {\n id: str(p, \"call_id\"),\n input: parseToolInput(args),\n toolName: str(p, \"name\") || \"tool\",\n type: \"tool_use\"\n },\n role: \"assistant\"\n };\n }\n case \"custom_tool_call_output\":\n case \"function_call_output\":\n case \"tool_search_output\": {\n const output = typeof p.output === \"string\" ? p.output : JSON.stringify(p.output ?? \"\");\n return {\n part: {\n isError: /exit code:\\s*[1-9]/i.test(output),\n output: output.slice(0, 2e3),\n toolUseId: str(p, \"call_id\"),\n type: \"tool_result\"\n },\n role: \"assistant\"\n };\n }\n case \"message\": {\n if (p.role === \"developer\") {\n return null;\n }\n const content = joinMessageText(p.content);\n return content ? { part: { content, type: \"text\" }, role: p.role === \"user\" ? \"user\" : \"assistant\" } : null;\n }\n case \"reasoning\": {\n const think = reasoningText(p);\n return think ? { part: { content: think, type: \"thinking\" }, role: \"assistant\" } : null;\n }\n case \"tool_search_call\":\n case \"web_search_call\":\n return {\n part: {\n id: str(p, \"call_id\"),\n input: parseToolInput(p.action ?? p.query),\n toolName: str(p, \"type\"),\n type: \"tool_use\"\n },\n role: \"assistant\"\n };\n default:\n return null;\n }\n}\nfunction str(obj, key) {\n const v = obj[key];\n return typeof v === \"string\" ? v : \"\";\n}\nconst LIST_PREFIX_BYTES = 256 * 1024;\nconst MAX_FULL_READ_BYTES$2 = 16 * 1024 * 1024;\nconst APPROX_BYTES_PER_MESSAGE = 3e3;\nconst SYNTHETIC_PROMPT_PREFIXES = [\"<environment_context>\", \"<user_instructions>\", \"<permissions\"];\nfunction detectActiveCodexSessions(thresholdMs) {\n const cutoff = Date.now() - thresholdMs;\n const out = [];\n for (const filePath of collectRolloutFiles()) {\n try {\n const stat = fs.statSync(filePath);\n if (stat.mtimeMs < cutoff) {\n continue;\n }\n const meta = parseCodexMeta(readPrefix$3(filePath).split(\"\\n\")[0] ?? \"\");\n if (meta) {\n out.push({ cwd: meta.cwd, id: meta.id, startedAt: stat.birthtimeMs });\n }\n } catch {\n }\n }\n return out;\n}\nfunction findCodexRolloutById(sessionId) {\n if (!/^[0-9a-f-]+$/i.test(sessionId)) {\n return null;\n }\n const suffix = `-${sessionId}.jsonl`;\n return collectRolloutFiles().find((p) => path.basename(p).endsWith(suffix)) ?? null;\n}\nfunction findCodexRolloutForCwd(cwd, sinceMs) {\n let best = null;\n for (const filePath of collectRolloutFiles()) {\n try {\n const stat = fs.statSync(filePath);\n if (stat.birthtimeMs <= sinceMs) {\n continue;\n }\n const meta = parseCodexMeta(readPrefix$3(filePath).split(\"\\n\")[0] ?? \"\");\n if (meta?.cwd === cwd && (!best || stat.birthtimeMs > best.birthtime)) {\n best = { birthtime: stat.birthtimeMs, path: filePath };\n }\n } catch {\n }\n }\n return best?.path ?? null;\n}\nfunction getCodexConversation(sessionId, offset = 0, limit = 200) {\n const filePath = findCodexRolloutById(sessionId);\n if (!filePath || !fs.existsSync(filePath)) {\n return [];\n }\n try {\n const { messages } = parseCodexRollout(readBoundedRolloutText(filePath));\n if (offset === 0 && messages.length > limit) {\n let startIdx = messages.length - limit;\n while (startIdx > 0 && messages[startIdx].role !== \"user\") {\n startIdx--;\n }\n return messages.slice(startIdx);\n }\n return messages.slice(offset, offset + limit);\n } catch (error) {\n console.error(\"[codex] Failed to read conversation:\", error);\n return [];\n }\n}\nfunction listCodexProjects() {\n const files = collectRolloutFiles();\n const byCwd = /* @__PURE__ */ new Map();\n for (const filePath of files) {\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch {\n continue;\n }\n let prefix;\n try {\n prefix = readPrefix$3(filePath);\n } catch {\n continue;\n }\n const nlIdx = prefix.indexOf(\"\\n\");\n const firstLine = nlIdx === -1 ? prefix : prefix.slice(0, nlIdx);\n const meta = parseCodexMeta(firstLine);\n if (!meta) {\n continue;\n }\n const session = {\n created: meta.startedAt || stat.birthtime.toISOString(),\n gitBranch: \"\",\n id: meta.id,\n messageCount: Math.max(1, Math.round(stat.size / APPROX_BYTES_PER_MESSAGE)),\n modified: stat.mtime.toISOString(),\n projectPath: meta.cwd,\n source: \"codex\",\n summary: \"\",\n title: cleanTitle$2(firstUserPrompt(prefix))\n };\n const bucket = byCwd.get(meta.cwd);\n if (bucket) {\n bucket.push(session);\n } else {\n byCwd.set(meta.cwd, [session]);\n }\n }\n const projects = [];\n for (const [cwd, sessions] of byCwd) {\n sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());\n const segments = cwd.split(\"/\").filter(Boolean);\n projects.push({\n fullPath: cwd,\n id: shortHash$5(cwd),\n lastModified: sessions[0]?.modified ?? \"\",\n name: segments.slice(-2).join(\"/\"),\n sessionCount: sessions.length,\n sessions\n });\n }\n return projects.sort(\n (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()\n );\n}\nfunction readBoundedRolloutText(filePath) {\n const stat = fs.statSync(filePath);\n if (stat.size <= MAX_FULL_READ_BYTES$2) {\n return fs.readFileSync(filePath, \"utf-8\");\n }\n const head = readPrefix$3(filePath).split(\"\\n\")[0] ?? \"\";\n const fd = fs.openSync(filePath, \"r\");\n try {\n const start = stat.size - MAX_FULL_READ_BYTES$2;\n const buf = Buffer.alloc(MAX_FULL_READ_BYTES$2);\n const bytesRead = fs.readSync(fd, buf, 0, MAX_FULL_READ_BYTES$2, start);\n const tail = buf.toString(\"utf-8\", 0, bytesRead);\n return `${head}\n${tail.slice(tail.indexOf(\"\\n\") + 1)}`;\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction cleanTitle$2(prompt) {\n const firstLine = prompt.replace(/\\s+/g, \" \").trim().split(\"\\n\")[0]?.trim() ?? \"\";\n if (!firstLine) {\n return \"Untitled Session\";\n }\n return firstLine.length > 80 ? `${firstLine.slice(0, 77)}...` : firstLine;\n}\nfunction codexSessionsDirs() {\n const home = homedir();\n return [path.join(home, \".codex\", \"sessions\"), path.join(home, \".codex\", \"archived_sessions\")];\n}\nfunction collectRolloutFiles() {\n const out = [];\n const walk = (dir) => {\n let entries;\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(full);\n } else if (entry.name.startsWith(\"rollout-\") && entry.name.endsWith(\".jsonl\")) {\n out.push(full);\n }\n }\n };\n for (const root of codexSessionsDirs()) {\n walk(root);\n }\n return out;\n}\nfunction firstUserPrompt(prefixText) {\n for (const line of prefixText.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.includes('\"type\":\"message\"') || !trimmed.includes('\"role\":\"user\"')) {\n continue;\n }\n try {\n const entry = JSON.parse(trimmed);\n const text = (entry.payload?.content ?? []).filter((c) => c.type === \"input_text\" && typeof c.text === \"string\").map((c) => c.text ?? \"\").join(\"\\n\").trim();\n if (text && !SYNTHETIC_PROMPT_PREFIXES.some((p) => text.startsWith(p))) {\n return text;\n }\n } catch {\n continue;\n }\n }\n return \"\";\n}\nfunction readPrefix$3(filePath) {\n const fd = fs.openSync(filePath, \"r\");\n try {\n const buf = Buffer.alloc(LIST_PREFIX_BYTES);\n const bytesRead = fs.readSync(fd, buf, 0, LIST_PREFIX_BYTES, 0);\n const text = buf.toString(\"utf-8\", 0, bytesRead);\n const lastNl = text.lastIndexOf(\"\\n\");\n return lastNl === -1 ? text : text.slice(0, lastNl);\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction shortHash$5(input) {\n return crypto.createHash(\"sha256\").update(input).digest(\"hex\").slice(0, 8);\n}\nconst AMP_THREADS = path.join(homedir(), \".local\", \"share\", \"amp\", \"threads\");\nconst MAX_FILE_BYTES = 64 * 1024 * 1024;\nconst THREAD_FILE_RE = /^T-(.+)\\.json$/;\nconst SESSION_ID_RE$1 = /^[A-Za-z0-9_.-]+$/;\nfunction detectActiveAmpSessions(thresholdMs) {\n const cutoff = Date.now() - thresholdMs;\n const out = [];\n for (const filePath of collectThreadFiles()) {\n try {\n const stat = fs.statSync(filePath);\n if (stat.mtimeMs < cutoff) {\n continue;\n }\n const doc = readThreadDoc(filePath);\n if (!doc) {\n continue;\n }\n const id = threadId(filePath, doc);\n const cwd = projectCwd(doc);\n if (id && cwd) {\n out.push({ cwd, id, startedAt: stat.birthtimeMs });\n }\n } catch {\n }\n }\n return out;\n}\nfunction getAmpConversation(sessionId, offset = 0, limit = 200) {\n if (!SESSION_ID_RE$1.test(sessionId)) {\n return [];\n }\n const filePath = path.join(AMP_THREADS, `T-${sessionId}.json`);\n if (!fs.existsSync(filePath)) {\n return [];\n }\n try {\n const doc = readThreadDoc(filePath);\n if (!doc) {\n return [];\n }\n const rawMessages = Array.isArray(doc.messages) ? doc.messages : [];\n const messages = [];\n let idx = 0;\n for (const raw of rawMessages) {\n const msg = ampMessageToConversationMessage(raw, idx);\n if (msg) {\n messages.push(msg);\n idx++;\n }\n }\n if (offset === 0 && messages.length > limit) {\n let startIdx = messages.length - limit;\n while (startIdx > 0 && messages[startIdx]?.role !== \"user\") {\n startIdx--;\n }\n return messages.slice(startIdx);\n }\n return messages.slice(offset, offset + limit);\n } catch (err) {\n console.error(\"[amp] Failed to read conversation:\", err);\n return [];\n }\n}\nfunction listAmpProjects() {\n const byCwd = /* @__PURE__ */ new Map();\n for (const filePath of collectThreadFiles()) {\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch {\n continue;\n }\n const doc = readThreadDoc(filePath);\n if (!doc) {\n continue;\n }\n const id = threadId(filePath, doc);\n if (!id) {\n continue;\n }\n const cwd = projectCwd(doc) || id;\n const modified = lastModified(doc, stat);\n const created = typeof doc.created === \"string\" && doc.created ? doc.created : stat.birthtime.toISOString();\n const rawMessages = Array.isArray(doc.messages) ? doc.messages : [];\n const session = {\n created,\n gitBranch: \"\",\n id,\n messageCount: rawMessages.length,\n modified,\n projectPath: cwd,\n source: \"amp\",\n summary: \"\",\n title: cleanTitle$1(typeof doc.title === \"string\" ? doc.title : \"\")\n };\n const bucket = byCwd.get(cwd);\n if (bucket) {\n bucket.push(session);\n } else {\n byCwd.set(cwd, [session]);\n }\n }\n const projects = [];\n for (const [cwd, sessions] of byCwd) {\n sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());\n const segments = cwd.split(\"/\").filter(Boolean);\n projects.push({\n fullPath: cwd,\n id: shortHash$4(cwd),\n lastModified: sessions[0]?.modified ?? \"\",\n name: segments.slice(-2).join(\"/\") || cwd,\n sessionCount: sessions.length,\n sessions\n });\n }\n return projects.sort(\n (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()\n );\n}\nfunction resolveAmpSessionFile(sessionId) {\n if (!SESSION_ID_RE$1.test(sessionId)) {\n return null;\n }\n const filePath = path.join(AMP_THREADS, `T-${sessionId}.json`);\n return fs.existsSync(filePath) ? filePath : null;\n}\nfunction ampBlockToPart(block) {\n switch (block.type) {\n case \"text\":\n return { content: typeof block.text === \"string\" ? block.text : \"\", type: \"text\" };\n case \"thinking\":\n return {\n content: typeof block.thinking === \"string\" ? block.thinking : \"\",\n type: \"thinking\"\n };\n case \"tool_result\": {\n const output = extractToolResultText(block.content);\n return {\n isError: typeof block.is_error === \"boolean\" ? block.is_error : false,\n output: output.slice(0, 2e3),\n toolUseId: typeof block.tool_use_id === \"string\" ? block.tool_use_id : \"\",\n type: \"tool_result\"\n };\n }\n case \"tool_use\":\n return {\n id: typeof block.id === \"string\" ? block.id : \"\",\n input: isRecord$2(block.input) ? block.input : {},\n toolName: typeof block.name === \"string\" ? block.name : \"tool\",\n type: \"tool_use\"\n };\n default:\n return null;\n }\n}\nfunction ampMessageToConversationMessage(raw, index) {\n if (!isRecord$2(raw)) {\n return null;\n }\n const role = raw.role;\n if (role !== \"user\" && role !== \"assistant\") {\n return null;\n }\n const parts = contentToParts(raw.content);\n if (parts.length === 0) {\n return null;\n }\n const msgRole = role === \"user\" ? \"user\" : \"assistant\";\n return {\n id: `amp-${msgRole}-${index}`,\n parts,\n role: msgRole,\n timestamp: \"\"\n };\n}\nfunction cleanTitle$1(raw) {\n const first = raw.replace(/\\s+/g, \" \").trim().split(\"\\n\")[0]?.trim() ?? \"\";\n if (!first) {\n return \"Untitled Session\";\n }\n return first.length > 80 ? `${first.slice(0, 77)}...` : first;\n}\nfunction collectThreadFiles() {\n let entries;\n try {\n entries = fs.readdirSync(AMP_THREADS, { withFileTypes: true });\n } catch {\n return [];\n }\n const files = [];\n for (const entry of entries) {\n if (!entry.isFile() || !THREAD_FILE_RE.test(entry.name)) {\n continue;\n }\n const full = path.join(AMP_THREADS, entry.name);\n try {\n const stat = fs.statSync(full);\n files.push({ mtime: stat.mtimeMs, path: full });\n } catch {\n }\n }\n files.sort((a, b) => b.mtime - a.mtime);\n return files.map((f) => f.path);\n}\nfunction contentToParts(content) {\n if (typeof content === \"string\" && content) {\n return [{ content, type: \"text\" }];\n }\n if (!Array.isArray(content)) {\n return [];\n }\n const parts = [];\n for (const item of content) {\n if (!isRecord$2(item)) {\n continue;\n }\n const part = ampBlockToPart(item);\n if (part) {\n parts.push(part);\n }\n }\n return parts;\n}\nfunction extractToolResultText(content) {\n if (typeof content === \"string\") {\n return content;\n }\n if (!Array.isArray(content)) {\n return \"\";\n }\n return content.filter((c) => isRecord$2(c) && c.type === \"text\").map((c) => typeof c.text === \"string\" ? c.text : \"\").join(\"\\n\");\n}\nfunction isRecord$2(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction lastModified(doc, stat) {\n if (isRecord$2(doc.meta)) {\n const traces = doc.meta.traces;\n if (Array.isArray(traces) && traces.length > 0) {\n const last = traces[traces.length - 1];\n if (isRecord$2(last)) {\n const et = last.endTime;\n if (typeof et === \"string\" && et) {\n return et;\n }\n if (typeof et === \"number\" && et > 0) {\n return new Date(et).toISOString();\n }\n }\n }\n }\n return stat.mtime.toISOString();\n}\nfunction projectCwd(doc) {\n if (isRecord$2(doc.env) && isRecord$2(doc.env.initial)) {\n const trees = doc.env.initial.trees;\n if (Array.isArray(trees) && trees.length > 0 && isRecord$2(trees[0])) {\n const dn = trees[0].displayName;\n if (typeof dn === \"string\" && dn) {\n return dn;\n }\n }\n }\n return \"\";\n}\nfunction readThreadDoc(filePath) {\n try {\n if (fs.statSync(filePath).size > MAX_FILE_BYTES) {\n return null;\n }\n const parsed = JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n return isRecord$2(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\nfunction shortHash$4(input) {\n return crypto.createHash(\"sha256\").update(input).digest(\"hex\").slice(0, 8);\n}\nfunction threadId(filePath, doc) {\n const m = THREAD_FILE_RE.exec(path.basename(filePath));\n if (m?.[1]) {\n return m[1];\n }\n if (typeof doc.id === \"string\" && doc.id) {\n return doc.id;\n }\n return \"\";\n}\nconst PREFIX_BYTES$2 = 64 * 1024;\nconst MAX_FULL_READ_BYTES$1 = 16 * 1024 * 1024;\nconst COPILOT_SESSION_STATE = path.join(homedir(), \".copilot\", \"session-state\");\nconst SESSION_ID_RE = /^[A-Za-z0-9_.-]+$/;\nfunction detectActiveCopilotSessions(thresholdMs) {\n const cutoff = Date.now() - thresholdMs;\n const out = [];\n for (const filePath of collectCopilotFiles()) {\n try {\n const stat = fs.statSync(filePath);\n if (stat.mtimeMs < cutoff) {\n continue;\n }\n const meta = readMeta$1(readPrefix$2(filePath), filePath);\n if (meta) {\n out.push({ cwd: meta.cwd, id: meta.id, startedAt: stat.birthtimeMs });\n }\n } catch {\n }\n }\n return out;\n}\nfunction getCopilotConversation(sessionId, offset = 0, limit = 200) {\n if (!SESSION_ID_RE.test(sessionId)) {\n return [];\n }\n const filePath = resolveCopilotSessionFile(sessionId);\n if (!filePath) {\n return [];\n }\n try {\n const text = readBounded$1(filePath);\n const messages = parseCopilotText(text);\n if (offset === 0 && messages.length > limit) {\n let startIdx = messages.length - limit;\n while (startIdx > 0 && messages[startIdx]?.role !== \"user\") {\n startIdx--;\n }\n return messages.slice(startIdx);\n }\n return messages.slice(offset, offset + limit);\n } catch (error) {\n console.error(\"[copilot] Failed to read conversation:\", error);\n return [];\n }\n}\nfunction listCopilotProjects() {\n const byCwd = /* @__PURE__ */ new Map();\n for (const filePath of collectCopilotFiles()) {\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch {\n continue;\n }\n const prefix = safeReadPrefix(filePath);\n if (!prefix) {\n continue;\n }\n const meta = readMeta$1(prefix, filePath);\n if (!meta) {\n continue;\n }\n const session = {\n created: stat.birthtime.toISOString(),\n gitBranch: meta.gitBranch,\n id: meta.id,\n messageCount: 0,\n modified: stat.mtime.toISOString(),\n projectPath: meta.cwd,\n source: \"copilot\",\n summary: \"\",\n title: meta.title || \"Untitled Session\"\n };\n const bucket = byCwd.get(meta.cwd);\n if (bucket) {\n bucket.push(session);\n } else {\n byCwd.set(meta.cwd, [session]);\n }\n }\n const projects = [];\n for (const [cwd, sessions] of byCwd) {\n sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());\n const segments = cwd.split(\"/\").filter(Boolean);\n projects.push({\n fullPath: cwd,\n id: shortHash$3(cwd),\n lastModified: sessions[0]?.modified ?? \"\",\n name: segments.slice(-2).join(\"/\"),\n sessionCount: sessions.length,\n sessions\n });\n }\n return projects.sort(\n (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()\n );\n}\nfunction resolveCopilotSessionFile(sessionId) {\n if (!SESSION_ID_RE.test(sessionId)) {\n return null;\n }\n for (const filePath of collectCopilotFiles()) {\n if (sessionIdFromFilePath(filePath) === sessionId) {\n return filePath;\n }\n }\n return null;\n}\nfunction collectCopilotFiles() {\n const out = [];\n let entries;\n try {\n entries = fs.readdirSync(COPILOT_SESSION_STATE, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const entry of entries) {\n const full = path.join(COPILOT_SESSION_STATE, entry.name);\n if (entry.isFile() && entry.name.endsWith(\".jsonl\")) {\n out.push(full);\n } else if (entry.isDirectory()) {\n const eventsPath = path.join(full, \"events.jsonl\");\n try {\n fs.statSync(eventsPath);\n out.push(eventsPath);\n } catch {\n }\n }\n }\n return out;\n}\nfunction copilotEventToMessage(entry, pendingToolUseId) {\n const type = typeof entry.type === \"string\" ? entry.type : \"\";\n const ts = typeof entry.timestamp === \"string\" ? entry.timestamp : \"\";\n const data = isRecord$1(entry.data) ? entry.data : entry;\n if (type === \"user.message\") {\n const content = typeof data.content === \"string\" ? data.content : \"\";\n if (!content) {\n return null;\n }\n const id = typeof data.id === \"string\" ? data.id : `copilot-user-${ts}`;\n return {\n id,\n parts: [{ content, type: \"text\" }],\n role: \"user\",\n timestamp: ts\n };\n }\n if (type === \"assistant.reasoning\") {\n const text = typeof data.text === \"string\" ? data.text : \"\";\n if (!text) {\n return null;\n }\n const id = typeof data.id === \"string\" ? data.id : `copilot-reasoning-${ts}`;\n return {\n id,\n parts: [{ content: text, type: \"thinking\" }],\n role: \"assistant\",\n timestamp: ts\n };\n }\n if (type === \"assistant.message\") {\n const content = typeof data.content === \"string\" ? data.content : \"\";\n const parts = [];\n const reasoningText2 = typeof data.reasoningText === \"string\" ? data.reasoningText : \"\";\n if (reasoningText2) {\n parts.push({ content: reasoningText2, type: \"thinking\" });\n }\n if (content) {\n parts.push({ content, type: \"text\" });\n }\n if (Array.isArray(data.toolRequests)) {\n for (const req of data.toolRequests) {\n if (!isRecord$1(req)) {\n continue;\n }\n const toolId = typeof req.toolCallId === \"string\" ? req.toolCallId : `copilot-tool-${ts}`;\n pendingToolUseId.value = toolId;\n let input = {};\n if (isRecord$1(req.arguments)) {\n input = req.arguments;\n } else if (typeof req.arguments === \"string\") {\n try {\n const parsed = JSON.parse(req.arguments);\n if (isRecord$1(parsed)) {\n input = parsed;\n }\n } catch {\n }\n }\n parts.push({\n id: toolId,\n input,\n toolName: typeof req.name === \"string\" ? req.name : \"tool\",\n type: \"tool_use\"\n });\n }\n }\n if (parts.length === 0) {\n return null;\n }\n const id = typeof data.id === \"string\" ? data.id : `copilot-assistant-${ts}`;\n return {\n id,\n parts,\n role: \"assistant\",\n timestamp: ts\n };\n }\n if (type === \"tool.execution_complete\") {\n const rawResult = data.result;\n const result = typeof rawResult === \"string\" ? rawResult : JSON.stringify(rawResult ?? \"\");\n const isError = data.isError === true || data.success === false;\n const toolCallId = typeof data.toolCallId === \"string\" ? data.toolCallId : pendingToolUseId.value;\n const toolUseId = toolCallId || pendingToolUseId.value || \"unknown\";\n const id = typeof data.id === \"string\" ? data.id : `copilot-tool-result-${ts}`;\n return {\n id,\n parts: [\n {\n isError,\n output: result.slice(0, 2e3),\n toolUseId,\n type: \"tool_result\"\n }\n ],\n role: \"system\",\n timestamp: ts\n };\n }\n return null;\n}\nfunction isRecord$1(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction parseCopilotText(text) {\n const messages = [];\n const pendingToolUseId = { value: \"\" };\n for (const line of text.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n try {\n const entry = JSON.parse(trimmed);\n const msg = copilotEventToMessage(entry, pendingToolUseId);\n if (msg) {\n messages.push(msg);\n if (msg.parts[0]?.type === \"tool_result\") {\n pendingToolUseId.value = \"\";\n }\n }\n } catch {\n }\n }\n return messages;\n}\nfunction readBounded$1(filePath) {\n const stat = fs.statSync(filePath);\n if (stat.size <= MAX_FULL_READ_BYTES$1) {\n return fs.readFileSync(filePath, \"utf-8\");\n }\n const head = readPrefix$2(filePath).split(\"\\n\")[0] ?? \"\";\n const fd = fs.openSync(filePath, \"r\");\n try {\n const start = stat.size - MAX_FULL_READ_BYTES$1;\n const buf = Buffer.alloc(MAX_FULL_READ_BYTES$1);\n const bytesRead = fs.readSync(fd, buf, 0, MAX_FULL_READ_BYTES$1, start);\n const tail = buf.toString(\"utf-8\", 0, bytesRead);\n return `${head}\n${tail.slice(tail.indexOf(\"\\n\") + 1)}`;\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction readMeta$1(prefix, filePath) {\n let cwd = \"\";\n let gitBranch = \"\";\n let title = \"\";\n const id = sessionIdFromFilePath(filePath);\n for (const line of prefix.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n let entry;\n try {\n entry = JSON.parse(trimmed);\n } catch {\n continue;\n }\n const type = typeof entry.type === \"string\" ? entry.type : \"\";\n const data = isRecord$1(entry.data) ? entry.data : entry;\n if (type === \"session.start\") {\n const context = isRecord$1(data.context) ? data.context : data;\n if (!cwd && typeof context.cwd === \"string\") {\n cwd = context.cwd;\n }\n if (!gitBranch && typeof context.branch === \"string\") {\n gitBranch = context.branch;\n }\n }\n if (!title && type === \"user.message\" && typeof data.content === \"string\") {\n title = data.content.split(\"\\n\")[0]?.slice(0, 80) ?? \"\";\n }\n if (cwd && title) {\n break;\n }\n }\n return cwd ? { cwd, gitBranch, id, title } : null;\n}\nfunction readPrefix$2(filePath) {\n const fd = fs.openSync(filePath, \"r\");\n try {\n const buf = Buffer.alloc(PREFIX_BYTES$2);\n const n = fs.readSync(fd, buf, 0, PREFIX_BYTES$2, 0);\n const text = buf.toString(\"utf-8\", 0, n);\n const lastNl = text.lastIndexOf(\"\\n\");\n return lastNl === -1 ? text : text.slice(0, lastNl);\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction safeReadPrefix(filePath) {\n try {\n return readPrefix$2(filePath);\n } catch {\n return \"\";\n }\n}\nfunction sessionIdFromFilePath(filePath) {\n const base = path.basename(filePath);\n if (base === \"events.jsonl\") {\n return path.basename(path.dirname(filePath));\n }\n return base.replace(/\\.jsonl$/, \"\");\n}\nfunction shortHash$3(input) {\n return crypto.createHash(\"sha256\").update(input).digest(\"hex\").slice(0, 8);\n}\nconst CURSOR_PROJECTS = path.join(homedir(), \".cursor\", \"projects\");\nconst PREFIX_BYTES$1 = 64 * 1024;\nconst MAX_FULL_READ_BYTES = 16 * 1024 * 1024;\nfunction detectActiveCursorSessions(thresholdMs) {\n const cutoff = Date.now() - thresholdMs;\n const out = [];\n for (const { encodedDir, filePath } of collectTranscriptFiles()) {\n try {\n const stat = fs.statSync(filePath);\n if (stat.mtimeMs < cutoff) {\n continue;\n }\n const id = transcriptId(filePath);\n if (!id) {\n continue;\n }\n out.push({\n cwd: decodeCursorProjectDir(encodedDir),\n id,\n startedAt: stat.birthtimeMs\n });\n } catch {\n }\n }\n return out;\n}\nfunction getCursorConversation(sessionId, offset = 0, limit = 200) {\n if (!/^[A-Za-z0-9_.-]+$/.test(sessionId)) {\n return [];\n }\n const found = collectTranscriptFiles().find((e) => transcriptId(e.filePath) === sessionId);\n if (!found) {\n return [];\n }\n try {\n const messages = parseTranscriptFile(found.filePath);\n if (offset === 0 && messages.length > limit) {\n let startIdx = messages.length - limit;\n while (startIdx > 0 && messages[startIdx]?.role !== \"user\") {\n startIdx--;\n }\n return messages.slice(startIdx);\n }\n return messages.slice(offset, offset + limit);\n } catch (error) {\n console.error(\"[cursor] Failed to read conversation:\", error);\n return [];\n }\n}\nfunction listCursorProjects() {\n const byCwd = /* @__PURE__ */ new Map();\n for (const { encodedDir, filePath } of collectTranscriptFiles()) {\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch {\n continue;\n }\n const id = transcriptId(filePath);\n if (!id) {\n continue;\n }\n const cwd = decodeCursorProjectDir(encodedDir);\n const title = extractTitle(filePath);\n const session = {\n created: stat.birthtime.toISOString(),\n gitBranch: \"\",\n id,\n messageCount: estimateMessageCount(filePath, stat),\n modified: stat.mtime.toISOString(),\n projectPath: cwd,\n source: \"cursor\",\n summary: \"\",\n title\n };\n const bucket = byCwd.get(cwd);\n if (bucket) {\n bucket.push(session);\n } else {\n byCwd.set(cwd, [session]);\n }\n }\n const projects = [];\n for (const [cwd, sessions] of byCwd) {\n sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());\n const segments = cwd.split(\"/\").filter(Boolean);\n projects.push({\n fullPath: cwd,\n id: shortHash$2(cwd),\n lastModified: sessions[0]?.modified ?? \"\",\n name: segments.slice(-2).join(\"/\"),\n sessionCount: sessions.length,\n sessions\n });\n }\n return projects.sort(\n (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()\n );\n}\nfunction resolveCursorSessionFile(sessionId) {\n if (!/^[A-Za-z0-9_.-]+$/.test(sessionId)) {\n return null;\n }\n const found = collectTranscriptFiles().find((e) => transcriptId(e.filePath) === sessionId);\n return found ? found.filePath : null;\n}\nfunction collectTranscriptFiles() {\n const out = [];\n let projectDirs;\n try {\n projectDirs = fs.readdirSync(CURSOR_PROJECTS, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const dir of projectDirs) {\n if (!dir.isDirectory()) {\n continue;\n }\n const transcriptsDir = path.join(CURSOR_PROJECTS, dir.name, \"agent-transcripts\");\n let entries;\n try {\n entries = fs.readdirSync(transcriptsDir, { withFileTypes: true });\n } catch {\n continue;\n }\n const jsonlStems = /* @__PURE__ */ new Set();\n for (const entry of entries) {\n if (!entry.isFile()) {\n continue;\n }\n if (entry.name.endsWith(\".jsonl\")) {\n jsonlStems.add(entry.name.slice(0, -6));\n out.push({ encodedDir: dir.name, filePath: path.join(transcriptsDir, entry.name) });\n }\n }\n for (const entry of entries) {\n if (!entry.isFile() || !entry.name.endsWith(\".txt\")) {\n continue;\n }\n const stem = entry.name.slice(0, -4);\n if (!jsonlStems.has(stem)) {\n out.push({ encodedDir: dir.name, filePath: path.join(transcriptsDir, entry.name) });\n }\n }\n }\n return out;\n}\nfunction decodeCursorProjectDir(encoded) {\n if (encoded.includes(\"%2F\") || encoded.includes(\"%2f\")) {\n try {\n const decoded = decodeURIComponent(encoded.replace(/%2f/gi, \"/\"));\n if (decoded.startsWith(\"/\")) {\n return decoded;\n }\n } catch {\n }\n }\n if (encoded.startsWith(\"-\")) {\n const candidate = encoded.replace(/-/g, \"/\");\n return candidate;\n }\n return encoded;\n}\nfunction estimateMessageCount(filePath, stat) {\n const ext = path.extname(filePath);\n const avgBytesPerLine = ext === \".txt\" ? 200 : 500;\n return Math.max(1, Math.round(stat.size / avgBytesPerLine));\n}\nfunction extractTitle(filePath) {\n try {\n const prefix = readPrefix$1(filePath);\n const ext = path.extname(filePath);\n if (ext === \".jsonl\") {\n return titleFromJsonl(prefix);\n }\n return titleFromTxt(prefix);\n } catch {\n return \"Untitled Session\";\n }\n}\nfunction isRecord(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction jsonlLineToMessage(entry, idx) {\n const role = resolveRole(entry);\n if (!role) {\n return null;\n }\n const messageField = entry.message;\n if (!isRecord(messageField)) {\n return null;\n }\n const rawContent = messageField.content;\n if (rawContent === void 0 || rawContent === null) {\n return null;\n }\n const parts = [];\n if (typeof rawContent === \"string\") {\n if (!rawContent) {\n return null;\n }\n parts.push({ content: rawContent, type: \"text\" });\n } else if (Array.isArray(rawContent)) {\n for (const block of rawContent) {\n if (!isRecord(block)) {\n continue;\n }\n const blockType = strOf(block, \"type\");\n if (blockType === \"text\") {\n const text = strOf(block, \"text\");\n if (text) {\n parts.push({ content: text, type: \"text\" });\n }\n } else if (blockType === \"thinking\") {\n const thinking = strOf(block, \"thinking\");\n if (thinking) {\n parts.push({ content: thinking, type: \"thinking\" });\n }\n } else if (blockType === \"tool_use\") {\n const input = block.input;\n parts.push({\n id: strOf(block, \"id\"),\n input: isRecord(input) ? input : {},\n toolName: strOf(block, \"name\") || \"Unknown\",\n type: \"tool_use\"\n });\n } else if (blockType === \"tool_result\") {\n const resultContent = block.content;\n let output = \"\";\n if (typeof resultContent === \"string\") {\n output = resultContent;\n } else if (Array.isArray(resultContent)) {\n output = resultContent.filter((c) => isRecord(c) && c.type === \"text\").map((c) => {\n const t = c.text;\n return typeof t === \"string\" ? t : \"\";\n }).join(\"\\n\");\n }\n const isErr = block.is_error;\n parts.push({\n isError: typeof isErr === \"boolean\" ? isErr : false,\n output: output.slice(0, 2e3),\n toolUseId: strOf(block, \"tool_use_id\"),\n type: \"tool_result\"\n });\n }\n }\n } else {\n return null;\n }\n if (parts.length === 0) {\n return null;\n }\n const id = strOf(entry, \"id\") || strOf(entry, \"uuid\") || `cursor-${role}-${String(idx)}`;\n const timestamp = strOf(entry, \"timestamp\") || strOf(entry, \"createdAt\") || \"\";\n return { id, parts, role, timestamp };\n}\nfunction jsonlToMessages(text) {\n const messages = [];\n let idx = 0;\n for (const raw of text.split(\"\\n\")) {\n const trimmed = raw.trim();\n if (!trimmed) {\n continue;\n }\n try {\n const entry = JSON.parse(trimmed);\n if (!isRecord(entry)) {\n continue;\n }\n const msg = jsonlLineToMessage(entry, idx);\n if (msg) {\n messages.push(msg);\n idx++;\n }\n } catch {\n }\n }\n return messages;\n}\nfunction parseTranscriptFile(filePath) {\n const ext = path.extname(filePath);\n const text = readBounded(filePath);\n if (ext === \".jsonl\") {\n return jsonlToMessages(text);\n }\n return parseTxtTranscript(text);\n}\nfunction parseTxtTranscript(text) {\n const messages = [];\n let currentRole = null;\n const currentLines = [];\n let idx = 0;\n const flush = () => {\n if (!currentRole || currentLines.length === 0) {\n return;\n }\n const content = currentLines.join(\"\\n\").trim();\n if (content) {\n messages.push({\n id: `cursor-${currentRole}-${String(idx)}`,\n parts: [{ content, type: \"text\" }],\n role: currentRole,\n timestamp: \"\"\n });\n idx++;\n }\n currentLines.length = 0;\n };\n for (const line of text.split(\"\\n\")) {\n if (line.startsWith(\"user:\")) {\n flush();\n currentRole = \"user\";\n const rest = line.slice(5).trim();\n if (rest) {\n currentLines.push(rest);\n }\n } else if (line.startsWith(\"assistant:\")) {\n flush();\n currentRole = \"assistant\";\n const rest = line.slice(10).trim();\n if (rest) {\n currentLines.push(rest);\n }\n } else if (currentRole) {\n currentLines.push(line);\n }\n }\n flush();\n return messages;\n}\nfunction readBounded(filePath) {\n const stat = fs.statSync(filePath);\n if (stat.size <= MAX_FULL_READ_BYTES) {\n return fs.readFileSync(filePath, \"utf-8\");\n }\n const fd = fs.openSync(filePath, \"r\");\n try {\n const start = stat.size - MAX_FULL_READ_BYTES;\n const buf = Buffer.alloc(MAX_FULL_READ_BYTES);\n const n = fs.readSync(fd, buf, 0, MAX_FULL_READ_BYTES, start);\n const tail = buf.toString(\"utf-8\", 0, n);\n return tail.slice(tail.indexOf(\"\\n\") + 1);\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction readPrefix$1(filePath) {\n const fd = fs.openSync(filePath, \"r\");\n try {\n const buf = Buffer.alloc(PREFIX_BYTES$1);\n const n = fs.readSync(fd, buf, 0, PREFIX_BYTES$1, 0);\n const text = buf.toString(\"utf-8\", 0, n);\n const lastNl = text.lastIndexOf(\"\\n\");\n return lastNl === -1 ? text : text.slice(0, lastNl);\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction resolveRole(entry) {\n const raw = strOf(entry, \"role\") || strOf(entry, \"type\");\n switch (raw.toLowerCase()) {\n case \"assistant\":\n case \"bot\":\n case \"model\":\n return \"assistant\";\n case \"human\":\n case \"user\":\n return \"user\";\n default:\n return null;\n }\n}\nfunction shortHash$2(input) {\n return crypto.createHash(\"sha256\").update(input).digest(\"hex\").slice(0, 8);\n}\nfunction strOf(obj, key) {\n const v = obj[key];\n return typeof v === \"string\" ? v : \"\";\n}\nfunction titleFromJsonl(prefix) {\n for (const raw of prefix.split(\"\\n\")) {\n const trimmed = raw.trim();\n if (!trimmed) {\n continue;\n }\n try {\n const entry = JSON.parse(trimmed);\n if (!isRecord(entry) || resolveRole(entry) !== \"user\") {\n continue;\n }\n const messageField = entry.message;\n if (!isRecord(messageField)) {\n continue;\n }\n const rawContent = messageField.content;\n let text = \"\";\n if (typeof rawContent === \"string\") {\n text = rawContent;\n } else if (Array.isArray(rawContent)) {\n for (const block of rawContent) {\n if (isRecord(block) && block.type === \"text\") {\n const t = block.text;\n if (typeof t === \"string\" && t) {\n text = t;\n break;\n }\n }\n }\n }\n if (text) {\n return truncateTitle(text);\n }\n } catch {\n }\n }\n return \"Untitled Session\";\n}\nfunction titleFromTxt(prefix) {\n for (const line of prefix.split(\"\\n\")) {\n if (line.startsWith(\"user:\")) {\n const text = line.slice(5).trim();\n if (text) {\n return truncateTitle(text);\n }\n }\n }\n return \"Untitled Session\";\n}\nfunction transcriptId(filePath) {\n const base = path.basename(filePath);\n const stem = base.endsWith(\".jsonl\") ? base.slice(0, -6) : base.endsWith(\".txt\") ? base.slice(0, -4) : null;\n if (!stem || !/^[A-Za-z0-9_.-]+$/.test(stem)) {\n return null;\n }\n return stem;\n}\nfunction truncateTitle(text) {\n const first = text.replace(/\\s+/g, \" \").trim().split(\"\\n\")[0]?.trim() ?? \"\";\n if (!first) {\n return \"Untitled Session\";\n }\n return first.length > 80 ? `${first.slice(0, 77)}...` : first;\n}\nconst MAX_GEMINI_FILE_BYTES = 64 * 1024 * 1024;\nconst GEMINI_TMP = path.join(homedir(), \".gemini\", \"tmp\");\nconst GEMINI_PROJECTS_JSON = path.join(homedir(), \".gemini\", \"projects.json\");\nfunction detectActiveGeminiSessions(thresholdMs) {\n const cutoff = Date.now() - thresholdMs;\n const projectHashToCwd = buildHashToCwdMap();\n const projectDirs = collectProjectHashDirs();\n const out = [];\n for (const hashDir of projectDirs) {\n const hash = path.basename(hashDir);\n const cwd = projectHashToCwd.get(hash) ?? hash;\n const chatFiles = collectChatFiles(hashDir);\n for (const chatFile of chatFiles) {\n try {\n const stat = fs.statSync(chatFile);\n if (stat.mtimeMs < cutoff) {\n continue;\n }\n const record = readChatFile(chatFile);\n if (record) {\n out.push({\n cwd,\n id: record.sessionId,\n startedAt: new Date(record.startTime).getTime()\n });\n }\n } catch {\n }\n }\n const logsPath = path.join(hashDir, \"logs.json\");\n try {\n const stat = fs.statSync(logsPath);\n if (stat.mtimeMs < cutoff) {\n continue;\n }\n const entries = readLogsJson(logsPath);\n if (entries.length > 0) {\n const last = entries[entries.length - 1];\n if (last) {\n const alreadyAdded = out.some((o) => o.id === last.sessionId && o.cwd === cwd);\n if (!alreadyAdded) {\n out.push({\n cwd,\n id: last.sessionId,\n startedAt: new Date(entries[0]?.timestamp ?? last.timestamp).getTime()\n });\n }\n }\n }\n } catch {\n }\n }\n return out;\n}\nfunction getGeminiConversation(sessionId, offset = 0, limit = 200) {\n const projectDirs = collectProjectHashDirs();\n for (const hashDir of projectDirs) {\n const chatFile = findChatFileForSession(hashDir, sessionId);\n if (chatFile) {\n return conversationFromChatFile(chatFile, offset, limit);\n }\n }\n for (const hashDir of projectDirs) {\n const messages = conversationFromLogsJson(hashDir, sessionId);\n if (messages.length > 0) {\n if (offset === 0 && messages.length > limit) {\n return messages.slice(messages.length - limit);\n }\n return messages.slice(offset, offset + limit);\n }\n }\n return [];\n}\nfunction listGeminiProjects() {\n const projectHashToCwd = buildHashToCwdMap();\n const projectDirs = collectProjectHashDirs();\n const byCwd = /* @__PURE__ */ new Map();\n for (const hashDir of projectDirs) {\n const hash = path.basename(hashDir);\n const cwd = projectHashToCwd.get(hash) ?? hash;\n const chatSessions = collectChatSessions(hashDir, cwd);\n if (chatSessions.length > 0) {\n for (const session of chatSessions) {\n appendToMap(byCwd, cwd, session);\n }\n continue;\n }\n const logSessions = sessionsFromLogsJson(hashDir, cwd);\n for (const session of logSessions) {\n appendToMap(byCwd, cwd, session);\n }\n }\n const projects = [];\n for (const [cwd, sessions] of byCwd) {\n sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());\n const segments = cwd.split(\"/\").filter(Boolean);\n const isRawHash = /^[0-9a-f]{64}$/i.test(cwd);\n projects.push({\n fullPath: cwd,\n id: shortHash$1(cwd),\n lastModified: sessions[0]?.modified ?? \"\",\n name: isRawHash ? `Gemini (${cwd.slice(0, 8)})` : segments.slice(-2).join(\"/\"),\n sessionCount: sessions.length,\n sessions\n });\n }\n return projects.sort(\n (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()\n );\n}\nfunction resolveGeminiSessionFile(sessionId) {\n for (const hashDir of collectProjectHashDirs()) {\n const chatFile = findChatFileForSession(hashDir, sessionId);\n if (chatFile !== null) {\n return chatFile;\n }\n }\n return null;\n}\nfunction appendToMap(map, key, value) {\n let bucket = map.get(key);\n if (!bucket) {\n bucket = [];\n map.set(key, bucket);\n }\n bucket.push(value);\n}\nfunction buildHashToCwdMap() {\n const map = /* @__PURE__ */ new Map();\n try {\n const raw = fs.readFileSync(GEMINI_PROJECTS_JSON, \"utf-8\");\n const data = JSON.parse(raw);\n for (const [slugOrHash, absolutePath] of Object.entries(data)) {\n map.set(slugOrHash, absolutePath);\n const computed = crypto.createHash(\"sha256\").update(absolutePath).digest(\"hex\");\n map.set(computed, absolutePath);\n }\n } catch {\n }\n return map;\n}\nfunction cleanTitle(text) {\n const first = text.replace(/\\s+/g, \" \").trim().split(\"\\n\")[0]?.trim() ?? \"\";\n if (!first) {\n return \"Untitled Session\";\n }\n return first.length > 80 ? `${first.slice(0, 77)}...` : first;\n}\nfunction collectChatFiles(hashDir) {\n const chatsDir = path.join(hashDir, \"chats\");\n try {\n return fs.readdirSync(chatsDir, { withFileTypes: true }).filter((e) => e.isFile() && e.name.startsWith(\"session-\") && e.name.endsWith(\".json\")).map((e) => path.join(chatsDir, e.name));\n } catch {\n return [];\n }\n}\nfunction collectChatSessions(hashDir, cwd) {\n const chatFiles = collectChatFiles(hashDir);\n const sessions = [];\n for (const chatFile of chatFiles) {\n try {\n const stat = fs.statSync(chatFile);\n const record = readChatFile(chatFile);\n if (!record) {\n continue;\n }\n const userMessages = record.messages.filter((m) => m.type === \"user\");\n const firstUserMsg = userMessages[0];\n let title = \"Untitled Session\";\n if (firstUserMsg) {\n title = cleanTitle(extractTextFromContent(firstUserMsg.content));\n }\n sessions.push({\n created: record.startTime,\n gitBranch: \"\",\n id: record.sessionId,\n messageCount: record.messages.length,\n modified: stat.mtime.toISOString(),\n projectPath: cwd,\n source: \"gemini\",\n summary: record.summary ?? \"\",\n title\n });\n } catch {\n }\n }\n return sessions;\n}\nfunction collectProjectHashDirs() {\n try {\n return fs.readdirSync(GEMINI_TMP, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => path.join(GEMINI_TMP, e.name));\n } catch {\n return [];\n }\n}\nfunction conversationFromChatFile(chatFile, offset, limit) {\n try {\n const record = readChatFile(chatFile);\n if (!record) {\n return [];\n }\n const messages = record.messages.filter((m) => m.type === \"user\" || m.type === \"gemini\").map(messageRecordToMessage);\n if (offset === 0 && messages.length > limit) {\n let startIdx = messages.length - limit;\n while (startIdx > 0 && messages[startIdx]?.role !== \"user\") {\n startIdx--;\n }\n return messages.slice(startIdx);\n }\n return messages.slice(offset, offset + limit);\n } catch (err) {\n console.error(\"[gemini] Failed to read chat file:\", err);\n return [];\n }\n}\nfunction conversationFromLogsJson(hashDir, sessionId) {\n const logsPath = path.join(hashDir, \"logs.json\");\n const entries = readLogsJson(logsPath);\n return entries.filter((e) => e.sessionId === sessionId).map(\n (entry) => ({\n id: `${entry.sessionId}-${String(entry.messageId)}`,\n parts: [{ content: entry.message, type: \"text\" }],\n role: \"user\",\n timestamp: entry.timestamp\n })\n );\n}\nfunction extractTextFromContent(content) {\n if (typeof content === \"string\") {\n return content;\n }\n return content.filter((p) => \"text\" in p).map((p) => p.text).join(\" \");\n}\nfunction findChatFileForSession(hashDir, sessionId) {\n if (!sessionId) {\n return null;\n }\n const chatsDir = path.join(hashDir, \"chats\");\n let names;\n try {\n names = fs.readdirSync(chatsDir, { withFileTypes: true }).filter((e) => e.isFile() && e.name.startsWith(\"session-\") && e.name.endsWith(\".json\")).map((e) => e.name);\n } catch {\n return null;\n }\n const shortId = sessionId.slice(0, 8);\n names.sort((a, b) => Number(b.includes(shortId)) - Number(a.includes(shortId)));\n for (const name of names) {\n const full = path.join(chatsDir, name);\n if (readChatFile(full)?.sessionId === sessionId) {\n return full;\n }\n }\n return null;\n}\nfunction isGeminiLogEntry(v) {\n if (typeof v !== \"object\" || v === null) {\n return false;\n }\n const obj = v;\n return typeof obj.sessionId === \"string\" && typeof obj.messageId === \"number\" && typeof obj.message === \"string\" && typeof obj.timestamp === \"string\";\n}\nfunction messageRecordToMessage(record) {\n const role = record.type === \"user\" ? \"user\" : \"assistant\";\n const parts = [];\n if (record.type === \"gemini\" && record.thoughts) {\n for (const thought of record.thoughts) {\n parts.push({ content: thought.summary ?? \"\", type: \"thinking\" });\n }\n }\n const rawContent = record.content;\n const contentParts = typeof rawContent === \"string\" ? [{ text: rawContent }] : rawContent;\n for (const part of contentParts) {\n if (\"functionCall\" in part) {\n parts.push({\n id: part.functionCall.id ?? part.functionCall.name,\n input: part.functionCall.args,\n toolName: part.functionCall.name,\n type: \"tool_use\"\n });\n } else if (\"thought\" in part && part.thought === true) {\n parts.push({ content: part.text, type: \"thinking\" });\n } else if (\"text\" in part) {\n parts.push({ content: part.text, type: \"text\" });\n }\n }\n if (record.type === \"gemini\" && record.toolCalls) {\n for (const tc of record.toolCalls) {\n const alreadyInParts = parts.some((p) => p.type === \"tool_use\" && p.id === tc.id);\n if (!alreadyInParts) {\n parts.push({\n id: tc.id,\n input: tc.args,\n toolName: tc.name,\n type: \"tool_use\"\n });\n }\n }\n }\n return {\n id: record.id,\n parts,\n role,\n timestamp: record.timestamp\n };\n}\nfunction readChatFile(filePath) {\n try {\n if (fs.statSync(filePath).size > MAX_GEMINI_FILE_BYTES) {\n return null;\n }\n return JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n } catch {\n return null;\n }\n}\nfunction readLogsJson(logsPath) {\n try {\n if (fs.statSync(logsPath).size > MAX_GEMINI_FILE_BYTES) {\n return [];\n }\n const parsed = JSON.parse(fs.readFileSync(logsPath, \"utf-8\"));\n return Array.isArray(parsed) ? parsed.filter(isGeminiLogEntry) : [];\n } catch {\n return [];\n }\n}\nfunction sessionsFromLogsJson(hashDir, cwd) {\n const logsPath = path.join(hashDir, \"logs.json\");\n let stat;\n try {\n stat = fs.statSync(logsPath);\n } catch {\n return [];\n }\n const entries = readLogsJson(logsPath);\n if (entries.length === 0) {\n return [];\n }\n const bySession = /* @__PURE__ */ new Map();\n for (const entry of entries) {\n let bucket = bySession.get(entry.sessionId);\n if (!bucket) {\n bucket = [];\n bySession.set(entry.sessionId, bucket);\n }\n bucket.push(entry);\n }\n const sessions = [];\n for (const [sessionId, sessionEntries] of bySession) {\n const first = sessionEntries[0];\n const last = sessionEntries[sessionEntries.length - 1];\n sessions.push({\n created: first?.timestamp ?? stat.birthtime.toISOString(),\n gitBranch: \"\",\n id: sessionId,\n messageCount: sessionEntries.length,\n modified: last?.timestamp ?? stat.mtime.toISOString(),\n projectPath: cwd,\n source: \"gemini\",\n summary: \"\",\n title: cleanTitle(first?.message ?? \"\")\n });\n }\n return sessions;\n}\nfunction shortHash$1(input) {\n return crypto.createHash(\"sha256\").update(input).digest(\"hex\").slice(0, 8);\n}\nfunction resolveOpenCodeDbPath() {\n const home = process.env.HOME || \"\";\n const candidates = [];\n if (process.env.XDG_DATA_HOME) {\n candidates.push(path.join(process.env.XDG_DATA_HOME, \"opencode\", \"opencode.db\"));\n }\n candidates.push(path.join(home, \".local\", \"share\", \"opencode\", \"opencode.db\"));\n if (process.platform === \"darwin\") {\n candidates.push(path.join(home, \"Library\", \"Application Support\", \"opencode\", \"opencode.db\"));\n }\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return candidates[0] ?? path.join(home, \".local\", \"share\", \"opencode\", \"opencode.db\");\n}\nconst QWEN_PROJECTS = path.join(homedir(), \".qwen\", \"projects\");\nconst PREFIX_BYTES = 64 * 1024;\nconst MAX_QWEN_FILE_BYTES = 16 * 1024 * 1024;\nconst SYSTEM_TAG_PREFIXES = [\n \"<command-name>\",\n \"<local-command\",\n \"<system-reminder>\",\n \"<task-notification>\"\n];\nfunction detectActiveQwenSessions(thresholdMs) {\n const cutoff = Date.now() - thresholdMs;\n const out = [];\n for (const filePath of collectQwenFiles()) {\n try {\n const stat = fs.statSync(filePath);\n if (stat.mtimeMs < cutoff) {\n continue;\n }\n const meta = readMeta(readPrefix(filePath));\n if (meta) {\n out.push({ cwd: meta.cwd, id: meta.id, startedAt: stat.birthtimeMs });\n }\n } catch {\n }\n }\n return out;\n}\nfunction getQwenConversation(sessionId, offset = 0, limit = 200) {\n if (!/^[A-Za-z0-9_-]+$/.test(sessionId)) {\n return [];\n }\n const filePath = collectQwenFiles().find((p) => path.basename(p) === `${sessionId}.jsonl`);\n if (!filePath) {\n return [];\n }\n try {\n const messages = readQwenMessages(filePath);\n if (offset === 0 && messages.length > limit) {\n let startIdx = messages.length - limit;\n while (startIdx > 0 && messages[startIdx].role !== \"user\") {\n startIdx--;\n }\n return messages.slice(startIdx);\n }\n return messages.slice(offset, offset + limit);\n } catch (error) {\n console.error(\"[qwen] Failed to read conversation:\", error);\n return [];\n }\n}\nfunction listQwenProjects() {\n const byCwd = /* @__PURE__ */ new Map();\n for (const filePath of collectQwenFiles()) {\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch {\n continue;\n }\n const meta = readMeta(readPrefix(filePath));\n if (!meta) {\n continue;\n }\n const session = {\n created: meta.started || stat.birthtime.toISOString(),\n gitBranch: meta.gitBranch,\n id: meta.id,\n messageCount: 0,\n modified: stat.mtime.toISOString(),\n projectPath: meta.cwd,\n source: \"qwen\",\n summary: \"\",\n title: meta.title || \"Untitled Session\"\n };\n const bucket = byCwd.get(meta.cwd);\n if (bucket) {\n bucket.push(session);\n } else {\n byCwd.set(meta.cwd, [session]);\n }\n }\n const projects = [];\n for (const [cwd, sessions] of byCwd) {\n sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());\n const segments = cwd.split(\"/\").filter(Boolean);\n projects.push({\n fullPath: cwd,\n id: shortHash(cwd),\n lastModified: sessions[0]?.modified ?? \"\",\n name: segments.slice(-2).join(\"/\"),\n sessionCount: sessions.length,\n sessions\n });\n }\n return projects.sort(\n (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()\n );\n}\nfunction resolveQwenSessionFile(sessionId) {\n if (!/^[A-Za-z0-9_-]+$/.test(sessionId)) {\n return null;\n }\n return collectQwenFiles().find((p) => path.basename(p) === `${sessionId}.jsonl`) ?? null;\n}\nfunction collectQwenFiles() {\n const out = [];\n let projectDirs;\n try {\n projectDirs = fs.readdirSync(QWEN_PROJECTS, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const dir of projectDirs) {\n if (!dir.isDirectory()) {\n continue;\n }\n const chatsDir = path.join(QWEN_PROJECTS, dir.name, \"chats\");\n try {\n for (const f of fs.readdirSync(chatsDir)) {\n if (f.endsWith(\".jsonl\")) {\n out.push(path.join(chatsDir, f));\n }\n }\n } catch {\n }\n }\n return out;\n}\nfunction qwenLineToMessage(entry) {\n const type = entry.type;\n if (type !== \"user\" && type !== \"assistant\") {\n return null;\n }\n const message = entry.message ?? {};\n const rawParts = Array.isArray(message.parts) ? message.parts : [];\n const parts = [];\n for (const raw of rawParts) {\n if (typeof raw !== \"object\" || raw === null) {\n continue;\n }\n const p = raw;\n if (p.functionCall && typeof p.functionCall === \"object\") {\n const fc = p.functionCall;\n const toolName = typeof fc.name === \"string\" ? fc.name : \"tool\";\n parts.push({\n id: typeof fc.id === \"string\" ? fc.id : toolName,\n input: fc.args ?? {},\n toolName,\n type: \"tool_use\"\n });\n } else if (p.thought === true && typeof p.text === \"string\") {\n parts.push({ content: p.text, type: \"thinking\" });\n } else if (typeof p.text === \"string\") {\n parts.push({ content: p.text, type: \"text\" });\n }\n }\n if (parts.length === 0 && typeof message.content === \"string\" && message.content) {\n parts.push({ content: message.content, type: \"text\" });\n }\n if (parts.length === 0) {\n return null;\n }\n return {\n id: typeof entry.uuid === \"string\" ? entry.uuid : `qwen-${type}`,\n parts,\n role: type === \"user\" ? \"user\" : \"assistant\",\n timestamp: typeof entry.timestamp === \"string\" ? entry.timestamp : \"\"\n };\n}\nfunction readMeta(prefix) {\n let cwd = \"\";\n let id = \"\";\n let gitBranch = \"\";\n let started = \"\";\n let title = \"\";\n for (const line of prefix.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n let entry;\n try {\n entry = JSON.parse(trimmed);\n } catch {\n continue;\n }\n if (!cwd && typeof entry.cwd === \"string\") {\n cwd = entry.cwd;\n }\n if (!id && typeof entry.sessionId === \"string\") {\n id = entry.sessionId;\n }\n if (!gitBranch && typeof entry.gitBranch === \"string\") {\n gitBranch = entry.gitBranch;\n }\n if (!started && typeof entry.timestamp === \"string\") {\n started = entry.timestamp;\n }\n if (!title && entry.type === \"user\") {\n const msg = entry.message;\n let text = typeof msg?.content === \"string\" ? msg.content : \"\";\n if (!text && Array.isArray(msg?.parts)) {\n text = msg.parts.map(\n (p) => p && typeof p === \"object\" && typeof p.text === \"string\" ? p.text : \"\"\n ).join(\" \").trim();\n }\n if (text && !SYSTEM_TAG_PREFIXES.some((p) => text.startsWith(p))) {\n title = text.split(\"\\n\")[0]?.slice(0, 80) ?? \"\";\n }\n }\n }\n return id && cwd ? { cwd, gitBranch, id, started, title } : null;\n}\nfunction readPrefix(filePath) {\n const fd = fs.openSync(filePath, \"r\");\n try {\n const buf = Buffer.alloc(PREFIX_BYTES);\n const n = fs.readSync(fd, buf, 0, PREFIX_BYTES, 0);\n const text = buf.toString(\"utf-8\", 0, n);\n const lastNl = text.lastIndexOf(\"\\n\");\n return lastNl === -1 ? text : text.slice(0, lastNl);\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction readQwenMessages(filePath) {\n const messages = [];\n for (const line of readQwenTextBounded(filePath).split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n try {\n const msg = qwenLineToMessage(JSON.parse(trimmed));\n if (msg) {\n messages.push(msg);\n }\n } catch {\n }\n }\n return messages;\n}\nfunction readQwenTextBounded(filePath) {\n const size = fs.statSync(filePath).size;\n if (size <= MAX_QWEN_FILE_BYTES) {\n return fs.readFileSync(filePath, \"utf-8\");\n }\n const fd = fs.openSync(filePath, \"r\");\n try {\n const buf = Buffer.alloc(MAX_QWEN_FILE_BYTES);\n const n = fs.readSync(fd, buf, 0, MAX_QWEN_FILE_BYTES, size - MAX_QWEN_FILE_BYTES);\n const tail = buf.toString(\"utf-8\", 0, n);\n return tail.slice(tail.indexOf(\"\\n\") + 1);\n } finally {\n fs.closeSync(fd);\n }\n}\nfunction shortHash(input) {\n return crypto.createHash(\"sha256\").update(input).digest(\"hex\").slice(0, 8);\n}\nexport {\n detectActiveGeminiSessions as a,\n detectActiveQwenSessions as b,\n detectActiveCursorSessions as c,\n detectActiveCodexSessions as d,\n detectActiveCopilotSessions as e,\n detectActiveAmpSessions as f,\n getCodexConversation as g,\n listGeminiProjects as h,\n getGeminiConversation as i,\n listQwenProjects as j,\n getQwenConversation as k,\n listCodexProjects as l,\n listCursorProjects as m,\n getCursorConversation as n,\n listCopilotProjects as o,\n getCopilotConversation as p,\n listAmpProjects as q,\n resolveOpenCodeDbPath as r,\n getAmpConversation as s,\n resolveQwenSessionFile as t,\n resolveGeminiSessionFile as u,\n resolveCursorSessionFile as v,\n resolveCopilotSessionFile as w,\n resolveAmpSessionFile as x,\n findCodexRolloutForCwd as y\n};\n"],"names":[],"mappings":"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"}
@@ -1,12 +1,8 @@
1
- import { v as validateAuth } from './auth-DuunT7Cg.js';
2
- import { g as getCodexConversation, l as listCodexProjects, r as resolveOpenCodeDbPath } from './opencode-db-path-CRgzBK5U.js';
1
+ import { l as listCodexProjects, g as getCodexConversation, h as listGeminiProjects, i as getGeminiConversation, j as listQwenProjects, k as getQwenConversation, m as listCursorProjects, n as getCursorConversation, o as listCopilotProjects, p as getCopilotConversation, q as listAmpProjects, s as getAmpConversation, r as resolveOpenCodeDbPath } from './qwen-reader-DGfUbKaJ.js';
3
2
  import * as crypto from 'crypto';
4
3
  import * as fs from 'fs';
5
4
  import * as path from 'path';
6
5
  import Database from 'better-sqlite3';
7
- import { j as json } from './index-CoD1IJuy.js';
8
- import './shared-server-DaWdgxVh.js';
9
- import 'os';
10
6
 
11
7
  function extractToolResultText(content) {
12
8
  if (typeof content === "string") {
@@ -501,10 +497,6 @@ function readCwdFromProjectDir(projectDir, sessions) {
501
497
  }
502
498
  return "";
503
499
  }
504
- function shortHash(input) {
505
- return crypto.createHash("sha256").update(input).digest("hex").slice(0, 8);
506
- }
507
- const OPENCODE_DB_PATH = resolveOpenCodeDbPath();
508
500
  function getOpenCodeConversation(sessionId, offset = 0, limit = 200) {
509
501
  const db = getDb();
510
502
  if (!db) {
@@ -673,116 +665,150 @@ function convertOpenCodePart(data) {
673
665
  }
674
666
  }
675
667
  function getDb() {
676
- if (!fs.existsSync(OPENCODE_DB_PATH)) {
668
+ const dbPath = resolveOpenCodeDbPath();
669
+ if (!fs.existsSync(dbPath)) {
677
670
  return null;
678
671
  }
679
672
  try {
680
- return new Database(OPENCODE_DB_PATH, { readonly: true });
673
+ return new Database(dbPath, { readonly: true });
681
674
  } catch {
682
675
  return null;
683
676
  }
684
677
  }
685
- let cachedProjects = null;
686
- let cacheTimestamp = 0;
687
- const CACHE_TTL_MS = 5e3;
688
- function getMergedProjects() {
689
- const now = Date.now();
690
- if (cachedProjects && now - cacheTimestamp < CACHE_TTL_MS) {
691
- return cachedProjects;
692
- }
693
- const claudeProjects = listProjectsWithSessions();
694
- const openCodeProjects = listOpenCodeProjects();
695
- const codexProjects = listCodexProjects();
696
- const projectsByPath = /* @__PURE__ */ new Map();
697
- for (const p of claudeProjects) {
698
- projectsByPath.set(p.fullPath, { ...p });
699
- }
700
- const mergeProvider = (incoming, stripSuffix) => {
701
- for (const group of incoming) {
702
- const cleanName = stripSuffix ? group.name.replace(stripSuffix, "") : group.name;
703
- const existing = projectsByPath.get(group.fullPath);
704
- if (existing) {
705
- existing.sessions.push(...group.sessions);
706
- existing.sessions.sort(
707
- (a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime()
708
- );
709
- existing.sessionCount = existing.sessions.length;
710
- existing.lastModified = existing.sessions[0]?.modified || existing.lastModified;
711
- existing.name = existing.name.replace(stripSuffix ?? "", "");
712
- } else {
713
- projectsByPath.set(group.fullPath, { ...group, name: cleanName });
678
+ function shortHash(input) {
679
+ return crypto.createHash("sha256").update(input).digest("hex").slice(0, 8);
680
+ }
681
+ const PROVIDERS = [
682
+ {
683
+ command: "claude",
684
+ getConversation: (id, offset, limit) => getSessionConversation(id, offset, limit),
685
+ isAI: true,
686
+ label: "Claude Code",
687
+ listProjects: listProjectsWithSessions,
688
+ resumeArgs: (id) => ["--resume", id],
689
+ source: "claude-code"
690
+ },
691
+ {
692
+ command: "opencode",
693
+ getConversation: getOpenCodeConversation,
694
+ isAI: true,
695
+ label: "OpenCode",
696
+ listProjects: listOpenCodeProjects,
697
+ nameSuffix: " (OpenCode)",
698
+ resumeArgs: (id) => ["--session", id],
699
+ source: "opencode"
700
+ },
701
+ {
702
+ command: "codex",
703
+ getConversation: getCodexConversation,
704
+ isAI: true,
705
+ label: "Codex",
706
+ listProjects: listCodexProjects,
707
+ resumeArgs: (id) => ["resume", id],
708
+ source: "codex"
709
+ },
710
+ {
711
+ command: "gemini",
712
+ getConversation: getGeminiConversation,
713
+ isAI: true,
714
+ label: "Gemini",
715
+ listProjects: listGeminiProjects,
716
+ resumeArgs: () => [],
717
+ // Gemini CLI has no session-resume flag
718
+ source: "gemini"
719
+ },
720
+ {
721
+ command: "qwen",
722
+ getConversation: getQwenConversation,
723
+ isAI: true,
724
+ label: "Qwen",
725
+ listProjects: listQwenProjects,
726
+ resumeArgs: () => [],
727
+ source: "qwen"
728
+ },
729
+ {
730
+ command: "cursor-agent",
731
+ getConversation: getCursorConversation,
732
+ isAI: true,
733
+ label: "Cursor",
734
+ listProjects: listCursorProjects,
735
+ resumeArgs: () => [],
736
+ source: "cursor"
737
+ },
738
+ {
739
+ command: "copilot",
740
+ getConversation: getCopilotConversation,
741
+ isAI: true,
742
+ label: "Copilot",
743
+ listProjects: listCopilotProjects,
744
+ resumeArgs: () => [],
745
+ source: "copilot"
746
+ },
747
+ {
748
+ command: "amp",
749
+ getConversation: getAmpConversation,
750
+ isAI: true,
751
+ label: "Amp",
752
+ listProjects: listAmpProjects,
753
+ resumeArgs: () => [],
754
+ source: "amp"
755
+ }
756
+ ];
757
+ PROVIDERS.filter((p) => p.isAI).map((p) => p.command);
758
+ const PROVIDER_COMMANDS = PROVIDERS.map((p) => p.command);
759
+ function getProviderConversation(sessionId, offset, limit, claudeProjectDir) {
760
+ const claude = getSessionConversation(sessionId, offset, limit, claudeProjectDir);
761
+ if (claude.length > 0) {
762
+ return claude;
763
+ }
764
+ for (const provider of PROVIDERS) {
765
+ if (provider.source === "claude-code") {
766
+ continue;
767
+ }
768
+ try {
769
+ const messages = provider.getConversation(sessionId, offset, limit);
770
+ if (messages.length > 0) {
771
+ return messages;
714
772
  }
773
+ } catch {
715
774
  }
716
- };
717
- mergeProvider(openCodeProjects, " (OpenCode)");
718
- mergeProvider(codexProjects);
719
- cachedProjects = [...projectsByPath.values()].sort(
720
- (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()
721
- );
722
- cacheTimestamp = now;
723
- return cachedProjects;
775
+ }
776
+ return [];
724
777
  }
725
- const GET = ({ request, url }) => {
726
- const authError = validateAuth(request);
727
- if (authError) {
728
- return authError;
729
- }
730
- if (url.searchParams.get("refresh") === "true") {
731
- cachedProjects = null;
732
- cacheTimestamp = 0;
733
- }
734
- const sessionId = url.searchParams.get("id");
735
- if (sessionId) {
736
- const projectId = url.searchParams.get("project") || "";
737
- const rawOffset = parseInt(url.searchParams.get("offset") || "0");
738
- const rawLimit = parseInt(url.searchParams.get("limit") || "200");
739
- const offset2 = Number.isFinite(rawOffset) && rawOffset >= 0 ? rawOffset : 0;
740
- const limit2 = Number.isFinite(rawLimit) && rawLimit >= 1 ? Math.min(rawLimit, 500) : 200;
741
- const allProjects2 = getMergedProjects();
742
- const matchesProject = (p) => p.id === projectId || p.fullPath === projectId;
743
- const matchedProject = projectId ? allProjects2.find(matchesProject) : void 0;
744
- const claudeProjectDir = matchedProject ? matchedProject.fullPath.replace(/\//g, "-") : void 0;
745
- let messages = getSessionConversation(sessionId, offset2, limit2, claudeProjectDir);
746
- if (messages.length === 0) {
747
- messages = getOpenCodeConversation(sessionId, offset2, limit2);
748
- }
749
- if (messages.length === 0) {
750
- messages = getCodexConversation(sessionId, offset2, limit2);
778
+ function listAllProviderProjects() {
779
+ const byPath = /* @__PURE__ */ new Map();
780
+ for (const provider of PROVIDERS) {
781
+ let groups;
782
+ try {
783
+ groups = provider.listProjects();
784
+ } catch {
785
+ continue;
751
786
  }
752
- let sessionInfo = matchedProject?.sessions.find((s) => s.id === sessionId) ?? null;
753
- if (!sessionInfo) {
754
- for (const project of allProjects2) {
755
- if (projectId && !matchesProject(project)) {
756
- continue;
757
- }
758
- const found = project.sessions.find((s) => s.id === sessionId);
759
- if (found) {
760
- sessionInfo = found;
761
- break;
787
+ for (const group of groups) {
788
+ try {
789
+ const name = provider.nameSuffix && typeof group.name === "string" ? group.name.replace(provider.nameSuffix, "") : group.name;
790
+ const existing = byPath.get(group.fullPath);
791
+ if (existing) {
792
+ existing.sessions.push(...group.sessions);
793
+ existing.sessions.sort(
794
+ (a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime()
795
+ );
796
+ existing.sessionCount = existing.sessions.length;
797
+ existing.lastModified = existing.sessions[0]?.modified || existing.lastModified;
798
+ } else {
799
+ byPath.set(group.fullPath, { ...group, name });
762
800
  }
801
+ } catch {
763
802
  }
764
803
  }
765
- if (!sessionInfo) {
766
- return json({ error: "Session not found" }, { status: 404 });
767
- }
768
- return json({
769
- messages,
770
- session: sessionInfo,
771
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
772
- });
773
804
  }
774
- const allProjects = getMergedProjects();
775
- const limit = parseInt(url.searchParams.get("limit") || "0");
776
- const offset = parseInt(url.searchParams.get("offset") || "0");
777
- const total = allProjects.length;
778
- const paginatedProjects = limit > 0 ? allProjects.slice(offset, offset + limit) : allProjects;
779
- return json({
780
- count: allProjects.reduce((sum, p) => sum + p.sessionCount, 0),
781
- projects: paginatedProjects,
782
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
783
- total
784
- });
785
- };
805
+ return [...byPath.values()].sort(
806
+ (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()
807
+ );
808
+ }
809
+ function resumeArgsForCommand(command, sessionId) {
810
+ return PROVIDERS.find((p) => p.command === command)?.resumeArgs(sessionId) ?? [];
811
+ }
786
812
 
787
- export { GET };
788
- //# sourceMappingURL=_server.ts-D--_NXt2.js.map
813
+ export { PROVIDER_COMMANDS as P, getProviderConversation as g, listAllProviderProjects as l, resumeArgsForCommand as r };
814
+ //# sourceMappingURL=registry-Kcw2UCMv.js.map