spiracha 1.5.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +114 -205
- package/README.md +89 -269
- package/apps/ui/AGENTS.md +17 -7
- package/apps/ui/README.md +34 -8
- package/apps/ui/components.json +21 -0
- package/apps/ui/package.json +65 -0
- package/apps/ui/src/components/antigravity-conversations-table.tsx +206 -0
- package/apps/ui/src/components/antigravity-keychain-panel.tsx +76 -0
- package/apps/ui/src/components/antigravity-workspaces-table.tsx +63 -0
- package/apps/ui/src/components/app-shell.tsx +124 -0
- package/apps/ui/src/components/breadcrumbs.tsx +53 -0
- package/apps/ui/src/components/claude-code-sessions-table.tsx +114 -0
- package/apps/ui/src/components/claude-code-workspaces-table.tsx +55 -0
- package/apps/ui/src/components/cursor-threads-table.tsx +189 -0
- package/apps/ui/src/components/cursor-workspaces-table.tsx +140 -0
- package/apps/ui/src/components/data-table.tsx +241 -0
- package/apps/ui/src/components/delete-confirm-dialog.tsx +88 -0
- package/apps/ui/src/components/export-dialog.tsx +184 -0
- package/apps/ui/src/components/json-panel.tsx +17 -0
- package/apps/ui/src/components/kiro-sessions-table.tsx +112 -0
- package/apps/ui/src/components/kiro-workspaces-table.tsx +53 -0
- package/apps/ui/src/components/list-search-input.tsx +18 -0
- package/apps/ui/src/components/loading-panel.tsx +23 -0
- package/apps/ui/src/components/metadata-section.tsx +31 -0
- package/apps/ui/src/components/metric-card.tsx +19 -0
- package/apps/ui/src/components/opencode-sessions-table.tsx +128 -0
- package/apps/ui/src/components/opencode-workspaces-table.tsx +57 -0
- package/apps/ui/src/components/page-header.tsx +33 -0
- package/apps/ui/src/components/projects-loading-state.tsx +74 -0
- package/apps/ui/src/components/projects-table.tsx +108 -0
- package/apps/ui/src/components/qoder-sessions-table.tsx +112 -0
- package/apps/ui/src/components/qoder-workspaces-table.tsx +53 -0
- package/apps/ui/src/components/recent-threads-list.tsx +52 -0
- package/apps/ui/src/components/reload-error-panel.tsx +20 -0
- package/apps/ui/src/components/text-document-panel.tsx +19 -0
- package/apps/ui/src/components/theme-toggle.tsx +48 -0
- package/apps/ui/src/components/threads-table.tsx +202 -0
- package/apps/ui/src/components/transcript-view.tsx +552 -0
- package/apps/ui/src/components/ui/alert-dialog.tsx +160 -0
- package/apps/ui/src/components/ui/badge.tsx +45 -0
- package/apps/ui/src/components/ui/button.tsx +62 -0
- package/apps/ui/src/components/ui/checkbox.tsx +29 -0
- package/apps/ui/src/components/ui/dialog.tsx +137 -0
- package/apps/ui/src/components/ui/dropdown-menu.tsx +217 -0
- package/apps/ui/src/components/ui/input.tsx +21 -0
- package/apps/ui/src/components/ui/scroll-area.tsx +46 -0
- package/apps/ui/src/components/ui/select.tsx +163 -0
- package/apps/ui/src/components/ui/separator.tsx +28 -0
- package/apps/ui/src/components/ui/sheet.tsx +107 -0
- package/apps/ui/src/components/ui/skeleton.tsx +7 -0
- package/apps/ui/src/components/ui/table.tsx +76 -0
- package/apps/ui/src/components/ui/tabs.tsx +71 -0
- package/apps/ui/src/components/ui/tooltip.tsx +44 -0
- package/apps/ui/src/integrations/tanstack-query/devtools.tsx +6 -0
- package/apps/ui/src/integrations/tanstack-query/root-provider.tsx +10 -0
- package/apps/ui/src/lib/antigravity-conversation-state.ts +28 -0
- package/apps/ui/src/lib/antigravity-queries.ts +33 -0
- package/apps/ui/src/lib/antigravity-server.ts +128 -0
- package/apps/ui/src/lib/antigravity-transcript-events.ts +335 -0
- package/apps/ui/src/lib/claude-code-queries.ts +26 -0
- package/apps/ui/src/lib/claude-code-server.ts +75 -0
- package/apps/ui/src/lib/claude-code-transcript-events.ts +154 -0
- package/apps/ui/src/lib/codex-queries.ts +66 -0
- package/apps/ui/src/lib/codex-server.ts +209 -0
- package/apps/ui/src/lib/cursor-queries.ts +37 -0
- package/apps/ui/src/lib/cursor-server.ts +272 -0
- package/apps/ui/src/lib/cursor-transcript-events.ts +229 -0
- package/apps/ui/src/lib/download.ts +166 -0
- package/apps/ui/src/lib/formatters.ts +149 -0
- package/apps/ui/src/lib/kiro-queries.ts +22 -0
- package/apps/ui/src/lib/kiro-server.ts +73 -0
- package/apps/ui/src/lib/kiro-transcript-events.ts +113 -0
- package/apps/ui/src/lib/opencode-queries.ts +37 -0
- package/apps/ui/src/lib/opencode-server.ts +73 -0
- package/apps/ui/src/lib/opencode-transcript-events.ts +221 -0
- package/apps/ui/src/lib/package-metadata.ts +16 -0
- package/apps/ui/src/lib/path-utils.ts +13 -0
- package/apps/ui/src/lib/qoder-queries.ts +22 -0
- package/apps/ui/src/lib/qoder-server.ts +79 -0
- package/apps/ui/src/lib/qoder-transcript-events.ts +139 -0
- package/apps/ui/src/lib/route-search.ts +68 -0
- package/apps/ui/src/lib/settings-store.tsx +59 -0
- package/apps/ui/src/lib/source-session-export-server.ts +56 -0
- package/apps/ui/src/lib/text-filter.ts +22 -0
- package/apps/ui/src/lib/thread-id.ts +3 -0
- package/apps/ui/src/lib/thread-transcript-stats.ts +57 -0
- package/apps/ui/src/lib/utils.ts +7 -0
- package/apps/ui/src/routeTree.gen.ts +730 -0
- package/apps/ui/src/router.tsx +20 -0
- package/apps/ui/src/routes/$threadId.tsx +22 -0
- package/apps/ui/src/routes/__root.tsx +127 -0
- package/apps/ui/src/routes/analytics.tsx +143 -0
- package/apps/ui/src/routes/antigravity-conversations.$conversationId.tsx +438 -0
- package/apps/ui/src/routes/antigravity.$workspaceKey.tsx +127 -0
- package/apps/ui/src/routes/antigravity.index.tsx +51 -0
- package/apps/ui/src/routes/api.v1.conversation-query.ts +12 -0
- package/apps/ui/src/routes/api.v1.conversations.$source.$id.export.ts +12 -0
- package/apps/ui/src/routes/api.v1.conversations.$source.$id.ts +12 -0
- package/apps/ui/src/routes/api.v1.conversations.ts +12 -0
- package/apps/ui/src/routes/api.v1.resolve.ts +12 -0
- package/apps/ui/src/routes/api.v1.sources.ts +12 -0
- package/apps/ui/src/routes/claude-code-sessions.$sessionId.tsx +342 -0
- package/apps/ui/src/routes/claude-code.$workspaceKey.tsx +135 -0
- package/apps/ui/src/routes/claude-code.index.tsx +48 -0
- package/apps/ui/src/routes/codex.$project.tsx +390 -0
- package/apps/ui/src/routes/codex.index.tsx +116 -0
- package/apps/ui/src/routes/cursor-threads.$composerId.tsx +435 -0
- package/apps/ui/src/routes/cursor.$workspaceKey.tsx +416 -0
- package/apps/ui/src/routes/cursor.index.tsx +120 -0
- package/apps/ui/src/routes/index.tsx +124 -0
- package/apps/ui/src/routes/kiro-sessions.$sessionId.tsx +345 -0
- package/apps/ui/src/routes/kiro.$workspaceKey.tsx +136 -0
- package/apps/ui/src/routes/kiro.index.tsx +48 -0
- package/apps/ui/src/routes/opencode-sessions.$sessionId.tsx +334 -0
- package/apps/ui/src/routes/opencode.$workspaceKey.tsx +135 -0
- package/apps/ui/src/routes/opencode.index.tsx +48 -0
- package/apps/ui/src/routes/qoder-sessions.$sessionId.tsx +341 -0
- package/apps/ui/src/routes/qoder.$workspaceKey.tsx +139 -0
- package/apps/ui/src/routes/qoder.index.tsx +48 -0
- package/apps/ui/src/routes/settings.tsx +91 -0
- package/apps/ui/src/routes/threads.$threadId.tsx +619 -0
- package/apps/ui/src/styles.css +122 -0
- package/apps/ui/tsconfig.json +29 -0
- package/apps/ui/vite.config.ts +84 -0
- package/bin/spiracha.ts +32 -0
- package/package.json +46 -73
- package/src/client.ts +290 -0
- package/src/lib/antigravity-db.ts +213 -19
- package/src/lib/antigravity-exporter-types.ts +1 -0
- package/src/lib/codex-analytics.ts +1 -1
- package/src/lib/codex-browser-db.ts +410 -74
- package/src/lib/codex-browser-export.ts +6 -14
- package/src/lib/codex-browser-types.ts +1 -1
- package/src/lib/{codex-exporter-types.ts → codex-thread-types.ts} +2 -30
- package/src/lib/{codex-exporter-transcript.ts → codex-transcript-renderer.ts} +64 -28
- package/src/lib/conversation-api.ts +792 -0
- package/src/lib/conversation-data/adapter-helpers.ts +110 -0
- package/src/lib/conversation-data/antigravity-adapter.ts +148 -0
- package/src/lib/conversation-data/claude-code-adapter.ts +175 -0
- package/src/lib/conversation-data/codex-adapter.ts +245 -0
- package/src/lib/conversation-data/cursor-adapter.ts +171 -0
- package/src/lib/conversation-data/index.ts +311 -0
- package/src/lib/conversation-data/kiro-adapter.ts +140 -0
- package/src/lib/conversation-data/message-selector.ts +37 -0
- package/src/lib/conversation-data/opencode-adapter.ts +180 -0
- package/src/lib/conversation-data/path-match.ts +79 -0
- package/src/lib/conversation-data/qoder-adapter.ts +230 -0
- package/src/lib/conversation-data/types.ts +116 -0
- package/src/lib/cursor-db.ts +67 -21
- package/src/lib/cursor-exporter-types.ts +0 -19
- package/src/lib/qoder-acp-client.ts +268 -0
- package/src/lib/qoder-db.ts +1601 -0
- package/src/lib/qoder-exporter-types.ts +114 -0
- package/src/lib/qoder-transcript-phase.ts +41 -0
- package/src/lib/qoder-transcript.ts +112 -0
- package/apps/ui/dist/client/assets/_threadId-CAIeH5mq.js +0 -1
- package/apps/ui/dist/client/assets/analytics-DOy1b6Sh.js +0 -1
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DqySVO2K.js +0 -7
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-KAcXtNxI.js +0 -1
- package/apps/ui/dist/client/assets/antigravity-keychain-panel-B77qJz6f.js +0 -1
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-B3NM6gRH.js +0 -1
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-ByitGWki.js +0 -1
- package/apps/ui/dist/client/assets/antigravity.index-DP9JC2P9.js +0 -1
- package/apps/ui/dist/client/assets/antigravity.index-DgW25FEV.js +0 -1
- package/apps/ui/dist/client/assets/badge-C3i4OKs8.js +0 -1
- package/apps/ui/dist/client/assets/checkbox-CdHitXWQ.js +0 -1
- package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-8pQ55ci2.js +0 -1
- package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-DVz5UmtU.js +0 -1
- package/apps/ui/dist/client/assets/claude-code._workspaceKey-BBKskSum.js +0 -1
- package/apps/ui/dist/client/assets/claude-code._workspaceKey-OkikMUFs.js +0 -1
- package/apps/ui/dist/client/assets/claude-code.index-Cwu76dbb.js +0 -1
- package/apps/ui/dist/client/assets/claude-code.index-D6eMd08t.js +0 -1
- package/apps/ui/dist/client/assets/createServerFn-B-KkwmHU.js +0 -3
- package/apps/ui/dist/client/assets/cursor-threads._composerId-CmBFclK8.js +0 -1
- package/apps/ui/dist/client/assets/cursor-threads._composerId-hBWlP1D-.js +0 -1
- package/apps/ui/dist/client/assets/cursor._workspaceKey-BFPkIRi-.js +0 -1
- package/apps/ui/dist/client/assets/cursor._workspaceKey-CaAZjGmm.js +0 -1
- package/apps/ui/dist/client/assets/cursor.index-8y4o20kb.js +0 -2
- package/apps/ui/dist/client/assets/cursor.index-CrnMwDCi.js +0 -1
- package/apps/ui/dist/client/assets/data-table-Br78_dk3.js +0 -4
- package/apps/ui/dist/client/assets/delete-confirm-dialog-Bxs07u-j.js +0 -7
- package/apps/ui/dist/client/assets/dist-B9pyYCVU.js +0 -1
- package/apps/ui/dist/client/assets/dist-BrJhN2A0.js +0 -5
- package/apps/ui/dist/client/assets/dist-Cmd3AIfD.js +0 -1
- package/apps/ui/dist/client/assets/dist-DvMS2965.js +0 -1
- package/apps/ui/dist/client/assets/download-Bf0QJKD3.js +0 -1
- package/apps/ui/dist/client/assets/dropdown-menu-D5cvPaZt.js +0 -1
- package/apps/ui/dist/client/assets/es2015-ad6040dw.js +0 -41
- package/apps/ui/dist/client/assets/export-dialog-Dr8d2MqD.js +0 -1
- package/apps/ui/dist/client/assets/formatters-BtqyrX_c.js +0 -1
- package/apps/ui/dist/client/assets/index-C-STgIH4.js +0 -166
- package/apps/ui/dist/client/assets/jsx-runtime-DGeXAQPT.js +0 -1
- package/apps/ui/dist/client/assets/kiro-sessions._sessionId-CKgfJ7GR.js +0 -1
- package/apps/ui/dist/client/assets/kiro-sessions._sessionId-zvIJHtQF.js +0 -1
- package/apps/ui/dist/client/assets/kiro._workspaceKey-DhVuJuZB.js +0 -1
- package/apps/ui/dist/client/assets/kiro._workspaceKey-QArsjkTY.js +0 -1
- package/apps/ui/dist/client/assets/kiro.index-C-fr4m7i.js +0 -1
- package/apps/ui/dist/client/assets/kiro.index-OYgAdtZd.js +0 -1
- package/apps/ui/dist/client/assets/metric-card-Dplm0ZiM.js +0 -1
- package/apps/ui/dist/client/assets/opencode-sessions._sessionId-DLjiTst-.js +0 -1
- package/apps/ui/dist/client/assets/opencode-sessions._sessionId-biBwrRbt.js +0 -8
- package/apps/ui/dist/client/assets/opencode._workspaceKey-C7OIzMOJ.js +0 -1
- package/apps/ui/dist/client/assets/opencode._workspaceKey-sBakX0oI.js +0 -1
- package/apps/ui/dist/client/assets/opencode.index-Bl_kNs9N.js +0 -1
- package/apps/ui/dist/client/assets/opencode.index-CN53bVmb.js +0 -1
- package/apps/ui/dist/client/assets/page-header-Cwa3p6Tl.js +0 -1
- package/apps/ui/dist/client/assets/preload-helper-B8fFrdxC.js +0 -1
- package/apps/ui/dist/client/assets/projects._project-D8WloxQN.js +0 -1
- package/apps/ui/dist/client/assets/projects._project-DSDwH4NF.js +0 -1
- package/apps/ui/dist/client/assets/projects.index-5xRtuJdX.js +0 -3
- package/apps/ui/dist/client/assets/projects.index-DEfhWqa8.js +0 -1
- package/apps/ui/dist/client/assets/react-dom-DL96Jor4.js +0 -1
- package/apps/ui/dist/client/assets/refresh-ccw-BgKjOiA6.js +0 -1
- package/apps/ui/dist/client/assets/reload-error-panel-AHqu0akK.js +0 -1
- package/apps/ui/dist/client/assets/routes-DnzF_9CX.js +0 -1
- package/apps/ui/dist/client/assets/scroll-text-fM0sMOB3.js +0 -1
- package/apps/ui/dist/client/assets/select-CYF6pF37.js +0 -1
- package/apps/ui/dist/client/assets/settings-Dx70jgP_.js +0 -1
- package/apps/ui/dist/client/assets/sqlite-error-B6uZjUe8.js +0 -1
- package/apps/ui/dist/client/assets/styles-B7Zi9EFA.css +0 -1
- package/apps/ui/dist/client/assets/tabs-CmuhkT-c.js +0 -7
- package/apps/ui/dist/client/assets/text-filter-DVAZySUS.js +0 -2
- package/apps/ui/dist/client/assets/thread-transcript-stats-BUNz6u7F.js +0 -1
- package/apps/ui/dist/client/assets/threads._threadId-BB9tTsV4.js +0 -1
- package/apps/ui/dist/client/assets/threads._threadId-BMRSFow3.js +0 -1
- package/apps/ui/dist/client/assets/useMutation-BSFult2i.js +0 -1
- package/apps/ui/dist/client/assets/useQuery-CjINKZf1.js +0 -1
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CQ8Jjs3B.js +0 -387
- package/apps/ui/dist/server/assets/_threadId-B6SrBR9E.js +0 -6
- package/apps/ui/dist/server/assets/analytics-CYP_LT5Y.js +0 -16
- package/apps/ui/dist/server/assets/analytics-CtpOMVMO.js +0 -146
- package/apps/ui/dist/server/assets/antigravity-conversation-state-HgzS302O.js +0 -16
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BKOyL2T6.js +0 -613
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-D426O-64.js +0 -11
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-eS87Dx7g.js +0 -20
- package/apps/ui/dist/server/assets/antigravity-db-Bh8_U9uw.js +0 -580
- package/apps/ui/dist/server/assets/antigravity-keychain-DOiuHDwK.js +0 -126
- package/apps/ui/dist/server/assets/antigravity-keychain-panel-CC7FLmAK.js +0 -55
- package/apps/ui/dist/server/assets/antigravity-queries-CGrJO9Vr.js +0 -37
- package/apps/ui/dist/server/assets/antigravity-server-CHRjVFqN.js +0 -114
- package/apps/ui/dist/server/assets/antigravity._workspaceKey-3m_MzNFA.js +0 -11
- package/apps/ui/dist/server/assets/antigravity._workspaceKey-B0QeYUOh.js +0 -28
- package/apps/ui/dist/server/assets/antigravity._workspaceKey-C3kP-qyN.js +0 -210
- package/apps/ui/dist/server/assets/antigravity.index-CPCYkqCi.js +0 -104
- package/apps/ui/dist/server/assets/antigravity.index-DudTB3Tq.js +0 -11
- package/apps/ui/dist/server/assets/badge-EvdhKK_Z.js +0 -26
- package/apps/ui/dist/server/assets/button-CmTDnzOn.js +0 -46
- package/apps/ui/dist/server/assets/checkbox-C0hovF41.js +0 -19
- package/apps/ui/dist/server/assets/claude-code-db-Ik3VStKZ.js +0 -361
- package/apps/ui/dist/server/assets/claude-code-queries-Cgzi4K-e.js +0 -37
- package/apps/ui/dist/server/assets/claude-code-server-PfraClXS.js +0 -72
- package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-C55oe6zj.js +0 -18
- package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-D1RYYi3j.js +0 -473
- package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-DSvPLEUL.js +0 -11
- package/apps/ui/dist/server/assets/claude-code-transcript-C-bxh3cS.js +0 -139
- package/apps/ui/dist/server/assets/claude-code-transcript-phase-DmUMc8VU.js +0 -10
- package/apps/ui/dist/server/assets/claude-code._workspaceKey-B5Xg_-tE.js +0 -28
- package/apps/ui/dist/server/assets/claude-code._workspaceKey-BPlzyXPa.js +0 -11
- package/apps/ui/dist/server/assets/claude-code._workspaceKey-DqDve2wl.js +0 -191
- package/apps/ui/dist/server/assets/claude-code.index-B7yYR7dD.js +0 -92
- package/apps/ui/dist/server/assets/claude-code.index-BUHThG1W.js +0 -11
- package/apps/ui/dist/server/assets/codex-queries-CtgeZ7VL.js +0 -99
- package/apps/ui/dist/server/assets/codex-server-CGXU4H8-.js +0 -2294
- package/apps/ui/dist/server/assets/concurrency-VXtYvlGh.js +0 -18
- package/apps/ui/dist/server/assets/createServerRpc-CF_DEwnm.js +0 -12
- package/apps/ui/dist/server/assets/createSsrRpc-C754NPki.js +0 -16
- package/apps/ui/dist/server/assets/cursor-db-CZnYy7aT.js +0 -830
- package/apps/ui/dist/server/assets/cursor-exporter-types-CI3goo-c.js +0 -34
- package/apps/ui/dist/server/assets/cursor-queries-NCIM0Nat.js +0 -67
- package/apps/ui/dist/server/assets/cursor-recovery-CXpO8KcD.js +0 -361
- package/apps/ui/dist/server/assets/cursor-server-DNu52A3K.js +0 -213
- package/apps/ui/dist/server/assets/cursor-threads._composerId-BB0Y_Mao.js +0 -11
- package/apps/ui/dist/server/assets/cursor-threads._composerId-Ckn6ItHI.js +0 -582
- package/apps/ui/dist/server/assets/cursor-threads._composerId-p9-ARAzc.js +0 -18
- package/apps/ui/dist/server/assets/cursor-transcript-B7tGnqtn.js +0 -125
- package/apps/ui/dist/server/assets/cursor._workspaceKey-CZuohIUL.js +0 -28
- package/apps/ui/dist/server/assets/cursor._workspaceKey-DPp5JSjy.js +0 -401
- package/apps/ui/dist/server/assets/cursor._workspaceKey-nmg3YIOQ.js +0 -11
- package/apps/ui/dist/server/assets/cursor.index-CcsX7DG0.js +0 -11
- package/apps/ui/dist/server/assets/cursor.index-DkWT-mxw.js +0 -189
- package/apps/ui/dist/server/assets/data-table-Cdct823O.js +0 -189
- package/apps/ui/dist/server/assets/delete-confirm-dialog-BcBNCxWB.js +0 -144
- package/apps/ui/dist/server/assets/download-DMmiy1xf.js +0 -92
- package/apps/ui/dist/server/assets/dropdown-menu-Dy_9t6TN.js +0 -36
- package/apps/ui/dist/server/assets/empty-plugin-adapters-B3lHh1La.js +0 -5
- package/apps/ui/dist/server/assets/export-dialog-D88ze9Gy.js +0 -240
- package/apps/ui/dist/server/assets/formatters-FJaGZgJk.js +0 -91
- package/apps/ui/dist/server/assets/kiro-db--fXrED_-.js +0 -552
- package/apps/ui/dist/server/assets/kiro-queries-CzNlM2ok.js +0 -37
- package/apps/ui/dist/server/assets/kiro-server-9WRxg2Au.js +0 -72
- package/apps/ui/dist/server/assets/kiro-sessions._sessionId-CRY2c7YO.js +0 -11
- package/apps/ui/dist/server/assets/kiro-sessions._sessionId-F1UlwxmR.js +0 -449
- package/apps/ui/dist/server/assets/kiro-sessions._sessionId-bvTulT7C.js +0 -18
- package/apps/ui/dist/server/assets/kiro-transcript-DoekQBaH.js +0 -112
- package/apps/ui/dist/server/assets/kiro-transcript-phase-CJG40nQg.js +0 -27
- package/apps/ui/dist/server/assets/kiro._workspaceKey-BDe9sQwo.js +0 -11
- package/apps/ui/dist/server/assets/kiro._workspaceKey-CJsjgNwO.js +0 -28
- package/apps/ui/dist/server/assets/kiro._workspaceKey-D_-4Qb7y.js +0 -193
- package/apps/ui/dist/server/assets/kiro.index-C__-UROk.js +0 -11
- package/apps/ui/dist/server/assets/kiro.index-CmTbqeYj.js +0 -93
- package/apps/ui/dist/server/assets/loading-panel-BGFnWseS.js +0 -27
- package/apps/ui/dist/server/assets/metric-card-ByEeLu0r.js +0 -23
- package/apps/ui/dist/server/assets/model-label-B1NWGc65.js +0 -13
- package/apps/ui/dist/server/assets/opencode-db-BM7KjOzc.js +0 -397
- package/apps/ui/dist/server/assets/opencode-queries-BeNYXnQv.js +0 -50
- package/apps/ui/dist/server/assets/opencode-server-BpQ_kRze.js +0 -72
- package/apps/ui/dist/server/assets/opencode-sessions._sessionId-CGQ-t0vD.js +0 -518
- package/apps/ui/dist/server/assets/opencode-sessions._sessionId-D8Q7in_Z.js +0 -18
- package/apps/ui/dist/server/assets/opencode-sessions._sessionId-DKOvi0lV.js +0 -11
- package/apps/ui/dist/server/assets/opencode-think-tags-CAoD-EcZ.js +0 -87
- package/apps/ui/dist/server/assets/opencode-transcript-BNTcGNym.js +0 -141
- package/apps/ui/dist/server/assets/opencode-transcript-phase-OqLkiQD0.js +0 -32
- package/apps/ui/dist/server/assets/opencode._workspaceKey-BdqcWHw1.js +0 -11
- package/apps/ui/dist/server/assets/opencode._workspaceKey-CfH96HTT.js +0 -28
- package/apps/ui/dist/server/assets/opencode._workspaceKey-DdbHPDrO.js +0 -207
- package/apps/ui/dist/server/assets/opencode.index-BbVzkJXP.js +0 -11
- package/apps/ui/dist/server/assets/opencode.index-Vh_Gq_1L.js +0 -93
- package/apps/ui/dist/server/assets/page-header-VNSaM3xd.js +0 -29
- package/apps/ui/dist/server/assets/path-transforms-DL2IwtYd.js +0 -31
- package/apps/ui/dist/server/assets/projects._project-4io5LO0E.js +0 -20
- package/apps/ui/dist/server/assets/projects._project-Bshqk7JA.js +0 -12
- package/apps/ui/dist/server/assets/projects._project-D6ZoGhJ8.js +0 -395
- package/apps/ui/dist/server/assets/projects.index-BLXOx5eL.js +0 -12
- package/apps/ui/dist/server/assets/projects.index-BkLiF2FF.js +0 -182
- package/apps/ui/dist/server/assets/projects.index-DesYXwfi.js +0 -14
- package/apps/ui/dist/server/assets/reload-error-panel-BJMxY3U1.js +0 -25
- package/apps/ui/dist/server/assets/route-search-ts4W9MJ9.js +0 -38
- package/apps/ui/dist/server/assets/router-Sac2DGk6.js +0 -518
- package/apps/ui/dist/server/assets/routes-Bsact1uB.js +0 -184
- package/apps/ui/dist/server/assets/routes-BzkJgq4W.js +0 -34
- package/apps/ui/dist/server/assets/select-GW76p-ld.js +0 -76
- package/apps/ui/dist/server/assets/settings-OayxIYQQ.js +0 -100
- package/apps/ui/dist/server/assets/settings-store-DpEJEQ7M.js +0 -52
- package/apps/ui/dist/server/assets/shared-DyhChtHf.js +0 -137
- package/apps/ui/dist/server/assets/source-session-export-server-DNutCawb.js +0 -38
- package/apps/ui/dist/server/assets/sqlite-error-LZDrnxdd.js +0 -13
- package/apps/ui/dist/server/assets/start-B_HFwkkk.js +0 -4
- package/apps/ui/dist/server/assets/tabs-DkaChNVg.js +0 -501
- package/apps/ui/dist/server/assets/text-filter-CGKxMCKt.js +0 -36
- package/apps/ui/dist/server/assets/thread-transcript-stats-Dh34mt2u.js +0 -45
- package/apps/ui/dist/server/assets/threads._threadId-BSSK4nkI.js +0 -26
- package/apps/ui/dist/server/assets/threads._threadId-BeXEc4Lo.js +0 -648
- package/apps/ui/dist/server/assets/threads._threadId-Ci0S4mKU.js +0 -18
- package/apps/ui/dist/server/assets/ui-export-files-BHLX9bhN.js +0 -83
- package/apps/ui/dist/server/assets/utils-C_uf36nf.js +0 -8
- package/apps/ui/dist/server/server.js +0 -5895
- package/bin/codex-chats-claude.js +0 -5
- package/bin/codex-chats.js +0 -5
- package/bin/spiracha.js +0 -5
- package/src/export-chats.ts +0 -120
- package/src/export-claude.ts +0 -36
- package/src/export-cursor.ts +0 -244
- package/src/lib/claude-exporter.ts +0 -864
- package/src/lib/codex-exporter-cli.ts +0 -277
- package/src/lib/codex-exporter-db.ts +0 -319
- package/src/lib/codex-exporter.ts +0 -115
- package/src/lib/cursor-exporter.ts +0 -266
- package/src/lib/interactive-cli.ts +0 -433
- package/src/lib/native-open.ts +0 -54
- package/src/mcp-server.ts +0 -137
- package/src/spiracha.ts +0 -116
- package/src/ui-cli.ts +0 -310
- /package/apps/ui/{dist/client → public}/icon.svg +0 -0
- /package/apps/ui/{dist/client → public}/manifest.json +0 -0
- /package/apps/ui/{dist/client → public}/robots.txt +0 -0
package/README.md
CHANGED
|
@@ -4,331 +4,151 @@
|
|
|
4
4
|
<img src="apps/ui/public/icon.svg" alt="Spiracha icon" width="96" height="100">
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
-
[](https://www.npmjs.com/package/spiracha)
|
|
8
|
-
[](https://www.npmjs.com/package/spiracha)
|
|
9
7
|
[](LICENSE.md)
|
|
10
8
|
[](https://bun.sh)
|
|
11
|
-
[](https://wakatime.com/badge/user/a0b906ce-b8e7-4463-8bce-383238df6d4b/project/f035d5e2-fa44-4383-913b-53c2c326d8a7)
|
|
12
9
|
|
|
13
|
-
|
|
10
|
+
Spiracha is a local TanStack Start app for browsing and exporting agent conversation history from Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode.
|
|
11
|
+
|
|
12
|
+
The legacy CLI, MCP server, and Codex plugin surfaces have been removed in the 2.0 hard cut. Spiracha now exposes the UI and a stable local data API; client-specific workflows such as review collection belong in the client that calls the API.
|
|
14
13
|
|
|
15
14
|
## Quick Start
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
To run the packaged app:
|
|
18
17
|
|
|
19
18
|
```bash
|
|
20
|
-
|
|
21
|
-
rtk bun run ui:dev
|
|
19
|
+
bunx spiracha
|
|
22
20
|
```
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
rtk bunx spiracha
|
|
28
|
-
rtk bunx spiracha ui
|
|
29
|
-
rtk bunx spiracha claude /path/to/session-export.jsonl --output-format txt
|
|
30
|
-
rtk bunx spiracha cursor list
|
|
31
|
-
```
|
|
22
|
+
Spiracha asks Vite for port 3000 and automatically uses the next available port when 3000 is occupied.
|
|
32
23
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- Export Codex session transcripts from local `.codex` history
|
|
36
|
-
- Export Cursor Agent/Composer threads from local Cursor storage
|
|
37
|
-
- Browse Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode history in a TanStack Start UI
|
|
38
|
-
- Inspect Codex thread timelines, tool calls, thread metadata, and raw event context
|
|
39
|
-
- Inspect Claude Code project workspaces, dedicated session detail pages, reasoning/tool calls, token metadata, and export sessions directly from local `~/.claude/projects` JSONL files
|
|
40
|
-
- Inspect Kiro workspace inventories, dedicated session detail pages, image attachments, prompt logs, execution-derived tool calls, and export sessions
|
|
41
|
-
- Inspect Cursor workspace inventories, dedicated thread detail pages, recover split storage buckets, and export or delete workspace threads
|
|
42
|
-
- Inspect Antigravity workspaces, dedicated conversation detail pages, unlock transcript export through macOS Keychain, and export conversation transcripts or generated artifacts
|
|
43
|
-
- Inspect OpenCode project workspaces, dedicated session detail pages, reasoning/tool parts, MiniMax `<think>` blocks, token metadata, and export sessions
|
|
44
|
-
- Delete threads or derived projects from the Codex SQLite database after confirmation
|
|
45
|
-
- Download thread exports directly from the UI as Markdown, plain text, or optional zip archives, with optional metadata, commentary, and tool-call inclusion
|
|
46
|
-
- Keep source-specific assistant commentary hidden by default while still showing final answers, with matching export filtering for Claude Code, Kiro, and OpenCode
|
|
47
|
-
- View dashboard and analytics summaries, including token totals and tool-call frequency
|
|
48
|
-
- Filter Codex exports by:
|
|
49
|
-
- exact `cwd`
|
|
50
|
-
- project basename via `--project`
|
|
51
|
-
- specific thread deeplinks like `codex://threads/<id>`
|
|
52
|
-
- Include command logs with `--tools`
|
|
53
|
-
- Write Markdown or real plain-text output with `--output-format md|txt`
|
|
54
|
-
- Export Claude Code transcript `.jsonl` files or export directories
|
|
55
|
-
- Export, recover, and prune Cursor chat history from the CLI
|
|
56
|
-
- Run the same export flows through an MCP server and a local Codex plugin
|
|
57
|
-
|
|
58
|
-
## Install
|
|
24
|
+
For repository development:
|
|
59
25
|
|
|
60
26
|
```bash
|
|
61
27
|
rtk bun install
|
|
28
|
+
rtk bun start
|
|
62
29
|
```
|
|
63
30
|
|
|
64
|
-
|
|
31
|
+
Open the local URL printed by Vite.
|
|
65
32
|
|
|
66
|
-
|
|
67
|
-
rtk bunx spiracha --help
|
|
68
|
-
rtk bunx spiracha ui --help
|
|
69
|
-
```
|
|
33
|
+
## What It Does
|
|
70
34
|
|
|
71
|
-
|
|
35
|
+
- Browse local conversations across Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode.
|
|
36
|
+
- Inspect source-specific detail pages with transcript, tool, reasoning, metadata, raw event, export, and delete flows where supported by the source.
|
|
37
|
+
- Export transcripts from the UI as Markdown, text, or zip bundles with source-specific commentary/final-answer filtering.
|
|
38
|
+
- Expose a stable API for local clients that need normalized conversation metadata and message payloads.
|
|
39
|
+
- Resolve Spiracha UI links and native source links into normalized `{ source, id }` references for cross-thread context lookup.
|
|
72
40
|
|
|
73
|
-
|
|
41
|
+
## Stable Data API
|
|
74
42
|
|
|
75
|
-
|
|
43
|
+
The API is served by the local UI server under `/api/v1`.
|
|
76
44
|
|
|
77
45
|
```bash
|
|
78
|
-
|
|
79
|
-
rtk bunx spiracha codex [options] [codex://threads/<id> ...]
|
|
46
|
+
bunx spiracha
|
|
80
47
|
```
|
|
81
48
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
Examples:
|
|
49
|
+
Common read endpoints:
|
|
85
50
|
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
rtk bunx spiracha --cwd ~/workspace/reversed/summer --flat
|
|
94
|
-
rtk bunx spiracha codex://threads/<thread-id> --no-metadata
|
|
51
|
+
```text
|
|
52
|
+
GET /api/v1/sources
|
|
53
|
+
GET /api/v1/conversations?cwd=/absolute/project&include_messages=true
|
|
54
|
+
POST /api/v1/conversation-query
|
|
55
|
+
GET /api/v1/conversations/:source/:id
|
|
56
|
+
GET /api/v1/conversations/:source/:id/export
|
|
57
|
+
GET /api/v1/resolve?ref=<url-or-deeplink>
|
|
95
58
|
```
|
|
96
59
|
|
|
97
|
-
|
|
98
|
-
- no args: start interactive mode
|
|
99
|
-
- `--interactive`: force the interactive prompt flow
|
|
100
|
-
- `--project <name>`: matches the final `cwd` path segment for both POSIX and Windows-style paths
|
|
101
|
-
- `--cwd <path>`: exact cwd match
|
|
102
|
-
- `--tools`: include `exec_command` call logs and summaries
|
|
103
|
-
- `--no-metadata`: omit the metadata section from the top of each export
|
|
104
|
-
- `--flat`: write files into a single output folder
|
|
105
|
-
- `--output-format md|txt`: output as Markdown or plain text
|
|
60
|
+
The default list selector is `last_final_answer`, which keeps `fgh --collect` style clients fast and small. Use `message_selector=all` when a client needs the full normalized thread.
|
|
106
61
|
|
|
107
|
-
|
|
62
|
+
Example:
|
|
108
63
|
|
|
109
64
|
```bash
|
|
110
|
-
|
|
65
|
+
curl 'http://localhost:3000/api/v1/conversations?cwd=/Users/me/workspace/fgh&include_messages=true'
|
|
111
66
|
```
|
|
112
67
|
|
|
113
|
-
|
|
114
|
-
Large download bundles are written to a Spiracha-managed directory under your OS temp folder and served directly by the UI server, so packaged `rtk bunx spiracha ui` exports do not depend on your current working directory.
|
|
68
|
+
Response envelope:
|
|
115
69
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"data": [
|
|
73
|
+
{
|
|
74
|
+
"source": "codex",
|
|
75
|
+
"id": "019ecbfc-8a84-7421-ab3b-35653feb7896",
|
|
76
|
+
"title": "Review thread",
|
|
77
|
+
"workspacePath": "/Users/me/workspace/fgh",
|
|
78
|
+
"messages": [
|
|
79
|
+
{
|
|
80
|
+
"role": "assistant",
|
|
81
|
+
"phase": "final_answer",
|
|
82
|
+
"text": "Final review result..."
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"deepLinks": {
|
|
86
|
+
"ui": "/threads/019ecbfc-8a84-7421-ab3b-35653feb7896",
|
|
87
|
+
"native": "codex://threads/019ecbfc-8a84-7421-ab3b-35653feb7896",
|
|
88
|
+
"spiracha": "spiracha://conversation/codex/019ecbfc-8a84-7421-ab3b-35653feb7896"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"meta": {
|
|
93
|
+
"hasNext": false,
|
|
94
|
+
"next_cursor": null
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
121
98
|
|
|
122
|
-
|
|
123
|
-
- a Codex inventory and derived-project detail flow
|
|
124
|
-
- a Claude Code workspace inventory, workspace-session listing, and standalone session detail flow
|
|
125
|
-
- a Kiro workspace inventory, workspace-session listing, and standalone session detail flow
|
|
126
|
-
- a Cursor workspace inventory, workspace-thread listing, and standalone thread detail flow
|
|
127
|
-
- an Antigravity workspace inventory, conversation listing, and standalone conversation detail flow
|
|
128
|
-
- an OpenCode workspace inventory, session listing, and standalone session detail flow
|
|
129
|
-
- a Codex dashboard, Codex thread detail view, and Codex analytics page
|
|
99
|
+
For serverless access from Bun, use the public client export:
|
|
130
100
|
|
|
131
|
-
|
|
101
|
+
```ts
|
|
102
|
+
import { createConversationClient } from "spiracha/client";
|
|
132
103
|
|
|
133
|
-
|
|
104
|
+
const client = createConversationClient({ mode: "local" });
|
|
105
|
+
const page = await client.listConversations({
|
|
106
|
+
cwd: process.cwd(),
|
|
107
|
+
includeMessages: true,
|
|
108
|
+
messageSelector: "last_final_answer",
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Source Locations
|
|
134
113
|
|
|
135
114
|
| Source | Default location | Primary override |
|
|
136
115
|
| --- | --- | --- |
|
|
137
116
|
| Codex | shared Codex DB probe list | `SPIRACHA_CODEX_DB` |
|
|
138
117
|
| Claude Code | `~/.claude/projects` | `SPIRACHA_CLAUDE_CODE_PROJECTS_DIR` |
|
|
139
118
|
| Kiro | `~/Library/Application Support/Kiro/User/globalStorage/kiro.kiroagent/workspace-sessions` | `SPIRACHA_KIRO_WORKSPACE_SESSIONS_DIR` |
|
|
119
|
+
| Qoder | `~/Library/Application Support/Qoder/User/globalStorage/state.vscdb` and `~/Library/Application Support/Qoder/User/workspaceStorage` | `SPIRACHA_QODER_GLOBAL_STATE_DB`, `SPIRACHA_QODER_WORKSPACE_STORAGE_DIR` |
|
|
120
|
+
| Cursor | `~/Library/Application Support/Cursor/User` on macOS | `SPIRACHA_CURSOR_USER_DIR`, `SPIRACHA_CURSOR_PROJECTS_DIR` |
|
|
121
|
+
| Antigravity | `~/.gemini/antigravity-ide` and `~/.gemini/antigravity` | `SPIRACHA_ANTIGRAVITY_DIRS`, `SPIRACHA_ANTIGRAVITY_DIR` |
|
|
140
122
|
| OpenCode | `${XDG_DATA_HOME:-~/.local/share}/opencode/opencode.db` | `SPIRACHA_OPENCODE_DB` |
|
|
141
|
-
|
|
|
142
|
-
|
|
143
|
-
Codex inventory search and analytics project filters are stored in route search params, so filtered views can be bookmarked or reloaded. `/projects` and `/projects/$project` use `q`, and `/analytics` uses `project`.
|
|
144
|
-
|
|
145
|
-
Analytics cache keys are derived from Codex DB row metadata instead of statting every rollout file. This avoids large per-rollout stat storms on big histories and lets cached analytics resolve without touching transcript files. The hard tradeoff is that manual JSONL edits outside Codex do not invalidate analytics unless the corresponding DB row metadata changes or the temp UI cache is cleared. Transcript analytics parsing uses a bounded worker pool; tune it with `SPIRACHA_ANALYTICS_TRANSCRIPT_CONCURRENCY` when benchmarking large datasets.
|
|
146
|
-
|
|
147
|
-
The thread detail page also supports a direct UUID shortcut route. Pasting `http://localhost:3000/<thread-id>` redirects to `/threads/<thread-id>`.
|
|
148
|
-
|
|
149
|
-
Notable UI routes:
|
|
150
|
-
- `/projects` and `/projects/$project` for Codex inventory and project threads
|
|
151
|
-
- `/threads/$threadId` for Codex thread detail
|
|
152
|
-
- `/claude-code` and `/claude-code/$workspaceKey` for Claude Code workspace inventory and session lists
|
|
153
|
-
- `/claude-code-sessions/$sessionId` for Claude Code session detail
|
|
154
|
-
- `/kiro` and `/kiro/$workspaceKey` for Kiro workspace inventory and session lists
|
|
155
|
-
- `/kiro-sessions/$sessionId` for Kiro session detail
|
|
156
|
-
- `/cursor` and `/cursor/$workspaceKey` for Cursor workspace inventory and thread lists
|
|
157
|
-
- `/cursor-threads/$composerId` for Cursor thread detail
|
|
158
|
-
- `/antigravity` and `/antigravity/$workspaceKey` for Antigravity workspace inventory and conversation lists
|
|
159
|
-
- `/antigravity-conversations/$conversationId` for Antigravity conversation detail
|
|
160
|
-
- `/opencode` and `/opencode/$workspaceKey` for OpenCode workspace inventory and session lists
|
|
161
|
-
- `/opencode-sessions/$sessionId` for OpenCode session detail
|
|
162
|
-
|
|
163
|
-
Examples:
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
rtk bunx spiracha ui
|
|
167
|
-
rtk bunx spiracha ui --port 43123 --no-open
|
|
168
|
-
rtk bunx spiracha ui --db ~/.codex/state_5.sqlite
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
Stop the UI with `Ctrl+C`.
|
|
172
|
-
|
|
173
|
-
### Claude exports
|
|
174
|
-
|
|
175
|
-
```bash
|
|
176
|
-
rtk bunx spiracha claude <input-path> [options]
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Examples:
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
rtk bunx spiracha claude /path/to/session.jsonl
|
|
183
|
-
rtk bunx spiracha claude /path/to/export-dir --tools
|
|
184
|
-
rtk bunx spiracha claude /path/to/export-dir --output-format txt
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
Repo-local equivalents remain available during development:
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
rtk bun start
|
|
191
|
-
rtk bun start --interactive
|
|
192
|
-
rtk bun start ...
|
|
193
|
-
rtk bun run export:claude -- ...
|
|
194
|
-
```
|
|
123
|
+
| UI exports | OS temp directory under `spiracha-ui-exports` | `SPIRACHA_UI_EXPORT_DIR` |
|
|
195
124
|
|
|
196
|
-
|
|
125
|
+
## UI Routes
|
|
197
126
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
### Cursor exports
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
rtk bunx spiracha cursor <subcommand> [options]
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
Examples:
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
rtk bunx spiracha cursor list
|
|
213
|
-
rtk bunx spiracha cursor list --query summer
|
|
214
|
-
rtk bunx spiracha cursor export --workspace summer --output-dir ./cursor-exports
|
|
215
|
-
rtk bunx spiracha cursor export --thread <composer-id> --output-format txt
|
|
216
|
-
rtk bunx spiracha cursor recover --workspace summer --apply
|
|
217
|
-
rtk bunx spiracha cursor prune --workspace summer --apply
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Repo-local equivalent during development:
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
rtk bun run ./src/export-cursor.ts --help
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
Claude Code direct-history browsing, Kiro browsing/export, Antigravity, and OpenCode conversation browsing/export currently live in the browser UI rather than standalone CLI subcommands.
|
|
227
|
-
|
|
228
|
-
## MCP server
|
|
229
|
-
|
|
230
|
-
Run the MCP server with:
|
|
231
|
-
|
|
232
|
-
```bash
|
|
233
|
-
rtk bun run mcp
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
Exposed tools:
|
|
237
|
-
- `export_codex_chats`
|
|
238
|
-
- `export_claude_transcript`
|
|
239
|
-
|
|
240
|
-
The local plugin lives in [plugins/codex-chats-export](plugins/codex-chats-export) and is registered through [plugins/codex-chats-export/.mcp.json](plugins/codex-chats-export/.mcp.json).
|
|
127
|
+
- `/codex` and `/codex/$project` for Codex inventory and project threads.
|
|
128
|
+
- `/threads/$threadId` for Codex thread detail.
|
|
129
|
+
- `/claude-code`, `/kiro`, `/qoder`, `/cursor`, `/antigravity`, and `/opencode` for source inventories.
|
|
130
|
+
- Source detail routes include `/claude-code-sessions/$sessionId`, `/kiro-sessions/$sessionId`, `/qoder-sessions/$sessionId`, `/cursor-threads/$composerId`, `/antigravity-conversations/$conversationId`, and `/opencode-sessions/$sessionId`.
|
|
131
|
+
- `/analytics` for Codex token and tool-call analytics.
|
|
241
132
|
|
|
242
133
|
## Development
|
|
243
134
|
|
|
244
|
-
Useful commands:
|
|
245
|
-
|
|
246
135
|
```bash
|
|
247
136
|
rtk bun test
|
|
248
137
|
rtk bun run lint
|
|
249
138
|
rtk bun run typecheck
|
|
250
139
|
rtk bun run build
|
|
251
140
|
rtk bun run coverage
|
|
252
|
-
rtk bun run ui:dev
|
|
253
|
-
rtk bun run --cwd apps/ui test
|
|
254
|
-
rtk bun run test:perf
|
|
255
141
|
rtk bun start
|
|
256
|
-
rtk bun
|
|
257
|
-
rtk bun start -- --help
|
|
258
|
-
rtk bun run export:claude -- --help
|
|
259
|
-
rtk bun run mcp
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
Packed-tarball smoke test before publishing:
|
|
263
|
-
|
|
264
|
-
```bash
|
|
265
|
-
rtk bun pm pack
|
|
266
|
-
package_tgz="$PWD/spiracha-<version>.tgz"
|
|
267
|
-
tmp_dir=$(mktemp -d)
|
|
268
|
-
cd "$tmp_dir"
|
|
269
|
-
printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
|
|
270
|
-
rtk bun add "$package_tgz"
|
|
271
|
-
rtk bunx --package "$package_tgz" spiracha --help
|
|
272
|
-
rtk bunx --package "$package_tgz" spiracha ui --help
|
|
273
|
-
rtk bunx --package "$package_tgz" spiracha claude --help
|
|
274
|
-
rtk bunx --package "$package_tgz" codex-chats --help
|
|
275
|
-
rtk bunx --package "$package_tgz" codex-chats-claude --help
|
|
142
|
+
rtk bun run --cwd apps/ui test
|
|
276
143
|
```
|
|
277
144
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
```bash
|
|
281
|
-
rtk bun run smoke:package-ui
|
|
282
|
-
```
|
|
145
|
+
The UI package runs Vite through `bun --bun` because server functions import Bun-only modules such as `bun:sqlite`.
|
|
283
146
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
## Project Layout
|
|
287
|
-
|
|
288
|
-
- `apps/ui/`: TanStack Start browser app for Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode browsing plus export and delete flows
|
|
289
|
-
- `src/export-chats.ts`: Codex CLI wrapper
|
|
290
|
-
- `src/export-claude.ts`: Claude CLI wrapper
|
|
291
|
-
- `src/export-cursor.ts`: Cursor CLI wrapper
|
|
292
|
-
- `src/mcp-server.ts`: MCP server entrypoint
|
|
293
|
-
- `src/lib/antigravity-*.ts`: Antigravity workspace discovery, transcript rendering, and Keychain helpers
|
|
294
|
-
- `src/lib/codex-exporter-*.ts`: Codex exporter modules
|
|
295
|
-
- `src/lib/codex-browser-*.ts`: shared browser/UI data, analytics, and export helpers
|
|
296
|
-
- `src/lib/codex-thread-*.ts`: structured transcript parsing and caching helpers
|
|
297
|
-
- `src/lib/concurrency.ts`: shared bounded-concurrency helper for large transcript and DB workloads
|
|
298
|
-
- `src/lib/claude-code-*.ts`: Claude Code local project/session discovery, assistant phase classification, and transcript rendering helpers
|
|
299
|
-
- `src/lib/kiro-*.ts`: Kiro workspace/session discovery, execution-trace enrichment, assistant phase classification, and transcript rendering helpers
|
|
300
|
-
- `src/lib/claude-exporter.ts`: Claude exporter implementation
|
|
301
|
-
- `src/lib/cursor-*.ts`: Cursor discovery, transcript rendering, recovery, and CLI helpers
|
|
302
|
-
- `src/lib/opencode-*.ts`: OpenCode project/session discovery, MiniMax think-tag handling, assistant phase classification, and transcript rendering helpers
|
|
303
|
-
- `src/lib/ui-export-archive.ts` and `src/lib/ui-export-files.ts`: browser download filename, MIME type, zip archive, temp file, and URL helpers
|
|
304
|
-
- `plugins/codex-chats-export/`: local Codex plugin bundle
|
|
305
|
-
|
|
306
|
-
## Testing
|
|
307
|
-
|
|
308
|
-
The test suite includes:
|
|
309
|
-
- Codex exporter end-to-end coverage
|
|
310
|
-
- Claude exporter end-to-end coverage
|
|
311
|
-
- Claude Code direct-history discovery and export coverage
|
|
312
|
-
- Kiro workspace session discovery and export coverage
|
|
313
|
-
- source-specific assistant commentary/final-answer classification and export filtering coverage
|
|
314
|
-
- Cursor exporter and recovery coverage
|
|
315
|
-
- Antigravity discovery and export coverage
|
|
316
|
-
- OpenCode discovery and export coverage
|
|
317
|
-
- OpenCode MiniMax `<think>` extraction coverage, including literal tags in Markdown code
|
|
318
|
-
- Codex CLI helper tests
|
|
319
|
-
- transcript rendering helper tests
|
|
320
|
-
- route search parsing and bounded concurrency tests
|
|
321
|
-
- MCP stdio protocol round-trip tests
|
|
322
|
-
- local packaging should be smoke-tested with a packed tarball before publishing
|
|
323
|
-
- packaged source manifests are checked for UI server helper files used at runtime
|
|
324
|
-
|
|
325
|
-
Coverage enforcement:
|
|
326
|
-
- `rtk bun run coverage:root` checks the root Bun unit-test surface at a minimum of 90% line coverage.
|
|
327
|
-
- `rtk bun run coverage:ui` checks the UI unit-test surface at a minimum of 90% line coverage.
|
|
328
|
-
- `rtk bun run coverage` runs both checks.
|
|
329
|
-
|
|
330
|
-
Run:
|
|
147
|
+
## Breaking Consequences
|
|
331
148
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
149
|
+
- The only published `bin` entry is `spiracha`, and it only launches the local UI server.
|
|
150
|
+
- No `codex-chats`, `codex-chats-claude`, or legacy export command remains.
|
|
151
|
+
- No repo-local CLI export flow remains.
|
|
152
|
+
- No standalone Claude or Cursor export CLI remains.
|
|
153
|
+
- No MCP server or local Codex plugin remains.
|
|
154
|
+
- Programmatic consumers should call the stable local HTTP API or import `spiracha/client` from Bun.
|
package/apps/ui/AGENTS.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
This package is the local browser UI for Spiracha. It reads Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode local data through TanStack Start server functions and shared root-package helpers.
|
|
5
|
+
This package is the local browser UI for Spiracha. It reads Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode local data through TanStack Start server functions and shared root-package helpers.
|
|
6
6
|
|
|
7
7
|
## Commands
|
|
8
8
|
|
|
@@ -17,22 +17,24 @@ rtk bun run coverage
|
|
|
17
17
|
Important:
|
|
18
18
|
|
|
19
19
|
- `dev`, `build`, and `preview` run through `bun --bun ...` on purpose. Do not switch them back to plain `vite` or Node execution, because the server functions import Bun-only modules such as `bun:sqlite`.
|
|
20
|
-
-
|
|
20
|
+
- The root package mirrors UI runtime dependencies needed by the packaged `bunx spiracha` launcher. Keep `apps/ui/package.json` and the root `dependencies` aligned when browser/runtime dependencies change.
|
|
21
21
|
|
|
22
22
|
## Routing
|
|
23
23
|
|
|
24
24
|
- This package uses TanStack Start with file-based routes in `src/routes/`.
|
|
25
25
|
- `src/routeTree.gen.ts` is generated. Do not edit it manually.
|
|
26
26
|
- If route typing behaves strangely, delete `src/routeTree.gen.ts` and rebuild with `rtk bun run build` to regenerate it cleanly.
|
|
27
|
+
- Stable API routes live in `src/routes/api.v1.*.ts` and should stay thin wrappers around `@spiracha/lib/conversation-api`.
|
|
27
28
|
- The UI supports both `/threads/$threadId` and a root shortcut route `/$threadId` that redirects straight to the thread detail page.
|
|
28
|
-
- Codex project inventory and project-thread search use route search params. `/
|
|
29
|
+
- Codex project inventory and project-thread search use route search params. `/codex` and `/codex/$project` use `q`.
|
|
29
30
|
- Codex analytics uses the `project` route search param so filtered analytics links can be bookmarked and reloaded.
|
|
30
31
|
- Claude Code session detail lives at `/claude-code-sessions/$sessionId`.
|
|
31
32
|
- Kiro session detail lives at `/kiro-sessions/$sessionId`.
|
|
33
|
+
- Qoder session detail lives at `/qoder-sessions/$sessionId`.
|
|
32
34
|
- Cursor thread detail lives at `/cursor-threads/$composerId`.
|
|
33
35
|
- Antigravity conversation detail lives at `/antigravity-conversations/$conversationId`.
|
|
34
36
|
- OpenCode session detail lives at `/opencode-sessions/$sessionId`.
|
|
35
|
-
- Keep the Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode list/detail pages aligned around the same table-driven index/detail pattern when adding new source integrations.
|
|
37
|
+
- Keep the Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode list/detail pages aligned around the same table-driven index/detail pattern when adding new source integrations.
|
|
36
38
|
|
|
37
39
|
## Shared Data Layer
|
|
38
40
|
|
|
@@ -49,6 +51,9 @@ The UI depends on root-package helpers via `@spiracha/*` path aliases:
|
|
|
49
51
|
- `@spiracha/lib/kiro-db`
|
|
50
52
|
- `@spiracha/lib/kiro-transcript-phase`
|
|
51
53
|
- `@spiracha/lib/kiro-transcript`
|
|
54
|
+
- `@spiracha/lib/qoder-db`
|
|
55
|
+
- `@spiracha/lib/qoder-transcript-phase`
|
|
56
|
+
- `@spiracha/lib/qoder-transcript`
|
|
52
57
|
- `@spiracha/lib/cursor-db`
|
|
53
58
|
- `@spiracha/lib/cursor-recovery`
|
|
54
59
|
- `@spiracha/lib/cursor-transcript`
|
|
@@ -58,6 +63,8 @@ The UI depends on root-package helpers via `@spiracha/*` path aliases:
|
|
|
58
63
|
- `@spiracha/lib/opencode-transcript-phase`
|
|
59
64
|
- `@spiracha/lib/opencode-think-tags`
|
|
60
65
|
- `@spiracha/lib/opencode-transcript`
|
|
66
|
+
- `@spiracha/lib/conversation-api`
|
|
67
|
+
- `@spiracha/lib/conversation-data`
|
|
61
68
|
|
|
62
69
|
Keep server-only imports inside server functions or route loaders. Do not import Bun-only modules into purely client-side components.
|
|
63
70
|
The `*-transcript-phase` helpers are intentionally browser-safe and may be imported by client adapters.
|
|
@@ -66,15 +73,18 @@ The `*-transcript-phase` helpers are intentionally browser-safe and may be impor
|
|
|
66
73
|
|
|
67
74
|
Use the existing layers consistently:
|
|
68
75
|
|
|
69
|
-
- TanStack Start server functions in `src/lib/codex-server.ts`, `src/lib/claude-code-server.ts`, `src/lib/kiro-server.ts`, `src/lib/cursor-server.ts`, `src/lib/antigravity-server.ts`, and `src/lib/opencode-server.ts`
|
|
76
|
+
- TanStack Start server functions in `src/lib/codex-server.ts`, `src/lib/claude-code-server.ts`, `src/lib/kiro-server.ts`, `src/lib/qoder-server.ts`, `src/lib/cursor-server.ts`, `src/lib/antigravity-server.ts`, and `src/lib/opencode-server.ts`
|
|
70
77
|
- Use for any browser-triggered read/write that needs Bun-only modules, DB access, filesystem access, Keychain access, or shared root-package helpers.
|
|
71
78
|
- Use `.validator(...)` for input validation. Do not add new `.inputValidator(...)` calls.
|
|
72
|
-
- TanStack Query query options in `src/lib/codex-queries.ts`, `src/lib/claude-code-queries.ts`, `src/lib/kiro-queries.ts`, `src/lib/cursor-queries.ts`, `src/lib/antigravity-queries.ts`, and `src/lib/opencode-queries.ts`
|
|
79
|
+
- TanStack Query query options in `src/lib/codex-queries.ts`, `src/lib/claude-code-queries.ts`, `src/lib/kiro-queries.ts`, `src/lib/qoder-queries.ts`, `src/lib/cursor-queries.ts`, `src/lib/antigravity-queries.ts`, and `src/lib/opencode-queries.ts`
|
|
73
80
|
- Use for client-side fetching, caching, retries, and invalidation of server-function results.
|
|
74
81
|
- Shared root-package helpers under `@spiracha/lib/*`
|
|
75
|
-
- Extend these when the behavior should stay shared between the UI
|
|
82
|
+
- Extend these when the behavior should stay shared between the UI and the stable data API.
|
|
76
83
|
- Use the shared source-specific phase helpers for assistant commentary/final-answer rules instead of duplicating that logic in UI adapters.
|
|
77
84
|
- Keep OpenCode think-tag handling in `@spiracha/lib/opencode-think-tags` so UI display and exports strip MiniMax reasoning tags consistently.
|
|
85
|
+
- Stable API route handlers in `src/routes/api.v1.*.ts`
|
|
86
|
+
- Use route-level `server.handlers`.
|
|
87
|
+
- Delegate to `@spiracha/lib/conversation-api` instead of duplicating parsing or response-envelope logic.
|
|
78
88
|
- `src/lib/source-session-export-server.ts`
|
|
79
89
|
- Use for single-session source exports that may return either inline content or a temporary zip download URL.
|
|
80
90
|
- `settings-store.tsx`
|
package/apps/ui/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Spiracha UI
|
|
2
2
|
|
|
3
|
-
The browser UI for browsing local Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode history, inspecting transcript details, exporting chats, and analyzing Codex usage patterns.
|
|
3
|
+
The browser UI for browsing local Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode history, inspecting transcript details, exporting chats, and analyzing Codex usage patterns.
|
|
4
4
|
|
|
5
5
|
## Stack
|
|
6
6
|
|
|
@@ -18,11 +18,13 @@ The browser UI for browsing local Codex, Claude Code, Kiro, Cursor, Antigravity,
|
|
|
18
18
|
- lists derived Codex projects from the Codex SQLite database
|
|
19
19
|
- lists Codex threads within a project in chronological order
|
|
20
20
|
- shows Codex thread timelines, tool calls, metadata, and raw event context
|
|
21
|
-
- exports Codex, Claude Code, Kiro, Cursor, and OpenCode sessions or threads as Markdown, plain text, or optional zip archives with optional metadata, commentary, and tool-call inclusion
|
|
21
|
+
- exports Codex, Claude Code, Kiro, Qoder, Cursor, and OpenCode sessions or threads as Markdown, plain text, or optional zip archives with optional metadata, commentary, and tool-call inclusion
|
|
22
22
|
- lists Claude Code workspaces and sessions from local `~/.claude/projects` JSONL files
|
|
23
23
|
- shows dedicated Claude Code session detail pages with reasoning, tool calls, token metadata, and export actions
|
|
24
24
|
- lists Kiro workspaces and sessions from local Kiro workspace session files
|
|
25
25
|
- shows dedicated Kiro session detail pages with image attachments, prompt logs, execution-derived tool calls, metadata, and export actions
|
|
26
|
+
- lists Qoder workspaces and sessions from local Qoder history and checkpoint storage
|
|
27
|
+
- shows dedicated Qoder session detail pages with prompts, checkpoint file operations, metadata, and export actions
|
|
26
28
|
- lists Cursor workspaces and workspace threads with the same table-based index/detail flow as Codex
|
|
27
29
|
- shows dedicated Cursor thread detail pages with breadcrumbs back to the workspace and source
|
|
28
30
|
- recovers split Cursor storage buckets, exports Cursor threads, and deletes Cursor workspaces or threads
|
|
@@ -33,7 +35,7 @@ The browser UI for browsing local Codex, Claude Code, Kiro, Cursor, Antigravity,
|
|
|
33
35
|
- shows dedicated OpenCode session detail pages with reasoning, tool parts, MiniMax `<think>` blocks, token metadata, and export actions
|
|
34
36
|
- shows dashboard and analytics summaries, including Codex token totals and tool-call frequency
|
|
35
37
|
- keeps Codex inventory search and analytics project filters in URL search params for reloadable and shareable views
|
|
36
|
-
- keeps source-specific commentary hidden by default while preserving final answers, with matching export filtering for Claude Code, Kiro, and OpenCode
|
|
38
|
+
- keeps source-specific commentary hidden by default while preserving final answers, with matching export filtering for Claude Code, Kiro, Qoder, and OpenCode
|
|
37
39
|
|
|
38
40
|
## Commands
|
|
39
41
|
|
|
@@ -71,11 +73,26 @@ Runtime configuration is intentionally small:
|
|
|
71
73
|
- `SPIRACHA_KIRO_WORKSPACE_SESSIONS_DIR`
|
|
72
74
|
- Optional absolute path to the Kiro workspace sessions directory.
|
|
73
75
|
- If unset, Spiracha reads `${SPIRACHA_KIRO_DATA_DIR:-~/Library/Application Support/Kiro/User/globalStorage/kiro.kiroagent}/workspace-sessions`. `SPIRACHA_KIRO_AGENT_DIR` and `SPIRACHA_KIRO_DIR` are also accepted aliases for the Kiro data directory.
|
|
76
|
+
- `SPIRACHA_QODER_GLOBAL_STATE_DB`
|
|
77
|
+
- Optional absolute path to Qoder's global `state.vscdb`.
|
|
78
|
+
- If unset, Spiracha reads `${SPIRACHA_QODER_USER_DIR:-~/Library/Application Support/Qoder/User}/globalStorage/state.vscdb`. `SPIRACHA_QODER_DATA_DIR` and `SPIRACHA_QODER_DIR` are also accepted aliases for the Qoder user directory.
|
|
79
|
+
- `SPIRACHA_QODER_WORKSPACE_STORAGE_DIR`
|
|
80
|
+
- Optional absolute path to Qoder's `workspaceStorage` directory.
|
|
81
|
+
- If unset, Spiracha reads `${SPIRACHA_QODER_USER_DIR:-~/Library/Application Support/Qoder/User}/workspaceStorage`.
|
|
74
82
|
- `SPIRACHA_OPENCODE_DB`
|
|
75
83
|
- Optional absolute path to the OpenCode SQLite database.
|
|
76
84
|
- If unset, Spiracha reads `${SPIRACHA_OPENCODE_DATA_DIR:-${XDG_DATA_HOME:-~/.local/share}/opencode}/opencode.db`. `SPIRACHA_OPENCODE_DIR` is also accepted as an OpenCode data-directory alias.
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
- `SPIRACHA_CURSOR_USER_DIR`
|
|
86
|
+
- Optional absolute path to Cursor's `User` directory.
|
|
87
|
+
- If unset, Spiracha reads the platform default Cursor user-data directory.
|
|
88
|
+
- `SPIRACHA_CURSOR_PROJECTS_DIR`
|
|
89
|
+
- Optional absolute path to Cursor's project transcript directory.
|
|
90
|
+
- If unset, Spiracha infers `.cursor/projects` from the Cursor user directory when possible.
|
|
91
|
+
- `SPIRACHA_ANTIGRAVITY_DIRS`
|
|
92
|
+
- Optional path-list of Antigravity roots.
|
|
93
|
+
- If unset, Spiracha reads `~/.gemini/antigravity-ide` and `~/.gemini/antigravity`. `SPIRACHA_ANTIGRAVITY_DIR` is accepted as a single-root alias.
|
|
94
|
+
|
|
95
|
+
Export artifacts are served through the UI as attachment downloads from `/__exports/*`. The local dev and preview servers use the same export-directory contract.
|
|
79
96
|
|
|
80
97
|
Default source locations:
|
|
81
98
|
|
|
@@ -84,20 +101,23 @@ Default source locations:
|
|
|
84
101
|
| Codex | shared Codex DB probe list | `SPIRACHA_CODEX_DB` |
|
|
85
102
|
| Claude Code | `~/.claude/projects` | `SPIRACHA_CLAUDE_CODE_PROJECTS_DIR` |
|
|
86
103
|
| Kiro | `~/Library/Application Support/Kiro/User/globalStorage/kiro.kiroagent/workspace-sessions` | `SPIRACHA_KIRO_WORKSPACE_SESSIONS_DIR` |
|
|
104
|
+
| Qoder | `~/Library/Application Support/Qoder/User/globalStorage/state.vscdb` + `~/Library/Application Support/Qoder/User/workspaceStorage` | `SPIRACHA_QODER_GLOBAL_STATE_DB`, `SPIRACHA_QODER_WORKSPACE_STORAGE_DIR` |
|
|
105
|
+
| Cursor | `~/Library/Application Support/Cursor/User` on macOS | `SPIRACHA_CURSOR_USER_DIR`, `SPIRACHA_CURSOR_PROJECTS_DIR` |
|
|
106
|
+
| Antigravity | `~/.gemini/antigravity-ide` + `~/.gemini/antigravity` | `SPIRACHA_ANTIGRAVITY_DIRS`, `SPIRACHA_ANTIGRAVITY_DIR` |
|
|
87
107
|
| OpenCode | `${XDG_DATA_HOME:-~/.local/share}/opencode/opencode.db` | `SPIRACHA_OPENCODE_DB` |
|
|
88
108
|
| Export downloads | OS temp directory under `spiracha-ui-exports` | `SPIRACHA_UI_EXPORT_DIR` |
|
|
89
109
|
|
|
90
110
|
Codex analytics cache keys are based on Codex DB row metadata instead of statting every rollout file before cache hits. That keeps large histories responsive. The tradeoff is that manual JSONL edits outside Codex do not invalidate analytics unless DB row metadata changes or the temporary UI cache is cleared.
|
|
91
111
|
|
|
92
|
-
Transcript detail pages expose the same display controls across sources: user messages, commentary, tool calls, extra events, and raw JSON. Claude Code assistant lead-ins are classified from `stop_reason`, Kiro assistant phases are classified per user turn from session and execution files, and OpenCode assistant phases are classified per assistant run after stripping MiniMax `<think>` blocks into commentary. OpenCode think-tag extraction preserves literal `<think>` examples inside Markdown code spans and fenced code blocks.
|
|
112
|
+
Transcript detail pages expose the same display controls across sources: user messages, commentary, tool calls, extra events, and raw JSON. Claude Code assistant lead-ins are classified from `stop_reason`, Kiro assistant phases are classified per user turn from session and execution files, Qoder shows local prompt history plus checkpoint file operations, and OpenCode assistant phases are classified per assistant run after stripping MiniMax `<think>` blocks into commentary. OpenCode think-tag extraction preserves literal `<think>` examples inside Markdown code spans and fenced code blocks.
|
|
93
113
|
|
|
94
114
|
## Routes
|
|
95
115
|
|
|
96
116
|
- `/`
|
|
97
117
|
- dashboard
|
|
98
|
-
- `/
|
|
118
|
+
- `/codex`
|
|
99
119
|
- Codex inventory and search, with `q` as the route search param
|
|
100
|
-
- `/
|
|
120
|
+
- `/codex/$project`
|
|
101
121
|
- Codex project thread listing, with `q` as the route search param
|
|
102
122
|
- `/claude-code`
|
|
103
123
|
- Claude Code workspace inventory and search
|
|
@@ -111,6 +131,12 @@ Transcript detail pages expose the same display controls across sources: user me
|
|
|
111
131
|
- Kiro workspace session listing
|
|
112
132
|
- `/kiro-sessions/$sessionId`
|
|
113
133
|
- Kiro session detail and export
|
|
134
|
+
- `/qoder`
|
|
135
|
+
- Qoder workspace inventory and search
|
|
136
|
+
- `/qoder/$workspaceKey`
|
|
137
|
+
- Qoder workspace session listing
|
|
138
|
+
- `/qoder-sessions/$sessionId`
|
|
139
|
+
- Qoder session detail and export
|
|
114
140
|
- `/cursor`
|
|
115
141
|
- Cursor workspace inventory and search
|
|
116
142
|
- `/cursor/$workspaceKey`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"aliases": {
|
|
4
|
+
"components": "#/components",
|
|
5
|
+
"hooks": "#/hooks",
|
|
6
|
+
"lib": "#/lib",
|
|
7
|
+
"ui": "#/components/ui",
|
|
8
|
+
"utils": "#/lib/utils"
|
|
9
|
+
},
|
|
10
|
+
"iconLibrary": "lucide",
|
|
11
|
+
"rsc": false,
|
|
12
|
+
"style": "new-york",
|
|
13
|
+
"tailwind": {
|
|
14
|
+
"baseColor": "zinc",
|
|
15
|
+
"config": "",
|
|
16
|
+
"css": "src/styles.css",
|
|
17
|
+
"cssVariables": true,
|
|
18
|
+
"prefix": ""
|
|
19
|
+
},
|
|
20
|
+
"tsx": true
|
|
21
|
+
}
|