spiracha 1.4.0 → 1.5.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 +48 -5
- package/README.md +40 -5
- package/apps/ui/AGENTS.md +23 -4
- package/apps/ui/README.md +49 -2
- package/apps/ui/dist/client/assets/analytics-DOy1b6Sh.js +1 -0
- package/apps/ui/dist/client/assets/{antigravity-conversations._conversationId-DmD0sN8X.js → antigravity-conversations._conversationId-DqySVO2K.js} +2 -2
- package/apps/ui/dist/client/assets/antigravity-keychain-panel-B77qJz6f.js +1 -0
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-B3NM6gRH.js +1 -0
- package/apps/ui/dist/client/assets/{antigravity.index-DEEkjlZa.js → antigravity.index-DP9JC2P9.js} +1 -1
- package/apps/ui/dist/client/assets/{badge-DfWvPfKF.js → badge-C3i4OKs8.js} +1 -1
- package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-8pQ55ci2.js +1 -0
- package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-DVz5UmtU.js +1 -0
- package/apps/ui/dist/client/assets/claude-code._workspaceKey-BBKskSum.js +1 -0
- package/apps/ui/dist/client/assets/claude-code._workspaceKey-OkikMUFs.js +1 -0
- package/apps/ui/dist/client/assets/claude-code.index-Cwu76dbb.js +1 -0
- package/apps/ui/dist/client/assets/claude-code.index-D6eMd08t.js +1 -0
- package/apps/ui/dist/client/assets/createServerFn-B-KkwmHU.js +3 -0
- package/apps/ui/dist/client/assets/cursor-threads._composerId-hBWlP1D-.js +1 -0
- package/apps/ui/dist/client/assets/cursor._workspaceKey-BFPkIRi-.js +1 -0
- package/apps/ui/dist/client/assets/cursor.index-8y4o20kb.js +2 -0
- package/apps/ui/dist/client/assets/delete-confirm-dialog-Bxs07u-j.js +7 -0
- package/apps/ui/dist/client/assets/dist-BrJhN2A0.js +5 -0
- package/apps/ui/dist/client/assets/{dist-BhZOxAPP.js → dist-Cmd3AIfD.js} +1 -1
- package/apps/ui/dist/client/assets/dropdown-menu-D5cvPaZt.js +1 -0
- package/apps/ui/dist/client/assets/{es2015-BkCWttyM.js → es2015-ad6040dw.js} +1 -1
- package/apps/ui/dist/client/assets/export-dialog-Dr8d2MqD.js +1 -0
- package/apps/ui/dist/client/assets/{formatters-BM9kB7ed.js → formatters-BtqyrX_c.js} +1 -1
- package/apps/ui/dist/client/assets/index-C-STgIH4.js +166 -0
- package/apps/ui/dist/client/assets/kiro-sessions._sessionId-CKgfJ7GR.js +1 -0
- package/apps/ui/dist/client/assets/kiro-sessions._sessionId-zvIJHtQF.js +1 -0
- package/apps/ui/dist/client/assets/kiro._workspaceKey-DhVuJuZB.js +1 -0
- package/apps/ui/dist/client/assets/kiro._workspaceKey-QArsjkTY.js +1 -0
- package/apps/ui/dist/client/assets/kiro.index-C-fr4m7i.js +1 -0
- package/apps/ui/dist/client/assets/kiro.index-OYgAdtZd.js +1 -0
- package/apps/ui/dist/client/assets/opencode-sessions._sessionId-DLjiTst-.js +1 -0
- package/apps/ui/dist/client/assets/opencode-sessions._sessionId-biBwrRbt.js +8 -0
- package/apps/ui/dist/client/assets/opencode._workspaceKey-C7OIzMOJ.js +1 -0
- package/apps/ui/dist/client/assets/opencode._workspaceKey-sBakX0oI.js +1 -0
- package/apps/ui/dist/client/assets/opencode.index-Bl_kNs9N.js +1 -0
- package/apps/ui/dist/client/assets/opencode.index-CN53bVmb.js +1 -0
- package/apps/ui/dist/client/assets/preload-helper-B8fFrdxC.js +1 -0
- package/apps/ui/dist/client/assets/projects._project-D8WloxQN.js +1 -0
- package/apps/ui/dist/client/assets/projects.index-5xRtuJdX.js +3 -0
- package/apps/ui/dist/client/assets/routes-DnzF_9CX.js +1 -0
- package/apps/ui/dist/client/assets/select-CYF6pF37.js +1 -0
- package/apps/ui/dist/client/assets/settings-Dx70jgP_.js +1 -0
- package/apps/ui/dist/client/assets/styles-B7Zi9EFA.css +1 -0
- package/apps/ui/dist/client/assets/tabs-CmuhkT-c.js +7 -0
- package/apps/ui/dist/client/assets/thread-transcript-stats-BUNz6u7F.js +1 -0
- package/apps/ui/dist/client/assets/threads._threadId-BMRSFow3.js +1 -0
- package/apps/ui/dist/client/assets/useMutation-BSFult2i.js +1 -0
- package/apps/ui/dist/client/assets/useQuery-CjINKZf1.js +1 -0
- package/apps/ui/dist/client/icon.svg +2 -1
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CQ8Jjs3B.js +387 -0
- package/apps/ui/dist/server/assets/{antigravity-conversations._conversationId-BtexWY-K.js → antigravity-conversations._conversationId-BKOyL2T6.js} +2 -2
- package/apps/ui/dist/server/assets/{antigravity-conversations._conversationId-zMrR6v6R.js → antigravity-conversations._conversationId-eS87Dx7g.js} +1 -1
- package/apps/ui/dist/server/assets/claude-code-db-Ik3VStKZ.js +361 -0
- package/apps/ui/dist/server/assets/claude-code-queries-Cgzi4K-e.js +37 -0
- package/apps/ui/dist/server/assets/claude-code-server-PfraClXS.js +72 -0
- package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-C55oe6zj.js +18 -0
- package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-D1RYYi3j.js +473 -0
- package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-DSvPLEUL.js +11 -0
- package/apps/ui/dist/server/assets/claude-code-transcript-C-bxh3cS.js +139 -0
- package/apps/ui/dist/server/assets/claude-code-transcript-phase-DmUMc8VU.js +10 -0
- package/apps/ui/dist/server/assets/claude-code._workspaceKey-B5Xg_-tE.js +28 -0
- package/apps/ui/dist/server/assets/claude-code._workspaceKey-BPlzyXPa.js +11 -0
- package/apps/ui/dist/server/assets/claude-code._workspaceKey-DqDve2wl.js +191 -0
- package/apps/ui/dist/server/assets/claude-code.index-B7yYR7dD.js +92 -0
- package/apps/ui/dist/server/assets/claude-code.index-BUHThG1W.js +11 -0
- package/apps/ui/dist/server/assets/{codex-server-CNXSJuc2.js → codex-server-CGXU4H8-.js} +319 -29
- package/apps/ui/dist/server/assets/{cursor-db-cYZEU3WQ.js → cursor-db-CZnYy7aT.js} +3 -3
- package/apps/ui/dist/server/assets/{cursor-recovery-nq-kR62j.js → cursor-recovery-CXpO8KcD.js} +2 -2
- package/apps/ui/dist/server/assets/{cursor-server-C3q7hrp-.js → cursor-server-DNu52A3K.js} +13 -13
- package/apps/ui/dist/server/assets/{cursor-threads._composerId-BkMMTQ3v.js → cursor-threads._composerId-Ckn6ItHI.js} +3 -3
- package/apps/ui/dist/server/assets/{cursor-threads._composerId-BPJFWfJj.js → cursor-threads._composerId-p9-ARAzc.js} +1 -1
- package/apps/ui/dist/server/assets/{cursor-transcript-2iL3KFSK.js → cursor-transcript-B7tGnqtn.js} +1 -1
- package/apps/ui/dist/server/assets/{cursor._workspaceKey-C5PdTaKB.js → cursor._workspaceKey-CZuohIUL.js} +1 -1
- package/apps/ui/dist/server/assets/{cursor._workspaceKey-Ckj7apKI.js → cursor._workspaceKey-DPp5JSjy.js} +2 -2
- package/apps/ui/dist/server/assets/{export-dialog-BItjWgkZ.js → export-dialog-D88ze9Gy.js} +2 -2
- package/apps/ui/dist/server/assets/kiro-db--fXrED_-.js +552 -0
- package/apps/ui/dist/server/assets/kiro-queries-CzNlM2ok.js +37 -0
- package/apps/ui/dist/server/assets/kiro-server-9WRxg2Au.js +72 -0
- package/apps/ui/dist/server/assets/kiro-sessions._sessionId-CRY2c7YO.js +11 -0
- package/apps/ui/dist/server/assets/kiro-sessions._sessionId-F1UlwxmR.js +449 -0
- package/apps/ui/dist/server/assets/kiro-sessions._sessionId-bvTulT7C.js +18 -0
- package/apps/ui/dist/server/assets/kiro-transcript-DoekQBaH.js +112 -0
- package/apps/ui/dist/server/assets/kiro-transcript-phase-CJG40nQg.js +27 -0
- package/apps/ui/dist/server/assets/kiro._workspaceKey-BDe9sQwo.js +11 -0
- package/apps/ui/dist/server/assets/kiro._workspaceKey-CJsjgNwO.js +28 -0
- package/apps/ui/dist/server/assets/kiro._workspaceKey-D_-4Qb7y.js +193 -0
- package/apps/ui/dist/server/assets/kiro.index-C__-UROk.js +11 -0
- package/apps/ui/dist/server/assets/kiro.index-CmTbqeYj.js +93 -0
- package/apps/ui/dist/server/assets/opencode-db-BM7KjOzc.js +397 -0
- package/apps/ui/dist/server/assets/opencode-queries-BeNYXnQv.js +50 -0
- package/apps/ui/dist/server/assets/opencode-server-BpQ_kRze.js +72 -0
- package/apps/ui/dist/server/assets/opencode-sessions._sessionId-CGQ-t0vD.js +518 -0
- package/apps/ui/dist/server/assets/opencode-sessions._sessionId-D8Q7in_Z.js +18 -0
- package/apps/ui/dist/server/assets/opencode-sessions._sessionId-DKOvi0lV.js +11 -0
- package/apps/ui/dist/server/assets/opencode-think-tags-CAoD-EcZ.js +87 -0
- package/apps/ui/dist/server/assets/opencode-transcript-BNTcGNym.js +141 -0
- package/apps/ui/dist/server/assets/opencode-transcript-phase-OqLkiQD0.js +32 -0
- package/apps/ui/dist/server/assets/opencode._workspaceKey-BdqcWHw1.js +11 -0
- package/apps/ui/dist/server/assets/opencode._workspaceKey-CfH96HTT.js +28 -0
- package/apps/ui/dist/server/assets/opencode._workspaceKey-DdbHPDrO.js +207 -0
- package/apps/ui/dist/server/assets/opencode.index-BbVzkJXP.js +11 -0
- package/apps/ui/dist/server/assets/opencode.index-Vh_Gq_1L.js +93 -0
- package/apps/ui/dist/server/assets/{projects._project-Bpbc3C-L.js → projects._project-4io5LO0E.js} +1 -1
- package/apps/ui/dist/server/assets/{projects._project-CvZho6EQ.js → projects._project-D6ZoGhJ8.js} +2 -2
- package/apps/ui/dist/server/assets/{router-6m-ihwqA.js → router-Sac2DGk6.js} +157 -49
- package/apps/ui/dist/server/assets/{shared-CPRNYIql.js → shared-DyhChtHf.js} +4 -1
- package/apps/ui/dist/server/assets/source-session-export-server-DNutCawb.js +38 -0
- package/apps/ui/dist/server/assets/{start-CI_0bSiY.js → start-B_HFwkkk.js} +1 -1
- package/apps/ui/dist/server/assets/{tabs-CGA13IZM.js → tabs-DkaChNVg.js} +0 -1
- package/apps/ui/dist/server/assets/thread-transcript-stats-Dh34mt2u.js +45 -0
- package/apps/ui/dist/server/assets/{threads._threadId-D2GYkVn6.js → threads._threadId-BeXEc4Lo.js} +15 -6
- package/apps/ui/dist/server/assets/{threads._threadId-Bs0yuqO9.js → threads._threadId-Ci0S4mKU.js} +1 -1
- package/apps/ui/dist/server/server.js +72 -24
- package/package.json +21 -4
- package/src/lib/claude-code-db.ts +655 -0
- package/src/lib/claude-code-exporter-types.ts +110 -0
- package/src/lib/claude-code-transcript-phase.ts +25 -0
- package/src/lib/claude-code-transcript.ts +180 -0
- package/src/lib/codex-browser-db.ts +490 -31
- package/src/lib/codex-browser-export.ts +18 -2
- package/src/lib/codex-thread-cache.ts +17 -1
- package/src/lib/concurrency.ts +25 -0
- package/src/lib/kiro-db.ts +949 -0
- package/src/lib/kiro-exporter-types.ts +100 -0
- package/src/lib/kiro-transcript-phase.ts +41 -0
- package/src/lib/kiro-transcript.ts +115 -0
- package/src/lib/opencode-db.ts +610 -0
- package/src/lib/opencode-exporter-types.ts +129 -0
- package/src/lib/opencode-think-tags.ts +126 -0
- package/src/lib/opencode-transcript-phase.ts +50 -0
- package/src/lib/opencode-transcript.ts +194 -0
- package/src/lib/shared.ts +25 -0
- package/src/lib/ui-export-archive.ts +61 -0
- package/apps/ui/dist/client/assets/analytics-DK2jdvmI.js +0 -1
- package/apps/ui/dist/client/assets/antigravity-keychain-panel-BRHVjFAM.js +0 -1
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-CGV7amas.js +0 -1
- package/apps/ui/dist/client/assets/createServerFn-CgRRVpBH.js +0 -3
- package/apps/ui/dist/client/assets/cursor-threads._composerId-Ti2gTm63.js +0 -1
- package/apps/ui/dist/client/assets/cursor._workspaceKey-DzD_c6j9.js +0 -1
- package/apps/ui/dist/client/assets/cursor.index-PkCFVcl4.js +0 -2
- package/apps/ui/dist/client/assets/delete-confirm-dialog-BHRmyLHr.js +0 -11
- package/apps/ui/dist/client/assets/dropdown-menu-Dy5cLzTy.js +0 -1
- package/apps/ui/dist/client/assets/export-dialog-C86SYHJn.js +0 -1
- package/apps/ui/dist/client/assets/index-CPvAP-jk.js +0 -149
- package/apps/ui/dist/client/assets/projects._project-Ckf6muWZ.js +0 -1
- package/apps/ui/dist/client/assets/projects.index-V5ibNZII.js +0 -3
- package/apps/ui/dist/client/assets/routes-Df2tgpyd.js +0 -1
- package/apps/ui/dist/client/assets/select-Bf2GwfPR.js +0 -1
- package/apps/ui/dist/client/assets/settings-5VQIzME0.js +0 -1
- package/apps/ui/dist/client/assets/styles-BhRkXgwB.css +0 -1
- package/apps/ui/dist/client/assets/tabs-OO4VU5KR.js +0 -7
- package/apps/ui/dist/client/assets/threads._threadId-BgDhFj2I.js +0 -1
- package/apps/ui/dist/client/assets/useMutation-CC_B7uy5.js +0 -1
- package/apps/ui/dist/client/assets/useQuery-C5By6WKU.js +0 -1
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CRW2kqj0.js +0 -232
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
import { t as cn } from "./utils-C_uf36nf.js";
|
|
2
2
|
import { t as Button } from "./button-CmTDnzOn.js";
|
|
3
3
|
import { t as SettingsProvider } from "./settings-store-DpEJEQ7M.js";
|
|
4
|
-
import { t as Route$
|
|
5
|
-
import { t as Route$
|
|
6
|
-
import { t as Route$
|
|
4
|
+
import { t as Route$8 } from "./analytics-CYP_LT5Y.js";
|
|
5
|
+
import { t as Route$9 } from "./routes-BzkJgq4W.js";
|
|
6
|
+
import { t as Route$10 } from "./projects.index-DesYXwfi.js";
|
|
7
|
+
import { r as openCodeWorkspacesQueryOptions } from "./opencode-queries-BeNYXnQv.js";
|
|
8
|
+
import { r as kiroWorkspacesQueryOptions } from "./kiro-queries-CzNlM2ok.js";
|
|
7
9
|
import { r as cursorWorkspacesQueryOptions } from "./cursor-queries-NCIM0Nat.js";
|
|
10
|
+
import { r as claudeCodeWorkspacesQueryOptions } from "./claude-code-queries-Cgzi4K-e.js";
|
|
8
11
|
import { i as antigravityWorkspacesQueryOptions } from "./antigravity-queries-CGrJO9Vr.js";
|
|
9
|
-
import { t as Route$
|
|
10
|
-
import { t as Route$
|
|
11
|
-
import { t as Route$
|
|
12
|
-
import { t as Route$
|
|
13
|
-
import { t as Route$
|
|
14
|
-
import { t as Route$
|
|
12
|
+
import { t as Route$11 } from "./threads._threadId-Ci0S4mKU.js";
|
|
13
|
+
import { t as Route$12 } from "./projects._project-4io5LO0E.js";
|
|
14
|
+
import { t as Route$13 } from "./opencode._workspaceKey-CfH96HTT.js";
|
|
15
|
+
import { t as Route$14 } from "./opencode-sessions._sessionId-D8Q7in_Z.js";
|
|
16
|
+
import { t as Route$15 } from "./kiro._workspaceKey-CJsjgNwO.js";
|
|
17
|
+
import { t as Route$16 } from "./kiro-sessions._sessionId-bvTulT7C.js";
|
|
18
|
+
import { t as Route$17 } from "./cursor._workspaceKey-CZuohIUL.js";
|
|
19
|
+
import { t as Route$18 } from "./cursor-threads._composerId-p9-ARAzc.js";
|
|
20
|
+
import { t as Route$19 } from "./claude-code._workspaceKey-B5Xg_-tE.js";
|
|
21
|
+
import { t as Route$20 } from "./claude-code-sessions._sessionId-C55oe6zj.js";
|
|
22
|
+
import { t as Route$21 } from "./antigravity._workspaceKey-B0QeYUOh.js";
|
|
23
|
+
import { t as Route$22 } from "./antigravity-conversations._conversationId-eS87Dx7g.js";
|
|
15
24
|
import { useEffect, useState } from "react";
|
|
16
25
|
import { HeadContent, Link, Outlet, Scripts, createFileRoute, createRootRouteWithContext, createRouter, lazyRouteComponent, notFound, redirect, useRouterState } from "@tanstack/react-router";
|
|
17
26
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
27
|
import { setupRouterSsrQueryIntegration } from "@tanstack/react-router-ssr-query";
|
|
19
28
|
import { QueryClient } from "@tanstack/react-query";
|
|
20
|
-
import { BarChart3, FolderOpen, LayoutDashboard, Moon, Settings2, Sparkles, SquareTerminal, Sun } from "lucide-react";
|
|
29
|
+
import { BarChart3, Bot, BrainCircuit, Code2, FolderOpen, LayoutDashboard, Moon, Settings2, Sparkles, SquareTerminal, Sun } from "lucide-react";
|
|
21
30
|
import { Tooltip } from "radix-ui";
|
|
22
31
|
//#region src/integrations/tanstack-query/root-provider.tsx
|
|
23
32
|
function getContext() {
|
|
@@ -25,7 +34,7 @@ function getContext() {
|
|
|
25
34
|
}
|
|
26
35
|
//#endregion
|
|
27
36
|
//#region ../../package.json?raw
|
|
28
|
-
var package_default = "{\n \"author\": {\n \"name\": \"Ragaeeb Haq\",\n \"url\": \"https://github.com/ragaeeb\"\n },\n \"bin\": {\n \"codex-chats\": \"./bin/codex-chats.js\",\n \"codex-chats-claude\": \"./bin/codex-chats-claude.js\",\n \"spiracha\": \"./bin/spiracha.js\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ragaeeb/spiracha/issues\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^8.5.2\",\n \"@modelcontextprotocol/sdk\": \"^1.29.0\",\n \"@tanstack/react-query\": \"5.101.0\",\n \"@tanstack/react-router\": \"1.170.15\",\n \"@tanstack/react-router-ssr-query\": \"1.167.1\",\n \"@tanstack/react-table\": \"8.21.3\",\n \"@tanstack/react-virtual\": \"3.14.2\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"iconv-lite\": \"^0.7.2\",\n \"lucide-react\": \"1.
|
|
37
|
+
var package_default = "{\n \"author\": {\n \"name\": \"Ragaeeb Haq\",\n \"url\": \"https://github.com/ragaeeb\"\n },\n \"bin\": {\n \"codex-chats\": \"./bin/codex-chats.js\",\n \"codex-chats-claude\": \"./bin/codex-chats-claude.js\",\n \"spiracha\": \"./bin/spiracha.js\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ragaeeb/spiracha/issues\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^8.5.2\",\n \"@modelcontextprotocol/sdk\": \"^1.29.0\",\n \"@tanstack/react-query\": \"5.101.0\",\n \"@tanstack/react-router\": \"1.170.15\",\n \"@tanstack/react-router-ssr-query\": \"1.167.1\",\n \"@tanstack/react-table\": \"8.21.3\",\n \"@tanstack/react-virtual\": \"3.14.2\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"iconv-lite\": \"^0.7.2\",\n \"lucide-react\": \"1.18.0\",\n \"radix-ui\": \"1.5.0\",\n \"react\": \"19.2.7\",\n \"react-dom\": \"19.2.7\",\n \"tailwind-merge\": \"3.6.0\",\n \"zod\": \"4.4.3\"\n },\n \"description\": \"Export local Codex, Claude Code, and Cursor transcripts, and browse Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode history through a local UI.\",\n \"devDependencies\": {\n \"@types/bun\": \"^1.3.14\",\n \"@types/node\": \"^25.9.3\",\n \"typescript\": \"^6.0.3\"\n },\n \"engines\": {\n \"bun\": \">=1.3.14\"\n },\n \"files\": [\n \"bin/codex-chats.js\",\n \"bin/codex-chats-claude.js\",\n \"bin/spiracha.js\",\n \"src/export-chats.ts\",\n \"src/export-claude.ts\",\n \"src/export-cursor.ts\",\n \"src/mcp-server.ts\",\n \"src/spiracha.ts\",\n \"src/ui-cli.ts\",\n \"src/lib/antigravity-db.ts\",\n \"src/lib/antigravity-exporter-types.ts\",\n \"src/lib/antigravity-keychain.ts\",\n \"src/lib/claude-code-db.ts\",\n \"src/lib/claude-code-exporter-types.ts\",\n \"src/lib/claude-code-transcript-phase.ts\",\n \"src/lib/claude-code-transcript.ts\",\n \"src/lib/claude-exporter.ts\",\n \"src/lib/cursor-db.ts\",\n \"src/lib/cursor-exporter.ts\",\n \"src/lib/cursor-exporter-types.ts\",\n \"src/lib/cursor-recovery.ts\",\n \"src/lib/cursor-transcript.ts\",\n \"src/lib/kiro-db.ts\",\n \"src/lib/kiro-exporter-types.ts\",\n \"src/lib/kiro-transcript-phase.ts\",\n \"src/lib/kiro-transcript.ts\",\n \"src/lib/opencode-db.ts\",\n \"src/lib/opencode-exporter-types.ts\",\n \"src/lib/opencode-transcript-phase.ts\",\n \"src/lib/opencode-think-tags.ts\",\n \"src/lib/opencode-transcript.ts\",\n \"src/lib/codex-exporter-cli.ts\",\n \"src/lib/codex-exporter-db.ts\",\n \"src/lib/codex-exporter-transcript.ts\",\n \"src/lib/codex-exporter-types.ts\",\n \"src/lib/codex-exporter.ts\",\n \"src/lib/codex-browser-db.ts\",\n \"src/lib/codex-browser-export.ts\",\n \"src/lib/codex-browser-types.ts\",\n \"src/lib/codex-thread-recovery.ts\",\n \"src/lib/codex-thread-cache.ts\",\n \"src/lib/codex-thread-parser.ts\",\n \"src/lib/codex-analytics.ts\",\n \"src/lib/concurrency.ts\",\n \"src/lib/path-transforms.ts\",\n \"src/lib/sqlite-error.ts\",\n \"src/lib/sqlite-retry.ts\",\n \"src/lib/ui-export-archive.ts\",\n \"src/lib/ui-export-files.ts\",\n \"src/lib/ui-cache.ts\",\n \"src/lib/interactive-cli.ts\",\n \"src/lib/model-label.ts\",\n \"src/lib/native-open.ts\",\n \"src/lib/shared.ts\",\n \"apps/ui/dist/client/assets/**/*\",\n \"apps/ui/dist/client/icon.svg\",\n \"apps/ui/dist/client/manifest.json\",\n \"apps/ui/dist/client/robots.txt\",\n \"apps/ui/dist/server/**/*\",\n \"README.md\",\n \"AGENTS.md\"\n ],\n \"homepage\": \"https://github.com/ragaeeb/spiracha\",\n \"keywords\": [\n \"codex\",\n \"claude\",\n \"kiro\",\n \"cursor\",\n \"antigravity\",\n \"opencode\",\n \"transcripts\",\n \"export\",\n \"markdown\",\n \"bun\"\n ],\n \"license\": \"MIT\",\n \"name\": \"spiracha\",\n \"packageManager\": \"bun@1.3.14\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/ragaeeb/spiracha.git\"\n },\n \"scripts\": {\n \"build\": \"bun run typecheck && bun run --cwd apps/ui build\",\n \"coverage\": \"bun run coverage:root && bun run coverage:ui\",\n \"coverage:root\": \"bun test --coverage --coverage-reporter=lcov --coverage-dir coverage && bun run ./src/coverage-check.ts root\",\n \"coverage:ui\": \"bun run --cwd apps/ui coverage && bun run ./src/coverage-check.ts ui\",\n \"export:claude\": \"bun run ./src/export-claude.ts\",\n \"format\": \"biome check . --write && biome lint . --write\",\n \"lint\": \"biome check .\",\n \"mcp\": \"bun run ./src/mcp-server.ts\",\n \"smoke:package-ui\": \"bun run ./src/package-ui-smoke.ts\",\n \"start\": \"bun run ./src/export-chats.ts\",\n \"typecheck\": \"bun run typecheck:root && bun run typecheck:ui\",\n \"typecheck:root\": \"bunx tsc --noEmit\",\n \"typecheck:ui\": \"bun run --cwd apps/ui typecheck\",\n \"ui:dev\": \"bun run --cwd apps/ui dev\",\n \"ui:preview\": \"bun run --cwd apps/ui preview\"\n },\n \"type\": \"module\",\n \"version\": \"1.5.0\",\n \"workspaces\": [\n \"apps/*\"\n ]\n}\n";
|
|
29
38
|
//#endregion
|
|
30
39
|
//#region src/lib/package-metadata.ts
|
|
31
40
|
var parsePackageMetadata = () => {
|
|
@@ -84,6 +93,18 @@ var navItems = [
|
|
|
84
93
|
label: "Codex",
|
|
85
94
|
to: "/projects"
|
|
86
95
|
},
|
|
96
|
+
{
|
|
97
|
+
activePrefixes: ["/claude-code", "/claude-code-sessions"],
|
|
98
|
+
icon: Bot,
|
|
99
|
+
label: "Claude Code",
|
|
100
|
+
to: "/claude-code"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
activePrefixes: ["/kiro", "/kiro-sessions"],
|
|
104
|
+
icon: BrainCircuit,
|
|
105
|
+
label: "Kiro",
|
|
106
|
+
to: "/kiro"
|
|
107
|
+
},
|
|
87
108
|
{
|
|
88
109
|
activePrefixes: ["/antigravity", "/antigravity-conversations"],
|
|
89
110
|
icon: Sparkles,
|
|
@@ -96,6 +117,12 @@ var navItems = [
|
|
|
96
117
|
label: "Cursor",
|
|
97
118
|
to: "/cursor"
|
|
98
119
|
},
|
|
120
|
+
{
|
|
121
|
+
activePrefixes: ["/opencode", "/opencode-sessions"],
|
|
122
|
+
icon: Code2,
|
|
123
|
+
label: "OpenCode",
|
|
124
|
+
to: "/opencode"
|
|
125
|
+
},
|
|
99
126
|
{
|
|
100
127
|
icon: BarChart3,
|
|
101
128
|
label: "Analytics",
|
|
@@ -180,7 +207,7 @@ function TooltipProvider({ delayDuration = 0, ...props }) {
|
|
|
180
207
|
}
|
|
181
208
|
//#endregion
|
|
182
209
|
//#region src/styles.css?url
|
|
183
|
-
var styles_default = "/assets/styles-
|
|
210
|
+
var styles_default = "/assets/styles-B7Zi9EFA.css";
|
|
184
211
|
//#endregion
|
|
185
212
|
//#region src/routes/__root.tsx
|
|
186
213
|
var themeInitScript = `
|
|
@@ -225,7 +252,7 @@ function RootErrorComponent({ error }) {
|
|
|
225
252
|
})
|
|
226
253
|
});
|
|
227
254
|
}
|
|
228
|
-
var Route$
|
|
255
|
+
var Route$7 = createRootRouteWithContext()({
|
|
229
256
|
component: RootComponent,
|
|
230
257
|
errorComponent: RootErrorComponent,
|
|
231
258
|
head: () => ({
|
|
@@ -251,7 +278,7 @@ var Route$4 = createRootRouteWithContext()({
|
|
|
251
278
|
name: "viewport"
|
|
252
279
|
},
|
|
253
280
|
{
|
|
254
|
-
content: "Browse local Codex, Cursor, and
|
|
281
|
+
content: "Browse local Codex, Claude Code, Kiro, Cursor, Antigravity, and OpenCode history through a compact workspace UI.",
|
|
255
282
|
name: "description"
|
|
256
283
|
},
|
|
257
284
|
{ title: "Spiracha UI" }
|
|
@@ -270,16 +297,16 @@ function RootDocument({ children }) {
|
|
|
270
297
|
}
|
|
271
298
|
//#endregion
|
|
272
299
|
//#region src/routes/settings.tsx
|
|
273
|
-
var $$splitComponentImporter$
|
|
274
|
-
var Route$
|
|
300
|
+
var $$splitComponentImporter$6 = () => import("./settings-OayxIYQQ.js");
|
|
301
|
+
var Route$6 = createFileRoute("/settings")({ component: lazyRouteComponent($$splitComponentImporter$6, "component") });
|
|
275
302
|
//#endregion
|
|
276
303
|
//#region src/lib/thread-id.ts
|
|
277
304
|
var THREAD_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;
|
|
278
305
|
var isCodexThreadId = (value) => THREAD_ID_PATTERN.test(value);
|
|
279
306
|
//#endregion
|
|
280
307
|
//#region src/routes/$threadId.tsx
|
|
281
|
-
var $$splitComponentImporter$
|
|
282
|
-
var Route$
|
|
308
|
+
var $$splitComponentImporter$5 = () => import("./_threadId-B6SrBR9E.js");
|
|
309
|
+
var Route$5 = createFileRoute("/$threadId")({
|
|
283
310
|
beforeLoad: ({ params }) => {
|
|
284
311
|
if (!isCodexThreadId(params.threadId)) throw notFound();
|
|
285
312
|
throw redirect({
|
|
@@ -287,16 +314,43 @@ var Route$2 = createFileRoute("/$threadId")({
|
|
|
287
314
|
to: "/threads/$threadId"
|
|
288
315
|
});
|
|
289
316
|
},
|
|
290
|
-
component: lazyRouteComponent($$splitComponentImporter$
|
|
317
|
+
component: lazyRouteComponent($$splitComponentImporter$5, "component")
|
|
318
|
+
});
|
|
319
|
+
//#endregion
|
|
320
|
+
//#region src/routes/opencode.index.tsx
|
|
321
|
+
var $$splitErrorComponentImporter$4 = () => import("./opencode.index-BbVzkJXP.js");
|
|
322
|
+
var $$splitComponentImporter$4 = () => import("./opencode.index-Vh_Gq_1L.js");
|
|
323
|
+
var Route$4 = createFileRoute("/opencode/")({
|
|
324
|
+
component: lazyRouteComponent($$splitComponentImporter$4, "component"),
|
|
325
|
+
errorComponent: lazyRouteComponent($$splitErrorComponentImporter$4, "errorComponent"),
|
|
326
|
+
loader: ({ context }) => context.queryClient.ensureQueryData(openCodeWorkspacesQueryOptions())
|
|
327
|
+
});
|
|
328
|
+
//#endregion
|
|
329
|
+
//#region src/routes/kiro.index.tsx
|
|
330
|
+
var $$splitErrorComponentImporter$3 = () => import("./kiro.index-C__-UROk.js");
|
|
331
|
+
var $$splitComponentImporter$3 = () => import("./kiro.index-CmTbqeYj.js");
|
|
332
|
+
var Route$3 = createFileRoute("/kiro/")({
|
|
333
|
+
component: lazyRouteComponent($$splitComponentImporter$3, "component"),
|
|
334
|
+
errorComponent: lazyRouteComponent($$splitErrorComponentImporter$3, "errorComponent"),
|
|
335
|
+
loader: ({ context }) => context.queryClient.ensureQueryData(kiroWorkspacesQueryOptions())
|
|
291
336
|
});
|
|
292
337
|
//#endregion
|
|
293
338
|
//#region src/routes/cursor.index.tsx
|
|
294
|
-
var $$splitErrorComponentImporter$
|
|
295
|
-
var $$splitComponentImporter$
|
|
296
|
-
var Route$
|
|
339
|
+
var $$splitErrorComponentImporter$2 = () => import("./cursor.index-CcsX7DG0.js");
|
|
340
|
+
var $$splitComponentImporter$2 = () => import("./cursor.index-DkWT-mxw.js");
|
|
341
|
+
var Route$2 = createFileRoute("/cursor/")({
|
|
342
|
+
component: lazyRouteComponent($$splitComponentImporter$2, "component"),
|
|
343
|
+
errorComponent: lazyRouteComponent($$splitErrorComponentImporter$2, "errorComponent"),
|
|
344
|
+
loader: ({ context }) => context.queryClient.ensureQueryData(cursorWorkspacesQueryOptions())
|
|
345
|
+
});
|
|
346
|
+
//#endregion
|
|
347
|
+
//#region src/routes/claude-code.index.tsx
|
|
348
|
+
var $$splitErrorComponentImporter$1 = () => import("./claude-code.index-BUHThG1W.js");
|
|
349
|
+
var $$splitComponentImporter$1 = () => import("./claude-code.index-B7yYR7dD.js");
|
|
350
|
+
var Route$1 = createFileRoute("/claude-code/")({
|
|
297
351
|
component: lazyRouteComponent($$splitComponentImporter$1, "component"),
|
|
298
352
|
errorComponent: lazyRouteComponent($$splitErrorComponentImporter$1, "errorComponent"),
|
|
299
|
-
loader: ({ context }) => context.queryClient.ensureQueryData(
|
|
353
|
+
loader: ({ context }) => context.queryClient.ensureQueryData(claudeCodeWorkspacesQueryOptions())
|
|
300
354
|
});
|
|
301
355
|
//#endregion
|
|
302
356
|
//#region src/routes/antigravity.index.tsx
|
|
@@ -309,86 +363,140 @@ var Route = createFileRoute("/antigravity/")({
|
|
|
309
363
|
});
|
|
310
364
|
//#endregion
|
|
311
365
|
//#region src/routeTree.gen.ts
|
|
312
|
-
var SettingsRoute = Route$
|
|
366
|
+
var SettingsRoute = Route$6.update({
|
|
313
367
|
id: "/settings",
|
|
314
368
|
path: "/settings",
|
|
315
|
-
getParentRoute: () => Route$
|
|
369
|
+
getParentRoute: () => Route$7
|
|
316
370
|
});
|
|
317
|
-
var AnalyticsRoute = Route$
|
|
371
|
+
var AnalyticsRoute = Route$8.update({
|
|
318
372
|
id: "/analytics",
|
|
319
373
|
path: "/analytics",
|
|
320
|
-
getParentRoute: () => Route$
|
|
374
|
+
getParentRoute: () => Route$7
|
|
321
375
|
});
|
|
322
|
-
var ThreadIdRoute = Route$
|
|
376
|
+
var ThreadIdRoute = Route$5.update({
|
|
323
377
|
id: "/$threadId",
|
|
324
378
|
path: "/$threadId",
|
|
325
|
-
getParentRoute: () => Route$
|
|
379
|
+
getParentRoute: () => Route$7
|
|
326
380
|
});
|
|
327
|
-
var IndexRoute = Route$
|
|
381
|
+
var IndexRoute = Route$9.update({
|
|
328
382
|
id: "/",
|
|
329
383
|
path: "/",
|
|
330
|
-
getParentRoute: () => Route$
|
|
384
|
+
getParentRoute: () => Route$7
|
|
331
385
|
});
|
|
332
|
-
var ProjectsIndexRoute = Route$
|
|
386
|
+
var ProjectsIndexRoute = Route$10.update({
|
|
333
387
|
id: "/projects/",
|
|
334
388
|
path: "/projects/",
|
|
335
|
-
getParentRoute: () => Route$
|
|
389
|
+
getParentRoute: () => Route$7
|
|
390
|
+
});
|
|
391
|
+
var OpencodeIndexRoute = Route$4.update({
|
|
392
|
+
id: "/opencode/",
|
|
393
|
+
path: "/opencode/",
|
|
394
|
+
getParentRoute: () => Route$7
|
|
336
395
|
});
|
|
337
|
-
var
|
|
396
|
+
var KiroIndexRoute = Route$3.update({
|
|
397
|
+
id: "/kiro/",
|
|
398
|
+
path: "/kiro/",
|
|
399
|
+
getParentRoute: () => Route$7
|
|
400
|
+
});
|
|
401
|
+
var CursorIndexRoute = Route$2.update({
|
|
338
402
|
id: "/cursor/",
|
|
339
403
|
path: "/cursor/",
|
|
340
|
-
getParentRoute: () => Route$
|
|
404
|
+
getParentRoute: () => Route$7
|
|
405
|
+
});
|
|
406
|
+
var ClaudeCodeIndexRoute = Route$1.update({
|
|
407
|
+
id: "/claude-code/",
|
|
408
|
+
path: "/claude-code/",
|
|
409
|
+
getParentRoute: () => Route$7
|
|
341
410
|
});
|
|
342
411
|
var AntigravityIndexRoute = Route.update({
|
|
343
412
|
id: "/antigravity/",
|
|
344
413
|
path: "/antigravity/",
|
|
345
|
-
getParentRoute: () => Route$
|
|
414
|
+
getParentRoute: () => Route$7
|
|
346
415
|
});
|
|
347
|
-
var ThreadsThreadIdRoute = Route$
|
|
416
|
+
var ThreadsThreadIdRoute = Route$11.update({
|
|
348
417
|
id: "/threads/$threadId",
|
|
349
418
|
path: "/threads/$threadId",
|
|
350
|
-
getParentRoute: () => Route$
|
|
419
|
+
getParentRoute: () => Route$7
|
|
351
420
|
});
|
|
352
|
-
var ProjectsProjectRoute = Route$
|
|
421
|
+
var ProjectsProjectRoute = Route$12.update({
|
|
353
422
|
id: "/projects/$project",
|
|
354
423
|
path: "/projects/$project",
|
|
355
|
-
getParentRoute: () => Route$
|
|
424
|
+
getParentRoute: () => Route$7
|
|
425
|
+
});
|
|
426
|
+
var OpencodeWorkspaceKeyRoute = Route$13.update({
|
|
427
|
+
id: "/opencode/$workspaceKey",
|
|
428
|
+
path: "/opencode/$workspaceKey",
|
|
429
|
+
getParentRoute: () => Route$7
|
|
356
430
|
});
|
|
357
|
-
var
|
|
431
|
+
var OpencodeSessionsSessionIdRoute = Route$14.update({
|
|
432
|
+
id: "/opencode-sessions/$sessionId",
|
|
433
|
+
path: "/opencode-sessions/$sessionId",
|
|
434
|
+
getParentRoute: () => Route$7
|
|
435
|
+
});
|
|
436
|
+
var KiroWorkspaceKeyRoute = Route$15.update({
|
|
437
|
+
id: "/kiro/$workspaceKey",
|
|
438
|
+
path: "/kiro/$workspaceKey",
|
|
439
|
+
getParentRoute: () => Route$7
|
|
440
|
+
});
|
|
441
|
+
var KiroSessionsSessionIdRoute = Route$16.update({
|
|
442
|
+
id: "/kiro-sessions/$sessionId",
|
|
443
|
+
path: "/kiro-sessions/$sessionId",
|
|
444
|
+
getParentRoute: () => Route$7
|
|
445
|
+
});
|
|
446
|
+
var CursorWorkspaceKeyRoute = Route$17.update({
|
|
358
447
|
id: "/cursor/$workspaceKey",
|
|
359
448
|
path: "/cursor/$workspaceKey",
|
|
360
|
-
getParentRoute: () => Route$
|
|
449
|
+
getParentRoute: () => Route$7
|
|
361
450
|
});
|
|
362
|
-
var CursorThreadsComposerIdRoute = Route$
|
|
451
|
+
var CursorThreadsComposerIdRoute = Route$18.update({
|
|
363
452
|
id: "/cursor-threads/$composerId",
|
|
364
453
|
path: "/cursor-threads/$composerId",
|
|
365
|
-
getParentRoute: () => Route$
|
|
454
|
+
getParentRoute: () => Route$7
|
|
455
|
+
});
|
|
456
|
+
var ClaudeCodeWorkspaceKeyRoute = Route$19.update({
|
|
457
|
+
id: "/claude-code/$workspaceKey",
|
|
458
|
+
path: "/claude-code/$workspaceKey",
|
|
459
|
+
getParentRoute: () => Route$7
|
|
460
|
+
});
|
|
461
|
+
var ClaudeCodeSessionsSessionIdRoute = Route$20.update({
|
|
462
|
+
id: "/claude-code-sessions/$sessionId",
|
|
463
|
+
path: "/claude-code-sessions/$sessionId",
|
|
464
|
+
getParentRoute: () => Route$7
|
|
366
465
|
});
|
|
367
|
-
var AntigravityWorkspaceKeyRoute = Route$
|
|
466
|
+
var AntigravityWorkspaceKeyRoute = Route$21.update({
|
|
368
467
|
id: "/antigravity/$workspaceKey",
|
|
369
468
|
path: "/antigravity/$workspaceKey",
|
|
370
|
-
getParentRoute: () => Route$
|
|
469
|
+
getParentRoute: () => Route$7
|
|
371
470
|
});
|
|
372
471
|
var rootRouteChildren = {
|
|
373
472
|
IndexRoute,
|
|
374
473
|
ThreadIdRoute,
|
|
375
474
|
AnalyticsRoute,
|
|
376
475
|
SettingsRoute,
|
|
377
|
-
AntigravityConversationsConversationIdRoute: Route$
|
|
476
|
+
AntigravityConversationsConversationIdRoute: Route$22.update({
|
|
378
477
|
id: "/antigravity-conversations/$conversationId",
|
|
379
478
|
path: "/antigravity-conversations/$conversationId",
|
|
380
|
-
getParentRoute: () => Route$
|
|
479
|
+
getParentRoute: () => Route$7
|
|
381
480
|
}),
|
|
382
481
|
AntigravityWorkspaceKeyRoute,
|
|
482
|
+
ClaudeCodeSessionsSessionIdRoute,
|
|
483
|
+
ClaudeCodeWorkspaceKeyRoute,
|
|
383
484
|
CursorThreadsComposerIdRoute,
|
|
384
485
|
CursorWorkspaceKeyRoute,
|
|
486
|
+
KiroSessionsSessionIdRoute,
|
|
487
|
+
KiroWorkspaceKeyRoute,
|
|
488
|
+
OpencodeSessionsSessionIdRoute,
|
|
489
|
+
OpencodeWorkspaceKeyRoute,
|
|
385
490
|
ProjectsProjectRoute,
|
|
386
491
|
ThreadsThreadIdRoute,
|
|
387
492
|
AntigravityIndexRoute,
|
|
493
|
+
ClaudeCodeIndexRoute,
|
|
388
494
|
CursorIndexRoute,
|
|
495
|
+
KiroIndexRoute,
|
|
496
|
+
OpencodeIndexRoute,
|
|
389
497
|
ProjectsIndexRoute
|
|
390
498
|
};
|
|
391
|
-
var routeTree = Route$
|
|
499
|
+
var routeTree = Route$7._addFileChildren(rootRouteChildren)._addFileTypes();
|
|
392
500
|
//#endregion
|
|
393
501
|
//#region src/router.tsx
|
|
394
502
|
function getRouter() {
|
|
@@ -30,6 +30,9 @@ var asString = (value) => {
|
|
|
30
30
|
var asNumber = (value) => {
|
|
31
31
|
return typeof value === "number" ? value : null;
|
|
32
32
|
};
|
|
33
|
+
var asBoolean = (value) => {
|
|
34
|
+
return value === true;
|
|
35
|
+
};
|
|
33
36
|
var readJsonlObjects = (filePath) => {
|
|
34
37
|
const stream = createReadStream(filePath, { encoding: "utf8" });
|
|
35
38
|
const lines = createInterface({
|
|
@@ -131,4 +134,4 @@ var toMetadataValue = (value, format) => {
|
|
|
131
134
|
return format === "md" ? JSON.stringify(String(value)) : String(value);
|
|
132
135
|
};
|
|
133
136
|
//#endregion
|
|
134
|
-
export {
|
|
137
|
+
export { cleanExtractedText as a, finalizeExportWriteStream as c, getPortablePathBasename as d, readJsonlObjects as f, renderSection as g, renderMetadataBlock as h, asString as i, formatInlineLiteral as l, renderDocumentTitle as m, asNumber as n, cleanInlineTitle as o, renderCodeBlock as p, asObject as r, createExportWriteStream as s, asBoolean as t, formatModelLabel as u };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { a as sanitizeExportFileName, n as ensureUiExportDir, o as zipExportDirectory, r as getExportMimeType, t as buildUiExportDownloadUrl } from "./ui-export-files-BHLX9bhN.js";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
//#region src/lib/source-session-export-server.ts
|
|
7
|
+
var toSafeSourceExportName = (value, fallback) => {
|
|
8
|
+
return sanitizeExportFileName(value) || fallback;
|
|
9
|
+
};
|
|
10
|
+
var renderSourceSessionDownload = async ({ content, fallbackBaseName, fileBaseName, outputFormat, zipArchive }) => {
|
|
11
|
+
const safeBaseName = toSafeSourceExportName(fileBaseName, fallbackBaseName);
|
|
12
|
+
if (!zipArchive) return {
|
|
13
|
+
content,
|
|
14
|
+
fileName: `${safeBaseName}.${outputFormat}`,
|
|
15
|
+
mimeType: getExportMimeType(outputFormat),
|
|
16
|
+
mode: "download"
|
|
17
|
+
};
|
|
18
|
+
const exportDir = await ensureUiExportDir();
|
|
19
|
+
const workspaceDir = await mkdtemp(path.join(os.tmpdir(), `${safeBaseName}-`));
|
|
20
|
+
const zipPath = path.join(exportDir, `${safeBaseName}-${randomUUID()}.zip`);
|
|
21
|
+
try {
|
|
22
|
+
await Bun.write(path.join(workspaceDir, `${safeBaseName}.${outputFormat}`), content);
|
|
23
|
+
await zipExportDirectory(workspaceDir, zipPath);
|
|
24
|
+
} finally {
|
|
25
|
+
await rm(workspaceDir, {
|
|
26
|
+
force: true,
|
|
27
|
+
recursive: true
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
downloadUrl: buildUiExportDownloadUrl(zipPath),
|
|
32
|
+
fileName: `${safeBaseName}.zip`,
|
|
33
|
+
mimeType: "application/zip",
|
|
34
|
+
mode: "download_url"
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
export { renderSourceSessionDownload as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../../node_modules/.bun/@tanstack+react-start@1.168.25+
|
|
1
|
+
//#region ../../node_modules/.bun/@tanstack+react-start@1.168.25+ef477cf6485321ca/node_modules/@tanstack/react-start/dist/plugin/default-entry/start.ts
|
|
2
2
|
var startInstance = void 0;
|
|
3
3
|
//#endregion
|
|
4
4
|
export { startInstance };
|
|
@@ -102,7 +102,6 @@ var getEventTone = (event) => {
|
|
|
102
102
|
return "border-[var(--border)] bg-[var(--panel-secondary)]/80";
|
|
103
103
|
};
|
|
104
104
|
var getMessageTitle = (event, assistantModel) => {
|
|
105
|
-
if (event.role === "assistant" && event.phase === "final_answer") return "Final Answer";
|
|
106
105
|
const modelLabel = formatModelLabel(event.model ?? assistantModel);
|
|
107
106
|
if (event.variant === "agent_message") return event.role === "assistant" ? modelLabel : "Assistant update";
|
|
108
107
|
if (event.role === "assistant") return modelLabel;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/lib/thread-transcript-stats.ts
|
|
2
|
+
var EXEC_TOOL_NAMES = new Set([
|
|
3
|
+
"bash",
|
|
4
|
+
"exec",
|
|
5
|
+
"execute",
|
|
6
|
+
"execute_command",
|
|
7
|
+
"run_command",
|
|
8
|
+
"shell",
|
|
9
|
+
"terminal"
|
|
10
|
+
]);
|
|
11
|
+
var isExecToolName = (name) => {
|
|
12
|
+
return EXEC_TOOL_NAMES.has((name ?? "").trim().toLowerCase());
|
|
13
|
+
};
|
|
14
|
+
var updateMessageStats = (stats, event) => {
|
|
15
|
+
stats.messageCount += 1;
|
|
16
|
+
if (event.role === "assistant") stats.assistantMessageCount += 1;
|
|
17
|
+
if (event.role === "user") stats.userMessageCount += 1;
|
|
18
|
+
if (event.phase === "commentary") stats.commentaryCount += 1;
|
|
19
|
+
if (event.phase === "final_answer") stats.finalAnswerCount += 1;
|
|
20
|
+
};
|
|
21
|
+
var getThreadTranscriptStats = (events) => {
|
|
22
|
+
const stats = {
|
|
23
|
+
assistantMessageCount: 0,
|
|
24
|
+
commentaryCount: 0,
|
|
25
|
+
execCommandCount: 0,
|
|
26
|
+
finalAnswerCount: 0,
|
|
27
|
+
messageCount: 0,
|
|
28
|
+
toolCallCount: 0,
|
|
29
|
+
toolOutputCount: 0,
|
|
30
|
+
userMessageCount: 0,
|
|
31
|
+
webSearchEventCount: 0
|
|
32
|
+
};
|
|
33
|
+
for (const event of events) {
|
|
34
|
+
if (event.kind === "message") updateMessageStats(stats, event);
|
|
35
|
+
if (event.kind === "tool_call") {
|
|
36
|
+
stats.toolCallCount += 1;
|
|
37
|
+
if (isExecToolName(event.name)) stats.execCommandCount += 1;
|
|
38
|
+
}
|
|
39
|
+
if (event.kind === "tool_output") stats.toolOutputCount += 1;
|
|
40
|
+
if (event.kind === "web_search") stats.webSearchEventCount += 1;
|
|
41
|
+
}
|
|
42
|
+
return stats;
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
export { getThreadTranscriptStats as t };
|
package/apps/ui/dist/server/assets/{threads._threadId-D2GYkVn6.js → threads._threadId-BeXEc4Lo.js}
RENAMED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { t as Button } from "./button-CmTDnzOn.js";
|
|
2
2
|
import { n as useSettings } from "./settings-store-DpEJEQ7M.js";
|
|
3
3
|
import { a as threadSnapshotQueryOptions, c as deleteThreadFn, o as threadTranscriptQueryOptions, u as exportThreadFn } from "./codex-queries-CtgeZ7VL.js";
|
|
4
|
-
import { t as Route } from "./threads._threadId-
|
|
4
|
+
import { t as Route } from "./threads._threadId-Ci0S4mKU.js";
|
|
5
5
|
import { t as Checkbox } from "./checkbox-C0hovF41.js";
|
|
6
6
|
import { t as MetricCard } from "./metric-card-ByEeLu0r.js";
|
|
7
7
|
import { t as PageHeader } from "./page-header-VNSaM3xd.js";
|
|
8
8
|
import { i as formatList, n as formatBytes, r as formatDateTime, s as formatTokens, t as formatBooleanLabel } from "./formatters-FJaGZgJk.js";
|
|
9
|
-
import { a as TranscriptView, c as Breadcrumbs, i as TabsTrigger, n as TabsContent, o as MetadataSection, r as TabsList, s as JsonPanel, t as Tabs } from "./tabs-
|
|
9
|
+
import { a as TranscriptView, c as Breadcrumbs, i as TabsTrigger, n as TabsContent, o as MetadataSection, r as TabsList, s as JsonPanel, t as Tabs } from "./tabs-DkaChNVg.js";
|
|
10
10
|
import { t as Badge } from "./badge-EvdhKK_Z.js";
|
|
11
11
|
import { n as downloadUrlFile, t as downloadTextFile } from "./download-DMmiy1xf.js";
|
|
12
|
+
import { t as ExportDialog } from "./export-dialog-D88ze9Gy.js";
|
|
12
13
|
import { t as DeleteConfirmDialog } from "./delete-confirm-dialog-BcBNCxWB.js";
|
|
13
|
-
import { t as ExportDialog } from "./export-dialog-BItjWgkZ.js";
|
|
14
14
|
import { useState } from "react";
|
|
15
15
|
import { Link, useNavigate } from "@tanstack/react-router";
|
|
16
16
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -405,13 +405,18 @@ function DeferredTranscriptNotice({ fileSizeBytes, missing, pending, onLoad }) {
|
|
|
405
405
|
]
|
|
406
406
|
});
|
|
407
407
|
}
|
|
408
|
+
var getThreadExportErrorMessage = (transcriptMissing, error) => {
|
|
409
|
+
if (transcriptMissing) return "The rollout JSONL file is missing from disk, so this thread cannot be exported right now.";
|
|
410
|
+
return error instanceof Error ? error.message : null;
|
|
411
|
+
};
|
|
408
412
|
function ThreadDetailPage() {
|
|
409
413
|
const navigate = useNavigate();
|
|
410
414
|
const queryClient = useQueryClient();
|
|
411
415
|
const params = Route.useParams();
|
|
412
416
|
const snapshot = useSuspenseQuery(threadSnapshotQueryOptions(params.threadId)).data;
|
|
413
417
|
const { settings } = useSettings();
|
|
414
|
-
const
|
|
418
|
+
const transcriptMissing = snapshot.transcriptState === "missing";
|
|
419
|
+
const [shouldLoadTranscript, setShouldLoadTranscript] = useState(!snapshot.rollout.shouldDeferTranscriptLoad && !transcriptMissing);
|
|
415
420
|
const [showToolCalls, setShowToolCalls] = useState(false);
|
|
416
421
|
const [showCommentary, setShowCommentary] = useState(false);
|
|
417
422
|
const [showExtraEvents, setShowExtraEvents] = useState(false);
|
|
@@ -421,7 +426,7 @@ function ThreadDetailPage() {
|
|
|
421
426
|
const [deleteOpen, setDeleteOpen] = useState(false);
|
|
422
427
|
const transcriptQuery = useQuery({
|
|
423
428
|
...threadTranscriptQueryOptions(params.threadId),
|
|
424
|
-
enabled: shouldLoadTranscript && snapshot.transcript === null
|
|
429
|
+
enabled: shouldLoadTranscript && snapshot.transcript === null && !transcriptMissing
|
|
425
430
|
});
|
|
426
431
|
const transcript = snapshot.transcript ?? transcriptQuery.data ?? null;
|
|
427
432
|
const viewSnapshot = {
|
|
@@ -627,9 +632,13 @@ function ThreadDetailPage() {
|
|
|
627
632
|
onOpenChange: setDeleteOpen
|
|
628
633
|
}),
|
|
629
634
|
/* @__PURE__ */ jsx(ExportDialog, {
|
|
635
|
+
disabled: transcriptMissing,
|
|
636
|
+
errorMessage: getThreadExportErrorMessage(transcriptMissing, exportThreadMutation.error),
|
|
630
637
|
open: exportOpen,
|
|
631
638
|
pending: exportThreadMutation.isPending,
|
|
632
|
-
onExport: (options) =>
|
|
639
|
+
onExport: (options) => {
|
|
640
|
+
if (!transcriptMissing) exportThreadMutation.mutate(options);
|
|
641
|
+
},
|
|
633
642
|
onOpenChange: setExportOpen
|
|
634
643
|
})
|
|
635
644
|
]
|
package/apps/ui/dist/server/assets/{threads._threadId-Bs0yuqO9.js → threads._threadId-Ci0S4mKU.js}
RENAMED
|
@@ -4,7 +4,7 @@ import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/routes/threads.$threadId.tsx
|
|
6
6
|
var $$splitErrorComponentImporter = () => import("./threads._threadId-BSSK4nkI.js");
|
|
7
|
-
var $$splitComponentImporter = () => import("./threads._threadId-
|
|
7
|
+
var $$splitComponentImporter = () => import("./threads._threadId-BeXEc4Lo.js");
|
|
8
8
|
var Route = createFileRoute("/threads/$threadId")({
|
|
9
9
|
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
10
10
|
errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),
|