spiracha 1.3.3 → 1.4.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.
Files changed (158) hide show
  1. package/AGENTS.md +7 -1
  2. package/README.md +6 -0
  3. package/apps/ui/AGENTS.md +8 -0
  4. package/apps/ui/README.md +10 -3
  5. package/apps/ui/dist/client/assets/analytics-DK2jdvmI.js +1 -0
  6. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DmD0sN8X.js +7 -0
  7. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-KAcXtNxI.js +1 -0
  8. package/apps/ui/dist/client/assets/antigravity-keychain-panel-BRHVjFAM.js +1 -0
  9. package/apps/ui/dist/client/assets/antigravity._workspaceKey-ByitGWki.js +1 -0
  10. package/apps/ui/dist/client/assets/antigravity._workspaceKey-CGV7amas.js +1 -0
  11. package/apps/ui/dist/client/assets/antigravity.index-DEEkjlZa.js +1 -0
  12. package/apps/ui/dist/client/assets/antigravity.index-DgW25FEV.js +1 -0
  13. package/apps/ui/dist/client/assets/badge-DfWvPfKF.js +1 -0
  14. package/apps/ui/dist/client/assets/checkbox-CdHitXWQ.js +1 -0
  15. package/apps/ui/dist/client/assets/createServerFn-CgRRVpBH.js +3 -0
  16. package/apps/ui/dist/client/assets/cursor-threads._composerId-CmBFclK8.js +1 -0
  17. package/apps/ui/dist/client/assets/cursor-threads._composerId-Ti2gTm63.js +1 -0
  18. package/apps/ui/dist/client/assets/cursor._workspaceKey-CaAZjGmm.js +1 -0
  19. package/apps/ui/dist/client/assets/cursor._workspaceKey-DzD_c6j9.js +1 -0
  20. package/apps/ui/dist/client/assets/cursor.index-CrnMwDCi.js +1 -0
  21. package/apps/ui/dist/client/assets/cursor.index-PkCFVcl4.js +2 -0
  22. package/apps/ui/dist/client/assets/{data-table-DeQq8xdt.js → data-table-Br78_dk3.js} +2 -2
  23. package/apps/ui/dist/client/assets/delete-confirm-dialog-BHRmyLHr.js +11 -0
  24. package/apps/ui/dist/client/assets/dist-B9pyYCVU.js +1 -0
  25. package/apps/ui/dist/client/assets/dist-BhZOxAPP.js +1 -0
  26. package/apps/ui/dist/client/assets/dist-DvMS2965.js +1 -0
  27. package/apps/ui/dist/client/assets/download-Bf0QJKD3.js +1 -0
  28. package/apps/ui/dist/client/assets/dropdown-menu-Dy5cLzTy.js +1 -0
  29. package/apps/ui/dist/client/assets/es2015-BkCWttyM.js +41 -0
  30. package/apps/ui/dist/client/assets/export-dialog-C86SYHJn.js +1 -0
  31. package/apps/ui/dist/client/assets/formatters-BM9kB7ed.js +1 -0
  32. package/apps/ui/dist/client/assets/index-CPvAP-jk.js +149 -0
  33. package/apps/ui/dist/client/assets/jsx-runtime-DGeXAQPT.js +1 -0
  34. package/apps/ui/dist/client/assets/metric-card-Dplm0ZiM.js +1 -0
  35. package/apps/ui/dist/client/assets/page-header-Cwa3p6Tl.js +1 -0
  36. package/apps/ui/dist/client/assets/projects._project-Ckf6muWZ.js +1 -0
  37. package/apps/ui/dist/client/assets/projects._project-DSDwH4NF.js +1 -0
  38. package/apps/ui/dist/client/assets/projects.index-DEfhWqa8.js +1 -0
  39. package/apps/ui/dist/client/assets/projects.index-V5ibNZII.js +3 -0
  40. package/apps/ui/dist/client/assets/react-dom-DL96Jor4.js +1 -0
  41. package/apps/ui/dist/client/assets/refresh-ccw-BgKjOiA6.js +1 -0
  42. package/apps/ui/dist/client/assets/reload-error-panel-AHqu0akK.js +1 -0
  43. package/apps/ui/dist/client/assets/routes-Df2tgpyd.js +1 -0
  44. package/apps/ui/dist/client/assets/scroll-text-fM0sMOB3.js +1 -0
  45. package/apps/ui/dist/client/assets/select-Bf2GwfPR.js +1 -0
  46. package/apps/ui/dist/client/assets/settings-5VQIzME0.js +1 -0
  47. package/apps/ui/dist/client/assets/sqlite-error-B6uZjUe8.js +1 -0
  48. package/apps/ui/dist/client/assets/styles-BhRkXgwB.css +1 -0
  49. package/apps/ui/dist/client/assets/tabs-OO4VU5KR.js +7 -0
  50. package/apps/ui/dist/client/assets/text-filter-DVAZySUS.js +2 -0
  51. package/apps/ui/dist/client/assets/threads._threadId-BB9tTsV4.js +1 -0
  52. package/apps/ui/dist/client/assets/threads._threadId-BgDhFj2I.js +1 -0
  53. package/apps/ui/dist/client/assets/useMutation-CC_B7uy5.js +1 -0
  54. package/apps/ui/dist/client/assets/useQuery-C5By6WKU.js +1 -0
  55. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CRW2kqj0.js +232 -0
  56. package/apps/ui/dist/server/assets/analytics-CYP_LT5Y.js +16 -0
  57. package/apps/ui/dist/server/assets/{analytics-Dc_QDZZC.js → analytics-CtpOMVMO.js} +13 -6
  58. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BtexWY-K.js +613 -0
  59. package/apps/ui/dist/server/assets/{antigravity-conversations._conversationId-C9z4AeN-.js → antigravity-conversations._conversationId-zMrR6v6R.js} +2 -2
  60. package/apps/ui/dist/server/assets/{antigravity-db-D9gW1D8G.js → antigravity-db-Bh8_U9uw.js} +11 -7
  61. package/apps/ui/dist/server/assets/{antigravity-keychain-panel-bpPoxhyp.js → antigravity-keychain-panel-CC7FLmAK.js} +1 -1
  62. package/apps/ui/dist/server/assets/{antigravity-queries-DVIKyOXi.js → antigravity-queries-CGrJO9Vr.js} +5 -5
  63. package/apps/ui/dist/server/assets/{antigravity-server-Cp1lc8fp.js → antigravity-server-CHRjVFqN.js} +11 -11
  64. package/apps/ui/dist/server/assets/{antigravity._workspaceKey-Dl8o1ptg.js → antigravity._workspaceKey-B0QeYUOh.js} +2 -2
  65. package/apps/ui/dist/server/assets/{antigravity._workspaceKey-BAoa4izU.js → antigravity._workspaceKey-C3kP-qyN.js} +4 -4
  66. package/apps/ui/dist/server/assets/{antigravity.index-BOlrJasZ.js → antigravity.index-CPCYkqCi.js} +2 -2
  67. package/apps/ui/dist/server/assets/{codex-queries-ev_mRUzr.js → codex-queries-CtgeZ7VL.js} +15 -13
  68. package/apps/ui/dist/server/assets/{codex-server-DIYFLozB.js → codex-server-CNXSJuc2.js} +104 -119
  69. package/apps/ui/dist/server/assets/concurrency-VXtYvlGh.js +18 -0
  70. package/apps/ui/dist/server/assets/{createServerRpc-Cg-Zr1rq.js → createServerRpc-CF_DEwnm.js} +1 -1
  71. package/apps/ui/dist/server/assets/{createSsrRpc-DVnVQhGx.js → createSsrRpc-C754NPki.js} +1 -1
  72. package/apps/ui/dist/server/assets/{cursor-db-B7agkAvM.js → cursor-db-cYZEU3WQ.js} +194 -7
  73. package/apps/ui/dist/server/assets/{cursor-queries-f7DjBKSD.js → cursor-queries-NCIM0Nat.js} +12 -10
  74. package/apps/ui/dist/server/assets/{cursor-recovery-9bJLs7vG.js → cursor-recovery-nq-kR62j.js} +1 -1
  75. package/apps/ui/dist/server/assets/{cursor-server-nPzojHN3.js → cursor-server-C3q7hrp-.js} +70 -41
  76. package/apps/ui/dist/server/assets/{cursor-threads._composerId-B3qcsh9C.js → cursor-threads._composerId-BPJFWfJj.js} +2 -2
  77. package/apps/ui/dist/server/assets/cursor-threads._composerId-BkMMTQ3v.js +582 -0
  78. package/apps/ui/dist/server/assets/{cursor._workspaceKey-BL_CQyHQ.js → cursor._workspaceKey-C5PdTaKB.js} +2 -2
  79. package/apps/ui/dist/server/assets/{cursor._workspaceKey-BhQeepXB.js → cursor._workspaceKey-Ckj7apKI.js} +11 -9
  80. package/apps/ui/dist/server/assets/{cursor.index-CsrdckZD.js → cursor.index-DkWT-mxw.js} +2 -2
  81. package/apps/ui/dist/server/assets/{delete-confirm-dialog-PCD7S0_M.js → delete-confirm-dialog-BcBNCxWB.js} +5 -1
  82. package/apps/ui/dist/server/assets/{empty-plugin-adapters-D3qLMPfC.js → empty-plugin-adapters-B3lHh1La.js} +1 -1
  83. package/apps/ui/dist/server/assets/{export-dialog-DaPlOGFT.js → export-dialog-BItjWgkZ.js} +53 -11
  84. package/apps/ui/dist/server/assets/{projects._project-CqqUFr4l.js → projects._project-Bpbc3C-L.js} +5 -3
  85. package/apps/ui/dist/server/assets/{projects._project-DahGqNYS.js → projects._project-CvZho6EQ.js} +42 -12
  86. package/apps/ui/dist/server/assets/{projects.index-CkTeFWNU.js → projects.index-BkLiF2FF.js} +21 -7
  87. package/apps/ui/dist/server/assets/projects.index-DesYXwfi.js +14 -0
  88. package/apps/ui/dist/server/assets/route-search-ts4W9MJ9.js +38 -0
  89. package/apps/ui/dist/server/assets/{router-K0m7dK4T.js → router-6m-ihwqA.js} +78 -62
  90. package/apps/ui/dist/server/assets/{routes-Xix3ZeSo.js → routes-Bsact1uB.js} +2 -2
  91. package/apps/ui/dist/server/assets/{routes-0x1U0IHq.js → routes-BzkJgq4W.js} +2 -2
  92. package/apps/ui/dist/server/assets/start-CI_0bSiY.js +4 -0
  93. package/apps/ui/dist/server/assets/tabs-CGA13IZM.js +502 -0
  94. package/apps/ui/dist/server/assets/{threads._threadId-BLCkGW--.js → threads._threadId-Bs0yuqO9.js} +2 -2
  95. package/apps/ui/dist/server/assets/threads._threadId-D2GYkVn6.js +639 -0
  96. package/apps/ui/dist/server/assets/ui-export-files-BHLX9bhN.js +83 -0
  97. package/apps/ui/dist/server/server.js +93 -83
  98. package/package.json +9 -9
  99. package/src/lib/antigravity-db.ts +20 -13
  100. package/src/lib/codex-analytics.ts +118 -18
  101. package/src/lib/codex-browser-db.ts +1 -25
  102. package/src/lib/codex-browser-export.ts +9 -69
  103. package/src/lib/cursor-db.ts +318 -7
  104. package/src/lib/cursor-exporter.ts +2 -2
  105. package/src/lib/ui-cache.ts +14 -1
  106. package/apps/ui/dist/client/assets/analytics-C83LcWNb.js +0 -1
  107. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DkY8EEpK.js +0 -1
  108. package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-OraHuz8j.js +0 -1
  109. package/apps/ui/dist/client/assets/antigravity-keychain-panel-DnDcq1ge.js +0 -1
  110. package/apps/ui/dist/client/assets/antigravity._workspaceKey-CQaZscA5.js +0 -1
  111. package/apps/ui/dist/client/assets/antigravity._workspaceKey-DTs99obU.js +0 -1
  112. package/apps/ui/dist/client/assets/antigravity.index-DbJa715k.js +0 -1
  113. package/apps/ui/dist/client/assets/antigravity.index-P-rs6w5X.js +0 -1
  114. package/apps/ui/dist/client/assets/badge-wgTVp-aq.js +0 -1
  115. package/apps/ui/dist/client/assets/checkbox-BUx0Gkuf.js +0 -1
  116. package/apps/ui/dist/client/assets/cursor-threads._composerId-D0DFXt8t.js +0 -1
  117. package/apps/ui/dist/client/assets/cursor-threads._composerId-tFa6Cf6A.js +0 -1
  118. package/apps/ui/dist/client/assets/cursor._workspaceKey-Df4PfA2k.js +0 -1
  119. package/apps/ui/dist/client/assets/cursor._workspaceKey-DwrzEtnV.js +0 -1
  120. package/apps/ui/dist/client/assets/cursor.index-CNBf4ZiR.js +0 -1
  121. package/apps/ui/dist/client/assets/cursor.index-DP9Hy8X6.js +0 -2
  122. package/apps/ui/dist/client/assets/delete-confirm-dialog-CPlNsLhM.js +0 -11
  123. package/apps/ui/dist/client/assets/dist-Ds3kS91l.js +0 -1
  124. package/apps/ui/dist/client/assets/download-DLuPnxpV.js +0 -1
  125. package/apps/ui/dist/client/assets/dropdown-menu-lFk6zjoL.js +0 -1
  126. package/apps/ui/dist/client/assets/es2015-D-H_iZF6.js +0 -41
  127. package/apps/ui/dist/client/assets/export-dialog-CyqyvwiP.js +0 -1
  128. package/apps/ui/dist/client/assets/formatters-DbCKP02D.js +0 -1
  129. package/apps/ui/dist/client/assets/index-C-ZPpKJ0.js +0 -22
  130. package/apps/ui/dist/client/assets/json-panel-BsngvucB.js +0 -1
  131. package/apps/ui/dist/client/assets/metadata-section-Dtl8dNag.js +0 -1
  132. package/apps/ui/dist/client/assets/metric-card-DNzR1Rne.js +0 -1
  133. package/apps/ui/dist/client/assets/page-header-dha_O7ZL.js +0 -1
  134. package/apps/ui/dist/client/assets/projects._project-B7HBhbXv.js +0 -1
  135. package/apps/ui/dist/client/assets/projects._project-DHVvuT7A.js +0 -1
  136. package/apps/ui/dist/client/assets/projects.index-BUUtx2AZ.js +0 -1
  137. package/apps/ui/dist/client/assets/projects.index-BojAe1Y4.js +0 -3
  138. package/apps/ui/dist/client/assets/refresh-ccw-B-ASKHtx.js +0 -1
  139. package/apps/ui/dist/client/assets/reload-error-panel-DD8M1BIY.js +0 -1
  140. package/apps/ui/dist/client/assets/routes-q7bzFp35.js +0 -1
  141. package/apps/ui/dist/client/assets/scroll-text-TvHyiJ_N.js +0 -1
  142. package/apps/ui/dist/client/assets/select-BFv1HMiT.js +0 -1
  143. package/apps/ui/dist/client/assets/settings-CvegTo4F.js +0 -1
  144. package/apps/ui/dist/client/assets/styles-Ch0r3kMZ.css +0 -1
  145. package/apps/ui/dist/client/assets/text-document-panel-D7Rws41o.js +0 -1
  146. package/apps/ui/dist/client/assets/text-filter-2q5pEoZh.js +0 -2
  147. package/apps/ui/dist/client/assets/threads._threadId-LpZVUlPq.js +0 -7
  148. package/apps/ui/dist/client/assets/threads._threadId-MSmNIBkq.js +0 -1
  149. package/apps/ui/dist/client/assets/useMutation-BOPJU9e0.js +0 -1
  150. package/apps/ui/dist/client/assets/useQuery-CbxZiVGF.js +0 -1
  151. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-zvGzK-Yx.js +0 -229
  152. package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-JEhx-f2R.js +0 -212
  153. package/apps/ui/dist/server/assets/cursor-threads._composerId-BK3iW-3e.js +0 -218
  154. package/apps/ui/dist/server/assets/json-panel-RYsxWFae.js +0 -16
  155. package/apps/ui/dist/server/assets/metadata-section-D6Lbc7D6.js +0 -54
  156. package/apps/ui/dist/server/assets/start-bX7bXjzw.js +0 -4
  157. package/apps/ui/dist/server/assets/text-document-panel-D8JbQWAn.js +0 -23
  158. package/apps/ui/dist/server/assets/threads._threadId-LjgsGUh-.js +0 -1052
@@ -1,5 +1,5 @@
1
- import { n as dashboardQueryOptions } from "./codex-queries-ev_mRUzr.js";
2
- import { t as Route } from "./routes-0x1U0IHq.js";
1
+ import { n as dashboardQueryOptions } from "./codex-queries-CtgeZ7VL.js";
2
+ import { t as Route } from "./routes-BzkJgq4W.js";
3
3
  import { t as MetricCard } from "./metric-card-ByEeLu0r.js";
4
4
  import { t as PageHeader } from "./page-header-VNSaM3xd.js";
5
5
  import { o as formatNumber, r as formatDateTime, s as formatTokens } from "./formatters-FJaGZgJk.js";
@@ -1,8 +1,8 @@
1
- import { n as dashboardQueryOptions } from "./codex-queries-ev_mRUzr.js";
1
+ import { n as dashboardQueryOptions } from "./codex-queries-CtgeZ7VL.js";
2
2
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/routes/index.tsx
5
- var $$splitComponentImporter = () => import("./routes-Xix3ZeSo.js");
5
+ var $$splitComponentImporter = () => import("./routes-Bsact1uB.js");
6
6
  var Route = createFileRoute("/")({
7
7
  component: lazyRouteComponent($$splitComponentImporter, "component"),
8
8
  loader: ({ context }) => context.queryClient.ensureQueryData(dashboardQueryOptions())
@@ -0,0 +1,4 @@
1
+ //#region ../../node_modules/.bun/@tanstack+react-start@1.168.25+1e4c23dcb33f1092/node_modules/@tanstack/react-start/dist/plugin/default-entry/start.ts
2
+ var startInstance = void 0;
3
+ //#endregion
4
+ export { startInstance };
@@ -0,0 +1,502 @@
1
+ import { t as applyPathTransforms$1 } from "./path-transforms-DL2IwtYd.js";
2
+ import { t as cn } from "./utils-C_uf36nf.js";
3
+ import { t as Button } from "./button-CmTDnzOn.js";
4
+ import { n as useSettings } from "./settings-store-DpEJEQ7M.js";
5
+ import { t as Checkbox$1 } from "./checkbox-C0hovF41.js";
6
+ import { a as formatModelLabel, r as formatDateTime } from "./formatters-FJaGZgJk.js";
7
+ import { t as Badge } from "./badge-EvdhKK_Z.js";
8
+ import { useEffect, useMemo, useRef, useState } from "react";
9
+ import { Link } from "@tanstack/react-router";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { Check, ChevronRight, Copy } from "lucide-react";
12
+ import { cva } from "class-variance-authority";
13
+ import { Tabs } from "radix-ui";
14
+ import { useVirtualizer } from "@tanstack/react-virtual";
15
+ //#region src/components/breadcrumbs.tsx
16
+ var isLinkItem = (item) => {
17
+ return "to" in item;
18
+ };
19
+ var Breadcrumbs = ({ items }) => {
20
+ return /* @__PURE__ */ jsx("nav", {
21
+ "aria-label": "Breadcrumb",
22
+ className: "flex flex-wrap items-center gap-1 text-sm",
23
+ children: items.map((item, index) => {
24
+ const content = isLinkItem(item) ? /* @__PURE__ */ jsx(Link, {
25
+ className: "text-[var(--muted-foreground)] transition hover:text-[var(--foreground)]",
26
+ params: item.params,
27
+ to: item.to,
28
+ children: item.label
29
+ }) : /* @__PURE__ */ jsx("span", {
30
+ "aria-current": "page",
31
+ className: "font-medium text-[var(--foreground)]",
32
+ children: item.label
33
+ });
34
+ return /* @__PURE__ */ jsxs("div", {
35
+ className: "flex items-center gap-1",
36
+ children: [index > 0 ? /* @__PURE__ */ jsx(ChevronRight, { className: "size-3.5 text-[var(--muted-foreground)]" }) : null, content]
37
+ }, isLinkItem(item) ? `${item.label}-${item.to}-${index}` : `${item.label}-current-${index}`);
38
+ })
39
+ });
40
+ };
41
+ //#endregion
42
+ //#region src/components/json-panel.tsx
43
+ function JsonPanel({ title, value }) {
44
+ return /* @__PURE__ */ jsxs("section", {
45
+ className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
46
+ children: [/* @__PURE__ */ jsx("h3", {
47
+ className: "font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]",
48
+ children: title
49
+ }), /* @__PURE__ */ jsx("pre", {
50
+ 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",
51
+ children: JSON.stringify(value, null, 2)
52
+ })]
53
+ });
54
+ }
55
+ //#endregion
56
+ //#region src/components/metadata-section.tsx
57
+ function MetadataSection({ items, title }) {
58
+ return /* @__PURE__ */ jsxs("section", {
59
+ className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
60
+ children: [/* @__PURE__ */ jsx("h3", {
61
+ className: "font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]",
62
+ children: title
63
+ }), /* @__PURE__ */ jsx("dl", {
64
+ className: "mt-4 space-y-3",
65
+ children: items.map((item) => /* @__PURE__ */ jsxs("div", {
66
+ className: "grid gap-1 sm:grid-cols-[11rem_1fr] sm:items-start",
67
+ children: [/* @__PURE__ */ jsx("dt", {
68
+ className: "font-medium text-[var(--muted-foreground)] text-xs uppercase tracking-[0.14em]",
69
+ children: item.label
70
+ }), /* @__PURE__ */ jsx("dd", {
71
+ className: "min-w-0 text-sm leading-6",
72
+ children: item.value
73
+ })]
74
+ }, item.label))
75
+ })]
76
+ });
77
+ }
78
+ //#endregion
79
+ //#region src/lib/path-utils.ts
80
+ var applyPathTransforms = (text, settings, projectPath) => {
81
+ return applyPathTransforms$1(text, {
82
+ ...settings,
83
+ projectPath
84
+ });
85
+ };
86
+ //#endregion
87
+ //#region src/components/transcript-view.tsx
88
+ var isCommentaryMessage = (event) => event.kind === "message" && event.role === "assistant" && event.phase === "commentary";
89
+ var shouldShowEvent = (event, showToolCalls, showExtraEvents, showCommentary, showUserMessages) => {
90
+ if (isCommentaryMessage(event) && !showCommentary) return false;
91
+ if (event.kind === "message") {
92
+ if (event.role === "user" && !showUserMessages) return false;
93
+ return !event.isHiddenByDefault || showExtraEvents;
94
+ }
95
+ if (event.kind === "tool_call" || event.kind === "tool_output") return showToolCalls;
96
+ return showExtraEvents;
97
+ };
98
+ var getEventTone = (event) => {
99
+ if (event.kind === "message" && event.role === "assistant") return "border-[var(--accent)]/40 bg-[var(--panel)]";
100
+ if (event.kind === "message" && event.role === "user") return "border-[var(--border)] bg-[var(--panel-secondary)]";
101
+ if (event.kind === "tool_call" || event.kind === "tool_output") return "border-[var(--border)] bg-[var(--code-background)]";
102
+ return "border-[var(--border)] bg-[var(--panel-secondary)]/80";
103
+ };
104
+ var getMessageTitle = (event, assistantModel) => {
105
+ if (event.role === "assistant" && event.phase === "final_answer") return "Final Answer";
106
+ const modelLabel = formatModelLabel(event.model ?? assistantModel);
107
+ if (event.variant === "agent_message") return event.role === "assistant" ? modelLabel : "Assistant update";
108
+ if (event.role === "assistant") return modelLabel;
109
+ return event.role === "system" ? "System" : "User";
110
+ };
111
+ var assertNever = (value) => {
112
+ throw new Error(`Unhandled transcript event kind: ${JSON.stringify(value)}`);
113
+ };
114
+ var getNonMessageTitle = (event) => {
115
+ switch (event.kind) {
116
+ case "tool_call": return `Tool call: ${event.name}`;
117
+ case "tool_output": return "Tool output";
118
+ case "task_started": return "Task started";
119
+ case "task_complete": return "Task complete";
120
+ case "token_count": return "Token update";
121
+ case "reasoning": return "Reasoning";
122
+ case "web_search": return "Web search";
123
+ default: return assertNever(event);
124
+ }
125
+ };
126
+ var getEventTitle = (event, assistantModel) => event.kind === "message" ? getMessageTitle(event, assistantModel) : getNonMessageTitle(event);
127
+ var copyToClipboard = async (text) => {
128
+ if (typeof navigator !== "undefined" && navigator.clipboard) try {
129
+ await navigator.clipboard.writeText(text);
130
+ return true;
131
+ } catch {}
132
+ return false;
133
+ };
134
+ var getEventMarkdownBody = (event, transform) => {
135
+ switch (event.kind) {
136
+ case "message": return transform(event.text || "No text content");
137
+ case "tool_call": return [event.command ?? event.name, event.workdir].filter((value) => Boolean(value)).map(transform).join("\n\n");
138
+ case "tool_output": return transform(event.summary || event.outputText || "");
139
+ case "task_started": return `Context window: ${event.modelContextWindow ?? "n/a"}\n\nCollaboration mode: ${event.collaborationModeKind ?? "n/a"}`;
140
+ case "task_complete": return `Duration: ${event.durationMs ?? "n/a"} ms\n\nFirst token: ${event.timeToFirstTokenMs ?? "n/a"} ms`;
141
+ case "token_count": return JSON.stringify(event.rateLimits, null, 2);
142
+ case "reasoning": return event.summary.join(" ") || "Reasoning content is not directly available.";
143
+ case "web_search": return [`Phase: ${event.phase}${event.status ? ` · ${event.status}` : ""}`, event.query ? transform(event.query) : null].filter(Boolean).join("\n\n");
144
+ }
145
+ };
146
+ var getEventMarkdown = (event, assistantModel, transform) => `## ${getEventTitle(event, assistantModel)}\n\n${getEventMarkdownBody(event, transform)}`;
147
+ var buildEventKey = (event, index) => {
148
+ if (event.kind === "tool_call") return `${event.kind}-${event.sequence}-${event.callId ?? event.timestamp ?? event.name}-${index}`;
149
+ if (event.kind === "tool_output") return `${event.kind}-${event.sequence}-${event.callId ?? event.timestamp ?? "output"}-${index}`;
150
+ if (event.kind === "message") return `${event.kind}-${event.sequence}-${event.variant}-${event.timestamp ?? event.role}-${index}`;
151
+ return `${event.kind}-${event.sequence}-${event.timestamp ?? "event"}-${index}`;
152
+ };
153
+ var renderMessageBody = (event, t) => /* @__PURE__ */ jsx("p", {
154
+ className: "min-w-0 whitespace-pre-wrap break-words text-sm leading-6 [overflow-wrap:anywhere]",
155
+ children: t(event.text || "No text content")
156
+ });
157
+ var renderToolCallBody = (event, t) => /* @__PURE__ */ jsxs("div", {
158
+ className: "space-y-2 text-sm",
159
+ children: [/* @__PURE__ */ jsx("p", {
160
+ className: "min-w-0 break-words font-medium [overflow-wrap:anywhere]",
161
+ children: t(event.command ?? event.name)
162
+ }), event.workdir ? /* @__PURE__ */ jsx("p", {
163
+ className: "font-mono text-[var(--muted-foreground)] text-xs",
164
+ children: t(event.workdir)
165
+ }) : null]
166
+ });
167
+ var renderToolOutputBody = (event, t) => /* @__PURE__ */ jsx("p", {
168
+ className: "min-w-0 whitespace-pre-wrap break-words text-sm leading-6 [overflow-wrap:anywhere]",
169
+ children: t(event.summary || event.outputText || "")
170
+ });
171
+ var renderTaskStartedBody = (event) => /* @__PURE__ */ jsxs("div", {
172
+ className: "text-[var(--muted-foreground)] text-sm",
173
+ children: [
174
+ "Context window: ",
175
+ event.modelContextWindow ?? "n/a",
176
+ " · Collaboration mode: ",
177
+ event.collaborationModeKind ?? "n/a"
178
+ ]
179
+ });
180
+ var renderTaskCompleteBody = (event) => /* @__PURE__ */ jsxs("div", {
181
+ className: "text-[var(--muted-foreground)] text-sm",
182
+ children: [
183
+ "Duration: ",
184
+ event.durationMs ?? "n/a",
185
+ " ms · First token: ",
186
+ event.timeToFirstTokenMs ?? "n/a",
187
+ " ms"
188
+ ]
189
+ });
190
+ var renderTokenCountBody = (event) => /* @__PURE__ */ jsx("pre", {
191
+ className: "overflow-x-auto text-xs leading-5",
192
+ children: JSON.stringify(event.rateLimits, null, 2)
193
+ });
194
+ var renderReasoningBody = (event) => /* @__PURE__ */ jsxs("div", {
195
+ className: "space-y-2 text-sm",
196
+ children: [/* @__PURE__ */ jsx("p", { children: event.summary.join(" ") || "Reasoning content is not directly available." }), event.hasEncryptedContent ? /* @__PURE__ */ jsx("p", {
197
+ className: "text-[var(--muted-foreground)] text-xs",
198
+ children: "Encrypted reasoning payload captured."
199
+ }) : null]
200
+ });
201
+ var renderWebSearchBody = (event) => /* @__PURE__ */ jsxs("div", {
202
+ className: "space-y-2 text-sm",
203
+ children: [/* @__PURE__ */ jsxs("p", { children: [
204
+ "Phase: ",
205
+ event.phase,
206
+ event.status ? ` · ${event.status}` : ""
207
+ ] }), event.query ? /* @__PURE__ */ jsx("p", {
208
+ className: "text-[var(--muted-foreground)]",
209
+ children: event.query
210
+ }) : null]
211
+ });
212
+ var renderEventBody = (event, t) => {
213
+ switch (event.kind) {
214
+ case "message": return renderMessageBody(event, t);
215
+ case "tool_call": return renderToolCallBody(event, t);
216
+ case "tool_output": return renderToolOutputBody(event, t);
217
+ case "task_started": return renderTaskStartedBody(event);
218
+ case "task_complete": return renderTaskCompleteBody(event);
219
+ case "token_count": return renderTokenCountBody(event);
220
+ case "reasoning": return renderReasoningBody(event);
221
+ case "web_search": return renderWebSearchBody(event);
222
+ }
223
+ };
224
+ function TranscriptEventCard({ assistantModel, copied, event, isSelected, showRawJson, transform, onCopy, onSelectionChange }) {
225
+ return /* @__PURE__ */ jsxs("article", {
226
+ className: cn("min-w-0 overflow-hidden rounded-xl border p-3.5 shadow-[var(--panel-shadow)]", isSelected && "ring-2 ring-[var(--accent)]/35", getEventTone(event)),
227
+ children: [
228
+ /* @__PURE__ */ jsxs("div", {
229
+ className: "flex flex-wrap items-start justify-between gap-2",
230
+ children: [/* @__PURE__ */ jsxs("div", {
231
+ className: "flex min-w-0 flex-1 flex-wrap items-center gap-2",
232
+ children: [
233
+ /* @__PURE__ */ jsx(Checkbox$1, {
234
+ "aria-label": `Select ${getEventTitle(event, assistantModel)}`,
235
+ checked: isSelected,
236
+ onCheckedChange: (checked) => onSelectionChange(event, checked === true)
237
+ }),
238
+ /* @__PURE__ */ jsx("h3", {
239
+ className: "min-w-0 break-words font-semibold text-sm [overflow-wrap:anywhere]",
240
+ children: getEventTitle(event, assistantModel)
241
+ }),
242
+ event.kind === "message" && event.phase ? /* @__PURE__ */ jsx(Badge, {
243
+ variant: "outline",
244
+ children: event.phase
245
+ }) : null,
246
+ event.kind !== "message" ? /* @__PURE__ */ jsx(Badge, {
247
+ variant: "outline",
248
+ children: event.kind.replaceAll("_", " ")
249
+ }) : null
250
+ ]
251
+ }), event.timestamp ? /* @__PURE__ */ jsx("p", {
252
+ className: "shrink-0 text-[var(--muted-foreground)] text-xs",
253
+ suppressHydrationWarning: true,
254
+ children: formatDateTime(event.timestamp)
255
+ }) : null]
256
+ }),
257
+ /* @__PURE__ */ jsx("div", {
258
+ className: "mt-2.5 min-w-0",
259
+ children: renderEventBody(event, transform)
260
+ }),
261
+ /* @__PURE__ */ jsx("div", {
262
+ className: "mt-3 flex justify-end",
263
+ children: /* @__PURE__ */ jsx(Button, {
264
+ "aria-label": "Copy message",
265
+ className: "text-[var(--muted-foreground)] hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]",
266
+ size: "icon-xs",
267
+ variant: "ghost",
268
+ onClick: () => onCopy(event),
269
+ children: copied ? /* @__PURE__ */ jsx(Check, { className: "text-[var(--accent)]" }) : /* @__PURE__ */ jsx(Copy, {})
270
+ })
271
+ }),
272
+ showRawJson ? /* @__PURE__ */ jsx("pre", {
273
+ className: "mt-3 overflow-x-auto rounded-lg border border-[var(--border)] bg-[var(--code-background)] p-3 text-[var(--code-foreground)] text-xs leading-5",
274
+ children: JSON.stringify(event.raw, null, 2)
275
+ }) : null
276
+ ]
277
+ });
278
+ }
279
+ function TranscriptView({ assistantModel, events, projectPath, showCommentary, showExtraEvents, showRawJson, showToolCalls, showUserMessages = true }) {
280
+ const { settings } = useSettings();
281
+ const visibleEvents = useMemo(() => events.filter((event) => shouldShowEvent(event, showToolCalls, showExtraEvents, showCommentary, showUserMessages)), [
282
+ events,
283
+ showCommentary,
284
+ showExtraEvents,
285
+ showToolCalls,
286
+ showUserMessages
287
+ ]);
288
+ const [copiedEventKeys, setCopiedEventKeys] = useState([]);
289
+ const [copiedSelection, setCopiedSelection] = useState(false);
290
+ const [copyErrorMessage, setCopyErrorMessage] = useState(null);
291
+ const [selectedEventKeys, setSelectedEventKeys] = useState([]);
292
+ const parentRef = useRef(null);
293
+ const timeoutIdsRef = useRef([]);
294
+ const useVirtualList = visibleEvents.length > 40;
295
+ const eventKeyByEvent = useMemo(() => new Map(events.map((event, index) => [event, buildEventKey(event, index)])), [events]);
296
+ const getEventKey = (event) => eventKeyByEvent.get(event) ?? buildEventKey(event, -1);
297
+ const transform = (text) => applyPathTransforms(text, settings, projectPath);
298
+ const visibleEventKeys = useMemo(() => visibleEvents.map((event) => eventKeyByEvent.get(event) ?? buildEventKey(event, -1)), [visibleEvents, eventKeyByEvent]);
299
+ const visibleEventKeySet = useMemo(() => new Set(visibleEventKeys), [visibleEventKeys]);
300
+ const selectedEventKeySet = useMemo(() => new Set(selectedEventKeys), [selectedEventKeys]);
301
+ const virtualizer = useVirtualizer({
302
+ count: useVirtualList ? visibleEvents.length : 0,
303
+ estimateSize: () => 160,
304
+ getItemKey: (index) => getEventKey(visibleEvents[index]) ?? `event-${index}`,
305
+ getScrollElement: () => parentRef.current,
306
+ measureElement: (element) => element.getBoundingClientRect().height,
307
+ overscan: 8
308
+ });
309
+ useEffect(() => {
310
+ return () => {
311
+ for (const timeoutId of timeoutIdsRef.current) window.clearTimeout(timeoutId);
312
+ timeoutIdsRef.current = [];
313
+ };
314
+ }, []);
315
+ useEffect(() => {
316
+ setSelectedEventKeys((current) => {
317
+ const next = current.filter((key) => visibleEventKeySet.has(key));
318
+ return next.length === current.length ? current : next;
319
+ });
320
+ }, [visibleEventKeySet]);
321
+ const scheduleTimeout = (callback, delayMs) => {
322
+ const timeoutId = window.setTimeout(() => {
323
+ timeoutIdsRef.current = timeoutIdsRef.current.filter((entry) => entry !== timeoutId);
324
+ callback();
325
+ }, delayMs);
326
+ timeoutIdsRef.current.push(timeoutId);
327
+ };
328
+ const showCopyFailure = () => {
329
+ setCopyErrorMessage("Copy failed");
330
+ scheduleTimeout(() => {
331
+ setCopyErrorMessage((current) => current === "Copy failed" ? null : current);
332
+ }, 1500);
333
+ };
334
+ const visibleSelectedKeys = useMemo(() => selectedEventKeys.filter((key) => visibleEventKeySet.has(key)), [selectedEventKeys, visibleEventKeySet]);
335
+ const visibleSelectedKeySet = useMemo(() => new Set(visibleSelectedKeys), [visibleSelectedKeys]);
336
+ const allVisibleSelected = visibleEvents.length > 0 && visibleSelectedKeys.length === visibleEvents.length;
337
+ const handleSelectionChange = (event, checked) => {
338
+ const key = getEventKey(event);
339
+ setSelectedEventKeys((current) => checked ? current.includes(key) ? current : [...current, key] : current.filter((entry) => entry !== key));
340
+ };
341
+ const handleToggleAllVisible = (checked) => {
342
+ setSelectedEventKeys((current) => checked ? [...new Set([...current.filter((key) => !visibleEventKeySet.has(key)), ...visibleEventKeys])] : current.filter((key) => !visibleEventKeySet.has(key)));
343
+ };
344
+ const handleCopyEvent = async (event) => {
345
+ if (!await copyToClipboard(getEventMarkdown(event, assistantModel, transform))) {
346
+ showCopyFailure();
347
+ return;
348
+ }
349
+ const key = getEventKey(event);
350
+ setCopiedEventKeys((current) => [...new Set([...current, key])]);
351
+ scheduleTimeout(() => {
352
+ setCopiedEventKeys((current) => current.filter((entry) => entry !== key));
353
+ }, 1500);
354
+ };
355
+ const handleCopySelected = async () => {
356
+ const selectedEvents = visibleEvents.filter((event) => visibleSelectedKeySet.has(getEventKey(event)));
357
+ if (selectedEvents.length === 0) return;
358
+ if (!await copyToClipboard(selectedEvents.map((event) => getEventMarkdown(event, assistantModel, transform)).join("\n\n"))) {
359
+ showCopyFailure();
360
+ return;
361
+ }
362
+ setCopiedSelection(true);
363
+ scheduleTimeout(() => {
364
+ setCopiedSelection(false);
365
+ }, 1500);
366
+ };
367
+ if (useVirtualList) return /* @__PURE__ */ jsxs("div", {
368
+ ref: parentRef,
369
+ className: "h-[70vh] overflow-auto rounded-xl border border-[var(--border)] bg-[var(--panel)] p-3",
370
+ children: [/* @__PURE__ */ jsxs("div", {
371
+ className: "sticky top-0 z-10 mb-3 flex items-center justify-between rounded-xl border border-[var(--border)] bg-[var(--panel)]/95 px-3 py-2 backdrop-blur",
372
+ children: [/* @__PURE__ */ jsxs("div", {
373
+ className: "flex items-center gap-2",
374
+ children: [
375
+ /* @__PURE__ */ jsx(Checkbox$1, {
376
+ "aria-label": "Select visible messages",
377
+ checked: allVisibleSelected,
378
+ onCheckedChange: (checked) => handleToggleAllVisible(checked === true)
379
+ }),
380
+ /* @__PURE__ */ jsxs("span", {
381
+ className: "text-[var(--muted-foreground)] text-sm",
382
+ children: [visibleSelectedKeys.length, " selected"]
383
+ }),
384
+ copyErrorMessage ? /* @__PURE__ */ jsx("span", {
385
+ className: "text-[var(--destructive)] text-sm",
386
+ children: copyErrorMessage
387
+ }) : null
388
+ ]
389
+ }), /* @__PURE__ */ jsxs(Button, {
390
+ "aria-label": "Copy selected messages",
391
+ className: "hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]",
392
+ disabled: visibleSelectedKeys.length === 0,
393
+ size: "sm",
394
+ variant: "outline",
395
+ onClick: () => void handleCopySelected(),
396
+ children: [copiedSelection ? /* @__PURE__ */ jsx(Check, { className: "text-[var(--accent)]" }) : /* @__PURE__ */ jsx(Copy, {}), copiedSelection ? "Copied" : "Copy"]
397
+ })]
398
+ }), /* @__PURE__ */ jsx("div", {
399
+ className: "relative w-full",
400
+ style: { height: `${virtualizer.getTotalSize()}px` },
401
+ children: virtualizer.getVirtualItems().map((item) => /* @__PURE__ */ jsx("div", {
402
+ ref: virtualizer.measureElement,
403
+ "data-index": item.index,
404
+ className: "absolute top-0 left-0 w-full pb-3.5",
405
+ style: { transform: `translateY(${item.start}px)` },
406
+ children: /* @__PURE__ */ jsx(TranscriptEventCard, {
407
+ assistantModel,
408
+ copied: copiedEventKeys.includes(getEventKey(visibleEvents[item.index])),
409
+ event: visibleEvents[item.index],
410
+ isSelected: selectedEventKeySet.has(getEventKey(visibleEvents[item.index])),
411
+ showRawJson,
412
+ transform,
413
+ onCopy: (event) => void handleCopyEvent(event),
414
+ onSelectionChange: handleSelectionChange
415
+ })
416
+ }, item.key))
417
+ })]
418
+ });
419
+ return /* @__PURE__ */ jsxs("div", {
420
+ className: "space-y-3.5",
421
+ children: [/* @__PURE__ */ jsxs("div", {
422
+ className: "sticky top-0 z-10 flex items-center justify-between rounded-xl border border-[var(--border)] bg-[var(--panel)]/95 px-3 py-2 backdrop-blur",
423
+ children: [/* @__PURE__ */ jsxs("div", {
424
+ className: "flex items-center gap-2",
425
+ children: [
426
+ /* @__PURE__ */ jsx(Checkbox$1, {
427
+ "aria-label": "Select visible messages",
428
+ checked: allVisibleSelected,
429
+ onCheckedChange: (checked) => handleToggleAllVisible(checked === true)
430
+ }),
431
+ /* @__PURE__ */ jsxs("span", {
432
+ className: "text-[var(--muted-foreground)] text-sm",
433
+ children: [visibleSelectedKeys.length, " selected"]
434
+ }),
435
+ copyErrorMessage ? /* @__PURE__ */ jsx("span", {
436
+ className: "text-[var(--destructive)] text-sm",
437
+ children: copyErrorMessage
438
+ }) : null
439
+ ]
440
+ }), /* @__PURE__ */ jsxs(Button, {
441
+ "aria-label": "Copy selected messages",
442
+ className: "hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]",
443
+ disabled: visibleSelectedKeys.length === 0,
444
+ size: "sm",
445
+ variant: "outline",
446
+ onClick: () => void handleCopySelected(),
447
+ children: [copiedSelection ? /* @__PURE__ */ jsx(Check, { className: "text-[var(--accent)]" }) : /* @__PURE__ */ jsx(Copy, {}), copiedSelection ? "Copied" : "Copy"]
448
+ })]
449
+ }), visibleEvents.map((event) => /* @__PURE__ */ jsx(TranscriptEventCard, {
450
+ assistantModel,
451
+ copied: copiedEventKeys.includes(getEventKey(event)),
452
+ event,
453
+ isSelected: selectedEventKeySet.has(getEventKey(event)),
454
+ showRawJson,
455
+ transform,
456
+ onCopy: (selectedEvent) => void handleCopyEvent(selectedEvent),
457
+ onSelectionChange: handleSelectionChange
458
+ }, getEventKey(event)))]
459
+ });
460
+ }
461
+ //#endregion
462
+ //#region src/components/ui/tabs.tsx
463
+ function Tabs$1({ className, orientation = "horizontal", ...props }) {
464
+ return /* @__PURE__ */ jsx(Tabs.Root, {
465
+ "data-slot": "tabs",
466
+ "data-orientation": orientation,
467
+ orientation,
468
+ className: cn("group/tabs flex gap-2 data-[orientation=horizontal]:flex-col", className),
469
+ ...props
470
+ });
471
+ }
472
+ var tabsListVariants = cva("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:min-h-11 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none", {
473
+ defaultVariants: { variant: "default" },
474
+ variants: { variant: {
475
+ default: "bg-muted",
476
+ line: "gap-1 bg-transparent"
477
+ } }
478
+ });
479
+ function TabsList({ className, variant = "default", ...props }) {
480
+ return /* @__PURE__ */ jsx(Tabs.List, {
481
+ "data-slot": "tabs-list",
482
+ "data-variant": variant,
483
+ className: cn(tabsListVariants({ variant }), className),
484
+ ...props
485
+ });
486
+ }
487
+ function TabsTrigger({ className, ...props }) {
488
+ return /* @__PURE__ */ jsx(Tabs.Trigger, {
489
+ "data-slot": "tabs-trigger",
490
+ className: cn("relative inline-flex h-auto min-h-9 min-w-0 flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-md border border-transparent px-3 py-2 font-medium text-foreground/60 text-sm transition-all hover:text-foreground focus-visible:border-ring focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent", "data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=horizontal]/tabs:after:bottom-[-3px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100", className),
491
+ ...props
492
+ });
493
+ }
494
+ function TabsContent({ className, ...props }) {
495
+ return /* @__PURE__ */ jsx(Tabs.Content, {
496
+ "data-slot": "tabs-content",
497
+ className: cn("flex-1 outline-none", className),
498
+ ...props
499
+ });
500
+ }
501
+ //#endregion
502
+ export { TranscriptView as a, Breadcrumbs as c, TabsTrigger as i, TabsContent as n, MetadataSection as o, TabsList as r, JsonPanel as s, Tabs$1 as t };
@@ -1,10 +1,10 @@
1
- import { a as threadSnapshotQueryOptions } from "./codex-queries-ev_mRUzr.js";
1
+ import { a as threadSnapshotQueryOptions } from "./codex-queries-CtgeZ7VL.js";
2
2
  import { t as LoadingPanel } from "./loading-panel-BGFnWseS.js";
3
3
  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-LjgsGUh-.js");
7
+ var $$splitComponentImporter = () => import("./threads._threadId-D2GYkVn6.js");
8
8
  var Route = createFileRoute("/threads/$threadId")({
9
9
  component: lazyRouteComponent($$splitComponentImporter, "component"),
10
10
  errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),