spiracha 1.5.0 → 2.0.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 (365) hide show
  1. package/AGENTS.md +114 -205
  2. package/README.md +89 -269
  3. package/apps/ui/AGENTS.md +17 -7
  4. package/apps/ui/README.md +34 -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 +206 -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 +124 -0
  11. package/apps/ui/src/components/breadcrumbs.tsx +53 -0
  12. package/apps/ui/src/components/claude-code-sessions-table.tsx +114 -0
  13. package/apps/ui/src/components/claude-code-workspaces-table.tsx +55 -0
  14. package/apps/ui/src/components/cursor-threads-table.tsx +189 -0
  15. package/apps/ui/src/components/cursor-workspaces-table.tsx +140 -0
  16. package/apps/ui/src/components/data-table.tsx +241 -0
  17. package/apps/ui/src/components/delete-confirm-dialog.tsx +88 -0
  18. package/apps/ui/src/components/export-dialog.tsx +184 -0
  19. package/apps/ui/src/components/json-panel.tsx +17 -0
  20. package/apps/ui/src/components/kiro-sessions-table.tsx +112 -0
  21. package/apps/ui/src/components/kiro-workspaces-table.tsx +53 -0
  22. package/apps/ui/src/components/list-search-input.tsx +18 -0
  23. package/apps/ui/src/components/loading-panel.tsx +23 -0
  24. package/apps/ui/src/components/metadata-section.tsx +31 -0
  25. package/apps/ui/src/components/metric-card.tsx +19 -0
  26. package/apps/ui/src/components/opencode-sessions-table.tsx +128 -0
  27. package/apps/ui/src/components/opencode-workspaces-table.tsx +57 -0
  28. package/apps/ui/src/components/page-header.tsx +33 -0
  29. package/apps/ui/src/components/projects-loading-state.tsx +74 -0
  30. package/apps/ui/src/components/projects-table.tsx +108 -0
  31. package/apps/ui/src/components/qoder-sessions-table.tsx +112 -0
  32. package/apps/ui/src/components/qoder-workspaces-table.tsx +53 -0
  33. package/apps/ui/src/components/recent-threads-list.tsx +52 -0
  34. package/apps/ui/src/components/reload-error-panel.tsx +20 -0
  35. package/apps/ui/src/components/text-document-panel.tsx +19 -0
  36. package/apps/ui/src/components/theme-toggle.tsx +48 -0
  37. package/apps/ui/src/components/threads-table.tsx +202 -0
  38. package/apps/ui/src/components/transcript-view.tsx +552 -0
  39. package/apps/ui/src/components/ui/alert-dialog.tsx +160 -0
  40. package/apps/ui/src/components/ui/badge.tsx +45 -0
  41. package/apps/ui/src/components/ui/button.tsx +62 -0
  42. package/apps/ui/src/components/ui/checkbox.tsx +29 -0
  43. package/apps/ui/src/components/ui/dialog.tsx +137 -0
  44. package/apps/ui/src/components/ui/dropdown-menu.tsx +217 -0
  45. package/apps/ui/src/components/ui/input.tsx +21 -0
  46. package/apps/ui/src/components/ui/scroll-area.tsx +46 -0
  47. package/apps/ui/src/components/ui/select.tsx +163 -0
  48. package/apps/ui/src/components/ui/separator.tsx +28 -0
  49. package/apps/ui/src/components/ui/sheet.tsx +107 -0
  50. package/apps/ui/src/components/ui/skeleton.tsx +7 -0
  51. package/apps/ui/src/components/ui/table.tsx +76 -0
  52. package/apps/ui/src/components/ui/tabs.tsx +71 -0
  53. package/apps/ui/src/components/ui/tooltip.tsx +44 -0
  54. package/apps/ui/src/integrations/tanstack-query/devtools.tsx +6 -0
  55. package/apps/ui/src/integrations/tanstack-query/root-provider.tsx +10 -0
  56. package/apps/ui/src/lib/antigravity-conversation-state.ts +28 -0
  57. package/apps/ui/src/lib/antigravity-queries.ts +33 -0
  58. package/apps/ui/src/lib/antigravity-server.ts +128 -0
  59. package/apps/ui/src/lib/antigravity-transcript-events.ts +335 -0
  60. package/apps/ui/src/lib/claude-code-queries.ts +26 -0
  61. package/apps/ui/src/lib/claude-code-server.ts +75 -0
  62. package/apps/ui/src/lib/claude-code-transcript-events.ts +154 -0
  63. package/apps/ui/src/lib/codex-queries.ts +66 -0
  64. package/apps/ui/src/lib/codex-server.ts +209 -0
  65. package/apps/ui/src/lib/cursor-queries.ts +37 -0
  66. package/apps/ui/src/lib/cursor-server.ts +272 -0
  67. package/apps/ui/src/lib/cursor-transcript-events.ts +229 -0
  68. package/apps/ui/src/lib/download.ts +166 -0
  69. package/apps/ui/src/lib/formatters.ts +149 -0
  70. package/apps/ui/src/lib/kiro-queries.ts +22 -0
  71. package/apps/ui/src/lib/kiro-server.ts +73 -0
  72. package/apps/ui/src/lib/kiro-transcript-events.ts +113 -0
  73. package/apps/ui/src/lib/opencode-queries.ts +37 -0
  74. package/apps/ui/src/lib/opencode-server.ts +73 -0
  75. package/apps/ui/src/lib/opencode-transcript-events.ts +221 -0
  76. package/apps/ui/src/lib/package-metadata.ts +16 -0
  77. package/apps/ui/src/lib/path-utils.ts +13 -0
  78. package/apps/ui/src/lib/qoder-queries.ts +22 -0
  79. package/apps/ui/src/lib/qoder-server.ts +79 -0
  80. package/apps/ui/src/lib/qoder-transcript-events.ts +139 -0
  81. package/apps/ui/src/lib/route-search.ts +68 -0
  82. package/apps/ui/src/lib/settings-store.tsx +59 -0
  83. package/apps/ui/src/lib/source-session-export-server.ts +56 -0
  84. package/apps/ui/src/lib/text-filter.ts +22 -0
  85. package/apps/ui/src/lib/thread-id.ts +3 -0
  86. package/apps/ui/src/lib/thread-transcript-stats.ts +57 -0
  87. package/apps/ui/src/lib/utils.ts +7 -0
  88. package/apps/ui/src/routeTree.gen.ts +730 -0
  89. package/apps/ui/src/router.tsx +20 -0
  90. package/apps/ui/src/routes/$threadId.tsx +22 -0
  91. package/apps/ui/src/routes/__root.tsx +127 -0
  92. package/apps/ui/src/routes/analytics.tsx +143 -0
  93. package/apps/ui/src/routes/antigravity-conversations.$conversationId.tsx +438 -0
  94. package/apps/ui/src/routes/antigravity.$workspaceKey.tsx +127 -0
  95. package/apps/ui/src/routes/antigravity.index.tsx +51 -0
  96. package/apps/ui/src/routes/api.v1.conversation-query.ts +12 -0
  97. package/apps/ui/src/routes/api.v1.conversations.$source.$id.export.ts +12 -0
  98. package/apps/ui/src/routes/api.v1.conversations.$source.$id.ts +12 -0
  99. package/apps/ui/src/routes/api.v1.conversations.ts +12 -0
  100. package/apps/ui/src/routes/api.v1.resolve.ts +12 -0
  101. package/apps/ui/src/routes/api.v1.sources.ts +12 -0
  102. package/apps/ui/src/routes/claude-code-sessions.$sessionId.tsx +342 -0
  103. package/apps/ui/src/routes/claude-code.$workspaceKey.tsx +135 -0
  104. package/apps/ui/src/routes/claude-code.index.tsx +48 -0
  105. package/apps/ui/src/routes/codex.$project.tsx +390 -0
  106. package/apps/ui/src/routes/codex.index.tsx +116 -0
  107. package/apps/ui/src/routes/cursor-threads.$composerId.tsx +435 -0
  108. package/apps/ui/src/routes/cursor.$workspaceKey.tsx +416 -0
  109. package/apps/ui/src/routes/cursor.index.tsx +120 -0
  110. package/apps/ui/src/routes/index.tsx +124 -0
  111. package/apps/ui/src/routes/kiro-sessions.$sessionId.tsx +345 -0
  112. package/apps/ui/src/routes/kiro.$workspaceKey.tsx +136 -0
  113. package/apps/ui/src/routes/kiro.index.tsx +48 -0
  114. package/apps/ui/src/routes/opencode-sessions.$sessionId.tsx +334 -0
  115. package/apps/ui/src/routes/opencode.$workspaceKey.tsx +135 -0
  116. package/apps/ui/src/routes/opencode.index.tsx +48 -0
  117. package/apps/ui/src/routes/qoder-sessions.$sessionId.tsx +341 -0
  118. package/apps/ui/src/routes/qoder.$workspaceKey.tsx +139 -0
  119. package/apps/ui/src/routes/qoder.index.tsx +48 -0
  120. package/apps/ui/src/routes/settings.tsx +91 -0
  121. package/apps/ui/src/routes/threads.$threadId.tsx +619 -0
  122. package/apps/ui/src/styles.css +122 -0
  123. package/apps/ui/tsconfig.json +29 -0
  124. package/apps/ui/vite.config.ts +84 -0
  125. package/bin/spiracha.ts +32 -0
  126. package/package.json +46 -73
  127. package/src/client.ts +290 -0
  128. package/src/lib/antigravity-db.ts +213 -19
  129. package/src/lib/antigravity-exporter-types.ts +1 -0
  130. package/src/lib/codex-analytics.ts +1 -1
  131. package/src/lib/codex-browser-db.ts +410 -74
  132. package/src/lib/codex-browser-export.ts +6 -14
  133. package/src/lib/codex-browser-types.ts +1 -1
  134. package/src/lib/{codex-exporter-types.ts → codex-thread-types.ts} +2 -30
  135. package/src/lib/{codex-exporter-transcript.ts → codex-transcript-renderer.ts} +64 -28
  136. package/src/lib/conversation-api.ts +792 -0
  137. package/src/lib/conversation-data/adapter-helpers.ts +110 -0
  138. package/src/lib/conversation-data/antigravity-adapter.ts +148 -0
  139. package/src/lib/conversation-data/claude-code-adapter.ts +175 -0
  140. package/src/lib/conversation-data/codex-adapter.ts +245 -0
  141. package/src/lib/conversation-data/cursor-adapter.ts +171 -0
  142. package/src/lib/conversation-data/index.ts +311 -0
  143. package/src/lib/conversation-data/kiro-adapter.ts +140 -0
  144. package/src/lib/conversation-data/message-selector.ts +37 -0
  145. package/src/lib/conversation-data/opencode-adapter.ts +180 -0
  146. package/src/lib/conversation-data/path-match.ts +79 -0
  147. package/src/lib/conversation-data/qoder-adapter.ts +230 -0
  148. package/src/lib/conversation-data/types.ts +116 -0
  149. package/src/lib/cursor-db.ts +67 -21
  150. package/src/lib/cursor-exporter-types.ts +0 -19
  151. package/src/lib/qoder-acp-client.ts +268 -0
  152. package/src/lib/qoder-db.ts +1601 -0
  153. package/src/lib/qoder-exporter-types.ts +114 -0
  154. package/src/lib/qoder-transcript-phase.ts +41 -0
  155. package/src/lib/qoder-transcript.ts +112 -0
  156. package/apps/ui/dist/client/assets/_threadId-CAIeH5mq.js +0 -1
  157. package/apps/ui/dist/client/assets/analytics-DOy1b6Sh.js +0 -1
  158. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DqySVO2K.js +0 -7
  159. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-KAcXtNxI.js +0 -1
  160. package/apps/ui/dist/client/assets/antigravity-keychain-panel-B77qJz6f.js +0 -1
  161. package/apps/ui/dist/client/assets/antigravity._workspaceKey-B3NM6gRH.js +0 -1
  162. package/apps/ui/dist/client/assets/antigravity._workspaceKey-ByitGWki.js +0 -1
  163. package/apps/ui/dist/client/assets/antigravity.index-DP9JC2P9.js +0 -1
  164. package/apps/ui/dist/client/assets/antigravity.index-DgW25FEV.js +0 -1
  165. package/apps/ui/dist/client/assets/badge-C3i4OKs8.js +0 -1
  166. package/apps/ui/dist/client/assets/checkbox-CdHitXWQ.js +0 -1
  167. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-8pQ55ci2.js +0 -1
  168. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-DVz5UmtU.js +0 -1
  169. package/apps/ui/dist/client/assets/claude-code._workspaceKey-BBKskSum.js +0 -1
  170. package/apps/ui/dist/client/assets/claude-code._workspaceKey-OkikMUFs.js +0 -1
  171. package/apps/ui/dist/client/assets/claude-code.index-Cwu76dbb.js +0 -1
  172. package/apps/ui/dist/client/assets/claude-code.index-D6eMd08t.js +0 -1
  173. package/apps/ui/dist/client/assets/createServerFn-B-KkwmHU.js +0 -3
  174. package/apps/ui/dist/client/assets/cursor-threads._composerId-CmBFclK8.js +0 -1
  175. package/apps/ui/dist/client/assets/cursor-threads._composerId-hBWlP1D-.js +0 -1
  176. package/apps/ui/dist/client/assets/cursor._workspaceKey-BFPkIRi-.js +0 -1
  177. package/apps/ui/dist/client/assets/cursor._workspaceKey-CaAZjGmm.js +0 -1
  178. package/apps/ui/dist/client/assets/cursor.index-8y4o20kb.js +0 -2
  179. package/apps/ui/dist/client/assets/cursor.index-CrnMwDCi.js +0 -1
  180. package/apps/ui/dist/client/assets/data-table-Br78_dk3.js +0 -4
  181. package/apps/ui/dist/client/assets/delete-confirm-dialog-Bxs07u-j.js +0 -7
  182. package/apps/ui/dist/client/assets/dist-B9pyYCVU.js +0 -1
  183. package/apps/ui/dist/client/assets/dist-BrJhN2A0.js +0 -5
  184. package/apps/ui/dist/client/assets/dist-Cmd3AIfD.js +0 -1
  185. package/apps/ui/dist/client/assets/dist-DvMS2965.js +0 -1
  186. package/apps/ui/dist/client/assets/download-Bf0QJKD3.js +0 -1
  187. package/apps/ui/dist/client/assets/dropdown-menu-D5cvPaZt.js +0 -1
  188. package/apps/ui/dist/client/assets/es2015-ad6040dw.js +0 -41
  189. package/apps/ui/dist/client/assets/export-dialog-Dr8d2MqD.js +0 -1
  190. package/apps/ui/dist/client/assets/formatters-BtqyrX_c.js +0 -1
  191. package/apps/ui/dist/client/assets/index-C-STgIH4.js +0 -166
  192. package/apps/ui/dist/client/assets/jsx-runtime-DGeXAQPT.js +0 -1
  193. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-CKgfJ7GR.js +0 -1
  194. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-zvIJHtQF.js +0 -1
  195. package/apps/ui/dist/client/assets/kiro._workspaceKey-DhVuJuZB.js +0 -1
  196. package/apps/ui/dist/client/assets/kiro._workspaceKey-QArsjkTY.js +0 -1
  197. package/apps/ui/dist/client/assets/kiro.index-C-fr4m7i.js +0 -1
  198. package/apps/ui/dist/client/assets/kiro.index-OYgAdtZd.js +0 -1
  199. package/apps/ui/dist/client/assets/metric-card-Dplm0ZiM.js +0 -1
  200. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-DLjiTst-.js +0 -1
  201. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-biBwrRbt.js +0 -8
  202. package/apps/ui/dist/client/assets/opencode._workspaceKey-C7OIzMOJ.js +0 -1
  203. package/apps/ui/dist/client/assets/opencode._workspaceKey-sBakX0oI.js +0 -1
  204. package/apps/ui/dist/client/assets/opencode.index-Bl_kNs9N.js +0 -1
  205. package/apps/ui/dist/client/assets/opencode.index-CN53bVmb.js +0 -1
  206. package/apps/ui/dist/client/assets/page-header-Cwa3p6Tl.js +0 -1
  207. package/apps/ui/dist/client/assets/preload-helper-B8fFrdxC.js +0 -1
  208. package/apps/ui/dist/client/assets/projects._project-D8WloxQN.js +0 -1
  209. package/apps/ui/dist/client/assets/projects._project-DSDwH4NF.js +0 -1
  210. package/apps/ui/dist/client/assets/projects.index-5xRtuJdX.js +0 -3
  211. package/apps/ui/dist/client/assets/projects.index-DEfhWqa8.js +0 -1
  212. package/apps/ui/dist/client/assets/react-dom-DL96Jor4.js +0 -1
  213. package/apps/ui/dist/client/assets/refresh-ccw-BgKjOiA6.js +0 -1
  214. package/apps/ui/dist/client/assets/reload-error-panel-AHqu0akK.js +0 -1
  215. package/apps/ui/dist/client/assets/routes-DnzF_9CX.js +0 -1
  216. package/apps/ui/dist/client/assets/scroll-text-fM0sMOB3.js +0 -1
  217. package/apps/ui/dist/client/assets/select-CYF6pF37.js +0 -1
  218. package/apps/ui/dist/client/assets/settings-Dx70jgP_.js +0 -1
  219. package/apps/ui/dist/client/assets/sqlite-error-B6uZjUe8.js +0 -1
  220. package/apps/ui/dist/client/assets/styles-B7Zi9EFA.css +0 -1
  221. package/apps/ui/dist/client/assets/tabs-CmuhkT-c.js +0 -7
  222. package/apps/ui/dist/client/assets/text-filter-DVAZySUS.js +0 -2
  223. package/apps/ui/dist/client/assets/thread-transcript-stats-BUNz6u7F.js +0 -1
  224. package/apps/ui/dist/client/assets/threads._threadId-BB9tTsV4.js +0 -1
  225. package/apps/ui/dist/client/assets/threads._threadId-BMRSFow3.js +0 -1
  226. package/apps/ui/dist/client/assets/useMutation-BSFult2i.js +0 -1
  227. package/apps/ui/dist/client/assets/useQuery-CjINKZf1.js +0 -1
  228. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CQ8Jjs3B.js +0 -387
  229. package/apps/ui/dist/server/assets/_threadId-B6SrBR9E.js +0 -6
  230. package/apps/ui/dist/server/assets/analytics-CYP_LT5Y.js +0 -16
  231. package/apps/ui/dist/server/assets/analytics-CtpOMVMO.js +0 -146
  232. package/apps/ui/dist/server/assets/antigravity-conversation-state-HgzS302O.js +0 -16
  233. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BKOyL2T6.js +0 -613
  234. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-D426O-64.js +0 -11
  235. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-eS87Dx7g.js +0 -20
  236. package/apps/ui/dist/server/assets/antigravity-db-Bh8_U9uw.js +0 -580
  237. package/apps/ui/dist/server/assets/antigravity-keychain-DOiuHDwK.js +0 -126
  238. package/apps/ui/dist/server/assets/antigravity-keychain-panel-CC7FLmAK.js +0 -55
  239. package/apps/ui/dist/server/assets/antigravity-queries-CGrJO9Vr.js +0 -37
  240. package/apps/ui/dist/server/assets/antigravity-server-CHRjVFqN.js +0 -114
  241. package/apps/ui/dist/server/assets/antigravity._workspaceKey-3m_MzNFA.js +0 -11
  242. package/apps/ui/dist/server/assets/antigravity._workspaceKey-B0QeYUOh.js +0 -28
  243. package/apps/ui/dist/server/assets/antigravity._workspaceKey-C3kP-qyN.js +0 -210
  244. package/apps/ui/dist/server/assets/antigravity.index-CPCYkqCi.js +0 -104
  245. package/apps/ui/dist/server/assets/antigravity.index-DudTB3Tq.js +0 -11
  246. package/apps/ui/dist/server/assets/badge-EvdhKK_Z.js +0 -26
  247. package/apps/ui/dist/server/assets/button-CmTDnzOn.js +0 -46
  248. package/apps/ui/dist/server/assets/checkbox-C0hovF41.js +0 -19
  249. package/apps/ui/dist/server/assets/claude-code-db-Ik3VStKZ.js +0 -361
  250. package/apps/ui/dist/server/assets/claude-code-queries-Cgzi4K-e.js +0 -37
  251. package/apps/ui/dist/server/assets/claude-code-server-PfraClXS.js +0 -72
  252. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-C55oe6zj.js +0 -18
  253. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-D1RYYi3j.js +0 -473
  254. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-DSvPLEUL.js +0 -11
  255. package/apps/ui/dist/server/assets/claude-code-transcript-C-bxh3cS.js +0 -139
  256. package/apps/ui/dist/server/assets/claude-code-transcript-phase-DmUMc8VU.js +0 -10
  257. package/apps/ui/dist/server/assets/claude-code._workspaceKey-B5Xg_-tE.js +0 -28
  258. package/apps/ui/dist/server/assets/claude-code._workspaceKey-BPlzyXPa.js +0 -11
  259. package/apps/ui/dist/server/assets/claude-code._workspaceKey-DqDve2wl.js +0 -191
  260. package/apps/ui/dist/server/assets/claude-code.index-B7yYR7dD.js +0 -92
  261. package/apps/ui/dist/server/assets/claude-code.index-BUHThG1W.js +0 -11
  262. package/apps/ui/dist/server/assets/codex-queries-CtgeZ7VL.js +0 -99
  263. package/apps/ui/dist/server/assets/codex-server-CGXU4H8-.js +0 -2294
  264. package/apps/ui/dist/server/assets/concurrency-VXtYvlGh.js +0 -18
  265. package/apps/ui/dist/server/assets/createServerRpc-CF_DEwnm.js +0 -12
  266. package/apps/ui/dist/server/assets/createSsrRpc-C754NPki.js +0 -16
  267. package/apps/ui/dist/server/assets/cursor-db-CZnYy7aT.js +0 -830
  268. package/apps/ui/dist/server/assets/cursor-exporter-types-CI3goo-c.js +0 -34
  269. package/apps/ui/dist/server/assets/cursor-queries-NCIM0Nat.js +0 -67
  270. package/apps/ui/dist/server/assets/cursor-recovery-CXpO8KcD.js +0 -361
  271. package/apps/ui/dist/server/assets/cursor-server-DNu52A3K.js +0 -213
  272. package/apps/ui/dist/server/assets/cursor-threads._composerId-BB0Y_Mao.js +0 -11
  273. package/apps/ui/dist/server/assets/cursor-threads._composerId-Ckn6ItHI.js +0 -582
  274. package/apps/ui/dist/server/assets/cursor-threads._composerId-p9-ARAzc.js +0 -18
  275. package/apps/ui/dist/server/assets/cursor-transcript-B7tGnqtn.js +0 -125
  276. package/apps/ui/dist/server/assets/cursor._workspaceKey-CZuohIUL.js +0 -28
  277. package/apps/ui/dist/server/assets/cursor._workspaceKey-DPp5JSjy.js +0 -401
  278. package/apps/ui/dist/server/assets/cursor._workspaceKey-nmg3YIOQ.js +0 -11
  279. package/apps/ui/dist/server/assets/cursor.index-CcsX7DG0.js +0 -11
  280. package/apps/ui/dist/server/assets/cursor.index-DkWT-mxw.js +0 -189
  281. package/apps/ui/dist/server/assets/data-table-Cdct823O.js +0 -189
  282. package/apps/ui/dist/server/assets/delete-confirm-dialog-BcBNCxWB.js +0 -144
  283. package/apps/ui/dist/server/assets/download-DMmiy1xf.js +0 -92
  284. package/apps/ui/dist/server/assets/dropdown-menu-Dy_9t6TN.js +0 -36
  285. package/apps/ui/dist/server/assets/empty-plugin-adapters-B3lHh1La.js +0 -5
  286. package/apps/ui/dist/server/assets/export-dialog-D88ze9Gy.js +0 -240
  287. package/apps/ui/dist/server/assets/formatters-FJaGZgJk.js +0 -91
  288. package/apps/ui/dist/server/assets/kiro-db--fXrED_-.js +0 -552
  289. package/apps/ui/dist/server/assets/kiro-queries-CzNlM2ok.js +0 -37
  290. package/apps/ui/dist/server/assets/kiro-server-9WRxg2Au.js +0 -72
  291. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-CRY2c7YO.js +0 -11
  292. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-F1UlwxmR.js +0 -449
  293. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-bvTulT7C.js +0 -18
  294. package/apps/ui/dist/server/assets/kiro-transcript-DoekQBaH.js +0 -112
  295. package/apps/ui/dist/server/assets/kiro-transcript-phase-CJG40nQg.js +0 -27
  296. package/apps/ui/dist/server/assets/kiro._workspaceKey-BDe9sQwo.js +0 -11
  297. package/apps/ui/dist/server/assets/kiro._workspaceKey-CJsjgNwO.js +0 -28
  298. package/apps/ui/dist/server/assets/kiro._workspaceKey-D_-4Qb7y.js +0 -193
  299. package/apps/ui/dist/server/assets/kiro.index-C__-UROk.js +0 -11
  300. package/apps/ui/dist/server/assets/kiro.index-CmTbqeYj.js +0 -93
  301. package/apps/ui/dist/server/assets/loading-panel-BGFnWseS.js +0 -27
  302. package/apps/ui/dist/server/assets/metric-card-ByEeLu0r.js +0 -23
  303. package/apps/ui/dist/server/assets/model-label-B1NWGc65.js +0 -13
  304. package/apps/ui/dist/server/assets/opencode-db-BM7KjOzc.js +0 -397
  305. package/apps/ui/dist/server/assets/opencode-queries-BeNYXnQv.js +0 -50
  306. package/apps/ui/dist/server/assets/opencode-server-BpQ_kRze.js +0 -72
  307. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-CGQ-t0vD.js +0 -518
  308. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-D8Q7in_Z.js +0 -18
  309. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-DKOvi0lV.js +0 -11
  310. package/apps/ui/dist/server/assets/opencode-think-tags-CAoD-EcZ.js +0 -87
  311. package/apps/ui/dist/server/assets/opencode-transcript-BNTcGNym.js +0 -141
  312. package/apps/ui/dist/server/assets/opencode-transcript-phase-OqLkiQD0.js +0 -32
  313. package/apps/ui/dist/server/assets/opencode._workspaceKey-BdqcWHw1.js +0 -11
  314. package/apps/ui/dist/server/assets/opencode._workspaceKey-CfH96HTT.js +0 -28
  315. package/apps/ui/dist/server/assets/opencode._workspaceKey-DdbHPDrO.js +0 -207
  316. package/apps/ui/dist/server/assets/opencode.index-BbVzkJXP.js +0 -11
  317. package/apps/ui/dist/server/assets/opencode.index-Vh_Gq_1L.js +0 -93
  318. package/apps/ui/dist/server/assets/page-header-VNSaM3xd.js +0 -29
  319. package/apps/ui/dist/server/assets/path-transforms-DL2IwtYd.js +0 -31
  320. package/apps/ui/dist/server/assets/projects._project-4io5LO0E.js +0 -20
  321. package/apps/ui/dist/server/assets/projects._project-Bshqk7JA.js +0 -12
  322. package/apps/ui/dist/server/assets/projects._project-D6ZoGhJ8.js +0 -395
  323. package/apps/ui/dist/server/assets/projects.index-BLXOx5eL.js +0 -12
  324. package/apps/ui/dist/server/assets/projects.index-BkLiF2FF.js +0 -182
  325. package/apps/ui/dist/server/assets/projects.index-DesYXwfi.js +0 -14
  326. package/apps/ui/dist/server/assets/reload-error-panel-BJMxY3U1.js +0 -25
  327. package/apps/ui/dist/server/assets/route-search-ts4W9MJ9.js +0 -38
  328. package/apps/ui/dist/server/assets/router-Sac2DGk6.js +0 -518
  329. package/apps/ui/dist/server/assets/routes-Bsact1uB.js +0 -184
  330. package/apps/ui/dist/server/assets/routes-BzkJgq4W.js +0 -34
  331. package/apps/ui/dist/server/assets/select-GW76p-ld.js +0 -76
  332. package/apps/ui/dist/server/assets/settings-OayxIYQQ.js +0 -100
  333. package/apps/ui/dist/server/assets/settings-store-DpEJEQ7M.js +0 -52
  334. package/apps/ui/dist/server/assets/shared-DyhChtHf.js +0 -137
  335. package/apps/ui/dist/server/assets/source-session-export-server-DNutCawb.js +0 -38
  336. package/apps/ui/dist/server/assets/sqlite-error-LZDrnxdd.js +0 -13
  337. package/apps/ui/dist/server/assets/start-B_HFwkkk.js +0 -4
  338. package/apps/ui/dist/server/assets/tabs-DkaChNVg.js +0 -501
  339. package/apps/ui/dist/server/assets/text-filter-CGKxMCKt.js +0 -36
  340. package/apps/ui/dist/server/assets/thread-transcript-stats-Dh34mt2u.js +0 -45
  341. package/apps/ui/dist/server/assets/threads._threadId-BSSK4nkI.js +0 -26
  342. package/apps/ui/dist/server/assets/threads._threadId-BeXEc4Lo.js +0 -648
  343. package/apps/ui/dist/server/assets/threads._threadId-Ci0S4mKU.js +0 -18
  344. package/apps/ui/dist/server/assets/ui-export-files-BHLX9bhN.js +0 -83
  345. package/apps/ui/dist/server/assets/utils-C_uf36nf.js +0 -8
  346. package/apps/ui/dist/server/server.js +0 -5895
  347. package/bin/codex-chats-claude.js +0 -5
  348. package/bin/codex-chats.js +0 -5
  349. package/bin/spiracha.js +0 -5
  350. package/src/export-chats.ts +0 -120
  351. package/src/export-claude.ts +0 -36
  352. package/src/export-cursor.ts +0 -244
  353. package/src/lib/claude-exporter.ts +0 -864
  354. package/src/lib/codex-exporter-cli.ts +0 -277
  355. package/src/lib/codex-exporter-db.ts +0 -319
  356. package/src/lib/codex-exporter.ts +0 -115
  357. package/src/lib/cursor-exporter.ts +0 -266
  358. package/src/lib/interactive-cli.ts +0 -433
  359. package/src/lib/native-open.ts +0 -54
  360. package/src/mcp-server.ts +0 -137
  361. package/src/spiracha.ts +0 -116
  362. package/src/ui-cli.ts +0 -310
  363. /package/apps/ui/{dist/client → public}/icon.svg +0 -0
  364. /package/apps/ui/{dist/client → public}/manifest.json +0 -0
  365. /package/apps/ui/{dist/client → public}/robots.txt +0 -0
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { runExportClaudeCli } from '../src/export-claude.ts';
4
-
5
- await runExportClaudeCli();
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { runExportChatsCli } from '../src/export-chats.ts';
4
-
5
- await runExportChatsCli();
package/bin/spiracha.js DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { runSpirachaCli } from '../src/spiracha.ts';
4
-
5
- await runSpirachaCli();
@@ -1,120 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { lstat } from 'node:fs/promises';
4
- import path from 'node:path';
5
- import { stdin as input, stdout as output } from 'node:process';
6
- import { createInterface } from 'node:readline/promises';
7
- import { getCodexHelpText, parseCodexCliArgs, runCodexExport } from './lib/codex-exporter';
8
- import type { InteractiveExportResult } from './lib/interactive-cli';
9
- import { openPathNatively } from './lib/native-open';
10
- import { CliUsageError } from './lib/shared';
11
-
12
- export const runExportChatsCli = async (argv = process.argv.slice(2)): Promise<void> => {
13
- if (argv.includes('--help') || argv.includes('-h')) {
14
- console.log(getCodexHelpText());
15
- return;
16
- }
17
-
18
- try {
19
- if (shouldRunInteractive(argv)) {
20
- await runInteractiveCliFlow();
21
- return;
22
- }
23
-
24
- await runCodexCliFlow(argv);
25
- } catch (error) {
26
- if (error instanceof CliUsageError) {
27
- console.error(error.message);
28
- console.error('');
29
- console.error(getCodexHelpText());
30
- process.exit(1);
31
- }
32
-
33
- if (error instanceof Error) {
34
- console.error(error.message);
35
- process.exit(1);
36
- }
37
-
38
- throw error;
39
- }
40
- };
41
-
42
- const shouldRunInteractive = (argv: string[]): boolean => {
43
- return argv.length === 0 || argv.includes('--interactive');
44
- };
45
-
46
- const runInteractiveCliFlow = async (): Promise<void> => {
47
- const { runInteractiveExport } = await import('./lib/interactive-cli');
48
- const result = await runInteractiveExport();
49
- const targetFolder = await printInteractiveExportResult(result);
50
- await maybeOpenExportFolder(targetFolder);
51
- };
52
-
53
- const runCodexCliFlow = async (argv: string[]): Promise<void> => {
54
- const options = parseCodexCliArgs(argv);
55
- const result = await runCodexExport(options);
56
- printCodexExportResult(result);
57
- };
58
-
59
- const printInteractiveExportResult = async (result: InteractiveExportResult): Promise<string> => {
60
- if (result.mode === 'claude') {
61
- console.log(`Exported ${result.sourcePath} -> ${result.outputPath}`);
62
- return resolveExportFolder(result.outputPath);
63
- }
64
-
65
- printCodexExportFiles(result.files);
66
- printMissingThreadWarnings(result.missingThreadIds);
67
- console.log(`Done. Exported ${result.exportedCount} chat(s) to ${result.outputDir}`);
68
- return result.outputDir;
69
- };
70
-
71
- const printCodexExportResult = (result: Awaited<ReturnType<typeof runCodexExport>>): void => {
72
- printCodexExportFiles(result.files);
73
- printMissingThreadWarnings(result.missingThreadIds);
74
- console.log(`Done. Exported ${result.exportedCount} chat(s) to ${result.outputDir}`);
75
- };
76
-
77
- const printCodexExportFiles = (files: Awaited<ReturnType<typeof runCodexExport>>['files']): void => {
78
- for (const file of files) {
79
- console.log(`Exported ${file.sourcePath} -> ${file.outputPath}`);
80
- }
81
- };
82
-
83
- const printMissingThreadWarnings = (missingThreadIds: string[]): void => {
84
- if (missingThreadIds.length > 0) {
85
- console.warn(
86
- `Warning: ${missingThreadIds.length} requested thread(s) were not found: ${missingThreadIds.join(', ')}`,
87
- );
88
- }
89
- };
90
-
91
- const maybeOpenExportFolder = async (targetFolder: string): Promise<void> => {
92
- const rl = createInterface({ input, output });
93
- try {
94
- while (true) {
95
- const answer = (await rl.question('Open the exported folder now? [y/N]: ')).trim().toLowerCase();
96
- if (!answer || answer === 'n' || answer === 'no') {
97
- return;
98
- }
99
- if (answer === 'y' || answer === 'yes') {
100
- await openPathNatively(targetFolder);
101
- return;
102
- }
103
- console.log('Please answer y or n.');
104
- }
105
- } finally {
106
- rl.close();
107
- }
108
- };
109
-
110
- const resolveExportFolder = async (targetPath: string): Promise<string> => {
111
- const stats = await lstat(targetPath).catch(() => null);
112
- if (stats?.isDirectory()) {
113
- return targetPath;
114
- }
115
- return path.dirname(targetPath);
116
- };
117
-
118
- if (import.meta.main) {
119
- await runExportChatsCli();
120
- }
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { getClaudeHelpText, parseClaudeCliArgs, runClaudeExport } from './lib/claude-exporter';
4
- import { CliUsageError } from './lib/shared';
5
-
6
- export const runExportClaudeCli = async (argv = process.argv.slice(2)): Promise<void> => {
7
- if (argv.includes('--help') || argv.includes('-h')) {
8
- console.log(getClaudeHelpText());
9
- return;
10
- }
11
-
12
- try {
13
- const options = parseClaudeCliArgs(argv);
14
- const result = await runClaudeExport(options);
15
-
16
- console.log(`Exported ${result.sourcePath} -> ${result.outputPath}`);
17
- } catch (error) {
18
- if (error instanceof CliUsageError) {
19
- console.error(error.message);
20
- console.error('');
21
- console.error(getClaudeHelpText());
22
- process.exit(1);
23
- }
24
-
25
- if (error instanceof Error) {
26
- console.error(error.message);
27
- process.exit(1);
28
- }
29
-
30
- throw error;
31
- }
32
- };
33
-
34
- if (import.meta.main) {
35
- await runExportClaudeCli();
36
- }
@@ -1,244 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { stdin as input, stdout as output } from 'node:process';
4
- import { createInterface } from 'node:readline/promises';
5
- import { findCursorWorkspaceGroups, listCursorThreadsForGroup, listCursorWorkspaceGroups } from './lib/cursor-db';
6
- import { getCursorHelpText, parseCursorCliArgs, runCursorExport } from './lib/cursor-exporter';
7
- import { type CursorThreadSummary, type CursorWorkspaceGroup, resolveCursorUserDir } from './lib/cursor-exporter-types';
8
- import { isCursorRunning, pruneCursorThreads, recoverCursorWorkspaceGroup } from './lib/cursor-recovery';
9
- import { CliUsageError } from './lib/shared';
10
-
11
- type CursorSubcommand = 'list' | 'export' | 'recover' | 'prune';
12
-
13
- const PRUNE_CONFIRM_PHRASE = 'delete permanently';
14
-
15
- const resolveSubcommand = (argv: string[]): { subcommand: CursorSubcommand; rest: string[] } => {
16
- const [first, ...rest] = argv;
17
- if (first === 'list' || first === 'export' || first === 'recover' || first === 'prune') {
18
- return { rest, subcommand: first };
19
- }
20
-
21
- // Default to export so `spiracha cursor <workspace>` behaves like the other exporters.
22
- return { rest: argv, subcommand: 'export' };
23
- };
24
-
25
- const promptLine = async (question: string): Promise<string> => {
26
- const rl = createInterface({ input, output });
27
- try {
28
- return (await rl.question(question)).trim();
29
- } finally {
30
- rl.close();
31
- }
32
- };
33
-
34
- const ensureCursorClosed = async (): Promise<void> => {
35
- if (await isCursorRunning()) {
36
- throw new Error('Cursor is still running. Quit Cursor completely, then run again with --apply.');
37
- }
38
- };
39
-
40
- const runCursorList = async (argv: string[]): Promise<void> => {
41
- const query = argv.find((arg) => !arg.startsWith('-')) ?? null;
42
- const groups = await listCursorWorkspaceGroups();
43
- const filtered = query ? findCursorWorkspaceGroups(groups, query) : groups;
44
-
45
- if (filtered.length === 0) {
46
- console.log('No Cursor workspaces found.');
47
- return;
48
- }
49
-
50
- console.log(`Found ${filtered.length} Cursor workspace(s):\n`);
51
- for (const group of filtered) {
52
- const recover = group.needsRecovery ? ' [needs recovery]' : '';
53
- console.log(`${group.label}${recover}`);
54
- console.log(` key: ${group.key}`);
55
- console.log(` threads: ~${group.threadCount} buckets: ${group.buckets.length}`);
56
- }
57
- console.log('\nExport with: spiracha cursor export --workspace <name> --tools --commentary');
58
- };
59
-
60
- const runCursorExportCommand = async (argv: string[]): Promise<void> => {
61
- const options = parseCursorCliArgs(argv);
62
- const result = await runCursorExport(options);
63
-
64
- if (result.exportedCount === 0) {
65
- console.log('No threads were exported.');
66
- } else {
67
- console.log(`Exported ${result.exportedCount} thread(s) to ${result.outputDir}`);
68
- for (const file of result.files) {
69
- console.log(` ${file.composerId} -> ${file.outputPath}`);
70
- }
71
- }
72
-
73
- if (result.missingThreadIds.length > 0) {
74
- console.log(`Skipped ${result.missingThreadIds.length} thread(s) with no exportable content.`);
75
- }
76
- };
77
-
78
- const resolveSingleGroupOrThrow = (groups: CursorWorkspaceGroup[], query: string): CursorWorkspaceGroup => {
79
- const matched = findCursorWorkspaceGroups(groups, query);
80
- if (matched.length === 0) {
81
- throw new Error(`No Cursor workspace matched query: ${query}`);
82
- }
83
-
84
- if (matched.length > 1) {
85
- const keys = matched.map((group) => ` - ${group.key}`).join('\n');
86
- throw new Error(`Query "${query}" matched multiple workspaces. Refine it:\n${keys}`);
87
- }
88
-
89
- return matched[0]!;
90
- };
91
-
92
- const runCursorRecover = async (argv: string[]): Promise<void> => {
93
- const apply = argv.includes('--apply');
94
- const query = argv.find((arg) => !arg.startsWith('-'));
95
- if (!query) {
96
- throw new CliUsageError('recover requires a workspace name or path.');
97
- }
98
-
99
- if (apply) {
100
- await ensureCursorClosed();
101
- }
102
-
103
- const group = resolveSingleGroupOrThrow(await listCursorWorkspaceGroups(), query);
104
- const result = await recoverCursorWorkspaceGroup(group, apply);
105
-
106
- console.log(`[${group.label}] merges ${result.mergedThreadCount} thread(s) into bucket ${result.activeBucketId}`);
107
- for (const thread of result.threads) {
108
- console.log(` - ${thread.name} [${thread.composerId.slice(0, 8)}] bubbles=${thread.bubbleCount}`);
109
- }
110
-
111
- if (!apply) {
112
- console.log('\nDry run only. Re-run with --apply after quitting Cursor.');
113
- return;
114
- }
115
-
116
- console.log(
117
- `\nRecovery complete: relinked ${result.relinkedHeaderCount}, added ${result.addedHeaderCount} header(s).`,
118
- );
119
- console.log('Reopen the project in Cursor and check Chat History.');
120
- };
121
-
122
- const selectPruneThreads = async (argv: string[]): Promise<CursorThreadSummary[]> => {
123
- const threadIds = collectFlagValues(argv, ['--thread', '-t']);
124
- const query = collectFlagValues(argv, ['--workspace', '-w'])[0] ?? argv.find((arg) => !arg.startsWith('-'));
125
- const groups = await listCursorWorkspaceGroups();
126
-
127
- if (threadIds.length > 0) {
128
- const all = (await Promise.all(groups.map((group) => listCursorThreadsForGroup(group)))).flat();
129
- return all.filter(
130
- (thread) =>
131
- threadIds.includes(thread.composerId) || threadIds.some((id) => thread.composerId.startsWith(id)),
132
- );
133
- }
134
-
135
- if (!query) {
136
- throw new CliUsageError('prune requires a --workspace or one or more --thread ids.');
137
- }
138
-
139
- const group = resolveSingleGroupOrThrow(groups, query);
140
- return listCursorThreadsForGroup(group);
141
- };
142
-
143
- const collectFlagValues = (argv: string[], flags: string[]): string[] => {
144
- const values: string[] = [];
145
- for (let index = 0; index < argv.length; index += 1) {
146
- if (flags.includes(argv[index] as string)) {
147
- const value = argv[index + 1];
148
- if (value && !value.startsWith('-')) {
149
- values.push(value);
150
- }
151
- }
152
- }
153
-
154
- return values;
155
- };
156
-
157
- const runCursorPrune = async (argv: string[]): Promise<void> => {
158
- const apply = argv.includes('--apply');
159
- const threads = await selectPruneThreads(argv);
160
-
161
- if (threads.length === 0) {
162
- console.log('No matching threads to prune.');
163
- return;
164
- }
165
-
166
- console.log(`Prune target: ${threads.length} thread(s)`);
167
- for (const thread of threads) {
168
- console.log(` - ${thread.name} [${thread.composerId.slice(0, 8)}] bubbles=${thread.bubbleCount}`);
169
- }
170
-
171
- if (!apply) {
172
- const preview = await pruneCursorThreads(threads, false);
173
- console.log(`\nDry run: would delete ${preview.bubblesDeleted} bubble(s) across ${threads.length} thread(s).`);
174
- console.log('Re-run with --apply after quitting Cursor.');
175
- return;
176
- }
177
-
178
- await ensureCursorClosed();
179
- console.log(`\nThis permanently deletes ${threads.length} thread(s) and their on-disk transcripts.`);
180
- const typed = await promptLine(`Type "${PRUNE_CONFIRM_PHRASE}" to confirm: `);
181
- if (typed !== PRUNE_CONFIRM_PHRASE) {
182
- console.log('Confirmation failed. Nothing was deleted.');
183
- return;
184
- }
185
-
186
- const result = await pruneCursorThreads(threads, true);
187
- console.log(
188
- `Deleted ${result.bubblesDeleted} bubble(s), ${result.headersRemoved} header(s), ` +
189
- `${result.transcriptDirsRemoved} transcript dir(s) across ${result.composerIds.length} thread(s).`,
190
- );
191
- };
192
-
193
- export const runExportCursorCli = async (argv = process.argv.slice(2)): Promise<void> => {
194
- if (argv.includes('--help') || argv.includes('-h') || argv.length === 0) {
195
- console.log(getCursorHelpText());
196
- return;
197
- }
198
-
199
- const { subcommand, rest } = resolveSubcommand(argv);
200
-
201
- try {
202
- await dispatchCursorSubcommand(subcommand, rest);
203
- } catch (error) {
204
- if (error instanceof CliUsageError) {
205
- console.error(error.message);
206
- console.error('');
207
- console.error(getCursorHelpText());
208
- process.exit(1);
209
- }
210
-
211
- if (error instanceof Error) {
212
- console.error(error.message);
213
- process.exit(1);
214
- }
215
-
216
- throw error;
217
- }
218
- };
219
-
220
- const dispatchCursorSubcommand = async (subcommand: CursorSubcommand, rest: string[]): Promise<void> => {
221
- if (subcommand === 'list') {
222
- await runCursorList(rest);
223
- return;
224
- }
225
-
226
- if (subcommand === 'recover') {
227
- await runCursorRecover(rest);
228
- return;
229
- }
230
-
231
- if (subcommand === 'prune') {
232
- await runCursorPrune(rest);
233
- return;
234
- }
235
-
236
- await runCursorExportCommand(rest);
237
- };
238
-
239
- // Surfaces the resolved Cursor data dir for diagnostics in error messages.
240
- export const getResolvedCursorUserDir = (): string => resolveCursorUserDir();
241
-
242
- if (import.meta.main) {
243
- await runExportCursorCli();
244
- }