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
@@ -1,19 +0,0 @@
1
- import { t as cn } from "./utils-C_uf36nf.js";
2
- import { jsx } from "react/jsx-runtime";
3
- import { CheckIcon } from "lucide-react";
4
- import { Checkbox } from "radix-ui";
5
- //#region src/components/ui/checkbox.tsx
6
- function Checkbox$1({ className, ...props }) {
7
- return /* @__PURE__ */ jsx(Checkbox.Root, {
8
- "data-slot": "checkbox",
9
- className: cn("peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs outline-none transition-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-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-white dark:bg-input/30 dark:data-[state=checked]:bg-primary dark:data-[state=checked]:text-primary-foreground dark:aria-invalid:ring-destructive/40", className),
10
- ...props,
11
- children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
12
- "data-slot": "checkbox-indicator",
13
- className: "grid place-content-center text-current transition-none",
14
- children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
15
- })
16
- });
17
- }
18
- //#endregion
19
- export { Checkbox$1 as t };
@@ -1,361 +0,0 @@
1
- import { a as cleanExtractedText, d as getPortablePathBasename, f as readJsonlObjects, i as asString, n as asNumber, o as cleanInlineTitle, r as asObject, t as asBoolean } from "./shared-DyhChtHf.js";
2
- import { t as mapWithConcurrency } from "./concurrency-VXtYvlGh.js";
3
- import { readdir, stat } from "node:fs/promises";
4
- import os from "node:os";
5
- import path from "node:path";
6
- //#region ../../src/lib/claude-code-exporter-types.ts
7
- var getDefaultClaudeCodeDataDir = (_env = process.env, homeDir = os.homedir()) => {
8
- return path.join(homeDir, ".claude");
9
- };
10
- var DEFAULT_CLAUDE_CODE_DATA_DIR = getDefaultClaudeCodeDataDir();
11
- var resolveClaudeCodeDataDir = () => {
12
- const configured = process.env.SPIRACHA_CLAUDE_CODE_DATA_DIR?.trim() || process.env.SPIRACHA_CLAUDE_CODE_DIR?.trim() || process.env.SPIRACHA_CLAUDE_HOME?.trim();
13
- return configured ? configured : DEFAULT_CLAUDE_CODE_DATA_DIR;
14
- };
15
- var resolveClaudeCodeProjectsDir = () => {
16
- const configured = process.env.SPIRACHA_CLAUDE_CODE_PROJECTS_DIR?.trim();
17
- return configured ? configured : path.join(resolveClaudeCodeDataDir(), "projects");
18
- };
19
- //#endregion
20
- //#region ../../src/lib/claude-code-db.ts
21
- var READ_CONCURRENCY = 8;
22
- var WORKSPACE_KEY_PREFIX = "project:";
23
- var pathExists = async (target) => {
24
- return await stat(target).then(() => true).catch(() => false);
25
- };
26
- var cleanLabel = (value) => {
27
- const cleaned = value?.replace(/\s+/g, " ").trim();
28
- return cleaned ? cleaned : null;
29
- };
30
- var getWorkspaceKey = (directoryName) => `${WORKSPACE_KEY_PREFIX}${directoryName}`;
31
- var getDirectoryNameFromWorkspaceKey = (workspaceKey) => {
32
- return workspaceKey.startsWith(WORKSPACE_KEY_PREFIX) ? workspaceKey.slice(8) : null;
33
- };
34
- var decodeWorktreeFromDirectoryName = (directoryName) => {
35
- if (!directoryName.startsWith("-")) return directoryName.replace(/-/g, path.sep);
36
- return path.join(path.sep, ...directoryName.slice(1).split("-").filter(Boolean));
37
- };
38
- var getWorkspaceLabel = (worktree) => {
39
- if (worktree === path.sep) return "(global)";
40
- return getPortablePathBasename(worktree) || worktree;
41
- };
42
- var getWorkspaceUri = (worktree) => {
43
- return worktree.startsWith(path.sep) ? `file://${worktree}` : worktree;
44
- };
45
- var toIso = (value) => {
46
- return value === null ? null : new Date(value).toISOString();
47
- };
48
- var parseTimestampMs = (value) => {
49
- if (typeof value === "number" && Number.isFinite(value)) return value;
50
- if (typeof value !== "string" || !value.trim()) return null;
51
- const numeric = Number(value);
52
- if (Number.isFinite(numeric)) return numeric;
53
- const parsed = Date.parse(value);
54
- return Number.isFinite(parsed) ? parsed : null;
55
- };
56
- var formatJsonLike = (value) => {
57
- if (value === void 0 || value === null) return null;
58
- if (typeof value === "string") return value;
59
- return JSON.stringify(value, null, 2);
60
- };
61
- var textFromContentValue = (value) => {
62
- if (typeof value === "string") return value;
63
- if (Array.isArray(value)) return value.map((item) => {
64
- if (typeof item === "string") return item;
65
- return asString(asObject(item)?.text ?? null) ?? "";
66
- }).filter(Boolean).join("\n\n");
67
- return asString(asObject(value ?? null)?.text ?? null) ?? "";
68
- };
69
- var parseTextContentPart = (item) => ({
70
- raw: item,
71
- text: asString(item.text ?? null) ?? "",
72
- type: "text"
73
- });
74
- var parseThinkingContentPart = (item) => ({
75
- raw: item,
76
- text: asString(item.thinking ?? null) ?? "",
77
- type: "thinking"
78
- });
79
- var parseToolUseContentPart = (item) => ({
80
- argumentsText: formatJsonLike(item.input),
81
- raw: item,
82
- toolName: asString(item.name ?? null) ?? "unknown",
83
- toolUseId: asString(item.id ?? null),
84
- type: "tool_use"
85
- });
86
- var parseToolResultContentPart = (item) => ({
87
- isError: asBoolean(item.is_error ?? null),
88
- outputText: cleanExtractedText(textFromContentValue(item.content)).trim(),
89
- raw: item,
90
- toolUseId: asString(item.tool_use_id ?? null),
91
- type: "tool_result"
92
- });
93
- var parseFallbackContentPart = (item) => {
94
- const fallbackText = asString(item.text ?? null);
95
- return {
96
- raw: item,
97
- text: fallbackText ?? void 0,
98
- type: fallbackText ? "text" : "unknown"
99
- };
100
- };
101
- var structuredContentParsers = {
102
- input_text: parseTextContentPart,
103
- output_text: parseTextContentPart,
104
- text: parseTextContentPart,
105
- thinking: parseThinkingContentPart,
106
- tool_result: parseToolResultContentPart,
107
- tool_use: parseToolUseContentPart
108
- };
109
- var parseStructuredContentPart = (item) => {
110
- const type = asString(item.type ?? null);
111
- return type ? structuredContentParsers[type]?.(item) ?? parseFallbackContentPart(item) : parseFallbackContentPart(item);
112
- };
113
- var parseMessageContentPart = (item) => {
114
- if (typeof item === "string") return {
115
- raw: { text: item },
116
- text: item,
117
- type: "text"
118
- };
119
- const object = asObject(item);
120
- return object ? parseStructuredContentPart(object) : null;
121
- };
122
- var parseMessageParts = (message) => {
123
- const content = message.content;
124
- return (Array.isArray(content) ? content : [content]).map(parseMessageContentPart).filter((part) => part !== null && part.type !== "unknown");
125
- };
126
- var parseAttachmentParts = (raw) => {
127
- const attachment = asObject(raw.attachment ?? null);
128
- if (!attachment) return [];
129
- return [{
130
- attachmentType: asString(attachment.type ?? null),
131
- raw: attachment,
132
- text: textFromContentValue(attachment.content),
133
- type: "attachment"
134
- }];
135
- };
136
- var getTranscriptEntryParts = (type, message, raw) => {
137
- if (message) return parseMessageParts(message);
138
- if (type === "attachment") return parseAttachmentParts(raw);
139
- return [];
140
- };
141
- var getTranscriptEntryRole = (type, message) => {
142
- return asString(message?.role ?? null) ?? (type === "attachment" ? "attachment" : type);
143
- };
144
- var getTranscriptEntryId = (type, raw) => {
145
- return asString(raw.uuid ?? null) ?? `${type}:${asString(raw.sessionId ?? null) ?? "unknown"}`;
146
- };
147
- var parseTranscriptEntry = (raw) => {
148
- const type = asString(raw.type ?? null) ?? "unknown";
149
- const message = asObject(raw.message ?? null);
150
- const parts = getTranscriptEntryParts(type, message, raw);
151
- if (parts.length === 0) return null;
152
- return {
153
- cwd: asString(raw.cwd ?? null),
154
- entryId: getTranscriptEntryId(type, raw),
155
- model: asString(message?.model ?? null),
156
- parentEntryId: asString(raw.parentUuid ?? null),
157
- parts,
158
- raw,
159
- role: getTranscriptEntryRole(type, message),
160
- timestamp: asString(raw.timestamp ?? null),
161
- type
162
- };
163
- };
164
- var createEmptyStats = () => ({
165
- assistantMessageCount: 0,
166
- attachmentCount: 0,
167
- cacheCreationInputTokens: 0,
168
- cacheReadInputTokens: 0,
169
- inputTokens: 0,
170
- messageCount: 0,
171
- outputTokens: 0,
172
- renderablePartCount: 0,
173
- toolCallCount: 0,
174
- toolResultCount: 0,
175
- userMessageCount: 0
176
- });
177
- var addUsageStats = (stats, message) => {
178
- const usage = asObject(message?.usage ?? null);
179
- if (!usage) return;
180
- stats.inputTokens += asNumber(usage.input_tokens ?? null) ?? 0;
181
- stats.outputTokens += asNumber(usage.output_tokens ?? null) ?? 0;
182
- stats.cacheCreationInputTokens += asNumber(usage.cache_creation_input_tokens ?? null) ?? 0;
183
- stats.cacheReadInputTokens += asNumber(usage.cache_read_input_tokens ?? null) ?? 0;
184
- };
185
- var updateStatsFromEntry = (stats, entry) => {
186
- if (entry.type === "user" || entry.type === "assistant") stats.messageCount += 1;
187
- if (entry.role === "user") stats.userMessageCount += 1;
188
- if (entry.role === "assistant") stats.assistantMessageCount += 1;
189
- if (entry.type === "attachment") stats.attachmentCount += 1;
190
- stats.toolCallCount += entry.parts.filter((part) => part.type === "tool_use").length;
191
- stats.toolResultCount += entry.parts.filter((part) => part.type === "tool_result").length;
192
- stats.renderablePartCount += entry.parts.filter(isRenderablePart).length;
193
- addUsageStats(stats, asObject(entry.raw.message ?? null));
194
- };
195
- var updateTimeline = (timeline, raw) => {
196
- const timestampMs = parseTimestampMs(raw.timestamp);
197
- if (timestampMs === null) return;
198
- timeline.firstMs = timeline.firstMs === null ? timestampMs : Math.min(timeline.firstMs, timestampMs);
199
- timeline.lastMs = timeline.lastMs === null ? timestampMs : Math.max(timeline.lastMs, timestampMs);
200
- };
201
- var readTitleCandidate = (raw) => {
202
- const type = asString(raw.type ?? null);
203
- if (type !== "ai-title" && type !== "custom-title") return null;
204
- return cleanLabel(asString(raw.title ?? null) ?? asString(raw.content ?? null));
205
- };
206
- var updateIdentityFromRaw = (identity, raw) => {
207
- identity.sessionId = asString(raw.sessionId ?? null) ?? identity.sessionId;
208
- identity.cwd = asString(raw.cwd ?? null) ?? identity.cwd;
209
- identity.version = asString(raw.version ?? null) ?? identity.version;
210
- identity.gitBranch = asString(raw.gitBranch ?? null) ?? identity.gitBranch;
211
- identity.model = asString(asObject(raw.message ?? null)?.model ?? null) ?? identity.model;
212
- identity.title = readTitleCandidate(raw) ?? identity.title;
213
- };
214
- var updateIdentityFromEntry = (identity, entry) => {
215
- if (entry.role === "user" && !identity.firstUserText) identity.firstUserText = cleanExtractedText(entry.parts.find((part) => part.type === "text" && part.text?.trim())?.text ?? "").trim() || null;
216
- };
217
- var toTimeline = (timeline, fallbackMs) => {
218
- const createdAtMs = timeline.firstMs ?? fallbackMs;
219
- const lastActiveAtMs = timeline.lastMs ?? fallbackMs;
220
- return {
221
- createdAtIso: toIso(createdAtMs),
222
- createdAtMs,
223
- lastActiveAtIso: toIso(lastActiveAtMs),
224
- lastActiveAtMs
225
- };
226
- };
227
- var getTitle = (identity) => {
228
- return cleanInlineTitle(identity.title ?? identity.firstUserText ?? identity.sessionId);
229
- };
230
- var toSessionSummary = (file, identity, stats, timeline) => {
231
- const worktree = identity.cwd ?? decodeWorktreeFromDirectoryName(file.directoryName);
232
- const workspaceLabel = getWorkspaceLabel(worktree);
233
- const totalTokens = stats.inputTokens + stats.outputTokens + stats.cacheCreationInputTokens + stats.cacheReadInputTokens;
234
- return {
235
- ...stats,
236
- ...timeline,
237
- cwd: identity.cwd,
238
- filePath: file.filePath,
239
- gitBranch: identity.gitBranch,
240
- model: identity.model,
241
- sessionId: identity.sessionId,
242
- title: getTitle(identity),
243
- totalTokens,
244
- version: identity.version,
245
- workspaceKey: getWorkspaceKey(file.directoryName),
246
- workspaceLabel,
247
- worktree
248
- };
249
- };
250
- var isRenderablePart = (part) => {
251
- if (part.type === "text" || part.type === "thinking" || part.type === "attachment") return Boolean(part.text?.trim());
252
- if (part.type === "tool_use") return Boolean(part.toolName || part.argumentsText?.trim());
253
- if (part.type === "tool_result") return Boolean(part.outputText?.trim());
254
- return false;
255
- };
256
- var readTranscriptFile = async (file) => {
257
- const fallbackMtimeMs = await stat(file.filePath).then((stats) => stats.mtimeMs).catch(() => null);
258
- const identity = {
259
- cwd: null,
260
- firstUserText: null,
261
- gitBranch: null,
262
- model: null,
263
- sessionId: path.basename(file.filePath, ".jsonl"),
264
- title: null,
265
- version: null
266
- };
267
- const stats = createEmptyStats();
268
- const timeline = {
269
- firstMs: null,
270
- lastMs: null
271
- };
272
- const entries = [];
273
- const rawEvents = [];
274
- for await (const raw of readJsonlObjects(file.filePath)) {
275
- rawEvents.push(raw);
276
- updateTimeline(timeline, raw);
277
- updateIdentityFromRaw(identity, raw);
278
- const entry = parseTranscriptEntry(raw);
279
- if (!entry) continue;
280
- entries.push(entry);
281
- updateStatsFromEntry(stats, entry);
282
- updateIdentityFromEntry(identity, entry);
283
- }
284
- const session = toSessionSummary(file, identity, stats, toTimeline(timeline, fallbackMtimeMs));
285
- return { transcript: {
286
- entries,
287
- rawEvents,
288
- renderablePartCount: stats.renderablePartCount,
289
- session
290
- } };
291
- };
292
- var listTranscriptFilesForProject = async (projectsDir, directoryName) => {
293
- const projectDir = path.join(projectsDir, directoryName);
294
- return (await readdir(projectDir, { withFileTypes: true }).catch(() => [])).filter((entry) => entry.isFile() && entry.name.endsWith(".jsonl")).map((entry) => ({
295
- directoryName,
296
- filePath: path.join(projectDir, entry.name)
297
- }));
298
- };
299
- var listTranscriptFiles = async (projectsDir) => {
300
- if (!await pathExists(projectsDir)) return [];
301
- return (await mapWithConcurrency((await readdir(projectsDir, { withFileTypes: true })).filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(), READ_CONCURRENCY, (directoryName) => listTranscriptFilesForProject(projectsDir, directoryName))).flat();
302
- };
303
- var readTranscriptFiles = async (files) => {
304
- return (await mapWithConcurrency(files, READ_CONCURRENCY, readTranscriptFile)).flatMap((item) => item ? [item.transcript] : []);
305
- };
306
- var compareNullableMsDesc = (left, right) => {
307
- return (right ?? 0) - (left ?? 0);
308
- };
309
- var toWorkspaceGroup = (directoryName, sessions) => {
310
- const worktree = sessions[0]?.worktree ?? decodeWorktreeFromDirectoryName(directoryName);
311
- const lastActiveAtMs = sessions.reduce((latest, session) => {
312
- if (session.lastActiveAtMs === null) return latest;
313
- return latest === null ? session.lastActiveAtMs : Math.max(latest, session.lastActiveAtMs);
314
- }, null);
315
- return {
316
- assistantMessageCount: sessions.reduce((total, session) => total + session.assistantMessageCount, 0),
317
- directoryName,
318
- key: getWorkspaceKey(directoryName),
319
- label: getWorkspaceLabel(worktree),
320
- lastActiveAtIso: toIso(lastActiveAtMs),
321
- lastActiveAtMs,
322
- messageCount: sessions.reduce((total, session) => total + session.messageCount, 0),
323
- sessionCount: sessions.length,
324
- toolCallCount: sessions.reduce((total, session) => total + session.toolCallCount, 0),
325
- toolResultCount: sessions.reduce((total, session) => total + session.toolResultCount, 0),
326
- uri: getWorkspaceUri(worktree),
327
- userMessageCount: sessions.reduce((total, session) => total + session.userMessageCount, 0),
328
- worktree
329
- };
330
- };
331
- var listClaudeCodeWorkspaceGroups = async (projectsDir = resolveClaudeCodeProjectsDir()) => {
332
- const transcripts = await readTranscriptFiles(await listTranscriptFiles(projectsDir));
333
- const sessionsByDirectory = /* @__PURE__ */ new Map();
334
- for (const transcript of transcripts) {
335
- const directoryName = getDirectoryNameFromWorkspaceKey(transcript.session.workspaceKey);
336
- if (!directoryName) continue;
337
- const sessions = sessionsByDirectory.get(directoryName) ?? [];
338
- sessions.push(transcript.session);
339
- sessionsByDirectory.set(directoryName, sessions);
340
- }
341
- return [...sessionsByDirectory.entries()].map(([directoryName, sessions]) => toWorkspaceGroup(directoryName, sessions)).sort((left, right) => compareNullableMsDesc(left.lastActiveAtMs, right.lastActiveAtMs) || left.worktree.localeCompare(right.worktree));
342
- };
343
- var sortSessions = (sessions) => {
344
- return [...sessions].sort((left, right) => compareNullableMsDesc(left.lastActiveAtMs, right.lastActiveAtMs) || left.title.localeCompare(right.title));
345
- };
346
- var listClaudeCodeSessionsForGroup = async (workspaceKey, projectsDir = resolveClaudeCodeProjectsDir()) => {
347
- const directoryName = getDirectoryNameFromWorkspaceKey(workspaceKey);
348
- if (!directoryName || !await pathExists(projectsDir)) return [];
349
- return sortSessions((await readTranscriptFiles(await listTranscriptFilesForProject(projectsDir, directoryName))).map((transcript) => transcript.session));
350
- };
351
- var locateSessionFile = async (projectsDir, sessionId) => {
352
- return (await listTranscriptFiles(projectsDir)).find((file) => path.basename(file.filePath, ".jsonl") === sessionId) ?? null;
353
- };
354
- var readClaudeCodeSessionTranscript = async (projectsDir, sessionId) => {
355
- if (!await pathExists(projectsDir)) return null;
356
- const file = await locateSessionFile(projectsDir, sessionId);
357
- if (!file) return null;
358
- return (await readTranscriptFile(file))?.transcript ?? null;
359
- };
360
- //#endregion
361
- export { listClaudeCodeSessionsForGroup, listClaudeCodeWorkspaceGroups, readClaudeCodeSessionTranscript, resolveClaudeCodeProjectsDir };
@@ -1,37 +0,0 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-C754NPki.js";
3
- import { z } from "zod";
4
- import { queryOptions } from "@tanstack/react-query";
5
- //#region src/lib/claude-code-server.ts
6
- var workspaceSchema = z.object({ workspaceKey: z.string().min(1) });
7
- var sessionSchema = z.object({ sessionId: z.string().min(1) });
8
- var exportSessionSchema = z.object({
9
- includeCommentary: z.boolean().default(true),
10
- includeMetadata: z.boolean().default(true),
11
- includeTools: z.boolean().default(true),
12
- outputFormat: z.enum(["md", "txt"]).default("md"),
13
- sessionId: z.string().min(1),
14
- zipArchive: z.boolean().default(false)
15
- });
16
- var listClaudeCodeWorkspacesFn = createServerFn({ method: "GET" }).handler(createSsrRpc("059a21d54c070078df105ec79a9321ef1d40b40bf4327be93f6d118c598e300f"));
17
- var listClaudeCodeSessionsFn = createServerFn({ method: "GET" }).validator(workspaceSchema).handler(createSsrRpc("2ffc3b20be74973de734b47407226bae6130a05e31d0d9143b52c9a6e28ba6af"));
18
- var getClaudeCodeSessionDetailFn = createServerFn({ method: "GET" }).validator(sessionSchema).handler(createSsrRpc("6b9382b62370df4b167d9fa590406f3f450b655eee585d88047bb61129037c69"));
19
- var exportClaudeCodeSessionFn = createServerFn({ method: "POST" }).validator(exportSessionSchema).handler(createSsrRpc("59076299b518e4ee172c6793dceb83740eee7fa39888483c11affac937e1af70"));
20
- //#endregion
21
- //#region src/lib/claude-code-queries.ts
22
- var claudeCodeWorkspacesQueryOptions = () => queryOptions({
23
- queryFn: () => listClaudeCodeWorkspacesFn(),
24
- queryKey: ["claude-code-workspaces"]
25
- });
26
- var claudeCodeSessionsQueryOptions = (workspaceKey) => queryOptions({
27
- enabled: workspaceKey !== null,
28
- queryFn: () => listClaudeCodeSessionsFn({ data: { workspaceKey: workspaceKey ?? "" } }),
29
- queryKey: ["claude-code-sessions", workspaceKey ?? "none"]
30
- });
31
- var claudeCodeSessionDetailQueryOptions = (sessionId) => queryOptions({
32
- enabled: sessionId !== null,
33
- queryFn: () => getClaudeCodeSessionDetailFn({ data: { sessionId: sessionId ?? "" } }),
34
- queryKey: ["claude-code-session", sessionId ?? "none"]
35
- });
36
- //#endregion
37
- export { exportClaudeCodeSessionFn as i, claudeCodeSessionsQueryOptions as n, claudeCodeWorkspacesQueryOptions as r, claudeCodeSessionDetailQueryOptions as t };
@@ -1,72 +0,0 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-CF_DEwnm.js";
3
- import { t as renderSourceSessionDownload } from "./source-session-export-server-DNutCawb.js";
4
- import { z } from "zod";
5
- //#region src/lib/claude-code-server.ts?tss-serverfn-split
6
- var workspaceSchema = z.object({ workspaceKey: z.string().min(1) });
7
- var sessionSchema = z.object({ sessionId: z.string().min(1) });
8
- var exportSessionSchema = z.object({
9
- includeCommentary: z.boolean().default(true),
10
- includeMetadata: z.boolean().default(true),
11
- includeTools: z.boolean().default(true),
12
- outputFormat: z.enum(["md", "txt"]).default("md"),
13
- sessionId: z.string().min(1),
14
- zipArchive: z.boolean().default(false)
15
- });
16
- var listClaudeCodeWorkspacesFn_createServerFn_handler = createServerRpc({
17
- id: "059a21d54c070078df105ec79a9321ef1d40b40bf4327be93f6d118c598e300f",
18
- name: "listClaudeCodeWorkspacesFn",
19
- filename: "src/lib/claude-code-server.ts"
20
- }, (opts) => listClaudeCodeWorkspacesFn.__executeServer(opts));
21
- var listClaudeCodeWorkspacesFn = createServerFn({ method: "GET" }).handler(listClaudeCodeWorkspacesFn_createServerFn_handler, async () => {
22
- const { listClaudeCodeWorkspaceGroups } = await import("./claude-code-db-Ik3VStKZ.js");
23
- return listClaudeCodeWorkspaceGroups();
24
- });
25
- var listClaudeCodeSessionsFn_createServerFn_handler = createServerRpc({
26
- id: "2ffc3b20be74973de734b47407226bae6130a05e31d0d9143b52c9a6e28ba6af",
27
- name: "listClaudeCodeSessionsFn",
28
- filename: "src/lib/claude-code-server.ts"
29
- }, (opts) => listClaudeCodeSessionsFn.__executeServer(opts));
30
- var listClaudeCodeSessionsFn = createServerFn({ method: "GET" }).validator(workspaceSchema).handler(listClaudeCodeSessionsFn_createServerFn_handler, async ({ data }) => {
31
- const { listClaudeCodeSessionsForGroup } = await import("./claude-code-db-Ik3VStKZ.js");
32
- return listClaudeCodeSessionsForGroup(data.workspaceKey);
33
- });
34
- var loadClaudeCodeSessionTranscript = async (sessionId) => {
35
- const { readClaudeCodeSessionTranscript, resolveClaudeCodeProjectsDir } = await import("./claude-code-db-Ik3VStKZ.js");
36
- const transcript = await readClaudeCodeSessionTranscript(resolveClaudeCodeProjectsDir(), sessionId);
37
- if (!transcript) throw new Error(`Claude Code session not found: ${sessionId}`);
38
- return transcript;
39
- };
40
- var getClaudeCodeSessionDetailFn_createServerFn_handler = createServerRpc({
41
- id: "6b9382b62370df4b167d9fa590406f3f450b655eee585d88047bb61129037c69",
42
- name: "getClaudeCodeSessionDetailFn",
43
- filename: "src/lib/claude-code-server.ts"
44
- }, (opts) => getClaudeCodeSessionDetailFn.__executeServer(opts));
45
- var getClaudeCodeSessionDetailFn = createServerFn({ method: "GET" }).validator(sessionSchema).handler(getClaudeCodeSessionDetailFn_createServerFn_handler, async ({ data }) => {
46
- return loadClaudeCodeSessionTranscript(data.sessionId);
47
- });
48
- var exportClaudeCodeSessionFn_createServerFn_handler = createServerRpc({
49
- id: "59076299b518e4ee172c6793dceb83740eee7fa39888483c11affac937e1af70",
50
- name: "exportClaudeCodeSessionFn",
51
- filename: "src/lib/claude-code-server.ts"
52
- }, (opts) => exportClaudeCodeSessionFn.__executeServer(opts));
53
- var exportClaudeCodeSessionFn = createServerFn({ method: "POST" }).validator(exportSessionSchema).handler(exportClaudeCodeSessionFn_createServerFn_handler, async ({ data }) => {
54
- const { renderClaudeCodeTranscript } = await import("./claude-code-transcript-C-bxh3cS.js");
55
- const transcript = await loadClaudeCodeSessionTranscript(data.sessionId);
56
- const content = renderClaudeCodeTranscript(transcript, {
57
- includeCommentary: data.includeCommentary,
58
- includeMetadata: data.includeMetadata,
59
- includeTools: data.includeTools,
60
- outputFormat: data.outputFormat
61
- });
62
- if (!content) throw new Error(`Claude Code session has no exportable content: ${data.sessionId}`);
63
- return renderSourceSessionDownload({
64
- content,
65
- fallbackBaseName: "claude-code-session",
66
- fileBaseName: transcript.session.title || transcript.session.sessionId,
67
- outputFormat: data.outputFormat,
68
- zipArchive: data.zipArchive
69
- });
70
- });
71
- //#endregion
72
- export { exportClaudeCodeSessionFn_createServerFn_handler, getClaudeCodeSessionDetailFn_createServerFn_handler, listClaudeCodeSessionsFn_createServerFn_handler, listClaudeCodeWorkspacesFn_createServerFn_handler };
@@ -1,18 +0,0 @@
1
- import { t as claudeCodeSessionDetailQueryOptions } from "./claude-code-queries-Cgzi4K-e.js";
2
- import { t as LoadingPanel } from "./loading-panel-BGFnWseS.js";
3
- import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
- import { jsx } from "react/jsx-runtime";
5
- //#region src/routes/claude-code-sessions.$sessionId.tsx
6
- var $$splitErrorComponentImporter = () => import("./claude-code-sessions._sessionId-DSvPLEUL.js");
7
- var $$splitComponentImporter = () => import("./claude-code-sessions._sessionId-D1RYYi3j.js");
8
- var Route = createFileRoute("/claude-code-sessions/$sessionId")({
9
- component: lazyRouteComponent($$splitComponentImporter, "component"),
10
- errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),
11
- loader: ({ context, params }) => context.queryClient.ensureQueryData(claudeCodeSessionDetailQueryOptions(params.sessionId)),
12
- pendingComponent: () => /* @__PURE__ */ jsx(LoadingPanel, {
13
- description: "Loading the Claude Code transcript, messages, tool calls, and session metadata.",
14
- title: "Loading session"
15
- })
16
- });
17
- //#endregion
18
- export { Route as t };