spiracha 1.5.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +114 -205
- package/README.md +94 -269
- package/apps/ui/AGENTS.md +17 -7
- package/apps/ui/README.md +52 -8
- package/apps/ui/components.json +21 -0
- package/apps/ui/package.json +65 -0
- package/apps/ui/src/components/antigravity-conversations-table.tsx +245 -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 +125 -0
- package/apps/ui/src/components/breadcrumbs.tsx +71 -0
- package/apps/ui/src/components/claude-code-sessions-table.tsx +150 -0
- package/apps/ui/src/components/claude-code-workspaces-table.tsx +57 -0
- package/apps/ui/src/components/cursor-threads-table.tsx +152 -0
- package/apps/ui/src/components/cursor-workspaces-table.tsx +140 -0
- package/apps/ui/src/components/data-table.tsx +243 -0
- package/apps/ui/src/components/delete-confirm-dialog.tsx +88 -0
- package/apps/ui/src/components/export-dialog.tsx +174 -0
- package/apps/ui/src/components/grok-sessions-table.tsx +146 -0
- package/apps/ui/src/components/grok-workspaces-table.tsx +53 -0
- package/apps/ui/src/components/json-panel.tsx +17 -0
- package/apps/ui/src/components/kiro-sessions-table.tsx +148 -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 +164 -0
- package/apps/ui/src/components/opencode-workspaces-table.tsx +57 -0
- package/apps/ui/src/components/page-header.tsx +39 -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 +133 -0
- package/apps/ui/src/components/qoder-workspaces-table.tsx +57 -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/selection-actions-toolbar.tsx +80 -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 +165 -0
- package/apps/ui/src/components/transcript-view.tsx +648 -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 +41 -0
- package/apps/ui/src/lib/antigravity-queries.ts +33 -0
- package/apps/ui/src/lib/antigravity-server.ts +273 -0
- package/apps/ui/src/lib/antigravity-transcript-events.ts +343 -0
- package/apps/ui/src/lib/claude-code-queries.ts +34 -0
- package/apps/ui/src/lib/claude-code-server.ts +243 -0
- package/apps/ui/src/lib/claude-code-transcript-events.ts +161 -0
- package/apps/ui/src/lib/codex-queries.ts +82 -0
- package/apps/ui/src/lib/codex-server.ts +291 -0
- package/apps/ui/src/lib/cursor-queries.ts +37 -0
- package/apps/ui/src/lib/cursor-server.ts +315 -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 +147 -0
- package/apps/ui/src/lib/grok-queries.ts +22 -0
- package/apps/ui/src/lib/grok-server.ts +169 -0
- package/apps/ui/src/lib/grok-transcript-events.ts +149 -0
- package/apps/ui/src/lib/kiro-queries.ts +22 -0
- package/apps/ui/src/lib/kiro-server.ts +151 -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 +151 -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 +135 -0
- package/apps/ui/src/lib/qoder-transcript-events.ts +139 -0
- package/apps/ui/src/lib/route-search.ts +182 -0
- package/apps/ui/src/lib/settings-store.tsx +59 -0
- package/apps/ui/src/lib/source-session-export-server.ts +139 -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-load.ts +15 -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/lib/workspace-delete-navigation.ts +12 -0
- package/apps/ui/src/routeTree.gen.ts +837 -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 +504 -0
- package/apps/ui/src/routes/antigravity.$workspaceKey.tsx +365 -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 +16 -0
- package/apps/ui/src/routes/api.v1.conversations.delete.ts +12 -0
- package/apps/ui/src/routes/api.v1.conversations.export.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 +468 -0
- package/apps/ui/src/routes/claude-code.$workspaceKey.tsx +274 -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 +426 -0
- package/apps/ui/src/routes/cursor.index.tsx +120 -0
- package/apps/ui/src/routes/grok-sessions.$sessionId.tsx +388 -0
- package/apps/ui/src/routes/grok.$workspaceKey.tsx +301 -0
- package/apps/ui/src/routes/grok.index.tsx +48 -0
- package/apps/ui/src/routes/index.tsx +124 -0
- package/apps/ui/src/routes/kiro-sessions.$sessionId.tsx +396 -0
- package/apps/ui/src/routes/kiro.$workspaceKey.tsx +303 -0
- package/apps/ui/src/routes/kiro.index.tsx +48 -0
- package/apps/ui/src/routes/opencode-sessions.$sessionId.tsx +420 -0
- package/apps/ui/src/routes/opencode.$workspaceKey.tsx +327 -0
- package/apps/ui/src/routes/opencode.index.tsx +61 -0
- package/apps/ui/src/routes/qoder-sessions.$sessionId.tsx +344 -0
- package/apps/ui/src/routes/qoder.$workspaceKey.tsx +186 -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 +1103 -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 +54 -80
- package/src/client.ts +423 -0
- package/src/lib/antigravity-db.ts +414 -44
- package/src/lib/antigravity-exporter-types.ts +4 -0
- package/src/lib/antigravity-projects.ts +201 -0
- package/src/lib/claude-code-db.ts +498 -32
- package/src/lib/claude-code-exporter-types.ts +5 -0
- package/src/lib/claude-code-transcript-phase.ts +60 -1
- package/src/lib/claude-code-transcript.ts +8 -5
- package/src/lib/codex-analytics.ts +1 -1
- package/src/lib/codex-browser-db.ts +410 -74
- package/src/lib/codex-browser-export.ts +29 -41
- package/src/lib/codex-browser-types.ts +1 -1
- package/src/lib/codex-thread-cache.ts +41 -13
- package/src/lib/codex-thread-parser.ts +86 -35
- package/src/lib/{codex-exporter-types.ts → codex-thread-types.ts} +2 -30
- package/src/lib/codex-transcript-filter.ts +31 -0
- package/src/lib/{codex-exporter-transcript.ts → codex-transcript-renderer.ts} +104 -48
- package/src/lib/concurrency.ts +41 -0
- package/src/lib/conversation-api.ts +1172 -0
- package/src/lib/conversation-data/adapter-helpers.ts +110 -0
- package/src/lib/conversation-data/antigravity-adapter.ts +167 -0
- package/src/lib/conversation-data/claude-code-adapter.ts +206 -0
- package/src/lib/conversation-data/codex-adapter.ts +269 -0
- package/src/lib/conversation-data/cursor-adapter.ts +205 -0
- package/src/lib/conversation-data/grok-adapter.ts +210 -0
- package/src/lib/conversation-data/index.ts +386 -0
- package/src/lib/conversation-data/kiro-adapter.ts +174 -0
- package/src/lib/conversation-data/message-selector.ts +37 -0
- package/src/lib/conversation-data/opencode-adapter.ts +202 -0
- package/src/lib/conversation-data/path-match.ts +79 -0
- package/src/lib/conversation-data/qoder-adapter.ts +255 -0
- package/src/lib/conversation-data/types.ts +159 -0
- package/src/lib/conversation-zip-export.ts +57 -0
- package/src/lib/cursor-db.ts +100 -25
- package/src/lib/cursor-exporter-types.ts +0 -19
- package/src/lib/grok-db.ts +1026 -0
- package/src/lib/grok-exporter-types.ts +110 -0
- package/src/lib/grok-transcript-phase.ts +52 -0
- package/src/lib/grok-transcript.ts +154 -0
- package/src/lib/kiro-db.ts +52 -1
- package/src/lib/model-label.ts +11 -3
- package/src/lib/opencode-db.ts +598 -55
- package/src/lib/opencode-transcript.ts +8 -5
- 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/src/lib/shared.ts +12 -0
- package/src/lib/transcript-load-limiter.ts +82 -0
- package/src/lib/ui-cache.ts +43 -17
- package/src/lib/ui-export-archive.ts +60 -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/AGENTS.md
CHANGED
|
@@ -2,177 +2,140 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
This repo
|
|
5
|
+
This repo is a Bun-first local app for browsing, exporting, and exposing agent conversation history from Codex, Claude Code, Kiro, Qoder, Cursor, Antigravity, and OpenCode.
|
|
6
|
+
|
|
7
|
+
The command-line exporter, MCP server, and Codex plugin were removed in the 2.0 hard cut. Do not add bridge commands, compatibility aliases, or deprecated entrypoints back. New client workflows should use the stable HTTP API exposed by the UI server or the stable `spiracha/client` package export.
|
|
6
8
|
|
|
7
9
|
Main entrypoints:
|
|
8
|
-
- `
|
|
9
|
-
- `rtk bun start` for
|
|
10
|
-
- `rtk bun run
|
|
11
|
-
- `rtk bun
|
|
12
|
-
- `rtk bun run mcp` for the MCP server used by the local Codex plugin
|
|
13
|
-
- `rtk bun run ui:dev` for the local browser UI across Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode data
|
|
14
|
-
- published package entrypoints:
|
|
15
|
-
- `rtk bunx spiracha`
|
|
16
|
-
- `rtk bunx spiracha ui`
|
|
17
|
-
- `rtk bunx spiracha claude ...`
|
|
18
|
-
- legacy aliases retained:
|
|
19
|
-
- `rtk bunx codex-chats`
|
|
20
|
-
- `rtk bunx codex-chats-claude`
|
|
10
|
+
- `bunx spiracha` for running the packaged UI app
|
|
11
|
+
- `rtk bun start` for local development
|
|
12
|
+
- `rtk bun run ui:preview` after a UI build
|
|
13
|
+
- `rtk bun test`, `rtk bun run lint`, and `rtk bun run typecheck` for verification
|
|
21
14
|
|
|
22
15
|
## Conventions and Rules
|
|
23
16
|
|
|
24
|
-
-
|
|
17
|
+
- Use `rtk` as the default wrapper for shell commands that produce meaningful stdout or stderr.
|
|
18
|
+
- Always use `bun` and `bunx`; do not use `npm` unless absolutely necessary.
|
|
25
19
|
- Prefer `Bun.file()` instead of `fs` whenever possible.
|
|
26
|
-
- Kill any browser instance
|
|
27
|
-
- Prefer arrow functions to classical functions
|
|
28
|
-
-
|
|
29
|
-
- `bun
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- Do
|
|
20
|
+
- Kill any browser instance or stray `bun`/`node` process you start.
|
|
21
|
+
- Prefer arrow functions to classical functions and `type` over `interface` in TypeScript.
|
|
22
|
+
- Make fixes using a TDD approach.
|
|
23
|
+
- Run `bun run lint`, `bun run typecheck`, and `bun test` before completion after meaningful code changes.
|
|
24
|
+
- Never disable a Biome or TypeScript rule without explicit permission.
|
|
25
|
+
- Add brief comments only when future agents need context that is not obvious from the code.
|
|
26
|
+
- Do not use decorative repeated-character section headers.
|
|
33
27
|
- Use `it('should...')` style tests.
|
|
34
|
-
- Unit
|
|
35
|
-
|
|
36
|
-
## Working Rules
|
|
37
|
-
|
|
38
|
-
- Use `rtk` as the default wrapper for shell commands that produce meaningful stdout or stderr.
|
|
39
|
-
- Prefer `bun test` for verification. Run it after non-trivial changes.
|
|
40
|
-
- Run `bun run lint` in addition to `bun test` and `bun run typecheck` before completion.
|
|
41
|
-
- When changing package/distribution behavior, also run a local packed-tarball smoke test.
|
|
42
|
-
- When changing the interactive flow, validate it in a real TTY session; piped stdin is not a reliable substitute.
|
|
43
|
-
- When changing the UI package, validate it in a browser after the build or dev server is up.
|
|
44
|
-
- Use `apply_patch` for manual edits.
|
|
45
|
-
- Keep output compatibility stable. The exported transcript format is user-facing.
|
|
46
|
-
- Preserve the behavior of existing flags unless the task explicitly changes CLI semantics.
|
|
28
|
+
- Unit tests live next to their implementation.
|
|
29
|
+
- `apps/ui/src/routeTree.gen.ts` is generated and must not be manually edited.
|
|
47
30
|
|
|
48
31
|
## Architecture
|
|
49
32
|
|
|
50
|
-
|
|
51
|
-
- `src/
|
|
52
|
-
-
|
|
53
|
-
- `src/lib/
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
- `
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- workspace storage bucket discovery, grouping, thread/bubble reads from the global store
|
|
69
|
-
- `src/lib/cursor-recovery.ts`
|
|
70
|
-
- re-links lost threads into the active workspace bucket and prunes threads (destructive)
|
|
71
|
-
- `src/lib/cursor-transcript.ts`
|
|
72
|
-
- renders Cursor bubbles (user, assistant, reasoning, tool calls) to Markdown or TXT
|
|
73
|
-
- `src/lib/cursor-exporter-types.ts`
|
|
74
|
-
- shared Cursor types and macOS Cursor data-dir path resolution (`SPIRACHA_CURSOR_USER_DIR` override)
|
|
75
|
-
|
|
76
|
-
Claude Code browser/export modules:
|
|
77
|
-
- `src/lib/claude-code-db.ts`
|
|
78
|
-
- local Claude Code project/session discovery from `~/.claude/projects`, transcript parsing, and workspace grouping
|
|
79
|
-
- `src/lib/claude-code-exporter-types.ts`
|
|
80
|
-
- shared Claude Code workspace, session, entry, part, and export option types plus default projects-dir resolution
|
|
81
|
-
- `src/lib/claude-code-transcript-phase.ts`
|
|
82
|
-
- browser-safe assistant commentary/final-answer classification based on Claude Code stop reasons
|
|
83
|
-
- `src/lib/claude-code-transcript.ts`
|
|
84
|
-
- renders local Claude Code sessions to Markdown or plain text for UI downloads
|
|
85
|
-
|
|
86
|
-
Kiro browser/export modules:
|
|
87
|
-
- `src/lib/kiro-db.ts`
|
|
88
|
-
- read-only Kiro workspace/session discovery from Kiro workspace session JSON files, transcript part parsing, and workspace grouping
|
|
89
|
-
- `src/lib/kiro-exporter-types.ts`
|
|
90
|
-
- shared Kiro workspace, session, entry, part, and export option types plus default workspace-session path resolution
|
|
91
|
-
- `src/lib/kiro-transcript-phase.ts`
|
|
92
|
-
- browser-safe assistant commentary/final-answer classification per Kiro user turn
|
|
93
|
-
- `src/lib/kiro-transcript.ts`
|
|
94
|
-
- renders Kiro sessions to Markdown or plain text for UI downloads
|
|
95
|
-
|
|
96
|
-
Antigravity browser/export modules:
|
|
97
|
-
- `src/lib/antigravity-db.ts`
|
|
98
|
-
- Antigravity workspace discovery, summary-index parsing, transcript lookup, and Markdown rendering
|
|
99
|
-
- `src/lib/antigravity-exporter-types.ts`
|
|
100
|
-
- shared Antigravity workspace and conversation types plus default data-dir resolution
|
|
101
|
-
- `src/lib/antigravity-keychain.ts`
|
|
102
|
-
- macOS Keychain access and safe-storage decryption helpers for Antigravity transcript export
|
|
103
|
-
|
|
104
|
-
OpenCode browser/export modules:
|
|
105
|
-
- `src/lib/opencode-db.ts`
|
|
106
|
-
- read-only OpenCode project/session discovery, transcript part parsing, and workspace grouping
|
|
107
|
-
- `src/lib/opencode-exporter-types.ts`
|
|
108
|
-
- shared OpenCode workspace, session, message, part, and export option types plus default DB path resolution
|
|
109
|
-
- `src/lib/opencode-transcript-phase.ts`
|
|
110
|
-
- browser-safe assistant commentary/final-answer classification per OpenCode assistant run
|
|
111
|
-
- `src/lib/opencode-think-tags.ts`
|
|
112
|
-
- browser-safe MiniMax `<think>` extraction shared by OpenCode export rendering and UI adapters
|
|
113
|
-
- `src/lib/opencode-transcript.ts`
|
|
114
|
-
- renders OpenCode sessions to Markdown or plain text for UI downloads
|
|
115
|
-
|
|
116
|
-
Other important files:
|
|
117
|
-
- `src/lib/claude-exporter.ts`
|
|
118
|
-
- Claude transcript export pipeline
|
|
33
|
+
Stable conversation API:
|
|
34
|
+
- `src/client.ts`
|
|
35
|
+
- public Bun client export for local serverless access and HTTP access to the same normalized conversation DTOs
|
|
36
|
+
- `src/lib/conversation-api.ts`
|
|
37
|
+
- HTTP request handler shared by TanStack API routes and root tests
|
|
38
|
+
- owns response envelopes, validation errors, route dispatch, and default selector behavior
|
|
39
|
+
- `src/lib/conversation-data/index.ts`
|
|
40
|
+
- source registry, pagination, path-scoped collection, reference resolution, and normalized Markdown rendering
|
|
41
|
+
- `src/lib/conversation-data/types.ts`
|
|
42
|
+
- shared source, message, detail, paging, location, and adapter contracts
|
|
43
|
+
- `src/lib/conversation-data/path-match.ts`
|
|
44
|
+
- exact and descendant cwd matching
|
|
45
|
+
- `src/lib/conversation-data/message-selector.ts`
|
|
46
|
+
- `all`, `last_assistant`, and `last_final_answer` message selection
|
|
47
|
+
- `src/lib/conversation-data/*-adapter.ts`
|
|
48
|
+
- source-specific mapping into normalized conversation shapes
|
|
49
|
+
|
|
50
|
+
Codex browser/export modules:
|
|
119
51
|
- `src/lib/codex-browser-db.ts`
|
|
120
52
|
- project/thread browsing queries, delete flows, dashboard summaries, DB path resolution
|
|
121
53
|
- `src/lib/codex-browser-export.ts`
|
|
122
|
-
- UI-facing thread
|
|
54
|
+
- UI-facing thread download rendering
|
|
55
|
+
- `src/lib/codex-thread-types.ts`
|
|
56
|
+
- Codex DB row and transcript rendering types
|
|
57
|
+
- `src/lib/codex-transcript-renderer.ts`
|
|
58
|
+
- Markdown/plain text rendering for Codex session files
|
|
123
59
|
- `src/lib/codex-thread-parser.ts`
|
|
124
60
|
- structured Codex event parsing used by analytics and the UI
|
|
125
61
|
- `src/lib/codex-analytics.ts`
|
|
126
|
-
- token/tool analytics derived from thread rows plus bounded transcript parsing and
|
|
62
|
+
- token/tool analytics derived from thread rows plus bounded transcript parsing and cache keys
|
|
63
|
+
- `src/lib/codex-thread-cache.ts`
|
|
64
|
+
- thread-detail cache helpers
|
|
65
|
+
- `src/lib/codex-thread-recovery.ts`
|
|
66
|
+
- Codex project recovery helpers
|
|
67
|
+
|
|
68
|
+
Source-specific browser/export modules:
|
|
69
|
+
- `src/lib/claude-code-db.ts`, `src/lib/claude-code-transcript-phase.ts`, `src/lib/claude-code-transcript.ts`
|
|
70
|
+
- `src/lib/kiro-db.ts`, `src/lib/kiro-transcript-phase.ts`, `src/lib/kiro-transcript.ts`
|
|
71
|
+
- `src/lib/qoder-db.ts`, `src/lib/qoder-transcript-phase.ts`, `src/lib/qoder-transcript.ts`
|
|
72
|
+
- `src/lib/cursor-db.ts`, `src/lib/cursor-recovery.ts`, `src/lib/cursor-transcript.ts`
|
|
73
|
+
- `src/lib/antigravity-db.ts`, `src/lib/antigravity-keychain.ts`
|
|
74
|
+
- `src/lib/opencode-db.ts`, `src/lib/opencode-transcript-phase.ts`, `src/lib/opencode-think-tags.ts`, `src/lib/opencode-transcript.ts`
|
|
75
|
+
|
|
76
|
+
Shared utilities:
|
|
127
77
|
- `src/lib/concurrency.ts`
|
|
128
|
-
|
|
78
|
+
- `src/lib/model-label.ts`
|
|
79
|
+
- `src/lib/path-transforms.ts`
|
|
80
|
+
- `src/lib/shared.ts`
|
|
81
|
+
- `src/lib/sqlite-error.ts`
|
|
82
|
+
- `src/lib/sqlite-retry.ts`
|
|
83
|
+
- `src/lib/ui-cache.ts`
|
|
129
84
|
- `src/lib/ui-export-archive.ts`
|
|
130
|
-
- browser-download filename, MIME type, and zip archive helpers
|
|
131
85
|
- `src/lib/ui-export-files.ts`
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
- temporary cache under `os.tmpdir()` for transcript and analytics lookups
|
|
135
|
-
- `src/mcp-server.ts`
|
|
136
|
-
- MCP server exposing `export_codex_chats` and `export_claude_transcript`
|
|
137
|
-
- `plugins/codex-chats-export/`
|
|
138
|
-
- local Codex plugin manifest, skill, and MCP wiring
|
|
86
|
+
|
|
87
|
+
UI package:
|
|
139
88
|
- `apps/ui/`
|
|
140
|
-
- TanStack Start browser UI
|
|
141
|
-
-
|
|
89
|
+
- TanStack Start browser UI
|
|
90
|
+
- API routes live under `apps/ui/src/routes/api.v1.*.ts`
|
|
91
|
+
- source routes include `/threads/$threadId`, `/claude-code-sessions/$sessionId`, `/kiro-sessions/$sessionId`, `/qoder-sessions/$sessionId`, `/cursor-threads/$composerId`, `/antigravity-conversations/$conversationId`, and `/opencode-sessions/$sessionId`
|
|
92
|
+
|
|
93
|
+
## Stable API Contract
|
|
94
|
+
|
|
95
|
+
The package exposes:
|
|
96
|
+
- `spiracha/client`
|
|
97
|
+
- `createConversationClient({ mode: 'local' })` for serverless local access
|
|
98
|
+
- `createConversationClient({ mode: 'http', baseUrl })` for a running UI server
|
|
99
|
+
- `spiracha/types`
|
|
100
|
+
- normalized conversation DTO types
|
|
101
|
+
|
|
102
|
+
The local UI server exposes:
|
|
103
|
+
- `GET /api/v1/sources`
|
|
104
|
+
- `GET /api/v1/conversations?cwd=<absolute-path>&include_messages=true`
|
|
105
|
+
- `POST /api/v1/conversation-query`
|
|
106
|
+
- `GET /api/v1/conversations/:source/:id`
|
|
107
|
+
- `GET /api/v1/conversations/:source/:id/export`
|
|
108
|
+
- `GET /api/v1/resolve?ref=<url-or-deeplink>`
|
|
109
|
+
|
|
110
|
+
Defaults:
|
|
111
|
+
- list endpoints default to `message_selector=last_final_answer`
|
|
112
|
+
- detail endpoints default to `message_selector=all`
|
|
113
|
+
- `source=codex,claude-code,...` may scope collection
|
|
114
|
+
- omitted source means all installed/available integrations
|
|
115
|
+
- all-source collection should tolerate missing optional integrations
|
|
116
|
+
- explicit source requests should surface source-specific failures
|
|
117
|
+
|
|
118
|
+
Do not bake review semantics into Spiracha. A client such as `fgh --collect` decides that a selected assistant message is a review and chooses where to save it.
|
|
142
119
|
|
|
143
120
|
## Test Strategy
|
|
144
121
|
|
|
145
122
|
Current tests cover:
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
- Antigravity discovery, transcript parsing, and artifact export rendering
|
|
152
|
-
- OpenCode discovery, transcript parsing, and export rendering
|
|
123
|
+
- stable conversation API envelopes, validation, source listing, path-scoped collection, message selectors, reference resolution, and Codex adapter mapping
|
|
124
|
+
- source-specific discovery, transcript parsing, phase classification, and export rendering
|
|
125
|
+
- Codex project/thread browsing, delete semantics, analytics, cache keys, and recovery helpers
|
|
126
|
+
- Cursor recovery/prune behavior
|
|
127
|
+
- Antigravity discovery, transcript parsing, Keychain state, and artifact export rendering
|
|
153
128
|
- OpenCode MiniMax `<think>` tag extraction, including code-literal preservation
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
- analytics aggregation
|
|
157
|
-
- bounded concurrency helpers and analytics cache-key behavior
|
|
158
|
-
- browser-export rendering helpers
|
|
159
|
-
- Codex CLI parsing helpers
|
|
160
|
-
- interactive-mode inference helpers
|
|
161
|
-
- transcript formatting helpers
|
|
162
|
-
- MCP stdio protocol round-trips using the real server process
|
|
163
|
-
- wrapped UI Vitest suite via `src/ui-package.test.ts`
|
|
164
|
-
- packaged UI `bunx --package` launch path via `src/package-ui-smoke.test.ts`
|
|
165
|
-
- type-checking via `bun run typecheck`
|
|
129
|
+
- UI component and adapter behavior through the Vitest suite wrapped by `src/ui-package.test.ts`
|
|
130
|
+
- package manifest hard-cut guarantees through `src/package-manifest.test.ts`
|
|
166
131
|
|
|
167
132
|
When changing risky areas:
|
|
168
|
-
-
|
|
169
|
-
-
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
- MCP contract changes: update `src/mcp-server.test.ts`
|
|
175
|
-
- UI component behavior: update/add Vitest files under `apps/ui/src/**/*.vitest.tsx`
|
|
133
|
+
- Stable API changes: update `src/lib/conversation-api.test.ts` and focused tests under `src/lib/conversation-data/`.
|
|
134
|
+
- Source adapter changes: update the matching `src/lib/conversation-data/*-adapter.ts` tests or add one next to the adapter.
|
|
135
|
+
- Transcript parsing/rendering: update the matching source transcript tests.
|
|
136
|
+
- Codex browsing/delete/analytics: update `src/lib/codex-browser-db.test.ts` and `src/lib/codex-analytics.test.ts`.
|
|
137
|
+
- UI behavior: update/add Vitest files under `apps/ui/src/**/*.vitest.tsx`.
|
|
138
|
+
- API route behavior: add a real UI server/browser smoke when route registration or SSR behavior changes.
|
|
176
139
|
|
|
177
140
|
## Common Commands
|
|
178
141
|
|
|
@@ -182,70 +145,16 @@ rtk bun run lint
|
|
|
182
145
|
rtk bun run typecheck
|
|
183
146
|
rtk bun run build
|
|
184
147
|
rtk bun run coverage
|
|
185
|
-
rtk bun run smoke:package-ui
|
|
186
|
-
rtk bun run test:perf
|
|
187
148
|
rtk bun start
|
|
188
|
-
rtk bun
|
|
189
|
-
rtk bun
|
|
190
|
-
rtk bun run export:claude -- --help
|
|
191
|
-
rtk bun run ./src/export-cursor.ts -- --help
|
|
192
|
-
rtk bun run mcp
|
|
193
|
-
rtk bun run ui:dev
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Packed tarball smoke test:
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
rtk bun pm pack
|
|
200
|
-
package_tgz="$PWD/spiracha-<version>.tgz"
|
|
201
|
-
tmp_dir=$(mktemp -d)
|
|
202
|
-
cd "$tmp_dir"
|
|
203
|
-
printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
|
|
204
|
-
rtk bun add "$package_tgz"
|
|
205
|
-
rtk bunx spiracha --help
|
|
206
|
-
rtk bunx spiracha ui --help
|
|
207
|
-
rtk bunx spiracha claude --help
|
|
208
|
-
rtk bunx codex-chats --help
|
|
209
|
-
rtk bunx codex-chats-claude --help
|
|
210
|
-
rtk bun run smoke:package-ui
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
Example Codex export:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
rtk bunx spiracha
|
|
217
|
-
rtk bunx spiracha codex://threads/<thread-id> --no-metadata
|
|
218
|
-
rtk bun start --tools --project summer
|
|
219
|
-
rtk bun start codex://threads/<thread-id> --output-format txt
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
Example Claude export:
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
rtk bunx spiracha claude /path/to/transcript --output-format txt
|
|
226
|
-
rtk bun run export:claude -- /path/to/export-dir --output-format txt
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
Example Cursor export:
|
|
230
|
-
|
|
231
|
-
```bash
|
|
232
|
-
rtk bunx spiracha cursor list
|
|
233
|
-
rtk bunx spiracha cursor export --workspace summer
|
|
234
|
-
rtk bunx spiracha cursor export --thread <composer-id> --output-format txt
|
|
235
|
-
rtk bunx spiracha cursor recover --workspace summer --apply
|
|
149
|
+
rtk bun run ui:preview
|
|
150
|
+
rtk bun run --cwd apps/ui test
|
|
236
151
|
```
|
|
237
152
|
|
|
238
153
|
## Notes
|
|
239
154
|
|
|
240
|
-
-
|
|
241
|
-
-
|
|
242
|
-
- Codex MCP exports must be scoped by at least one of `deeplinks`, `project`, or `cwd`.
|
|
243
|
-
- Claude Code direct-history browsing/export, Kiro browsing/export, Antigravity, and OpenCode browsing/export currently ship through the browser UI rather than standalone CLI commands.
|
|
244
|
-
- `txt` output is intentionally real plain text, not Markdown with a `.txt` extension.
|
|
245
|
-
- The published package is Bun-first. `bin` entrypoints target Bun shebang execution.
|
|
246
|
-
- Keep every root-package source module imported by packaged UI server code listed in `package.json.files`.
|
|
247
|
-
- The UI package runs `vite` through `bun --bun ...` because its server functions depend on Bun-only modules like `bun:sqlite`.
|
|
248
|
-
- Keep UI runtime dependency versions aligned with the root package when both package manifests list the same TanStack/React runtime package; mismatched server-function manifests have broken packaged production builds.
|
|
155
|
+
- Keep root-package source modules imported by the UI available through `@spiracha/lib/*`.
|
|
156
|
+
- The UI package runs Vite through `bun --bun` because server functions depend on Bun-only modules like `bun:sqlite`.
|
|
249
157
|
- TanStack Start server functions should use `.validator(...)`, not deprecated `.inputValidator(...)`.
|
|
250
|
-
-
|
|
251
|
-
-
|
|
158
|
+
- API routes should use route-level `server.handlers`.
|
|
159
|
+
- Keep `*-transcript-phase.ts` modules browser-safe; UI client adapters import them directly.
|
|
160
|
+
- Keep source-specific phase and filtering rules centralized so the UI export flow and stable API select messages consistently.
|