agentfit 0.1.0 → 0.1.1

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 (68) hide show
  1. package/README.md +30 -34
  2. package/app/(dashboard)/daily/page.tsx +1 -1
  3. package/app/(dashboard)/flow/page.tsx +17 -0
  4. package/app/(dashboard)/layout.tsx +2 -0
  5. package/app/(dashboard)/page.tsx +24 -5
  6. package/app/(dashboard)/reports/[id]/page.tsx +72 -0
  7. package/app/(dashboard)/reports/page.tsx +132 -0
  8. package/app/(dashboard)/sessions/[id]/page.tsx +167 -0
  9. package/app/(dashboard)/settings/page.tsx +180 -0
  10. package/app/api/backup/route.ts +215 -0
  11. package/app/api/check/route.ts +11 -1
  12. package/app/api/command-insights/route.ts +13 -0
  13. package/app/api/images-analysis/route.ts +3 -4
  14. package/app/api/reports/[id]/route.ts +23 -0
  15. package/app/api/reports/route.ts +50 -0
  16. package/app/api/reset/route.ts +21 -0
  17. package/app/api/session/route.ts +40 -0
  18. package/app/api/usage/route.ts +25 -1
  19. package/app/layout.tsx +1 -1
  20. package/bin/agentfit.mjs +2 -2
  21. package/components/agent-coach.tsx +256 -129
  22. package/components/app-sidebar.tsx +258 -8
  23. package/components/backup-section.tsx +236 -0
  24. package/components/daily-chart.tsx +404 -83
  25. package/components/dashboard-shell.tsx +9 -24
  26. package/components/data-provider.tsx +66 -2
  27. package/components/fitness-score.tsx +95 -54
  28. package/components/overview-cards.tsx +148 -41
  29. package/components/report-view.tsx +307 -0
  30. package/components/screenshots-analysis.tsx +51 -46
  31. package/components/session-chatlog.tsx +124 -0
  32. package/components/session-timeline.tsx +184 -0
  33. package/components/session-workflow.tsx +183 -0
  34. package/components/sessions-table.tsx +9 -1
  35. package/components/tool-flow-graph.tsx +144 -0
  36. package/components/ui/carousel.tsx +242 -0
  37. package/components/ui/sidebar.tsx +1 -1
  38. package/components/ui/sonner.tsx +51 -0
  39. package/generated/prisma/browser.ts +5 -0
  40. package/generated/prisma/client.ts +5 -0
  41. package/generated/prisma/internal/class.ts +14 -4
  42. package/generated/prisma/internal/prismaNamespace.ts +96 -2
  43. package/generated/prisma/internal/prismaNamespaceBrowser.ts +20 -1
  44. package/generated/prisma/models/Report.ts +1219 -0
  45. package/generated/prisma/models/Session.ts +187 -1
  46. package/generated/prisma/models.ts +1 -0
  47. package/lib/coach.ts +530 -211
  48. package/lib/command-insights.ts +231 -0
  49. package/lib/db.ts +1 -1
  50. package/lib/parse-codex.ts +5 -0
  51. package/lib/parse-logs.ts +65 -0
  52. package/lib/queries-codex.ts +22 -0
  53. package/lib/queries.ts +42 -0
  54. package/lib/report.ts +156 -0
  55. package/lib/session-detail.ts +382 -0
  56. package/lib/sync.ts +77 -0
  57. package/lib/tool-flow.ts +71 -0
  58. package/next.config.mjs +6 -1
  59. package/package.json +16 -2
  60. package/plugins/cost-heatmap/component.tsx +72 -50
  61. package/prisma/schema.prisma +17 -0
  62. package/.claude/settings.local.json +0 -26
  63. package/CONTRIBUTING.md +0 -209
  64. package/prisma/migrations/20260328152517_init/migration.sql +0 -41
  65. package/prisma/migrations/20260328153801_add_image_model/migration.sql +0 -18
  66. package/prisma/migrations/migration_lock.toml +0 -3
  67. package/prisma.config.ts +0 -14
  68. package/setup.sh +0 -73
@@ -0,0 +1,242 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import useEmblaCarousel, {
5
+ type UseEmblaCarouselType,
6
+ } from "embla-carousel-react"
7
+
8
+ import { cn } from "@/lib/utils"
9
+ import { Button } from "@/components/ui/button"
10
+ import { IconChevronLeft, IconChevronRight } from "@tabler/icons-react"
11
+
12
+ type CarouselApi = UseEmblaCarouselType[1]
13
+ type UseCarouselParameters = Parameters<typeof useEmblaCarousel>
14
+ type CarouselOptions = UseCarouselParameters[0]
15
+ type CarouselPlugin = UseCarouselParameters[1]
16
+
17
+ type CarouselProps = {
18
+ opts?: CarouselOptions
19
+ plugins?: CarouselPlugin
20
+ orientation?: "horizontal" | "vertical"
21
+ setApi?: (api: CarouselApi) => void
22
+ }
23
+
24
+ type CarouselContextProps = {
25
+ carouselRef: ReturnType<typeof useEmblaCarousel>[0]
26
+ api: ReturnType<typeof useEmblaCarousel>[1]
27
+ scrollPrev: () => void
28
+ scrollNext: () => void
29
+ canScrollPrev: boolean
30
+ canScrollNext: boolean
31
+ } & CarouselProps
32
+
33
+ const CarouselContext = React.createContext<CarouselContextProps | null>(null)
34
+
35
+ function useCarousel() {
36
+ const context = React.useContext(CarouselContext)
37
+
38
+ if (!context) {
39
+ throw new Error("useCarousel must be used within a <Carousel />")
40
+ }
41
+
42
+ return context
43
+ }
44
+
45
+ function Carousel({
46
+ orientation = "horizontal",
47
+ opts,
48
+ setApi,
49
+ plugins,
50
+ className,
51
+ children,
52
+ ...props
53
+ }: React.ComponentProps<"div"> & CarouselProps) {
54
+ const [carouselRef, api] = useEmblaCarousel(
55
+ {
56
+ ...opts,
57
+ axis: orientation === "horizontal" ? "x" : "y",
58
+ },
59
+ plugins
60
+ )
61
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false)
62
+ const [canScrollNext, setCanScrollNext] = React.useState(false)
63
+
64
+ const onSelect = React.useCallback((api: CarouselApi) => {
65
+ if (!api) return
66
+ setCanScrollPrev(api.canScrollPrev())
67
+ setCanScrollNext(api.canScrollNext())
68
+ }, [])
69
+
70
+ const scrollPrev = React.useCallback(() => {
71
+ api?.scrollPrev()
72
+ }, [api])
73
+
74
+ const scrollNext = React.useCallback(() => {
75
+ api?.scrollNext()
76
+ }, [api])
77
+
78
+ const handleKeyDown = React.useCallback(
79
+ (event: React.KeyboardEvent<HTMLDivElement>) => {
80
+ if (event.key === "ArrowLeft") {
81
+ event.preventDefault()
82
+ scrollPrev()
83
+ } else if (event.key === "ArrowRight") {
84
+ event.preventDefault()
85
+ scrollNext()
86
+ }
87
+ },
88
+ [scrollPrev, scrollNext]
89
+ )
90
+
91
+ React.useEffect(() => {
92
+ if (!api || !setApi) return
93
+ setApi(api)
94
+ }, [api, setApi])
95
+
96
+ React.useEffect(() => {
97
+ if (!api) return
98
+ onSelect(api)
99
+ api.on("reInit", onSelect)
100
+ api.on("select", onSelect)
101
+
102
+ return () => {
103
+ api?.off("select", onSelect)
104
+ }
105
+ }, [api, onSelect])
106
+
107
+ return (
108
+ <CarouselContext.Provider
109
+ value={{
110
+ carouselRef,
111
+ api: api,
112
+ opts,
113
+ orientation:
114
+ orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
115
+ scrollPrev,
116
+ scrollNext,
117
+ canScrollPrev,
118
+ canScrollNext,
119
+ }}
120
+ >
121
+ <div
122
+ onKeyDownCapture={handleKeyDown}
123
+ className={cn("relative", className)}
124
+ role="region"
125
+ aria-roledescription="carousel"
126
+ data-slot="carousel"
127
+ {...props}
128
+ >
129
+ {children}
130
+ </div>
131
+ </CarouselContext.Provider>
132
+ )
133
+ }
134
+
135
+ function CarouselContent({ className, ...props }: React.ComponentProps<"div">) {
136
+ const { carouselRef, orientation } = useCarousel()
137
+
138
+ return (
139
+ <div
140
+ ref={carouselRef}
141
+ className="overflow-hidden"
142
+ data-slot="carousel-content"
143
+ >
144
+ <div
145
+ className={cn(
146
+ "flex",
147
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
148
+ className
149
+ )}
150
+ {...props}
151
+ />
152
+ </div>
153
+ )
154
+ }
155
+
156
+ function CarouselItem({ className, ...props }: React.ComponentProps<"div">) {
157
+ const { orientation } = useCarousel()
158
+
159
+ return (
160
+ <div
161
+ role="group"
162
+ aria-roledescription="slide"
163
+ data-slot="carousel-item"
164
+ className={cn(
165
+ "min-w-0 shrink-0 grow-0 basis-full",
166
+ orientation === "horizontal" ? "pl-4" : "pt-4",
167
+ className
168
+ )}
169
+ {...props}
170
+ />
171
+ )
172
+ }
173
+
174
+ function CarouselPrevious({
175
+ className,
176
+ variant = "outline",
177
+ size = "icon-sm",
178
+ ...props
179
+ }: React.ComponentProps<typeof Button>) {
180
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel()
181
+
182
+ return (
183
+ <Button
184
+ data-slot="carousel-previous"
185
+ variant={variant}
186
+ size={size}
187
+ className={cn(
188
+ "absolute touch-manipulation rounded-full",
189
+ orientation === "horizontal"
190
+ ? "top-1/2 -left-12 -translate-y-1/2"
191
+ : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
192
+ className
193
+ )}
194
+ disabled={!canScrollPrev}
195
+ onClick={scrollPrev}
196
+ {...props}
197
+ >
198
+ <IconChevronLeft />
199
+ <span className="sr-only">Previous slide</span>
200
+ </Button>
201
+ )
202
+ }
203
+
204
+ function CarouselNext({
205
+ className,
206
+ variant = "outline",
207
+ size = "icon-sm",
208
+ ...props
209
+ }: React.ComponentProps<typeof Button>) {
210
+ const { orientation, scrollNext, canScrollNext } = useCarousel()
211
+
212
+ return (
213
+ <Button
214
+ data-slot="carousel-next"
215
+ variant={variant}
216
+ size={size}
217
+ className={cn(
218
+ "absolute touch-manipulation rounded-full",
219
+ orientation === "horizontal"
220
+ ? "top-1/2 -right-12 -translate-y-1/2"
221
+ : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
222
+ className
223
+ )}
224
+ disabled={!canScrollNext}
225
+ onClick={scrollNext}
226
+ {...props}
227
+ >
228
+ <IconChevronRight />
229
+ <span className="sr-only">Next slide</span>
230
+ </Button>
231
+ )
232
+ }
233
+
234
+ export {
235
+ type CarouselApi,
236
+ Carousel,
237
+ CarouselContent,
238
+ CarouselItem,
239
+ CarouselPrevious,
240
+ CarouselNext,
241
+ useCarousel,
242
+ }
@@ -27,7 +27,7 @@ import { IconLayoutSidebar } from "@tabler/icons-react"
27
27
 
28
28
  const SIDEBAR_COOKIE_NAME = "sidebar_state"
29
29
  const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
30
- const SIDEBAR_WIDTH = "16rem"
30
+ const SIDEBAR_WIDTH = "14rem"
31
31
  const SIDEBAR_WIDTH_MOBILE = "18rem"
32
32
  const SIDEBAR_WIDTH_ICON = "3rem"
33
33
  const SIDEBAR_KEYBOARD_SHORTCUT = "b"
@@ -0,0 +1,51 @@
1
+ "use client"
2
+
3
+ import { useTheme } from "next-themes"
4
+ import { Toaster as Sonner, type ToasterProps } from "sonner"
5
+ import { IconCircleCheck, IconInfoCircle, IconAlertTriangle, IconAlertOctagon, IconLoader } from "@tabler/icons-react"
6
+
7
+ const Toaster = ({ ...props }: ToasterProps) => {
8
+ const { theme = "system" } = useTheme()
9
+
10
+ return (
11
+ <Sonner
12
+ theme={theme as ToasterProps["theme"]}
13
+ className="toaster group"
14
+ position="top-center"
15
+ richColors
16
+ icons={{
17
+ success: (
18
+ <IconCircleCheck className="size-4" />
19
+ ),
20
+ info: (
21
+ <IconInfoCircle className="size-4" />
22
+ ),
23
+ warning: (
24
+ <IconAlertTriangle className="size-4" />
25
+ ),
26
+ error: (
27
+ <IconAlertOctagon className="size-4" />
28
+ ),
29
+ loading: (
30
+ <IconLoader className="size-4 animate-spin" />
31
+ ),
32
+ }}
33
+ style={
34
+ {
35
+ "--normal-bg": "var(--popover)",
36
+ "--normal-text": "var(--popover-foreground)",
37
+ "--normal-border": "var(--border)",
38
+ "--border-radius": "var(--radius)",
39
+ } as React.CSSProperties
40
+ }
41
+ toastOptions={{
42
+ classNames: {
43
+ toast: "cn-toast",
44
+ },
45
+ }}
46
+ {...props}
47
+ />
48
+ )
49
+ }
50
+
51
+ export { Toaster }
@@ -32,3 +32,8 @@ export type Image = Prisma.ImageModel
32
32
  *
33
33
  */
34
34
  export type SyncLog = Prisma.SyncLogModel
35
+ /**
36
+ * Model Report
37
+ *
38
+ */
39
+ export type Report = Prisma.ReportModel
@@ -56,3 +56,8 @@ export type Image = Prisma.ImageModel
56
56
  *
57
57
  */
58
58
  export type SyncLog = Prisma.SyncLogModel
59
+ /**
60
+ * Model Report
61
+ *
62
+ */
63
+ export type Report = Prisma.ReportModel
@@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = {
20
20
  "clientVersion": "7.6.0",
21
21
  "engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711",
22
22
  "activeProvider": "sqlite",
23
- "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionId String @unique\n project String\n projectPath String\n startTime DateTime\n endTime DateTime\n durationMinutes Float\n userMessages Int\n assistantMessages Int\n totalMessages Int\n inputTokens Int\n outputTokens Int\n cacheCreationTokens Int\n cacheReadTokens Int\n totalTokens Int\n costUSD Float\n model String\n toolCallsTotal Int\n toolCallsJson String // JSON string of Record<string, number>\n createdAt DateTime @default(now())\n\n @@index([project])\n @@index([startTime])\n}\n\nmodel Image {\n id String @id @default(cuid())\n sessionId String\n messageId String // uuid of the message containing the image\n filename String // relative path under data/images/\n mediaType String // e.g. image/png\n sizeBytes Int\n timestamp DateTime\n role String // user or assistant\n createdAt DateTime @default(now())\n\n @@unique([sessionId, messageId, filename])\n @@index([sessionId])\n}\n\nmodel SyncLog {\n id String @id @default(cuid())\n syncedAt DateTime @default(now())\n filesProcessed Int\n sessionsAdded Int\n sessionsSkipped Int\n}\n",
23
+ "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionId String @unique\n project String\n projectPath String\n startTime DateTime\n endTime DateTime\n durationMinutes Float\n userMessages Int\n assistantMessages Int\n totalMessages Int\n inputTokens Int\n outputTokens Int\n cacheCreationTokens Int\n cacheReadTokens Int\n totalTokens Int\n costUSD Float\n model String\n toolCallsTotal Int\n toolCallsJson String // JSON string of Record<string, number>\n skillCallsJson String @default(\"{}\") // JSON string of Record<string, number>\n messageTimestamps String @default(\"[]\") // JSON array of ISO timestamp strings\n apiErrors Int @default(0)\n rateLimitErrors Int @default(0)\n userInterruptions Int @default(0)\n permissionModesJson String @default(\"{}\") // JSON: {default:N, acceptEdits:N, bypassPermissions:N, plan:N}\n createdAt DateTime @default(now())\n\n @@index([project])\n @@index([startTime])\n}\n\nmodel Image {\n id String @id @default(cuid())\n sessionId String\n messageId String // uuid of the message containing the image\n filename String // relative path under data/images/\n mediaType String // e.g. image/png\n sizeBytes Int\n timestamp DateTime\n role String // user or assistant\n createdAt DateTime @default(now())\n\n @@unique([sessionId, messageId, filename])\n @@index([sessionId])\n}\n\nmodel SyncLog {\n id String @id @default(cuid())\n syncedAt DateTime @default(now())\n filesProcessed Int\n sessionsAdded Int\n sessionsSkipped Int\n}\n\nmodel Report {\n id String @id @default(cuid())\n title String\n generatedAt DateTime @default(now())\n contentJson String\n sessionCount Int\n createdAt DateTime @default(now())\n\n @@index([generatedAt])\n}\n",
24
24
  "runtimeDataModel": {
25
25
  "models": {},
26
26
  "enums": {},
@@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = {
32
32
  }
33
33
  }
34
34
 
35
- config.runtimeDataModel = JSON.parse("{\"models\":{\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"project\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"projectPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"durationMinutes\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"userMessages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"assistantMessages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalMessages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"inputTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"outputTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cacheCreationTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cacheReadTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"costUSD\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"model\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toolCallsTotal\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"toolCallsJson\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Image\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"filename\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mediaType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"timestamp\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"role\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"SyncLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"syncedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"filesProcessed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sessionsAdded\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sessionsSkipped\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
35
+ config.runtimeDataModel = JSON.parse("{\"models\":{\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"project\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"projectPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"durationMinutes\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"userMessages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"assistantMessages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalMessages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"inputTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"outputTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cacheCreationTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cacheReadTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"costUSD\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"model\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toolCallsTotal\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"toolCallsJson\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"skillCallsJson\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageTimestamps\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"apiErrors\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"rateLimitErrors\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userInterruptions\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"permissionModesJson\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Image\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"filename\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mediaType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"timestamp\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"role\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"SyncLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"syncedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"filesProcessed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sessionsAdded\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sessionsSkipped\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"Report\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"generatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"contentJson\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
36
36
  config.parameterizationSchema = {
37
- strings: JSON.parse("[\"where\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"data\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"create\",\"update\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Session.groupBy\",\"Session.aggregate\",\"Image.findUnique\",\"Image.findUniqueOrThrow\",\"Image.findFirst\",\"Image.findFirstOrThrow\",\"Image.findMany\",\"Image.createOne\",\"Image.createMany\",\"Image.createManyAndReturn\",\"Image.updateOne\",\"Image.updateMany\",\"Image.updateManyAndReturn\",\"Image.upsertOne\",\"Image.deleteOne\",\"Image.deleteMany\",\"Image.groupBy\",\"Image.aggregate\",\"SyncLog.findUnique\",\"SyncLog.findUniqueOrThrow\",\"SyncLog.findFirst\",\"SyncLog.findFirstOrThrow\",\"SyncLog.findMany\",\"SyncLog.createOne\",\"SyncLog.createMany\",\"SyncLog.createManyAndReturn\",\"SyncLog.updateOne\",\"SyncLog.updateMany\",\"SyncLog.updateManyAndReturn\",\"SyncLog.upsertOne\",\"SyncLog.deleteOne\",\"SyncLog.deleteMany\",\"SyncLog.groupBy\",\"SyncLog.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"syncedAt\",\"filesProcessed\",\"sessionsAdded\",\"sessionsSkipped\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"sessionId\",\"messageId\",\"filename\",\"mediaType\",\"sizeBytes\",\"timestamp\",\"role\",\"createdAt\",\"sessionId_messageId_filename\",\"project\",\"projectPath\",\"startTime\",\"endTime\",\"durationMinutes\",\"userMessages\",\"assistantMessages\",\"totalMessages\",\"inputTokens\",\"outputTokens\",\"cacheCreationTokens\",\"cacheReadTokens\",\"totalTokens\",\"costUSD\",\"model\",\"toolCallsTotal\",\"toolCallsJson\",\"set\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
38
- graph: "dR8wFzwAAGEAMD0AAAQAED4AAGEAMD8BAAAAAU8BAAAAAVZAAFkAIVgBAFgAIVkBAFgAIVpAAFkAIVtAAFkAIVwIAGIAIV0CAFoAIV4CAFoAIV8CAFoAIWACAFoAIWECAFoAIWICAFoAIWMCAFoAIWQCAFoAIWUIAGIAIWYBAFgAIWcCAFoAIWgBAFgAIQEAAAABACABAAAAAQAgFzwAAGEAMD0AAAQAED4AAGEAMD8BAFgAIU8BAFgAIVZAAFkAIVgBAFgAIVkBAFgAIVpAAFkAIVtAAFkAIVwIAGIAIV0CAFoAIV4CAFoAIV8CAFoAIWACAFoAIWECAFoAIWICAFoAIWMCAFoAIWQCAFoAIWUIAGIAIWYBAFgAIWcCAFoAIWgBAFgAIQADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACAUPwEAAAABTwEAAAABVkAAAAABWAEAAAABWQEAAAABWkAAAAABW0AAAAABXAgAAAABXQIAAAABXgIAAAABXwIAAAABYAIAAAABYQIAAAABYgIAAAABYwIAAAABZAIAAAABZQgAAAABZgEAAAABZwIAAAABaAEAAAABAQgAAAkAIBQ_AQAAAAFPAQAAAAFWQAAAAAFYAQAAAAFZAQAAAAFaQAAAAAFbQAAAAAFcCAAAAAFdAgAAAAFeAgAAAAFfAgAAAAFgAgAAAAFhAgAAAAFiAgAAAAFjAgAAAAFkAgAAAAFlCAAAAAFmAQAAAAFnAgAAAAFoAQAAAAEBCAAACwAwAQgAAAsAMBQ_AQBoACFPAQBoACFWQABpACFYAQBoACFZAQBoACFaQABpACFbQABpACFcCAB1ACFdAgBqACFeAgBqACFfAgBqACFgAgBqACFhAgBqACFiAgBqACFjAgBqACFkAgBqACFlCAB1ACFmAQBoACFnAgBqACFoAQBoACECAAAAAQAgCAAADgAgFD8BAGgAIU8BAGgAIVZAAGkAIVgBAGgAIVkBAGgAIVpAAGkAIVtAAGkAIVwIAHUAIV0CAGoAIV4CAGoAIV8CAGoAIWACAGoAIWECAGoAIWICAGoAIWMCAGoAIWQCAGoAIWUIAHUAIWYBAGgAIWcCAGoAIWgBAGgAIQIAAAAEACAIAAAQACACAAAABAAgCAAAEAAgAwAAAAEAIA8AAAkAIBAAAA4AIAEAAAABACABAAAABAAgBRUAAHAAIBYAAHEAIBcAAHQAIBgAAHMAIBkAAHIAIBc8AABeADA9AAAXABA-AABeADA_AQBNACFPAQBNACFWQABOACFYAQBNACFZAQBNACFaQABOACFbQABOACFcCABfACFdAgBPACFeAgBPACFfAgBPACFgAgBPACFhAgBPACFiAgBPACFjAgBPACFkAgBPACFlCABfACFmAQBNACFnAgBPACFoAQBNACEDAAAABAAgAwAAFgAwFAAAFwAgAwAAAAQAIAMAAAUAMAQAAAEAIA08AABcADA9AAAdABA-AABcADA_AQAAAAFPAQBYACFQAQBYACFRAQBYACFSAQBYACFTAgBaACFUQABZACFVAQBYACFWQABZACFXAABdACABAAAAGgAgAQAAABoAIAw8AABcADA9AAAdABA-AABcADA_AQBYACFPAQBYACFQAQBYACFRAQBYACFSAQBYACFTAgBaACFUQABZACFVAQBYACFWQABZACEAAwAAAB0AIAMAAB4AMAQAABoAIAMAAAAdACADAAAeADAEAAAaACADAAAAHQAgAwAAHgAwBAAAGgAgCT8BAAAAAU8BAAAAAVABAAAAAVEBAAAAAVIBAAAAAVMCAAAAAVRAAAAAAVUBAAAAAVZAAAAAAQEIAAAiACAJPwEAAAABTwEAAAABUAEAAAABUQEAAAABUgEAAAABUwIAAAABVEAAAAABVQEAAAABVkAAAAABAQgAACQAMAEIAAAkADAJPwEAaAAhTwEAaAAhUAEAaAAhUQEAaAAhUgEAaAAhUwIAagAhVEAAaQAhVQEAaAAhVkAAaQAhAgAAABoAIAgAACcAIAk_AQBoACFPAQBoACFQAQBoACFRAQBoACFSAQBoACFTAgBqACFUQABpACFVAQBoACFWQABpACECAAAAHQAgCAAAKQAgAgAAAB0AIAgAACkAIAMAAAAaACAPAAAiACAQAAAnACABAAAAGgAgAQAAAB0AIAUVAABrACAWAABsACAXAABvACAYAABuACAZAABtACAMPAAAWwAwPQAAMAAQPgAAWwAwPwEATQAhTwEATQAhUAEATQAhUQEATQAhUgEATQAhUwIATwAhVEAATgAhVQEATQAhVkAATgAhAwAAAB0AIAMAAC8AMBQAADAAIAMAAAAdACADAAAeADAEAAAaACAIPAAAVwAwPQAANgAQPgAAVwAwPwEAAAABQEAAWQAhQQIAWgAhQgIAWgAhQwIAWgAhAQAAADMAIAEAAAAzACAIPAAAVwAwPQAANgAQPgAAVwAwPwEAWAAhQEAAWQAhQQIAWgAhQgIAWgAhQwIAWgAhAAMAAAA2ACADAAA3ADAEAAAzACADAAAANgAgAwAANwAwBAAAMwAgAwAAADYAIAMAADcAMAQAADMAIAU_AQAAAAFAQAAAAAFBAgAAAAFCAgAAAAFDAgAAAAEBCAAAOwAgBT8BAAAAAUBAAAAAAUECAAAAAUICAAAAAUMCAAAAAQEIAAA9ADABCAAAPQAwBT8BAGgAIUBAAGkAIUECAGoAIUICAGoAIUMCAGoAIQIAAAAzACAIAABAACAFPwEAaAAhQEAAaQAhQQIAagAhQgIAagAhQwIAagAhAgAAADYAIAgAAEIAIAIAAAA2ACAIAABCACADAAAAMwAgDwAAOwAgEAAAQAAgAQAAADMAIAEAAAA2ACAFFQAAYwAgFgAAZAAgFwAAZwAgGAAAZgAgGQAAZQAgCDwAAEwAMD0AAEkAED4AAEwAMD8BAE0AIUBAAE4AIUECAE8AIUICAE8AIUMCAE8AIQMAAAA2ACADAABIADAUAABJACADAAAANgAgAwAANwAwBAAAMwAgCDwAAEwAMD0AAEkAED4AAEwAMD8BAE0AIUBAAE4AIUECAE8AIUICAE8AIUMCAE8AIQ4VAABRACAYAABWACAZAABWACBEAQAAAAFFAQAAAARGAQAAAARHAQAAAAFIAQAAAAFJAQAAAAFKAQAAAAFLAQBVACFMAQAAAAFNAQAAAAFOAQAAAAELFQAAUQAgGAAAVAAgGQAAVAAgREAAAAABRUAAAAAERkAAAAAER0AAAAABSEAAAAABSUAAAAABSkAAAAABS0AAUwAhDRUAAFEAIBYAAFIAIBcAAFEAIBgAAFEAIBkAAFEAIEQCAAAAAUUCAAAABEYCAAAABEcCAAAAAUgCAAAAAUkCAAAAAUoCAAAAAUsCAFAAIQ0VAABRACAWAABSACAXAABRACAYAABRACAZAABRACBEAgAAAAFFAgAAAARGAgAAAARHAgAAAAFIAgAAAAFJAgAAAAFKAgAAAAFLAgBQACEIRAIAAAABRQIAAAAERgIAAAAERwIAAAABSAIAAAABSQIAAAABSgIAAAABSwIAUQAhCEQIAAAAAUUIAAAABEYIAAAABEcIAAAAAUgIAAAAAUkIAAAAAUoIAAAAAUsIAFIAIQsVAABRACAYAABUACAZAABUACBEQAAAAAFFQAAAAARGQAAAAARHQAAAAAFIQAAAAAFJQAAAAAFKQAAAAAFLQABTACEIREAAAAABRUAAAAAERkAAAAAER0AAAAABSEAAAAABSUAAAAABSkAAAAABS0AAVAAhDhUAAFEAIBgAAFYAIBkAAFYAIEQBAAAAAUUBAAAABEYBAAAABEcBAAAAAUgBAAAAAUkBAAAAAUoBAAAAAUsBAFUAIUwBAAAAAU0BAAAAAU4BAAAAAQtEAQAAAAFFAQAAAARGAQAAAARHAQAAAAFIAQAAAAFJAQAAAAFKAQAAAAFLAQBWACFMAQAAAAFNAQAAAAFOAQAAAAEIPAAAVwAwPQAANgAQPgAAVwAwPwEAWAAhQEAAWQAhQQIAWgAhQgIAWgAhQwIAWgAhC0QBAAAAAUUBAAAABEYBAAAABEcBAAAAAUgBAAAAAUkBAAAAAUoBAAAAAUsBAFYAIUwBAAAAAU0BAAAAAU4BAAAAAQhEQAAAAAFFQAAAAARGQAAAAARHQAAAAAFIQAAAAAFJQAAAAAFKQAAAAAFLQABUACEIRAIAAAABRQIAAAAERgIAAAAERwIAAAABSAIAAAABSQIAAAABSgIAAAABSwIAUQAhDDwAAFsAMD0AADAAED4AAFsAMD8BAE0AIU8BAE0AIVABAE0AIVEBAE0AIVIBAE0AIVMCAE8AIVRAAE4AIVUBAE0AIVZAAE4AIQw8AABcADA9AAAdABA-AABcADA_AQBYACFPAQBYACFQAQBYACFRAQBYACFSAQBYACFTAgBaACFUQABZACFVAQBYACFWQABZACEDTwEAAAABUAEAAAABUQEAAAABFzwAAF4AMD0AABcAED4AAF4AMD8BAE0AIU8BAE0AIVZAAE4AIVgBAE0AIVkBAE0AIVpAAE4AIVtAAE4AIVwIAF8AIV0CAE8AIV4CAE8AIV8CAE8AIWACAE8AIWECAE8AIWICAE8AIWMCAE8AIWQCAE8AIWUIAF8AIWYBAE0AIWcCAE8AIWgBAE0AIQ0VAABRACAWAABSACAXAABSACAYAABSACAZAABSACBECAAAAAFFCAAAAARGCAAAAARHCAAAAAFICAAAAAFJCAAAAAFKCAAAAAFLCABgACENFQAAUQAgFgAAUgAgFwAAUgAgGAAAUgAgGQAAUgAgRAgAAAABRQgAAAAERggAAAAERwgAAAABSAgAAAABSQgAAAABSggAAAABSwgAYAAhFzwAAGEAMD0AAAQAED4AAGEAMD8BAFgAIU8BAFgAIVZAAFkAIVgBAFgAIVkBAFgAIVpAAFkAIVtAAFkAIVwIAGIAIV0CAFoAIV4CAFoAIV8CAFoAIWACAFoAIWECAFoAIWICAFoAIWMCAFoAIWQCAFoAIWUIAGIAIWYBAFgAIWcCAFoAIWgBAFgAIQhECAAAAAFFCAAAAARGCAAAAARHCAAAAAFICAAAAAFJCAAAAAFKCAAAAAFLCABSACEAAAAAAAFpAQAAAAEBaUAAAAABBWkCAAAAAWoCAAAAAWsCAAAAAWwCAAAAAW0CAAAAAQAAAAAAAAAAAAAFaQgAAAABaggAAAABawgAAAABbAgAAAABbQgAAAABAAAAAAUVAAYWAAcXAAgYAAkZAAoAAAAAAAUVAAYWAAcXAAgYAAkZAAoAAAAFFQAQFgARFwASGAATGQAUAAAAAAAFFQAQFgARFwASGAATGQAUAAAABRUAGhYAGxcAHBgAHRkAHgAAAAAABRUAGhYAGxcAHBgAHRkAHgECAQIDAQUGAQYHAQcIAQkKAQoMAgsNAwwPAQ0RAg4SBBETARIUARMVAhoYBRsZCxwbDB0cDB4fDB8gDCAhDCEjDCIlAiMmDSQoDCUqAiYrDicsDCgtDCkuAioxDysyFSw0Fi01Fi44Fi85FjA6FjE8FjI-AjM_FzRBFjVDAjZEGDdFFjhGFjlHAjpKGTtLHw"
37
+ strings: JSON.parse("[\"where\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"data\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"create\",\"update\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Session.groupBy\",\"Session.aggregate\",\"Image.findUnique\",\"Image.findUniqueOrThrow\",\"Image.findFirst\",\"Image.findFirstOrThrow\",\"Image.findMany\",\"Image.createOne\",\"Image.createMany\",\"Image.createManyAndReturn\",\"Image.updateOne\",\"Image.updateMany\",\"Image.updateManyAndReturn\",\"Image.upsertOne\",\"Image.deleteOne\",\"Image.deleteMany\",\"Image.groupBy\",\"Image.aggregate\",\"SyncLog.findUnique\",\"SyncLog.findUniqueOrThrow\",\"SyncLog.findFirst\",\"SyncLog.findFirstOrThrow\",\"SyncLog.findMany\",\"SyncLog.createOne\",\"SyncLog.createMany\",\"SyncLog.createManyAndReturn\",\"SyncLog.updateOne\",\"SyncLog.updateMany\",\"SyncLog.updateManyAndReturn\",\"SyncLog.upsertOne\",\"SyncLog.deleteOne\",\"SyncLog.deleteMany\",\"SyncLog.groupBy\",\"SyncLog.aggregate\",\"Report.findUnique\",\"Report.findUniqueOrThrow\",\"Report.findFirst\",\"Report.findFirstOrThrow\",\"Report.findMany\",\"Report.createOne\",\"Report.createMany\",\"Report.createManyAndReturn\",\"Report.updateOne\",\"Report.updateMany\",\"Report.updateManyAndReturn\",\"Report.upsertOne\",\"Report.deleteOne\",\"Report.deleteMany\",\"Report.groupBy\",\"Report.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"title\",\"generatedAt\",\"contentJson\",\"sessionCount\",\"createdAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"syncedAt\",\"filesProcessed\",\"sessionsAdded\",\"sessionsSkipped\",\"sessionId\",\"messageId\",\"filename\",\"mediaType\",\"sizeBytes\",\"timestamp\",\"role\",\"sessionId_messageId_filename\",\"project\",\"projectPath\",\"startTime\",\"endTime\",\"durationMinutes\",\"userMessages\",\"assistantMessages\",\"totalMessages\",\"inputTokens\",\"outputTokens\",\"cacheCreationTokens\",\"cacheReadTokens\",\"totalTokens\",\"costUSD\",\"model\",\"toolCallsTotal\",\"toolCallsJson\",\"skillCallsJson\",\"messageTimestamps\",\"apiErrors\",\"rateLimitErrors\",\"userInterruptions\",\"permissionModesJson\",\"set\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
38
+ graph: "lQEpQB1MAAB8ADBNAAAEABBOAAB8ADBPAQAAAAFUQAByACFkAQAAAAFsAQBxACFtAQBxACFuQAByACFvQAByACFwCAB9ACFxAgBzACFyAgBzACFzAgBzACF0AgBzACF1AgBzACF2AgBzACF3AgBzACF4AgBzACF5CAB9ACF6AQBxACF7AgBzACF8AQBxACF9AQBxACF-AQBxACF_AgBzACGAAQIAcwAhgQECAHMAIYIBAQBxACEBAAAAAQAgAQAAAAEAIB1MAAB8ADBNAAAEABBOAAB8ADBPAQBxACFUQAByACFkAQBxACFsAQBxACFtAQBxACFuQAByACFvQAByACFwCAB9ACFxAgBzACFyAgBzACFzAgBzACF0AgBzACF1AgBzACF2AgBzACF3AgBzACF4AgBzACF5CAB9ACF6AQBxACF7AgBzACF8AQBxACF9AQBxACF-AQBxACF_AgBzACGAAQIAcwAhgQECAHMAIYIBAQBxACEAAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACADAAAABAAgAwAABQAwBAAAAQAgGk8BAAAAAVRAAAAAAWQBAAAAAWwBAAAAAW0BAAAAAW5AAAAAAW9AAAAAAXAIAAAAAXECAAAAAXICAAAAAXMCAAAAAXQCAAAAAXUCAAAAAXYCAAAAAXcCAAAAAXgCAAAAAXkIAAAAAXoBAAAAAXsCAAAAAXwBAAAAAX0BAAAAAX4BAAAAAX8CAAAAAYABAgAAAAGBAQIAAAABggEBAAAAAQEIAAAJACAaTwEAAAABVEAAAAABZAEAAAABbAEAAAABbQEAAAABbkAAAAABb0AAAAABcAgAAAABcQIAAAABcgIAAAABcwIAAAABdAIAAAABdQIAAAABdgIAAAABdwIAAAABeAIAAAABeQgAAAABegEAAAABewIAAAABfAEAAAABfQEAAAABfgEAAAABfwIAAAABgAECAAAAAYEBAgAAAAGCAQEAAAABAQgAAAsAMAEIAAALADAaTwEAgwEAIVRAAIQBACFkAQCDAQAhbAEAgwEAIW0BAIMBACFuQACEAQAhb0AAhAEAIXAIAJUBACFxAgCFAQAhcgIAhQEAIXMCAIUBACF0AgCFAQAhdQIAhQEAIXYCAIUBACF3AgCFAQAheAIAhQEAIXkIAJUBACF6AQCDAQAhewIAhQEAIXwBAIMBACF9AQCDAQAhfgEAgwEAIX8CAIUBACGAAQIAhQEAIYEBAgCFAQAhggEBAIMBACECAAAAAQAgCAAADgAgGk8BAIMBACFUQACEAQAhZAEAgwEAIWwBAIMBACFtAQCDAQAhbkAAhAEAIW9AAIQBACFwCACVAQAhcQIAhQEAIXICAIUBACFzAgCFAQAhdAIAhQEAIXUCAIUBACF2AgCFAQAhdwIAhQEAIXgCAIUBACF5CACVAQAhegEAgwEAIXsCAIUBACF8AQCDAQAhfQEAgwEAIX4BAIMBACF_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-AjM_FzRBFjVDAjZEGDdFFjhGFjlHAjpKGTtLHzxNID1OID5RID9SIEBTIEFVIEJXAkNYIURaIEVcAkZdIkdeIEhfIElgAkpjI0tkKQ"
39
39
  }
40
40
 
41
41
  async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {
@@ -217,6 +217,16 @@ export interface PrismaClient<
217
217
  * ```
218
218
  */
219
219
  get syncLog(): Prisma.SyncLogDelegate<ExtArgs, { omit: OmitOpts }>;
220
+
221
+ /**
222
+ * `prisma.report`: Exposes CRUD operations for the **Report** model.
223
+ * Example usage:
224
+ * ```ts
225
+ * // Fetch zero or more Reports
226
+ * const reports = await prisma.report.findMany()
227
+ * ```
228
+ */
229
+ get report(): Prisma.ReportDelegate<ExtArgs, { omit: OmitOpts }>;
220
230
  }
221
231
 
222
232
  export function getPrismaClientClass(): PrismaClientConstructor {
@@ -386,7 +386,8 @@ type FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRe
386
386
  export const ModelName = {
387
387
  Session: 'Session',
388
388
  Image: 'Image',
389
- SyncLog: 'SyncLog'
389
+ SyncLog: 'SyncLog',
390
+ Report: 'Report'
390
391
  } as const
391
392
 
392
393
  export type ModelName = (typeof ModelName)[keyof typeof ModelName]
@@ -402,7 +403,7 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
402
403
  omit: GlobalOmitOptions
403
404
  }
404
405
  meta: {
405
- modelProps: "session" | "image" | "syncLog"
406
+ modelProps: "session" | "image" | "syncLog" | "report"
406
407
  txIsolationLevel: TransactionIsolationLevel
407
408
  }
408
409
  model: {
@@ -628,6 +629,80 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
628
629
  }
629
630
  }
630
631
  }
632
+ Report: {
633
+ payload: Prisma.$ReportPayload<ExtArgs>
634
+ fields: Prisma.ReportFieldRefs
635
+ operations: {
636
+ findUnique: {
637
+ args: Prisma.ReportFindUniqueArgs<ExtArgs>
638
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload> | null
639
+ }
640
+ findUniqueOrThrow: {
641
+ args: Prisma.ReportFindUniqueOrThrowArgs<ExtArgs>
642
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>
643
+ }
644
+ findFirst: {
645
+ args: Prisma.ReportFindFirstArgs<ExtArgs>
646
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload> | null
647
+ }
648
+ findFirstOrThrow: {
649
+ args: Prisma.ReportFindFirstOrThrowArgs<ExtArgs>
650
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>
651
+ }
652
+ findMany: {
653
+ args: Prisma.ReportFindManyArgs<ExtArgs>
654
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>[]
655
+ }
656
+ create: {
657
+ args: Prisma.ReportCreateArgs<ExtArgs>
658
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>
659
+ }
660
+ createMany: {
661
+ args: Prisma.ReportCreateManyArgs<ExtArgs>
662
+ result: BatchPayload
663
+ }
664
+ createManyAndReturn: {
665
+ args: Prisma.ReportCreateManyAndReturnArgs<ExtArgs>
666
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>[]
667
+ }
668
+ delete: {
669
+ args: Prisma.ReportDeleteArgs<ExtArgs>
670
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>
671
+ }
672
+ update: {
673
+ args: Prisma.ReportUpdateArgs<ExtArgs>
674
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>
675
+ }
676
+ deleteMany: {
677
+ args: Prisma.ReportDeleteManyArgs<ExtArgs>
678
+ result: BatchPayload
679
+ }
680
+ updateMany: {
681
+ args: Prisma.ReportUpdateManyArgs<ExtArgs>
682
+ result: BatchPayload
683
+ }
684
+ updateManyAndReturn: {
685
+ args: Prisma.ReportUpdateManyAndReturnArgs<ExtArgs>
686
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>[]
687
+ }
688
+ upsert: {
689
+ args: Prisma.ReportUpsertArgs<ExtArgs>
690
+ result: runtime.Types.Utils.PayloadToResult<Prisma.$ReportPayload>
691
+ }
692
+ aggregate: {
693
+ args: Prisma.ReportAggregateArgs<ExtArgs>
694
+ result: runtime.Types.Utils.Optional<Prisma.AggregateReport>
695
+ }
696
+ groupBy: {
697
+ args: Prisma.ReportGroupByArgs<ExtArgs>
698
+ result: runtime.Types.Utils.Optional<Prisma.ReportGroupByOutputType>[]
699
+ }
700
+ count: {
701
+ args: Prisma.ReportCountArgs<ExtArgs>
702
+ result: runtime.Types.Utils.Optional<Prisma.ReportCountAggregateOutputType> | number
703
+ }
704
+ }
705
+ }
631
706
  }
632
707
  } & {
633
708
  other: {
@@ -684,6 +759,12 @@ export const SessionScalarFieldEnum = {
684
759
  model: 'model',
685
760
  toolCallsTotal: 'toolCallsTotal',
686
761
  toolCallsJson: 'toolCallsJson',
762
+ skillCallsJson: 'skillCallsJson',
763
+ messageTimestamps: 'messageTimestamps',
764
+ apiErrors: 'apiErrors',
765
+ rateLimitErrors: 'rateLimitErrors',
766
+ userInterruptions: 'userInterruptions',
767
+ permissionModesJson: 'permissionModesJson',
687
768
  createdAt: 'createdAt'
688
769
  } as const
689
770
 
@@ -716,6 +797,18 @@ export const SyncLogScalarFieldEnum = {
716
797
  export type SyncLogScalarFieldEnum = (typeof SyncLogScalarFieldEnum)[keyof typeof SyncLogScalarFieldEnum]
717
798
 
718
799
 
800
+ export const ReportScalarFieldEnum = {
801
+ id: 'id',
802
+ title: 'title',
803
+ generatedAt: 'generatedAt',
804
+ contentJson: 'contentJson',
805
+ sessionCount: 'sessionCount',
806
+ createdAt: 'createdAt'
807
+ } as const
808
+
809
+ export type ReportScalarFieldEnum = (typeof ReportScalarFieldEnum)[keyof typeof ReportScalarFieldEnum]
810
+
811
+
719
812
  export const SortOrder = {
720
813
  asc: 'asc',
721
814
  desc: 'desc'
@@ -855,6 +948,7 @@ export type GlobalOmitConfig = {
855
948
  session?: Prisma.SessionOmit
856
949
  image?: Prisma.ImageOmit
857
950
  syncLog?: Prisma.SyncLogOmit
951
+ report?: Prisma.ReportOmit
858
952
  }
859
953
 
860
954
  /* Types for Logging */
@@ -53,7 +53,8 @@ export const AnyNull = runtime.AnyNull
53
53
  export const ModelName = {
54
54
  Session: 'Session',
55
55
  Image: 'Image',
56
- SyncLog: 'SyncLog'
56
+ SyncLog: 'SyncLog',
57
+ Report: 'Report'
57
58
  } as const
58
59
 
59
60
  export type ModelName = (typeof ModelName)[keyof typeof ModelName]
@@ -89,6 +90,12 @@ export const SessionScalarFieldEnum = {
89
90
  model: 'model',
90
91
  toolCallsTotal: 'toolCallsTotal',
91
92
  toolCallsJson: 'toolCallsJson',
93
+ skillCallsJson: 'skillCallsJson',
94
+ messageTimestamps: 'messageTimestamps',
95
+ apiErrors: 'apiErrors',
96
+ rateLimitErrors: 'rateLimitErrors',
97
+ userInterruptions: 'userInterruptions',
98
+ permissionModesJson: 'permissionModesJson',
92
99
  createdAt: 'createdAt'
93
100
  } as const
94
101
 
@@ -121,6 +128,18 @@ export const SyncLogScalarFieldEnum = {
121
128
  export type SyncLogScalarFieldEnum = (typeof SyncLogScalarFieldEnum)[keyof typeof SyncLogScalarFieldEnum]
122
129
 
123
130
 
131
+ export const ReportScalarFieldEnum = {
132
+ id: 'id',
133
+ title: 'title',
134
+ generatedAt: 'generatedAt',
135
+ contentJson: 'contentJson',
136
+ sessionCount: 'sessionCount',
137
+ createdAt: 'createdAt'
138
+ } as const
139
+
140
+ export type ReportScalarFieldEnum = (typeof ReportScalarFieldEnum)[keyof typeof ReportScalarFieldEnum]
141
+
142
+
124
143
  export const SortOrder = {
125
144
  asc: 'asc',
126
145
  desc: 'desc'