spiracha 1.3.3 → 1.5.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 (242) hide show
  1. package/AGENTS.md +55 -6
  2. package/README.md +46 -5
  3. package/apps/ui/AGENTS.md +31 -4
  4. package/apps/ui/README.md +59 -5
  5. package/apps/ui/dist/client/assets/analytics-DOy1b6Sh.js +1 -0
  6. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DqySVO2K.js +7 -0
  7. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-KAcXtNxI.js +1 -0
  8. package/apps/ui/dist/client/assets/antigravity-keychain-panel-B77qJz6f.js +1 -0
  9. package/apps/ui/dist/client/assets/antigravity._workspaceKey-B3NM6gRH.js +1 -0
  10. package/apps/ui/dist/client/assets/antigravity._workspaceKey-ByitGWki.js +1 -0
  11. package/apps/ui/dist/client/assets/antigravity.index-DP9JC2P9.js +1 -0
  12. package/apps/ui/dist/client/assets/antigravity.index-DgW25FEV.js +1 -0
  13. package/apps/ui/dist/client/assets/badge-C3i4OKs8.js +1 -0
  14. package/apps/ui/dist/client/assets/checkbox-CdHitXWQ.js +1 -0
  15. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-8pQ55ci2.js +1 -0
  16. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-DVz5UmtU.js +1 -0
  17. package/apps/ui/dist/client/assets/claude-code._workspaceKey-BBKskSum.js +1 -0
  18. package/apps/ui/dist/client/assets/claude-code._workspaceKey-OkikMUFs.js +1 -0
  19. package/apps/ui/dist/client/assets/claude-code.index-Cwu76dbb.js +1 -0
  20. package/apps/ui/dist/client/assets/claude-code.index-D6eMd08t.js +1 -0
  21. package/apps/ui/dist/client/assets/createServerFn-B-KkwmHU.js +3 -0
  22. package/apps/ui/dist/client/assets/cursor-threads._composerId-CmBFclK8.js +1 -0
  23. package/apps/ui/dist/client/assets/cursor-threads._composerId-hBWlP1D-.js +1 -0
  24. package/apps/ui/dist/client/assets/cursor._workspaceKey-BFPkIRi-.js +1 -0
  25. package/apps/ui/dist/client/assets/cursor._workspaceKey-CaAZjGmm.js +1 -0
  26. package/apps/ui/dist/client/assets/cursor.index-8y4o20kb.js +2 -0
  27. package/apps/ui/dist/client/assets/cursor.index-CrnMwDCi.js +1 -0
  28. package/apps/ui/dist/client/assets/{data-table-DeQq8xdt.js → data-table-Br78_dk3.js} +2 -2
  29. package/apps/ui/dist/client/assets/delete-confirm-dialog-Bxs07u-j.js +7 -0
  30. package/apps/ui/dist/client/assets/dist-B9pyYCVU.js +1 -0
  31. package/apps/ui/dist/client/assets/dist-BrJhN2A0.js +5 -0
  32. package/apps/ui/dist/client/assets/dist-Cmd3AIfD.js +1 -0
  33. package/apps/ui/dist/client/assets/dist-DvMS2965.js +1 -0
  34. package/apps/ui/dist/client/assets/download-Bf0QJKD3.js +1 -0
  35. package/apps/ui/dist/client/assets/dropdown-menu-D5cvPaZt.js +1 -0
  36. package/apps/ui/dist/client/assets/es2015-ad6040dw.js +41 -0
  37. package/apps/ui/dist/client/assets/export-dialog-Dr8d2MqD.js +1 -0
  38. package/apps/ui/dist/client/assets/formatters-BtqyrX_c.js +1 -0
  39. package/apps/ui/dist/client/assets/index-C-STgIH4.js +166 -0
  40. package/apps/ui/dist/client/assets/jsx-runtime-DGeXAQPT.js +1 -0
  41. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-CKgfJ7GR.js +1 -0
  42. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-zvIJHtQF.js +1 -0
  43. package/apps/ui/dist/client/assets/kiro._workspaceKey-DhVuJuZB.js +1 -0
  44. package/apps/ui/dist/client/assets/kiro._workspaceKey-QArsjkTY.js +1 -0
  45. package/apps/ui/dist/client/assets/kiro.index-C-fr4m7i.js +1 -0
  46. package/apps/ui/dist/client/assets/kiro.index-OYgAdtZd.js +1 -0
  47. package/apps/ui/dist/client/assets/metric-card-Dplm0ZiM.js +1 -0
  48. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-DLjiTst-.js +1 -0
  49. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-biBwrRbt.js +8 -0
  50. package/apps/ui/dist/client/assets/opencode._workspaceKey-C7OIzMOJ.js +1 -0
  51. package/apps/ui/dist/client/assets/opencode._workspaceKey-sBakX0oI.js +1 -0
  52. package/apps/ui/dist/client/assets/opencode.index-Bl_kNs9N.js +1 -0
  53. package/apps/ui/dist/client/assets/opencode.index-CN53bVmb.js +1 -0
  54. package/apps/ui/dist/client/assets/page-header-Cwa3p6Tl.js +1 -0
  55. package/apps/ui/dist/client/assets/preload-helper-B8fFrdxC.js +1 -0
  56. package/apps/ui/dist/client/assets/projects._project-D8WloxQN.js +1 -0
  57. package/apps/ui/dist/client/assets/projects._project-DSDwH4NF.js +1 -0
  58. package/apps/ui/dist/client/assets/projects.index-5xRtuJdX.js +3 -0
  59. package/apps/ui/dist/client/assets/projects.index-DEfhWqa8.js +1 -0
  60. package/apps/ui/dist/client/assets/react-dom-DL96Jor4.js +1 -0
  61. package/apps/ui/dist/client/assets/refresh-ccw-BgKjOiA6.js +1 -0
  62. package/apps/ui/dist/client/assets/reload-error-panel-AHqu0akK.js +1 -0
  63. package/apps/ui/dist/client/assets/routes-DnzF_9CX.js +1 -0
  64. package/apps/ui/dist/client/assets/scroll-text-fM0sMOB3.js +1 -0
  65. package/apps/ui/dist/client/assets/select-CYF6pF37.js +1 -0
  66. package/apps/ui/dist/client/assets/settings-Dx70jgP_.js +1 -0
  67. package/apps/ui/dist/client/assets/sqlite-error-B6uZjUe8.js +1 -0
  68. package/apps/ui/dist/client/assets/styles-B7Zi9EFA.css +1 -0
  69. package/apps/ui/dist/client/assets/tabs-CmuhkT-c.js +7 -0
  70. package/apps/ui/dist/client/assets/text-filter-DVAZySUS.js +2 -0
  71. package/apps/ui/dist/client/assets/thread-transcript-stats-BUNz6u7F.js +1 -0
  72. package/apps/ui/dist/client/assets/threads._threadId-BB9tTsV4.js +1 -0
  73. package/apps/ui/dist/client/assets/threads._threadId-BMRSFow3.js +1 -0
  74. package/apps/ui/dist/client/assets/useMutation-BSFult2i.js +1 -0
  75. package/apps/ui/dist/client/assets/useQuery-CjINKZf1.js +1 -0
  76. package/apps/ui/dist/client/icon.svg +2 -1
  77. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CQ8Jjs3B.js +387 -0
  78. package/apps/ui/dist/server/assets/analytics-CYP_LT5Y.js +16 -0
  79. package/apps/ui/dist/server/assets/{analytics-Dc_QDZZC.js → analytics-CtpOMVMO.js} +13 -6
  80. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BKOyL2T6.js +613 -0
  81. package/apps/ui/dist/server/assets/{antigravity-conversations._conversationId-C9z4AeN-.js → antigravity-conversations._conversationId-eS87Dx7g.js} +2 -2
  82. package/apps/ui/dist/server/assets/{antigravity-db-D9gW1D8G.js → antigravity-db-Bh8_U9uw.js} +11 -7
  83. package/apps/ui/dist/server/assets/{antigravity-keychain-panel-bpPoxhyp.js → antigravity-keychain-panel-CC7FLmAK.js} +1 -1
  84. package/apps/ui/dist/server/assets/{antigravity-queries-DVIKyOXi.js → antigravity-queries-CGrJO9Vr.js} +5 -5
  85. package/apps/ui/dist/server/assets/{antigravity-server-Cp1lc8fp.js → antigravity-server-CHRjVFqN.js} +11 -11
  86. package/apps/ui/dist/server/assets/{antigravity._workspaceKey-Dl8o1ptg.js → antigravity._workspaceKey-B0QeYUOh.js} +2 -2
  87. package/apps/ui/dist/server/assets/{antigravity._workspaceKey-BAoa4izU.js → antigravity._workspaceKey-C3kP-qyN.js} +4 -4
  88. package/apps/ui/dist/server/assets/{antigravity.index-BOlrJasZ.js → antigravity.index-CPCYkqCi.js} +2 -2
  89. package/apps/ui/dist/server/assets/claude-code-db-Ik3VStKZ.js +361 -0
  90. package/apps/ui/dist/server/assets/claude-code-queries-Cgzi4K-e.js +37 -0
  91. package/apps/ui/dist/server/assets/claude-code-server-PfraClXS.js +72 -0
  92. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-C55oe6zj.js +18 -0
  93. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-D1RYYi3j.js +473 -0
  94. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-DSvPLEUL.js +11 -0
  95. package/apps/ui/dist/server/assets/claude-code-transcript-C-bxh3cS.js +139 -0
  96. package/apps/ui/dist/server/assets/claude-code-transcript-phase-DmUMc8VU.js +10 -0
  97. package/apps/ui/dist/server/assets/claude-code._workspaceKey-B5Xg_-tE.js +28 -0
  98. package/apps/ui/dist/server/assets/claude-code._workspaceKey-BPlzyXPa.js +11 -0
  99. package/apps/ui/dist/server/assets/claude-code._workspaceKey-DqDve2wl.js +191 -0
  100. package/apps/ui/dist/server/assets/claude-code.index-B7yYR7dD.js +92 -0
  101. package/apps/ui/dist/server/assets/claude-code.index-BUHThG1W.js +11 -0
  102. package/apps/ui/dist/server/assets/{codex-queries-ev_mRUzr.js → codex-queries-CtgeZ7VL.js} +15 -13
  103. package/apps/ui/dist/server/assets/{codex-server-DIYFLozB.js → codex-server-CGXU4H8-.js} +421 -146
  104. package/apps/ui/dist/server/assets/concurrency-VXtYvlGh.js +18 -0
  105. package/apps/ui/dist/server/assets/{createServerRpc-Cg-Zr1rq.js → createServerRpc-CF_DEwnm.js} +1 -1
  106. package/apps/ui/dist/server/assets/{createSsrRpc-DVnVQhGx.js → createSsrRpc-C754NPki.js} +1 -1
  107. package/apps/ui/dist/server/assets/{cursor-db-B7agkAvM.js → cursor-db-CZnYy7aT.js} +196 -9
  108. package/apps/ui/dist/server/assets/{cursor-queries-f7DjBKSD.js → cursor-queries-NCIM0Nat.js} +12 -10
  109. package/apps/ui/dist/server/assets/{cursor-recovery-9bJLs7vG.js → cursor-recovery-CXpO8KcD.js} +2 -2
  110. package/apps/ui/dist/server/assets/{cursor-server-nPzojHN3.js → cursor-server-DNu52A3K.js} +71 -42
  111. package/apps/ui/dist/server/assets/cursor-threads._composerId-Ckn6ItHI.js +582 -0
  112. package/apps/ui/dist/server/assets/{cursor-threads._composerId-B3qcsh9C.js → cursor-threads._composerId-p9-ARAzc.js} +2 -2
  113. package/apps/ui/dist/server/assets/{cursor-transcript-2iL3KFSK.js → cursor-transcript-B7tGnqtn.js} +1 -1
  114. package/apps/ui/dist/server/assets/{cursor._workspaceKey-BL_CQyHQ.js → cursor._workspaceKey-CZuohIUL.js} +2 -2
  115. package/apps/ui/dist/server/assets/{cursor._workspaceKey-BhQeepXB.js → cursor._workspaceKey-DPp5JSjy.js} +11 -9
  116. package/apps/ui/dist/server/assets/{cursor.index-CsrdckZD.js → cursor.index-DkWT-mxw.js} +2 -2
  117. package/apps/ui/dist/server/assets/{delete-confirm-dialog-PCD7S0_M.js → delete-confirm-dialog-BcBNCxWB.js} +5 -1
  118. package/apps/ui/dist/server/assets/{empty-plugin-adapters-D3qLMPfC.js → empty-plugin-adapters-B3lHh1La.js} +1 -1
  119. package/apps/ui/dist/server/assets/{export-dialog-DaPlOGFT.js → export-dialog-D88ze9Gy.js} +54 -12
  120. package/apps/ui/dist/server/assets/kiro-db--fXrED_-.js +552 -0
  121. package/apps/ui/dist/server/assets/kiro-queries-CzNlM2ok.js +37 -0
  122. package/apps/ui/dist/server/assets/kiro-server-9WRxg2Au.js +72 -0
  123. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-CRY2c7YO.js +11 -0
  124. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-F1UlwxmR.js +449 -0
  125. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-bvTulT7C.js +18 -0
  126. package/apps/ui/dist/server/assets/kiro-transcript-DoekQBaH.js +112 -0
  127. package/apps/ui/dist/server/assets/kiro-transcript-phase-CJG40nQg.js +27 -0
  128. package/apps/ui/dist/server/assets/kiro._workspaceKey-BDe9sQwo.js +11 -0
  129. package/apps/ui/dist/server/assets/kiro._workspaceKey-CJsjgNwO.js +28 -0
  130. package/apps/ui/dist/server/assets/kiro._workspaceKey-D_-4Qb7y.js +193 -0
  131. package/apps/ui/dist/server/assets/kiro.index-C__-UROk.js +11 -0
  132. package/apps/ui/dist/server/assets/kiro.index-CmTbqeYj.js +93 -0
  133. package/apps/ui/dist/server/assets/opencode-db-BM7KjOzc.js +397 -0
  134. package/apps/ui/dist/server/assets/opencode-queries-BeNYXnQv.js +50 -0
  135. package/apps/ui/dist/server/assets/opencode-server-BpQ_kRze.js +72 -0
  136. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-CGQ-t0vD.js +518 -0
  137. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-D8Q7in_Z.js +18 -0
  138. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-DKOvi0lV.js +11 -0
  139. package/apps/ui/dist/server/assets/opencode-think-tags-CAoD-EcZ.js +87 -0
  140. package/apps/ui/dist/server/assets/opencode-transcript-BNTcGNym.js +141 -0
  141. package/apps/ui/dist/server/assets/opencode-transcript-phase-OqLkiQD0.js +32 -0
  142. package/apps/ui/dist/server/assets/opencode._workspaceKey-BdqcWHw1.js +11 -0
  143. package/apps/ui/dist/server/assets/opencode._workspaceKey-CfH96HTT.js +28 -0
  144. package/apps/ui/dist/server/assets/opencode._workspaceKey-DdbHPDrO.js +207 -0
  145. package/apps/ui/dist/server/assets/opencode.index-BbVzkJXP.js +11 -0
  146. package/apps/ui/dist/server/assets/opencode.index-Vh_Gq_1L.js +93 -0
  147. package/apps/ui/dist/server/assets/{projects._project-CqqUFr4l.js → projects._project-4io5LO0E.js} +5 -3
  148. package/apps/ui/dist/server/assets/{projects._project-DahGqNYS.js → projects._project-D6ZoGhJ8.js} +42 -12
  149. package/apps/ui/dist/server/assets/{projects.index-CkTeFWNU.js → projects.index-BkLiF2FF.js} +21 -7
  150. package/apps/ui/dist/server/assets/projects.index-DesYXwfi.js +14 -0
  151. package/apps/ui/dist/server/assets/route-search-ts4W9MJ9.js +38 -0
  152. package/apps/ui/dist/server/assets/router-Sac2DGk6.js +518 -0
  153. package/apps/ui/dist/server/assets/{routes-Xix3ZeSo.js → routes-Bsact1uB.js} +2 -2
  154. package/apps/ui/dist/server/assets/{routes-0x1U0IHq.js → routes-BzkJgq4W.js} +2 -2
  155. package/apps/ui/dist/server/assets/{shared-CPRNYIql.js → shared-DyhChtHf.js} +4 -1
  156. package/apps/ui/dist/server/assets/source-session-export-server-DNutCawb.js +38 -0
  157. package/apps/ui/dist/server/assets/start-B_HFwkkk.js +4 -0
  158. package/apps/ui/dist/server/assets/tabs-DkaChNVg.js +501 -0
  159. package/apps/ui/dist/server/assets/thread-transcript-stats-Dh34mt2u.js +45 -0
  160. package/apps/ui/dist/server/assets/threads._threadId-BeXEc4Lo.js +648 -0
  161. package/apps/ui/dist/server/assets/{threads._threadId-BLCkGW--.js → threads._threadId-Ci0S4mKU.js} +2 -2
  162. package/apps/ui/dist/server/assets/ui-export-files-BHLX9bhN.js +83 -0
  163. package/apps/ui/dist/server/server.js +141 -83
  164. package/package.json +28 -11
  165. package/src/lib/antigravity-db.ts +20 -13
  166. package/src/lib/claude-code-db.ts +655 -0
  167. package/src/lib/claude-code-exporter-types.ts +110 -0
  168. package/src/lib/claude-code-transcript-phase.ts +25 -0
  169. package/src/lib/claude-code-transcript.ts +180 -0
  170. package/src/lib/codex-analytics.ts +118 -18
  171. package/src/lib/codex-browser-db.ts +491 -56
  172. package/src/lib/codex-browser-export.ts +27 -71
  173. package/src/lib/codex-thread-cache.ts +17 -1
  174. package/src/lib/concurrency.ts +25 -0
  175. package/src/lib/cursor-db.ts +318 -7
  176. package/src/lib/cursor-exporter.ts +2 -2
  177. package/src/lib/kiro-db.ts +949 -0
  178. package/src/lib/kiro-exporter-types.ts +100 -0
  179. package/src/lib/kiro-transcript-phase.ts +41 -0
  180. package/src/lib/kiro-transcript.ts +115 -0
  181. package/src/lib/opencode-db.ts +610 -0
  182. package/src/lib/opencode-exporter-types.ts +129 -0
  183. package/src/lib/opencode-think-tags.ts +126 -0
  184. package/src/lib/opencode-transcript-phase.ts +50 -0
  185. package/src/lib/opencode-transcript.ts +194 -0
  186. package/src/lib/shared.ts +25 -0
  187. package/src/lib/ui-cache.ts +14 -1
  188. package/src/lib/ui-export-archive.ts +61 -0
  189. package/apps/ui/dist/client/assets/analytics-C83LcWNb.js +0 -1
  190. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DkY8EEpK.js +0 -1
  191. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-OraHuz8j.js +0 -1
  192. package/apps/ui/dist/client/assets/antigravity-keychain-panel-DnDcq1ge.js +0 -1
  193. package/apps/ui/dist/client/assets/antigravity._workspaceKey-CQaZscA5.js +0 -1
  194. package/apps/ui/dist/client/assets/antigravity._workspaceKey-DTs99obU.js +0 -1
  195. package/apps/ui/dist/client/assets/antigravity.index-DbJa715k.js +0 -1
  196. package/apps/ui/dist/client/assets/antigravity.index-P-rs6w5X.js +0 -1
  197. package/apps/ui/dist/client/assets/badge-wgTVp-aq.js +0 -1
  198. package/apps/ui/dist/client/assets/checkbox-BUx0Gkuf.js +0 -1
  199. package/apps/ui/dist/client/assets/cursor-threads._composerId-D0DFXt8t.js +0 -1
  200. package/apps/ui/dist/client/assets/cursor-threads._composerId-tFa6Cf6A.js +0 -1
  201. package/apps/ui/dist/client/assets/cursor._workspaceKey-Df4PfA2k.js +0 -1
  202. package/apps/ui/dist/client/assets/cursor._workspaceKey-DwrzEtnV.js +0 -1
  203. package/apps/ui/dist/client/assets/cursor.index-CNBf4ZiR.js +0 -1
  204. package/apps/ui/dist/client/assets/cursor.index-DP9Hy8X6.js +0 -2
  205. package/apps/ui/dist/client/assets/delete-confirm-dialog-CPlNsLhM.js +0 -11
  206. package/apps/ui/dist/client/assets/dist-Ds3kS91l.js +0 -1
  207. package/apps/ui/dist/client/assets/download-DLuPnxpV.js +0 -1
  208. package/apps/ui/dist/client/assets/dropdown-menu-lFk6zjoL.js +0 -1
  209. package/apps/ui/dist/client/assets/es2015-D-H_iZF6.js +0 -41
  210. package/apps/ui/dist/client/assets/export-dialog-CyqyvwiP.js +0 -1
  211. package/apps/ui/dist/client/assets/formatters-DbCKP02D.js +0 -1
  212. package/apps/ui/dist/client/assets/index-C-ZPpKJ0.js +0 -22
  213. package/apps/ui/dist/client/assets/json-panel-BsngvucB.js +0 -1
  214. package/apps/ui/dist/client/assets/metadata-section-Dtl8dNag.js +0 -1
  215. package/apps/ui/dist/client/assets/metric-card-DNzR1Rne.js +0 -1
  216. package/apps/ui/dist/client/assets/page-header-dha_O7ZL.js +0 -1
  217. package/apps/ui/dist/client/assets/projects._project-B7HBhbXv.js +0 -1
  218. package/apps/ui/dist/client/assets/projects._project-DHVvuT7A.js +0 -1
  219. package/apps/ui/dist/client/assets/projects.index-BUUtx2AZ.js +0 -1
  220. package/apps/ui/dist/client/assets/projects.index-BojAe1Y4.js +0 -3
  221. package/apps/ui/dist/client/assets/refresh-ccw-B-ASKHtx.js +0 -1
  222. package/apps/ui/dist/client/assets/reload-error-panel-DD8M1BIY.js +0 -1
  223. package/apps/ui/dist/client/assets/routes-q7bzFp35.js +0 -1
  224. package/apps/ui/dist/client/assets/scroll-text-TvHyiJ_N.js +0 -1
  225. package/apps/ui/dist/client/assets/select-BFv1HMiT.js +0 -1
  226. package/apps/ui/dist/client/assets/settings-CvegTo4F.js +0 -1
  227. package/apps/ui/dist/client/assets/styles-Ch0r3kMZ.css +0 -1
  228. package/apps/ui/dist/client/assets/text-document-panel-D7Rws41o.js +0 -1
  229. package/apps/ui/dist/client/assets/text-filter-2q5pEoZh.js +0 -2
  230. package/apps/ui/dist/client/assets/threads._threadId-LpZVUlPq.js +0 -7
  231. package/apps/ui/dist/client/assets/threads._threadId-MSmNIBkq.js +0 -1
  232. package/apps/ui/dist/client/assets/useMutation-BOPJU9e0.js +0 -1
  233. package/apps/ui/dist/client/assets/useQuery-CbxZiVGF.js +0 -1
  234. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-zvGzK-Yx.js +0 -229
  235. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-JEhx-f2R.js +0 -212
  236. package/apps/ui/dist/server/assets/cursor-threads._composerId-BK3iW-3e.js +0 -218
  237. package/apps/ui/dist/server/assets/json-panel-RYsxWFae.js +0 -16
  238. package/apps/ui/dist/server/assets/metadata-section-D6Lbc7D6.js +0 -54
  239. package/apps/ui/dist/server/assets/router-K0m7dK4T.js +0 -394
  240. package/apps/ui/dist/server/assets/start-bX7bXjzw.js +0 -4
  241. package/apps/ui/dist/server/assets/text-document-panel-D8JbQWAn.js +0 -23
  242. package/apps/ui/dist/server/assets/threads._threadId-LjgsGUh-.js +0 -1052
@@ -0,0 +1,648 @@
1
+ import { t as Button } from "./button-CmTDnzOn.js";
2
+ import { n as useSettings } from "./settings-store-DpEJEQ7M.js";
3
+ import { a as threadSnapshotQueryOptions, c as deleteThreadFn, o as threadTranscriptQueryOptions, u as exportThreadFn } from "./codex-queries-CtgeZ7VL.js";
4
+ import { t as Route } from "./threads._threadId-Ci0S4mKU.js";
5
+ import { t as Checkbox } from "./checkbox-C0hovF41.js";
6
+ import { t as MetricCard } from "./metric-card-ByEeLu0r.js";
7
+ import { t as PageHeader } from "./page-header-VNSaM3xd.js";
8
+ import { i as formatList, n as formatBytes, r as formatDateTime, s as formatTokens, t as formatBooleanLabel } from "./formatters-FJaGZgJk.js";
9
+ import { a as TranscriptView, c as Breadcrumbs, i as TabsTrigger, n as TabsContent, o as MetadataSection, r as TabsList, s as JsonPanel, t as Tabs } from "./tabs-DkaChNVg.js";
10
+ import { t as Badge } from "./badge-EvdhKK_Z.js";
11
+ import { n as downloadUrlFile, t as downloadTextFile } from "./download-DMmiy1xf.js";
12
+ import { t as ExportDialog } from "./export-dialog-D88ze9Gy.js";
13
+ import { t as DeleteConfirmDialog } from "./delete-confirm-dialog-BcBNCxWB.js";
14
+ import { useState } from "react";
15
+ import { Link, useNavigate } from "@tanstack/react-router";
16
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
17
+ import { useMutation, useQuery, useQueryClient, useSuspenseQuery } from "@tanstack/react-query";
18
+ import { Download, Trash2 } from "lucide-react";
19
+ //#region src/routes/threads.$threadId.tsx?tsr-split=component
20
+ var buildThreadItems = (snapshot) => {
21
+ return [
22
+ {
23
+ label: "Thread ID",
24
+ value: /* @__PURE__ */ jsx("span", {
25
+ "data-mono": "true",
26
+ children: snapshot.thread.id
27
+ })
28
+ },
29
+ {
30
+ label: "Project",
31
+ value: snapshot.project
32
+ },
33
+ {
34
+ label: "CWD",
35
+ value: /* @__PURE__ */ jsx("span", {
36
+ "data-mono": "true",
37
+ children: snapshot.thread.cwd
38
+ })
39
+ },
40
+ {
41
+ label: "Created",
42
+ value: /* @__PURE__ */ jsx("span", {
43
+ suppressHydrationWarning: true,
44
+ children: formatDateTime(snapshot.thread.created_at_ms ?? snapshot.thread.created_at * 1e3)
45
+ })
46
+ },
47
+ {
48
+ label: "Updated",
49
+ value: /* @__PURE__ */ jsx("span", {
50
+ suppressHydrationWarning: true,
51
+ children: formatDateTime(snapshot.thread.updated_at_ms ?? snapshot.thread.updated_at * 1e3)
52
+ })
53
+ },
54
+ {
55
+ label: "Session started",
56
+ value: /* @__PURE__ */ jsx("span", {
57
+ suppressHydrationWarning: true,
58
+ children: formatDateTime(snapshot.transcript?.sessionMeta.timestamp ?? null)
59
+ })
60
+ },
61
+ {
62
+ label: "Rollout size",
63
+ value: formatBytes(snapshot.rollout.fileSizeBytes)
64
+ },
65
+ {
66
+ label: "Archived",
67
+ value: formatBooleanLabel(Boolean(snapshot.thread.archived))
68
+ },
69
+ {
70
+ label: "Archived at",
71
+ value: /* @__PURE__ */ jsx("span", {
72
+ suppressHydrationWarning: true,
73
+ children: formatDateTime(snapshot.thread.archived_at ? snapshot.thread.archived_at * 1e3 : null)
74
+ })
75
+ }
76
+ ];
77
+ };
78
+ var buildRuntimeItems = (snapshot) => {
79
+ return [
80
+ {
81
+ label: "Source",
82
+ value: snapshot.thread.source
83
+ },
84
+ {
85
+ label: "Originator",
86
+ value: snapshot.transcript?.sessionMeta.originator ?? "n/a"
87
+ },
88
+ {
89
+ label: "Model provider",
90
+ value: snapshot.thread.model_provider
91
+ },
92
+ {
93
+ label: "Reasoning effort",
94
+ value: snapshot.thread.reasoning_effort ?? "n/a"
95
+ },
96
+ {
97
+ label: "CLI version",
98
+ value: snapshot.thread.cli_version
99
+ },
100
+ {
101
+ label: "Approval mode",
102
+ value: snapshot.thread.approval_mode
103
+ },
104
+ {
105
+ label: "Memory mode",
106
+ value: snapshot.thread.memory_mode
107
+ },
108
+ {
109
+ label: "Has user event",
110
+ value: formatBooleanLabel(Boolean(snapshot.thread.has_user_event))
111
+ }
112
+ ];
113
+ };
114
+ var buildGitItems = (snapshot) => {
115
+ return [
116
+ {
117
+ label: "Git branch",
118
+ value: snapshot.thread.git_branch ?? "n/a"
119
+ },
120
+ {
121
+ label: "Git SHA",
122
+ value: snapshot.thread.git_sha ?? "n/a"
123
+ },
124
+ {
125
+ label: "Git remote",
126
+ value: snapshot.thread.git_origin_url ?? "n/a"
127
+ },
128
+ {
129
+ label: "Agent nickname",
130
+ value: snapshot.thread.agent_nickname ?? "n/a"
131
+ },
132
+ {
133
+ label: "Agent role",
134
+ value: snapshot.thread.agent_role ?? "n/a"
135
+ },
136
+ {
137
+ label: "Agent path",
138
+ value: snapshot.thread.agent_path ?? "n/a"
139
+ }
140
+ ];
141
+ };
142
+ var buildRelationItems = (snapshot) => {
143
+ const parentThreadValue = snapshot.relations.parentThreadId ? /* @__PURE__ */ jsx(Link, {
144
+ className: "text-[var(--accent)]",
145
+ params: { threadId: snapshot.relations.parentThreadId },
146
+ to: "/threads/$threadId",
147
+ children: snapshot.relations.parentThreadId
148
+ }) : "n/a";
149
+ const childThreadValue = snapshot.relations.childEdges.length > 0 ? /* @__PURE__ */ jsx("div", {
150
+ className: "flex flex-wrap gap-2",
151
+ children: snapshot.relations.childEdges.map((edge) => /* @__PURE__ */ jsx(Link, {
152
+ className: "rounded-full border border-[var(--border)] px-3 py-1 text-[var(--accent)] text-xs",
153
+ params: { threadId: edge.child_thread_id },
154
+ to: "/threads/$threadId",
155
+ children: edge.child_thread_id
156
+ }, edge.child_thread_id))
157
+ }) : "n/a";
158
+ return [
159
+ {
160
+ label: "Parent thread",
161
+ value: parentThreadValue
162
+ },
163
+ {
164
+ label: "Child threads",
165
+ value: childThreadValue
166
+ },
167
+ {
168
+ label: "First user message",
169
+ value: snapshot.thread.first_user_message || "n/a"
170
+ },
171
+ {
172
+ label: "Preview",
173
+ value: snapshot.thread.preview || "n/a"
174
+ }
175
+ ];
176
+ };
177
+ var buildTranscriptStatsItems = (snapshot) => {
178
+ if (!snapshot.transcript) {
179
+ if (snapshot.transcriptState === "missing") return [
180
+ {
181
+ label: "Transcript load",
182
+ value: "Transcript file missing from disk"
183
+ },
184
+ {
185
+ label: "Rollout path",
186
+ value: snapshot.thread.rollout_path
187
+ },
188
+ {
189
+ label: "Preview mode",
190
+ value: "Export and transcript browsing are unavailable until the file exists again."
191
+ }
192
+ ];
193
+ return [
194
+ {
195
+ label: "Transcript load",
196
+ value: "Deferred for oversized rollout"
197
+ },
198
+ {
199
+ label: "Rollout size",
200
+ value: formatBytes(snapshot.rollout.fileSizeBytes)
201
+ },
202
+ {
203
+ label: "Preview mode",
204
+ value: "Load the transcript manually to inspect it."
205
+ }
206
+ ];
207
+ }
208
+ return [
209
+ {
210
+ label: "Event kinds",
211
+ value: formatList([...new Set(snapshot.transcript.events.map((event) => event.kind))])
212
+ },
213
+ {
214
+ label: "Stats scope",
215
+ value: snapshot.transcript.statsArePartial ? "Preview only" : "Full transcript"
216
+ },
217
+ {
218
+ label: "Tool calls",
219
+ value: String(snapshot.transcript.stats.toolCallCount)
220
+ },
221
+ {
222
+ label: "Exec calls",
223
+ value: String(snapshot.transcript.stats.execCommandCount)
224
+ },
225
+ {
226
+ label: "Web search events",
227
+ value: String(snapshot.transcript.stats.webSearchEventCount)
228
+ },
229
+ {
230
+ label: "Assistant messages",
231
+ value: String(snapshot.transcript.stats.assistantMessageCount)
232
+ },
233
+ {
234
+ label: "Commentary updates",
235
+ value: String(snapshot.transcript.stats.commentaryCount)
236
+ }
237
+ ];
238
+ };
239
+ function TranscriptControls({ rawJsonDisabled = false, showCommentary, showExtraEvents, showRawJson, showToolCalls, showUserMessages, onShowCommentaryChange, onShowExtraEventsChange, onShowRawJsonChange, onShowToolCallsChange, onShowUserMessagesChange }) {
240
+ return /* @__PURE__ */ jsxs("div", {
241
+ className: "flex flex-wrap gap-4 rounded-xl border border-[var(--border)] bg-[var(--panel)] px-4 py-3 shadow-[var(--panel-shadow)]",
242
+ children: [
243
+ /* @__PURE__ */ jsxs("div", {
244
+ className: "flex items-center gap-2 text-sm",
245
+ children: [/* @__PURE__ */ jsx(Checkbox, {
246
+ checked: showToolCalls,
247
+ id: "transcript-show-tool-calls",
248
+ onCheckedChange: (checked) => onShowToolCallsChange(checked === true)
249
+ }), /* @__PURE__ */ jsx("label", {
250
+ htmlFor: "transcript-show-tool-calls",
251
+ children: "Show tool calls"
252
+ })]
253
+ }),
254
+ /* @__PURE__ */ jsxs("div", {
255
+ className: "flex items-center gap-2 text-sm",
256
+ children: [/* @__PURE__ */ jsx(Checkbox, {
257
+ checked: showCommentary,
258
+ id: "transcript-show-commentary",
259
+ onCheckedChange: (checked) => onShowCommentaryChange(checked === true)
260
+ }), /* @__PURE__ */ jsx("label", {
261
+ htmlFor: "transcript-show-commentary",
262
+ children: "Show commentary"
263
+ })]
264
+ }),
265
+ /* @__PURE__ */ jsxs("div", {
266
+ className: "flex items-center gap-2 text-sm",
267
+ children: [/* @__PURE__ */ jsx(Checkbox, {
268
+ checked: showExtraEvents,
269
+ id: "transcript-show-extra-events",
270
+ onCheckedChange: (checked) => onShowExtraEventsChange(checked === true)
271
+ }), /* @__PURE__ */ jsx("label", {
272
+ htmlFor: "transcript-show-extra-events",
273
+ children: "Show extra events"
274
+ })]
275
+ }),
276
+ /* @__PURE__ */ jsxs("div", {
277
+ className: "flex items-center gap-2 text-sm",
278
+ children: [/* @__PURE__ */ jsx(Checkbox, {
279
+ checked: showRawJson,
280
+ disabled: rawJsonDisabled,
281
+ id: "transcript-show-raw-json",
282
+ onCheckedChange: (checked) => onShowRawJsonChange(checked === true)
283
+ }), /* @__PURE__ */ jsx("label", {
284
+ htmlFor: "transcript-show-raw-json",
285
+ children: "Raw JSON"
286
+ })]
287
+ }),
288
+ /* @__PURE__ */ jsxs("div", {
289
+ className: "flex items-center gap-2 text-sm",
290
+ children: [/* @__PURE__ */ jsx(Checkbox, {
291
+ checked: showUserMessages,
292
+ id: "transcript-show-user-messages",
293
+ onCheckedChange: (checked) => onShowUserMessagesChange(checked === true)
294
+ }), /* @__PURE__ */ jsx("label", {
295
+ htmlFor: "transcript-show-user-messages",
296
+ children: "User"
297
+ })]
298
+ })
299
+ ]
300
+ });
301
+ }
302
+ function ThreadMetadataPanels({ snapshot }) {
303
+ return /* @__PURE__ */ jsxs("div", {
304
+ className: "grid gap-4 xl:grid-cols-[1.1fr_0.9fr]",
305
+ children: [/* @__PURE__ */ jsxs("div", {
306
+ className: "space-y-4",
307
+ children: [
308
+ /* @__PURE__ */ jsx(MetadataSection, {
309
+ items: buildThreadItems(snapshot),
310
+ title: "Thread"
311
+ }),
312
+ /* @__PURE__ */ jsx(MetadataSection, {
313
+ items: buildRuntimeItems(snapshot),
314
+ title: "Runtime"
315
+ }),
316
+ /* @__PURE__ */ jsx(MetadataSection, {
317
+ items: buildGitItems(snapshot),
318
+ title: "Git and agent"
319
+ })
320
+ ]
321
+ }), /* @__PURE__ */ jsxs("div", {
322
+ className: "space-y-4",
323
+ children: [
324
+ /* @__PURE__ */ jsx(MetadataSection, {
325
+ items: buildRelationItems(snapshot),
326
+ title: "Relations and summary"
327
+ }),
328
+ /* @__PURE__ */ jsxs("section", {
329
+ className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
330
+ children: [/* @__PURE__ */ jsx("h3", {
331
+ className: "font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]",
332
+ children: "Available tools"
333
+ }), /* @__PURE__ */ jsx("div", {
334
+ className: "mt-4 space-y-3",
335
+ children: snapshot.availableTools.map((tool) => /* @__PURE__ */ jsxs("div", {
336
+ className: "rounded-xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3.5",
337
+ children: [/* @__PURE__ */ jsxs("div", {
338
+ className: "flex flex-wrap items-center gap-2",
339
+ children: [/* @__PURE__ */ jsx("p", {
340
+ className: "font-medium font-mono text-sm",
341
+ children: tool.name
342
+ }), tool.namespace ? /* @__PURE__ */ jsx(Badge, {
343
+ variant: "outline",
344
+ children: tool.namespace
345
+ }) : null]
346
+ }), /* @__PURE__ */ jsx("p", {
347
+ className: "mt-1.5 text-[var(--muted-foreground)] text-sm",
348
+ children: tool.description || "No description."
349
+ })]
350
+ }, `${tool.name}-${tool.namespace ?? "global"}`))
351
+ })]
352
+ }),
353
+ /* @__PURE__ */ jsx(MetadataSection, {
354
+ items: buildTranscriptStatsItems(snapshot),
355
+ title: "Transcript stats"
356
+ })
357
+ ]
358
+ })]
359
+ });
360
+ }
361
+ function ThreadRawPanels({ snapshot }) {
362
+ if (!snapshot.transcript) return /* @__PURE__ */ jsx("div", {
363
+ className: "rounded-xl border border-[var(--border)] bg-[var(--panel)] px-5 py-4 text-sm",
364
+ children: snapshot.transcriptState === "missing" ? "The rollout JSONL file is missing from disk, so raw transcript payloads are unavailable." : "Raw transcript payloads are deferred for oversized rollouts. Use Export if you only need the full thread contents, or load the transcript manually from the Transcript tab."
365
+ });
366
+ return /* @__PURE__ */ jsxs("div", {
367
+ className: "space-y-4",
368
+ children: [
369
+ /* @__PURE__ */ jsx(JsonPanel, {
370
+ title: "Session meta",
371
+ value: snapshot.transcript.sessionMeta
372
+ }),
373
+ /* @__PURE__ */ jsx(JsonPanel, {
374
+ title: "Turn contexts",
375
+ value: snapshot.transcript.turnContexts
376
+ }),
377
+ /* @__PURE__ */ jsx(JsonPanel, {
378
+ title: "Sandbox policy",
379
+ value: snapshot.thread.sandbox_policy
380
+ })
381
+ ]
382
+ });
383
+ }
384
+ function DeferredTranscriptNotice({ fileSizeBytes, missing, pending, onLoad }) {
385
+ return /* @__PURE__ */ jsxs("section", {
386
+ className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
387
+ children: [
388
+ /* @__PURE__ */ jsx("h3", {
389
+ className: "font-semibold text-base",
390
+ children: missing ? "Transcript file missing" : "This is a very big thread"
391
+ }),
392
+ /* @__PURE__ */ jsx("p", {
393
+ className: "mt-2 text-[var(--muted-foreground)] text-sm leading-6",
394
+ children: missing ? "The rollout JSONL referenced by this thread is no longer present on disk. Export may still work if the file is restored, but transcript browsing is unavailable right now." : `Spiracha skipped loading the transcript automatically because the rollout file is ${formatBytes(fileSizeBytes)}. Export still works immediately. If you need to inspect the thread here, load a bounded preview manually.`
395
+ }),
396
+ missing ? null : /* @__PURE__ */ jsx("div", {
397
+ className: "mt-4",
398
+ children: /* @__PURE__ */ jsx(Button, {
399
+ disabled: pending,
400
+ variant: "outline",
401
+ onClick: onLoad,
402
+ children: pending ? "Loading preview..." : "Load transcript preview"
403
+ })
404
+ })
405
+ ]
406
+ });
407
+ }
408
+ var getThreadExportErrorMessage = (transcriptMissing, error) => {
409
+ if (transcriptMissing) return "The rollout JSONL file is missing from disk, so this thread cannot be exported right now.";
410
+ return error instanceof Error ? error.message : null;
411
+ };
412
+ function ThreadDetailPage() {
413
+ const navigate = useNavigate();
414
+ const queryClient = useQueryClient();
415
+ const params = Route.useParams();
416
+ const snapshot = useSuspenseQuery(threadSnapshotQueryOptions(params.threadId)).data;
417
+ const { settings } = useSettings();
418
+ const transcriptMissing = snapshot.transcriptState === "missing";
419
+ const [shouldLoadTranscript, setShouldLoadTranscript] = useState(!snapshot.rollout.shouldDeferTranscriptLoad && !transcriptMissing);
420
+ const [showToolCalls, setShowToolCalls] = useState(false);
421
+ const [showCommentary, setShowCommentary] = useState(false);
422
+ const [showExtraEvents, setShowExtraEvents] = useState(false);
423
+ const [showRawJson, setShowRawJson] = useState(false);
424
+ const [showUserMessages, setShowUserMessages] = useState(true);
425
+ const [exportOpen, setExportOpen] = useState(false);
426
+ const [deleteOpen, setDeleteOpen] = useState(false);
427
+ const transcriptQuery = useQuery({
428
+ ...threadTranscriptQueryOptions(params.threadId),
429
+ enabled: shouldLoadTranscript && snapshot.transcript === null && !transcriptMissing
430
+ });
431
+ const transcript = snapshot.transcript ?? transcriptQuery.data ?? null;
432
+ const viewSnapshot = {
433
+ ...snapshot,
434
+ transcript
435
+ };
436
+ const exportThreadMutation = useMutation({
437
+ mutationFn: async (options) => {
438
+ console.info("[spiracha:export-ui] request", {
439
+ outputFormat: options.outputFormat,
440
+ project: snapshot.project,
441
+ selectedThreadCount: 1,
442
+ selectedThreadIds: [snapshot.thread.id],
443
+ zipArchive: options.zipArchive
444
+ });
445
+ const download = await exportThreadFn({ data: {
446
+ ...options,
447
+ ...settings,
448
+ threadId: snapshot.thread.id
449
+ } });
450
+ console.info("[spiracha:export-ui] response", {
451
+ downloadUrl: download.mode === "download_url" ? download.downloadUrl : null,
452
+ fileName: download.fileName,
453
+ mode: download.mode,
454
+ project: snapshot.project,
455
+ selectedThreadCount: 1
456
+ });
457
+ if (download.mode === "download") {
458
+ downloadTextFile(download.fileName, download.content, download.mimeType);
459
+ return;
460
+ }
461
+ await downloadUrlFile(download.fileName, download.downloadUrl);
462
+ },
463
+ onError: (error) => {
464
+ console.error("[spiracha:export-ui] failed", {
465
+ error: error instanceof Error ? error.message : String(error),
466
+ project: snapshot.project,
467
+ selectedThreadCount: 1,
468
+ selectedThreadIds: [snapshot.thread.id]
469
+ });
470
+ },
471
+ onSuccess: async () => {
472
+ setExportOpen(false);
473
+ }
474
+ });
475
+ const deleteThreadMutation = useMutation({
476
+ mutationFn: (input) => deleteThreadFn({ data: {
477
+ deleteSessionFiles: input.deleteSessionFiles,
478
+ threadId: snapshot.thread.id
479
+ } }),
480
+ onSuccess: async () => {
481
+ await Promise.all([
482
+ queryClient.invalidateQueries({ queryKey: ["analytics"] }),
483
+ queryClient.invalidateQueries({ queryKey: ["dashboard"] }),
484
+ queryClient.invalidateQueries({ queryKey: ["project-threads", snapshot.project] }),
485
+ queryClient.invalidateQueries({ queryKey: ["projects"] })
486
+ ]);
487
+ navigate({
488
+ params: { project: snapshot.project },
489
+ to: "/projects/$project"
490
+ });
491
+ }
492
+ });
493
+ return /* @__PURE__ */ jsxs("div", {
494
+ className: "space-y-5",
495
+ children: [
496
+ /* @__PURE__ */ jsx(PageHeader, {
497
+ actions: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Button, {
498
+ className: "rounded-full",
499
+ variant: "outline",
500
+ onClick: () => setExportOpen(true),
501
+ children: [/* @__PURE__ */ jsx(Download, { className: "mr-2 size-4" }), "Export"]
502
+ }), /* @__PURE__ */ jsxs(Button, {
503
+ className: "rounded-full border-[var(--destructive)]/20 text-[var(--destructive)]",
504
+ variant: "outline",
505
+ onClick: () => setDeleteOpen(true),
506
+ children: [/* @__PURE__ */ jsx(Trash2, { className: "mr-2 size-4" }), "Delete"]
507
+ })] }),
508
+ breadcrumb: /* @__PURE__ */ jsx(Breadcrumbs, { items: [
509
+ {
510
+ label: "Codex",
511
+ to: "/projects"
512
+ },
513
+ {
514
+ label: snapshot.project,
515
+ params: { project: snapshot.project },
516
+ to: "/projects/$project"
517
+ },
518
+ { label: snapshot.thread.title }
519
+ ] }),
520
+ eyebrow: snapshot.project,
521
+ subtitle: snapshot.thread.preview,
522
+ title: snapshot.thread.title
523
+ }),
524
+ /* @__PURE__ */ jsxs("div", {
525
+ className: "grid gap-3 md:grid-cols-2 xl:grid-cols-4",
526
+ children: [
527
+ /* @__PURE__ */ jsx(MetricCard, {
528
+ label: "Model",
529
+ value: snapshot.thread.model ?? "unknown"
530
+ }),
531
+ /* @__PURE__ */ jsx(MetricCard, {
532
+ label: "Tokens",
533
+ value: formatTokens(snapshot.thread.tokens_used)
534
+ }),
535
+ /* @__PURE__ */ jsx(MetricCard, {
536
+ label: "Updated",
537
+ value: /* @__PURE__ */ jsx("span", {
538
+ suppressHydrationWarning: true,
539
+ children: formatDateTime(snapshot.thread.updated_at_ms ?? snapshot.thread.updated_at * 1e3)
540
+ })
541
+ }),
542
+ /* @__PURE__ */ jsx(MetricCard, {
543
+ label: "Thread source",
544
+ value: snapshot.thread.thread_source ?? transcript?.sessionMeta.threadSource ?? "n/a"
545
+ })
546
+ ]
547
+ }),
548
+ /* @__PURE__ */ jsxs(Tabs, {
549
+ className: "space-y-4",
550
+ defaultValue: "transcript",
551
+ children: [
552
+ /* @__PURE__ */ jsxs(TabsList, {
553
+ className: "grid w-fit min-w-[24rem] grid-cols-3 rounded-full border border-[var(--border)] bg-[var(--panel)] p-1",
554
+ children: [
555
+ /* @__PURE__ */ jsx(TabsTrigger, {
556
+ className: "rounded-full px-5 text-sm",
557
+ value: "transcript",
558
+ children: "Transcript"
559
+ }),
560
+ /* @__PURE__ */ jsx(TabsTrigger, {
561
+ className: "rounded-full px-5 text-sm",
562
+ value: "metadata",
563
+ children: "Metadata"
564
+ }),
565
+ /* @__PURE__ */ jsx(TabsTrigger, {
566
+ className: "rounded-full px-5 text-sm",
567
+ value: "raw",
568
+ children: "Raw"
569
+ })
570
+ ]
571
+ }),
572
+ /* @__PURE__ */ jsxs(TabsContent, {
573
+ className: "space-y-3",
574
+ value: "transcript",
575
+ children: [
576
+ /* @__PURE__ */ jsx(TranscriptControls, {
577
+ rawJsonDisabled: !transcript?.rawIncluded,
578
+ showCommentary,
579
+ showExtraEvents,
580
+ showRawJson,
581
+ showToolCalls,
582
+ showUserMessages,
583
+ onShowCommentaryChange: setShowCommentary,
584
+ onShowExtraEventsChange: setShowExtraEvents,
585
+ onShowRawJsonChange: setShowRawJson,
586
+ onShowToolCallsChange: setShowToolCalls,
587
+ onShowUserMessagesChange: setShowUserMessages
588
+ }),
589
+ transcript ? /* @__PURE__ */ jsx(TranscriptView, {
590
+ assistantModel: snapshot.thread.model,
591
+ events: transcript.events,
592
+ projectPath: snapshot.thread.cwd,
593
+ showCommentary,
594
+ showExtraEvents,
595
+ showRawJson: showRawJson && transcript.rawIncluded,
596
+ showToolCalls,
597
+ showUserMessages
598
+ }) : /* @__PURE__ */ jsx(DeferredTranscriptNotice, {
599
+ fileSizeBytes: snapshot.rollout.fileSizeBytes,
600
+ missing: snapshot.transcriptState === "missing",
601
+ pending: transcriptQuery.isFetching,
602
+ onLoad: () => setShouldLoadTranscript(true)
603
+ }),
604
+ transcriptQuery.isError ? /* @__PURE__ */ jsxs("p", {
605
+ className: "text-[var(--destructive)] text-sm",
606
+ children: [
607
+ "Failed to load transcript preview:",
608
+ " ",
609
+ transcriptQuery.error instanceof Error ? transcriptQuery.error.message : "Unknown error"
610
+ ]
611
+ }) : null
612
+ ]
613
+ }),
614
+ /* @__PURE__ */ jsx(TabsContent, {
615
+ value: "metadata",
616
+ children: /* @__PURE__ */ jsx(ThreadMetadataPanels, { snapshot: viewSnapshot })
617
+ }),
618
+ /* @__PURE__ */ jsx(TabsContent, {
619
+ value: "raw",
620
+ children: /* @__PURE__ */ jsx(ThreadRawPanels, { snapshot: viewSnapshot })
621
+ })
622
+ ]
623
+ }),
624
+ /* @__PURE__ */ jsx(DeleteConfirmDialog, {
625
+ confirmLabel: deleteThreadMutation.isPending ? "Deleting..." : "Delete thread",
626
+ defaultDeleteSessionFiles: true,
627
+ description: "Delete this thread from the Codex database. Enable Delete Session files if you also want to remove the rollout JSONL from disk.",
628
+ open: deleteOpen,
629
+ showDeleteSessionFilesOption: true,
630
+ title: "Delete this thread from Codex DB?",
631
+ onConfirm: ({ deleteSessionFiles }) => deleteThreadMutation.mutate({ deleteSessionFiles }),
632
+ onOpenChange: setDeleteOpen
633
+ }),
634
+ /* @__PURE__ */ jsx(ExportDialog, {
635
+ disabled: transcriptMissing,
636
+ errorMessage: getThreadExportErrorMessage(transcriptMissing, exportThreadMutation.error),
637
+ open: exportOpen,
638
+ pending: exportThreadMutation.isPending,
639
+ onExport: (options) => {
640
+ if (!transcriptMissing) exportThreadMutation.mutate(options);
641
+ },
642
+ onOpenChange: setExportOpen
643
+ })
644
+ ]
645
+ });
646
+ }
647
+ //#endregion
648
+ export { ThreadDetailPage as component };
@@ -1,10 +1,10 @@
1
- import { a as threadSnapshotQueryOptions } from "./codex-queries-ev_mRUzr.js";
1
+ import { a as threadSnapshotQueryOptions } from "./codex-queries-CtgeZ7VL.js";
2
2
  import { t as LoadingPanel } from "./loading-panel-BGFnWseS.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/routes/threads.$threadId.tsx
6
6
  var $$splitErrorComponentImporter = () => import("./threads._threadId-BSSK4nkI.js");
7
- var $$splitComponentImporter = () => import("./threads._threadId-LjgsGUh-.js");
7
+ var $$splitComponentImporter = () => import("./threads._threadId-BeXEc4Lo.js");
8
8
  var Route = createFileRoute("/threads/$threadId")({
9
9
  component: lazyRouteComponent($$splitComponentImporter, "component"),
10
10
  errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),