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.
Files changed (149) hide show
  1. package/AGENTS.md +50 -12
  2. package/README.md +117 -64
  3. package/apps/ui/AGENTS.md +16 -8
  4. package/apps/ui/README.md +28 -12
  5. package/apps/ui/dist/client/assets/{analytics-Cv0JMDN2.js → analytics-B_hYz65v.js} +1 -1
  6. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-qiyygB7e.js +1 -0
  7. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-z1SQC2Kg.js +1 -0
  8. package/apps/ui/dist/client/assets/antigravity-keychain-panel-dYuRWtCf.js +1 -0
  9. package/apps/ui/dist/client/assets/antigravity._workspaceKey-CliqUr7o.js +1 -0
  10. package/apps/ui/dist/client/assets/antigravity._workspaceKey-CnoBzyX6.js +1 -0
  11. package/apps/ui/dist/client/assets/antigravity.index-CakfZz_E.js +1 -0
  12. package/apps/ui/dist/client/assets/antigravity.index-DY7M1KhG.js +1 -0
  13. package/apps/ui/dist/client/assets/badge-aHE9ETVe.js +1 -0
  14. package/apps/ui/dist/client/assets/checkbox-DN3XnJaA.js +1 -0
  15. package/apps/ui/dist/client/assets/cursor-threads._composerId-BMQyx8qG.js +1 -0
  16. package/apps/ui/dist/client/assets/cursor-threads._composerId-BTlaA-tV.js +1 -0
  17. package/apps/ui/dist/client/assets/cursor._workspaceKey-CrgrfevV.js +1 -0
  18. package/apps/ui/dist/client/assets/cursor._workspaceKey-bYS2syGL.js +1 -0
  19. package/apps/ui/dist/client/assets/cursor.index-CTqZMPYU.js +1 -0
  20. package/apps/ui/dist/client/assets/cursor.index-Clsz4E_e.js +2 -0
  21. package/apps/ui/dist/client/assets/{data-table-Bgnh7phF.js → data-table-Cj-v-uyB.js} +2 -2
  22. package/apps/ui/dist/client/assets/delete-confirm-dialog-DTpzBiNK.js +11 -0
  23. package/apps/ui/dist/client/assets/dist-BNAn99Pu.js +1 -0
  24. package/apps/ui/dist/client/assets/download-P3Rp23Ad.js +1 -0
  25. package/apps/ui/dist/client/assets/dropdown-menu-3qB5j9nt.js +1 -0
  26. package/apps/ui/dist/client/assets/es2015-Dwm_turD.js +41 -0
  27. package/apps/ui/dist/client/assets/export-dialog-CazdrASq.js +1 -0
  28. package/apps/ui/dist/client/assets/formatters-BdnWuM1z.js +1 -0
  29. package/apps/ui/dist/client/assets/index-BVFnfS78.js +22 -0
  30. package/apps/ui/dist/client/assets/json-panel-DLkS30sQ.js +1 -0
  31. package/apps/ui/dist/client/assets/metadata-section-jnIkB7dB.js +1 -0
  32. package/apps/ui/dist/client/assets/{metric-card-BJX5rkHK.js → metric-card-CBZuWLzQ.js} +1 -1
  33. package/apps/ui/dist/client/assets/page-header-CnD21cPn.js +1 -0
  34. package/apps/ui/dist/client/assets/projects._project-BLszwvYL.js +1 -0
  35. package/apps/ui/dist/client/assets/projects._project-DvLxYbvk.js +1 -0
  36. package/apps/ui/dist/client/assets/projects.index-COn8woBR.js +1 -0
  37. package/apps/ui/dist/client/assets/projects.index-DYs98skV.js +3 -0
  38. package/apps/ui/dist/client/assets/refresh-ccw-BDrYXjtD.js +1 -0
  39. package/apps/ui/dist/client/assets/reload-error-panel-DLAg0AW2.js +1 -0
  40. package/apps/ui/dist/client/assets/routes-BtF5-coe.js +1 -0
  41. package/apps/ui/dist/client/assets/scroll-text-CqaFm9by.js +1 -0
  42. package/apps/ui/dist/client/assets/select-DbnpwqL6.js +1 -0
  43. package/apps/ui/dist/client/assets/settings-CGX3VleN.js +1 -0
  44. package/apps/ui/dist/client/assets/styles-Ch0r3kMZ.css +1 -0
  45. package/apps/ui/dist/client/assets/text-document-panel-DPleOmmq.js +1 -0
  46. package/apps/ui/dist/client/assets/text-filter-7M6wRo-t.js +2 -0
  47. package/apps/ui/dist/client/assets/threads._threadId-D5w76IB-.js +7 -0
  48. package/apps/ui/dist/client/assets/{threads._threadId-CUiCZSwo.js → threads._threadId-Dx85sI9P.js} +1 -1
  49. package/apps/ui/dist/client/assets/useMutation-MZ3Hr9h9.js +1 -0
  50. package/apps/ui/dist/client/assets/useQuery-Cb4V0AT0.js +1 -0
  51. package/apps/ui/dist/client/icon.svg +28 -0
  52. package/apps/ui/dist/client/manifest.json +6 -16
  53. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CBbkUXw6.js +227 -0
  54. package/apps/ui/dist/server/assets/{analytics-2QpLKjlG.js → analytics-CBNOYZwJ.js} +2 -2
  55. package/apps/ui/dist/server/assets/antigravity-conversation-state-HgzS302O.js +16 -0
  56. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-B9Rm4EXh.js +212 -0
  57. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BIdYNy68.js +20 -0
  58. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-D426O-64.js +11 -0
  59. package/apps/ui/dist/server/assets/antigravity-db-D9gW1D8G.js +576 -0
  60. package/apps/ui/dist/server/assets/antigravity-keychain-DOiuHDwK.js +126 -0
  61. package/apps/ui/dist/server/assets/antigravity-keychain-panel-DcLyBBwd.js +55 -0
  62. package/apps/ui/dist/server/assets/antigravity-queries-CgQhlQ7J.js +37 -0
  63. package/apps/ui/dist/server/assets/antigravity-server-DFUx4Khk.js +114 -0
  64. package/apps/ui/dist/server/assets/antigravity._workspaceKey-3m_MzNFA.js +11 -0
  65. package/apps/ui/dist/server/assets/antigravity._workspaceKey-D42ixtzp.js +210 -0
  66. package/apps/ui/dist/server/assets/antigravity._workspaceKey-DnSlSC-C.js +28 -0
  67. package/apps/ui/dist/server/assets/antigravity.index-DZVT-cac.js +104 -0
  68. package/apps/ui/dist/server/assets/antigravity.index-DudTB3Tq.js +11 -0
  69. package/apps/ui/dist/server/assets/badge-EvdhKK_Z.js +26 -0
  70. package/apps/ui/dist/server/assets/{codex-queries-BH4Cb0v3.js → codex-queries-eOJGfHQj.js} +4 -16
  71. package/apps/ui/dist/server/assets/{codex-server-DqzruLmg.js → codex-server-nrETIF--.js} +149 -140
  72. package/apps/ui/dist/server/assets/createServerRpc-BtXIw2iP.js +12 -0
  73. package/apps/ui/dist/server/assets/createSsrRpc-COf5Zuye.js +16 -0
  74. package/apps/ui/dist/server/assets/cursor-db-B7agkAvM.js +643 -0
  75. package/apps/ui/dist/server/assets/cursor-exporter-types-CI3goo-c.js +34 -0
  76. package/apps/ui/dist/server/assets/cursor-queries-BMhuJeUO.js +65 -0
  77. package/apps/ui/dist/server/assets/cursor-recovery-9bJLs7vG.js +361 -0
  78. package/apps/ui/dist/server/assets/cursor-server-BgylIFgn.js +184 -0
  79. package/apps/ui/dist/server/assets/cursor-threads._composerId-BB0Y_Mao.js +11 -0
  80. package/apps/ui/dist/server/assets/cursor-threads._composerId-BsxFKzoJ.js +218 -0
  81. package/apps/ui/dist/server/assets/cursor-threads._composerId-DXffY_CK.js +18 -0
  82. package/apps/ui/dist/server/assets/cursor-transcript-2iL3KFSK.js +125 -0
  83. package/apps/ui/dist/server/assets/cursor._workspaceKey-BP2J1x_x.js +28 -0
  84. package/apps/ui/dist/server/assets/cursor._workspaceKey-BQd0e-Pd.js +399 -0
  85. package/apps/ui/dist/server/assets/cursor._workspaceKey-nmg3YIOQ.js +11 -0
  86. package/apps/ui/dist/server/assets/cursor.index-CQVxtCm8.js +189 -0
  87. package/apps/ui/dist/server/assets/cursor.index-CcsX7DG0.js +11 -0
  88. package/apps/ui/dist/server/assets/{delete-confirm-dialog-CWqcTXTF.js → delete-confirm-dialog-PCD7S0_M.js} +5 -4
  89. package/apps/ui/dist/server/assets/download-DMmiy1xf.js +92 -0
  90. package/apps/ui/dist/server/assets/{input-B4tEzctc.js → dropdown-menu-Dy_9t6TN.js} +1 -11
  91. package/apps/ui/dist/server/assets/{download-Drctxary.js → export-dialog-DaPlOGFT.js} +1 -92
  92. package/apps/ui/dist/server/assets/json-panel-RYsxWFae.js +16 -0
  93. package/apps/ui/dist/server/assets/{loading-panel-DbLdvjtR.js → loading-panel-BGFnWseS.js} +1 -1
  94. package/apps/ui/dist/server/assets/metadata-section-D6Lbc7D6.js +54 -0
  95. package/apps/ui/dist/server/assets/page-header-VNSaM3xd.js +29 -0
  96. package/apps/ui/dist/server/assets/projects._project-Bshqk7JA.js +12 -0
  97. package/apps/ui/dist/server/assets/{projects._project-gT01HBqH.js → projects._project-DUN3iWfg.js} +4 -4
  98. package/apps/ui/dist/server/assets/{projects._project-DreIU5b0.js → projects._project-Dim9Y0kD.js} +54 -26
  99. package/apps/ui/dist/server/assets/projects.index-BLXOx5eL.js +12 -0
  100. package/apps/ui/dist/server/assets/{projects.index-BYmgSGAj.js → projects.index-DjSQK5dm.js} +23 -27
  101. package/apps/ui/dist/server/assets/{projects.index-CaplpeMy.js → reload-error-panel-BJMxY3U1.js} +5 -6
  102. package/apps/ui/dist/server/assets/{router-Qj5Kn7bl.js → router-DrDgc-LD.js} +131 -44
  103. package/apps/ui/dist/server/assets/{routes-_LbCIjtJ.js → routes-B-GlEe2C.js} +54 -39
  104. package/apps/ui/dist/server/assets/{routes-BtcXuK0x.js → routes-CNHAUMwo.js} +2 -2
  105. package/apps/ui/dist/server/assets/{settings-MvWDgc1u.js → settings-OayxIYQQ.js} +1 -1
  106. package/apps/ui/dist/server/assets/shared-CPRNYIql.js +134 -0
  107. package/apps/ui/dist/server/assets/text-document-panel-D8JbQWAn.js +23 -0
  108. package/apps/ui/dist/server/assets/text-filter-CGKxMCKt.js +36 -0
  109. package/apps/ui/dist/server/assets/{threads._threadId-DcbAJkwf.js → threads._threadId-CJzm4KrZ.js} +3 -3
  110. package/apps/ui/dist/server/assets/{threads._threadId-D5m6ypGw.js → threads._threadId-DODTYddm.js} +69 -76
  111. package/apps/ui/dist/server/server.js +77 -13
  112. package/package.json +21 -11
  113. package/src/export-cursor.ts +244 -0
  114. package/src/lib/antigravity-db.ts +936 -0
  115. package/src/lib/antigravity-exporter-types.ts +70 -0
  116. package/src/lib/antigravity-keychain.ts +203 -0
  117. package/src/lib/codex-browser-db.ts +7 -1
  118. package/src/lib/codex-browser-types.ts +22 -1
  119. package/src/lib/codex-thread-recovery.ts +202 -0
  120. package/src/lib/cursor-db.ts +1096 -0
  121. package/src/lib/cursor-exporter-types.ts +190 -0
  122. package/src/lib/cursor-exporter.ts +266 -0
  123. package/src/lib/cursor-recovery.ts +543 -0
  124. package/src/lib/cursor-transcript.ts +183 -0
  125. package/src/spiracha.ts +16 -3
  126. package/src/ui-cli.ts +2 -2
  127. package/apps/ui/dist/client/assets/checkbox-DjHij7DJ.js +0 -1
  128. package/apps/ui/dist/client/assets/delete-confirm-dialog-CIZy_LXD.js +0 -11
  129. package/apps/ui/dist/client/assets/download-DQtfva4z.js +0 -1
  130. package/apps/ui/dist/client/assets/es2015-DsDKdYCE.js +0 -41
  131. package/apps/ui/dist/client/assets/formatters-CWFrMKSn.js +0 -1
  132. package/apps/ui/dist/client/assets/index-C_-e0lDI.js +0 -22
  133. package/apps/ui/dist/client/assets/input-BbgApiqZ.js +0 -1
  134. package/apps/ui/dist/client/assets/page-header-ODLuGLAB.js +0 -1
  135. package/apps/ui/dist/client/assets/projects._project-C2Pys_bB.js +0 -1
  136. package/apps/ui/dist/client/assets/projects._project-CHvAKvlu.js +0 -1
  137. package/apps/ui/dist/client/assets/projects.index-BmwtS1x-.js +0 -1
  138. package/apps/ui/dist/client/assets/projects.index-CuLw73mt.js +0 -1
  139. package/apps/ui/dist/client/assets/routes-CfnaTOlj.js +0 -1
  140. package/apps/ui/dist/client/assets/select-B1kH_5lx.js +0 -1
  141. package/apps/ui/dist/client/assets/settings-mYTB3sso.js +0 -1
  142. package/apps/ui/dist/client/assets/styles-CMrP9Jb4.css +0 -1
  143. package/apps/ui/dist/client/assets/threads._threadId-C_47okme.js +0 -7
  144. package/apps/ui/dist/client/favicon.ico +0 -0
  145. package/apps/ui/dist/client/logo192.png +0 -0
  146. package/apps/ui/dist/client/logo512.png +0 -0
  147. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-kj_QB_26.js +0 -99
  148. package/apps/ui/dist/server/assets/page-header-CxdZM86z.js +0 -25
  149. package/apps/ui/dist/server/assets/projects._project-CLSohrBp.js +0 -26
@@ -1,81 +1,27 @@
1
- import { t as applyPathTransforms$1 } from "./path-transforms-DL2IwtYd.js";
2
1
  import { t as cn } from "./utils-C_uf36nf.js";
3
2
  import { t as Button } from "./button-CmTDnzOn.js";
4
3
  import { n as useSettings } from "./settings-store-DpEJEQ7M.js";
5
- import { a as threadSnapshotQueryOptions, c as deleteThreadFn, o as threadTranscriptQueryOptions, u as exportThreadFn } from "./codex-queries-BH4Cb0v3.js";
6
- import { t as Route } from "./threads._threadId-DcbAJkwf.js";
4
+ import { a as threadSnapshotQueryOptions, c as deleteThreadFn, o as threadTranscriptQueryOptions, u as exportThreadFn } from "./codex-queries-eOJGfHQj.js";
5
+ import { t as Route } from "./threads._threadId-CJzm4KrZ.js";
6
+ import { t as applyPathTransforms$1 } from "./path-transforms-DL2IwtYd.js";
7
7
  import { t as Checkbox$1 } from "./checkbox-C0hovF41.js";
8
8
  import { t as MetricCard } from "./metric-card-ByEeLu0r.js";
9
- import { t as PageHeader } from "./page-header-CxdZM86z.js";
9
+ import { t as PageHeader } from "./page-header-VNSaM3xd.js";
10
10
  import { a as formatModelLabel, i as formatList, n as formatBytes, r as formatDateTime, s as formatTokens, t as formatBooleanLabel } from "./formatters-FJaGZgJk.js";
11
- import { t as DeleteConfirmDialog } from "./delete-confirm-dialog-CWqcTXTF.js";
12
- import { n as downloadUrlFile, r as ExportDialog, t as downloadTextFile } from "./download-Drctxary.js";
11
+ import { n as Breadcrumbs, t as MetadataSection } from "./metadata-section-D6Lbc7D6.js";
12
+ import { n as downloadUrlFile, t as downloadTextFile } from "./download-DMmiy1xf.js";
13
+ import { t as Badge } from "./badge-EvdhKK_Z.js";
14
+ import { t as DeleteConfirmDialog } from "./delete-confirm-dialog-PCD7S0_M.js";
15
+ import { t as ExportDialog } from "./export-dialog-DaPlOGFT.js";
16
+ import { t as JsonPanel } from "./json-panel-RYsxWFae.js";
13
17
  import { useEffect, useRef, useState } from "react";
14
18
  import { Link, useNavigate } from "@tanstack/react-router";
15
19
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
20
  import { useMutation, useQuery, useQueryClient, useSuspenseQuery } from "@tanstack/react-query";
17
21
  import { Check, Copy, Download, Trash2 } from "lucide-react";
18
22
  import { cva } from "class-variance-authority";
19
- import { Slot, Tabs } from "radix-ui";
23
+ import { Tabs } from "radix-ui";
20
24
  import { useVirtualizer } from "@tanstack/react-virtual";
21
- //#region src/components/json-panel.tsx
22
- function JsonPanel({ title, value }) {
23
- return /* @__PURE__ */ jsxs("section", {
24
- className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
25
- children: [/* @__PURE__ */ jsx("h3", {
26
- className: "font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]",
27
- children: title
28
- }), /* @__PURE__ */ jsx("pre", {
29
- className: "mt-4 overflow-x-auto rounded-2xl border border-[var(--border)] bg-[var(--code-background)] p-4 text-[var(--code-foreground)] text-xs leading-5",
30
- children: JSON.stringify(value, null, 2)
31
- })]
32
- });
33
- }
34
- //#endregion
35
- //#region src/components/metadata-section.tsx
36
- function MetadataSection({ items, title }) {
37
- return /* @__PURE__ */ jsxs("section", {
38
- className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
39
- children: [/* @__PURE__ */ jsx("h3", {
40
- className: "font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]",
41
- children: title
42
- }), /* @__PURE__ */ jsx("dl", {
43
- className: "mt-4 space-y-3",
44
- children: items.map((item) => /* @__PURE__ */ jsxs("div", {
45
- className: "grid gap-1 sm:grid-cols-[11rem_1fr] sm:items-start",
46
- children: [/* @__PURE__ */ jsx("dt", {
47
- className: "font-medium text-[var(--muted-foreground)] text-xs uppercase tracking-[0.14em]",
48
- children: item.label
49
- }), /* @__PURE__ */ jsx("dd", {
50
- className: "min-w-0 text-sm leading-6",
51
- children: item.value
52
- })]
53
- }, item.label))
54
- })]
55
- });
56
- }
57
- //#endregion
58
- //#region src/components/ui/badge.tsx
59
- var badgeVariants = cva("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3", {
60
- defaultVariants: { variant: "default" },
61
- variants: { variant: {
62
- default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
63
- destructive: "bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",
64
- ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
65
- link: "text-primary underline-offset-4 [a&]:hover:underline",
66
- outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
67
- secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90"
68
- } }
69
- });
70
- function Badge({ className, variant = "default", asChild = false, ...props }) {
71
- return /* @__PURE__ */ jsx(asChild ? Slot.Root : "span", {
72
- "data-slot": "badge",
73
- "data-variant": variant,
74
- className: cn(badgeVariants({ variant }), className),
75
- ...props
76
- });
77
- }
78
- //#endregion
79
25
  //#region src/lib/path-utils.ts
80
26
  var applyPathTransforms = (text, settings, projectPath) => {
81
27
  return applyPathTransforms$1(text, {
@@ -86,9 +32,12 @@ var applyPathTransforms = (text, settings, projectPath) => {
86
32
  //#endregion
87
33
  //#region src/components/transcript-view.tsx
88
34
  var isCommentaryMessage = (event) => event.kind === "message" && event.role === "assistant" && event.phase === "commentary";
89
- var shouldShowEvent = (event, showToolCalls, showExtraEvents, showCommentary) => {
35
+ var shouldShowEvent = (event, showToolCalls, showExtraEvents, showCommentary, showUserMessages) => {
90
36
  if (isCommentaryMessage(event) && !showCommentary) return false;
91
- if (event.kind === "message") return !event.isHiddenByDefault || showExtraEvents;
37
+ if (event.kind === "message") {
38
+ if (event.role === "user" && !showUserMessages) return false;
39
+ return !event.isHiddenByDefault || showExtraEvents;
40
+ }
92
41
  if (event.kind === "tool_call" || event.kind === "tool_output") return showToolCalls;
93
42
  return showExtraEvents;
94
43
  };
@@ -261,9 +210,9 @@ function TranscriptEventCard({ assistantModel, copied, event, isSelected, showRa
261
210
  ]
262
211
  });
263
212
  }
264
- function TranscriptView({ assistantModel, events, projectPath, showCommentary, showExtraEvents, showRawJson, showToolCalls }) {
213
+ function TranscriptView({ assistantModel, events, projectPath, showCommentary, showExtraEvents, showRawJson, showToolCalls, showUserMessages = true }) {
265
214
  const { settings } = useSettings();
266
- const visibleEvents = events.filter((event) => shouldShowEvent(event, showToolCalls, showExtraEvents, showCommentary));
215
+ const visibleEvents = events.filter((event) => shouldShowEvent(event, showToolCalls, showExtraEvents, showCommentary, showUserMessages));
267
216
  const [copiedEventKeys, setCopiedEventKeys] = useState([]);
268
217
  const [copiedSelection, setCopiedSelection] = useState(false);
269
218
  const [copyErrorMessage, setCopyErrorMessage] = useState(null);
@@ -701,7 +650,7 @@ var buildTranscriptStatsItems = (snapshot) => {
701
650
  }
702
651
  ];
703
652
  };
704
- function TranscriptControls({ rawJsonDisabled = false, showCommentary, showExtraEvents, showRawJson, showToolCalls, onShowCommentaryChange, onShowExtraEventsChange, onShowRawJsonChange, onShowToolCallsChange }) {
653
+ function TranscriptControls({ rawJsonDisabled = false, showCommentary, showExtraEvents, showRawJson, showToolCalls, showUserMessages, onShowCommentaryChange, onShowExtraEventsChange, onShowRawJsonChange, onShowToolCallsChange, onShowUserMessagesChange }) {
705
654
  return /* @__PURE__ */ jsxs("div", {
706
655
  className: "flex flex-wrap gap-4 rounded-xl border border-[var(--border)] bg-[var(--panel)] px-4 py-3 shadow-[var(--panel-shadow)]",
707
656
  children: [
@@ -709,30 +658,57 @@ function TranscriptControls({ rawJsonDisabled = false, showCommentary, showExtra
709
658
  className: "flex items-center gap-2 text-sm",
710
659
  children: [/* @__PURE__ */ jsx(Checkbox$1, {
711
660
  checked: showToolCalls,
661
+ id: "transcript-show-tool-calls",
712
662
  onCheckedChange: (checked) => onShowToolCallsChange(checked === true)
713
- }), /* @__PURE__ */ jsx("span", { children: "Show tool calls" })]
663
+ }), /* @__PURE__ */ jsx("label", {
664
+ htmlFor: "transcript-show-tool-calls",
665
+ children: "Show tool calls"
666
+ })]
714
667
  }),
715
668
  /* @__PURE__ */ jsxs("div", {
716
669
  className: "flex items-center gap-2 text-sm",
717
670
  children: [/* @__PURE__ */ jsx(Checkbox$1, {
718
671
  checked: showCommentary,
672
+ id: "transcript-show-commentary",
719
673
  onCheckedChange: (checked) => onShowCommentaryChange(checked === true)
720
- }), /* @__PURE__ */ jsx("span", { children: "Show commentary" })]
674
+ }), /* @__PURE__ */ jsx("label", {
675
+ htmlFor: "transcript-show-commentary",
676
+ children: "Show commentary"
677
+ })]
721
678
  }),
722
679
  /* @__PURE__ */ jsxs("div", {
723
680
  className: "flex items-center gap-2 text-sm",
724
681
  children: [/* @__PURE__ */ jsx(Checkbox$1, {
725
682
  checked: showExtraEvents,
683
+ id: "transcript-show-extra-events",
726
684
  onCheckedChange: (checked) => onShowExtraEventsChange(checked === true)
727
- }), /* @__PURE__ */ jsx("span", { children: "Show extra events" })]
685
+ }), /* @__PURE__ */ jsx("label", {
686
+ htmlFor: "transcript-show-extra-events",
687
+ children: "Show extra events"
688
+ })]
728
689
  }),
729
690
  /* @__PURE__ */ jsxs("div", {
730
691
  className: "flex items-center gap-2 text-sm",
731
692
  children: [/* @__PURE__ */ jsx(Checkbox$1, {
732
693
  checked: showRawJson,
733
694
  disabled: rawJsonDisabled,
695
+ id: "transcript-show-raw-json",
734
696
  onCheckedChange: (checked) => onShowRawJsonChange(checked === true)
735
- }), /* @__PURE__ */ jsx("span", { children: "Raw JSON" })]
697
+ }), /* @__PURE__ */ jsx("label", {
698
+ htmlFor: "transcript-show-raw-json",
699
+ children: "Raw JSON"
700
+ })]
701
+ }),
702
+ /* @__PURE__ */ jsxs("div", {
703
+ className: "flex items-center gap-2 text-sm",
704
+ children: [/* @__PURE__ */ jsx(Checkbox$1, {
705
+ checked: showUserMessages,
706
+ id: "transcript-show-user-messages",
707
+ onCheckedChange: (checked) => onShowUserMessagesChange(checked === true)
708
+ }), /* @__PURE__ */ jsx("label", {
709
+ htmlFor: "transcript-show-user-messages",
710
+ children: "User"
711
+ })]
736
712
  })
737
713
  ]
738
714
  });
@@ -854,6 +830,7 @@ function ThreadDetailPage() {
854
830
  const [showCommentary, setShowCommentary] = useState(false);
855
831
  const [showExtraEvents, setShowExtraEvents] = useState(false);
856
832
  const [showRawJson, setShowRawJson] = useState(false);
833
+ const [showUserMessages, setShowUserMessages] = useState(true);
857
834
  const [exportOpen, setExportOpen] = useState(false);
858
835
  const [deleteOpen, setDeleteOpen] = useState(false);
859
836
  const transcriptQuery = useQuery({
@@ -936,6 +913,18 @@ function ThreadDetailPage() {
936
913
  onClick: () => setDeleteOpen(true),
937
914
  children: [/* @__PURE__ */ jsx(Trash2, { className: "mr-2 size-4" }), "Delete"]
938
915
  })] }),
916
+ breadcrumb: /* @__PURE__ */ jsx(Breadcrumbs, { items: [
917
+ {
918
+ label: "Codex",
919
+ to: "/projects"
920
+ },
921
+ {
922
+ label: snapshot.project,
923
+ params: { project: snapshot.project },
924
+ to: "/projects/$project"
925
+ },
926
+ { label: snapshot.thread.title }
927
+ ] }),
939
928
  eyebrow: snapshot.project,
940
929
  subtitle: snapshot.thread.preview,
941
930
  title: snapshot.thread.title
@@ -998,10 +987,12 @@ function ThreadDetailPage() {
998
987
  showExtraEvents,
999
988
  showRawJson,
1000
989
  showToolCalls,
990
+ showUserMessages,
1001
991
  onShowCommentaryChange: setShowCommentary,
1002
992
  onShowExtraEventsChange: setShowExtraEvents,
1003
993
  onShowRawJsonChange: setShowRawJson,
1004
- onShowToolCallsChange: setShowToolCalls
994
+ onShowToolCallsChange: setShowToolCalls,
995
+ onShowUserMessagesChange: setShowUserMessages
1005
996
  }),
1006
997
  transcript ? /* @__PURE__ */ jsx(TranscriptView, {
1007
998
  assistantModel: snapshot.thread.model,
@@ -1010,7 +1001,8 @@ function ThreadDetailPage() {
1010
1001
  showCommentary,
1011
1002
  showExtraEvents,
1012
1003
  showRawJson: showRawJson && transcript.rawIncluded,
1013
- showToolCalls
1004
+ showToolCalls,
1005
+ showUserMessages
1014
1006
  }) : /* @__PURE__ */ jsx(DeferredTranscriptNotice, {
1015
1007
  fileSizeBytes: snapshot.rollout.fileSizeBytes,
1016
1008
  missing: snapshot.transcriptState === "missing",
@@ -1039,6 +1031,7 @@ function ThreadDetailPage() {
1039
1031
  }),
1040
1032
  /* @__PURE__ */ jsx(DeleteConfirmDialog, {
1041
1033
  confirmLabel: deleteThreadMutation.isPending ? "Deleting..." : "Delete thread",
1034
+ defaultDeleteSessionFiles: true,
1042
1035
  description: "Delete this thread from the Codex database. Enable Delete Session files if you also want to remove the rollout JSONL from disk.",
1043
1036
  open: deleteOpen,
1044
1037
  showDeleteSessionFilesOption: true,
@@ -3454,7 +3454,7 @@ var defaultSerovalPlugins = [
3454
3454
  * the dev styles URL for route-scoped CSS collection.
3455
3455
  */
3456
3456
  async function getStartManifest(matchedRoutes) {
3457
- const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-kj_QB_26.js");
3457
+ const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-CBbkUXw6.js");
3458
3458
  const startManifest = tsrStartManifest();
3459
3459
  let routes = startManifest.routes;
3460
3460
  routes[rootRouteId];
@@ -3479,49 +3479,113 @@ async function getStartManifest(matchedRoutes) {
3479
3479
  //#endregion
3480
3480
  //#region \0%23tanstack-start-server-fn-resolver
3481
3481
  var manifest = {
3482
+ "03050b86e5481024283bee890347a9da7b2493493044dcde6df989b3334d6b73": {
3483
+ functionName: "exportCursorThreadFn_createServerFn_handler",
3484
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3485
+ },
3482
3486
  "0814663c3bdc58135f97d210d145ef0be5ca54ef9a5f1e3030be9b1bfc901e30": {
3483
3487
  functionName: "exportThreadFn_createServerFn_handler",
3484
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3488
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3489
+ },
3490
+ "0c4c2059bb3a8a71939f93494402a63168932a544e55a462e42679647762f936": {
3491
+ functionName: "exportAntigravityArtifactsFn_createServerFn_handler",
3492
+ importer: () => import("./assets/antigravity-server-DFUx4Khk.js")
3485
3493
  },
3486
3494
  "164ee82cdd565ed96591a64312f0f7bd961040baf066a89d9f5636330d11360b": {
3487
3495
  functionName: "deleteProjectFn_createServerFn_handler",
3488
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3496
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3497
+ },
3498
+ "17afb84da4a3d5022132756ead0adaf0323660f50fc58d7f14830b01fdd59a13": {
3499
+ functionName: "deleteCursorThreadsFn_createServerFn_handler",
3500
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3501
+ },
3502
+ "229f5293a4eb8237ac97fc2c9a19c31740139aaed41a44d336d77f75584dbd90": {
3503
+ functionName: "getAntigravityConversationDetailFn_createServerFn_handler",
3504
+ importer: () => import("./assets/antigravity-server-DFUx4Khk.js")
3505
+ },
3506
+ "23fb197bac88fb9e4950ef7608cd311d67c0867e424136c8373071dc54746806": {
3507
+ functionName: "listCursorThreadsFn_createServerFn_handler",
3508
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3489
3509
  },
3490
3510
  "29727b7ad5b8fe42e83817376653e064d9fe8888799f056b2e59296b3396568b": {
3491
3511
  functionName: "deleteThreadFn_createServerFn_handler",
3492
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3512
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3513
+ },
3514
+ "37acb5a1f0915c7b996d6cf9682243d5a3446fe26a60f12bfacf60ce772b0f49": {
3515
+ functionName: "getAntigravityDecryptionStateFn_createServerFn_handler",
3516
+ importer: () => import("./assets/antigravity-server-DFUx4Khk.js")
3517
+ },
3518
+ "412c05e00aef3ad43905593fdfd2f566561259da7e1f5d6f1c03428ff33c6867": {
3519
+ functionName: "recoverProjectThreadsFn_createServerFn_handler",
3520
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3493
3521
  },
3494
3522
  "4712520da0f07bbd1f0907e5a162fe518516ff4caca3fd23876cc65539d87d7a": {
3495
3523
  functionName: "getAnalyticsFn_createServerFn_handler",
3496
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3524
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3525
+ },
3526
+ "50ab3a39f9880771d0d9b15931e46bcf0c4915077e38a7b6bf8605fde065256e": {
3527
+ functionName: "listAntigravityWorkspacesFn_createServerFn_handler",
3528
+ importer: () => import("./assets/antigravity-server-DFUx4Khk.js")
3497
3529
  },
3498
3530
  "59fb2cb4d60c8e7d47e0afcc914ee6f9d9f4bf076c8e66eab1693066753655b3": {
3499
3531
  functionName: "listProjectThreadsFn_createServerFn_handler",
3500
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3532
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3501
3533
  },
3502
3534
  "5da27045f7e28ded6353bc16aace284af7ef1b4010ef04d0186a6feadb466497": {
3503
3535
  functionName: "getThreadTranscriptFn_createServerFn_handler",
3504
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3536
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3537
+ },
3538
+ "6a3fe93f3095ec985bb39f45eacb221bd1b77a5d53cbb96fda99caa0fcce7e4e": {
3539
+ functionName: "listAntigravityConversationsFn_createServerFn_handler",
3540
+ importer: () => import("./assets/antigravity-server-DFUx4Khk.js")
3541
+ },
3542
+ "6e893e740c05aad65a8eb32901b4c39277ebf718f0ba14b04d8df989bed2f32b": {
3543
+ functionName: "getCursorThreadDetailFn_createServerFn_handler",
3544
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3505
3545
  },
3506
3546
  "72991e2b6e0adbf8d63bb8b139dad88a00b77b7030ec28ceac36c3cce7846b4c": {
3507
3547
  functionName: "getThreadSnapshotFn_createServerFn_handler",
3508
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3548
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3509
3549
  },
3510
3550
  "792690638a3b10035a5b7368c3d98bdc70cbfe1e36a4aa5f45b1c49b8b1025b0": {
3511
3551
  functionName: "getDashboardSummaryFn_createServerFn_handler",
3512
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3552
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3553
+ },
3554
+ "8fcf452a4587a4d4dc0c2f6439255e98123f23d863ca0e861403ae2a687272f2": {
3555
+ functionName: "listCursorWorkspacesFn_createServerFn_handler",
3556
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3513
3557
  },
3514
3558
  "96aa60bf7dd9b5bde415bcf3ad6f6955a975eecd9aa0516cf401cc39bebebe6c": {
3515
3559
  functionName: "deleteThreadsFn_createServerFn_handler",
3516
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3560
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3561
+ },
3562
+ "a6261a774fd8e76a6be777fcbb951977db16f33922519ed880097cea035e9034": {
3563
+ functionName: "exportAntigravityConversationFn_createServerFn_handler",
3564
+ importer: () => import("./assets/antigravity-server-DFUx4Khk.js")
3565
+ },
3566
+ "a9bd5d510f2d1173d2ef610dda4d59a795af17e7c2a4affaba7e1f99822b2c40": {
3567
+ functionName: "recoverCursorWorkspaceFn_createServerFn_handler",
3568
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3517
3569
  },
3518
3570
  "b4e15c006e9a277470958bb008f89b5b0acc7256109581de44cf17d587d174a5": {
3519
3571
  functionName: "exportThreadsFn_createServerFn_handler",
3520
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3572
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3521
3573
  },
3522
3574
  "ccefccb816ba13508f23db4e31067b3403e750225257592d3ae11071ffc3fd6f": {
3523
3575
  functionName: "listProjectsFn_createServerFn_handler",
3524
- importer: () => import("./assets/codex-server-DqzruLmg.js")
3576
+ importer: () => import("./assets/codex-server-nrETIF--.js")
3577
+ },
3578
+ "e266948869e9a4ae03c84b8a7db1bfa945fdb440c5e1c64ae826b1302e441885": {
3579
+ functionName: "unlockAntigravityDecryptionFn_createServerFn_handler",
3580
+ importer: () => import("./assets/antigravity-server-DFUx4Khk.js")
3581
+ },
3582
+ "e9609d5ab12ea0bc4dbd3289fad95417dd01a0a719c8ee588c0b8c8a9dc80c99": {
3583
+ functionName: "exportCursorThreadsFn_createServerFn_handler",
3584
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3585
+ },
3586
+ "fc72eb7835fc18130f6d7c20e15e560320521cd01c93e08667b340bfe6b90930": {
3587
+ functionName: "deleteCursorWorkspaceFn_createServerFn_handler",
3588
+ importer: () => import("./assets/cursor-server-BgylIFgn.js")
3525
3589
  }
3526
3590
  };
3527
3591
  async function getServerFnById(id, access) {
@@ -5311,7 +5375,7 @@ var getBaseManifest = getProdBaseManifest;
5311
5375
  var createEarlyHintsForRequest = createEarlyHintsCollector;
5312
5376
  async function loadEntries() {
5313
5377
  const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
5314
- import("./assets/router-Qj5Kn7bl.js"),
5378
+ import("./assets/router-DrDgc-LD.js"),
5315
5379
  import("./assets/start-HeKLHD9b.js"),
5316
5380
  import("./assets/__23tanstack-start-plugin-adapters-BzCA6dXo.js")
5317
5381
  ]);
package/package.json CHANGED
@@ -12,31 +12,31 @@
12
12
  "url": "https://github.com/ragaeeb/spiracha/issues"
13
13
  },
14
14
  "dependencies": {
15
- "@inquirer/prompts": "^8.5.0",
15
+ "@inquirer/prompts": "^8.5.2",
16
16
  "@modelcontextprotocol/sdk": "^1.29.0",
17
17
  "@tanstack/react-query": "5.100.14",
18
- "@tanstack/react-router": "1.170.8",
19
- "@tanstack/react-router-ssr-query": "1.167.0",
18
+ "@tanstack/react-router": "1.170.10",
19
+ "@tanstack/react-router-ssr-query": "1.167.1",
20
20
  "@tanstack/react-table": "8.21.3",
21
21
  "@tanstack/react-virtual": "3.13.26",
22
22
  "class-variance-authority": "0.7.1",
23
23
  "clsx": "2.1.1",
24
24
  "iconv-lite": "^0.7.2",
25
- "lucide-react": "1.16.0",
25
+ "lucide-react": "1.17.0",
26
26
  "radix-ui": "1.4.3",
27
27
  "react": "19.2.6",
28
28
  "react-dom": "19.2.6",
29
29
  "tailwind-merge": "3.6.0",
30
- "zod": "^4.4.3"
30
+ "zod": "4.4.3"
31
31
  },
32
- "description": "Export local Codex chats and Claude Code transcripts to Markdown or plain text.",
32
+ "description": "Export local Codex, Claude Code, and Cursor transcripts, and browse Codex, Cursor, and Antigravity history through a local UI.",
33
33
  "devDependencies": {
34
34
  "@types/bun": "^1.3.14",
35
35
  "@types/node": "^25.9.1",
36
36
  "typescript": "^6.0.3"
37
37
  },
38
38
  "engines": {
39
- "bun": ">=1.3.13"
39
+ "bun": ">=1.3.14"
40
40
  },
41
41
  "files": [
42
42
  "bin/codex-chats.js",
@@ -44,10 +44,19 @@
44
44
  "bin/spiracha.js",
45
45
  "src/export-chats.ts",
46
46
  "src/export-claude.ts",
47
+ "src/export-cursor.ts",
47
48
  "src/mcp-server.ts",
48
49
  "src/spiracha.ts",
49
50
  "src/ui-cli.ts",
51
+ "src/lib/antigravity-db.ts",
52
+ "src/lib/antigravity-exporter-types.ts",
53
+ "src/lib/antigravity-keychain.ts",
50
54
  "src/lib/claude-exporter.ts",
55
+ "src/lib/cursor-db.ts",
56
+ "src/lib/cursor-exporter.ts",
57
+ "src/lib/cursor-exporter-types.ts",
58
+ "src/lib/cursor-recovery.ts",
59
+ "src/lib/cursor-transcript.ts",
51
60
  "src/lib/codex-exporter-cli.ts",
52
61
  "src/lib/codex-exporter-db.ts",
53
62
  "src/lib/codex-exporter-transcript.ts",
@@ -56,6 +65,7 @@
56
65
  "src/lib/codex-browser-db.ts",
57
66
  "src/lib/codex-browser-export.ts",
58
67
  "src/lib/codex-browser-types.ts",
68
+ "src/lib/codex-thread-recovery.ts",
59
69
  "src/lib/codex-thread-cache.ts",
60
70
  "src/lib/codex-thread-parser.ts",
61
71
  "src/lib/codex-analytics.ts",
@@ -69,9 +79,7 @@
69
79
  "src/lib/native-open.ts",
70
80
  "src/lib/shared.ts",
71
81
  "apps/ui/dist/client/assets/**/*",
72
- "apps/ui/dist/client/favicon.ico",
73
- "apps/ui/dist/client/logo192.png",
74
- "apps/ui/dist/client/logo512.png",
82
+ "apps/ui/dist/client/icon.svg",
75
83
  "apps/ui/dist/client/manifest.json",
76
84
  "apps/ui/dist/client/robots.txt",
77
85
  "apps/ui/dist/server/**/*",
@@ -82,6 +90,8 @@
82
90
  "keywords": [
83
91
  "codex",
84
92
  "claude",
93
+ "cursor",
94
+ "antigravity",
85
95
  "transcripts",
86
96
  "export",
87
97
  "markdown",
@@ -112,7 +122,7 @@
112
122
  "ui:preview": "bun run --cwd apps/ui preview"
113
123
  },
114
124
  "type": "module",
115
- "version": "1.2.0",
125
+ "version": "1.3.2",
116
126
  "workspaces": [
117
127
  "apps/*"
118
128
  ]