spiracha 1.5.0 → 2.1.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 (401) hide show
  1. package/AGENTS.md +114 -205
  2. package/README.md +94 -269
  3. package/apps/ui/AGENTS.md +17 -7
  4. package/apps/ui/README.md +52 -8
  5. package/apps/ui/components.json +21 -0
  6. package/apps/ui/package.json +65 -0
  7. package/apps/ui/src/components/antigravity-conversations-table.tsx +245 -0
  8. package/apps/ui/src/components/antigravity-keychain-panel.tsx +76 -0
  9. package/apps/ui/src/components/antigravity-workspaces-table.tsx +63 -0
  10. package/apps/ui/src/components/app-shell.tsx +125 -0
  11. package/apps/ui/src/components/breadcrumbs.tsx +71 -0
  12. package/apps/ui/src/components/claude-code-sessions-table.tsx +150 -0
  13. package/apps/ui/src/components/claude-code-workspaces-table.tsx +57 -0
  14. package/apps/ui/src/components/cursor-threads-table.tsx +152 -0
  15. package/apps/ui/src/components/cursor-workspaces-table.tsx +140 -0
  16. package/apps/ui/src/components/data-table.tsx +243 -0
  17. package/apps/ui/src/components/delete-confirm-dialog.tsx +88 -0
  18. package/apps/ui/src/components/export-dialog.tsx +174 -0
  19. package/apps/ui/src/components/grok-sessions-table.tsx +146 -0
  20. package/apps/ui/src/components/grok-workspaces-table.tsx +53 -0
  21. package/apps/ui/src/components/json-panel.tsx +17 -0
  22. package/apps/ui/src/components/kiro-sessions-table.tsx +148 -0
  23. package/apps/ui/src/components/kiro-workspaces-table.tsx +53 -0
  24. package/apps/ui/src/components/list-search-input.tsx +18 -0
  25. package/apps/ui/src/components/loading-panel.tsx +23 -0
  26. package/apps/ui/src/components/metadata-section.tsx +31 -0
  27. package/apps/ui/src/components/metric-card.tsx +19 -0
  28. package/apps/ui/src/components/opencode-sessions-table.tsx +164 -0
  29. package/apps/ui/src/components/opencode-workspaces-table.tsx +57 -0
  30. package/apps/ui/src/components/page-header.tsx +39 -0
  31. package/apps/ui/src/components/projects-loading-state.tsx +74 -0
  32. package/apps/ui/src/components/projects-table.tsx +108 -0
  33. package/apps/ui/src/components/qoder-sessions-table.tsx +133 -0
  34. package/apps/ui/src/components/qoder-workspaces-table.tsx +57 -0
  35. package/apps/ui/src/components/recent-threads-list.tsx +52 -0
  36. package/apps/ui/src/components/reload-error-panel.tsx +20 -0
  37. package/apps/ui/src/components/selection-actions-toolbar.tsx +80 -0
  38. package/apps/ui/src/components/text-document-panel.tsx +19 -0
  39. package/apps/ui/src/components/theme-toggle.tsx +48 -0
  40. package/apps/ui/src/components/threads-table.tsx +165 -0
  41. package/apps/ui/src/components/transcript-view.tsx +648 -0
  42. package/apps/ui/src/components/ui/alert-dialog.tsx +160 -0
  43. package/apps/ui/src/components/ui/badge.tsx +45 -0
  44. package/apps/ui/src/components/ui/button.tsx +62 -0
  45. package/apps/ui/src/components/ui/checkbox.tsx +29 -0
  46. package/apps/ui/src/components/ui/dialog.tsx +137 -0
  47. package/apps/ui/src/components/ui/dropdown-menu.tsx +217 -0
  48. package/apps/ui/src/components/ui/input.tsx +21 -0
  49. package/apps/ui/src/components/ui/scroll-area.tsx +46 -0
  50. package/apps/ui/src/components/ui/select.tsx +163 -0
  51. package/apps/ui/src/components/ui/separator.tsx +28 -0
  52. package/apps/ui/src/components/ui/sheet.tsx +107 -0
  53. package/apps/ui/src/components/ui/skeleton.tsx +7 -0
  54. package/apps/ui/src/components/ui/table.tsx +76 -0
  55. package/apps/ui/src/components/ui/tabs.tsx +71 -0
  56. package/apps/ui/src/components/ui/tooltip.tsx +44 -0
  57. package/apps/ui/src/integrations/tanstack-query/devtools.tsx +6 -0
  58. package/apps/ui/src/integrations/tanstack-query/root-provider.tsx +10 -0
  59. package/apps/ui/src/lib/antigravity-conversation-state.ts +41 -0
  60. package/apps/ui/src/lib/antigravity-queries.ts +33 -0
  61. package/apps/ui/src/lib/antigravity-server.ts +273 -0
  62. package/apps/ui/src/lib/antigravity-transcript-events.ts +343 -0
  63. package/apps/ui/src/lib/claude-code-queries.ts +34 -0
  64. package/apps/ui/src/lib/claude-code-server.ts +243 -0
  65. package/apps/ui/src/lib/claude-code-transcript-events.ts +161 -0
  66. package/apps/ui/src/lib/codex-queries.ts +82 -0
  67. package/apps/ui/src/lib/codex-server.ts +291 -0
  68. package/apps/ui/src/lib/cursor-queries.ts +37 -0
  69. package/apps/ui/src/lib/cursor-server.ts +315 -0
  70. package/apps/ui/src/lib/cursor-transcript-events.ts +229 -0
  71. package/apps/ui/src/lib/download.ts +166 -0
  72. package/apps/ui/src/lib/formatters.ts +147 -0
  73. package/apps/ui/src/lib/grok-queries.ts +22 -0
  74. package/apps/ui/src/lib/grok-server.ts +169 -0
  75. package/apps/ui/src/lib/grok-transcript-events.ts +149 -0
  76. package/apps/ui/src/lib/kiro-queries.ts +22 -0
  77. package/apps/ui/src/lib/kiro-server.ts +151 -0
  78. package/apps/ui/src/lib/kiro-transcript-events.ts +113 -0
  79. package/apps/ui/src/lib/opencode-queries.ts +37 -0
  80. package/apps/ui/src/lib/opencode-server.ts +151 -0
  81. package/apps/ui/src/lib/opencode-transcript-events.ts +221 -0
  82. package/apps/ui/src/lib/package-metadata.ts +16 -0
  83. package/apps/ui/src/lib/path-utils.ts +13 -0
  84. package/apps/ui/src/lib/qoder-queries.ts +22 -0
  85. package/apps/ui/src/lib/qoder-server.ts +135 -0
  86. package/apps/ui/src/lib/qoder-transcript-events.ts +139 -0
  87. package/apps/ui/src/lib/route-search.ts +182 -0
  88. package/apps/ui/src/lib/settings-store.tsx +59 -0
  89. package/apps/ui/src/lib/source-session-export-server.ts +139 -0
  90. package/apps/ui/src/lib/text-filter.ts +22 -0
  91. package/apps/ui/src/lib/thread-id.ts +3 -0
  92. package/apps/ui/src/lib/thread-transcript-load.ts +15 -0
  93. package/apps/ui/src/lib/thread-transcript-stats.ts +57 -0
  94. package/apps/ui/src/lib/utils.ts +7 -0
  95. package/apps/ui/src/lib/workspace-delete-navigation.ts +12 -0
  96. package/apps/ui/src/routeTree.gen.ts +837 -0
  97. package/apps/ui/src/router.tsx +20 -0
  98. package/apps/ui/src/routes/$threadId.tsx +22 -0
  99. package/apps/ui/src/routes/__root.tsx +127 -0
  100. package/apps/ui/src/routes/analytics.tsx +143 -0
  101. package/apps/ui/src/routes/antigravity-conversations.$conversationId.tsx +504 -0
  102. package/apps/ui/src/routes/antigravity.$workspaceKey.tsx +365 -0
  103. package/apps/ui/src/routes/antigravity.index.tsx +51 -0
  104. package/apps/ui/src/routes/api.v1.conversation-query.ts +12 -0
  105. package/apps/ui/src/routes/api.v1.conversations.$source.$id.export.ts +12 -0
  106. package/apps/ui/src/routes/api.v1.conversations.$source.$id.ts +16 -0
  107. package/apps/ui/src/routes/api.v1.conversations.delete.ts +12 -0
  108. package/apps/ui/src/routes/api.v1.conversations.export.ts +12 -0
  109. package/apps/ui/src/routes/api.v1.conversations.ts +12 -0
  110. package/apps/ui/src/routes/api.v1.resolve.ts +12 -0
  111. package/apps/ui/src/routes/api.v1.sources.ts +12 -0
  112. package/apps/ui/src/routes/claude-code-sessions.$sessionId.tsx +468 -0
  113. package/apps/ui/src/routes/claude-code.$workspaceKey.tsx +274 -0
  114. package/apps/ui/src/routes/claude-code.index.tsx +48 -0
  115. package/apps/ui/src/routes/codex.$project.tsx +390 -0
  116. package/apps/ui/src/routes/codex.index.tsx +116 -0
  117. package/apps/ui/src/routes/cursor-threads.$composerId.tsx +435 -0
  118. package/apps/ui/src/routes/cursor.$workspaceKey.tsx +426 -0
  119. package/apps/ui/src/routes/cursor.index.tsx +120 -0
  120. package/apps/ui/src/routes/grok-sessions.$sessionId.tsx +388 -0
  121. package/apps/ui/src/routes/grok.$workspaceKey.tsx +301 -0
  122. package/apps/ui/src/routes/grok.index.tsx +48 -0
  123. package/apps/ui/src/routes/index.tsx +124 -0
  124. package/apps/ui/src/routes/kiro-sessions.$sessionId.tsx +396 -0
  125. package/apps/ui/src/routes/kiro.$workspaceKey.tsx +303 -0
  126. package/apps/ui/src/routes/kiro.index.tsx +48 -0
  127. package/apps/ui/src/routes/opencode-sessions.$sessionId.tsx +420 -0
  128. package/apps/ui/src/routes/opencode.$workspaceKey.tsx +327 -0
  129. package/apps/ui/src/routes/opencode.index.tsx +61 -0
  130. package/apps/ui/src/routes/qoder-sessions.$sessionId.tsx +344 -0
  131. package/apps/ui/src/routes/qoder.$workspaceKey.tsx +186 -0
  132. package/apps/ui/src/routes/qoder.index.tsx +48 -0
  133. package/apps/ui/src/routes/settings.tsx +91 -0
  134. package/apps/ui/src/routes/threads.$threadId.tsx +1103 -0
  135. package/apps/ui/src/styles.css +122 -0
  136. package/apps/ui/tsconfig.json +29 -0
  137. package/apps/ui/vite.config.ts +84 -0
  138. package/bin/spiracha.ts +32 -0
  139. package/package.json +54 -80
  140. package/src/client.ts +423 -0
  141. package/src/lib/antigravity-db.ts +414 -44
  142. package/src/lib/antigravity-exporter-types.ts +4 -0
  143. package/src/lib/antigravity-projects.ts +201 -0
  144. package/src/lib/claude-code-db.ts +498 -32
  145. package/src/lib/claude-code-exporter-types.ts +5 -0
  146. package/src/lib/claude-code-transcript-phase.ts +60 -1
  147. package/src/lib/claude-code-transcript.ts +8 -5
  148. package/src/lib/codex-analytics.ts +1 -1
  149. package/src/lib/codex-browser-db.ts +410 -74
  150. package/src/lib/codex-browser-export.ts +29 -41
  151. package/src/lib/codex-browser-types.ts +1 -1
  152. package/src/lib/codex-thread-cache.ts +41 -13
  153. package/src/lib/codex-thread-parser.ts +86 -35
  154. package/src/lib/{codex-exporter-types.ts → codex-thread-types.ts} +2 -30
  155. package/src/lib/codex-transcript-filter.ts +31 -0
  156. package/src/lib/{codex-exporter-transcript.ts → codex-transcript-renderer.ts} +104 -48
  157. package/src/lib/concurrency.ts +41 -0
  158. package/src/lib/conversation-api.ts +1172 -0
  159. package/src/lib/conversation-data/adapter-helpers.ts +110 -0
  160. package/src/lib/conversation-data/antigravity-adapter.ts +167 -0
  161. package/src/lib/conversation-data/claude-code-adapter.ts +206 -0
  162. package/src/lib/conversation-data/codex-adapter.ts +269 -0
  163. package/src/lib/conversation-data/cursor-adapter.ts +205 -0
  164. package/src/lib/conversation-data/grok-adapter.ts +210 -0
  165. package/src/lib/conversation-data/index.ts +386 -0
  166. package/src/lib/conversation-data/kiro-adapter.ts +174 -0
  167. package/src/lib/conversation-data/message-selector.ts +37 -0
  168. package/src/lib/conversation-data/opencode-adapter.ts +202 -0
  169. package/src/lib/conversation-data/path-match.ts +79 -0
  170. package/src/lib/conversation-data/qoder-adapter.ts +255 -0
  171. package/src/lib/conversation-data/types.ts +159 -0
  172. package/src/lib/conversation-zip-export.ts +57 -0
  173. package/src/lib/cursor-db.ts +100 -25
  174. package/src/lib/cursor-exporter-types.ts +0 -19
  175. package/src/lib/grok-db.ts +1026 -0
  176. package/src/lib/grok-exporter-types.ts +110 -0
  177. package/src/lib/grok-transcript-phase.ts +52 -0
  178. package/src/lib/grok-transcript.ts +154 -0
  179. package/src/lib/kiro-db.ts +52 -1
  180. package/src/lib/model-label.ts +11 -3
  181. package/src/lib/opencode-db.ts +598 -55
  182. package/src/lib/opencode-transcript.ts +8 -5
  183. package/src/lib/qoder-acp-client.ts +268 -0
  184. package/src/lib/qoder-db.ts +1601 -0
  185. package/src/lib/qoder-exporter-types.ts +114 -0
  186. package/src/lib/qoder-transcript-phase.ts +41 -0
  187. package/src/lib/qoder-transcript.ts +112 -0
  188. package/src/lib/shared.ts +12 -0
  189. package/src/lib/transcript-load-limiter.ts +82 -0
  190. package/src/lib/ui-cache.ts +43 -17
  191. package/src/lib/ui-export-archive.ts +60 -0
  192. package/apps/ui/dist/client/assets/_threadId-CAIeH5mq.js +0 -1
  193. package/apps/ui/dist/client/assets/analytics-DOy1b6Sh.js +0 -1
  194. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DqySVO2K.js +0 -7
  195. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-KAcXtNxI.js +0 -1
  196. package/apps/ui/dist/client/assets/antigravity-keychain-panel-B77qJz6f.js +0 -1
  197. package/apps/ui/dist/client/assets/antigravity._workspaceKey-B3NM6gRH.js +0 -1
  198. package/apps/ui/dist/client/assets/antigravity._workspaceKey-ByitGWki.js +0 -1
  199. package/apps/ui/dist/client/assets/antigravity.index-DP9JC2P9.js +0 -1
  200. package/apps/ui/dist/client/assets/antigravity.index-DgW25FEV.js +0 -1
  201. package/apps/ui/dist/client/assets/badge-C3i4OKs8.js +0 -1
  202. package/apps/ui/dist/client/assets/checkbox-CdHitXWQ.js +0 -1
  203. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-8pQ55ci2.js +0 -1
  204. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-DVz5UmtU.js +0 -1
  205. package/apps/ui/dist/client/assets/claude-code._workspaceKey-BBKskSum.js +0 -1
  206. package/apps/ui/dist/client/assets/claude-code._workspaceKey-OkikMUFs.js +0 -1
  207. package/apps/ui/dist/client/assets/claude-code.index-Cwu76dbb.js +0 -1
  208. package/apps/ui/dist/client/assets/claude-code.index-D6eMd08t.js +0 -1
  209. package/apps/ui/dist/client/assets/createServerFn-B-KkwmHU.js +0 -3
  210. package/apps/ui/dist/client/assets/cursor-threads._composerId-CmBFclK8.js +0 -1
  211. package/apps/ui/dist/client/assets/cursor-threads._composerId-hBWlP1D-.js +0 -1
  212. package/apps/ui/dist/client/assets/cursor._workspaceKey-BFPkIRi-.js +0 -1
  213. package/apps/ui/dist/client/assets/cursor._workspaceKey-CaAZjGmm.js +0 -1
  214. package/apps/ui/dist/client/assets/cursor.index-8y4o20kb.js +0 -2
  215. package/apps/ui/dist/client/assets/cursor.index-CrnMwDCi.js +0 -1
  216. package/apps/ui/dist/client/assets/data-table-Br78_dk3.js +0 -4
  217. package/apps/ui/dist/client/assets/delete-confirm-dialog-Bxs07u-j.js +0 -7
  218. package/apps/ui/dist/client/assets/dist-B9pyYCVU.js +0 -1
  219. package/apps/ui/dist/client/assets/dist-BrJhN2A0.js +0 -5
  220. package/apps/ui/dist/client/assets/dist-Cmd3AIfD.js +0 -1
  221. package/apps/ui/dist/client/assets/dist-DvMS2965.js +0 -1
  222. package/apps/ui/dist/client/assets/download-Bf0QJKD3.js +0 -1
  223. package/apps/ui/dist/client/assets/dropdown-menu-D5cvPaZt.js +0 -1
  224. package/apps/ui/dist/client/assets/es2015-ad6040dw.js +0 -41
  225. package/apps/ui/dist/client/assets/export-dialog-Dr8d2MqD.js +0 -1
  226. package/apps/ui/dist/client/assets/formatters-BtqyrX_c.js +0 -1
  227. package/apps/ui/dist/client/assets/index-C-STgIH4.js +0 -166
  228. package/apps/ui/dist/client/assets/jsx-runtime-DGeXAQPT.js +0 -1
  229. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-CKgfJ7GR.js +0 -1
  230. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-zvIJHtQF.js +0 -1
  231. package/apps/ui/dist/client/assets/kiro._workspaceKey-DhVuJuZB.js +0 -1
  232. package/apps/ui/dist/client/assets/kiro._workspaceKey-QArsjkTY.js +0 -1
  233. package/apps/ui/dist/client/assets/kiro.index-C-fr4m7i.js +0 -1
  234. package/apps/ui/dist/client/assets/kiro.index-OYgAdtZd.js +0 -1
  235. package/apps/ui/dist/client/assets/metric-card-Dplm0ZiM.js +0 -1
  236. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-DLjiTst-.js +0 -1
  237. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-biBwrRbt.js +0 -8
  238. package/apps/ui/dist/client/assets/opencode._workspaceKey-C7OIzMOJ.js +0 -1
  239. package/apps/ui/dist/client/assets/opencode._workspaceKey-sBakX0oI.js +0 -1
  240. package/apps/ui/dist/client/assets/opencode.index-Bl_kNs9N.js +0 -1
  241. package/apps/ui/dist/client/assets/opencode.index-CN53bVmb.js +0 -1
  242. package/apps/ui/dist/client/assets/page-header-Cwa3p6Tl.js +0 -1
  243. package/apps/ui/dist/client/assets/preload-helper-B8fFrdxC.js +0 -1
  244. package/apps/ui/dist/client/assets/projects._project-D8WloxQN.js +0 -1
  245. package/apps/ui/dist/client/assets/projects._project-DSDwH4NF.js +0 -1
  246. package/apps/ui/dist/client/assets/projects.index-5xRtuJdX.js +0 -3
  247. package/apps/ui/dist/client/assets/projects.index-DEfhWqa8.js +0 -1
  248. package/apps/ui/dist/client/assets/react-dom-DL96Jor4.js +0 -1
  249. package/apps/ui/dist/client/assets/refresh-ccw-BgKjOiA6.js +0 -1
  250. package/apps/ui/dist/client/assets/reload-error-panel-AHqu0akK.js +0 -1
  251. package/apps/ui/dist/client/assets/routes-DnzF_9CX.js +0 -1
  252. package/apps/ui/dist/client/assets/scroll-text-fM0sMOB3.js +0 -1
  253. package/apps/ui/dist/client/assets/select-CYF6pF37.js +0 -1
  254. package/apps/ui/dist/client/assets/settings-Dx70jgP_.js +0 -1
  255. package/apps/ui/dist/client/assets/sqlite-error-B6uZjUe8.js +0 -1
  256. package/apps/ui/dist/client/assets/styles-B7Zi9EFA.css +0 -1
  257. package/apps/ui/dist/client/assets/tabs-CmuhkT-c.js +0 -7
  258. package/apps/ui/dist/client/assets/text-filter-DVAZySUS.js +0 -2
  259. package/apps/ui/dist/client/assets/thread-transcript-stats-BUNz6u7F.js +0 -1
  260. package/apps/ui/dist/client/assets/threads._threadId-BB9tTsV4.js +0 -1
  261. package/apps/ui/dist/client/assets/threads._threadId-BMRSFow3.js +0 -1
  262. package/apps/ui/dist/client/assets/useMutation-BSFult2i.js +0 -1
  263. package/apps/ui/dist/client/assets/useQuery-CjINKZf1.js +0 -1
  264. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CQ8Jjs3B.js +0 -387
  265. package/apps/ui/dist/server/assets/_threadId-B6SrBR9E.js +0 -6
  266. package/apps/ui/dist/server/assets/analytics-CYP_LT5Y.js +0 -16
  267. package/apps/ui/dist/server/assets/analytics-CtpOMVMO.js +0 -146
  268. package/apps/ui/dist/server/assets/antigravity-conversation-state-HgzS302O.js +0 -16
  269. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BKOyL2T6.js +0 -613
  270. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-D426O-64.js +0 -11
  271. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-eS87Dx7g.js +0 -20
  272. package/apps/ui/dist/server/assets/antigravity-db-Bh8_U9uw.js +0 -580
  273. package/apps/ui/dist/server/assets/antigravity-keychain-DOiuHDwK.js +0 -126
  274. package/apps/ui/dist/server/assets/antigravity-keychain-panel-CC7FLmAK.js +0 -55
  275. package/apps/ui/dist/server/assets/antigravity-queries-CGrJO9Vr.js +0 -37
  276. package/apps/ui/dist/server/assets/antigravity-server-CHRjVFqN.js +0 -114
  277. package/apps/ui/dist/server/assets/antigravity._workspaceKey-3m_MzNFA.js +0 -11
  278. package/apps/ui/dist/server/assets/antigravity._workspaceKey-B0QeYUOh.js +0 -28
  279. package/apps/ui/dist/server/assets/antigravity._workspaceKey-C3kP-qyN.js +0 -210
  280. package/apps/ui/dist/server/assets/antigravity.index-CPCYkqCi.js +0 -104
  281. package/apps/ui/dist/server/assets/antigravity.index-DudTB3Tq.js +0 -11
  282. package/apps/ui/dist/server/assets/badge-EvdhKK_Z.js +0 -26
  283. package/apps/ui/dist/server/assets/button-CmTDnzOn.js +0 -46
  284. package/apps/ui/dist/server/assets/checkbox-C0hovF41.js +0 -19
  285. package/apps/ui/dist/server/assets/claude-code-db-Ik3VStKZ.js +0 -361
  286. package/apps/ui/dist/server/assets/claude-code-queries-Cgzi4K-e.js +0 -37
  287. package/apps/ui/dist/server/assets/claude-code-server-PfraClXS.js +0 -72
  288. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-C55oe6zj.js +0 -18
  289. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-D1RYYi3j.js +0 -473
  290. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-DSvPLEUL.js +0 -11
  291. package/apps/ui/dist/server/assets/claude-code-transcript-C-bxh3cS.js +0 -139
  292. package/apps/ui/dist/server/assets/claude-code-transcript-phase-DmUMc8VU.js +0 -10
  293. package/apps/ui/dist/server/assets/claude-code._workspaceKey-B5Xg_-tE.js +0 -28
  294. package/apps/ui/dist/server/assets/claude-code._workspaceKey-BPlzyXPa.js +0 -11
  295. package/apps/ui/dist/server/assets/claude-code._workspaceKey-DqDve2wl.js +0 -191
  296. package/apps/ui/dist/server/assets/claude-code.index-B7yYR7dD.js +0 -92
  297. package/apps/ui/dist/server/assets/claude-code.index-BUHThG1W.js +0 -11
  298. package/apps/ui/dist/server/assets/codex-queries-CtgeZ7VL.js +0 -99
  299. package/apps/ui/dist/server/assets/codex-server-CGXU4H8-.js +0 -2294
  300. package/apps/ui/dist/server/assets/concurrency-VXtYvlGh.js +0 -18
  301. package/apps/ui/dist/server/assets/createServerRpc-CF_DEwnm.js +0 -12
  302. package/apps/ui/dist/server/assets/createSsrRpc-C754NPki.js +0 -16
  303. package/apps/ui/dist/server/assets/cursor-db-CZnYy7aT.js +0 -830
  304. package/apps/ui/dist/server/assets/cursor-exporter-types-CI3goo-c.js +0 -34
  305. package/apps/ui/dist/server/assets/cursor-queries-NCIM0Nat.js +0 -67
  306. package/apps/ui/dist/server/assets/cursor-recovery-CXpO8KcD.js +0 -361
  307. package/apps/ui/dist/server/assets/cursor-server-DNu52A3K.js +0 -213
  308. package/apps/ui/dist/server/assets/cursor-threads._composerId-BB0Y_Mao.js +0 -11
  309. package/apps/ui/dist/server/assets/cursor-threads._composerId-Ckn6ItHI.js +0 -582
  310. package/apps/ui/dist/server/assets/cursor-threads._composerId-p9-ARAzc.js +0 -18
  311. package/apps/ui/dist/server/assets/cursor-transcript-B7tGnqtn.js +0 -125
  312. package/apps/ui/dist/server/assets/cursor._workspaceKey-CZuohIUL.js +0 -28
  313. package/apps/ui/dist/server/assets/cursor._workspaceKey-DPp5JSjy.js +0 -401
  314. package/apps/ui/dist/server/assets/cursor._workspaceKey-nmg3YIOQ.js +0 -11
  315. package/apps/ui/dist/server/assets/cursor.index-CcsX7DG0.js +0 -11
  316. package/apps/ui/dist/server/assets/cursor.index-DkWT-mxw.js +0 -189
  317. package/apps/ui/dist/server/assets/data-table-Cdct823O.js +0 -189
  318. package/apps/ui/dist/server/assets/delete-confirm-dialog-BcBNCxWB.js +0 -144
  319. package/apps/ui/dist/server/assets/download-DMmiy1xf.js +0 -92
  320. package/apps/ui/dist/server/assets/dropdown-menu-Dy_9t6TN.js +0 -36
  321. package/apps/ui/dist/server/assets/empty-plugin-adapters-B3lHh1La.js +0 -5
  322. package/apps/ui/dist/server/assets/export-dialog-D88ze9Gy.js +0 -240
  323. package/apps/ui/dist/server/assets/formatters-FJaGZgJk.js +0 -91
  324. package/apps/ui/dist/server/assets/kiro-db--fXrED_-.js +0 -552
  325. package/apps/ui/dist/server/assets/kiro-queries-CzNlM2ok.js +0 -37
  326. package/apps/ui/dist/server/assets/kiro-server-9WRxg2Au.js +0 -72
  327. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-CRY2c7YO.js +0 -11
  328. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-F1UlwxmR.js +0 -449
  329. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-bvTulT7C.js +0 -18
  330. package/apps/ui/dist/server/assets/kiro-transcript-DoekQBaH.js +0 -112
  331. package/apps/ui/dist/server/assets/kiro-transcript-phase-CJG40nQg.js +0 -27
  332. package/apps/ui/dist/server/assets/kiro._workspaceKey-BDe9sQwo.js +0 -11
  333. package/apps/ui/dist/server/assets/kiro._workspaceKey-CJsjgNwO.js +0 -28
  334. package/apps/ui/dist/server/assets/kiro._workspaceKey-D_-4Qb7y.js +0 -193
  335. package/apps/ui/dist/server/assets/kiro.index-C__-UROk.js +0 -11
  336. package/apps/ui/dist/server/assets/kiro.index-CmTbqeYj.js +0 -93
  337. package/apps/ui/dist/server/assets/loading-panel-BGFnWseS.js +0 -27
  338. package/apps/ui/dist/server/assets/metric-card-ByEeLu0r.js +0 -23
  339. package/apps/ui/dist/server/assets/model-label-B1NWGc65.js +0 -13
  340. package/apps/ui/dist/server/assets/opencode-db-BM7KjOzc.js +0 -397
  341. package/apps/ui/dist/server/assets/opencode-queries-BeNYXnQv.js +0 -50
  342. package/apps/ui/dist/server/assets/opencode-server-BpQ_kRze.js +0 -72
  343. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-CGQ-t0vD.js +0 -518
  344. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-D8Q7in_Z.js +0 -18
  345. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-DKOvi0lV.js +0 -11
  346. package/apps/ui/dist/server/assets/opencode-think-tags-CAoD-EcZ.js +0 -87
  347. package/apps/ui/dist/server/assets/opencode-transcript-BNTcGNym.js +0 -141
  348. package/apps/ui/dist/server/assets/opencode-transcript-phase-OqLkiQD0.js +0 -32
  349. package/apps/ui/dist/server/assets/opencode._workspaceKey-BdqcWHw1.js +0 -11
  350. package/apps/ui/dist/server/assets/opencode._workspaceKey-CfH96HTT.js +0 -28
  351. package/apps/ui/dist/server/assets/opencode._workspaceKey-DdbHPDrO.js +0 -207
  352. package/apps/ui/dist/server/assets/opencode.index-BbVzkJXP.js +0 -11
  353. package/apps/ui/dist/server/assets/opencode.index-Vh_Gq_1L.js +0 -93
  354. package/apps/ui/dist/server/assets/page-header-VNSaM3xd.js +0 -29
  355. package/apps/ui/dist/server/assets/path-transforms-DL2IwtYd.js +0 -31
  356. package/apps/ui/dist/server/assets/projects._project-4io5LO0E.js +0 -20
  357. package/apps/ui/dist/server/assets/projects._project-Bshqk7JA.js +0 -12
  358. package/apps/ui/dist/server/assets/projects._project-D6ZoGhJ8.js +0 -395
  359. package/apps/ui/dist/server/assets/projects.index-BLXOx5eL.js +0 -12
  360. package/apps/ui/dist/server/assets/projects.index-BkLiF2FF.js +0 -182
  361. package/apps/ui/dist/server/assets/projects.index-DesYXwfi.js +0 -14
  362. package/apps/ui/dist/server/assets/reload-error-panel-BJMxY3U1.js +0 -25
  363. package/apps/ui/dist/server/assets/route-search-ts4W9MJ9.js +0 -38
  364. package/apps/ui/dist/server/assets/router-Sac2DGk6.js +0 -518
  365. package/apps/ui/dist/server/assets/routes-Bsact1uB.js +0 -184
  366. package/apps/ui/dist/server/assets/routes-BzkJgq4W.js +0 -34
  367. package/apps/ui/dist/server/assets/select-GW76p-ld.js +0 -76
  368. package/apps/ui/dist/server/assets/settings-OayxIYQQ.js +0 -100
  369. package/apps/ui/dist/server/assets/settings-store-DpEJEQ7M.js +0 -52
  370. package/apps/ui/dist/server/assets/shared-DyhChtHf.js +0 -137
  371. package/apps/ui/dist/server/assets/source-session-export-server-DNutCawb.js +0 -38
  372. package/apps/ui/dist/server/assets/sqlite-error-LZDrnxdd.js +0 -13
  373. package/apps/ui/dist/server/assets/start-B_HFwkkk.js +0 -4
  374. package/apps/ui/dist/server/assets/tabs-DkaChNVg.js +0 -501
  375. package/apps/ui/dist/server/assets/text-filter-CGKxMCKt.js +0 -36
  376. package/apps/ui/dist/server/assets/thread-transcript-stats-Dh34mt2u.js +0 -45
  377. package/apps/ui/dist/server/assets/threads._threadId-BSSK4nkI.js +0 -26
  378. package/apps/ui/dist/server/assets/threads._threadId-BeXEc4Lo.js +0 -648
  379. package/apps/ui/dist/server/assets/threads._threadId-Ci0S4mKU.js +0 -18
  380. package/apps/ui/dist/server/assets/ui-export-files-BHLX9bhN.js +0 -83
  381. package/apps/ui/dist/server/assets/utils-C_uf36nf.js +0 -8
  382. package/apps/ui/dist/server/server.js +0 -5895
  383. package/bin/codex-chats-claude.js +0 -5
  384. package/bin/codex-chats.js +0 -5
  385. package/bin/spiracha.js +0 -5
  386. package/src/export-chats.ts +0 -120
  387. package/src/export-claude.ts +0 -36
  388. package/src/export-cursor.ts +0 -244
  389. package/src/lib/claude-exporter.ts +0 -864
  390. package/src/lib/codex-exporter-cli.ts +0 -277
  391. package/src/lib/codex-exporter-db.ts +0 -319
  392. package/src/lib/codex-exporter.ts +0 -115
  393. package/src/lib/cursor-exporter.ts +0 -266
  394. package/src/lib/interactive-cli.ts +0 -433
  395. package/src/lib/native-open.ts +0 -54
  396. package/src/mcp-server.ts +0 -137
  397. package/src/spiracha.ts +0 -116
  398. package/src/ui-cli.ts +0 -310
  399. /package/apps/ui/{dist/client → public}/icon.svg +0 -0
  400. /package/apps/ui/{dist/client → public}/manifest.json +0 -0
  401. /package/apps/ui/{dist/client → public}/robots.txt +0 -0
package/README.md CHANGED
@@ -4,331 +4,156 @@
4
4
  <img src="apps/ui/public/icon.svg" alt="Spiracha icon" width="96" height="100">
5
5
  </p>
6
6
 
7
- [![npm version](https://img.shields.io/npm/v/spiracha?label=npm)](https://www.npmjs.com/package/spiracha)
8
- [![downloads](https://img.shields.io/npm/dm/spiracha?label=downloads)](https://www.npmjs.com/package/spiracha)
9
7
  [![license](https://img.shields.io/npm/l/spiracha)](LICENSE.md)
10
8
  [![runtime](https://img.shields.io/badge/runtime-Bun-000000?logo=bun)](https://bun.sh)
11
- [![wakatime](https://wakatime.com/badge/user/a0b906ce-b8e7-4463-8bce-383238df6d4b/project/f035d5e2-fa44-4383-913b-53c2c326d8a7.svg)](https://wakatime.com/badge/user/a0b906ce-b8e7-4463-8bce-383238df6d4b/project/f035d5e2-fa44-4383-913b-53c2c326d8a7)
12
9
 
13
- Export local Codex, Claude Code, and Cursor transcripts to Markdown or plain text, and inspect or export Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode history through a browser UI.
10
+ Spiracha is a local TanStack Start app for browsing and exporting agent conversation history from Codex, Claude Code, Grok, Kiro, Qoder, Cursor, Antigravity, and OpenCode.
11
+
12
+ The legacy CLI, MCP server, and Codex plugin surfaces have been removed in the 2.0 hard cut. Spiracha now exposes the UI and a stable local data API; client-specific workflows such as review collection belong in the client that calls the API.
14
13
 
15
14
  ## Quick Start
16
15
 
17
- For repo-local development:
16
+ To run the packaged app:
18
17
 
19
18
  ```bash
20
- rtk bun start
21
- rtk bun run ui:dev
19
+ bunx spiracha
22
20
  ```
23
21
 
24
- Published package usage, once the package is available on npm:
25
-
26
- ```bash
27
- rtk bunx spiracha
28
- rtk bunx spiracha ui
29
- rtk bunx spiracha claude /path/to/session-export.jsonl --output-format txt
30
- rtk bunx spiracha cursor list
31
- ```
22
+ Spiracha asks Vite for port 3000 and automatically uses the next available port when 3000 is occupied.
32
23
 
33
- ## Features
34
-
35
- - Export Codex session transcripts from local `.codex` history
36
- - Export Cursor Agent/Composer threads from local Cursor storage
37
- - Browse Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode history in a TanStack Start UI
38
- - Inspect Codex thread timelines, tool calls, thread metadata, and raw event context
39
- - Inspect Claude Code project workspaces, dedicated session detail pages, reasoning/tool calls, token metadata, and export sessions directly from local `~/.claude/projects` JSONL files
40
- - Inspect Kiro workspace inventories, dedicated session detail pages, image attachments, prompt logs, execution-derived tool calls, and export sessions
41
- - Inspect Cursor workspace inventories, dedicated thread detail pages, recover split storage buckets, and export or delete workspace threads
42
- - Inspect Antigravity workspaces, dedicated conversation detail pages, unlock transcript export through macOS Keychain, and export conversation transcripts or generated artifacts
43
- - Inspect OpenCode project workspaces, dedicated session detail pages, reasoning/tool parts, MiniMax `<think>` blocks, token metadata, and export sessions
44
- - Delete threads or derived projects from the Codex SQLite database after confirmation
45
- - Download thread exports directly from the UI as Markdown, plain text, or optional zip archives, with optional metadata, commentary, and tool-call inclusion
46
- - Keep source-specific assistant commentary hidden by default while still showing final answers, with matching export filtering for Claude Code, Kiro, and OpenCode
47
- - View dashboard and analytics summaries, including token totals and tool-call frequency
48
- - Filter Codex exports by:
49
- - exact `cwd`
50
- - project basename via `--project`
51
- - specific thread deeplinks like `codex://threads/<id>`
52
- - Include command logs with `--tools`
53
- - Write Markdown or real plain-text output with `--output-format md|txt`
54
- - Export Claude Code transcript `.jsonl` files or export directories
55
- - Export, recover, and prune Cursor chat history from the CLI
56
- - Run the same export flows through an MCP server and a local Codex plugin
57
-
58
- ## Install
24
+ For repository development:
59
25
 
60
26
  ```bash
61
27
  rtk bun install
28
+ rtk bun start
62
29
  ```
63
30
 
64
- For package use after publish, no local install is required:
31
+ Open the local URL printed by Vite.
65
32
 
66
- ```bash
67
- rtk bunx spiracha --help
68
- rtk bunx spiracha ui --help
69
- ```
33
+ ## What It Does
70
34
 
71
- ## Usage
35
+ - Browse local conversations across Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode.
36
+ - Inspect source-specific detail pages with transcript, tool, reasoning, metadata, raw event, export, and delete flows where supported by the source.
37
+ - Export transcripts from the UI as Markdown, text, or zip bundles with source-specific commentary/final-answer filtering.
38
+ - Expose a stable API for local clients that need normalized conversation metadata and message payloads.
39
+ - Resolve Spiracha UI links and native source links into normalized `{ source, id }` references for cross-thread context lookup.
72
40
 
73
- ### Codex exports
41
+ ## Stable Data API
74
42
 
75
- Package entrypoint:
43
+ The API is served by the local UI server under `/api/v1`.
76
44
 
77
45
  ```bash
78
- rtk bunx spiracha [options] [codex://threads/<id> ...]
79
- rtk bunx spiracha codex [options] [codex://threads/<id> ...]
46
+ bunx spiracha
80
47
  ```
81
48
 
82
- With no arguments, `spiracha` starts in interactive mode and asks what you want to export.
83
-
84
- Examples:
49
+ Common read endpoints:
85
50
 
86
- ```bash
87
- rtk bunx spiracha
88
- rtk bunx spiracha --interactive
89
- rtk bunx spiracha --project summer
90
- rtk bunx spiracha --tools --project summer
91
- rtk bunx spiracha codex://threads/019da28f-ee5b-7881-afe0-68b3d3bd2c77
92
- rtk bunx spiracha codex://threads/019da28f-ee5b-7881-afe0-68b3d3bd2c77 --output-format txt
93
- rtk bunx spiracha --cwd ~/workspace/reversed/summer --flat
94
- rtk bunx spiracha codex://threads/<thread-id> --no-metadata
51
+ ```text
52
+ GET /api/v1/sources
53
+ GET /api/v1/conversations?cwd=/absolute/project&include_messages=true
54
+ POST /api/v1/conversation-query
55
+ GET /api/v1/conversations/:source/:id
56
+ GET /api/v1/conversations/:source/:id/export
57
+ DELETE /api/v1/conversations/:source/:id
58
+ POST /api/v1/conversations/delete
59
+ POST /api/v1/conversations/export
60
+ GET /api/v1/resolve?ref=<url-or-deeplink>
95
61
  ```
96
62
 
97
- Important flags:
98
- - no args: start interactive mode
99
- - `--interactive`: force the interactive prompt flow
100
- - `--project <name>`: matches the final `cwd` path segment for both POSIX and Windows-style paths
101
- - `--cwd <path>`: exact cwd match
102
- - `--tools`: include `exec_command` call logs and summaries
103
- - `--no-metadata`: omit the metadata section from the top of each export
104
- - `--flat`: write files into a single output folder
105
- - `--output-format md|txt`: output as Markdown or plain text
63
+ The default list selector is `last_final_answer`, which keeps `fgh --collect` style clients fast and small. Use `message_selector=all` when a client needs the full normalized thread.
64
+
65
+ Batch delete requires an explicit source and ID list. It returns `deletedIds`, `missingIds`, and a result for each requested ID, so partial success is represented in a `200` response body. Batch export also requires an explicit source and ID list, but is atomic: any missing ID returns an error instead of a partial archive.
106
66
 
107
- ### Browser UI
67
+ Example:
108
68
 
109
69
  ```bash
110
- rtk bunx spiracha ui
70
+ curl 'http://localhost:3000/api/v1/conversations?cwd=/Users/me/workspace/fgh&include_messages=true'
111
71
  ```
112
72
 
113
- This launches the packaged production UI server, opens your browser by default, and keeps running in the foreground.
114
- Large download bundles are written to a Spiracha-managed directory under your OS temp folder and served directly by the UI server, so packaged `rtk bunx spiracha ui` exports do not depend on your current working directory.
73
+ Response envelope:
115
74
 
116
- Useful flags:
117
- - `--port <port>`: bind a specific port, default `3000`
118
- - `--host <host>`: bind a specific host, default `127.0.0.1`
119
- - `--db <path>`: override the Codex SQLite path used by the UI
120
- - `--no-open`: do not open the browser automatically
75
+ ```json
76
+ {
77
+ "data": [
78
+ {
79
+ "source": "codex",
80
+ "id": "019ecbfc-8a84-7421-ab3b-35653feb7896",
81
+ "title": "Review thread",
82
+ "workspacePath": "/Users/me/workspace/fgh",
83
+ "messages": [
84
+ {
85
+ "role": "assistant",
86
+ "phase": "final_answer",
87
+ "text": "Final review result..."
88
+ }
89
+ ],
90
+ "deepLinks": {
91
+ "ui": "/threads/019ecbfc-8a84-7421-ab3b-35653feb7896",
92
+ "native": "codex://threads/019ecbfc-8a84-7421-ab3b-35653feb7896",
93
+ "spiracha": "spiracha://conversation/codex/019ecbfc-8a84-7421-ab3b-35653feb7896"
94
+ }
95
+ }
96
+ ],
97
+ "meta": {
98
+ "hasNext": false,
99
+ "next_cursor": null
100
+ }
101
+ }
102
+ ```
121
103
 
122
- The UI currently includes:
123
- - a Codex inventory and derived-project detail flow
124
- - a Claude Code workspace inventory, workspace-session listing, and standalone session detail flow
125
- - a Kiro workspace inventory, workspace-session listing, and standalone session detail flow
126
- - a Cursor workspace inventory, workspace-thread listing, and standalone thread detail flow
127
- - an Antigravity workspace inventory, conversation listing, and standalone conversation detail flow
128
- - an OpenCode workspace inventory, session listing, and standalone session detail flow
129
- - a Codex dashboard, Codex thread detail view, and Codex analytics page
104
+ For serverless access from Bun, use the public client export:
130
105
 
131
- Transcript detail pages use the same compact controls across sources: show or hide user messages, commentary, tool calls, extra events, and raw JSON. Claude Code uses `stop_reason` to distinguish tool-use lead-ins from final answers. Kiro uses execution traces for assistant commentary/tool calls and keeps the final assistant response for each user turn visible. OpenCode strips MiniMax `<think>` blocks into commentary, preserves literal `<think>` examples inside Markdown code, and uses the final visible assistant text in each assistant run as the final answer.
106
+ ```ts
107
+ import { createConversationClient } from "spiracha/client";
108
+
109
+ const client = createConversationClient({ mode: "local" });
110
+ const page = await client.listConversations({
111
+ cwd: process.cwd(),
112
+ includeMessages: true,
113
+ messageSelector: "last_final_answer",
114
+ });
115
+ ```
132
116
 
133
- Default browser UI data locations:
117
+ ## Source Locations
134
118
 
135
119
  | Source | Default location | Primary override |
136
120
  | --- | --- | --- |
137
121
  | Codex | shared Codex DB probe list | `SPIRACHA_CODEX_DB` |
138
122
  | Claude Code | `~/.claude/projects` | `SPIRACHA_CLAUDE_CODE_PROJECTS_DIR` |
139
123
  | Kiro | `~/Library/Application Support/Kiro/User/globalStorage/kiro.kiroagent/workspace-sessions` | `SPIRACHA_KIRO_WORKSPACE_SESSIONS_DIR` |
124
+ | Qoder | `~/Library/Application Support/Qoder/User/globalStorage/state.vscdb` and `~/Library/Application Support/Qoder/User/workspaceStorage` | `SPIRACHA_QODER_GLOBAL_STATE_DB`, `SPIRACHA_QODER_WORKSPACE_STORAGE_DIR` |
125
+ | Cursor | `~/Library/Application Support/Cursor/User` on macOS | `SPIRACHA_CURSOR_USER_DIR`, `SPIRACHA_CURSOR_PROJECTS_DIR` |
126
+ | Antigravity | `~/.gemini/antigravity-ide` and `~/.gemini/antigravity` | `SPIRACHA_ANTIGRAVITY_DIRS`, `SPIRACHA_ANTIGRAVITY_DIR` |
140
127
  | OpenCode | `${XDG_DATA_HOME:-~/.local/share}/opencode/opencode.db` | `SPIRACHA_OPENCODE_DB` |
141
- | Export downloads | OS temp directory under `spiracha-ui-exports` | `SPIRACHA_UI_EXPORT_DIR` |
142
-
143
- Codex inventory search and analytics project filters are stored in route search params, so filtered views can be bookmarked or reloaded. `/projects` and `/projects/$project` use `q`, and `/analytics` uses `project`.
144
-
145
- Analytics cache keys are derived from Codex DB row metadata instead of statting every rollout file. This avoids large per-rollout stat storms on big histories and lets cached analytics resolve without touching transcript files. The hard tradeoff is that manual JSONL edits outside Codex do not invalidate analytics unless the corresponding DB row metadata changes or the temp UI cache is cleared. Transcript analytics parsing uses a bounded worker pool; tune it with `SPIRACHA_ANALYTICS_TRANSCRIPT_CONCURRENCY` when benchmarking large datasets.
146
-
147
- The thread detail page also supports a direct UUID shortcut route. Pasting `http://localhost:3000/<thread-id>` redirects to `/threads/<thread-id>`.
148
-
149
- Notable UI routes:
150
- - `/projects` and `/projects/$project` for Codex inventory and project threads
151
- - `/threads/$threadId` for Codex thread detail
152
- - `/claude-code` and `/claude-code/$workspaceKey` for Claude Code workspace inventory and session lists
153
- - `/claude-code-sessions/$sessionId` for Claude Code session detail
154
- - `/kiro` and `/kiro/$workspaceKey` for Kiro workspace inventory and session lists
155
- - `/kiro-sessions/$sessionId` for Kiro session detail
156
- - `/cursor` and `/cursor/$workspaceKey` for Cursor workspace inventory and thread lists
157
- - `/cursor-threads/$composerId` for Cursor thread detail
158
- - `/antigravity` and `/antigravity/$workspaceKey` for Antigravity workspace inventory and conversation lists
159
- - `/antigravity-conversations/$conversationId` for Antigravity conversation detail
160
- - `/opencode` and `/opencode/$workspaceKey` for OpenCode workspace inventory and session lists
161
- - `/opencode-sessions/$sessionId` for OpenCode session detail
128
+ | UI exports | OS temp directory under `spiracha-ui-exports` | `SPIRACHA_UI_EXPORT_DIR` |
162
129
 
163
- Examples:
130
+ ## UI Routes
164
131
 
165
- ```bash
166
- rtk bunx spiracha ui
167
- rtk bunx spiracha ui --port 43123 --no-open
168
- rtk bunx spiracha ui --db ~/.codex/state_5.sqlite
169
- ```
170
-
171
- Stop the UI with `Ctrl+C`.
172
-
173
- ### Claude exports
174
-
175
- ```bash
176
- rtk bunx spiracha claude <input-path> [options]
177
- ```
178
-
179
- Examples:
180
-
181
- ```bash
182
- rtk bunx spiracha claude /path/to/session.jsonl
183
- rtk bunx spiracha claude /path/to/export-dir --tools
184
- rtk bunx spiracha claude /path/to/export-dir --output-format txt
185
- ```
186
-
187
- Repo-local equivalents remain available during development:
188
-
189
- ```bash
190
- rtk bun start
191
- rtk bun start --interactive
192
- rtk bun start ...
193
- rtk bun run export:claude -- ...
194
- ```
195
-
196
- Legacy aliases remain available for compatibility:
197
-
198
- ```bash
199
- rtk bunx codex-chats
200
- rtk bunx codex-chats-claude
201
- ```
202
-
203
- ### Cursor exports
204
-
205
- ```bash
206
- rtk bunx spiracha cursor <subcommand> [options]
207
- ```
208
-
209
- Examples:
210
-
211
- ```bash
212
- rtk bunx spiracha cursor list
213
- rtk bunx spiracha cursor list --query summer
214
- rtk bunx spiracha cursor export --workspace summer --output-dir ./cursor-exports
215
- rtk bunx spiracha cursor export --thread <composer-id> --output-format txt
216
- rtk bunx spiracha cursor recover --workspace summer --apply
217
- rtk bunx spiracha cursor prune --workspace summer --apply
218
- ```
219
-
220
- Repo-local equivalent during development:
221
-
222
- ```bash
223
- rtk bun run ./src/export-cursor.ts --help
224
- ```
225
-
226
- Claude Code direct-history browsing, Kiro browsing/export, Antigravity, and OpenCode conversation browsing/export currently live in the browser UI rather than standalone CLI subcommands.
227
-
228
- ## MCP server
229
-
230
- Run the MCP server with:
231
-
232
- ```bash
233
- rtk bun run mcp
234
- ```
235
-
236
- Exposed tools:
237
- - `export_codex_chats`
238
- - `export_claude_transcript`
239
-
240
- The local plugin lives in [plugins/codex-chats-export](plugins/codex-chats-export) and is registered through [plugins/codex-chats-export/.mcp.json](plugins/codex-chats-export/.mcp.json).
132
+ - `/codex` and `/codex/$project` for Codex inventory and project threads.
133
+ - `/threads/$threadId` for Codex thread detail.
134
+ - `/claude-code`, `/kiro`, `/qoder`, `/cursor`, `/antigravity`, and `/opencode` for source inventories.
135
+ - Source detail routes include `/claude-code-sessions/$sessionId`, `/kiro-sessions/$sessionId`, `/qoder-sessions/$sessionId`, `/cursor-threads/$composerId`, `/antigravity-conversations/$conversationId`, and `/opencode-sessions/$sessionId`.
136
+ - `/analytics` for Codex token and tool-call analytics.
241
137
 
242
138
  ## Development
243
139
 
244
- Useful commands:
245
-
246
140
  ```bash
247
141
  rtk bun test
248
142
  rtk bun run lint
249
143
  rtk bun run typecheck
250
144
  rtk bun run build
251
145
  rtk bun run coverage
252
- rtk bun run ui:dev
253
- rtk bun run --cwd apps/ui test
254
- rtk bun run test:perf
255
146
  rtk bun start
256
- rtk bun start --interactive
257
- rtk bun start -- --help
258
- rtk bun run export:claude -- --help
259
- rtk bun run mcp
260
- ```
261
-
262
- Packed-tarball smoke test before publishing:
263
-
264
- ```bash
265
- rtk bun pm pack
266
- package_tgz="$PWD/spiracha-<version>.tgz"
267
- tmp_dir=$(mktemp -d)
268
- cd "$tmp_dir"
269
- printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
270
- rtk bun add "$package_tgz"
271
- rtk bunx --package "$package_tgz" spiracha --help
272
- rtk bunx --package "$package_tgz" spiracha ui --help
273
- rtk bunx --package "$package_tgz" spiracha claude --help
274
- rtk bunx --package "$package_tgz" codex-chats --help
275
- rtk bunx --package "$package_tgz" codex-chats-claude --help
147
+ rtk bun run --cwd apps/ui test
276
148
  ```
277
149
 
278
- For the exact packaged UI launch path, run:
279
-
280
- ```bash
281
- rtk bun run smoke:package-ui
282
- ```
150
+ The UI package runs Vite through `bun --bun` because server functions import Bun-only modules such as `bun:sqlite`.
283
151
 
284
- This builds the app, packs a fresh tarball in a clean temp directory, launches `rtk bunx --package <tgz> spiracha ui --no-open`, probes the running UI for real SSR HTML, rejects Bun fallback responses, and shuts it down. The same packaged-path smoke is also covered by `src/package-ui-smoke.test.ts`.
285
-
286
- ## Project Layout
287
-
288
- - `apps/ui/`: TanStack Start browser app for Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode browsing plus export and delete flows
289
- - `src/export-chats.ts`: Codex CLI wrapper
290
- - `src/export-claude.ts`: Claude CLI wrapper
291
- - `src/export-cursor.ts`: Cursor CLI wrapper
292
- - `src/mcp-server.ts`: MCP server entrypoint
293
- - `src/lib/antigravity-*.ts`: Antigravity workspace discovery, transcript rendering, and Keychain helpers
294
- - `src/lib/codex-exporter-*.ts`: Codex exporter modules
295
- - `src/lib/codex-browser-*.ts`: shared browser/UI data, analytics, and export helpers
296
- - `src/lib/codex-thread-*.ts`: structured transcript parsing and caching helpers
297
- - `src/lib/concurrency.ts`: shared bounded-concurrency helper for large transcript and DB workloads
298
- - `src/lib/claude-code-*.ts`: Claude Code local project/session discovery, assistant phase classification, and transcript rendering helpers
299
- - `src/lib/kiro-*.ts`: Kiro workspace/session discovery, execution-trace enrichment, assistant phase classification, and transcript rendering helpers
300
- - `src/lib/claude-exporter.ts`: Claude exporter implementation
301
- - `src/lib/cursor-*.ts`: Cursor discovery, transcript rendering, recovery, and CLI helpers
302
- - `src/lib/opencode-*.ts`: OpenCode project/session discovery, MiniMax think-tag handling, assistant phase classification, and transcript rendering helpers
303
- - `src/lib/ui-export-archive.ts` and `src/lib/ui-export-files.ts`: browser download filename, MIME type, zip archive, temp file, and URL helpers
304
- - `plugins/codex-chats-export/`: local Codex plugin bundle
305
-
306
- ## Testing
307
-
308
- The test suite includes:
309
- - Codex exporter end-to-end coverage
310
- - Claude exporter end-to-end coverage
311
- - Claude Code direct-history discovery and export coverage
312
- - Kiro workspace session discovery and export coverage
313
- - source-specific assistant commentary/final-answer classification and export filtering coverage
314
- - Cursor exporter and recovery coverage
315
- - Antigravity discovery and export coverage
316
- - OpenCode discovery and export coverage
317
- - OpenCode MiniMax `<think>` extraction coverage, including literal tags in Markdown code
318
- - Codex CLI helper tests
319
- - transcript rendering helper tests
320
- - route search parsing and bounded concurrency tests
321
- - MCP stdio protocol round-trip tests
322
- - local packaging should be smoke-tested with a packed tarball before publishing
323
- - packaged source manifests are checked for UI server helper files used at runtime
324
-
325
- Coverage enforcement:
326
- - `rtk bun run coverage:root` checks the root Bun unit-test surface at a minimum of 90% line coverage.
327
- - `rtk bun run coverage:ui` checks the UI unit-test surface at a minimum of 90% line coverage.
328
- - `rtk bun run coverage` runs both checks.
329
-
330
- Run:
152
+ ## Breaking Consequences
331
153
 
332
- ```bash
333
- rtk bun test
334
- ```
154
+ - The only published `bin` entry is `spiracha`, and it only launches the local UI server.
155
+ - No `codex-chats`, `codex-chats-claude`, or legacy export command remains.
156
+ - No repo-local CLI export flow remains.
157
+ - No standalone Claude or Cursor export CLI remains.
158
+ - No MCP server or local Codex plugin remains.
159
+ - Programmatic consumers should call the stable local HTTP API or import `spiracha/client` from Bun.
package/apps/ui/AGENTS.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- This package is the local browser UI for Spiracha. It reads Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode local data through TanStack Start server functions and shared root-package helpers.
5
+ This package is the local browser UI for Spiracha. It reads Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode local data through TanStack Start server functions and shared root-package helpers.
6
6
 
7
7
  ## Commands
8
8
 
@@ -17,22 +17,24 @@ rtk bun run coverage
17
17
  Important:
18
18
 
19
19
  - `dev`, `build`, and `preview` run through `bun --bun ...` on purpose. Do not switch them back to plain `vite` or Node execution, because the server functions import Bun-only modules such as `bun:sqlite`.
20
- - Keep TanStack/React runtime dependency versions aligned with the root package when both manifests list the same package. Version drift can break packaged server-function manifests in production.
20
+ - The root package mirrors UI runtime dependencies needed by the packaged `bunx spiracha` launcher. Keep `apps/ui/package.json` and the root `dependencies` aligned when browser/runtime dependencies change.
21
21
 
22
22
  ## Routing
23
23
 
24
24
  - This package uses TanStack Start with file-based routes in `src/routes/`.
25
25
  - `src/routeTree.gen.ts` is generated. Do not edit it manually.
26
26
  - If route typing behaves strangely, delete `src/routeTree.gen.ts` and rebuild with `rtk bun run build` to regenerate it cleanly.
27
+ - Stable API routes live in `src/routes/api.v1.*.ts` and should stay thin wrappers around `@spiracha/lib/conversation-api`.
27
28
  - The UI supports both `/threads/$threadId` and a root shortcut route `/$threadId` that redirects straight to the thread detail page.
28
- - Codex project inventory and project-thread search use route search params. `/projects` and `/projects/$project` use `q`.
29
+ - Codex project inventory and project-thread search use route search params. `/codex` and `/codex/$project` use `q`.
29
30
  - Codex analytics uses the `project` route search param so filtered analytics links can be bookmarked and reloaded.
30
31
  - Claude Code session detail lives at `/claude-code-sessions/$sessionId`.
31
32
  - Kiro session detail lives at `/kiro-sessions/$sessionId`.
33
+ - Qoder session detail lives at `/qoder-sessions/$sessionId`.
32
34
  - Cursor thread detail lives at `/cursor-threads/$composerId`.
33
35
  - Antigravity conversation detail lives at `/antigravity-conversations/$conversationId`.
34
36
  - OpenCode session detail lives at `/opencode-sessions/$sessionId`.
35
- - Keep the Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode list/detail pages aligned around the same table-driven index/detail pattern when adding new source integrations.
37
+ - Keep the Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode list/detail pages aligned around the same table-driven index/detail pattern when adding new source integrations.
36
38
 
37
39
  ## Shared Data Layer
38
40
 
@@ -49,6 +51,9 @@ The UI depends on root-package helpers via `@spiracha/*` path aliases:
49
51
  - `@spiracha/lib/kiro-db`
50
52
  - `@spiracha/lib/kiro-transcript-phase`
51
53
  - `@spiracha/lib/kiro-transcript`
54
+ - `@spiracha/lib/qoder-db`
55
+ - `@spiracha/lib/qoder-transcript-phase`
56
+ - `@spiracha/lib/qoder-transcript`
52
57
  - `@spiracha/lib/cursor-db`
53
58
  - `@spiracha/lib/cursor-recovery`
54
59
  - `@spiracha/lib/cursor-transcript`
@@ -58,6 +63,8 @@ The UI depends on root-package helpers via `@spiracha/*` path aliases:
58
63
  - `@spiracha/lib/opencode-transcript-phase`
59
64
  - `@spiracha/lib/opencode-think-tags`
60
65
  - `@spiracha/lib/opencode-transcript`
66
+ - `@spiracha/lib/conversation-api`
67
+ - `@spiracha/lib/conversation-data`
61
68
 
62
69
  Keep server-only imports inside server functions or route loaders. Do not import Bun-only modules into purely client-side components.
63
70
  The `*-transcript-phase` helpers are intentionally browser-safe and may be imported by client adapters.
@@ -66,15 +73,18 @@ The `*-transcript-phase` helpers are intentionally browser-safe and may be impor
66
73
 
67
74
  Use the existing layers consistently:
68
75
 
69
- - TanStack Start server functions in `src/lib/codex-server.ts`, `src/lib/claude-code-server.ts`, `src/lib/kiro-server.ts`, `src/lib/cursor-server.ts`, `src/lib/antigravity-server.ts`, and `src/lib/opencode-server.ts`
76
+ - TanStack Start server functions in `src/lib/codex-server.ts`, `src/lib/claude-code-server.ts`, `src/lib/kiro-server.ts`, `src/lib/qoder-server.ts`, `src/lib/cursor-server.ts`, `src/lib/antigravity-server.ts`, and `src/lib/opencode-server.ts`
70
77
  - Use for any browser-triggered read/write that needs Bun-only modules, DB access, filesystem access, Keychain access, or shared root-package helpers.
71
78
  - Use `.validator(...)` for input validation. Do not add new `.inputValidator(...)` calls.
72
- - TanStack Query query options in `src/lib/codex-queries.ts`, `src/lib/claude-code-queries.ts`, `src/lib/kiro-queries.ts`, `src/lib/cursor-queries.ts`, `src/lib/antigravity-queries.ts`, and `src/lib/opencode-queries.ts`
79
+ - TanStack Query query options in `src/lib/codex-queries.ts`, `src/lib/claude-code-queries.ts`, `src/lib/kiro-queries.ts`, `src/lib/qoder-queries.ts`, `src/lib/cursor-queries.ts`, `src/lib/antigravity-queries.ts`, and `src/lib/opencode-queries.ts`
73
80
  - Use for client-side fetching, caching, retries, and invalidation of server-function results.
74
81
  - Shared root-package helpers under `@spiracha/lib/*`
75
- - Extend these when the behavior should stay shared between the UI, CLI, and packaged launcher.
82
+ - Extend these when the behavior should stay shared between the UI and the stable data API.
76
83
  - Use the shared source-specific phase helpers for assistant commentary/final-answer rules instead of duplicating that logic in UI adapters.
77
84
  - Keep OpenCode think-tag handling in `@spiracha/lib/opencode-think-tags` so UI display and exports strip MiniMax reasoning tags consistently.
85
+ - Stable API route handlers in `src/routes/api.v1.*.ts`
86
+ - Use route-level `server.handlers`.
87
+ - Delegate to `@spiracha/lib/conversation-api` instead of duplicating parsing or response-envelope logic.
78
88
  - `src/lib/source-session-export-server.ts`
79
89
  - Use for single-session source exports that may return either inline content or a temporary zip download URL.
80
90
  - `settings-store.tsx`
package/apps/ui/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Spiracha UI
2
2
 
3
- The browser UI for browsing local Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode history, inspecting transcript details, exporting chats, and analyzing Codex usage patterns.
3
+ The browser UI for browsing local Codex, Claude Code, Grok, Kiro, Qoder, Cursor, Antigravity, and OpenCode history, inspecting transcript details, exporting chats, and analyzing Codex usage patterns.
4
4
 
5
5
  ## Stack
6
6
 
@@ -18,11 +18,15 @@ The browser UI for browsing local Codex, Claude Code, Kiro, Cursor, Antigravity,
18
18
  - lists derived Codex projects from the Codex SQLite database
19
19
  - lists Codex threads within a project in chronological order
20
20
  - shows Codex thread timelines, tool calls, metadata, and raw event context
21
- - exports Codex, Claude Code, Kiro, Cursor, and OpenCode sessions or threads as Markdown, plain text, or optional zip archives with optional metadata, commentary, and tool-call inclusion
21
+ - exports Codex, Claude Code, Grok, Kiro, Qoder, Cursor, and OpenCode sessions or threads as Markdown, plain text, or optional zip archives with optional metadata, commentary, and tool-call inclusion
22
22
  - lists Claude Code workspaces and sessions from local `~/.claude/projects` JSONL files
23
23
  - shows dedicated Claude Code session detail pages with reasoning, tool calls, token metadata, and export actions
24
+ - lists Grok workspaces and sessions from local Grok session archives
25
+ - shows dedicated Grok session detail pages with compacted-history recovery, tool calls, metadata, export, and delete actions
24
26
  - lists Kiro workspaces and sessions from local Kiro workspace session files
25
27
  - shows dedicated Kiro session detail pages with image attachments, prompt logs, execution-derived tool calls, metadata, and export actions
28
+ - lists Qoder workspaces and sessions from local Qoder history and checkpoint storage
29
+ - shows dedicated Qoder session detail pages with prompts, checkpoint file operations, metadata, and export actions
26
30
  - lists Cursor workspaces and workspace threads with the same table-based index/detail flow as Codex
27
31
  - shows dedicated Cursor thread detail pages with breadcrumbs back to the workspace and source
28
32
  - recovers split Cursor storage buckets, exports Cursor threads, and deletes Cursor workspaces or threads
@@ -33,7 +37,7 @@ The browser UI for browsing local Codex, Claude Code, Kiro, Cursor, Antigravity,
33
37
  - shows dedicated OpenCode session detail pages with reasoning, tool parts, MiniMax `<think>` blocks, token metadata, and export actions
34
38
  - shows dashboard and analytics summaries, including Codex token totals and tool-call frequency
35
39
  - keeps Codex inventory search and analytics project filters in URL search params for reloadable and shareable views
36
- - keeps source-specific commentary hidden by default while preserving final answers, with matching export filtering for Claude Code, Kiro, and OpenCode
40
+ - keeps source-specific commentary hidden by default while preserving final answers, with matching export filtering for Claude Code, Kiro, Qoder, and OpenCode
37
41
 
38
42
  ## Commands
39
43
 
@@ -65,17 +69,41 @@ Runtime configuration is intentionally small:
65
69
  - `SPIRACHA_ANALYTICS_TRANSCRIPT_CONCURRENCY`
66
70
  - Optional positive integer for Codex analytics transcript parsing concurrency.
67
71
  - Defaults to `8`.
72
+ - `SPIRACHA_TRANSCRIPT_LOAD_CONCURRENCY`
73
+ - Optional positive integer for detail-page transcript loading concurrency across sources.
74
+ - Defaults to `3` and is capped at `16` to protect the server from excessive parallel disk and database work.
68
75
  - `SPIRACHA_CLAUDE_CODE_PROJECTS_DIR`
69
76
  - Optional absolute path to the Claude Code projects directory.
70
77
  - If unset, Spiracha reads `${SPIRACHA_CLAUDE_CODE_DATA_DIR:-~/.claude}/projects`. `SPIRACHA_CLAUDE_CODE_DIR` and `SPIRACHA_CLAUDE_HOME` are also accepted aliases for the Claude Code data directory.
78
+ - `SPIRACHA_GROK_SESSIONS_DIR`
79
+ - Optional path to the Grok sessions directory.
80
+ - If unset, Spiracha reads `${SPIRACHA_GROK_HOME:-~/.grok}/sessions`. `SPIRACHA_GROK_DIR` is accepted as a Grok home-directory alias.
71
81
  - `SPIRACHA_KIRO_WORKSPACE_SESSIONS_DIR`
72
82
  - Optional absolute path to the Kiro workspace sessions directory.
73
83
  - If unset, Spiracha reads `${SPIRACHA_KIRO_DATA_DIR:-~/Library/Application Support/Kiro/User/globalStorage/kiro.kiroagent}/workspace-sessions`. `SPIRACHA_KIRO_AGENT_DIR` and `SPIRACHA_KIRO_DIR` are also accepted aliases for the Kiro data directory.
84
+ - `SPIRACHA_QODER_GLOBAL_STATE_DB`
85
+ - Optional absolute path to Qoder's global `state.vscdb`.
86
+ - If unset, Spiracha reads `${SPIRACHA_QODER_USER_DIR:-~/Library/Application Support/Qoder/User}/globalStorage/state.vscdb`. `SPIRACHA_QODER_DATA_DIR` and `SPIRACHA_QODER_DIR` are also accepted aliases for the Qoder user directory.
87
+ - `SPIRACHA_QODER_WORKSPACE_STORAGE_DIR`
88
+ - Optional absolute path to Qoder's `workspaceStorage` directory.
89
+ - If unset, Spiracha reads `${SPIRACHA_QODER_USER_DIR:-~/Library/Application Support/Qoder/User}/workspaceStorage`.
74
90
  - `SPIRACHA_OPENCODE_DB`
75
91
  - Optional absolute path to the OpenCode SQLite database.
76
92
  - If unset, Spiracha reads `${SPIRACHA_OPENCODE_DATA_DIR:-${XDG_DATA_HOME:-~/.local/share}/opencode}/opencode.db`. `SPIRACHA_OPENCODE_DIR` is also accepted as an OpenCode data-directory alias.
77
-
78
- Export artifacts are served through the UI as attachment downloads from `/__exports/*`. The packaged `spiracha ui` launcher and the local dev server both use the same export-directory contract.
93
+ - `SPIRACHA_OPENCODE_DB_CONCURRENCY`
94
+ - Optional positive integer for concurrent OpenCode database reads.
95
+ - Defaults to `2`.
96
+ - `SPIRACHA_CURSOR_USER_DIR`
97
+ - Optional absolute path to Cursor's `User` directory.
98
+ - If unset, Spiracha reads the platform default Cursor user-data directory.
99
+ - `SPIRACHA_CURSOR_PROJECTS_DIR`
100
+ - Optional absolute path to Cursor's project transcript directory.
101
+ - If unset, Spiracha infers `.cursor/projects` from the Cursor user directory when possible.
102
+ - `SPIRACHA_ANTIGRAVITY_DIRS`
103
+ - Optional path-list of Antigravity roots.
104
+ - If unset, Spiracha reads `~/.gemini/antigravity-ide` and `~/.gemini/antigravity`. `SPIRACHA_ANTIGRAVITY_DIR` is accepted as a single-root alias.
105
+
106
+ Export artifacts are served through the UI as attachment downloads from `/__exports/*`. The local dev and preview servers use the same export-directory contract.
79
107
 
80
108
  Default source locations:
81
109
 
@@ -83,21 +111,25 @@ Default source locations:
83
111
  | --- | --- | --- |
84
112
  | Codex | shared Codex DB probe list | `SPIRACHA_CODEX_DB` |
85
113
  | Claude Code | `~/.claude/projects` | `SPIRACHA_CLAUDE_CODE_PROJECTS_DIR` |
114
+ | Grok | `~/.grok/sessions` | `SPIRACHA_GROK_SESSIONS_DIR`, `SPIRACHA_GROK_HOME` |
86
115
  | Kiro | `~/Library/Application Support/Kiro/User/globalStorage/kiro.kiroagent/workspace-sessions` | `SPIRACHA_KIRO_WORKSPACE_SESSIONS_DIR` |
116
+ | Qoder | `~/Library/Application Support/Qoder/User/globalStorage/state.vscdb` + `~/Library/Application Support/Qoder/User/workspaceStorage` | `SPIRACHA_QODER_GLOBAL_STATE_DB`, `SPIRACHA_QODER_WORKSPACE_STORAGE_DIR` |
117
+ | Cursor | `~/Library/Application Support/Cursor/User` on macOS | `SPIRACHA_CURSOR_USER_DIR`, `SPIRACHA_CURSOR_PROJECTS_DIR` |
118
+ | Antigravity | `~/.gemini/antigravity-ide` + `~/.gemini/antigravity` | `SPIRACHA_ANTIGRAVITY_DIRS`, `SPIRACHA_ANTIGRAVITY_DIR` |
87
119
  | OpenCode | `${XDG_DATA_HOME:-~/.local/share}/opencode/opencode.db` | `SPIRACHA_OPENCODE_DB` |
88
120
  | Export downloads | OS temp directory under `spiracha-ui-exports` | `SPIRACHA_UI_EXPORT_DIR` |
89
121
 
90
122
  Codex analytics cache keys are based on Codex DB row metadata instead of statting every rollout file before cache hits. That keeps large histories responsive. The tradeoff is that manual JSONL edits outside Codex do not invalidate analytics unless DB row metadata changes or the temporary UI cache is cleared.
91
123
 
92
- Transcript detail pages expose the same display controls across sources: user messages, commentary, tool calls, extra events, and raw JSON. Claude Code assistant lead-ins are classified from `stop_reason`, Kiro assistant phases are classified per user turn from session and execution files, and OpenCode assistant phases are classified per assistant run after stripping MiniMax `<think>` blocks into commentary. OpenCode think-tag extraction preserves literal `<think>` examples inside Markdown code spans and fenced code blocks.
124
+ Transcript detail pages expose the same display controls across sources: user messages, commentary, tool calls, extra events, and raw JSON. Claude Code assistant lead-ins are classified from `stop_reason`, Kiro assistant phases are classified per user turn from session and execution files, Qoder shows local prompt history plus checkpoint file operations, and OpenCode assistant phases are classified per assistant run after stripping MiniMax `<think>` blocks into commentary. OpenCode think-tag extraction preserves literal `<think>` examples inside Markdown code spans and fenced code blocks.
93
125
 
94
126
  ## Routes
95
127
 
96
128
  - `/`
97
129
  - dashboard
98
- - `/projects`
130
+ - `/codex`
99
131
  - Codex inventory and search, with `q` as the route search param
100
- - `/projects/$project`
132
+ - `/codex/$project`
101
133
  - Codex project thread listing, with `q` as the route search param
102
134
  - `/claude-code`
103
135
  - Claude Code workspace inventory and search
@@ -105,12 +137,24 @@ Transcript detail pages expose the same display controls across sources: user me
105
137
  - Claude Code workspace session listing
106
138
  - `/claude-code-sessions/$sessionId`
107
139
  - Claude Code session detail and export
140
+ - `/grok`
141
+ - Grok workspace inventory and search
142
+ - `/grok/$workspaceKey`
143
+ - Grok workspace session listing
144
+ - `/grok-sessions/$sessionId`
145
+ - Grok session detail, export, and delete
108
146
  - `/kiro`
109
147
  - Kiro workspace inventory and search
110
148
  - `/kiro/$workspaceKey`
111
149
  - Kiro workspace session listing
112
150
  - `/kiro-sessions/$sessionId`
113
151
  - Kiro session detail and export
152
+ - `/qoder`
153
+ - Qoder workspace inventory and search
154
+ - `/qoder/$workspaceKey`
155
+ - Qoder workspace session listing
156
+ - `/qoder-sessions/$sessionId`
157
+ - Qoder session detail and export
114
158
  - `/cursor`
115
159
  - Cursor workspace inventory and search
116
160
  - `/cursor/$workspaceKey`