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,240 +0,0 @@
1
- import { t as cn } from "./utils-C_uf36nf.js";
2
- import { t as Button } from "./button-CmTDnzOn.js";
3
- import { t as Checkbox$1 } from "./checkbox-C0hovF41.js";
4
- import { a as SelectValue, i as SelectTrigger, n as SelectContent, r as SelectItem, t as Select$1 } from "./select-GW76p-ld.js";
5
- import { useEffect, useId, useState } from "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- import { XIcon } from "lucide-react";
8
- import { Dialog } from "radix-ui";
9
- //#region src/components/ui/dialog.tsx
10
- function Dialog$1({ ...props }) {
11
- return /* @__PURE__ */ jsx(Dialog.Root, {
12
- "data-slot": "dialog",
13
- ...props
14
- });
15
- }
16
- function DialogPortal({ ...props }) {
17
- return /* @__PURE__ */ jsx(Dialog.Portal, {
18
- "data-slot": "dialog-portal",
19
- ...props
20
- });
21
- }
22
- function DialogOverlay({ className, ...props }) {
23
- return /* @__PURE__ */ jsx(Dialog.Overlay, {
24
- "data-slot": "dialog-overlay",
25
- className: cn("data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in", className),
26
- ...props
27
- });
28
- }
29
- function DialogContent({ className, children, showCloseButton = true, ...props }) {
30
- return /* @__PURE__ */ jsxs(DialogPortal, {
31
- "data-slot": "dialog-portal",
32
- children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog.Content, {
33
- "data-slot": "dialog-content",
34
- className: cn("data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg outline-none duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg", className),
35
- ...props,
36
- children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog.Close, {
37
- "data-slot": "dialog-close",
38
- className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
39
- children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
40
- className: "sr-only",
41
- children: "Close"
42
- })]
43
- })]
44
- })]
45
- });
46
- }
47
- function DialogHeader({ className, ...props }) {
48
- return /* @__PURE__ */ jsx("div", {
49
- "data-slot": "dialog-header",
50
- className: cn("flex flex-col gap-2 text-center sm:text-left", className),
51
- ...props
52
- });
53
- }
54
- function DialogFooter({ className, showCloseButton = false, children, ...props }) {
55
- return /* @__PURE__ */ jsxs("div", {
56
- "data-slot": "dialog-footer",
57
- className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
58
- ...props,
59
- children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog.Close, {
60
- asChild: true,
61
- children: /* @__PURE__ */ jsx(Button, {
62
- variant: "outline",
63
- children: "Close"
64
- })
65
- })]
66
- });
67
- }
68
- function DialogTitle({ className, ...props }) {
69
- return /* @__PURE__ */ jsx(Dialog.Title, {
70
- "data-slot": "dialog-title",
71
- className: cn("font-semibold text-lg leading-none", className),
72
- ...props
73
- });
74
- }
75
- function DialogDescription({ className, ...props }) {
76
- return /* @__PURE__ */ jsx(Dialog.Description, {
77
- "data-slot": "dialog-description",
78
- className: cn("text-muted-foreground text-sm", className),
79
- ...props
80
- });
81
- }
82
- //#endregion
83
- //#region src/components/export-dialog.tsx
84
- function ExportDialog({ errorMessage = null, forceZipArchive = false, open, pending = false, title = "Export thread", onExport, onOpenChange }) {
85
- const [outputFormat, setOutputFormat] = useState("md");
86
- const [includeMetadata, setIncludeMetadata] = useState(true);
87
- const [includeCommentary, setIncludeCommentary] = useState(false);
88
- const [includeTools, setIncludeTools] = useState(true);
89
- const [zipArchive, setZipArchive] = useState(false);
90
- const effectiveZipArchive = forceZipArchive || zipArchive;
91
- const zipDescriptionId = useId();
92
- useEffect(() => {
93
- if (!open) {
94
- setOutputFormat("md");
95
- setIncludeMetadata(true);
96
- setIncludeCommentary(false);
97
- setIncludeTools(true);
98
- setZipArchive(false);
99
- }
100
- }, [open]);
101
- return /* @__PURE__ */ jsx(Dialog$1, {
102
- open,
103
- onOpenChange,
104
- children: /* @__PURE__ */ jsxs(DialogContent, {
105
- className: "border-[var(--border)] bg-[var(--panel)] text-[var(--foreground)]",
106
- children: [
107
- /* @__PURE__ */ jsxs(DialogHeader, { children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), /* @__PURE__ */ jsx(DialogDescription, {
108
- className: "text-[var(--muted-foreground)]",
109
- children: "Choose the transcript format and whether the export includes tool calls."
110
- })] }),
111
- /* @__PURE__ */ jsxs("div", {
112
- className: "space-y-5 py-2",
113
- children: [
114
- /* @__PURE__ */ jsxs("div", {
115
- className: "space-y-2",
116
- children: [/* @__PURE__ */ jsx("label", {
117
- className: "font-medium text-sm",
118
- htmlFor: "output-format",
119
- children: "Output format"
120
- }), /* @__PURE__ */ jsxs(Select$1, {
121
- value: outputFormat,
122
- onValueChange: (value) => setOutputFormat(value),
123
- children: [/* @__PURE__ */ jsx(SelectTrigger, {
124
- id: "output-format",
125
- className: "border-[var(--border)] bg-[var(--panel-secondary)] text-[var(--foreground)]",
126
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Choose a format" })
127
- }), /* @__PURE__ */ jsxs(SelectContent, {
128
- className: "border-[var(--border)] bg-[var(--panel)] text-[var(--foreground)] shadow-[var(--panel-shadow)]",
129
- children: [/* @__PURE__ */ jsx(SelectItem, {
130
- className: "focus:bg-[var(--panel-secondary)] focus:text-[var(--foreground)] data-[highlighted]:bg-[var(--panel-secondary)] data-[highlighted]:text-[var(--foreground)]",
131
- value: "md",
132
- children: "Markdown (.md)"
133
- }), /* @__PURE__ */ jsx(SelectItem, {
134
- className: "focus:bg-[var(--panel-secondary)] focus:text-[var(--foreground)] data-[highlighted]:bg-[var(--panel-secondary)] data-[highlighted]:text-[var(--foreground)]",
135
- value: "txt",
136
- children: "Plain text (.txt)"
137
- })]
138
- })]
139
- })]
140
- }),
141
- /* @__PURE__ */ jsxs("div", {
142
- className: "flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3",
143
- children: [/* @__PURE__ */ jsx(Checkbox$1, {
144
- "aria-label": "Include metadata",
145
- checked: includeMetadata,
146
- onCheckedChange: (checked) => setIncludeMetadata(checked === true)
147
- }), /* @__PURE__ */ jsxs("span", {
148
- className: "space-y-1",
149
- children: [/* @__PURE__ */ jsx("span", {
150
- className: "block font-medium text-sm",
151
- children: "Include metadata"
152
- }), /* @__PURE__ */ jsx("span", {
153
- className: "block text-[var(--muted-foreground)] text-sm",
154
- children: "Includes the chat metadata section at the top of the exported transcript."
155
- })]
156
- })]
157
- }),
158
- /* @__PURE__ */ jsxs("div", {
159
- className: "flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3",
160
- children: [/* @__PURE__ */ jsx(Checkbox$1, {
161
- "aria-label": "Include commentary",
162
- checked: includeCommentary,
163
- onCheckedChange: (checked) => setIncludeCommentary(checked === true)
164
- }), /* @__PURE__ */ jsxs("span", {
165
- className: "space-y-1",
166
- children: [/* @__PURE__ */ jsx("span", {
167
- className: "block font-medium text-sm",
168
- children: "Include commentary"
169
- }), /* @__PURE__ */ jsx("span", {
170
- className: "block text-[var(--muted-foreground)] text-sm",
171
- children: "Includes assistant commentary-phase updates in the exported transcript."
172
- })]
173
- })]
174
- }),
175
- /* @__PURE__ */ jsxs("div", {
176
- className: "flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3",
177
- children: [/* @__PURE__ */ jsx(Checkbox$1, {
178
- "aria-label": "Include tool calls",
179
- checked: includeTools,
180
- onCheckedChange: (checked) => setIncludeTools(checked === true)
181
- }), /* @__PURE__ */ jsxs("span", {
182
- className: "space-y-1",
183
- children: [/* @__PURE__ */ jsx("span", {
184
- className: "block font-medium text-sm",
185
- children: "Include tool calls"
186
- }), /* @__PURE__ */ jsx("span", {
187
- className: "block text-[var(--muted-foreground)] text-sm",
188
- children: "Includes tool-call summaries and tool-output summaries in the export."
189
- })]
190
- })]
191
- }),
192
- /* @__PURE__ */ jsxs("div", {
193
- className: "flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3",
194
- children: [/* @__PURE__ */ jsx(Checkbox$1, {
195
- "aria-label": "Zip archive",
196
- "aria-describedby": zipDescriptionId,
197
- checked: effectiveZipArchive,
198
- disabled: forceZipArchive,
199
- onCheckedChange: (checked) => setZipArchive(checked === true)
200
- }), /* @__PURE__ */ jsxs("span", {
201
- className: "space-y-1",
202
- children: [/* @__PURE__ */ jsx("span", {
203
- className: "block font-medium text-sm",
204
- children: "Zip archive"
205
- }), /* @__PURE__ */ jsx("span", {
206
- className: "block text-[var(--muted-foreground)] text-sm",
207
- id: zipDescriptionId,
208
- children: forceZipArchive ? "Required when exporting multiple threads." : "Downloads the exported transcript inside a .zip archive."
209
- })]
210
- })]
211
- })
212
- ]
213
- }),
214
- errorMessage ? /* @__PURE__ */ jsx("p", {
215
- className: "text-[var(--destructive)] text-sm",
216
- children: errorMessage
217
- }) : null,
218
- /* @__PURE__ */ jsxs(DialogFooter, { children: [/* @__PURE__ */ jsx(Button, {
219
- className: "rounded-full",
220
- variant: "outline",
221
- onClick: () => onOpenChange(false),
222
- children: "Cancel"
223
- }), /* @__PURE__ */ jsx(Button, {
224
- className: "rounded-full",
225
- disabled: pending,
226
- onClick: () => onExport({
227
- includeCommentary,
228
- includeMetadata,
229
- includeTools,
230
- outputFormat,
231
- zipArchive: effectiveZipArchive
232
- }),
233
- children: pending ? "Exporting..." : "Download export"
234
- })] })
235
- ]
236
- })
237
- });
238
- }
239
- //#endregion
240
- export { ExportDialog as t };
@@ -1,91 +0,0 @@
1
- import { t as formatModelLabel$1 } from "./model-label-B1NWGc65.js";
2
- //#region src/lib/formatters.ts
3
- var DATE_TIME_FORMATTERS = /* @__PURE__ */ new Map();
4
- var getDateTimeFormatters = (timeZone) => {
5
- const cacheKey = timeZone ?? "local";
6
- const cached = DATE_TIME_FORMATTERS.get(cacheKey);
7
- if (cached) return cached;
8
- const created = {
9
- dayKeyFormatter: new Intl.DateTimeFormat("en-CA", {
10
- day: "2-digit",
11
- month: "2-digit",
12
- timeZone,
13
- year: "numeric"
14
- }),
15
- timePartsFormatter: new Intl.DateTimeFormat("en-US", {
16
- day: "numeric",
17
- hour: "numeric",
18
- hour12: true,
19
- minute: "2-digit",
20
- month: "short",
21
- timeZone,
22
- year: "numeric"
23
- })
24
- };
25
- DATE_TIME_FORMATTERS.set(cacheKey, created);
26
- return created;
27
- };
28
- var buildDayKey = (date, timeZone) => {
29
- return getDateTimeFormatters(timeZone).dayKeyFormatter.format(date);
30
- };
31
- var formatTimeParts = (date, timeZone) => {
32
- const parts = getDateTimeFormatters(timeZone).timePartsFormatter.formatToParts(date);
33
- const partMap = new Map(parts.map((part) => [part.type, part.value]));
34
- const hour = partMap.get("hour");
35
- const minute = partMap.get("minute");
36
- const dayPeriod = partMap.get("dayPeriod");
37
- if (!hour || !minute || !dayPeriod) return null;
38
- return {
39
- day: partMap.get("day") ?? "",
40
- month: partMap.get("month") ?? "",
41
- time: `${hour}:${minute} ${dayPeriod}`.trim(),
42
- year: partMap.get("year") ?? ""
43
- };
44
- };
45
- var formatNumber = (value) => {
46
- return new Intl.NumberFormat("en-US").format(value);
47
- };
48
- var formatTokens = (value) => {
49
- return `${formatNumber(value)} tokens`;
50
- };
51
- var formatBytes = (value) => {
52
- if (!value || value <= 0) return "0 B";
53
- const units = [
54
- "B",
55
- "KB",
56
- "MB",
57
- "GB",
58
- "TB"
59
- ];
60
- let size = value;
61
- let unitIndex = 0;
62
- while (size >= 1024 && unitIndex < units.length - 1) {
63
- size /= 1024;
64
- unitIndex += 1;
65
- }
66
- const fractionDigits = size >= 100 || unitIndex === 0 ? 0 : 1;
67
- return `${size.toFixed(fractionDigits)} ${units[unitIndex]}`;
68
- };
69
- var formatDateTime = (value, options = {}) => {
70
- if (value === null || value === void 0 || value === "") return "n/a";
71
- const date = new Date(value);
72
- if (Number.isNaN(date.getTime())) return "n/a";
73
- const now = options.now ?? /* @__PURE__ */ new Date();
74
- const parts = formatTimeParts(date, options.timeZone);
75
- if (!parts) return "n/a";
76
- const { day, month, time, year } = parts;
77
- if (buildDayKey(date, options.timeZone) === buildDayKey(now, options.timeZone)) return time;
78
- const currentYear = formatTimeParts(now, options.timeZone)?.year;
79
- if (year && currentYear && year !== currentYear) return `${month} ${day}, ${year} · ${time}`;
80
- return `${month} ${day} · ${time}`;
81
- };
82
- var formatList = (values) => {
83
- if (values.length === 0) return "n/a";
84
- return values.join(", ");
85
- };
86
- var formatBooleanLabel = (value) => {
87
- return value ? "Yes" : "No";
88
- };
89
- var formatModelLabel = formatModelLabel$1;
90
- //#endregion
91
- export { formatModelLabel as a, formatList as i, formatBytes as n, formatNumber as o, formatDateTime as r, formatTokens as s, formatBooleanLabel as t };
@@ -1,27 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { Loader2 } from "lucide-react";
3
- //#region src/components/loading-panel.tsx
4
- function LoadingPanel({ description = "Fetching local data. Larger workspaces can take a moment.", title = "Loading" }) {
5
- return /* @__PURE__ */ jsxs("div", {
6
- className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] px-6 py-10 text-center shadow-[var(--panel-shadow)]",
7
- children: [
8
- /* @__PURE__ */ jsx("div", {
9
- className: "flex justify-center",
10
- children: /* @__PURE__ */ jsx("div", {
11
- className: "rounded-full border border-[var(--border)] bg-[var(--panel-secondary)] p-3",
12
- children: /* @__PURE__ */ jsx(Loader2, { className: "size-5 animate-spin text-[var(--accent)]" })
13
- })
14
- }),
15
- /* @__PURE__ */ jsx("p", {
16
- className: "mt-4 font-medium text-sm",
17
- children: title
18
- }),
19
- /* @__PURE__ */ jsx("p", {
20
- className: "mt-2 text-[var(--muted-foreground)] text-sm",
21
- children: description
22
- })
23
- ]
24
- });
25
- }
26
- //#endregion
27
- export { LoadingPanel as t };
@@ -1,23 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- //#region src/components/metric-card.tsx
3
- function MetricCard({ helper, label, value }) {
4
- return /* @__PURE__ */ jsxs("div", {
5
- className: "rounded-2xl border border-[var(--border)] bg-[var(--panel)] p-4 shadow-[var(--panel-shadow)]",
6
- children: [
7
- /* @__PURE__ */ jsx("p", {
8
- className: "font-semibold text-[10px] text-[var(--muted-foreground)] uppercase tracking-[0.18em]",
9
- children: label
10
- }),
11
- /* @__PURE__ */ jsx("p", {
12
- className: "mt-2 truncate font-semibold text-lg tracking-[-0.03em]",
13
- children: value
14
- }),
15
- helper ? /* @__PURE__ */ jsx("p", {
16
- className: "mt-1.5 text-[var(--muted-foreground)] text-xs",
17
- children: helper
18
- }) : null
19
- ]
20
- });
21
- }
22
- //#endregion
23
- export { MetricCard as t };
@@ -1,13 +0,0 @@
1
- //#region ../../src/lib/model-label.ts
2
- var formatModelLabel = (value) => {
3
- if (!value) return "Assistant";
4
- return value.split(/[-_\s]+/u).filter(Boolean).map((part) => {
5
- const lower = part.toLowerCase();
6
- if (lower === "gpt") return "GPT";
7
- if (/^[a-z]\d$/u.test(lower)) return lower.toUpperCase();
8
- if (/^\d+(\.\d+)*$/u.test(part)) return part;
9
- return `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`;
10
- }).join(" ");
11
- };
12
- //#endregion
13
- export { formatModelLabel as t };
@@ -1,29 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- //#region src/components/page-header.tsx
3
- function PageHeader({ actions, breadcrumb, eyebrow, subtitle, title }) {
4
- return /* @__PURE__ */ jsxs("div", {
5
- className: "flex flex-col gap-4 border-[var(--border)] border-b pb-5 sm:flex-row sm:items-end sm:justify-between",
6
- children: [/* @__PURE__ */ jsxs("div", {
7
- className: "space-y-2",
8
- children: [
9
- breadcrumb ? /* @__PURE__ */ jsx("div", { children: breadcrumb }) : null,
10
- eyebrow ? /* @__PURE__ */ jsx("p", {
11
- className: "font-semibold text-[11px] text-[var(--muted-foreground)] uppercase tracking-[0.18em]",
12
- children: eyebrow
13
- }) : null,
14
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h2", {
15
- className: "font-semibold text-2xl tracking-[-0.03em] sm:text-[2rem]",
16
- children: title
17
- }), subtitle ? /* @__PURE__ */ jsx("p", {
18
- className: "mt-2 max-w-[60rem] whitespace-pre-wrap break-words text-[var(--muted-foreground)] text-sm",
19
- children: subtitle
20
- }) : null] })
21
- ]
22
- }), actions ? /* @__PURE__ */ jsx("div", {
23
- className: "flex flex-wrap items-center gap-2",
24
- children: actions
25
- }) : null]
26
- });
27
- }
28
- //#endregion
29
- export { PageHeader as t };
@@ -1,31 +0,0 @@
1
- //#region ../../src/lib/path-transforms.ts
2
- var escapeForRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
3
- var toUniquePathVariants = (projectPath) => {
4
- const normalized = projectPath.trim();
5
- const variants = [
6
- normalized,
7
- normalized.replaceAll("\\", "/"),
8
- normalized.replaceAll("/", "\\")
9
- ].filter(Boolean);
10
- return [...new Set(variants)].sort((left, right) => right.length - left.length);
11
- };
12
- var replaceExactProjectPath = (text, projectPath) => {
13
- let result = text;
14
- for (const variant of toUniquePathVariants(projectPath)) {
15
- const escapedVariant = escapeForRegex(variant);
16
- result = result.replace(new RegExp(`${escapedVariant}(?<separator>[\\\\/])`, "gu"), "");
17
- result = result.replace(new RegExp(`${escapedVariant}(?=$|[^A-Za-z0-9._-])`, "gu"), ".");
18
- }
19
- return result;
20
- };
21
- var redactRemainingUsernames = (text) => {
22
- return text.replace(/\/home\/[^/\\]+(?=\/|$)/gu, "~").replace(/\/Users\/[^/\\]+(?=\/|$)/gu, "~").replace(/[A-Za-z]:[\\/]+Users[\\/]+[^\\/]+(?=[\\/]|$)/gu, "~");
23
- };
24
- var applyPathTransforms = (text, settings) => {
25
- let result = text;
26
- if (settings.convertToProjectRoot && settings.projectPath) result = replaceExactProjectPath(result, settings.projectPath);
27
- if (settings.redactUsername) result = redactRemainingUsernames(result);
28
- return result;
29
- };
30
- //#endregion
31
- export { applyPathTransforms as t };
@@ -1,20 +0,0 @@
1
- import { r as projectThreadsQueryOptions } from "./codex-queries-CtgeZ7VL.js";
2
- import { i as parseTextQuerySearch } from "./route-search-ts4W9MJ9.js";
3
- import { t as LoadingPanel } from "./loading-panel-BGFnWseS.js";
4
- import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
5
- import { jsx } from "react/jsx-runtime";
6
- //#region src/routes/projects.$project.tsx
7
- var $$splitErrorComponentImporter = () => import("./projects._project-Bshqk7JA.js");
8
- var $$splitComponentImporter = () => import("./projects._project-CvZho6EQ.js");
9
- var Route = createFileRoute("/projects/$project")({
10
- component: lazyRouteComponent($$splitComponentImporter, "component"),
11
- errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),
12
- loader: ({ context, params }) => context.queryClient.ensureQueryData(projectThreadsQueryOptions(params.project)),
13
- pendingComponent: () => /* @__PURE__ */ jsx(LoadingPanel, {
14
- description: "Loading project threads and transcript summaries. Large projects can take a moment.",
15
- title: "Loading project"
16
- }),
17
- validateSearch: parseTextQuerySearch
18
- });
19
- //#endregion
20
- export { Route as t };
@@ -1,12 +0,0 @@
1
- import { t as ReloadErrorPanel } from "./reload-error-panel-BJMxY3U1.js";
2
- import { jsx } from "react/jsx-runtime";
3
- //#region src/routes/projects.$project.tsx?tsr-split=errorComponent
4
- function ProjectDetailErrorComponent({ error }) {
5
- const isSqlite = error.message.includes("unable to open database") || error.message.includes("database is locked");
6
- return /* @__PURE__ */ jsx(ReloadErrorPanel, {
7
- description: isSqlite ? "Codex may have an exclusive lock on the database. Reload to retry." : error.message,
8
- title: isSqlite ? "Database unavailable" : "Failed to load Codex project"
9
- });
10
- }
11
- //#endregion
12
- export { ProjectDetailErrorComponent as errorComponent };