spiracha 1.2.0 → 1.3.2
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 +50 -12
- package/README.md +117 -64
- package/apps/ui/AGENTS.md +16 -8
- package/apps/ui/README.md +28 -12
- package/apps/ui/dist/client/assets/{analytics-Cv0JMDN2.js → analytics-B_hYz65v.js} +1 -1
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-qiyygB7e.js +1 -0
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-z1SQC2Kg.js +1 -0
- package/apps/ui/dist/client/assets/antigravity-keychain-panel-dYuRWtCf.js +1 -0
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-CliqUr7o.js +1 -0
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-CnoBzyX6.js +1 -0
- package/apps/ui/dist/client/assets/antigravity.index-CakfZz_E.js +1 -0
- package/apps/ui/dist/client/assets/antigravity.index-DY7M1KhG.js +1 -0
- package/apps/ui/dist/client/assets/badge-aHE9ETVe.js +1 -0
- package/apps/ui/dist/client/assets/checkbox-DN3XnJaA.js +1 -0
- package/apps/ui/dist/client/assets/cursor-threads._composerId-BMQyx8qG.js +1 -0
- package/apps/ui/dist/client/assets/cursor-threads._composerId-BTlaA-tV.js +1 -0
- package/apps/ui/dist/client/assets/cursor._workspaceKey-CrgrfevV.js +1 -0
- package/apps/ui/dist/client/assets/cursor._workspaceKey-bYS2syGL.js +1 -0
- package/apps/ui/dist/client/assets/cursor.index-CTqZMPYU.js +1 -0
- package/apps/ui/dist/client/assets/cursor.index-Clsz4E_e.js +2 -0
- package/apps/ui/dist/client/assets/{data-table-Bgnh7phF.js → data-table-Cj-v-uyB.js} +2 -2
- package/apps/ui/dist/client/assets/delete-confirm-dialog-DTpzBiNK.js +11 -0
- package/apps/ui/dist/client/assets/dist-BNAn99Pu.js +1 -0
- package/apps/ui/dist/client/assets/download-P3Rp23Ad.js +1 -0
- package/apps/ui/dist/client/assets/dropdown-menu-3qB5j9nt.js +1 -0
- package/apps/ui/dist/client/assets/es2015-Dwm_turD.js +41 -0
- package/apps/ui/dist/client/assets/export-dialog-CazdrASq.js +1 -0
- package/apps/ui/dist/client/assets/formatters-BdnWuM1z.js +1 -0
- package/apps/ui/dist/client/assets/index-BVFnfS78.js +22 -0
- package/apps/ui/dist/client/assets/json-panel-DLkS30sQ.js +1 -0
- package/apps/ui/dist/client/assets/metadata-section-jnIkB7dB.js +1 -0
- package/apps/ui/dist/client/assets/{metric-card-BJX5rkHK.js → metric-card-CBZuWLzQ.js} +1 -1
- package/apps/ui/dist/client/assets/page-header-CnD21cPn.js +1 -0
- package/apps/ui/dist/client/assets/projects._project-BLszwvYL.js +1 -0
- package/apps/ui/dist/client/assets/projects._project-DvLxYbvk.js +1 -0
- package/apps/ui/dist/client/assets/projects.index-COn8woBR.js +1 -0
- package/apps/ui/dist/client/assets/projects.index-DYs98skV.js +3 -0
- package/apps/ui/dist/client/assets/refresh-ccw-BDrYXjtD.js +1 -0
- package/apps/ui/dist/client/assets/reload-error-panel-DLAg0AW2.js +1 -0
- package/apps/ui/dist/client/assets/routes-BtF5-coe.js +1 -0
- package/apps/ui/dist/client/assets/scroll-text-CqaFm9by.js +1 -0
- package/apps/ui/dist/client/assets/select-DbnpwqL6.js +1 -0
- package/apps/ui/dist/client/assets/settings-CGX3VleN.js +1 -0
- package/apps/ui/dist/client/assets/styles-Ch0r3kMZ.css +1 -0
- package/apps/ui/dist/client/assets/text-document-panel-DPleOmmq.js +1 -0
- package/apps/ui/dist/client/assets/text-filter-7M6wRo-t.js +2 -0
- package/apps/ui/dist/client/assets/threads._threadId-D5w76IB-.js +7 -0
- package/apps/ui/dist/client/assets/{threads._threadId-CUiCZSwo.js → threads._threadId-Dx85sI9P.js} +1 -1
- package/apps/ui/dist/client/assets/useMutation-MZ3Hr9h9.js +1 -0
- package/apps/ui/dist/client/assets/useQuery-Cb4V0AT0.js +1 -0
- package/apps/ui/dist/client/icon.svg +28 -0
- package/apps/ui/dist/client/manifest.json +6 -16
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CBbkUXw6.js +227 -0
- package/apps/ui/dist/server/assets/{analytics-2QpLKjlG.js → analytics-CBNOYZwJ.js} +2 -2
- package/apps/ui/dist/server/assets/antigravity-conversation-state-HgzS302O.js +16 -0
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-B9Rm4EXh.js +212 -0
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BIdYNy68.js +20 -0
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-D426O-64.js +11 -0
- package/apps/ui/dist/server/assets/antigravity-db-D9gW1D8G.js +576 -0
- package/apps/ui/dist/server/assets/antigravity-keychain-DOiuHDwK.js +126 -0
- package/apps/ui/dist/server/assets/antigravity-keychain-panel-DcLyBBwd.js +55 -0
- package/apps/ui/dist/server/assets/antigravity-queries-CgQhlQ7J.js +37 -0
- package/apps/ui/dist/server/assets/antigravity-server-DFUx4Khk.js +114 -0
- package/apps/ui/dist/server/assets/antigravity._workspaceKey-3m_MzNFA.js +11 -0
- package/apps/ui/dist/server/assets/antigravity._workspaceKey-D42ixtzp.js +210 -0
- package/apps/ui/dist/server/assets/antigravity._workspaceKey-DnSlSC-C.js +28 -0
- package/apps/ui/dist/server/assets/antigravity.index-DZVT-cac.js +104 -0
- package/apps/ui/dist/server/assets/antigravity.index-DudTB3Tq.js +11 -0
- package/apps/ui/dist/server/assets/badge-EvdhKK_Z.js +26 -0
- package/apps/ui/dist/server/assets/{codex-queries-BH4Cb0v3.js → codex-queries-eOJGfHQj.js} +4 -16
- package/apps/ui/dist/server/assets/{codex-server-DqzruLmg.js → codex-server-nrETIF--.js} +149 -140
- package/apps/ui/dist/server/assets/createServerRpc-BtXIw2iP.js +12 -0
- package/apps/ui/dist/server/assets/createSsrRpc-COf5Zuye.js +16 -0
- package/apps/ui/dist/server/assets/cursor-db-B7agkAvM.js +643 -0
- package/apps/ui/dist/server/assets/cursor-exporter-types-CI3goo-c.js +34 -0
- package/apps/ui/dist/server/assets/cursor-queries-BMhuJeUO.js +65 -0
- package/apps/ui/dist/server/assets/cursor-recovery-9bJLs7vG.js +361 -0
- package/apps/ui/dist/server/assets/cursor-server-BgylIFgn.js +184 -0
- package/apps/ui/dist/server/assets/cursor-threads._composerId-BB0Y_Mao.js +11 -0
- package/apps/ui/dist/server/assets/cursor-threads._composerId-BsxFKzoJ.js +218 -0
- package/apps/ui/dist/server/assets/cursor-threads._composerId-DXffY_CK.js +18 -0
- package/apps/ui/dist/server/assets/cursor-transcript-2iL3KFSK.js +125 -0
- package/apps/ui/dist/server/assets/cursor._workspaceKey-BP2J1x_x.js +28 -0
- package/apps/ui/dist/server/assets/cursor._workspaceKey-BQd0e-Pd.js +399 -0
- package/apps/ui/dist/server/assets/cursor._workspaceKey-nmg3YIOQ.js +11 -0
- package/apps/ui/dist/server/assets/cursor.index-CQVxtCm8.js +189 -0
- package/apps/ui/dist/server/assets/cursor.index-CcsX7DG0.js +11 -0
- package/apps/ui/dist/server/assets/{delete-confirm-dialog-CWqcTXTF.js → delete-confirm-dialog-PCD7S0_M.js} +5 -4
- package/apps/ui/dist/server/assets/download-DMmiy1xf.js +92 -0
- package/apps/ui/dist/server/assets/{input-B4tEzctc.js → dropdown-menu-Dy_9t6TN.js} +1 -11
- package/apps/ui/dist/server/assets/{download-Drctxary.js → export-dialog-DaPlOGFT.js} +1 -92
- package/apps/ui/dist/server/assets/json-panel-RYsxWFae.js +16 -0
- package/apps/ui/dist/server/assets/{loading-panel-DbLdvjtR.js → loading-panel-BGFnWseS.js} +1 -1
- package/apps/ui/dist/server/assets/metadata-section-D6Lbc7D6.js +54 -0
- package/apps/ui/dist/server/assets/page-header-VNSaM3xd.js +29 -0
- package/apps/ui/dist/server/assets/projects._project-Bshqk7JA.js +12 -0
- package/apps/ui/dist/server/assets/{projects._project-gT01HBqH.js → projects._project-DUN3iWfg.js} +4 -4
- package/apps/ui/dist/server/assets/{projects._project-DreIU5b0.js → projects._project-Dim9Y0kD.js} +54 -26
- package/apps/ui/dist/server/assets/projects.index-BLXOx5eL.js +12 -0
- package/apps/ui/dist/server/assets/{projects.index-BYmgSGAj.js → projects.index-DjSQK5dm.js} +23 -27
- package/apps/ui/dist/server/assets/{projects.index-CaplpeMy.js → reload-error-panel-BJMxY3U1.js} +5 -6
- package/apps/ui/dist/server/assets/{router-Qj5Kn7bl.js → router-DrDgc-LD.js} +131 -44
- package/apps/ui/dist/server/assets/{routes-_LbCIjtJ.js → routes-B-GlEe2C.js} +54 -39
- package/apps/ui/dist/server/assets/{routes-BtcXuK0x.js → routes-CNHAUMwo.js} +2 -2
- package/apps/ui/dist/server/assets/{settings-MvWDgc1u.js → settings-OayxIYQQ.js} +1 -1
- package/apps/ui/dist/server/assets/shared-CPRNYIql.js +134 -0
- package/apps/ui/dist/server/assets/text-document-panel-D8JbQWAn.js +23 -0
- package/apps/ui/dist/server/assets/text-filter-CGKxMCKt.js +36 -0
- package/apps/ui/dist/server/assets/{threads._threadId-DcbAJkwf.js → threads._threadId-CJzm4KrZ.js} +3 -3
- package/apps/ui/dist/server/assets/{threads._threadId-D5m6ypGw.js → threads._threadId-DODTYddm.js} +69 -76
- package/apps/ui/dist/server/server.js +77 -13
- package/package.json +21 -11
- package/src/export-cursor.ts +244 -0
- package/src/lib/antigravity-db.ts +936 -0
- package/src/lib/antigravity-exporter-types.ts +70 -0
- package/src/lib/antigravity-keychain.ts +203 -0
- package/src/lib/codex-browser-db.ts +7 -1
- package/src/lib/codex-browser-types.ts +22 -1
- package/src/lib/codex-thread-recovery.ts +202 -0
- package/src/lib/cursor-db.ts +1096 -0
- package/src/lib/cursor-exporter-types.ts +190 -0
- package/src/lib/cursor-exporter.ts +266 -0
- package/src/lib/cursor-recovery.ts +543 -0
- package/src/lib/cursor-transcript.ts +183 -0
- package/src/spiracha.ts +16 -3
- package/src/ui-cli.ts +2 -2
- package/apps/ui/dist/client/assets/checkbox-DjHij7DJ.js +0 -1
- package/apps/ui/dist/client/assets/delete-confirm-dialog-CIZy_LXD.js +0 -11
- package/apps/ui/dist/client/assets/download-DQtfva4z.js +0 -1
- package/apps/ui/dist/client/assets/es2015-DsDKdYCE.js +0 -41
- package/apps/ui/dist/client/assets/formatters-CWFrMKSn.js +0 -1
- package/apps/ui/dist/client/assets/index-C_-e0lDI.js +0 -22
- package/apps/ui/dist/client/assets/input-BbgApiqZ.js +0 -1
- package/apps/ui/dist/client/assets/page-header-ODLuGLAB.js +0 -1
- package/apps/ui/dist/client/assets/projects._project-C2Pys_bB.js +0 -1
- package/apps/ui/dist/client/assets/projects._project-CHvAKvlu.js +0 -1
- package/apps/ui/dist/client/assets/projects.index-BmwtS1x-.js +0 -1
- package/apps/ui/dist/client/assets/projects.index-CuLw73mt.js +0 -1
- package/apps/ui/dist/client/assets/routes-CfnaTOlj.js +0 -1
- package/apps/ui/dist/client/assets/select-B1kH_5lx.js +0 -1
- package/apps/ui/dist/client/assets/settings-mYTB3sso.js +0 -1
- package/apps/ui/dist/client/assets/styles-CMrP9Jb4.css +0 -1
- package/apps/ui/dist/client/assets/threads._threadId-C_47okme.js +0 -7
- package/apps/ui/dist/client/favicon.ico +0 -0
- package/apps/ui/dist/client/logo192.png +0 -0
- package/apps/ui/dist/client/logo512.png +0 -0
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-kj_QB_26.js +0 -99
- package/apps/ui/dist/server/assets/page-header-CxdZM86z.js +0 -25
- package/apps/ui/dist/server/assets/projects._project-CLSohrBp.js +0 -26
package/AGENTS.md
CHANGED
|
@@ -2,21 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
This repo exports local Codex chats
|
|
5
|
+
This repo exports local Codex chats, Claude Code transcripts, and Cursor Agent/Composer threads to Markdown or plain text, and the UI also browses local Antigravity conversation history.
|
|
6
6
|
|
|
7
7
|
Main entrypoints:
|
|
8
|
-
- `bun start ...` for Codex chat export
|
|
9
|
-
- `bun start` for interactive export mode
|
|
10
|
-
- `bun run export:claude -- ...` for Claude transcript export
|
|
11
|
-
- `bun run
|
|
12
|
-
- `bun run
|
|
8
|
+
- `rtk bun start ...` for Codex chat export
|
|
9
|
+
- `rtk bun start` for interactive export mode
|
|
10
|
+
- `rtk bun run export:claude -- ...` for Claude transcript export
|
|
11
|
+
- `rtk bun run ./src/export-cursor.ts ...` (or `rtk spiracha cursor ...`) for Cursor thread export, recovery, and prune
|
|
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, Cursor, and Antigravity data
|
|
13
14
|
- published package entrypoints:
|
|
14
|
-
- `bunx spiracha`
|
|
15
|
-
- `bunx spiracha ui`
|
|
16
|
-
- `bunx spiracha claude ...`
|
|
15
|
+
- `rtk bunx spiracha`
|
|
16
|
+
- `rtk bunx spiracha ui`
|
|
17
|
+
- `rtk bunx spiracha claude ...`
|
|
17
18
|
- legacy aliases retained:
|
|
18
|
-
- `bunx codex-chats`
|
|
19
|
-
- `bunx codex-chats-claude`
|
|
19
|
+
- `rtk bunx codex-chats`
|
|
20
|
+
- `rtk bunx codex-chats-claude`
|
|
20
21
|
|
|
21
22
|
## Conventions and Rules
|
|
22
23
|
|
|
@@ -58,6 +59,28 @@ Codex exporter modules:
|
|
|
58
59
|
- `src/lib/codex-exporter-types.ts`
|
|
59
60
|
- shared Codex exporter types and default path constants
|
|
60
61
|
|
|
62
|
+
Cursor exporter modules:
|
|
63
|
+
- `src/export-cursor.ts`
|
|
64
|
+
- CLI runner with `list`, `export`, `recover`, and `prune` subcommands
|
|
65
|
+
- `src/lib/cursor-exporter.ts`
|
|
66
|
+
- export orchestration, CLI parsing, and help text
|
|
67
|
+
- `src/lib/cursor-db.ts`
|
|
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
|
+
Antigravity browser/export modules:
|
|
77
|
+
- `src/lib/antigravity-db.ts`
|
|
78
|
+
- Antigravity workspace discovery, summary-index parsing, transcript lookup, and Markdown rendering
|
|
79
|
+
- `src/lib/antigravity-exporter-types.ts`
|
|
80
|
+
- shared Antigravity workspace and conversation types plus default data-dir resolution
|
|
81
|
+
- `src/lib/antigravity-keychain.ts`
|
|
82
|
+
- macOS Keychain access and safe-storage decryption helpers for Antigravity transcript export
|
|
83
|
+
|
|
61
84
|
Other important files:
|
|
62
85
|
- `src/lib/claude-exporter.ts`
|
|
63
86
|
- Claude transcript export pipeline
|
|
@@ -76,12 +99,15 @@ Other important files:
|
|
|
76
99
|
- `plugins/codex-chats-export/`
|
|
77
100
|
- local Codex plugin manifest, skill, and MCP wiring
|
|
78
101
|
- `apps/ui/`
|
|
79
|
-
- TanStack Start browser UI package
|
|
102
|
+
- TanStack Start browser UI package for Codex, Cursor, and Antigravity
|
|
103
|
+
- source-specific index/detail routes include `/threads/$threadId`, `/cursor-threads/$composerId`, and `/antigravity-conversations/$conversationId`
|
|
80
104
|
|
|
81
105
|
## Test Strategy
|
|
82
106
|
|
|
83
107
|
Current tests cover:
|
|
84
108
|
- exporter end-to-end behavior for Codex and Claude
|
|
109
|
+
- Cursor export, recovery, and pruning behavior
|
|
110
|
+
- Antigravity discovery, transcript parsing, and artifact export rendering
|
|
85
111
|
- structured Codex transcript parsing
|
|
86
112
|
- project/thread browsing and destructive DB flows
|
|
87
113
|
- analytics aggregation
|
|
@@ -91,6 +117,7 @@ Current tests cover:
|
|
|
91
117
|
- transcript formatting helpers
|
|
92
118
|
- MCP stdio protocol round-trips using the real server process
|
|
93
119
|
- wrapped UI Vitest suite via `src/ui-package.test.ts`
|
|
120
|
+
- packaged UI `bunx --package` launch path via `src/package-ui-smoke.test.ts`
|
|
94
121
|
- type-checking via `bun run typecheck`
|
|
95
122
|
|
|
96
123
|
When changing risky areas:
|
|
@@ -116,6 +143,7 @@ rtk bun start
|
|
|
116
143
|
rtk bun start -- --help
|
|
117
144
|
rtk bun start --interactive
|
|
118
145
|
rtk bun run export:claude -- --help
|
|
146
|
+
rtk bun run ./src/export-cursor.ts -- --help
|
|
119
147
|
rtk bun run mcp
|
|
120
148
|
rtk bun run ui:dev
|
|
121
149
|
```
|
|
@@ -153,11 +181,21 @@ rtk bunx spiracha claude /path/to/transcript --output-format txt
|
|
|
153
181
|
rtk bun run export:claude -- /path/to/export-dir --output-format txt
|
|
154
182
|
```
|
|
155
183
|
|
|
184
|
+
Example Cursor export:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
rtk bunx spiracha cursor list
|
|
188
|
+
rtk bunx spiracha cursor export --workspace summer
|
|
189
|
+
rtk bunx spiracha cursor export --thread <composer-id> --output-format txt
|
|
190
|
+
rtk bunx spiracha cursor recover --workspace summer --apply
|
|
191
|
+
```
|
|
192
|
+
|
|
156
193
|
## Notes
|
|
157
194
|
|
|
158
195
|
- `--project` matches the final `cwd` path segment for both POSIX and Windows-style paths, not the full path.
|
|
159
196
|
- Running `codex-chats` or `bun start` with no args enters interactive mode.
|
|
160
197
|
- Codex MCP exports must be scoped by at least one of `deeplinks`, `project`, or `cwd`.
|
|
198
|
+
- Antigravity browsing/export currently ships through the browser UI rather than a standalone CLI command.
|
|
161
199
|
- `txt` output is intentionally real plain text, not Markdown with a `.txt` extension.
|
|
162
200
|
- The published package is Bun-first. `bin` entrypoints target Bun shebang execution.
|
|
163
201
|
- The UI package runs `vite` through `bun --bun ...` because its server functions depend on Bun-only modules like `bun:sqlite`.
|
package/README.md
CHANGED
|
@@ -1,35 +1,43 @@
|
|
|
1
1
|
# spiracha
|
|
2
2
|
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="apps/ui/public/icon.svg" alt="Spiracha icon" width="96" height="100">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
3
7
|
[](https://www.npmjs.com/package/spiracha)
|
|
4
8
|
[](https://www.npmjs.com/package/spiracha)
|
|
5
9
|
[](LICENSE.md)
|
|
6
10
|
[](https://bun.sh)
|
|
7
11
|
[](https://wakatime.com/badge/user/a0b906ce-b8e7-4463-8bce-383238df6d4b/project/f035d5e2-fa44-4383-913b-53c2c326d8a7)
|
|
8
12
|
|
|
9
|
-
Export local Codex
|
|
13
|
+
Export local Codex, Claude Code, and Cursor transcripts to Markdown or plain text, and inspect Codex, Cursor, and Antigravity history through a browser UI.
|
|
10
14
|
|
|
11
15
|
## Quick Start
|
|
12
16
|
|
|
13
17
|
For repo-local development:
|
|
14
18
|
|
|
15
19
|
```bash
|
|
16
|
-
bun start
|
|
17
|
-
bun run ui:dev
|
|
20
|
+
rtk bun start
|
|
21
|
+
rtk bun run ui:dev
|
|
18
22
|
```
|
|
19
23
|
|
|
20
24
|
Published package usage, once the package is available on npm:
|
|
21
25
|
|
|
22
26
|
```bash
|
|
23
|
-
bunx spiracha
|
|
24
|
-
bunx spiracha ui
|
|
25
|
-
bunx spiracha claude /path/to/session-export.jsonl --output-format txt
|
|
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
|
|
26
31
|
```
|
|
27
32
|
|
|
28
33
|
## Features
|
|
29
34
|
|
|
30
35
|
- Export Codex session transcripts from local `.codex` history
|
|
31
|
-
-
|
|
32
|
-
-
|
|
36
|
+
- Export Cursor Agent/Composer threads from local Cursor storage
|
|
37
|
+
- Browse Codex, Cursor, and Antigravity history in a TanStack Start UI
|
|
38
|
+
- Inspect Codex thread timelines, tool calls, thread metadata, and raw event context
|
|
39
|
+
- Inspect Cursor workspace inventories, dedicated thread detail pages, recover split storage buckets, and export or delete workspace threads
|
|
40
|
+
- Inspect Antigravity workspaces, dedicated conversation detail pages, unlock transcript export through macOS Keychain, and export conversation transcripts or generated artifacts
|
|
33
41
|
- Delete threads or derived projects from the Codex SQLite database after confirmation
|
|
34
42
|
- Download thread exports directly from the UI as Markdown or plain text, with optional metadata, commentary, and tool-call inclusion
|
|
35
43
|
- View dashboard and analytics summaries, including token totals and tool-call frequency
|
|
@@ -40,19 +48,20 @@ bunx spiracha claude /path/to/session-export.jsonl --output-format txt
|
|
|
40
48
|
- Include command logs with `--tools`
|
|
41
49
|
- Write Markdown or real plain-text output with `--output-format md|txt`
|
|
42
50
|
- Export Claude Code transcript `.jsonl` files or export directories
|
|
51
|
+
- Export, recover, and prune Cursor chat history from the CLI
|
|
43
52
|
- Run the same export flows through an MCP server and a local Codex plugin
|
|
44
53
|
|
|
45
54
|
## Install
|
|
46
55
|
|
|
47
56
|
```bash
|
|
48
|
-
bun install
|
|
57
|
+
rtk bun install
|
|
49
58
|
```
|
|
50
59
|
|
|
51
60
|
For package use after publish, no local install is required:
|
|
52
61
|
|
|
53
62
|
```bash
|
|
54
|
-
bunx spiracha --help
|
|
55
|
-
bunx spiracha ui --help
|
|
63
|
+
rtk bunx spiracha --help
|
|
64
|
+
rtk bunx spiracha ui --help
|
|
56
65
|
```
|
|
57
66
|
|
|
58
67
|
## Usage
|
|
@@ -62,8 +71,8 @@ bunx spiracha ui --help
|
|
|
62
71
|
Package entrypoint:
|
|
63
72
|
|
|
64
73
|
```bash
|
|
65
|
-
bunx spiracha [options] [codex://threads/<id> ...]
|
|
66
|
-
bunx spiracha codex [options] [codex://threads/<id> ...]
|
|
74
|
+
rtk bunx spiracha [options] [codex://threads/<id> ...]
|
|
75
|
+
rtk bunx spiracha codex [options] [codex://threads/<id> ...]
|
|
67
76
|
```
|
|
68
77
|
|
|
69
78
|
With no arguments, `spiracha` starts in interactive mode and asks what you want to export.
|
|
@@ -71,14 +80,14 @@ With no arguments, `spiracha` starts in interactive mode and asks what you want
|
|
|
71
80
|
Examples:
|
|
72
81
|
|
|
73
82
|
```bash
|
|
74
|
-
bunx spiracha
|
|
75
|
-
bunx spiracha --interactive
|
|
76
|
-
bunx spiracha --project summer
|
|
77
|
-
bunx spiracha --tools --project summer
|
|
78
|
-
bunx spiracha codex://threads/019da28f-ee5b-7881-afe0-68b3d3bd2c77
|
|
79
|
-
bunx spiracha codex://threads/019da28f-ee5b-7881-afe0-68b3d3bd2c77 --output-format txt
|
|
80
|
-
bunx spiracha --cwd ~/workspace/reversed/summer --flat
|
|
81
|
-
bunx spiracha codex://threads/<thread-id> --no-metadata
|
|
83
|
+
rtk bunx spiracha
|
|
84
|
+
rtk bunx spiracha --interactive
|
|
85
|
+
rtk bunx spiracha --project summer
|
|
86
|
+
rtk bunx spiracha --tools --project summer
|
|
87
|
+
rtk bunx spiracha codex://threads/019da28f-ee5b-7881-afe0-68b3d3bd2c77
|
|
88
|
+
rtk bunx spiracha codex://threads/019da28f-ee5b-7881-afe0-68b3d3bd2c77 --output-format txt
|
|
89
|
+
rtk bunx spiracha --cwd ~/workspace/reversed/summer --flat
|
|
90
|
+
rtk bunx spiracha codex://threads/<thread-id> --no-metadata
|
|
82
91
|
```
|
|
83
92
|
|
|
84
93
|
Important flags:
|
|
@@ -94,11 +103,11 @@ Important flags:
|
|
|
94
103
|
### Browser UI
|
|
95
104
|
|
|
96
105
|
```bash
|
|
97
|
-
bunx spiracha ui
|
|
106
|
+
rtk bunx spiracha ui
|
|
98
107
|
```
|
|
99
108
|
|
|
100
109
|
This launches the packaged production UI server, opens your browser by default, and keeps running in the foreground.
|
|
101
|
-
Large download bundles are written to a Spiracha-managed directory under your OS temp folder and served directly by the UI server, so packaged `bunx spiracha ui` exports do not depend on your current working directory.
|
|
110
|
+
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.
|
|
102
111
|
|
|
103
112
|
Useful flags:
|
|
104
113
|
- `--port <port>`: bind a specific port, default `3000`
|
|
@@ -106,14 +115,28 @@ Useful flags:
|
|
|
106
115
|
- `--db <path>`: override the Codex SQLite path used by the UI
|
|
107
116
|
- `--no-open`: do not open the browser automatically
|
|
108
117
|
|
|
118
|
+
The UI currently includes:
|
|
119
|
+
- a Codex inventory and derived-project detail flow
|
|
120
|
+
- a Cursor workspace inventory, workspace-thread listing, and standalone thread detail flow
|
|
121
|
+
- an Antigravity workspace inventory, conversation listing, and standalone conversation detail flow
|
|
122
|
+
- a Codex dashboard, Codex thread detail view, and Codex analytics page
|
|
123
|
+
|
|
109
124
|
The thread detail page also supports a direct UUID shortcut route. Pasting `http://localhost:3000/<thread-id>` redirects to `/threads/<thread-id>`.
|
|
110
125
|
|
|
126
|
+
Notable UI routes:
|
|
127
|
+
- `/projects` and `/projects/$project` for Codex inventory and project threads
|
|
128
|
+
- `/threads/$threadId` for Codex thread detail
|
|
129
|
+
- `/cursor` and `/cursor/$workspaceKey` for Cursor workspace inventory and thread lists
|
|
130
|
+
- `/cursor-threads/$composerId` for Cursor thread detail
|
|
131
|
+
- `/antigravity` and `/antigravity/$workspaceKey` for Antigravity workspace inventory and conversation lists
|
|
132
|
+
- `/antigravity-conversations/$conversationId` for Antigravity conversation detail
|
|
133
|
+
|
|
111
134
|
Examples:
|
|
112
135
|
|
|
113
136
|
```bash
|
|
114
|
-
bunx spiracha ui
|
|
115
|
-
bunx spiracha ui --port 43123 --no-open
|
|
116
|
-
bunx spiracha ui --db ~/.codex/state_5.sqlite
|
|
137
|
+
rtk bunx spiracha ui
|
|
138
|
+
rtk bunx spiracha ui --port 43123 --no-open
|
|
139
|
+
rtk bunx spiracha ui --db ~/.codex/state_5.sqlite
|
|
117
140
|
```
|
|
118
141
|
|
|
119
142
|
Stop the UI with `Ctrl+C`.
|
|
@@ -121,39 +144,64 @@ Stop the UI with `Ctrl+C`.
|
|
|
121
144
|
### Claude exports
|
|
122
145
|
|
|
123
146
|
```bash
|
|
124
|
-
bunx spiracha claude <input-path> [options]
|
|
147
|
+
rtk bunx spiracha claude <input-path> [options]
|
|
125
148
|
```
|
|
126
149
|
|
|
127
150
|
Examples:
|
|
128
151
|
|
|
129
152
|
```bash
|
|
130
|
-
bunx spiracha claude /path/to/session.jsonl
|
|
131
|
-
bunx spiracha claude /path/to/export-dir --tools
|
|
132
|
-
bunx spiracha claude /path/to/export-dir --output-format txt
|
|
153
|
+
rtk bunx spiracha claude /path/to/session.jsonl
|
|
154
|
+
rtk bunx spiracha claude /path/to/export-dir --tools
|
|
155
|
+
rtk bunx spiracha claude /path/to/export-dir --output-format txt
|
|
133
156
|
```
|
|
134
157
|
|
|
135
158
|
Repo-local equivalents remain available during development:
|
|
136
159
|
|
|
137
160
|
```bash
|
|
138
|
-
bun start
|
|
139
|
-
bun start --interactive
|
|
140
|
-
bun start ...
|
|
141
|
-
bun run export:claude -- ...
|
|
161
|
+
rtk bun start
|
|
162
|
+
rtk bun start --interactive
|
|
163
|
+
rtk bun start ...
|
|
164
|
+
rtk bun run export:claude -- ...
|
|
142
165
|
```
|
|
143
166
|
|
|
144
167
|
Legacy aliases remain available for compatibility:
|
|
145
168
|
|
|
146
169
|
```bash
|
|
147
|
-
bunx codex-chats
|
|
148
|
-
bunx codex-chats-claude
|
|
170
|
+
rtk bunx codex-chats
|
|
171
|
+
rtk bunx codex-chats-claude
|
|
149
172
|
```
|
|
150
173
|
|
|
174
|
+
### Cursor exports
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
rtk bunx spiracha cursor <subcommand> [options]
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Examples:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
rtk bunx spiracha cursor list
|
|
184
|
+
rtk bunx spiracha cursor list --query summer
|
|
185
|
+
rtk bunx spiracha cursor export --workspace summer --output-dir ./cursor-exports
|
|
186
|
+
rtk bunx spiracha cursor export --thread <composer-id> --output-format txt
|
|
187
|
+
rtk bunx spiracha cursor recover --workspace summer --apply
|
|
188
|
+
rtk bunx spiracha cursor prune --workspace summer --apply
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Repo-local equivalent during development:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
rtk bun run ./src/export-cursor.ts --help
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Antigravity conversation browsing and export currently live in the browser UI rather than a standalone CLI subcommand.
|
|
198
|
+
|
|
151
199
|
## MCP server
|
|
152
200
|
|
|
153
201
|
Run the MCP server with:
|
|
154
202
|
|
|
155
203
|
```bash
|
|
156
|
-
bun run mcp
|
|
204
|
+
rtk bun run mcp
|
|
157
205
|
```
|
|
158
206
|
|
|
159
207
|
Exposed tools:
|
|
@@ -167,55 +215,58 @@ The local plugin lives in [plugins/codex-chats-export](plugins/codex-chats-expor
|
|
|
167
215
|
Useful commands:
|
|
168
216
|
|
|
169
217
|
```bash
|
|
170
|
-
bun test
|
|
171
|
-
bun run lint
|
|
172
|
-
bun run typecheck
|
|
173
|
-
bun run build
|
|
174
|
-
bun run coverage
|
|
175
|
-
bun run ui:dev
|
|
176
|
-
|
|
177
|
-
bun run test:perf
|
|
178
|
-
bun start
|
|
179
|
-
bun start --interactive
|
|
180
|
-
bun start -- --help
|
|
181
|
-
bun run export:claude -- --help
|
|
182
|
-
bun run mcp
|
|
218
|
+
rtk bun test
|
|
219
|
+
rtk bun run lint
|
|
220
|
+
rtk bun run typecheck
|
|
221
|
+
rtk bun run build
|
|
222
|
+
rtk bun run coverage
|
|
223
|
+
rtk bun run ui:dev
|
|
224
|
+
rtk bun run --cwd apps/ui test
|
|
225
|
+
rtk bun run test:perf
|
|
226
|
+
rtk bun start
|
|
227
|
+
rtk bun start --interactive
|
|
228
|
+
rtk bun start -- --help
|
|
229
|
+
rtk bun run export:claude -- --help
|
|
230
|
+
rtk bun run mcp
|
|
183
231
|
```
|
|
184
232
|
|
|
185
233
|
Packed-tarball smoke test before publishing:
|
|
186
234
|
|
|
187
235
|
```bash
|
|
188
|
-
bun pm pack
|
|
236
|
+
rtk bun pm pack
|
|
189
237
|
package_tgz="$PWD/spiracha-<version>.tgz"
|
|
190
238
|
tmp_dir=$(mktemp -d)
|
|
191
239
|
cd "$tmp_dir"
|
|
192
240
|
printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
|
|
193
|
-
bun add "$package_tgz"
|
|
194
|
-
bunx --package "$package_tgz" spiracha --help
|
|
195
|
-
bunx --package "$package_tgz" spiracha ui --help
|
|
196
|
-
bunx --package "$package_tgz" spiracha claude --help
|
|
197
|
-
bunx --package "$package_tgz" codex-chats --help
|
|
198
|
-
bunx --package "$package_tgz" codex-chats-claude --help
|
|
241
|
+
rtk bun add "$package_tgz"
|
|
242
|
+
rtk bunx --package "$package_tgz" spiracha --help
|
|
243
|
+
rtk bunx --package "$package_tgz" spiracha ui --help
|
|
244
|
+
rtk bunx --package "$package_tgz" spiracha claude --help
|
|
245
|
+
rtk bunx --package "$package_tgz" codex-chats --help
|
|
246
|
+
rtk bunx --package "$package_tgz" codex-chats-claude --help
|
|
199
247
|
```
|
|
200
248
|
|
|
201
249
|
For the exact packaged UI launch path, run:
|
|
202
250
|
|
|
203
251
|
```bash
|
|
204
|
-
bun run smoke:package-ui
|
|
252
|
+
rtk bun run smoke:package-ui
|
|
205
253
|
```
|
|
206
254
|
|
|
207
|
-
This builds the app, packs
|
|
255
|
+
This builds the app, packs a fresh tarball in a clean temp directory, launches `rtk bunx --package <tgz> spiracha ui --no-open`, probes the running UI for real SSR HTML, rejects Bun fallback responses, and shuts it down. The same packaged-path smoke is also covered by `src/package-ui-smoke.test.ts`.
|
|
208
256
|
|
|
209
257
|
## Project Layout
|
|
210
258
|
|
|
211
|
-
- `apps/ui/`: TanStack Start browser app for
|
|
259
|
+
- `apps/ui/`: TanStack Start browser app for Codex, Cursor, and Antigravity browsing plus export and delete flows
|
|
212
260
|
- `src/export-chats.ts`: Codex CLI wrapper
|
|
213
261
|
- `src/export-claude.ts`: Claude CLI wrapper
|
|
262
|
+
- `src/export-cursor.ts`: Cursor CLI wrapper
|
|
214
263
|
- `src/mcp-server.ts`: MCP server entrypoint
|
|
264
|
+
- `src/lib/antigravity-*.ts`: Antigravity workspace discovery, transcript rendering, and Keychain helpers
|
|
215
265
|
- `src/lib/codex-exporter-*.ts`: Codex exporter modules
|
|
216
266
|
- `src/lib/codex-browser-*.ts`: shared browser/UI data, analytics, and export helpers
|
|
217
267
|
- `src/lib/codex-thread-*.ts`: structured transcript parsing and caching helpers
|
|
218
268
|
- `src/lib/claude-exporter.ts`: Claude exporter implementation
|
|
269
|
+
- `src/lib/cursor-*.ts`: Cursor discovery, transcript rendering, recovery, and CLI helpers
|
|
219
270
|
- `plugins/codex-chats-export/`: local Codex plugin bundle
|
|
220
271
|
|
|
221
272
|
## Testing
|
|
@@ -223,18 +274,20 @@ This builds the app, packs the tarball, launches `bunx --package <tgz> spiracha
|
|
|
223
274
|
The test suite includes:
|
|
224
275
|
- Codex exporter end-to-end coverage
|
|
225
276
|
- Claude exporter end-to-end coverage
|
|
277
|
+
- Cursor exporter and recovery coverage
|
|
278
|
+
- Antigravity discovery and export coverage
|
|
226
279
|
- Codex CLI helper tests
|
|
227
280
|
- transcript rendering helper tests
|
|
228
281
|
- MCP stdio protocol round-trip tests
|
|
229
282
|
- local packaging should be smoke-tested with a packed tarball before publishing
|
|
230
283
|
|
|
231
284
|
Coverage enforcement:
|
|
232
|
-
- `bun run coverage:root` checks the root Bun unit-test surface at a minimum of 90% line coverage.
|
|
233
|
-
- `bun run coverage:ui` checks the UI unit-test surface at a minimum of 90% line coverage.
|
|
234
|
-
- `bun run coverage` runs both checks.
|
|
285
|
+
- `rtk bun run coverage:root` checks the root Bun unit-test surface at a minimum of 90% line coverage.
|
|
286
|
+
- `rtk bun run coverage:ui` checks the UI unit-test surface at a minimum of 90% line coverage.
|
|
287
|
+
- `rtk bun run coverage` runs both checks.
|
|
235
288
|
|
|
236
289
|
Run:
|
|
237
290
|
|
|
238
291
|
```bash
|
|
239
|
-
bun test
|
|
292
|
+
rtk bun test
|
|
240
293
|
```
|
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
|
|
5
|
+
This package is the local browser UI for Spiracha. It reads Codex, Cursor, and Antigravity local data through TanStack Start server functions and shared root-package helpers.
|
|
6
6
|
|
|
7
7
|
## Commands
|
|
8
8
|
|
|
@@ -24,6 +24,9 @@ Important:
|
|
|
24
24
|
- `src/routeTree.gen.ts` is generated. Do not edit it manually.
|
|
25
25
|
- If route typing behaves strangely, delete `src/routeTree.gen.ts` and rebuild with `rtk bun run build` to regenerate it cleanly.
|
|
26
26
|
- The UI supports both `/threads/$threadId` and a root shortcut route `/$threadId` that redirects straight to the thread detail page.
|
|
27
|
+
- Cursor thread detail lives at `/cursor-threads/$composerId`.
|
|
28
|
+
- Antigravity conversation detail lives at `/antigravity-conversations/$conversationId`.
|
|
29
|
+
- Keep the Codex, Cursor, and Antigravity list/detail pages aligned around the same table-driven index/detail pattern when adding new source integrations.
|
|
27
30
|
|
|
28
31
|
## Shared Data Layer
|
|
29
32
|
|
|
@@ -33,6 +36,11 @@ The UI depends on root-package helpers via `@spiracha/*` path aliases:
|
|
|
33
36
|
- `@spiracha/lib/codex-browser-export`
|
|
34
37
|
- `@spiracha/lib/codex-thread-cache`
|
|
35
38
|
- `@spiracha/lib/codex-analytics`
|
|
39
|
+
- `@spiracha/lib/cursor-db`
|
|
40
|
+
- `@spiracha/lib/cursor-recovery`
|
|
41
|
+
- `@spiracha/lib/cursor-transcript`
|
|
42
|
+
- `@spiracha/lib/antigravity-db`
|
|
43
|
+
- `@spiracha/lib/antigravity-keychain`
|
|
36
44
|
|
|
37
45
|
Keep server-only imports inside server functions or route loaders. Do not import Bun-only modules into purely client-side components.
|
|
38
46
|
|
|
@@ -40,19 +48,19 @@ Keep server-only imports inside server functions or route loaders. Do not import
|
|
|
40
48
|
|
|
41
49
|
Use the existing layers consistently:
|
|
42
50
|
|
|
43
|
-
- TanStack Start server functions in `src/lib/codex-server.ts`
|
|
44
|
-
- Use for any browser-triggered read/write that needs Bun-only modules, DB access, filesystem access, or shared root-package helpers.
|
|
45
|
-
- TanStack Query query options in `src/lib/codex-queries.ts`
|
|
51
|
+
- TanStack Start server functions in `src/lib/codex-server.ts`, `src/lib/cursor-server.ts`, and `src/lib/antigravity-server.ts`
|
|
52
|
+
- Use for any browser-triggered read/write that needs Bun-only modules, DB access, filesystem access, Keychain access, or shared root-package helpers.
|
|
53
|
+
- TanStack Query query options in `src/lib/codex-queries.ts`, `src/lib/cursor-queries.ts`, and `src/lib/antigravity-queries.ts`
|
|
46
54
|
- Use for client-side fetching, caching, retries, and invalidation of server-function results.
|
|
47
55
|
- Shared root-package helpers under `@spiracha/lib/*`
|
|
48
56
|
- Extend these when the behavior should stay shared between the UI, CLI, and packaged launcher.
|
|
49
57
|
- `settings-store.tsx`
|
|
50
|
-
- Use only for browser-local UI preferences. Do not put server-derived
|
|
58
|
+
- Use only for browser-local UI preferences. Do not put server-derived source data here.
|
|
51
59
|
|
|
52
|
-
If a feature needs new
|
|
60
|
+
If a feature needs new source data, prefer:
|
|
53
61
|
1. shared root-package helper changes
|
|
54
|
-
2. server-function exposure in
|
|
55
|
-
3. TanStack Query wiring in
|
|
62
|
+
2. server-function exposure in the matching `*-server.ts`
|
|
63
|
+
3. TanStack Query wiring in the matching `*-queries.ts`
|
|
56
64
|
4. client component consumption
|
|
57
65
|
|
|
58
66
|
## Testing
|
package/apps/ui/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Spiracha UI
|
|
2
2
|
|
|
3
|
-
The browser UI for browsing local Codex history, inspecting
|
|
3
|
+
The browser UI for browsing local Codex, Cursor, and Antigravity history, inspecting transcript details, exporting chats, and analyzing Codex usage patterns.
|
|
4
4
|
|
|
5
5
|
## Stack
|
|
6
6
|
|
|
@@ -15,13 +15,17 @@ The browser UI for browsing local Codex history, inspecting thread details, expo
|
|
|
15
15
|
|
|
16
16
|
## What It Does
|
|
17
17
|
|
|
18
|
-
- lists derived projects from the Codex SQLite database
|
|
19
|
-
- lists threads within a project in chronological order
|
|
20
|
-
- shows thread timelines, tool calls, metadata, and raw event context
|
|
21
|
-
- exports
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
18
|
+
- lists derived Codex projects from the Codex SQLite database
|
|
19
|
+
- lists Codex threads within a project in chronological order
|
|
20
|
+
- shows Codex thread timelines, tool calls, metadata, and raw event context
|
|
21
|
+
- exports Codex threads as Markdown or plain text with optional metadata, commentary, and tool-call inclusion
|
|
22
|
+
- lists Cursor workspaces and workspace threads with the same table-based index/detail flow as Codex
|
|
23
|
+
- shows dedicated Cursor thread detail pages with breadcrumbs back to the workspace and source
|
|
24
|
+
- recovers split Cursor storage buckets, exports Cursor threads, and deletes Cursor workspaces or threads
|
|
25
|
+
- lists Antigravity workspaces and conversations, including transcript/artifact availability
|
|
26
|
+
- shows dedicated Antigravity conversation detail pages with shared metadata and export actions
|
|
27
|
+
- unlocks Antigravity transcript export through macOS Keychain and exports conversations or artifacts as Markdown
|
|
28
|
+
- shows dashboard and analytics summaries, including Codex token totals and tool-call frequency
|
|
25
29
|
|
|
26
30
|
## Commands
|
|
27
31
|
|
|
@@ -58,15 +62,27 @@ Export artifacts are served through the UI as attachment downloads from `/__expo
|
|
|
58
62
|
- `/`
|
|
59
63
|
- dashboard
|
|
60
64
|
- `/projects`
|
|
61
|
-
-
|
|
65
|
+
- Codex inventory and search
|
|
62
66
|
- `/projects/$project`
|
|
63
|
-
- project thread listing
|
|
67
|
+
- Codex project thread listing
|
|
68
|
+
- `/cursor`
|
|
69
|
+
- Cursor workspace inventory and search
|
|
70
|
+
- `/cursor/$workspaceKey`
|
|
71
|
+
- Cursor workspace thread listing
|
|
72
|
+
- `/cursor-threads/$composerId`
|
|
73
|
+
- Cursor thread detail, export, and delete
|
|
74
|
+
- `/antigravity`
|
|
75
|
+
- Antigravity workspace inventory and search
|
|
76
|
+
- `/antigravity/$workspaceKey`
|
|
77
|
+
- Antigravity workspace conversation listing
|
|
78
|
+
- `/antigravity-conversations/$conversationId`
|
|
79
|
+
- Antigravity conversation detail, export, and artifact inspection
|
|
64
80
|
- `/threads/$threadId`
|
|
65
|
-
- thread detail, transcript, export, and delete
|
|
81
|
+
- Codex thread detail, transcript, export, and delete
|
|
66
82
|
- `/$threadId`
|
|
67
83
|
- shortcut redirect to the thread detail page for pasted Codex thread UUIDs
|
|
68
84
|
- `/analytics`
|
|
69
|
-
- token and tool-call analytics with project filter
|
|
85
|
+
- Codex token and tool-call analytics with project filter
|
|
70
86
|
|
|
71
87
|
## Testing
|
|
72
88
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,o as t,s as n}from"./formatters-
|
|
1
|
+
import{c as e,o as t,s as n}from"./formatters-BdnWuM1z.js";import{n as r,t as i}from"./data-table-Cj-v-uyB.js";import{a,i as o,n as s,r as c,t as l}from"./select-DbnpwqL6.js";import{Bt as u,Lt as d,M as f,k as p,zt as m}from"./index-BVFnfS78.js";import{t as h}from"./metric-card-CBZuWLzQ.js";import{t as g}from"./page-header-CnD21cPn.js";var _=u(m()),v=d(),y=r(),b=[y.accessor(`name`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:e.getValue()}),header:`Tool`}),y.accessor(`count`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:t(e.getValue())}),header:`Calls`})],x=r(),S=[x.accessor(`model`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:e.getValue()}),header:`Model`}),x.accessor(`threadCount`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:t(e.getValue())}),header:`Threads`}),x.accessor(`totalTokens`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:n(e.getValue())}),header:`Tokens`})];function C(){let r=e(f()).data,[u,d]=(0,_.useState)(null),m=e(p(u)).data;return(0,v.jsxs)(`div`,{className:`space-y-6`,children:[(0,v.jsx)(g,{actions:(0,v.jsxs)(l,{value:u??`__all__`,onValueChange:e=>{(0,_.startTransition)(()=>{d(e===`__all__`?null:e)})},children:[(0,v.jsx)(o,{className:`h-10 w-full rounded-full border-[var(--border)] bg-[var(--panel)] sm:w-[15rem]`,children:(0,v.jsx)(a,{placeholder:`Filter by project`})}),(0,v.jsxs)(s,{children:[(0,v.jsx)(c,{value:`__all__`,children:`All projects`}),r.map(e=>(0,v.jsx)(c,{value:e.name,children:e.name},e.name))]})]}),eyebrow:`Analytics`,subtitle:`Inspect token load, tool-call distribution, and project-scoped usage patterns to understand where Codex is spending effort.`,title:`Analytics`}),(0,v.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2 xl:grid-cols-5`,children:[(0,v.jsx)(h,{label:`Threads`,value:t(m.summary.totalThreads)}),(0,v.jsx)(h,{label:`Projects`,value:t(m.summary.totalProjects)}),(0,v.jsx)(h,{label:`Tokens`,value:n(m.summary.totalTokens)}),(0,v.jsx)(h,{label:`Average per thread`,value:n(Math.round(m.summary.averageTokensPerThread))}),(0,v.jsx)(h,{label:`Web search threads`,value:t(m.summary.threadsWithWebSearch)})]}),(0,v.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,v.jsxs)(`section`,{className:`space-y-4`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsx)(`h3`,{className:`font-semibold text-sm`,children:`Most frequent tool calls`}),(0,v.jsx)(`p`,{className:`mt-1 text-[var(--muted-foreground)] text-sm`,children:`Useful for future prompt and tool optimization work.`})]}),(0,v.jsx)(i,{columns:b,data:m.toolUsage,emptyMessage:`No tool calls recorded.`})]}),(0,v.jsxs)(`section`,{className:`space-y-4`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsx)(`h3`,{className:`font-semibold text-sm`,children:`Model token breakdown`}),(0,v.jsx)(`p`,{className:`mt-1 text-[var(--muted-foreground)] text-sm`,children:`Compare model usage and token concentration within the current project scope.`})]}),(0,v.jsx)(i,{columns:S,data:m.modelsByTokens,emptyMessage:`No model usage recorded.`})]})]})]})}export{C as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Lt as e}from"./index-BVFnfS78.js";import{t}from"./reload-error-panel-DLAg0AW2.js";var n=e();function r({error:e}){return(0,n.jsx)(t,{description:e.message,title:`Failed to load Antigravity conversation`})}export{r as errorComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,n as t,o as n,r}from"./formatters-BdnWuM1z.js";import{t as i}from"./useMutation-MZ3Hr9h9.js";import{n as a,t as o}from"./metadata-section-jnIkB7dB.js";import{r as s,t as c}from"./download-P3Rp23Ad.js";import{t as l}from"./antigravity-keychain-panel-dYuRWtCf.js";import{t as u}from"./scroll-text-CqaFm9by.js";import{Ft as d,H as f,Lt as p,d as m,g as h,l as g,m as _,p as v,t as y}from"./index-BVFnfS78.js";import{t as b}from"./metric-card-CBZuWLzQ.js";import{t as x}from"./page-header-CnD21cPn.js";import{t as S}from"./text-document-panel-DPleOmmq.js";var C=p(),w=e=>[{label:`Conversation ID`,value:(0,C.jsx)(`span`,{"data-mono":`true`,children:e.conversation.conversationId})},{label:`Workspace`,value:(0,C.jsx)(d,{className:`text-[var(--accent)]`,params:{workspaceKey:e.conversation.workspaceKey},to:`/antigravity/$workspaceKey`,children:e.conversation.workspaceLabel})},{label:`Created`,value:(0,C.jsx)(`span`,{suppressHydrationWarning:!0,children:r(e.conversation.createdAtMs)})},{label:`Updated`,value:(0,C.jsx)(`span`,{suppressHydrationWarning:!0,children:r(e.conversation.lastUpdatedAtMs)})},{label:`Transcript source`,value:e.conversation.transcriptSource??`n/a`},{label:`Conversation path`,value:e.conversation.conversationPath??`n/a`},{label:`Transcript path`,value:e.conversation.transcriptPath??`n/a`},{label:`Summary path`,value:e.conversation.summaryPath??`n/a`},{label:`Source root`,value:e.conversation.sourceRoot??`n/a`}];function T({canExportArtifacts:e,canExportConversation:t,exportArtifactsPending:n,exportConversationPending:r,showConversationExport:i,onExportArtifacts:a,onExportConversation:o}){return(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[i?(0,C.jsxs)(f,{className:`rounded-full`,disabled:!t||r,type:`button`,variant:`outline`,onClick:o,children:[(0,C.jsx)(s,{className:`mr-2 size-4`}),`Export conversation`]}):null,e?(0,C.jsxs)(f,{className:`rounded-full`,disabled:n,type:`button`,variant:`outline`,onClick:a,children:[(0,C.jsx)(u,{className:`mr-2 size-4`}),`Export artifacts`]}):null]})}function E({detail:e}){return(0,C.jsxs)(`div`,{className:`space-y-4`,children:[e.transcriptLocked?(0,C.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,C.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:`Transcript`}),(0,C.jsx)(`p`,{className:`mt-4 text-[var(--muted-foreground)] text-sm`,children:`Unlock Antigravity transcript export to inspect the rendered conversation content here.`})]}):e.conversationMarkdown?(0,C.jsx)(S,{content:e.conversationMarkdown,description:`Rendered from the available Antigravity transcript or decrypted safe-storage payload.`,title:`Conversation transcript`}):(0,C.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,C.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:`Transcript`}),(0,C.jsx)(`p`,{className:`mt-4 text-[var(--muted-foreground)] text-sm`,children:e.artifactsMarkdown?`No transcript preview is available for this conversation. Generated artifacts are available below.`:`No transcript preview is available for this conversation.`})]}),e.artifactsMarkdown?(0,C.jsx)(S,{content:e.artifactsMarkdown,description:`Markdown artifacts generated for this conversation.`,title:`Artifacts`}):null]})}function D(){let r=e(m()).data,s=e(g(y.useParams().conversationId)).data,u=h(s.conversation,!!r?.isUnlocked),d=s.artifactsMarkdown!==null,f=u||s.transcriptLocked,p=i({mutationFn:()=>_({data:{conversationId:s.conversation.conversationId}}),onSuccess:e=>{c(e.filename,e.content,`text/markdown; charset=utf-8`)}}),S=i({mutationFn:()=>v({data:{conversationId:s.conversation.conversationId}}),onSuccess:e=>{c(e.filename,e.content,`text/markdown; charset=utf-8`)}});return(0,C.jsxs)(`div`,{className:`space-y-6`,children:[(0,C.jsx)(x,{actions:(0,C.jsx)(T,{canExportArtifacts:d,canExportConversation:u,exportArtifactsPending:S.isPending,exportConversationPending:p.isPending,showConversationExport:f,onExportArtifacts:()=>S.mutate(),onExportConversation:()=>p.mutate()}),breadcrumb:(0,C.jsx)(a,{items:[{label:`Antigravity`,to:`/antigravity`},{label:s.conversation.workspaceLabel,params:{workspaceKey:s.conversation.workspaceKey},to:`/antigravity/$workspaceKey`},{label:s.conversation.title}]}),eyebrow:`Antigravity conversation`,subtitle:`Conversation detail for the selected Antigravity workspace session.`,title:s.conversation.title}),(0,C.jsx)(l,{}),(0,C.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,C.jsx)(b,{label:`Transcript entries`,value:n(s.conversation.transcriptEntryCount)}),(0,C.jsx)(b,{label:`Artifacts`,value:n(s.conversation.artifactCount)}),(0,C.jsx)(b,{label:`Size`,value:t(s.conversation.conversationBytes)}),(0,C.jsx)(b,{helper:s.conversation.transcriptSource??`summary`,label:`Indexed items`,value:n(s.conversation.indexedItemCount??0)})]}),(0,C.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[0.95fr_1.05fr]`,children:[(0,C.jsx)(o,{items:w(s),title:`Conversation metadata`}),(0,C.jsx)(E,{detail:s})]}),p.isError?(0,C.jsx)(`p`,{className:`text-[var(--destructive)] text-sm`,children:p.error instanceof Error?p.error.message:`Conversation export failed`}):null,S.isError?(0,C.jsx)(`p`,{className:`text-[var(--destructive)] text-sm`,children:S.error instanceof Error?S.error.message:`Artifact export failed`}):null]})}export{D as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./useMutation-MZ3Hr9h9.js";import{t}from"./useQuery-Cb4V0AT0.js";import{H as n,Lt as r,_t as i,d as a,gt as o,h as s,mt as c}from"./index-BVFnfS78.js";var l=o(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),u=o(`lock-keyhole`,[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]),d=o(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),f=o(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),p=r();function m(){let r=i(),o=t(a()).data??null,m=e({mutationFn:()=>s(),onSuccess:e=>{r.setQueryData(a().queryKey,e),Promise.all([r.invalidateQueries({queryKey:a().queryKey}),r.invalidateQueries({queryKey:[`antigravity-conversation`]})])}});if(!o||o.status===`unsupported`)return null;let h=o.isUnlocked,g=m.error?.message??o.error;return(0,p.jsxs)(`div`,{className:c(`flex flex-col gap-3 rounded-xl border px-4 py-3 sm:flex-row sm:items-center sm:justify-between`,h?`border-emerald-500/30 bg-emerald-500/10`:`border-[var(--border)] bg-[var(--panel)]`),children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,p.jsx)(`div`,{className:c(`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-md`,h?`bg-emerald-500/15 text-emerald-600`:`bg-[var(--panel-secondary)]`),children:h?(0,p.jsx)(d,{className:`size-4`}):(0,p.jsx)(u,{className:`size-4`})}),(0,p.jsxs)(`div`,{className:`min-w-0`,children:[(0,p.jsx)(`p`,{className:`font-medium text-sm`,children:h?`Keychain access enabled`:`Unlock Antigravity transcript export`}),(0,p.jsx)(`p`,{className:`mt-1 text-[var(--muted-foreground)] text-xs`,children:h?`The Antigravity key is cached in this server process only. Transcript exports are available for local logs and safe-storage payloads.`:`Spiracha needs one-time access to ${o.keychainService} to decrypt Antigravity transcript data. macOS will ask for approval after you click unlock.`}),g?(0,p.jsxs)(`p`,{className:`mt-2 flex items-center gap-1 text-[var(--destructive)] text-xs`,children:[(0,p.jsx)(f,{className:`size-3`}),g]}):null]})]}),h?null:(0,p.jsxs)(n,{className:`shrink-0`,disabled:!o.canRequestAccess||m.isPending,type:`button`,onClick:()=>m.mutate(),children:[(0,p.jsx)(l,{className:`size-4`}),m.isPending?`Waiting...`:`Unlock`]})]})}export{u as n,m as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,n as t,o as n,r}from"./formatters-BdnWuM1z.js";import{t as i}from"./useMutation-MZ3Hr9h9.js";import{n as a,t as o}from"./data-table-Cj-v-uyB.js";import{r as s,t as c}from"./download-P3Rp23Ad.js";import{a as l,i as u,n as d,r as f,t as p}from"./dropdown-menu-3qB5j9nt.js";import{n as m,t as h}from"./antigravity-keychain-panel-dYuRWtCf.js";import{t as g}from"./scroll-text-CqaFm9by.js";import{Bt as _,Ft as v,H as y,Lt as b,_ as x,d as S,f as C,g as w,m as T,n as E,p as D,r as O,u as k,v as A,y as j,zt as M}from"./index-BVFnfS78.js";import{t as N}from"./page-header-CnD21cPn.js";import{t as P}from"./badge-aHE9ETVe.js";import{n as F,t as I}from"./text-filter-7M6wRo-t.js";var L=_(M(),1),R=b(),z=a(),B=(e,t)=>{let n=e.artifactCount>0,r=!!t?.isUnlocked,i=A(e)||x(e),a=w(e,r),o=j(e,r),s=a||o;return{canExportConversation:a,hasArtifacts:n,hasTranscript:i,lockedTranscript:o,showActions:s||n,showConversationAction:s}},V=(e,t)=>t.hasTranscript?`${e.transcriptSource?e.transcriptSource.replace(/-/gu,` `):`transcript`} · ${t.lockedTranscript?`locked`:`available`}`:`Summary only`,H=(e,i,a)=>[z.accessor(`title`,{cell:t=>{let n=B(t.row.original,e);return(0,R.jsxs)(v,{className:`block w-[16rem] max-w-[22rem] space-y-1 rounded-md outline-none transition hover:opacity-80 focus-visible:ring-2 focus-visible:ring-[var(--accent)] lg:w-auto`,params:{conversationId:t.row.original.conversationId},to:`/antigravity-conversations/$conversationId`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,R.jsx)(`p`,{className:`truncate font-medium underline-offset-2 hover:underline`,children:t.getValue()}),n.hasTranscript?(0,R.jsx)(P,{variant:`secondary`,children:`transcript`}):null,n.hasArtifacts?(0,R.jsx)(P,{variant:`outline`,children:`artifact`}):null]}),(0,R.jsx)(`p`,{className:`truncate text-[var(--muted-foreground)] text-xs`,children:t.row.original.conversationId})]})},header:`Conversation`}),z.accessor(`lastUpdatedAtMs`,{cell:e=>(0,R.jsx)(`span`,{className:`whitespace-nowrap text-sm`,suppressHydrationWarning:!0,children:r(e.getValue())}),header:`Updated`}),z.display({cell:t=>{let r=B(t.row.original,e);return(0,R.jsxs)(`span`,{className:`text-sm`,children:[V(t.row.original,r),t.row.original.transcriptEntryCount>0?` · ${n(t.row.original.transcriptEntryCount)} entries`:``]})},header:`Transcript`,id:`transcript`}),z.accessor(`artifactCount`,{cell:e=>(0,R.jsx)(`span`,{className:`font-mono text-sm`,children:n(e.getValue())}),header:`Artifacts`}),z.accessor(`conversationBytes`,{cell:e=>(0,R.jsx)(`span`,{className:`font-mono text-sm`,children:t(e.getValue())}),header:`Size`}),z.display({cell:t=>{let n=B(t.row.original,e);return n.showActions?(0,R.jsxs)(p,{children:[(0,R.jsx)(u,{asChild:!0,children:(0,R.jsx)(y,{className:`rounded-full`,size:`icon`,type:`button`,variant:`ghost`,onClick:e=>e.stopPropagation(),children:(0,R.jsx)(l,{className:`size-4`})})}),(0,R.jsxs)(d,{align:`end`,children:[n.showConversationAction?(0,R.jsxs)(f,{disabled:!n.canExportConversation,onClick:()=>i(t.row.original),children:[n.lockedTranscript?(0,R.jsx)(m,{className:`mr-2 size-4`}):(0,R.jsx)(s,{className:`mr-2 size-4`}),n.lockedTranscript?`Unlock conversation export first`:`Export conversation`]}):null,n.hasArtifacts?(0,R.jsxs)(f,{onClick:()=>a(t.row.original),children:[(0,R.jsx)(g,{className:`mr-2 size-4`}),`Export artifacts`]}):null]})]}):(0,R.jsx)(`span`,{className:`text-[var(--muted-foreground)] text-sm`,children:`No export`})},header:``,id:`actions`})];function U({conversations:e,decryptionState:t,onExportArtifacts:n,onExportConversation:r}){return(0,R.jsx)(o,{columns:(0,L.useMemo)(()=>H(t,r,n),[t,n,r]),data:e,emptyMessage:`No Antigravity conversations match the current workspace filter.`})}function W(){let t=E.useParams(),n=e(C()).data,r=O(n,t.workspaceKey),a=e(k(r.key)).data,o=e(S()).data??null,[s,l]=(0,L.useState)(``),u=(0,L.useDeferredValue)(s),d=i({mutationFn:e=>T({data:{conversationId:e.conversationId}}),onSuccess:e=>{c(e.filename,e.content,`text/markdown; charset=utf-8`)}}),f=i({mutationFn:e=>D({data:{conversationId:e.conversationId}}),onSuccess:e=>{c(e.filename,e.content,`text/markdown; charset=utf-8`)}}),p=a.filter(e=>I(u,[e.title,e.conversationId,e.transcriptSource,e.workspaceLabel]));return(0,R.jsxs)(`div`,{className:`space-y-6`,children:[(0,R.jsx)(N,{actions:(0,R.jsx)(F,{placeholder:`Search title, id, or transcript source`,value:s,onValueChange:l}),eyebrow:`Antigravity workspace`,subtitle:`Inspect conversation coverage across Antigravity transcripts, raw payloads, and generated artifacts.`,title:r.label}),(0,R.jsx)(h,{}),(0,R.jsx)(U,{conversations:p,decryptionState:o,onExportArtifacts:e=>f.mutate(e),onExportConversation:e=>d.mutate(e)}),d.isError?(0,R.jsx)(`p`,{className:`text-[var(--destructive)] text-sm`,children:d.error instanceof Error?d.error.message:`Conversation export failed`}):null,f.isError?(0,R.jsx)(`p`,{className:`text-[var(--destructive)] text-sm`,children:f.error instanceof Error?f.error.message:`Artifact export failed`}):null]})}export{W as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Lt as e}from"./index-BVFnfS78.js";import{t}from"./reload-error-panel-DLAg0AW2.js";var n=e();function r({error:e}){return(0,n.jsx)(t,{description:e.message,title:`Failed to load Antigravity workspace`})}export{r as errorComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,n as t,o as n,r}from"./formatters-BdnWuM1z.js";import{n as i,t as a}from"./data-table-Cj-v-uyB.js";import{t as o}from"./antigravity-keychain-panel-dYuRWtCf.js";import{Bt as s,Ft as c,Lt as l,f as u,zt as d}from"./index-BVFnfS78.js";import{t as f}from"./page-header-CnD21cPn.js";import{n as p,t as m}from"./text-filter-7M6wRo-t.js";var h=s(d()),g=l(),_=i(),v=[_.accessor(`label`,{cell:e=>(0,g.jsxs)(c,{className:`block w-[16rem] max-w-[22rem] space-y-1 rounded-md outline-none transition hover:opacity-80 focus-visible:ring-2 focus-visible:ring-[var(--accent)] lg:w-auto`,params:{workspaceKey:e.row.original.key},to:`/antigravity/$workspaceKey`,children:[(0,g.jsx)(`p`,{className:`font-medium underline-offset-2 hover:underline`,children:e.getValue()}),(0,g.jsx)(`p`,{className:`truncate text-[var(--muted-foreground)] text-xs`,children:e.row.original.uri??`Unknown root`})]}),header:`Workspace`}),_.accessor(`conversationCount`,{cell:e=>(0,g.jsx)(`span`,{className:`font-mono text-sm`,children:n(e.getValue())}),header:`Conversations`}),_.accessor(`transcriptCount`,{cell:e=>(0,g.jsx)(`span`,{className:`font-mono text-sm`,children:n(e.getValue())}),header:`Transcripts`}),_.accessor(`artifactCount`,{cell:e=>(0,g.jsx)(`span`,{className:`font-mono text-sm`,children:n(e.getValue())}),header:`Artifacts`}),_.accessor(`conversationBytes`,{cell:e=>(0,g.jsx)(`span`,{className:`font-mono text-sm`,children:t(e.getValue())}),header:`Size`}),_.accessor(`lastActiveMs`,{cell:e=>(0,g.jsx)(`span`,{className:`whitespace-nowrap text-sm`,suppressHydrationWarning:!0,children:r(e.getValue())}),header:`Last updated`})];function y({workspaces:e}){return(0,g.jsx)(a,{columns:v,data:e,emptyMessage:`No Antigravity workspaces match the current search.`})}function b(){let t=e(u()).data,[n,r]=(0,h.useState)(``),i=(0,h.useDeferredValue)(n),a=t.filter(e=>m(i,[e.label,e.uri,e.key]));return(0,g.jsxs)(`div`,{className:`space-y-6`,children:[(0,g.jsx)(f,{actions:(0,g.jsx)(p,{placeholder:`Search workspace name or path`,value:n,onValueChange:r}),eyebrow:`Inventory`,subtitle:`Workspace groups are derived from Antigravity summary indexes, raw conversation files, local logs, and brain artifacts.`,title:`Antigravity`}),(0,g.jsx)(o,{}),(0,g.jsx)(y,{workspaces:a})]})}export{b as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Lt as e}from"./index-BVFnfS78.js";import{t}from"./reload-error-panel-DLAg0AW2.js";var n=e();function r({error:e}){return(0,n.jsx)(t,{description:e.message,title:`Failed to load Antigravity workspaces`})}export{r as errorComponent};
|