spiracha 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/AGENTS.md +28 -1
  2. package/README.md +47 -7
  3. package/apps/ui/AGENTS.md +70 -0
  4. package/apps/ui/README.md +72 -0
  5. package/apps/ui/dist/client/assets/_threadId-CAIeH5mq.js +1 -0
  6. package/apps/ui/dist/client/assets/analytics-BjYaHqXk.js +1 -0
  7. package/apps/ui/dist/client/assets/checkbox-wPoGG3of.js +1 -0
  8. package/apps/ui/dist/client/assets/data-table-6yDgAdtf.js +4 -0
  9. package/apps/ui/dist/client/assets/delete-confirm-dialog-DJUAk7ha.js +11 -0
  10. package/apps/ui/dist/client/assets/download-BhWd-Pm5.js +1 -0
  11. package/apps/ui/dist/client/assets/es2015-BlyMI4CF.js +41 -0
  12. package/apps/ui/dist/client/assets/formatters-BxjZwWSE.js +1 -0
  13. package/apps/ui/dist/client/assets/index-T01rPkb4.js +22 -0
  14. package/apps/ui/dist/client/assets/input-B3YN8gzg.js +1 -0
  15. package/apps/ui/dist/client/assets/metric-card-BWW7TWER.js +1 -0
  16. package/apps/ui/dist/client/assets/page-header-BZ8Gnxgs.js +1 -0
  17. package/apps/ui/dist/client/assets/projects._project-B7XcpoLt.js +1 -0
  18. package/apps/ui/dist/client/assets/projects._project-EfBhCHPY.js +1 -0
  19. package/apps/ui/dist/client/assets/projects.index-4vfIwLjw.js +1 -0
  20. package/apps/ui/dist/client/assets/projects.index-DzEZ4pAJ.js +1 -0
  21. package/apps/ui/dist/client/assets/routes-CWCCZykE.js +1 -0
  22. package/apps/ui/dist/client/assets/select-DLXGsyZ4.js +1 -0
  23. package/apps/ui/dist/client/assets/settings-b0Xthfae.js +1 -0
  24. package/apps/ui/dist/client/assets/styles-8Wtc8YJw.css +1 -0
  25. package/apps/ui/dist/client/assets/threads._threadId-CgtoCqTb.js +1 -0
  26. package/apps/ui/dist/client/assets/threads._threadId-DBiDb38K.js +7 -0
  27. package/apps/ui/dist/client/favicon.ico +0 -0
  28. package/apps/ui/dist/client/logo192.png +0 -0
  29. package/apps/ui/dist/client/logo512.png +0 -0
  30. package/apps/ui/dist/client/manifest.json +25 -0
  31. package/apps/ui/dist/client/robots.txt +3 -0
  32. package/apps/ui/dist/server/assets/__23tanstack-start-plugin-adapters-BzCA6dXo.js +5 -0
  33. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-BjsXNYgm.js +99 -0
  34. package/apps/ui/dist/server/assets/_threadId-B6SrBR9E.js +6 -0
  35. package/apps/ui/dist/server/assets/analytics-Br_fZB6a.js +139 -0
  36. package/apps/ui/dist/server/assets/button-CmTDnzOn.js +46 -0
  37. package/apps/ui/dist/server/assets/checkbox-C0hovF41.js +19 -0
  38. package/apps/ui/dist/server/assets/codex-queries-CAF6HYiG.js +109 -0
  39. package/apps/ui/dist/server/assets/codex-server-Cqh0hb93.js +1995 -0
  40. package/apps/ui/dist/server/assets/data-table-Cdct823O.js +189 -0
  41. package/apps/ui/dist/server/assets/delete-confirm-dialog-CWqcTXTF.js +139 -0
  42. package/apps/ui/dist/server/assets/download-CzHmFWGk.js +286 -0
  43. package/apps/ui/dist/server/assets/formatters-B6o5pTY9.js +72 -0
  44. package/apps/ui/dist/server/assets/input-B4tEzctc.js +46 -0
  45. package/apps/ui/dist/server/assets/loading-panel-DbLdvjtR.js +27 -0
  46. package/apps/ui/dist/server/assets/metric-card-ByEeLu0r.js +23 -0
  47. package/apps/ui/dist/server/assets/page-header-CxdZM86z.js +25 -0
  48. package/apps/ui/dist/server/assets/path-transforms-DD1e7rhY.js +31 -0
  49. package/apps/ui/dist/server/assets/projects._project-Bwf6iJC-.js +335 -0
  50. package/apps/ui/dist/server/assets/projects._project-CLSohrBp.js +26 -0
  51. package/apps/ui/dist/server/assets/projects._project-DdVSdfPe.js +18 -0
  52. package/apps/ui/dist/server/assets/projects.index-CaplpeMy.js +26 -0
  53. package/apps/ui/dist/server/assets/projects.index-DKeVeqUZ.js +171 -0
  54. package/apps/ui/dist/server/assets/router-ve2Hrl2Y.js +307 -0
  55. package/apps/ui/dist/server/assets/routes-BJyx5OmO.js +34 -0
  56. package/apps/ui/dist/server/assets/routes-pkOwjjYc.js +168 -0
  57. package/apps/ui/dist/server/assets/select-GW76p-ld.js +76 -0
  58. package/apps/ui/dist/server/assets/settings-MvWDgc1u.js +100 -0
  59. package/apps/ui/dist/server/assets/settings-store-DpEJEQ7M.js +52 -0
  60. package/apps/ui/dist/server/assets/sqlite-error-LZDrnxdd.js +13 -0
  61. package/apps/ui/dist/server/assets/start-BAvbjjfs.js +4 -0
  62. package/apps/ui/dist/server/assets/threads._threadId-BSSK4nkI.js +26 -0
  63. package/apps/ui/dist/server/assets/threads._threadId-D3PYZIwl.js +18 -0
  64. package/apps/ui/dist/server/assets/threads._threadId-D3xaWM86.js +1037 -0
  65. package/apps/ui/dist/server/assets/utils-C_uf36nf.js +8 -0
  66. package/apps/ui/dist/server/server.js +5678 -0
  67. package/package.json +47 -7
  68. package/src/export-chats.ts +1 -14
  69. package/src/lib/codex-analytics.ts +100 -0
  70. package/src/lib/codex-browser-db.ts +518 -0
  71. package/src/lib/codex-browser-export.ts +418 -0
  72. package/src/lib/codex-browser-types.ts +224 -0
  73. package/src/lib/codex-exporter-cli.ts +5 -0
  74. package/src/lib/codex-exporter-transcript.ts +143 -32
  75. package/src/lib/codex-exporter-types.ts +8 -0
  76. package/src/lib/codex-thread-cache.ts +58 -0
  77. package/src/lib/codex-thread-parser.ts +604 -0
  78. package/src/lib/interactive-cli.ts +5 -13
  79. package/src/lib/native-open.ts +54 -0
  80. package/src/lib/path-transforms.ts +45 -0
  81. package/src/lib/shared.ts +37 -1
  82. package/src/lib/sqlite-error.ts +14 -0
  83. package/src/lib/sqlite-retry.ts +39 -0
  84. package/src/lib/ui-cache.ts +96 -0
  85. package/src/lib/ui-export-files.ts +77 -0
  86. package/src/mcp-server.ts +1 -0
  87. package/src/spiracha.ts +14 -1
  88. package/src/ui-cli.ts +310 -0
@@ -0,0 +1,139 @@
1
+ import { i as projectsQueryOptions, t as analyticsQueryOptions } from "./codex-queries-CAF6HYiG.js";
2
+ import { t as DataTable } from "./data-table-Cdct823O.js";
3
+ import { t as MetricCard } from "./metric-card-ByEeLu0r.js";
4
+ import { t as PageHeader } from "./page-header-CxdZM86z.js";
5
+ import { a as SelectValue, i as SelectTrigger, n as SelectContent, r as SelectItem, t as Select } from "./select-GW76p-ld.js";
6
+ import { o as formatNumber, s as formatTokens } from "./formatters-B6o5pTY9.js";
7
+ import { startTransition, useState } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { useSuspenseQuery } from "@tanstack/react-query";
10
+ import { createColumnHelper } from "@tanstack/react-table";
11
+ //#region src/routes/analytics.tsx?tsr-split=component
12
+ var toolUsageColumnHelper = createColumnHelper();
13
+ var toolUsageColumns = [toolUsageColumnHelper.accessor("name", {
14
+ cell: (info) => /* @__PURE__ */ jsx("span", {
15
+ className: "font-mono text-sm",
16
+ children: info.getValue()
17
+ }),
18
+ header: "Tool"
19
+ }), toolUsageColumnHelper.accessor("count", {
20
+ cell: (info) => /* @__PURE__ */ jsx("span", {
21
+ className: "font-mono text-sm",
22
+ children: formatNumber(info.getValue())
23
+ }),
24
+ header: "Calls"
25
+ })];
26
+ var modelColumnHelper = createColumnHelper();
27
+ var modelColumns = [
28
+ modelColumnHelper.accessor("model", {
29
+ cell: (info) => /* @__PURE__ */ jsx("span", {
30
+ className: "font-mono text-sm",
31
+ children: info.getValue()
32
+ }),
33
+ header: "Model"
34
+ }),
35
+ modelColumnHelper.accessor("threadCount", {
36
+ cell: (info) => /* @__PURE__ */ jsx("span", {
37
+ className: "font-mono text-sm",
38
+ children: formatNumber(info.getValue())
39
+ }),
40
+ header: "Threads"
41
+ }),
42
+ modelColumnHelper.accessor("totalTokens", {
43
+ cell: (info) => /* @__PURE__ */ jsx("span", {
44
+ className: "font-mono text-sm",
45
+ children: formatTokens(info.getValue())
46
+ }),
47
+ header: "Tokens"
48
+ })
49
+ ];
50
+ function AnalyticsPage() {
51
+ const projects = useSuspenseQuery(projectsQueryOptions()).data;
52
+ const [selectedProject, setSelectedProject] = useState(null);
53
+ const analytics = useSuspenseQuery(analyticsQueryOptions(selectedProject)).data;
54
+ return /* @__PURE__ */ jsxs("div", {
55
+ className: "space-y-6",
56
+ children: [
57
+ /* @__PURE__ */ jsx(PageHeader, {
58
+ actions: /* @__PURE__ */ jsxs(Select, {
59
+ value: selectedProject ?? "__all__",
60
+ onValueChange: (value) => {
61
+ startTransition(() => {
62
+ setSelectedProject(value === "__all__" ? null : value);
63
+ });
64
+ },
65
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
66
+ className: "h-10 w-full rounded-full border-[var(--border)] bg-[var(--panel)] sm:w-[15rem]",
67
+ children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Filter by project" })
68
+ }), /* @__PURE__ */ jsxs(SelectContent, { children: [/* @__PURE__ */ jsx(SelectItem, {
69
+ value: "__all__",
70
+ children: "All projects"
71
+ }), projects.map((project) => /* @__PURE__ */ jsx(SelectItem, {
72
+ value: project.name,
73
+ children: project.name
74
+ }, project.name))] })]
75
+ }),
76
+ eyebrow: "Analytics",
77
+ subtitle: "Inspect token load, tool-call distribution, and project-scoped usage patterns to understand where Codex is spending effort.",
78
+ title: "Analytics"
79
+ }),
80
+ /* @__PURE__ */ jsxs("div", {
81
+ className: "grid gap-4 md:grid-cols-2 xl:grid-cols-5",
82
+ children: [
83
+ /* @__PURE__ */ jsx(MetricCard, {
84
+ label: "Threads",
85
+ value: formatNumber(analytics.summary.totalThreads)
86
+ }),
87
+ /* @__PURE__ */ jsx(MetricCard, {
88
+ label: "Projects",
89
+ value: formatNumber(analytics.summary.totalProjects)
90
+ }),
91
+ /* @__PURE__ */ jsx(MetricCard, {
92
+ label: "Tokens",
93
+ value: formatTokens(analytics.summary.totalTokens)
94
+ }),
95
+ /* @__PURE__ */ jsx(MetricCard, {
96
+ label: "Average per thread",
97
+ value: formatTokens(Math.round(analytics.summary.averageTokensPerThread))
98
+ }),
99
+ /* @__PURE__ */ jsx(MetricCard, {
100
+ label: "Web search threads",
101
+ value: formatNumber(analytics.summary.threadsWithWebSearch)
102
+ })
103
+ ]
104
+ }),
105
+ /* @__PURE__ */ jsxs("div", {
106
+ className: "grid gap-4 xl:grid-cols-2",
107
+ children: [/* @__PURE__ */ jsxs("section", {
108
+ className: "space-y-4",
109
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
110
+ className: "font-semibold text-sm",
111
+ children: "Most frequent tool calls"
112
+ }), /* @__PURE__ */ jsx("p", {
113
+ className: "mt-1 text-[var(--muted-foreground)] text-sm",
114
+ children: "Useful for future prompt and tool optimization work."
115
+ })] }), /* @__PURE__ */ jsx(DataTable, {
116
+ columns: toolUsageColumns,
117
+ data: analytics.toolUsage,
118
+ emptyMessage: "No tool calls recorded."
119
+ })]
120
+ }), /* @__PURE__ */ jsxs("section", {
121
+ className: "space-y-4",
122
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
123
+ className: "font-semibold text-sm",
124
+ children: "Model token breakdown"
125
+ }), /* @__PURE__ */ jsx("p", {
126
+ className: "mt-1 text-[var(--muted-foreground)] text-sm",
127
+ children: "Compare model usage and token concentration within the current project scope."
128
+ })] }), /* @__PURE__ */ jsx(DataTable, {
129
+ columns: modelColumns,
130
+ data: analytics.modelsByTokens,
131
+ emptyMessage: "No model usage recorded."
132
+ })]
133
+ })]
134
+ })
135
+ ]
136
+ });
137
+ }
138
+ //#endregion
139
+ export { AnalyticsPage as component };
@@ -0,0 +1,46 @@
1
+ import { t as cn } from "./utils-C_uf36nf.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { Slot } from "radix-ui";
5
+ //#region src/components/ui/button.tsx
6
+ var buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
+ defaultVariants: {
8
+ size: "default",
9
+ variant: "default"
10
+ },
11
+ variants: {
12
+ size: {
13
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
14
+ icon: "size-9",
15
+ "icon-lg": "size-10",
16
+ "icon-sm": "size-8",
17
+ "icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
18
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
19
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
20
+ xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3"
21
+ },
22
+ variant: {
23
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
24
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
25
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
26
+ link: "text-primary underline-offset-4 hover:underline",
27
+ outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
28
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80"
29
+ }
30
+ }
31
+ });
32
+ function Button({ className, variant = "default", size = "default", asChild = false, ...props }) {
33
+ return /* @__PURE__ */ jsx(asChild ? Slot.Root : "button", {
34
+ "data-slot": "button",
35
+ "data-variant": variant,
36
+ "data-size": size,
37
+ className: cn(buttonVariants({
38
+ className,
39
+ size,
40
+ variant
41
+ })),
42
+ ...props
43
+ });
44
+ }
45
+ //#endregion
46
+ export { Button as t };
@@ -0,0 +1,19 @@
1
+ import { t as cn } from "./utils-C_uf36nf.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { CheckIcon } from "lucide-react";
4
+ import { Checkbox } from "radix-ui";
5
+ //#region src/components/ui/checkbox.tsx
6
+ function Checkbox$1({ className, ...props }) {
7
+ return /* @__PURE__ */ jsx(Checkbox.Root, {
8
+ "data-slot": "checkbox",
9
+ className: cn("peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs outline-none transition-shadow focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-white dark:bg-input/30 dark:data-[state=checked]:bg-primary dark:data-[state=checked]:text-primary-foreground dark:aria-invalid:ring-destructive/40", className),
10
+ ...props,
11
+ children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
12
+ "data-slot": "checkbox-indicator",
13
+ className: "grid place-content-center text-current transition-none",
14
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
15
+ })
16
+ });
17
+ }
18
+ //#endregion
19
+ export { Checkbox$1 as t };
@@ -0,0 +1,109 @@
1
+ import { n as TSS_SERVER_FUNCTION, r as getServerFnById, t as createServerFn } from "../server.js";
2
+ import { t as isRetryableSqliteError } from "./sqlite-error-LZDrnxdd.js";
3
+ import { queryOptions } from "@tanstack/react-query";
4
+ import { z } from "zod";
5
+ //#region ../../node_modules/.bun/@tanstack+start-server-core@1.169.3/node_modules/@tanstack/start-server-core/dist/esm/createSsrRpc.js
6
+ var createSsrRpc = (functionId) => {
7
+ const url = "/_serverFn/" + functionId;
8
+ const serverFnMeta = { id: functionId };
9
+ const fn = async (...args) => {
10
+ return (await getServerFnById(functionId, { origin: "server" }))(...args);
11
+ };
12
+ return Object.assign(fn, {
13
+ url,
14
+ serverFnMeta,
15
+ [TSS_SERVER_FUNCTION]: true
16
+ });
17
+ };
18
+ //#endregion
19
+ //#region src/lib/codex-server.ts
20
+ var projectSchema = z.object({ project: z.string().min(1) });
21
+ var deleteProjectSchema = z.object({
22
+ deleteSessionFiles: z.boolean().default(false),
23
+ project: z.string().min(1)
24
+ });
25
+ var threadSchema = z.object({ threadId: z.string().min(1) });
26
+ var deleteThreadSchema = z.object({
27
+ deleteSessionFiles: z.boolean().default(false),
28
+ threadId: z.string().min(1)
29
+ });
30
+ var deleteThreadsSchema = z.object({
31
+ deleteSessionFiles: z.boolean().default(false),
32
+ threadIds: z.array(z.string().min(1)).min(1)
33
+ });
34
+ var analyticsSchema = z.object({ project: z.string().min(1).nullable() });
35
+ var exportSchema = z.object({
36
+ convertToProjectRoot: z.boolean(),
37
+ includeCommentary: z.boolean(),
38
+ includeTools: z.boolean(),
39
+ optimized: z.boolean(),
40
+ outputFormat: z.enum(["md", "txt"]),
41
+ redactUsername: z.boolean(),
42
+ threadId: z.string().min(1)
43
+ });
44
+ var exportThreadsSchema = z.object({
45
+ convertToProjectRoot: z.boolean(),
46
+ includeCommentary: z.boolean(),
47
+ includeTools: z.boolean(),
48
+ optimized: z.boolean(),
49
+ outputFormat: z.enum(["md", "txt"]),
50
+ redactUsername: z.boolean(),
51
+ threadIds: z.array(z.string().min(1)).min(1)
52
+ });
53
+ var getDashboardSummaryFn = createServerFn({ method: "GET" }).handler(createSsrRpc("792690638a3b10035a5b7368c3d98bdc70cbfe1e36a4aa5f45b1c49b8b1025b0"));
54
+ var listProjectsFn = createServerFn({ method: "GET" }).handler(createSsrRpc("ccefccb816ba13508f23db4e31067b3403e750225257592d3ae11071ffc3fd6f"));
55
+ var listProjectThreadsFn = createServerFn({ method: "GET" }).inputValidator(projectSchema).handler(createSsrRpc("59fb2cb4d60c8e7d47e0afcc914ee6f9d9f4bf076c8e66eab1693066753655b3"));
56
+ var getThreadSnapshotFn = createServerFn({ method: "GET" }).inputValidator(threadSchema).handler(createSsrRpc("72991e2b6e0adbf8d63bb8b139dad88a00b77b7030ec28ceac36c3cce7846b4c"));
57
+ var getThreadTranscriptFn = createServerFn({ method: "GET" }).inputValidator(threadSchema).handler(createSsrRpc("5da27045f7e28ded6353bc16aace284af7ef1b4010ef04d0186a6feadb466497"));
58
+ var getAnalyticsFn = createServerFn({ method: "GET" }).inputValidator(analyticsSchema).handler(createSsrRpc("4712520da0f07bbd1f0907e5a162fe518516ff4caca3fd23876cc65539d87d7a"));
59
+ var exportThreadFn = createServerFn({ method: "POST" }).inputValidator(exportSchema).handler(createSsrRpc("0814663c3bdc58135f97d210d145ef0be5ca54ef9a5f1e3030be9b1bfc901e30"));
60
+ var exportThreadsFn = createServerFn({ method: "POST" }).inputValidator(exportThreadsSchema).handler(createSsrRpc("b4e15c006e9a277470958bb008f89b5b0acc7256109581de44cf17d587d174a5"));
61
+ var deleteThreadFn = createServerFn({ method: "POST" }).inputValidator(deleteThreadSchema).handler(createSsrRpc("29727b7ad5b8fe42e83817376653e064d9fe8888799f056b2e59296b3396568b"));
62
+ var deleteThreadsFn = createServerFn({ method: "POST" }).inputValidator(deleteThreadsSchema).handler(createSsrRpc("96aa60bf7dd9b5bde415bcf3ad6f6955a975eecd9aa0516cf401cc39bebebe6c"));
63
+ var deleteProjectFn = createServerFn({ method: "POST" }).inputValidator(deleteProjectSchema).handler(createSsrRpc("164ee82cdd565ed96591a64312f0f7bd961040baf066a89d9f5636330d11360b"));
64
+ //#endregion
65
+ //#region src/lib/codex-queries.ts
66
+ var retrySqliteQuery = (failureCount, error) => {
67
+ return failureCount < 3 && isRetryableSqliteError(error);
68
+ };
69
+ var retryDelay = (attemptIndex) => {
70
+ return [150, 400][attemptIndex] ?? 800;
71
+ };
72
+ var dashboardQueryOptions = () => queryOptions({
73
+ queryFn: () => getDashboardSummaryFn(),
74
+ queryKey: ["dashboard"],
75
+ retry: retrySqliteQuery,
76
+ retryDelay
77
+ });
78
+ var projectsQueryOptions = () => queryOptions({
79
+ queryFn: () => listProjectsFn(),
80
+ queryKey: ["projects"],
81
+ retry: retrySqliteQuery,
82
+ retryDelay
83
+ });
84
+ var projectThreadsQueryOptions = (project) => queryOptions({
85
+ queryFn: () => listProjectThreadsFn({ data: { project } }),
86
+ queryKey: ["project-threads", project],
87
+ retry: retrySqliteQuery,
88
+ retryDelay
89
+ });
90
+ var threadSnapshotQueryOptions = (threadId) => queryOptions({
91
+ queryFn: () => getThreadSnapshotFn({ data: { threadId } }),
92
+ queryKey: ["thread", threadId],
93
+ retry: retrySqliteQuery,
94
+ retryDelay
95
+ });
96
+ var threadTranscriptQueryOptions = (threadId) => queryOptions({
97
+ queryFn: () => getThreadTranscriptFn({ data: { threadId } }),
98
+ queryKey: ["thread-transcript", threadId],
99
+ retry: retrySqliteQuery,
100
+ retryDelay
101
+ });
102
+ var analyticsQueryOptions = (project) => queryOptions({
103
+ queryFn: () => getAnalyticsFn({ data: { project } }),
104
+ queryKey: ["analytics", project ?? "all"],
105
+ retry: retrySqliteQuery,
106
+ retryDelay
107
+ });
108
+ //#endregion
109
+ export { threadSnapshotQueryOptions as a, deleteThreadFn as c, exportThreadsFn as d, projectsQueryOptions as i, deleteThreadsFn as l, dashboardQueryOptions as n, threadTranscriptQueryOptions as o, projectThreadsQueryOptions as r, deleteProjectFn as s, analyticsQueryOptions as t, exportThreadFn as u };