@juspay/shooter 1.17.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 (156) hide show
  1. package/build/client/_app/immutable/assets/{0.B0O0vCnX.css → 0.NV8k8wxG.css} +1 -1
  2. package/build/client/_app/immutable/assets/0.NV8k8wxG.css.br +0 -0
  3. package/build/client/_app/immutable/assets/{0.B0O0vCnX.css.gz → 0.NV8k8wxG.css.gz} +0 -0
  4. package/build/client/_app/immutable/chunks/{BctvtE4d.js → 8lO1IL7u.js} +1 -1
  5. package/build/client/_app/immutable/chunks/8lO1IL7u.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/{BctvtE4d.js.gz → 8lO1IL7u.js.gz} +0 -0
  7. package/build/client/_app/immutable/chunks/B9WQy_3X.js +1 -0
  8. package/build/client/_app/immutable/chunks/B9WQy_3X.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/B9WQy_3X.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/BdtLzPpO.js +1 -0
  11. package/build/client/_app/immutable/chunks/BdtLzPpO.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/BdtLzPpO.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{CjfxuHdN.js → DJvX78LW.js} +1 -1
  14. package/build/client/_app/immutable/chunks/DJvX78LW.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/DJvX78LW.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/nWG9RHyB.js +3 -0
  17. package/build/client/_app/immutable/chunks/nWG9RHyB.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/nWG9RHyB.js.gz +0 -0
  19. package/build/client/_app/immutable/entry/{app.CNaTe-zm.js → app.f46Ko1hu.js} +2 -2
  20. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.br +0 -0
  21. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.gz +0 -0
  22. package/build/client/_app/immutable/entry/start.BVDjNnXt.js +1 -0
  23. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.br +2 -0
  24. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.gz +0 -0
  25. package/build/client/_app/immutable/nodes/{0.C3ELOf4c.js → 0.D_9EwVmq.js} +1 -1
  26. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.br +0 -0
  27. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.gz +0 -0
  28. package/build/client/_app/immutable/nodes/{1.Fqso94b3.js → 1.C4eFlqSB.js} +1 -1
  29. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.br +0 -0
  30. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/{2.BusCVJWk.js → 2.CdC092Za.js} +1 -1
  32. package/build/client/_app/immutable/nodes/2.CdC092Za.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/2.CdC092Za.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/{3.DUlpocIc.js → 3.Dhf4ZWW0.js} +1 -1
  35. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{6.CG4eKRH0.js → 6.B3SEB_li.js} +1 -1
  38. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{7.DHilxD1o.js → 7.DV8cJ1lX.js} +1 -1
  41. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{8.BjKgvSie.js → 8.Bs362gyb.js} +2 -2
  44. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{9.BRT6HOXB.js → 9.Cf7_3uqT.js} +1 -1
  47. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.gz +0 -0
  49. package/build/client/_app/version.json +1 -1
  50. package/build/client/_app/version.json.br +0 -0
  51. package/build/client/_app/version.json.gz +0 -0
  52. package/build/server/chunks/{0-BWFSL107.js → 0-Cd7jY0a7.js} +3 -3
  53. package/build/server/chunks/{0-BWFSL107.js.map → 0-Cd7jY0a7.js.map} +1 -1
  54. package/build/server/chunks/{1-Bw5KlAjL.js → 1-C4BOGoJY.js} +2 -2
  55. package/build/server/chunks/{1-Bw5KlAjL.js.map → 1-C4BOGoJY.js.map} +1 -1
  56. package/build/server/chunks/{2-CQ3yYSVK.js → 2-Ba0mNwJ6.js} +2 -2
  57. package/build/server/chunks/{2-CQ3yYSVK.js.map → 2-Ba0mNwJ6.js.map} +1 -1
  58. package/build/server/chunks/{3-DZ4H9hPs.js → 3-Pg8t1uJU.js} +2 -2
  59. package/build/server/chunks/{3-DZ4H9hPs.js.map → 3-Pg8t1uJU.js.map} +1 -1
  60. package/build/server/chunks/{6-BZ0enR6b.js → 6-D8xbnTSo.js} +2 -2
  61. package/build/server/chunks/{6-BZ0enR6b.js.map → 6-D8xbnTSo.js.map} +1 -1
  62. package/build/server/chunks/{7-Lg8imTZn.js → 7-CkVK06S0.js} +2 -2
  63. package/build/server/chunks/{7-Lg8imTZn.js.map → 7-CkVK06S0.js.map} +1 -1
  64. package/build/server/chunks/{8-DKs4yOL7.js → 8-C8qVhrds.js} +2 -2
  65. package/build/server/chunks/{8-DKs4yOL7.js.map → 8-C8qVhrds.js.map} +1 -1
  66. package/build/server/chunks/{9-UNmpUWDY.js → 9-fL5zqN0T.js} +2 -2
  67. package/build/server/chunks/{9-UNmpUWDY.js.map → 9-fL5zqN0T.js.map} +1 -1
  68. package/build/server/chunks/{_server.ts-B1z0q6qZ.js → _server.ts-BA_uWcPw.js} +4 -5
  69. package/build/server/chunks/_server.ts-BA_uWcPw.js.map +1 -0
  70. package/build/server/chunks/{_server.ts-5wx4ZppI.js → _server.ts-Bu3s5hfv.js} +3 -3
  71. package/build/server/chunks/{_server.ts-5wx4ZppI.js.map → _server.ts-Bu3s5hfv.js.map} +1 -1
  72. package/build/server/chunks/{_server.ts-CKXVBbwb.js → _server.ts-CwAjt91u.js} +8 -8
  73. package/build/server/chunks/_server.ts-CwAjt91u.js.map +1 -0
  74. package/build/server/chunks/{_server.ts-CgHc1Zpx.js → _server.ts-DZP2lhaY.js} +3 -3
  75. package/build/server/chunks/{_server.ts-CgHc1Zpx.js.map → _server.ts-DZP2lhaY.js.map} +1 -1
  76. package/build/server/chunks/{_server.ts-BMMTS86y.js → _server.ts-DZgfQKiH.js} +3 -4
  77. package/build/server/chunks/{_server.ts-BMMTS86y.js.map → _server.ts-DZgfQKiH.js.map} +1 -1
  78. package/build/server/chunks/{_server.ts-Bt7EAfjo.js → _server.ts-MbnroWEF.js} +25 -48
  79. package/build/server/chunks/_server.ts-MbnroWEF.js.map +1 -0
  80. package/build/server/chunks/{pty-manager-RmhVe2Ez.js → pty-manager-DmNSCKAr.js} +99 -2
  81. package/build/server/chunks/pty-manager-DmNSCKAr.js.map +1 -0
  82. package/build/server/chunks/qwen-reader-DGfUbKaJ.js +2112 -0
  83. package/build/server/chunks/qwen-reader-DGfUbKaJ.js.map +1 -0
  84. package/build/server/chunks/{registry-DzJj2E6I.js → registry-Kcw2UCMv.js} +55 -23
  85. package/build/server/chunks/registry-Kcw2UCMv.js.map +1 -0
  86. package/build/server/index.js +1 -1
  87. package/build/server/index.js.map +1 -1
  88. package/build/server/manifest.js +15 -15
  89. package/build/server/manifest.js.map +1 -1
  90. package/package.json +2 -2
  91. package/scripts/e2e-all-features.sh +165 -0
  92. package/scripts/e2e-cross-terminal.sh +168 -0
  93. package/server.ts +12 -0
  94. package/src/lib/modules/client/common/provider.ts +0 -2
  95. package/src/lib/modules/client/terminal/ChatView.svelte +9 -2
  96. package/src/lib/modules/client/terminal/LaunchSheet.svelte +3 -0
  97. package/src/lib/modules/server/sessions/amp-reader.ts +439 -0
  98. package/src/lib/modules/server/sessions/copilot-reader.ts +542 -0
  99. package/src/lib/modules/server/sessions/cursor-reader.ts +634 -0
  100. package/src/lib/modules/server/sessions/gemini-reader.ts +48 -25
  101. package/src/lib/modules/server/sessions/opencode-reader.ts +13 -12
  102. package/src/lib/modules/server/sessions/process-detector.ts +37 -60
  103. package/src/lib/modules/server/sessions/provider-paths.ts +173 -0
  104. package/src/lib/modules/server/sessions/qwen-reader.ts +41 -15
  105. package/src/lib/modules/server/sessions/registry.ts +55 -14
  106. package/src/lib/modules/server/terminal/generic-session-watcher.ts +163 -0
  107. package/src/lib/modules/server/terminal/pty-manager.ts +51 -0
  108. package/src/lib/modules/server/ws/session-handler.ts +11 -1
  109. package/src/lib/theme.css +1 -2
  110. package/src/lib/types/generated/Sessions.ts +1 -4
  111. package/src/lib/types/server.ts +23 -6
  112. package/src/lib/types/sessions.ts +1 -10
  113. package/src/routes/api/sessions/connect/+server.ts +7 -3
  114. package/build/client/_app/immutable/assets/0.B0O0vCnX.css.br +0 -0
  115. package/build/client/_app/immutable/chunks/BctvtE4d.js.br +0 -0
  116. package/build/client/_app/immutable/chunks/BxFShcQO.js +0 -1
  117. package/build/client/_app/immutable/chunks/BxFShcQO.js.br +0 -0
  118. package/build/client/_app/immutable/chunks/BxFShcQO.js.gz +0 -0
  119. package/build/client/_app/immutable/chunks/ByzqAuXw.js +0 -3
  120. package/build/client/_app/immutable/chunks/ByzqAuXw.js.br +0 -0
  121. package/build/client/_app/immutable/chunks/ByzqAuXw.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/CjfxuHdN.js.br +0 -0
  123. package/build/client/_app/immutable/chunks/CjfxuHdN.js.gz +0 -0
  124. package/build/client/_app/immutable/chunks/Pw0jDB7M.js +0 -1
  125. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.br +0 -0
  126. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.gz +0 -0
  127. package/build/client/_app/immutable/entry/app.CNaTe-zm.js.br +0 -0
  128. package/build/client/_app/immutable/entry/app.CNaTe-zm.js.gz +0 -0
  129. package/build/client/_app/immutable/entry/start.hxYnjcDu.js +0 -1
  130. package/build/client/_app/immutable/entry/start.hxYnjcDu.js.br +0 -0
  131. package/build/client/_app/immutable/entry/start.hxYnjcDu.js.gz +0 -0
  132. package/build/client/_app/immutable/nodes/0.C3ELOf4c.js.br +0 -0
  133. package/build/client/_app/immutable/nodes/0.C3ELOf4c.js.gz +0 -0
  134. package/build/client/_app/immutable/nodes/1.Fqso94b3.js.br +0 -0
  135. package/build/client/_app/immutable/nodes/1.Fqso94b3.js.gz +0 -0
  136. package/build/client/_app/immutable/nodes/2.BusCVJWk.js.br +0 -0
  137. package/build/client/_app/immutable/nodes/2.BusCVJWk.js.gz +0 -0
  138. package/build/client/_app/immutable/nodes/3.DUlpocIc.js.br +0 -0
  139. package/build/client/_app/immutable/nodes/3.DUlpocIc.js.gz +0 -0
  140. package/build/client/_app/immutable/nodes/6.CG4eKRH0.js.br +0 -0
  141. package/build/client/_app/immutable/nodes/6.CG4eKRH0.js.gz +0 -0
  142. package/build/client/_app/immutable/nodes/7.DHilxD1o.js.br +0 -0
  143. package/build/client/_app/immutable/nodes/7.DHilxD1o.js.gz +0 -0
  144. package/build/client/_app/immutable/nodes/8.BjKgvSie.js.br +0 -0
  145. package/build/client/_app/immutable/nodes/8.BjKgvSie.js.gz +0 -0
  146. package/build/client/_app/immutable/nodes/9.BRT6HOXB.js.br +0 -0
  147. package/build/client/_app/immutable/nodes/9.BRT6HOXB.js.gz +0 -0
  148. package/build/server/chunks/_server.ts-B1z0q6qZ.js.map +0 -1
  149. package/build/server/chunks/_server.ts-Bt7EAfjo.js.map +0 -1
  150. package/build/server/chunks/_server.ts-CKXVBbwb.js.map +0 -1
  151. package/build/server/chunks/opencode-db-path-BwaPufWf.js +0 -411
  152. package/build/server/chunks/opencode-db-path-BwaPufWf.js.map +0 -1
  153. package/build/server/chunks/pty-manager-RmhVe2Ez.js.map +0 -1
  154. package/build/server/chunks/qwen-reader-2fTFuC_D.js +0 -622
  155. package/build/server/chunks/qwen-reader-2fTFuC_D.js.map +0 -1
  156. package/build/server/chunks/registry-DzJj2E6I.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts-Bt7EAfjo.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/sessions/detect/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../../chunks/auth.js\";\nimport { r as resolveOpenCodeDbPath, d as detectActiveCodexSessions } from \"../../../../../chunks/opencode-db-path.js\";\nimport { d as detectActiveGeminiSessions, a as detectActiveQwenSessions } from \"../../../../../chunks/qwen-reader.js\";\nimport Database from \"better-sqlite3\";\nimport { execSync } from \"child_process\";\nimport { readdirSync, readFileSync, existsSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { t as toErrorMessage } from \"../../../../../chunks/error.js\";\nimport { json } from \"@sveltejs/kit\";\nfunction cwdToProjectPath(cwd) {\n return cwd.replace(/\\//g, \"-\");\n}\nfunction isOpenCodeRunning() {\n try {\n execSync(\"pgrep -x opencode\", { stdio: \"ignore\" });\n return true;\n } catch {\n return false;\n }\n}\nfunction isProcessAlive(pid) {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\nconst CLAUDE_SESSIONS_DIR = join(homedir(), \".claude\", \"sessions\");\nconst OPENCODE_ACTIVE_THRESHOLD_MS = 3 * 6e4;\nconst CODEX_ACTIVE_THRESHOLD_MS = 3 * 6e4;\nconst GEMINI_ACTIVE_THRESHOLD_MS = 3 * 6e4;\nconst QWEN_ACTIVE_THRESHOLD_MS = 3 * 6e4;\nfunction detectRunningAISessions() {\n const results = [];\n try {\n const files = readdirSync(CLAUDE_SESSIONS_DIR).filter((f) => f.endsWith(\".json\"));\n for (const file of files) {\n try {\n const raw = readFileSync(join(CLAUDE_SESSIONS_DIR, file), \"utf-8\");\n const data = JSON.parse(raw);\n if (!data.pid || !data.sessionId || !data.cwd) {\n continue;\n }\n if (!isProcessAlive(data.pid)) {\n continue;\n }\n results.push({\n command: \"claude\",\n cwd: data.cwd,\n kind: data.kind || \"interactive\",\n pid: data.pid,\n projectPath: cwdToProjectPath(data.cwd),\n sessionId: data.sessionId,\n startedAt: data.startedAt || 0\n });\n } catch {\n }\n }\n } catch {\n }\n if (isOpenCodeRunning()) {\n try {\n const dbPath = resolveOpenCodeDbPath();\n if (existsSync(dbPath)) {\n const db = new Database(dbPath, { readonly: true });\n try {\n const cutoff = Date.now() - OPENCODE_ACTIVE_THRESHOLD_MS;\n const cutoffSec = Math.floor(cutoff / 1e3);\n const rows = db.prepare(\n `SELECT id, directory, time_created, time_updated\n FROM session\n WHERE (time_archived IS NULL OR time_archived = 0)\n AND (\n (time_updated >= 1e12 AND time_updated > ?)\n OR (time_updated < 1e12 AND time_updated > ?)\n )\n ORDER BY time_updated DESC\n LIMIT 20`\n ).all(cutoff, cutoffSec);\n for (const row of rows) {\n const startMs = row.time_created >= 1e12 ? row.time_created : row.time_created * 1e3;\n results.push({\n command: \"opencode\",\n cwd: row.directory || \"\",\n kind: \"interactive\",\n pid: 0,\n // OpenCode doesn't expose per-session PIDs\n projectPath: cwdToProjectPath(row.directory || \"\"),\n sessionId: row.id,\n startedAt: startMs\n });\n }\n } finally {\n db.close();\n }\n }\n } catch {\n }\n }\n try {\n for (const s of detectActiveCodexSessions(CODEX_ACTIVE_THRESHOLD_MS)) {\n results.push({\n command: \"codex\",\n cwd: s.cwd,\n kind: \"interactive\",\n pid: 0,\n // Codex doesn't expose a per-session PID\n projectPath: cwdToProjectPath(s.cwd),\n sessionId: s.id,\n startedAt: s.startedAt\n });\n }\n } catch {\n }\n try {\n for (const s of detectActiveGeminiSessions(GEMINI_ACTIVE_THRESHOLD_MS)) {\n results.push({\n command: \"gemini\",\n cwd: s.cwd,\n kind: \"interactive\",\n pid: 0,\n // Gemini doesn't expose a per-session PID\n projectPath: cwdToProjectPath(s.cwd),\n sessionId: s.id,\n startedAt: s.startedAt\n });\n }\n } catch {\n }\n try {\n for (const s of detectActiveQwenSessions(QWEN_ACTIVE_THRESHOLD_MS)) {\n results.push({\n command: \"qwen\",\n cwd: s.cwd,\n kind: \"interactive\",\n pid: 0,\n projectPath: cwdToProjectPath(s.cwd),\n sessionId: s.id,\n startedAt: s.startedAt\n });\n }\n } catch {\n }\n results.sort((a, b) => b.startedAt - a.startedAt);\n return results;\n}\nconst GET = ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n try {\n const processes = detectRunningAISessions();\n return json({\n count: processes.length,\n processes,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n console.error(\"[sessions/detect] Failed to detect running sessions:\", toErrorMessage(error));\n return json({ error: \"Failed to detect running sessions\" }, { status: 500 });\n }\n};\nexport {\n GET\n};\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts-CKXVBbwb.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/sessions/connect/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../../chunks/auth.js\";\nimport { P as PROVIDER_COMMANDS, r as resumeArgsForCommand } from \"../../../../../chunks/registry.js\";\nimport { p as ptyManager } from \"../../../../../chunks/pty-manager.js\";\nimport { t as toErrorMessage } from \"../../../../../chunks/error.js\";\nimport { json } from \"@sveltejs/kit\";\nimport { realpathSync, statSync } from \"fs\";\nimport { relative, isAbsolute } from \"path\";\nconst POST = async ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON in request body\" }, { status: 400 });\n }\n const { command, cwd, noCreate, sessionId } = body;\n if (!sessionId || typeof sessionId !== \"string\") {\n return json({ error: \"sessionId is required (string)\" }, { status: 400 });\n }\n if (!/^[A-Za-z0-9_-]+$/.test(sessionId)) {\n return json({ error: \"Invalid sessionId format\" }, { status: 400 });\n }\n if (!cwd || typeof cwd !== \"string\") {\n return json({ error: \"cwd is required (string)\" }, { status: 400 });\n }\n if (!command || !PROVIDER_COMMANDS.includes(command)) {\n return json(\n { error: `command must be one of: ${PROVIDER_COMMANDS.join(\", \")}` },\n { status: 400 }\n );\n }\n let realCwd;\n try {\n realCwd = realpathSync(cwd);\n if (!statSync(realCwd).isDirectory()) {\n return json({ error: \"Invalid working directory\" }, { status: 400 });\n }\n } catch {\n return json({ error: \"Invalid working directory\" }, { status: 400 });\n }\n const home = process.env.HOME || \"\";\n if (home) {\n const rel = relative(home, realCwd);\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n return json({ error: \"Working directory must be under home directory\" }, { status: 400 });\n }\n }\n const existing = ptyManager.list().find(\n (t) => t.status === \"running\" && // Claude: <id>.jsonl ; Codex rollout: rollout-<ts>-<id>.jsonl ; OpenCode: session id\n (t.sessionFile?.endsWith(`/${sessionId}.jsonl`) || t.sessionFile?.endsWith(`-${sessionId}.jsonl`) || t.openCodeSessionId === sessionId)\n );\n if (existing) {\n console.log(\n `[sessions/connect] Reusing terminal ${existing.id} for ${command} session ${sessionId}`\n );\n return json({\n command: existing.command,\n createdAt: existing.createdAt.toISOString(),\n cwd: existing.cwd,\n id: existing.id,\n pid: existing.pid,\n reused: true,\n sessionId,\n sessionWs: `/ws/session/${existing.id}`,\n terminalId: existing.id,\n ws: `/ws/terminal/${existing.id}`\n });\n }\n if (noCreate) {\n return json({ error: \"No existing terminal for this session\" }, { status: 404 });\n }\n const args = resumeArgsForCommand(command, sessionId);\n try {\n const terminal = await ptyManager.create(command, args, realCwd, 120, 40);\n console.log(\n `[sessions/connect] Created terminal ${terminal.id} for ${command} session ${sessionId} (pid=${terminal.pid})`\n );\n return json(\n {\n command: terminal.command,\n createdAt: terminal.createdAt instanceof Date ? terminal.createdAt.toISOString() : terminal.createdAt,\n cwd: terminal.cwd,\n id: terminal.id,\n pid: terminal.pid,\n sessionId,\n sessionWs: `/ws/session/${terminal.id}`,\n terminalId: terminal.id,\n ws: `/ws/terminal/${terminal.id}`\n },\n { status: 201 }\n );\n } catch (error) {\n console.error(\"[sessions/connect] Failed to create terminal:\", toErrorMessage(error));\n return json({ error: \"Failed to create terminal for session\" }, { status: 500 });\n }\n};\nexport {\n POST\n};\n"],"names":[],"mappings":"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"}
@@ -1,411 +0,0 @@
1
- import * as crypto from 'crypto';
2
- import * as fs from 'fs';
3
- import { existsSync } from 'fs';
4
- import { homedir } from 'os';
5
- import * as path from 'path';
6
-
7
- class TurnBuilder {
8
- current = null;
9
- messages = [];
10
- /** Messages flushed so far (excludes the still-open run). */
11
- completed() {
12
- return this.messages;
13
- }
14
- flush() {
15
- if (this.current && this.current.parts.length > 0) {
16
- this.messages.push({
17
- id: `codex-${this.messages.length}`,
18
- parts: this.current.parts,
19
- role: this.current.role,
20
- timestamp: this.current.timestamp
21
- });
22
- }
23
- this.current = null;
24
- }
25
- push(role, part, timestamp) {
26
- const category = role === "user" ? "user" : part.type === "tool_result" ? "system" : "assistant";
27
- const messageRole = category === "system" ? "system" : role;
28
- if (this.current?.category !== category) {
29
- this.flush();
30
- this.current = { category, parts: [], role: messageRole, timestamp };
31
- }
32
- this.current.parts.push(part);
33
- }
34
- result() {
35
- this.flush();
36
- return this.messages;
37
- }
38
- }
39
- function parseCodexMeta(line) {
40
- try {
41
- const entry = JSON.parse(line);
42
- if (!isRecord(entry) || entry.type !== "session_meta" || !isRecord(entry.payload)) {
43
- return null;
44
- }
45
- const p = entry.payload;
46
- if (!str(p, "id") || !str(p, "cwd")) {
47
- return null;
48
- }
49
- return {
50
- cliVersion: str(p, "cli_version"),
51
- cwd: str(p, "cwd"),
52
- id: str(p, "id"),
53
- model: str(p, "model") || str(p, "model_provider"),
54
- startedAt: str(p, "timestamp") || str(entry, "timestamp")
55
- };
56
- } catch {
57
- return null;
58
- }
59
- }
60
- function parseCodexRollout(text) {
61
- const builder = new TurnBuilder();
62
- let meta = null;
63
- for (const line of text.split("\n")) {
64
- const trimmed = line.trim();
65
- if (!trimmed) {
66
- continue;
67
- }
68
- let entry;
69
- try {
70
- entry = JSON.parse(trimmed);
71
- } catch {
72
- continue;
73
- }
74
- if (!isRecord(entry)) {
75
- continue;
76
- }
77
- const ts = str(entry, "timestamp");
78
- if (entry.type === "session_meta") {
79
- meta = parseCodexMeta(trimmed);
80
- continue;
81
- }
82
- if (entry.type !== "response_item" || !isRecord(entry.payload)) {
83
- continue;
84
- }
85
- const mapped = responseItemToPart(entry.payload);
86
- if (mapped) {
87
- builder.push(mapped.role, mapped.part, ts);
88
- }
89
- }
90
- return { messages: builder.result(), meta };
91
- }
92
- function isRecord(value) {
93
- return typeof value === "object" && value !== null && !Array.isArray(value);
94
- }
95
- function joinMessageText(content) {
96
- if (!Array.isArray(content)) {
97
- return typeof content === "string" ? content : "";
98
- }
99
- return content.filter((c) => isRecord(c)).filter((c) => c.type === "input_text" || c.type === "output_text" || c.type === "text").map((c) => str(c, "text")).join("\n").trim();
100
- }
101
- function parseToolInput(raw) {
102
- if (isRecord(raw)) {
103
- return raw;
104
- }
105
- if (typeof raw === "string") {
106
- try {
107
- const parsed = JSON.parse(raw);
108
- return isRecord(parsed) ? parsed : { raw };
109
- } catch {
110
- return { raw };
111
- }
112
- }
113
- return {};
114
- }
115
- function reasoningText(payload) {
116
- const summary = payload.summary;
117
- if (Array.isArray(summary) && summary.length > 0) {
118
- const text = summary.map((s) => typeof s === "string" ? s : isRecord(s) ? str(s, "text") : "").join("\n").trim();
119
- if (text) {
120
- return text;
121
- }
122
- }
123
- return typeof payload.content === "string" ? payload.content.trim() : "";
124
- }
125
- function responseItemToPart(p) {
126
- switch (p.type) {
127
- case "custom_tool_call":
128
- case "function_call": {
129
- const args = p.type === "function_call" ? p.arguments : p.input;
130
- return {
131
- part: {
132
- id: str(p, "call_id"),
133
- input: parseToolInput(args),
134
- toolName: str(p, "name") || "tool",
135
- type: "tool_use"
136
- },
137
- role: "assistant"
138
- };
139
- }
140
- case "custom_tool_call_output":
141
- case "function_call_output":
142
- case "tool_search_output": {
143
- const output = typeof p.output === "string" ? p.output : JSON.stringify(p.output ?? "");
144
- return {
145
- part: {
146
- isError: /exit code:\s*[1-9]/i.test(output),
147
- output: output.slice(0, 2e3),
148
- toolUseId: str(p, "call_id"),
149
- type: "tool_result"
150
- },
151
- role: "assistant"
152
- };
153
- }
154
- case "message": {
155
- if (p.role === "developer") {
156
- return null;
157
- }
158
- const content = joinMessageText(p.content);
159
- return content ? { part: { content, type: "text" }, role: p.role === "user" ? "user" : "assistant" } : null;
160
- }
161
- case "reasoning": {
162
- const think = reasoningText(p);
163
- return think ? { part: { content: think, type: "thinking" }, role: "assistant" } : null;
164
- }
165
- case "tool_search_call":
166
- case "web_search_call":
167
- return {
168
- part: {
169
- id: str(p, "call_id"),
170
- input: parseToolInput(p.action ?? p.query),
171
- toolName: str(p, "type"),
172
- type: "tool_use"
173
- },
174
- role: "assistant"
175
- };
176
- default:
177
- return null;
178
- }
179
- }
180
- function str(obj, key) {
181
- const v = obj[key];
182
- return typeof v === "string" ? v : "";
183
- }
184
- const LIST_PREFIX_BYTES = 256 * 1024;
185
- const MAX_FULL_READ_BYTES = 16 * 1024 * 1024;
186
- const APPROX_BYTES_PER_MESSAGE = 3e3;
187
- const SYNTHETIC_PROMPT_PREFIXES = ["<environment_context>", "<user_instructions>", "<permissions"];
188
- function detectActiveCodexSessions(thresholdMs) {
189
- const cutoff = Date.now() - thresholdMs;
190
- const out = [];
191
- for (const filePath of collectRolloutFiles()) {
192
- try {
193
- const stat = fs.statSync(filePath);
194
- if (stat.mtimeMs < cutoff) {
195
- continue;
196
- }
197
- const meta = parseCodexMeta(readPrefix(filePath).split("\n")[0] ?? "");
198
- if (meta) {
199
- out.push({ cwd: meta.cwd, id: meta.id, startedAt: stat.birthtimeMs });
200
- }
201
- } catch {
202
- }
203
- }
204
- return out;
205
- }
206
- function findCodexRolloutById(sessionId) {
207
- if (!/^[0-9a-f-]+$/i.test(sessionId)) {
208
- return null;
209
- }
210
- const suffix = `-${sessionId}.jsonl`;
211
- return collectRolloutFiles().find((p) => path.basename(p).endsWith(suffix)) ?? null;
212
- }
213
- function findCodexRolloutForCwd(cwd, sinceMs) {
214
- let best = null;
215
- for (const filePath of collectRolloutFiles()) {
216
- try {
217
- const stat = fs.statSync(filePath);
218
- if (stat.birthtimeMs <= sinceMs) {
219
- continue;
220
- }
221
- const meta = parseCodexMeta(readPrefix(filePath).split("\n")[0] ?? "");
222
- if (meta?.cwd === cwd && (!best || stat.birthtimeMs > best.birthtime)) {
223
- best = { birthtime: stat.birthtimeMs, path: filePath };
224
- }
225
- } catch {
226
- }
227
- }
228
- return best?.path ?? null;
229
- }
230
- function getCodexConversation(sessionId, offset = 0, limit = 200) {
231
- const filePath = findCodexRolloutById(sessionId);
232
- if (!filePath || !fs.existsSync(filePath)) {
233
- return [];
234
- }
235
- try {
236
- const { messages } = parseCodexRollout(readBoundedRolloutText(filePath));
237
- if (offset === 0 && messages.length > limit) {
238
- let startIdx = messages.length - limit;
239
- while (startIdx > 0 && messages[startIdx].role !== "user") {
240
- startIdx--;
241
- }
242
- return messages.slice(startIdx);
243
- }
244
- return messages.slice(offset, offset + limit);
245
- } catch (error) {
246
- console.error("[codex] Failed to read conversation:", error);
247
- return [];
248
- }
249
- }
250
- function listCodexProjects() {
251
- const files = collectRolloutFiles();
252
- const byCwd = /* @__PURE__ */ new Map();
253
- for (const filePath of files) {
254
- let stat;
255
- try {
256
- stat = fs.statSync(filePath);
257
- } catch {
258
- continue;
259
- }
260
- let prefix;
261
- try {
262
- prefix = readPrefix(filePath);
263
- } catch {
264
- continue;
265
- }
266
- const nlIdx = prefix.indexOf("\n");
267
- const firstLine = nlIdx === -1 ? prefix : prefix.slice(0, nlIdx);
268
- const meta = parseCodexMeta(firstLine);
269
- if (!meta) {
270
- continue;
271
- }
272
- const session = {
273
- created: meta.startedAt || stat.birthtime.toISOString(),
274
- gitBranch: "",
275
- id: meta.id,
276
- messageCount: Math.max(1, Math.round(stat.size / APPROX_BYTES_PER_MESSAGE)),
277
- modified: stat.mtime.toISOString(),
278
- projectPath: meta.cwd,
279
- source: "codex",
280
- summary: "",
281
- title: cleanTitle(firstUserPrompt(prefix))
282
- };
283
- const bucket = byCwd.get(meta.cwd);
284
- if (bucket) {
285
- bucket.push(session);
286
- } else {
287
- byCwd.set(meta.cwd, [session]);
288
- }
289
- }
290
- const projects = [];
291
- for (const [cwd, sessions] of byCwd) {
292
- sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());
293
- const segments = cwd.split("/").filter(Boolean);
294
- projects.push({
295
- fullPath: cwd,
296
- id: shortHash(cwd),
297
- lastModified: sessions[0]?.modified ?? "",
298
- name: segments.slice(-2).join("/"),
299
- sessionCount: sessions.length,
300
- sessions
301
- });
302
- }
303
- return projects.sort(
304
- (a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime()
305
- );
306
- }
307
- function readBoundedRolloutText(filePath) {
308
- const stat = fs.statSync(filePath);
309
- if (stat.size <= MAX_FULL_READ_BYTES) {
310
- return fs.readFileSync(filePath, "utf-8");
311
- }
312
- const head = readPrefix(filePath).split("\n")[0] ?? "";
313
- const fd = fs.openSync(filePath, "r");
314
- try {
315
- const start = stat.size - MAX_FULL_READ_BYTES;
316
- const buf = Buffer.alloc(MAX_FULL_READ_BYTES);
317
- const bytesRead = fs.readSync(fd, buf, 0, MAX_FULL_READ_BYTES, start);
318
- const tail = buf.toString("utf-8", 0, bytesRead);
319
- return `${head}
320
- ${tail.slice(tail.indexOf("\n") + 1)}`;
321
- } finally {
322
- fs.closeSync(fd);
323
- }
324
- }
325
- function cleanTitle(prompt) {
326
- const firstLine = prompt.replace(/\s+/g, " ").trim().split("\n")[0]?.trim() ?? "";
327
- if (!firstLine) {
328
- return "Untitled Session";
329
- }
330
- return firstLine.length > 80 ? `${firstLine.slice(0, 77)}...` : firstLine;
331
- }
332
- function codexSessionsDirs() {
333
- const home = homedir();
334
- return [path.join(home, ".codex", "sessions"), path.join(home, ".codex", "archived_sessions")];
335
- }
336
- function collectRolloutFiles() {
337
- const out = [];
338
- const walk = (dir) => {
339
- let entries;
340
- try {
341
- entries = fs.readdirSync(dir, { withFileTypes: true });
342
- } catch {
343
- return;
344
- }
345
- for (const entry of entries) {
346
- const full = path.join(dir, entry.name);
347
- if (entry.isDirectory()) {
348
- walk(full);
349
- } else if (entry.name.startsWith("rollout-") && entry.name.endsWith(".jsonl")) {
350
- out.push(full);
351
- }
352
- }
353
- };
354
- for (const root of codexSessionsDirs()) {
355
- walk(root);
356
- }
357
- return out;
358
- }
359
- function firstUserPrompt(prefixText) {
360
- for (const line of prefixText.split("\n")) {
361
- const trimmed = line.trim();
362
- if (!trimmed || !trimmed.includes('"type":"message"') || !trimmed.includes('"role":"user"')) {
363
- continue;
364
- }
365
- try {
366
- const entry = JSON.parse(trimmed);
367
- const text = (entry.payload?.content ?? []).filter((c) => c.type === "input_text" && typeof c.text === "string").map((c) => c.text ?? "").join("\n").trim();
368
- if (text && !SYNTHETIC_PROMPT_PREFIXES.some((p) => text.startsWith(p))) {
369
- return text;
370
- }
371
- } catch {
372
- continue;
373
- }
374
- }
375
- return "";
376
- }
377
- function readPrefix(filePath) {
378
- const fd = fs.openSync(filePath, "r");
379
- try {
380
- const buf = Buffer.alloc(LIST_PREFIX_BYTES);
381
- const bytesRead = fs.readSync(fd, buf, 0, LIST_PREFIX_BYTES, 0);
382
- const text = buf.toString("utf-8", 0, bytesRead);
383
- const lastNl = text.lastIndexOf("\n");
384
- return lastNl === -1 ? text : text.slice(0, lastNl);
385
- } finally {
386
- fs.closeSync(fd);
387
- }
388
- }
389
- function shortHash(input) {
390
- return crypto.createHash("sha256").update(input).digest("hex").slice(0, 8);
391
- }
392
- function resolveOpenCodeDbPath() {
393
- const home = process.env.HOME || "";
394
- const candidates = [];
395
- if (process.env.XDG_DATA_HOME) {
396
- candidates.push(path.join(process.env.XDG_DATA_HOME, "opencode", "opencode.db"));
397
- }
398
- candidates.push(path.join(home, ".local", "share", "opencode", "opencode.db"));
399
- if (process.platform === "darwin") {
400
- candidates.push(path.join(home, "Library", "Application Support", "opencode", "opencode.db"));
401
- }
402
- for (const candidate of candidates) {
403
- if (existsSync(candidate)) {
404
- return candidate;
405
- }
406
- }
407
- return candidates[0] ?? path.join(home, ".local", "share", "opencode", "opencode.db");
408
- }
409
-
410
- export { detectActiveCodexSessions as d, findCodexRolloutForCwd as f, getCodexConversation as g, listCodexProjects as l, resolveOpenCodeDbPath as r };
411
- //# sourceMappingURL=opencode-db-path-BwaPufWf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode-db-path-BwaPufWf.js","sources":["../../../.svelte-kit/adapter-node/chunks/opencode-db-path.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(entry) || entry.type !== \"session_meta\" || !isRecord(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(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(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(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(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(raw)) {\n return raw;\n }\n if (typeof raw === \"string\") {\n try {\n const parsed = JSON.parse(raw);\n return isRecord(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(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 = 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(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(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(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(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(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) {\n return fs.readFileSync(filePath, \"utf-8\");\n }\n const head = readPrefix(filePath).split(\"\\n\")[0] ?? \"\";\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 bytesRead = fs.readSync(fd, buf, 0, MAX_FULL_READ_BYTES, 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(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(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(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}\nexport {\n detectActiveCodexSessions as d,\n findCodexRolloutForCwd as f,\n getCodexConversation as g,\n listCodexProjects as l,\n resolveOpenCodeDbPath as r\n};\n"],"names":[],"mappings":"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"}