spiracha 1.4.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 (319) hide show
  1. package/AGENTS.md +116 -164
  2. package/README.md +92 -237
  3. package/apps/ui/AGENTS.md +36 -7
  4. package/apps/ui/README.md +79 -6
  5. package/apps/ui/components.json +21 -0
  6. package/apps/ui/package.json +65 -0
  7. package/apps/ui/{dist/client → public}/icon.svg +2 -1
  8. package/apps/ui/src/components/antigravity-conversations-table.tsx +206 -0
  9. package/apps/ui/src/components/antigravity-keychain-panel.tsx +76 -0
  10. package/apps/ui/src/components/antigravity-workspaces-table.tsx +63 -0
  11. package/apps/ui/src/components/app-shell.tsx +124 -0
  12. package/apps/ui/src/components/breadcrumbs.tsx +53 -0
  13. package/apps/ui/src/components/claude-code-sessions-table.tsx +114 -0
  14. package/apps/ui/src/components/claude-code-workspaces-table.tsx +55 -0
  15. package/apps/ui/src/components/cursor-threads-table.tsx +189 -0
  16. package/apps/ui/src/components/cursor-workspaces-table.tsx +140 -0
  17. package/apps/ui/src/components/data-table.tsx +241 -0
  18. package/apps/ui/src/components/delete-confirm-dialog.tsx +88 -0
  19. package/apps/ui/src/components/export-dialog.tsx +184 -0
  20. package/apps/ui/src/components/json-panel.tsx +17 -0
  21. package/apps/ui/src/components/kiro-sessions-table.tsx +112 -0
  22. package/apps/ui/src/components/kiro-workspaces-table.tsx +53 -0
  23. package/apps/ui/src/components/list-search-input.tsx +18 -0
  24. package/apps/ui/src/components/loading-panel.tsx +23 -0
  25. package/apps/ui/src/components/metadata-section.tsx +31 -0
  26. package/apps/ui/src/components/metric-card.tsx +19 -0
  27. package/apps/ui/src/components/opencode-sessions-table.tsx +128 -0
  28. package/apps/ui/src/components/opencode-workspaces-table.tsx +57 -0
  29. package/apps/ui/src/components/page-header.tsx +33 -0
  30. package/apps/ui/src/components/projects-loading-state.tsx +74 -0
  31. package/apps/ui/src/components/projects-table.tsx +108 -0
  32. package/apps/ui/src/components/qoder-sessions-table.tsx +112 -0
  33. package/apps/ui/src/components/qoder-workspaces-table.tsx +53 -0
  34. package/apps/ui/src/components/recent-threads-list.tsx +52 -0
  35. package/apps/ui/src/components/reload-error-panel.tsx +20 -0
  36. package/apps/ui/src/components/text-document-panel.tsx +19 -0
  37. package/apps/ui/src/components/theme-toggle.tsx +48 -0
  38. package/apps/ui/src/components/threads-table.tsx +202 -0
  39. package/apps/ui/src/components/transcript-view.tsx +552 -0
  40. package/apps/ui/src/components/ui/alert-dialog.tsx +160 -0
  41. package/apps/ui/src/components/ui/badge.tsx +45 -0
  42. package/apps/ui/src/components/ui/button.tsx +62 -0
  43. package/apps/ui/src/components/ui/checkbox.tsx +29 -0
  44. package/apps/ui/src/components/ui/dialog.tsx +137 -0
  45. package/apps/ui/src/components/ui/dropdown-menu.tsx +217 -0
  46. package/apps/ui/src/components/ui/input.tsx +21 -0
  47. package/apps/ui/src/components/ui/scroll-area.tsx +46 -0
  48. package/apps/ui/src/components/ui/select.tsx +163 -0
  49. package/apps/ui/src/components/ui/separator.tsx +28 -0
  50. package/apps/ui/src/components/ui/sheet.tsx +107 -0
  51. package/apps/ui/src/components/ui/skeleton.tsx +7 -0
  52. package/apps/ui/src/components/ui/table.tsx +76 -0
  53. package/apps/ui/src/components/ui/tabs.tsx +71 -0
  54. package/apps/ui/src/components/ui/tooltip.tsx +44 -0
  55. package/apps/ui/src/integrations/tanstack-query/devtools.tsx +6 -0
  56. package/apps/ui/src/integrations/tanstack-query/root-provider.tsx +10 -0
  57. package/apps/ui/src/lib/antigravity-conversation-state.ts +28 -0
  58. package/apps/ui/src/lib/antigravity-queries.ts +33 -0
  59. package/apps/ui/src/lib/antigravity-server.ts +128 -0
  60. package/apps/ui/src/lib/antigravity-transcript-events.ts +335 -0
  61. package/apps/ui/src/lib/claude-code-queries.ts +26 -0
  62. package/apps/ui/src/lib/claude-code-server.ts +75 -0
  63. package/apps/ui/src/lib/claude-code-transcript-events.ts +154 -0
  64. package/apps/ui/src/lib/codex-queries.ts +66 -0
  65. package/apps/ui/src/lib/codex-server.ts +209 -0
  66. package/apps/ui/src/lib/cursor-queries.ts +37 -0
  67. package/apps/ui/src/lib/cursor-server.ts +272 -0
  68. package/apps/ui/src/lib/cursor-transcript-events.ts +229 -0
  69. package/apps/ui/src/lib/download.ts +166 -0
  70. package/apps/ui/src/lib/formatters.ts +149 -0
  71. package/apps/ui/src/lib/kiro-queries.ts +22 -0
  72. package/apps/ui/src/lib/kiro-server.ts +73 -0
  73. package/apps/ui/src/lib/kiro-transcript-events.ts +113 -0
  74. package/apps/ui/src/lib/opencode-queries.ts +37 -0
  75. package/apps/ui/src/lib/opencode-server.ts +73 -0
  76. package/apps/ui/src/lib/opencode-transcript-events.ts +221 -0
  77. package/apps/ui/src/lib/package-metadata.ts +16 -0
  78. package/apps/ui/src/lib/path-utils.ts +13 -0
  79. package/apps/ui/src/lib/qoder-queries.ts +22 -0
  80. package/apps/ui/src/lib/qoder-server.ts +79 -0
  81. package/apps/ui/src/lib/qoder-transcript-events.ts +139 -0
  82. package/apps/ui/src/lib/route-search.ts +68 -0
  83. package/apps/ui/src/lib/settings-store.tsx +59 -0
  84. package/apps/ui/src/lib/source-session-export-server.ts +56 -0
  85. package/apps/ui/src/lib/text-filter.ts +22 -0
  86. package/apps/ui/src/lib/thread-id.ts +3 -0
  87. package/apps/ui/src/lib/thread-transcript-stats.ts +57 -0
  88. package/apps/ui/src/lib/utils.ts +7 -0
  89. package/apps/ui/src/routeTree.gen.ts +730 -0
  90. package/apps/ui/src/router.tsx +20 -0
  91. package/apps/ui/src/routes/$threadId.tsx +22 -0
  92. package/apps/ui/src/routes/__root.tsx +127 -0
  93. package/apps/ui/src/routes/analytics.tsx +143 -0
  94. package/apps/ui/src/routes/antigravity-conversations.$conversationId.tsx +438 -0
  95. package/apps/ui/src/routes/antigravity.$workspaceKey.tsx +127 -0
  96. package/apps/ui/src/routes/antigravity.index.tsx +51 -0
  97. package/apps/ui/src/routes/api.v1.conversation-query.ts +12 -0
  98. package/apps/ui/src/routes/api.v1.conversations.$source.$id.export.ts +12 -0
  99. package/apps/ui/src/routes/api.v1.conversations.$source.$id.ts +12 -0
  100. package/apps/ui/src/routes/api.v1.conversations.ts +12 -0
  101. package/apps/ui/src/routes/api.v1.resolve.ts +12 -0
  102. package/apps/ui/src/routes/api.v1.sources.ts +12 -0
  103. package/apps/ui/src/routes/claude-code-sessions.$sessionId.tsx +342 -0
  104. package/apps/ui/src/routes/claude-code.$workspaceKey.tsx +135 -0
  105. package/apps/ui/src/routes/claude-code.index.tsx +48 -0
  106. package/apps/ui/src/routes/codex.$project.tsx +390 -0
  107. package/apps/ui/src/routes/codex.index.tsx +116 -0
  108. package/apps/ui/src/routes/cursor-threads.$composerId.tsx +435 -0
  109. package/apps/ui/src/routes/cursor.$workspaceKey.tsx +416 -0
  110. package/apps/ui/src/routes/cursor.index.tsx +120 -0
  111. package/apps/ui/src/routes/index.tsx +124 -0
  112. package/apps/ui/src/routes/kiro-sessions.$sessionId.tsx +345 -0
  113. package/apps/ui/src/routes/kiro.$workspaceKey.tsx +136 -0
  114. package/apps/ui/src/routes/kiro.index.tsx +48 -0
  115. package/apps/ui/src/routes/opencode-sessions.$sessionId.tsx +334 -0
  116. package/apps/ui/src/routes/opencode.$workspaceKey.tsx +135 -0
  117. package/apps/ui/src/routes/opencode.index.tsx +48 -0
  118. package/apps/ui/src/routes/qoder-sessions.$sessionId.tsx +341 -0
  119. package/apps/ui/src/routes/qoder.$workspaceKey.tsx +139 -0
  120. package/apps/ui/src/routes/qoder.index.tsx +48 -0
  121. package/apps/ui/src/routes/settings.tsx +91 -0
  122. package/apps/ui/src/routes/threads.$threadId.tsx +619 -0
  123. package/apps/ui/src/styles.css +122 -0
  124. package/apps/ui/tsconfig.json +29 -0
  125. package/apps/ui/vite.config.ts +84 -0
  126. package/bin/spiracha.ts +32 -0
  127. package/package.json +50 -60
  128. package/src/client.ts +290 -0
  129. package/src/lib/antigravity-db.ts +213 -19
  130. package/src/lib/antigravity-exporter-types.ts +1 -0
  131. package/src/lib/claude-code-db.ts +655 -0
  132. package/src/lib/claude-code-exporter-types.ts +110 -0
  133. package/src/lib/claude-code-transcript-phase.ts +25 -0
  134. package/src/lib/claude-code-transcript.ts +180 -0
  135. package/src/lib/codex-analytics.ts +1 -1
  136. package/src/lib/codex-browser-db.ts +856 -61
  137. package/src/lib/codex-browser-export.ts +24 -16
  138. package/src/lib/codex-browser-types.ts +1 -1
  139. package/src/lib/codex-thread-cache.ts +17 -1
  140. package/src/lib/{codex-exporter-types.ts → codex-thread-types.ts} +2 -30
  141. package/src/lib/{codex-exporter-transcript.ts → codex-transcript-renderer.ts} +64 -28
  142. package/src/lib/concurrency.ts +25 -0
  143. package/src/lib/conversation-api.ts +792 -0
  144. package/src/lib/conversation-data/adapter-helpers.ts +110 -0
  145. package/src/lib/conversation-data/antigravity-adapter.ts +148 -0
  146. package/src/lib/conversation-data/claude-code-adapter.ts +175 -0
  147. package/src/lib/conversation-data/codex-adapter.ts +245 -0
  148. package/src/lib/conversation-data/cursor-adapter.ts +171 -0
  149. package/src/lib/conversation-data/index.ts +311 -0
  150. package/src/lib/conversation-data/kiro-adapter.ts +140 -0
  151. package/src/lib/conversation-data/message-selector.ts +37 -0
  152. package/src/lib/conversation-data/opencode-adapter.ts +180 -0
  153. package/src/lib/conversation-data/path-match.ts +79 -0
  154. package/src/lib/conversation-data/qoder-adapter.ts +230 -0
  155. package/src/lib/conversation-data/types.ts +116 -0
  156. package/src/lib/cursor-db.ts +67 -21
  157. package/src/lib/cursor-exporter-types.ts +0 -19
  158. package/src/lib/kiro-db.ts +949 -0
  159. package/src/lib/kiro-exporter-types.ts +100 -0
  160. package/src/lib/kiro-transcript-phase.ts +41 -0
  161. package/src/lib/kiro-transcript.ts +115 -0
  162. package/src/lib/opencode-db.ts +610 -0
  163. package/src/lib/opencode-exporter-types.ts +129 -0
  164. package/src/lib/opencode-think-tags.ts +126 -0
  165. package/src/lib/opencode-transcript-phase.ts +50 -0
  166. package/src/lib/opencode-transcript.ts +194 -0
  167. package/src/lib/qoder-acp-client.ts +268 -0
  168. package/src/lib/qoder-db.ts +1601 -0
  169. package/src/lib/qoder-exporter-types.ts +114 -0
  170. package/src/lib/qoder-transcript-phase.ts +41 -0
  171. package/src/lib/qoder-transcript.ts +112 -0
  172. package/src/lib/shared.ts +25 -0
  173. package/src/lib/ui-export-archive.ts +61 -0
  174. package/apps/ui/dist/client/assets/_threadId-CAIeH5mq.js +0 -1
  175. package/apps/ui/dist/client/assets/analytics-DK2jdvmI.js +0 -1
  176. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DmD0sN8X.js +0 -7
  177. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-KAcXtNxI.js +0 -1
  178. package/apps/ui/dist/client/assets/antigravity-keychain-panel-BRHVjFAM.js +0 -1
  179. package/apps/ui/dist/client/assets/antigravity._workspaceKey-ByitGWki.js +0 -1
  180. package/apps/ui/dist/client/assets/antigravity._workspaceKey-CGV7amas.js +0 -1
  181. package/apps/ui/dist/client/assets/antigravity.index-DEEkjlZa.js +0 -1
  182. package/apps/ui/dist/client/assets/antigravity.index-DgW25FEV.js +0 -1
  183. package/apps/ui/dist/client/assets/badge-DfWvPfKF.js +0 -1
  184. package/apps/ui/dist/client/assets/checkbox-CdHitXWQ.js +0 -1
  185. package/apps/ui/dist/client/assets/createServerFn-CgRRVpBH.js +0 -3
  186. package/apps/ui/dist/client/assets/cursor-threads._composerId-CmBFclK8.js +0 -1
  187. package/apps/ui/dist/client/assets/cursor-threads._composerId-Ti2gTm63.js +0 -1
  188. package/apps/ui/dist/client/assets/cursor._workspaceKey-CaAZjGmm.js +0 -1
  189. package/apps/ui/dist/client/assets/cursor._workspaceKey-DzD_c6j9.js +0 -1
  190. package/apps/ui/dist/client/assets/cursor.index-CrnMwDCi.js +0 -1
  191. package/apps/ui/dist/client/assets/cursor.index-PkCFVcl4.js +0 -2
  192. package/apps/ui/dist/client/assets/data-table-Br78_dk3.js +0 -4
  193. package/apps/ui/dist/client/assets/delete-confirm-dialog-BHRmyLHr.js +0 -11
  194. package/apps/ui/dist/client/assets/dist-B9pyYCVU.js +0 -1
  195. package/apps/ui/dist/client/assets/dist-BhZOxAPP.js +0 -1
  196. package/apps/ui/dist/client/assets/dist-DvMS2965.js +0 -1
  197. package/apps/ui/dist/client/assets/download-Bf0QJKD3.js +0 -1
  198. package/apps/ui/dist/client/assets/dropdown-menu-Dy5cLzTy.js +0 -1
  199. package/apps/ui/dist/client/assets/es2015-BkCWttyM.js +0 -41
  200. package/apps/ui/dist/client/assets/export-dialog-C86SYHJn.js +0 -1
  201. package/apps/ui/dist/client/assets/formatters-BM9kB7ed.js +0 -1
  202. package/apps/ui/dist/client/assets/index-CPvAP-jk.js +0 -149
  203. package/apps/ui/dist/client/assets/jsx-runtime-DGeXAQPT.js +0 -1
  204. package/apps/ui/dist/client/assets/metric-card-Dplm0ZiM.js +0 -1
  205. package/apps/ui/dist/client/assets/page-header-Cwa3p6Tl.js +0 -1
  206. package/apps/ui/dist/client/assets/projects._project-Ckf6muWZ.js +0 -1
  207. package/apps/ui/dist/client/assets/projects._project-DSDwH4NF.js +0 -1
  208. package/apps/ui/dist/client/assets/projects.index-DEfhWqa8.js +0 -1
  209. package/apps/ui/dist/client/assets/projects.index-V5ibNZII.js +0 -3
  210. package/apps/ui/dist/client/assets/react-dom-DL96Jor4.js +0 -1
  211. package/apps/ui/dist/client/assets/refresh-ccw-BgKjOiA6.js +0 -1
  212. package/apps/ui/dist/client/assets/reload-error-panel-AHqu0akK.js +0 -1
  213. package/apps/ui/dist/client/assets/routes-Df2tgpyd.js +0 -1
  214. package/apps/ui/dist/client/assets/scroll-text-fM0sMOB3.js +0 -1
  215. package/apps/ui/dist/client/assets/select-Bf2GwfPR.js +0 -1
  216. package/apps/ui/dist/client/assets/settings-5VQIzME0.js +0 -1
  217. package/apps/ui/dist/client/assets/sqlite-error-B6uZjUe8.js +0 -1
  218. package/apps/ui/dist/client/assets/styles-BhRkXgwB.css +0 -1
  219. package/apps/ui/dist/client/assets/tabs-OO4VU5KR.js +0 -7
  220. package/apps/ui/dist/client/assets/text-filter-DVAZySUS.js +0 -2
  221. package/apps/ui/dist/client/assets/threads._threadId-BB9tTsV4.js +0 -1
  222. package/apps/ui/dist/client/assets/threads._threadId-BgDhFj2I.js +0 -1
  223. package/apps/ui/dist/client/assets/useMutation-CC_B7uy5.js +0 -1
  224. package/apps/ui/dist/client/assets/useQuery-C5By6WKU.js +0 -1
  225. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CRW2kqj0.js +0 -232
  226. package/apps/ui/dist/server/assets/_threadId-B6SrBR9E.js +0 -6
  227. package/apps/ui/dist/server/assets/analytics-CYP_LT5Y.js +0 -16
  228. package/apps/ui/dist/server/assets/analytics-CtpOMVMO.js +0 -146
  229. package/apps/ui/dist/server/assets/antigravity-conversation-state-HgzS302O.js +0 -16
  230. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BtexWY-K.js +0 -613
  231. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-D426O-64.js +0 -11
  232. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-zMrR6v6R.js +0 -20
  233. package/apps/ui/dist/server/assets/antigravity-db-Bh8_U9uw.js +0 -580
  234. package/apps/ui/dist/server/assets/antigravity-keychain-DOiuHDwK.js +0 -126
  235. package/apps/ui/dist/server/assets/antigravity-keychain-panel-CC7FLmAK.js +0 -55
  236. package/apps/ui/dist/server/assets/antigravity-queries-CGrJO9Vr.js +0 -37
  237. package/apps/ui/dist/server/assets/antigravity-server-CHRjVFqN.js +0 -114
  238. package/apps/ui/dist/server/assets/antigravity._workspaceKey-3m_MzNFA.js +0 -11
  239. package/apps/ui/dist/server/assets/antigravity._workspaceKey-B0QeYUOh.js +0 -28
  240. package/apps/ui/dist/server/assets/antigravity._workspaceKey-C3kP-qyN.js +0 -210
  241. package/apps/ui/dist/server/assets/antigravity.index-CPCYkqCi.js +0 -104
  242. package/apps/ui/dist/server/assets/antigravity.index-DudTB3Tq.js +0 -11
  243. package/apps/ui/dist/server/assets/badge-EvdhKK_Z.js +0 -26
  244. package/apps/ui/dist/server/assets/button-CmTDnzOn.js +0 -46
  245. package/apps/ui/dist/server/assets/checkbox-C0hovF41.js +0 -19
  246. package/apps/ui/dist/server/assets/codex-queries-CtgeZ7VL.js +0 -99
  247. package/apps/ui/dist/server/assets/codex-server-CNXSJuc2.js +0 -2004
  248. package/apps/ui/dist/server/assets/concurrency-VXtYvlGh.js +0 -18
  249. package/apps/ui/dist/server/assets/createServerRpc-CF_DEwnm.js +0 -12
  250. package/apps/ui/dist/server/assets/createSsrRpc-C754NPki.js +0 -16
  251. package/apps/ui/dist/server/assets/cursor-db-cYZEU3WQ.js +0 -830
  252. package/apps/ui/dist/server/assets/cursor-exporter-types-CI3goo-c.js +0 -34
  253. package/apps/ui/dist/server/assets/cursor-queries-NCIM0Nat.js +0 -67
  254. package/apps/ui/dist/server/assets/cursor-recovery-nq-kR62j.js +0 -361
  255. package/apps/ui/dist/server/assets/cursor-server-C3q7hrp-.js +0 -213
  256. package/apps/ui/dist/server/assets/cursor-threads._composerId-BB0Y_Mao.js +0 -11
  257. package/apps/ui/dist/server/assets/cursor-threads._composerId-BPJFWfJj.js +0 -18
  258. package/apps/ui/dist/server/assets/cursor-threads._composerId-BkMMTQ3v.js +0 -582
  259. package/apps/ui/dist/server/assets/cursor-transcript-2iL3KFSK.js +0 -125
  260. package/apps/ui/dist/server/assets/cursor._workspaceKey-C5PdTaKB.js +0 -28
  261. package/apps/ui/dist/server/assets/cursor._workspaceKey-Ckj7apKI.js +0 -401
  262. package/apps/ui/dist/server/assets/cursor._workspaceKey-nmg3YIOQ.js +0 -11
  263. package/apps/ui/dist/server/assets/cursor.index-CcsX7DG0.js +0 -11
  264. package/apps/ui/dist/server/assets/cursor.index-DkWT-mxw.js +0 -189
  265. package/apps/ui/dist/server/assets/data-table-Cdct823O.js +0 -189
  266. package/apps/ui/dist/server/assets/delete-confirm-dialog-BcBNCxWB.js +0 -144
  267. package/apps/ui/dist/server/assets/download-DMmiy1xf.js +0 -92
  268. package/apps/ui/dist/server/assets/dropdown-menu-Dy_9t6TN.js +0 -36
  269. package/apps/ui/dist/server/assets/empty-plugin-adapters-B3lHh1La.js +0 -5
  270. package/apps/ui/dist/server/assets/export-dialog-BItjWgkZ.js +0 -240
  271. package/apps/ui/dist/server/assets/formatters-FJaGZgJk.js +0 -91
  272. package/apps/ui/dist/server/assets/loading-panel-BGFnWseS.js +0 -27
  273. package/apps/ui/dist/server/assets/metric-card-ByEeLu0r.js +0 -23
  274. package/apps/ui/dist/server/assets/model-label-B1NWGc65.js +0 -13
  275. package/apps/ui/dist/server/assets/page-header-VNSaM3xd.js +0 -29
  276. package/apps/ui/dist/server/assets/path-transforms-DL2IwtYd.js +0 -31
  277. package/apps/ui/dist/server/assets/projects._project-Bpbc3C-L.js +0 -20
  278. package/apps/ui/dist/server/assets/projects._project-Bshqk7JA.js +0 -12
  279. package/apps/ui/dist/server/assets/projects._project-CvZho6EQ.js +0 -395
  280. package/apps/ui/dist/server/assets/projects.index-BLXOx5eL.js +0 -12
  281. package/apps/ui/dist/server/assets/projects.index-BkLiF2FF.js +0 -182
  282. package/apps/ui/dist/server/assets/projects.index-DesYXwfi.js +0 -14
  283. package/apps/ui/dist/server/assets/reload-error-panel-BJMxY3U1.js +0 -25
  284. package/apps/ui/dist/server/assets/route-search-ts4W9MJ9.js +0 -38
  285. package/apps/ui/dist/server/assets/router-6m-ihwqA.js +0 -410
  286. package/apps/ui/dist/server/assets/routes-Bsact1uB.js +0 -184
  287. package/apps/ui/dist/server/assets/routes-BzkJgq4W.js +0 -34
  288. package/apps/ui/dist/server/assets/select-GW76p-ld.js +0 -76
  289. package/apps/ui/dist/server/assets/settings-OayxIYQQ.js +0 -100
  290. package/apps/ui/dist/server/assets/settings-store-DpEJEQ7M.js +0 -52
  291. package/apps/ui/dist/server/assets/shared-CPRNYIql.js +0 -134
  292. package/apps/ui/dist/server/assets/sqlite-error-LZDrnxdd.js +0 -13
  293. package/apps/ui/dist/server/assets/start-CI_0bSiY.js +0 -4
  294. package/apps/ui/dist/server/assets/tabs-CGA13IZM.js +0 -502
  295. package/apps/ui/dist/server/assets/text-filter-CGKxMCKt.js +0 -36
  296. package/apps/ui/dist/server/assets/threads._threadId-BSSK4nkI.js +0 -26
  297. package/apps/ui/dist/server/assets/threads._threadId-Bs0yuqO9.js +0 -18
  298. package/apps/ui/dist/server/assets/threads._threadId-D2GYkVn6.js +0 -639
  299. package/apps/ui/dist/server/assets/ui-export-files-BHLX9bhN.js +0 -83
  300. package/apps/ui/dist/server/assets/utils-C_uf36nf.js +0 -8
  301. package/apps/ui/dist/server/server.js +0 -5847
  302. package/bin/codex-chats-claude.js +0 -5
  303. package/bin/codex-chats.js +0 -5
  304. package/bin/spiracha.js +0 -5
  305. package/src/export-chats.ts +0 -120
  306. package/src/export-claude.ts +0 -36
  307. package/src/export-cursor.ts +0 -244
  308. package/src/lib/claude-exporter.ts +0 -864
  309. package/src/lib/codex-exporter-cli.ts +0 -277
  310. package/src/lib/codex-exporter-db.ts +0 -319
  311. package/src/lib/codex-exporter.ts +0 -115
  312. package/src/lib/cursor-exporter.ts +0 -266
  313. package/src/lib/interactive-cli.ts +0 -433
  314. package/src/lib/native-open.ts +0 -54
  315. package/src/mcp-server.ts +0 -137
  316. package/src/spiracha.ts +0 -116
  317. package/src/ui-cli.ts +0 -310
  318. /package/apps/ui/{dist/client → public}/manifest.json +0 -0
  319. /package/apps/ui/{dist/client → public}/robots.txt +0 -0
@@ -1,76 +0,0 @@
1
- import { t as cn } from "./utils-C_uf36nf.js";
2
- import { jsx, jsxs } from "react/jsx-runtime";
3
- import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
4
- import { Select } from "radix-ui";
5
- //#region src/components/ui/select.tsx
6
- function Select$1({ ...props }) {
7
- return /* @__PURE__ */ jsx(Select.Root, {
8
- "data-slot": "select",
9
- ...props
10
- });
11
- }
12
- function SelectValue({ ...props }) {
13
- return /* @__PURE__ */ jsx(Select.Value, {
14
- "data-slot": "select-value",
15
- ...props
16
- });
17
- }
18
- function SelectTrigger({ className, size = "default", children, ...props }) {
19
- return /* @__PURE__ */ jsxs(Select.Trigger, {
20
- "data-slot": "select-trigger",
21
- "data-size": size,
22
- className: cn("flex w-fit items-center justify-between gap-2 whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs outline-none transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[size=default]:h-9 data-[size=sm]:h-8 data-[placeholder]:text-muted-foreground *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:hover:bg-input/50 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
23
- ...props,
24
- children: [children, /* @__PURE__ */ jsx(Select.Icon, {
25
- asChild: true,
26
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 opacity-50" })
27
- })]
28
- });
29
- }
30
- function SelectContent({ className, children, position = "item-aligned", align = "center", ...props }) {
31
- return /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsxs(Select.Content, {
32
- "data-slot": "select-content",
33
- className: cn("data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in", position === "popper" && "data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1", className),
34
- position,
35
- align,
36
- ...props,
37
- children: [
38
- /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
39
- /* @__PURE__ */ jsx(Select.Viewport, {
40
- className: cn("p-1", position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),
41
- children
42
- }),
43
- /* @__PURE__ */ jsx(SelectScrollDownButton, {})
44
- ]
45
- }) });
46
- }
47
- function SelectItem({ className, children, ...props }) {
48
- return /* @__PURE__ */ jsxs(Select.Item, {
49
- "data-slot": "select-item",
50
- className: cn("relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
51
- ...props,
52
- children: [/* @__PURE__ */ jsx("span", {
53
- "data-slot": "select-item-indicator",
54
- className: "absolute right-2 flex size-3.5 items-center justify-center",
55
- children: /* @__PURE__ */ jsx(Select.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) })
56
- }), /* @__PURE__ */ jsx(Select.ItemText, { children })]
57
- });
58
- }
59
- function SelectScrollUpButton({ className, ...props }) {
60
- return /* @__PURE__ */ jsx(Select.ScrollUpButton, {
61
- "data-slot": "select-scroll-up-button",
62
- className: cn("flex cursor-default items-center justify-center py-1", className),
63
- ...props,
64
- children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4" })
65
- });
66
- }
67
- function SelectScrollDownButton({ className, ...props }) {
68
- return /* @__PURE__ */ jsx(Select.ScrollDownButton, {
69
- "data-slot": "select-scroll-down-button",
70
- className: cn("flex cursor-default items-center justify-center py-1", className),
71
- ...props,
72
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4" })
73
- });
74
- }
75
- //#endregion
76
- export { SelectValue as a, SelectTrigger as i, SelectContent as n, SelectItem as r, Select$1 as t };
@@ -1,100 +0,0 @@
1
- import { n as useSettings } from "./settings-store-DpEJEQ7M.js";
2
- import { t as Checkbox } from "./checkbox-C0hovF41.js";
3
- import { t as PageHeader } from "./page-header-VNSaM3xd.js";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
- import { Settings2 } from "lucide-react";
6
- //#region src/routes/settings.tsx?tsr-split=component
7
- function SettingsPage() {
8
- const { settings, updateSetting } = useSettings();
9
- return /* @__PURE__ */ jsxs("div", {
10
- className: "space-y-6",
11
- children: [/* @__PURE__ */ jsx(PageHeader, {
12
- eyebrow: "Configuration",
13
- subtitle: "Control how paths and usernames appear in transcript messages.",
14
- title: "Settings"
15
- }), /* @__PURE__ */ jsxs("section", {
16
- className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
17
- children: [/* @__PURE__ */ jsxs("h3", {
18
- className: "flex items-center gap-2 font-semibold text-[var(--muted-foreground)] text-xs uppercase tracking-[0.18em]",
19
- children: [/* @__PURE__ */ jsx(Settings2, { className: "size-3.5" }), "Privacy"]
20
- }), /* @__PURE__ */ jsxs("div", {
21
- className: "mt-5 space-y-5",
22
- children: [/* @__PURE__ */ jsxs("div", {
23
- className: "flex items-center gap-3",
24
- children: [/* @__PURE__ */ jsx(Checkbox, {
25
- checked: settings.redactUsername,
26
- id: "redact-username",
27
- onCheckedChange: (checked) => updateSetting("redactUsername", checked === true)
28
- }), /* @__PURE__ */ jsxs("div", {
29
- className: "min-w-0",
30
- children: [/* @__PURE__ */ jsx("label", {
31
- className: "cursor-pointer font-medium text-sm leading-none",
32
- htmlFor: "redact-username",
33
- children: "Redact Username"
34
- }), /* @__PURE__ */ jsxs("p", {
35
- className: "mt-1.5 text-[var(--muted-foreground)] text-xs leading-5",
36
- children: [
37
- "Replaces",
38
- " ",
39
- /* @__PURE__ */ jsx("code", {
40
- className: "rounded bg-[var(--code-background)] px-1 py-0.5 font-mono text-[var(--code-foreground)]",
41
- children: "/Users/[username]/"
42
- }),
43
- " ",
44
- "with",
45
- " ",
46
- /* @__PURE__ */ jsx("code", {
47
- className: "rounded bg-[var(--code-background)] px-1 py-0.5 font-mono text-[var(--code-foreground)]",
48
- children: "~/"
49
- }),
50
- " ",
51
- "in all transcript messages."
52
- ]
53
- })]
54
- })]
55
- }), /* @__PURE__ */ jsxs("div", {
56
- className: "flex items-center gap-3",
57
- children: [/* @__PURE__ */ jsx(Checkbox, {
58
- checked: settings.convertToProjectRoot,
59
- id: "convert-project-root",
60
- onCheckedChange: (checked) => updateSetting("convertToProjectRoot", checked === true)
61
- }), /* @__PURE__ */ jsxs("div", {
62
- className: "min-w-0",
63
- children: [/* @__PURE__ */ jsx("label", {
64
- className: "cursor-pointer font-medium text-sm leading-none",
65
- htmlFor: "convert-project-root",
66
- children: "Convert Absolute Paths to Project Root"
67
- }), /* @__PURE__ */ jsxs("p", {
68
- className: "mt-1.5 text-[var(--muted-foreground)] text-xs leading-5",
69
- children: [
70
- "Converts the current thread or project cwd from",
71
- " ",
72
- /* @__PURE__ */ jsx("code", {
73
- className: "rounded bg-[var(--code-background)] px-1 py-0.5 font-mono text-[var(--code-foreground)]",
74
- children: "/Users/[username]/workspace/[projectname]/"
75
- }),
76
- " ",
77
- "to project-root-relative paths, so",
78
- " ",
79
- /* @__PURE__ */ jsx("code", {
80
- className: "rounded bg-[var(--code-background)] px-1 py-0.5 font-mono text-[var(--code-foreground)]",
81
- children: "/Users/jane/workspace/myapp/src/index.ts"
82
- }),
83
- " ",
84
- "appear as",
85
- " ",
86
- /* @__PURE__ */ jsx("code", {
87
- className: "rounded bg-[var(--code-background)] px-1 py-0.5 font-mono text-[var(--code-foreground)]",
88
- children: "src/index.ts"
89
- }),
90
- ". If Redact Username is also enabled, remaining absolute paths outside the project root are redacted afterward."
91
- ]
92
- })]
93
- })]
94
- })]
95
- })]
96
- })]
97
- });
98
- }
99
- //#endregion
100
- export { SettingsPage as component };
@@ -1,52 +0,0 @@
1
- import { createContext, useContext, useEffect, useState } from "react";
2
- import { jsx } from "react/jsx-runtime";
3
- //#region src/lib/settings-store.tsx
4
- var STORAGE_KEY = "spiracha-settings";
5
- var defaultSettings = {
6
- convertToProjectRoot: false,
7
- redactUsername: false
8
- };
9
- var SettingsContext = createContext({
10
- settings: defaultSettings,
11
- updateSetting: () => {}
12
- });
13
- var loadSettings = () => {
14
- if (typeof window === "undefined") return defaultSettings;
15
- try {
16
- const stored = window.localStorage.getItem(STORAGE_KEY);
17
- return stored ? {
18
- ...defaultSettings,
19
- ...JSON.parse(stored)
20
- } : defaultSettings;
21
- } catch {
22
- return defaultSettings;
23
- }
24
- };
25
- function SettingsProvider({ children }) {
26
- const [settings, setSettings] = useState(defaultSettings);
27
- useEffect(() => {
28
- setSettings(loadSettings());
29
- }, []);
30
- const updateSetting = (key, value) => {
31
- setSettings((prev) => {
32
- const next = {
33
- ...prev,
34
- [key]: value
35
- };
36
- try {
37
- localStorage.setItem(STORAGE_KEY, JSON.stringify(next));
38
- } catch {}
39
- return next;
40
- });
41
- };
42
- return /* @__PURE__ */ jsx(SettingsContext.Provider, {
43
- value: {
44
- settings,
45
- updateSetting
46
- },
47
- children
48
- });
49
- }
50
- var useSettings = () => useContext(SettingsContext);
51
- //#endregion
52
- export { useSettings as n, SettingsProvider as t };
@@ -1,134 +0,0 @@
1
- import { t as formatModelLabel$1 } from "./model-label-B1NWGc65.js";
2
- import { finished } from "node:stream/promises";
3
- import { mkdir } from "node:fs/promises";
4
- import "node:os";
5
- import path from "node:path";
6
- import { createReadStream, createWriteStream } from "node:fs";
7
- import { createInterface } from "node:readline";
8
- //#region ../../src/lib/shared.ts
9
- var getPortablePathBasename = (value) => {
10
- const trimmed = value.replace(/[\\/]+$/u, "");
11
- if (!trimmed) return "";
12
- return path.win32.basename(path.posix.basename(trimmed));
13
- };
14
- var cleanInlineTitle = (value) => {
15
- const compact = (value.split("\n").map((line) => line.trim()).find((line) => line.length > 0) ?? "").replace(/\s+/g, " ").trim();
16
- if (compact.length <= 160) return compact;
17
- return `${compact.slice(0, 157).trimEnd()}...`;
18
- };
19
- var cleanExtractedText = (text) => {
20
- return text.replace(/^\s*<\/?image>\s*$/gm, "").replace(/\n{3,}/g, "\n\n");
21
- };
22
- var formatModelLabel = formatModelLabel$1;
23
- var asObject = (value) => {
24
- if (!value || typeof value !== "object" || Array.isArray(value)) return null;
25
- return value;
26
- };
27
- var asString = (value) => {
28
- return typeof value === "string" ? value : null;
29
- };
30
- var asNumber = (value) => {
31
- return typeof value === "number" ? value : null;
32
- };
33
- var readJsonlObjects = (filePath) => {
34
- const stream = createReadStream(filePath, { encoding: "utf8" });
35
- const lines = createInterface({
36
- crlfDelay: Infinity,
37
- input: stream
38
- });
39
- const lineIterator = lines[Symbol.asyncIterator]();
40
- let closed = false;
41
- const close = () => {
42
- if (closed) return;
43
- closed = true;
44
- lines.close();
45
- stream.destroy();
46
- };
47
- const readNext = async () => {
48
- while (true) {
49
- const nextLine = await lineIterator.next();
50
- if (nextLine.done) {
51
- close();
52
- return {
53
- done: true,
54
- value: void 0
55
- };
56
- }
57
- const trimmed = nextLine.value.trim();
58
- if (!trimmed) continue;
59
- try {
60
- return {
61
- done: false,
62
- value: JSON.parse(trimmed)
63
- };
64
- } catch {}
65
- }
66
- };
67
- const iterator = {
68
- [Symbol.asyncIterator]: () => iterator,
69
- next: async () => readNext(),
70
- return: async () => {
71
- close();
72
- return {
73
- done: true,
74
- value: void 0
75
- };
76
- },
77
- throw: async (error) => {
78
- close();
79
- throw error;
80
- }
81
- };
82
- return iterator;
83
- };
84
- var renderDocumentTitle = (title, format) => {
85
- if (format === "md") return `# ${title}`;
86
- return [title, "=".repeat(Math.max(title.length, 3))].join("\n");
87
- };
88
- var renderMetadataBlock = (entries, format) => {
89
- const filteredEntries = entries.filter((entry) => entry.value !== null && entry.value !== void 0 && entry.value !== "");
90
- if (filteredEntries.length === 0) return "";
91
- if (format === "md") {
92
- const lines = ["---"];
93
- for (const entry of filteredEntries) lines.push(`${entry.key}: ${toMetadataValue(entry.value, "md")}`);
94
- lines.push("---");
95
- return `${lines.join("\n")}\n`;
96
- }
97
- const lines = ["Metadata", "--------"];
98
- for (const entry of filteredEntries) lines.push(`${entry.key}: ${toMetadataValue(entry.value, "txt")}`);
99
- return `${lines.join("\n")}\n`;
100
- };
101
- var renderSection = (title, body, format) => {
102
- const trimmedBody = body.trimEnd();
103
- if (!trimmedBody) return "";
104
- if (format === "md") return `## ${title}\n\n${trimmedBody}\n`;
105
- return `${title}\n${"-".repeat(Math.max(title.length, 3))}\n${trimmedBody}\n`;
106
- };
107
- var renderCodeBlock = (text, format) => {
108
- if (format === "md") return `\`\`\`text\n${text}\n\`\`\``;
109
- return text;
110
- };
111
- var formatInlineLiteral = (value, format) => {
112
- return format === "md" ? inlineCode(value) : value;
113
- };
114
- var inlineCode = (value) => {
115
- const maxRunLength = (value.match(/`+/g) ?? []).reduce((max, run) => Math.max(max, run.length), 0);
116
- const fence = "`".repeat(maxRunLength + 1);
117
- return `${fence}${value.startsWith("`") || value.endsWith("`") ? ` ${value} ` : value}${fence}`;
118
- };
119
- var createExportWriteStream = async (outputPath) => {
120
- await mkdir(path.dirname(outputPath), { recursive: true });
121
- return createWriteStream(outputPath, { encoding: "utf8" });
122
- };
123
- var finalizeExportWriteStream = async (stream) => {
124
- stream.end();
125
- await finished(stream);
126
- };
127
- var toMetadataValue = (value, format) => {
128
- if (Array.isArray(value) || value && typeof value === "object") return JSON.stringify(value);
129
- if (typeof value === "string") return format === "md" ? JSON.stringify(value) : value;
130
- if (typeof value === "boolean" || typeof value === "number") return String(value);
131
- return format === "md" ? JSON.stringify(String(value)) : String(value);
132
- };
133
- //#endregion
134
- export { cleanInlineTitle as a, formatInlineLiteral as c, readJsonlObjects as d, renderCodeBlock as f, renderSection as h, cleanExtractedText as i, formatModelLabel as l, renderMetadataBlock as m, asObject as n, createExportWriteStream as o, renderDocumentTitle as p, asString as r, finalizeExportWriteStream as s, asNumber as t, getPortablePathBasename as u };
@@ -1,13 +0,0 @@
1
- //#region ../../src/lib/sqlite-error.ts
2
- var SQLITE_RETRYABLE_PATTERNS = [
3
- /unable to open database file/iu,
4
- /database is locked/iu,
5
- /SQLITE_BUSY/iu,
6
- /SQLITE_CANTOPEN/iu
7
- ];
8
- var isRetryableSqliteError = (error) => {
9
- if (!(error instanceof Error)) return false;
10
- return SQLITE_RETRYABLE_PATTERNS.some((pattern) => pattern.test(error.message));
11
- };
12
- //#endregion
13
- export { isRetryableSqliteError as t };
@@ -1,4 +0,0 @@
1
- //#region ../../node_modules/.bun/@tanstack+react-start@1.168.25+1e4c23dcb33f1092/node_modules/@tanstack/react-start/dist/plugin/default-entry/start.ts
2
- var startInstance = void 0;
3
- //#endregion
4
- export { startInstance };