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/AGENTS.md CHANGED
@@ -2,177 +2,140 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- This repo exports local Codex chats, Claude Code transcripts, and Cursor Agent/Composer threads to Markdown or plain text, and the UI also browses and exports local Claude Code, Kiro, Antigravity, and OpenCode conversation history.
5
+ This repo is a Bun-first local app for browsing, exporting, and exposing agent conversation history from Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode.
6
+
7
+ The command-line exporter, MCP server, and Codex plugin were removed in the 2.0 hard cut. Do not add bridge commands, compatibility aliases, or deprecated entrypoints back. New client workflows should use the stable HTTP API exposed by the UI server or the stable `spiracha/client` package export.
6
8
 
7
9
  Main entrypoints:
8
- - `rtk bun start ...` for Codex chat export
9
- - `rtk bun start` for interactive export mode
10
- - `rtk bun run export:claude -- ...` for Claude transcript export
11
- - `rtk bun run ./src/export-cursor.ts ...` (or `rtk spiracha cursor ...`) for Cursor thread export, recovery, and prune
12
- - `rtk bun run mcp` for the MCP server used by the local Codex plugin
13
- - `rtk bun run ui:dev` for the local browser UI across Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode data
14
- - published package entrypoints:
15
- - `rtk bunx spiracha`
16
- - `rtk bunx spiracha ui`
17
- - `rtk bunx spiracha claude ...`
18
- - legacy aliases retained:
19
- - `rtk bunx codex-chats`
20
- - `rtk bunx codex-chats-claude`
10
+ - `bunx spiracha` for running the packaged UI app
11
+ - `rtk bun start` for local development
12
+ - `rtk bun run ui:preview` after a UI build
13
+ - `rtk bun test`, `rtk bun run lint`, and `rtk bun run typecheck` for verification
21
14
 
22
15
  ## Conventions and Rules
23
16
 
24
- - Always use `bun` and `bunx`, HARD BAN on: `npm` unless absolutely necessary.
17
+ - Use `rtk` as the default wrapper for shell commands that produce meaningful stdout or stderr.
18
+ - Always use `bun` and `bunx`; do not use `npm` unless absolutely necessary.
25
19
  - Prefer `Bun.file()` instead of `fs` whenever possible.
26
- - Kill any browser instance you start or stray `bun`, `node` processes after you are done. Never leave it running.
27
- - Prefer arrow functions to classical functions, and `type` over `interface` in TS.
28
- - Fixes are made using TDD approach.
29
- - `bun format` and `bun typecheck` should always be ran at the end of your completion, if you introduced any warnings or errors clean them up yourself before you complete.
30
- - NEVER disable a biome rule or TS rule without explicit permission from the user.
31
- - If you believe the code you are changing requires some clarification for future AI agents to understand why the change was made, add a brief comment.
32
- - Do NOT use decorative section headers made of repeated characters (e.g. `// -----`, `// =====`, etc.).
20
+ - Kill any browser instance or stray `bun`/`node` process you start.
21
+ - Prefer arrow functions to classical functions and `type` over `interface` in TypeScript.
22
+ - Make fixes using a TDD approach.
23
+ - Run `bun run lint`, `bun run typecheck`, and `bun test` before completion after meaningful code changes.
24
+ - Never disable a Biome or TypeScript rule without explicit permission.
25
+ - Add brief comments only when future agents need context that is not obvious from the code.
26
+ - Do not use decorative repeated-character section headers.
33
27
  - Use `it('should...')` style tests.
34
- - Unit-tests always live in the same folder as their implementation, never in the `test` folder.
35
-
36
- ## Working Rules
37
-
38
- - Use `rtk` as the default wrapper for shell commands that produce meaningful stdout or stderr.
39
- - Prefer `bun test` for verification. Run it after non-trivial changes.
40
- - Run `bun run lint` in addition to `bun test` and `bun run typecheck` before completion.
41
- - When changing package/distribution behavior, also run a local packed-tarball smoke test.
42
- - When changing the interactive flow, validate it in a real TTY session; piped stdin is not a reliable substitute.
43
- - When changing the UI package, validate it in a browser after the build or dev server is up.
44
- - Use `apply_patch` for manual edits.
45
- - Keep output compatibility stable. The exported transcript format is user-facing.
46
- - Preserve the behavior of existing flags unless the task explicitly changes CLI semantics.
28
+ - Unit tests live next to their implementation.
29
+ - `apps/ui/src/routeTree.gen.ts` is generated and must not be manually edited.
47
30
 
48
31
  ## Architecture
49
32
 
50
- Codex exporter modules:
51
- - `src/lib/codex-exporter.ts`
52
- - top-level orchestration and public barrel exports
53
- - `src/lib/codex-exporter-cli.ts`
54
- - CLI parsing, help text, deeplink parsing, default output-dir resolution
55
- - `src/lib/codex-exporter-db.ts`
56
- - SQLite queries, fallback session discovery, filter matching, export target construction
57
- - `src/lib/codex-exporter-transcript.ts`
58
- - JSONL transcript parsing, metadata extraction, message/tool rendering
59
- - `src/lib/codex-exporter-types.ts`
60
- - shared Codex exporter types and default path constants
61
-
62
- Cursor exporter modules:
63
- - `src/export-cursor.ts`
64
- - CLI runner with `list`, `export`, `recover`, and `prune` subcommands
65
- - `src/lib/cursor-exporter.ts`
66
- - export orchestration, CLI parsing, and help text
67
- - `src/lib/cursor-db.ts`
68
- - workspace storage bucket discovery, grouping, thread/bubble reads from the global store
69
- - `src/lib/cursor-recovery.ts`
70
- - re-links lost threads into the active workspace bucket and prunes threads (destructive)
71
- - `src/lib/cursor-transcript.ts`
72
- - renders Cursor bubbles (user, assistant, reasoning, tool calls) to Markdown or TXT
73
- - `src/lib/cursor-exporter-types.ts`
74
- - shared Cursor types and macOS Cursor data-dir path resolution (`SPIRACHA_CURSOR_USER_DIR` override)
75
-
76
- Claude Code browser/export modules:
77
- - `src/lib/claude-code-db.ts`
78
- - local Claude Code project/session discovery from `~/.claude/projects`, transcript parsing, and workspace grouping
79
- - `src/lib/claude-code-exporter-types.ts`
80
- - shared Claude Code workspace, session, entry, part, and export option types plus default projects-dir resolution
81
- - `src/lib/claude-code-transcript-phase.ts`
82
- - browser-safe assistant commentary/final-answer classification based on Claude Code stop reasons
83
- - `src/lib/claude-code-transcript.ts`
84
- - renders local Claude Code sessions to Markdown or plain text for UI downloads
85
-
86
- Kiro browser/export modules:
87
- - `src/lib/kiro-db.ts`
88
- - read-only Kiro workspace/session discovery from Kiro workspace session JSON files, transcript part parsing, and workspace grouping
89
- - `src/lib/kiro-exporter-types.ts`
90
- - shared Kiro workspace, session, entry, part, and export option types plus default workspace-session path resolution
91
- - `src/lib/kiro-transcript-phase.ts`
92
- - browser-safe assistant commentary/final-answer classification per Kiro user turn
93
- - `src/lib/kiro-transcript.ts`
94
- - renders Kiro sessions to Markdown or plain text for UI downloads
95
-
96
- Antigravity browser/export modules:
97
- - `src/lib/antigravity-db.ts`
98
- - Antigravity workspace discovery, summary-index parsing, transcript lookup, and Markdown rendering
99
- - `src/lib/antigravity-exporter-types.ts`
100
- - shared Antigravity workspace and conversation types plus default data-dir resolution
101
- - `src/lib/antigravity-keychain.ts`
102
- - macOS Keychain access and safe-storage decryption helpers for Antigravity transcript export
103
-
104
- OpenCode browser/export modules:
105
- - `src/lib/opencode-db.ts`
106
- - read-only OpenCode project/session discovery, transcript part parsing, and workspace grouping
107
- - `src/lib/opencode-exporter-types.ts`
108
- - shared OpenCode workspace, session, message, part, and export option types plus default DB path resolution
109
- - `src/lib/opencode-transcript-phase.ts`
110
- - browser-safe assistant commentary/final-answer classification per OpenCode assistant run
111
- - `src/lib/opencode-think-tags.ts`
112
- - browser-safe MiniMax `<think>` extraction shared by OpenCode export rendering and UI adapters
113
- - `src/lib/opencode-transcript.ts`
114
- - renders OpenCode sessions to Markdown or plain text for UI downloads
115
-
116
- Other important files:
117
- - `src/lib/claude-exporter.ts`
118
- - Claude transcript export pipeline
33
+ Stable conversation API:
34
+ - `src/client.ts`
35
+ - public Bun client export for local serverless access and HTTP access to the same normalized conversation DTOs
36
+ - `src/lib/conversation-api.ts`
37
+ - HTTP request handler shared by TanStack API routes and root tests
38
+ - owns response envelopes, validation errors, route dispatch, and default selector behavior
39
+ - `src/lib/conversation-data/index.ts`
40
+ - source registry, pagination, path-scoped collection, reference resolution, and normalized Markdown rendering
41
+ - `src/lib/conversation-data/types.ts`
42
+ - shared source, message, detail, paging, location, and adapter contracts
43
+ - `src/lib/conversation-data/path-match.ts`
44
+ - exact and descendant cwd matching
45
+ - `src/lib/conversation-data/message-selector.ts`
46
+ - `all`, `last_assistant`, and `last_final_answer` message selection
47
+ - `src/lib/conversation-data/*-adapter.ts`
48
+ - source-specific mapping into normalized conversation shapes
49
+
50
+ Codex browser/export modules:
119
51
  - `src/lib/codex-browser-db.ts`
120
52
  - project/thread browsing queries, delete flows, dashboard summaries, DB path resolution
121
53
  - `src/lib/codex-browser-export.ts`
122
- - UI-facing thread export download rendering
54
+ - UI-facing thread download rendering
55
+ - `src/lib/codex-thread-types.ts`
56
+ - Codex DB row and transcript rendering types
57
+ - `src/lib/codex-transcript-renderer.ts`
58
+ - Markdown/plain text rendering for Codex session files
123
59
  - `src/lib/codex-thread-parser.ts`
124
60
  - structured Codex event parsing used by analytics and the UI
125
61
  - `src/lib/codex-analytics.ts`
126
- - token/tool analytics derived from thread rows plus bounded transcript parsing and DB-row metadata cache keys
62
+ - token/tool analytics derived from thread rows plus bounded transcript parsing and cache keys
63
+ - `src/lib/codex-thread-cache.ts`
64
+ - thread-detail cache helpers
65
+ - `src/lib/codex-thread-recovery.ts`
66
+ - Codex project recovery helpers
67
+
68
+ Source-specific browser/export modules:
69
+ - `src/lib/claude-code-db.ts`, `src/lib/claude-code-transcript-phase.ts`, `src/lib/claude-code-transcript.ts`
70
+ - `src/lib/kiro-db.ts`, `src/lib/kiro-transcript-phase.ts`, `src/lib/kiro-transcript.ts`
71
+ - `src/lib/qoder-db.ts`, `src/lib/qoder-transcript-phase.ts`, `src/lib/qoder-transcript.ts`
72
+ - `src/lib/cursor-db.ts`, `src/lib/cursor-recovery.ts`, `src/lib/cursor-transcript.ts`
73
+ - `src/lib/antigravity-db.ts`, `src/lib/antigravity-keychain.ts`
74
+ - `src/lib/opencode-db.ts`, `src/lib/opencode-transcript-phase.ts`, `src/lib/opencode-think-tags.ts`, `src/lib/opencode-transcript.ts`
75
+
76
+ Shared utilities:
127
77
  - `src/lib/concurrency.ts`
128
- - shared bounded-concurrency helper for large file/database workloads
78
+ - `src/lib/model-label.ts`
79
+ - `src/lib/path-transforms.ts`
80
+ - `src/lib/shared.ts`
81
+ - `src/lib/sqlite-error.ts`
82
+ - `src/lib/sqlite-retry.ts`
83
+ - `src/lib/ui-cache.ts`
129
84
  - `src/lib/ui-export-archive.ts`
130
- - browser-download filename, MIME type, and zip archive helpers
131
85
  - `src/lib/ui-export-files.ts`
132
- - browser-download temp file location, URL, and content-disposition helpers
133
- - `src/lib/ui-cache.ts`
134
- - temporary cache under `os.tmpdir()` for transcript and analytics lookups
135
- - `src/mcp-server.ts`
136
- - MCP server exposing `export_codex_chats` and `export_claude_transcript`
137
- - `plugins/codex-chats-export/`
138
- - local Codex plugin manifest, skill, and MCP wiring
86
+
87
+ UI package:
139
88
  - `apps/ui/`
140
- - TanStack Start browser UI package for Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode
141
- - source-specific index/detail routes include `/threads/$threadId`, `/claude-code-sessions/$sessionId`, `/kiro-sessions/$sessionId`, `/cursor-threads/$composerId`, `/antigravity-conversations/$conversationId`, and `/opencode-sessions/$sessionId`
89
+ - TanStack Start browser UI
90
+ - API routes live under `apps/ui/src/routes/api.v1.*.ts`
91
+ - source routes include `/threads/$threadId`, `/claude-code-sessions/$sessionId`, `/kiro-sessions/$sessionId`, `/qoder-sessions/$sessionId`, `/cursor-threads/$composerId`, `/antigravity-conversations/$conversationId`, and `/opencode-sessions/$sessionId`
92
+
93
+ ## Stable API Contract
94
+
95
+ The package exposes:
96
+ - `spiracha/client`
97
+ - `createConversationClient({ mode: 'local' })` for serverless local access
98
+ - `createConversationClient({ mode: 'http', baseUrl })` for a running UI server
99
+ - `spiracha/types`
100
+ - normalized conversation DTO types
101
+
102
+ The local UI server exposes:
103
+ - `GET /api/v1/sources`
104
+ - `GET /api/v1/conversations?cwd=<absolute-path>&include_messages=true`
105
+ - `POST /api/v1/conversation-query`
106
+ - `GET /api/v1/conversations/:source/:id`
107
+ - `GET /api/v1/conversations/:source/:id/export`
108
+ - `GET /api/v1/resolve?ref=<url-or-deeplink>`
109
+
110
+ Defaults:
111
+ - list endpoints default to `message_selector=last_final_answer`
112
+ - detail endpoints default to `message_selector=all`
113
+ - `source=codex,claude-code,...` may scope collection
114
+ - omitted source means all installed/available integrations
115
+ - all-source collection should tolerate missing optional integrations
116
+ - explicit source requests should surface source-specific failures
117
+
118
+ Do not bake review semantics into Spiracha. A client such as `fgh --collect` decides that a selected assistant message is a review and chooses where to save it.
142
119
 
143
120
  ## Test Strategy
144
121
 
145
122
  Current tests cover:
146
- - exporter end-to-end behavior for Codex and Claude
147
- - Claude Code direct-history discovery, transcript parsing, and export rendering
148
- - Claude Code, Kiro, and OpenCode assistant phase classification for commentary/final-answer display and export filtering
149
- - Kiro discovery, execution-trace enrichment, transcript parsing, and export rendering
150
- - Cursor export, recovery, and pruning behavior
151
- - Antigravity discovery, transcript parsing, and artifact export rendering
152
- - OpenCode discovery, transcript parsing, and export rendering
123
+ - stable conversation API envelopes, validation, source listing, path-scoped collection, message selectors, reference resolution, and Codex adapter mapping
124
+ - source-specific discovery, transcript parsing, phase classification, and export rendering
125
+ - Codex project/thread browsing, delete semantics, analytics, cache keys, and recovery helpers
126
+ - Cursor recovery/prune behavior
127
+ - Antigravity discovery, transcript parsing, Keychain state, and artifact export rendering
153
128
  - OpenCode MiniMax `<think>` tag extraction, including code-literal preservation
154
- - structured Codex transcript parsing
155
- - project/thread browsing and destructive DB flows
156
- - analytics aggregation
157
- - bounded concurrency helpers and analytics cache-key behavior
158
- - browser-export rendering helpers
159
- - Codex CLI parsing helpers
160
- - interactive-mode inference helpers
161
- - transcript formatting helpers
162
- - MCP stdio protocol round-trips using the real server process
163
- - wrapped UI Vitest suite via `src/ui-package.test.ts`
164
- - packaged UI `bunx --package` launch path via `src/package-ui-smoke.test.ts`
165
- - type-checking via `bun run typecheck`
129
+ - UI component and adapter behavior through the Vitest suite wrapped by `src/ui-package.test.ts`
130
+ - package manifest hard-cut guarantees through `src/package-manifest.test.ts`
166
131
 
167
132
  When changing risky areas:
168
- - CLI changes: update/add tests in `src/lib/codex-exporter-cli.test.ts`
169
- - transcript parsing/rendering: update/add tests in `src/lib/codex-exporter-transcript.test.ts`
170
- - structured transcript parsing/UI event extraction: update/add tests in `src/lib/codex-thread-parser.test.ts`
171
- - DB/filter/target logic: prefer focused unit tests against `src/lib/codex-exporter-db.ts`
172
- - project/thread browsing, delete semantics, and analytics: update/add tests in `src/lib/codex-browser-db.test.ts` and `src/lib/codex-analytics.test.ts`
173
- - shared concurrency behavior: update/add tests in `src/lib/concurrency.test.ts`
174
- - MCP contract changes: update `src/mcp-server.test.ts`
175
- - UI component behavior: update/add Vitest files under `apps/ui/src/**/*.vitest.tsx`
133
+ - Stable API changes: update `src/lib/conversation-api.test.ts` and focused tests under `src/lib/conversation-data/`.
134
+ - Source adapter changes: update the matching `src/lib/conversation-data/*-adapter.ts` tests or add one next to the adapter.
135
+ - Transcript parsing/rendering: update the matching source transcript tests.
136
+ - Codex browsing/delete/analytics: update `src/lib/codex-browser-db.test.ts` and `src/lib/codex-analytics.test.ts`.
137
+ - UI behavior: update/add Vitest files under `apps/ui/src/**/*.vitest.tsx`.
138
+ - API route behavior: add a real UI server/browser smoke when route registration or SSR behavior changes.
176
139
 
177
140
  ## Common Commands
178
141
 
@@ -182,70 +145,16 @@ rtk bun run lint
182
145
  rtk bun run typecheck
183
146
  rtk bun run build
184
147
  rtk bun run coverage
185
- rtk bun run smoke:package-ui
186
- rtk bun run test:perf
187
148
  rtk bun start
188
- rtk bun start -- --help
189
- rtk bun start --interactive
190
- rtk bun run export:claude -- --help
191
- rtk bun run ./src/export-cursor.ts -- --help
192
- rtk bun run mcp
193
- rtk bun run ui:dev
194
- ```
195
-
196
- Packed tarball smoke test:
197
-
198
- ```bash
199
- rtk bun pm pack
200
- package_tgz="$PWD/spiracha-<version>.tgz"
201
- tmp_dir=$(mktemp -d)
202
- cd "$tmp_dir"
203
- printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
204
- rtk bun add "$package_tgz"
205
- rtk bunx spiracha --help
206
- rtk bunx spiracha ui --help
207
- rtk bunx spiracha claude --help
208
- rtk bunx codex-chats --help
209
- rtk bunx codex-chats-claude --help
210
- rtk bun run smoke:package-ui
211
- ```
212
-
213
- Example Codex export:
214
-
215
- ```bash
216
- rtk bunx spiracha
217
- rtk bunx spiracha codex://threads/<thread-id> --no-metadata
218
- rtk bun start --tools --project summer
219
- rtk bun start codex://threads/<thread-id> --output-format txt
220
- ```
221
-
222
- Example Claude export:
223
-
224
- ```bash
225
- rtk bunx spiracha claude /path/to/transcript --output-format txt
226
- rtk bun run export:claude -- /path/to/export-dir --output-format txt
227
- ```
228
-
229
- Example Cursor export:
230
-
231
- ```bash
232
- rtk bunx spiracha cursor list
233
- rtk bunx spiracha cursor export --workspace summer
234
- rtk bunx spiracha cursor export --thread <composer-id> --output-format txt
235
- rtk bunx spiracha cursor recover --workspace summer --apply
149
+ rtk bun run ui:preview
150
+ rtk bun run --cwd apps/ui test
236
151
  ```
237
152
 
238
153
  ## Notes
239
154
 
240
- - `--project` matches the final `cwd` path segment for both POSIX and Windows-style paths, not the full path.
241
- - Running `codex-chats` or `bun start` with no args enters interactive mode.
242
- - Codex MCP exports must be scoped by at least one of `deeplinks`, `project`, or `cwd`.
243
- - Claude Code direct-history browsing/export, Kiro browsing/export, Antigravity, and OpenCode browsing/export currently ship through the browser UI rather than standalone CLI commands.
244
- - `txt` output is intentionally real plain text, not Markdown with a `.txt` extension.
245
- - The published package is Bun-first. `bin` entrypoints target Bun shebang execution.
246
- - Keep every root-package source module imported by packaged UI server code listed in `package.json.files`.
247
- - The UI package runs `vite` through `bun --bun ...` because its server functions depend on Bun-only modules like `bun:sqlite`.
248
- - Keep UI runtime dependency versions aligned with the root package when both package manifests list the same TanStack/React runtime package; mismatched server-function manifests have broken packaged production builds.
155
+ - Keep root-package source modules imported by the UI available through `@spiracha/lib/*`.
156
+ - The UI package runs Vite through `bun --bun` because server functions depend on Bun-only modules like `bun:sqlite`.
249
157
  - TanStack Start server functions should use `.validator(...)`, not deprecated `.inputValidator(...)`.
250
- - Keep `*-transcript-phase.ts` modules browser-safe. UI client adapters import them directly, so they must not import Node or Bun runtime modules.
251
- - `apps/ui/src/routeTree.gen.ts` is generated and should not be manually edited or lint-formatted.
158
+ - API routes should use route-level `server.handlers`.
159
+ - Keep `*-transcript-phase.ts` modules browser-safe; UI client adapters import them directly.
160
+ - Keep source-specific phase and filtering rules centralized so the UI export flow and stable API select messages consistently.