agentfit 0.1.2 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +4 -0
- package/README.md +0 -2
- package/app/(dashboard)/ai-insights/page.tsx +271 -0
- package/app/(dashboard)/models/page.tsx +21 -0
- package/app/(dashboard)/page.tsx +2 -0
- package/app/(dashboard)/sessions/[id]/page.tsx +16 -2
- package/app/(dashboard)/settings/page.tsx +168 -0
- package/app/api/analyze/aggregate/route.ts +88 -0
- package/app/api/analyze/estimate/route.ts +62 -0
- package/app/api/analyze/route.ts +142 -0
- package/app/api/cc-versions/route.ts +84 -0
- package/app/api/config/route.ts +35 -0
- package/bin/agentfit.mjs +22 -13
- package/components/analyze-confirm-dialog.tsx +81 -0
- package/components/app-sidebar.tsx +14 -0
- package/components/data-provider.tsx +4 -2
- package/components/model-usage-chart.tsx +216 -0
- package/components/overview-cards.tsx +1 -1
- package/components/session-ai-analysis.tsx +318 -0
- package/components/sessions-table.tsx +169 -15
- package/components/version-lag-chart.tsx +284 -0
- package/electron/main.mjs +81 -59
- package/generated/prisma/browser.ts +5 -0
- package/generated/prisma/client.ts +5 -0
- package/generated/prisma/internal/class.ts +14 -4
- package/generated/prisma/internal/prismaNamespace.ts +95 -2
- package/generated/prisma/internal/prismaNamespaceBrowser.ts +19 -1
- package/generated/prisma/models/Session.ts +57 -1
- package/generated/prisma/models/SessionAnalysis.ts +1321 -0
- package/generated/prisma/models.ts +1 -0
- package/lib/config.ts +45 -0
- package/lib/db.ts +1 -1
- package/lib/openai.ts +253 -0
- package/lib/parse-codex.ts +2 -0
- package/lib/parse-logs.ts +21 -7
- package/lib/queries.ts +5 -1
- package/lib/sync.ts +17 -5
- package/package.json +2 -1
- package/prisma/migrations/20260404151230_add_session_analysis/migration.sql +18 -0
- package/prisma/migrations/20260405230736_add_cli_version/migration.sql +41 -0
- package/prisma/migrations/20260406205546_add_model_counts/migration.sql +42 -0
- package/prisma/schema.prisma +16 -0
- package/prisma/schema.sql +20 -0
- /package/prisma/migrations/{20260401144555_add_system_prompt_edits → 20260403214556_init}/migration.sql +0 -0
package/electron/main.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { app, BrowserWindow, shell, dialog } from 'electron'
|
|
2
|
-
import {
|
|
3
|
-
import { existsSync } from 'fs'
|
|
1
|
+
import { app, BrowserWindow, shell, dialog, utilityProcess } from 'electron'
|
|
2
|
+
import { createServer } from 'net'
|
|
3
|
+
import { existsSync, readFileSync } from 'fs'
|
|
4
|
+
import { createRequire } from 'module'
|
|
4
5
|
import path from 'path'
|
|
5
6
|
import http from 'http'
|
|
6
7
|
|
|
@@ -17,10 +18,21 @@ const PRISMA_DIR = isPacked
|
|
|
17
18
|
|
|
18
19
|
const USER_DATA = app.getPath('userData')
|
|
19
20
|
const DB_PATH = path.join(USER_DATA, 'agentfit.db')
|
|
20
|
-
const
|
|
21
|
+
const PREFERRED_PORT = 13749
|
|
21
22
|
|
|
22
23
|
let serverProcess = null
|
|
23
24
|
let mainWindow = null
|
|
25
|
+
let activePort = PREFERRED_PORT
|
|
26
|
+
|
|
27
|
+
function findAvailablePort(startPort) {
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
const server = createServer()
|
|
30
|
+
server.listen(startPort, '127.0.0.1', () => {
|
|
31
|
+
server.close(() => resolve(startPort))
|
|
32
|
+
})
|
|
33
|
+
server.on('error', () => resolve(findAvailablePort(startPort + 1)))
|
|
34
|
+
})
|
|
35
|
+
}
|
|
24
36
|
|
|
25
37
|
function log(msg) {
|
|
26
38
|
try {
|
|
@@ -36,11 +48,8 @@ process.on('uncaughtException', (err) => {
|
|
|
36
48
|
throw err
|
|
37
49
|
})
|
|
38
50
|
|
|
39
|
-
function ensureDatabase() {
|
|
51
|
+
async function ensureDatabase() {
|
|
40
52
|
const schemaSQL = path.join(PRISMA_DIR, 'schema.sql')
|
|
41
|
-
const initScript = isPacked
|
|
42
|
-
? path.join(process.resourcesPath, 'app.asar.unpacked', 'electron', 'init-db.mjs')
|
|
43
|
-
: path.join(import.meta.dirname, 'init-db.mjs')
|
|
44
53
|
|
|
45
54
|
if (!existsSync(schemaSQL)) {
|
|
46
55
|
throw new Error(`schema.sql not found at ${schemaSQL}. Run "npm run prisma:schema-sql" first.`)
|
|
@@ -48,68 +57,81 @@ function ensureDatabase() {
|
|
|
48
57
|
|
|
49
58
|
log(existsSync(DB_PATH) ? 'Checking database schema...' : 'Creating database...')
|
|
50
59
|
|
|
51
|
-
// Run init
|
|
60
|
+
// Run DB init inline to avoid spawning a child Electron process,
|
|
61
|
+
// which causes a second dock icon on macOS.
|
|
52
62
|
// Uses @libsql/client (already bundled) — works on macOS, Linux, and Windows.
|
|
53
63
|
// schema.sql uses IF NOT EXISTS — safe to run on existing DBs.
|
|
54
64
|
try {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
)
|
|
65
|
+
const serverDir = isPacked
|
|
66
|
+
? path.join(process.resourcesPath, 'app.asar.unpacked', 'electron', 'server')
|
|
67
|
+
: path.join(import.meta.dirname, 'server')
|
|
68
|
+
const require = createRequire(path.join(serverDir, 'package.json'))
|
|
69
|
+
const { createClient } = require('@libsql/client')
|
|
70
|
+
|
|
71
|
+
const client = createClient({ url: `file:${DB_PATH}` })
|
|
72
|
+
const sql = readFileSync(schemaSQL, 'utf-8')
|
|
73
|
+
await client.executeMultiple(sql)
|
|
74
|
+
|
|
75
|
+
// Add missing columns for existing databases (IF NOT EXISTS is not supported
|
|
76
|
+
// for ALTER TABLE in SQLite, so we catch and ignore "duplicate column" errors)
|
|
77
|
+
const migrations = [
|
|
78
|
+
'ALTER TABLE "Session" ADD COLUMN "cliVersion" TEXT NOT NULL DEFAULT \'unknown\'',
|
|
79
|
+
'ALTER TABLE "Session" ADD COLUMN "modelCountsJson" TEXT NOT NULL DEFAULT \'{}\'',
|
|
80
|
+
]
|
|
81
|
+
for (const stmt of migrations) {
|
|
82
|
+
try { await client.execute(stmt) } catch { /* column already exists */ }
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
client.close()
|
|
63
86
|
log('Database ready.')
|
|
64
87
|
} catch (err) {
|
|
65
|
-
|
|
66
|
-
log(`Database setup warning: ${stderr}`)
|
|
88
|
+
log(`Database setup warning: ${err.message}`)
|
|
67
89
|
}
|
|
68
90
|
}
|
|
69
91
|
|
|
70
|
-
function startServer() {
|
|
71
|
-
|
|
72
|
-
const serverJs = path.join(SERVER_DIR, 'server.js')
|
|
92
|
+
async function startServer() {
|
|
93
|
+
const serverJs = path.join(SERVER_DIR, 'server.js')
|
|
73
94
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
95
|
+
if (!existsSync(serverJs)) {
|
|
96
|
+
throw new Error(`Server not found at ${serverJs}. Run "npm run electron:prepare" first.`)
|
|
97
|
+
}
|
|
78
98
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
serverProcess = spawn(process.execPath, [serverJs], {
|
|
84
|
-
cwd: SERVER_DIR,
|
|
85
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
86
|
-
env: {
|
|
87
|
-
...process.env,
|
|
88
|
-
ELECTRON_RUN_AS_NODE: '1',
|
|
89
|
-
PORT: String(PORT),
|
|
90
|
-
HOSTNAME: '127.0.0.1',
|
|
91
|
-
DATABASE_URL: `file:${DB_PATH}`,
|
|
92
|
-
NODE_ENV: 'production',
|
|
93
|
-
},
|
|
94
|
-
})
|
|
99
|
+
activePort = await findAvailablePort(PREFERRED_PORT)
|
|
100
|
+
if (activePort !== PREFERRED_PORT) {
|
|
101
|
+
log(`Port ${PREFERRED_PORT} is in use, using ${activePort} instead`)
|
|
102
|
+
}
|
|
95
103
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
log(`Starting server from ${serverJs}`)
|
|
105
|
+
|
|
106
|
+
// Use utilityProcess.fork() instead of child_process.spawn() to avoid
|
|
107
|
+
// a second dock icon on macOS. It runs as a background Node.js process.
|
|
108
|
+
serverProcess = utilityProcess.fork(serverJs, [], {
|
|
109
|
+
cwd: SERVER_DIR,
|
|
110
|
+
stdio: 'pipe',
|
|
111
|
+
serviceName: 'agentfit-server',
|
|
112
|
+
env: {
|
|
113
|
+
...process.env,
|
|
114
|
+
PORT: String(activePort),
|
|
115
|
+
HOSTNAME: '127.0.0.1',
|
|
116
|
+
DATABASE_URL: `file:${DB_PATH}`,
|
|
117
|
+
NODE_ENV: 'production',
|
|
118
|
+
},
|
|
119
|
+
})
|
|
107
120
|
|
|
108
|
-
|
|
121
|
+
serverProcess.stdout?.on('data', (d) => log(d.toString().trim()))
|
|
122
|
+
serverProcess.stderr?.on('data', (d) => log(d.toString().trim()))
|
|
123
|
+
serverProcess.on('exit', (code) => {
|
|
124
|
+
if (code !== null && code !== 0) {
|
|
125
|
+
log(`Server exited with code ${code}`)
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
// Poll until ready
|
|
130
|
+
return new Promise((resolve, reject) => {
|
|
109
131
|
let attempts = 0
|
|
110
132
|
const check = () => {
|
|
111
133
|
attempts++
|
|
112
|
-
http.get(`http://127.0.0.1:${
|
|
134
|
+
http.get(`http://127.0.0.1:${activePort}`, () => resolve()).on('error', () => {
|
|
113
135
|
if (attempts >= 60) reject(new Error('Server failed to start within 30s'))
|
|
114
136
|
else setTimeout(check, 500)
|
|
115
137
|
})
|
|
@@ -131,7 +153,7 @@ function createWindow() {
|
|
|
131
153
|
},
|
|
132
154
|
})
|
|
133
155
|
|
|
134
|
-
mainWindow.loadURL(`http://127.0.0.1:${
|
|
156
|
+
mainWindow.loadURL(`http://127.0.0.1:${activePort}`)
|
|
135
157
|
|
|
136
158
|
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
|
|
137
159
|
shell.openExternal(url)
|
|
@@ -171,7 +193,7 @@ app.whenReady().then(async () => {
|
|
|
171
193
|
const splash = showSplash()
|
|
172
194
|
|
|
173
195
|
try {
|
|
174
|
-
ensureDatabase()
|
|
196
|
+
await ensureDatabase()
|
|
175
197
|
await startServer()
|
|
176
198
|
splash.close()
|
|
177
199
|
createWindow()
|
|
@@ -185,7 +207,7 @@ app.whenReady().then(async () => {
|
|
|
185
207
|
|
|
186
208
|
app.on('window-all-closed', () => {
|
|
187
209
|
if (serverProcess) {
|
|
188
|
-
serverProcess.kill(
|
|
210
|
+
serverProcess.kill()
|
|
189
211
|
serverProcess = null
|
|
190
212
|
}
|
|
191
213
|
app.quit()
|
|
@@ -193,7 +215,7 @@ app.on('window-all-closed', () => {
|
|
|
193
215
|
|
|
194
216
|
app.on('before-quit', () => {
|
|
195
217
|
if (serverProcess) {
|
|
196
|
-
serverProcess.kill(
|
|
218
|
+
serverProcess.kill()
|
|
197
219
|
serverProcess = null
|
|
198
220
|
}
|
|
199
221
|
})
|
|
@@ -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 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 systemPromptEdits Int @default(0) // Edits/writes to CLAUDE.md, AGENTS.md, agent.md\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",
|
|
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 systemPromptEdits Int @default(0) // Edits/writes to CLAUDE.md, AGENTS.md, agent.md\n cliVersion String @default(\"unknown\") // Claude Code CLI version from JSONL logs\n modelCountsJson String @default(\"{}\") // JSON: {model_name: message_count}\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\nmodel SessionAnalysis {\n id String @id @default(cuid())\n sessionId String @unique\n model String\n classifications String // JSON array of per-message classifications\n totalMessages Int\n inputTokens Int\n outputTokens Int\n costUSD Float\n analyzedAt DateTime @default(now())\n\n @@index([sessionId])\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\":\"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\":\"systemPromptEdits\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"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\":{}}")
|
|
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\":\"systemPromptEdits\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cliVersion\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"modelCountsJson\",\"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},\"SessionAnalysis\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"model\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"classifications\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"totalMessages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"inputTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"outputTokens\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"costUSD\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"analyzedAt\",\"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\",\"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\",\"
|
|
38
|
-
graph: "
|
|
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\",\"SessionAnalysis.findUnique\",\"SessionAnalysis.findUniqueOrThrow\",\"SessionAnalysis.findFirst\",\"SessionAnalysis.findFirstOrThrow\",\"SessionAnalysis.findMany\",\"SessionAnalysis.createOne\",\"SessionAnalysis.createMany\",\"SessionAnalysis.createManyAndReturn\",\"SessionAnalysis.updateOne\",\"SessionAnalysis.updateMany\",\"SessionAnalysis.updateManyAndReturn\",\"SessionAnalysis.upsertOne\",\"SessionAnalysis.deleteOne\",\"SessionAnalysis.deleteMany\",\"SessionAnalysis.groupBy\",\"SessionAnalysis.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"sessionId\",\"model\",\"classifications\",\"totalMessages\",\"inputTokens\",\"outputTokens\",\"costUSD\",\"analyzedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"title\",\"generatedAt\",\"contentJson\",\"sessionCount\",\"createdAt\",\"syncedAt\",\"filesProcessed\",\"sessionsAdded\",\"sessionsSkipped\",\"messageId\",\"filename\",\"mediaType\",\"sizeBytes\",\"timestamp\",\"role\",\"sessionId_messageId_filename\",\"project\",\"projectPath\",\"startTime\",\"endTime\",\"durationMinutes\",\"userMessages\",\"assistantMessages\",\"cacheCreationTokens\",\"cacheReadTokens\",\"totalTokens\",\"toolCallsTotal\",\"toolCallsJson\",\"skillCallsJson\",\"messageTimestamps\",\"apiErrors\",\"rateLimitErrors\",\"userInterruptions\",\"permissionModesJson\",\"systemPromptEdits\",\"cliVersion\",\"modelCountsJson\",\"set\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
|
|
38
|
+
graph: "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_ACFgAQB_ACFhAQB_ACFjAgCAAQAhZAIAgAEAIWUCAIABACFmCACBAQAhd0AAggEAIYMBAQB_ACGEAQEAfwAhhQFAAIIBACGGAUAAggEAIYcBCACBAQAhiAECAIABACGJAQIAgAEAIYoBAgCAAQAhiwECAIABACGMAQIAgAEAIY0BAgCAAQAhjgEBAH8AIY8BAQB_ACGQAQEAfwAhkQECAIABACGSAQIAgAEAIZMBAgCAAQAhlAEBAH8AIZUBAgCAAQAhlgEBAH8AIZcBAQB_ACEDAAAABAAgAwAAFgAwFAAAFwAgAwAAAAQAIAMAAAUAMAQAAAEAIA1cAACVAQAwXQAAHQAQXgAAlQEAMF8BAAAAAWABAIwBACF3QACPAQAhfAEAjAEAIX0BAIwBACF-AQCMAQAhfwIAjQEAIYABQACPAQAhgQEBAIwBACGCAQAAlgEAIAEAAAAaACABAAAAGgAgDFwAAJUBADBdAAAdABBeAACVAQAwXwEAjAEAIWABAIwBACF3QACPAQAhfAEAjAEAIX0BAIwBACF-AQCMAQAhfwIAjQEAIYABQACPAQAhgQEBAIwBACEAAwAAAB0AIAMAAB4AMAQAABoAIAMAAAAdACADAAAeADAEAAAaACADAAAAHQAgAwAAHgAwBAAAGgAgCV8BAAAAAWABAAAAAXdAAAAAAXwBAAAAAX0BAAAAAX4BAAAAAX8CAAAAAYABQAAAAAGBAQEAAAABAQgAACIAIAlfAQAAAAFgAQAAAAF3QAAAAAF8AQAAAAF9AQAAAAF-AQAAAAF_AgAAAAGAAUAAAAABgQEBAAAAAQEIAAAkADABCAAAJAAwCV8BAJ4BACFgAQCeAQAhd0AAoQEAIXwBAJ4BACF9AQCeAQAhfgEAngEAIX8CAJ8BACGAAUAAoQEAIYEBAQCeAQAhAgAAABoAIAgAACcAIAlfAQCeAQAhYAEAngEAIXdAAKEBACF8AQCeAQAhfQEAngEAIX4BAJ4BACF_AgCfAQAhgAFAAKEBACGBAQEAngEAIQIAAAAdACAIAAApACACAAAAHQAgCAAAKQAgAwAAABoAIA8AACIAIBAAACcAIAEAAAAaACABAAAAHQAgBRUAAKwBACAWAACtAQAgFwAAsAEAIBgAAK8BACAZAACuAQAgDFwAAJQBADBdAAAwABBeAACUAQAwXwEAfwAhYAEAfwAhd0AAggEAIXwBAH8AIX0BAH8AIX4BAH8AIX8CAIABACGAAUAAggEAIYEBAQB_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-ADBdAAB7ABBeAAB-ADBfAQB_ACFgAQB_ACFhAQB_ACFiAQB_ACFjAgCAAQAhZAIAgAEAIWUCAIABACFmCACBAQAhZ0AAggEAIQMAAABoACADAAB6ADAUAAB7ACADAAAAaAAgAwAAaQAwBAAAZQAgDFwAAH4AMF0AAHsAEF4AAH4AMF8BAH8AIWABAH8AIWEBAH8AIWIBAH8AIWMCAIABACFkAgCAAQAhZQIAgAEAIWYIAIEBACFnQACCAQAhDhUAAIQBACAYAACKAQAgGQAAigEAIGgBAAAAAWkBAAAABGoBAAAABGsBAAAAAWwBAAAAAW0BAAAAAW4BAAAAAW8BAIkBACFwAQAAAAFxAQAAAAFyAQAAAAENFQAAhAEAIBYAAIcBACAXAACEAQAgGAAAhAEAIBkAAIQBACBoAgAAAAFpAgAAAARqAgAAAARrAgAAAAFsAgAAAAFtAgAAAAFuAgAAAAFvAgCIAQAhDRUAAIQBACAWAACHAQAgFwAAhwEAIBgAAIcBACAZAACHAQAgaAgAAAABaQgAAAAEaggAAAAEawgAAAABbAgAAAABbQgAAAABbggAAAABbwgAhgEAIQsVAACEAQAgGAAAhQEAIBkAAIUBACBoQAAAAAFpQAAAAARqQAAAAARrQAAAAAFsQAAAAAFtQAAAAAFuQAAAAAFvQACDAQAhCxUAAIQBACAYAACFAQAgGQAAhQEAIGhAAAAAAWlAAAAABGpAAAAABGtAAAAAAWxAAAAAAW1AAAAAAW5AAAAAAW9AAIMBACEIaAIAAAABaQIAAAAEagIAAAAEawIAAAABbAIAAAABbQIAAAABbgIAAAABbwIAhAEAIQhoQAAAAAFpQAAAAARqQAAAAARrQAAAAAFsQAAAAAFtQAAAAAFuQAAAAAFvQACFAQAhDRUAAIQBACAWAACHAQAgFwAAhwEAIBgAAIcBACAZAACHAQAgaAgAAAABaQgAAAAEaggAAAAEawgAAAABbAgAAAABbQgAAAABbggAAAABbwgAhgEAIQhoCAAAAAFpCAAAAARqCAAAAARrCAAAAAFsCAAAAAFtCAAAAAFuCAAAAAFvCACHAQAhDRUAAIQBACAWAACHAQAgFwAAhAEAIBgAAIQBACAZAACEAQAgaAIAAAABaQIAAAAEagIAAAAEawIAAAABbAIAAAABbQIAAAABbgIAAAABbwIAiAEAIQ4VAACEAQAgGAAAigEAIBkAAIoBACBoAQAAAAFpAQAAAARqAQAAAARrAQAAAAFsAQAAAAFtAQAAAAFuAQAAAAFvAQCJAQAhcAEAAAABcQEAAAABcgEAAAABC2gBAAAAAWkBAAAABGoBAAAABGsBAAAAAWwBAAAAAW0BAAAAAW4BAAAAAW8BAIoBACFwAQAAAAFxAQAAAAFyAQAAAAEMXAAAiwEAMF0AAGgAEF4AAIsBADBfAQCMAQAhYAEAjAEAIWEBAIwBACFiAQCMAQAhYwIAjQEAIWQCAI0BACFlAgCNAQAhZggAjgEAIWdAAI8BACELaAEAAAABaQEAAAAEagEAAAAEawEAAAABbAEAAAABbQEAAAABbgEAAAABbwEAigEAIXABAAAAAXEBAAAAAXIBAAAAAQhoAgAAAAFpAgAAAARqAgAAAARrAgAAAAFsAgAAAAFtAgAAAAFuAgAAAAFvAgCEAQAhCGgIAAAAAWkIAAAABGoIAAAABGsIAAAAAWwIAAAAAW0IAAAAAW4IAAAAAW8IAIcBACEIaEAAAAABaUAAAAAEakAAAAAEa0AAAAABbEAAAAABbUAAAAABbkAAAAABb0AAhQEAIQlcAACQAQAwXQAAYgAQXgAAkAEAMF8BAH8AIXMBAH8AIXRAAIIBACF1AQB_ACF2AgCAAQAhd0AAggEAIQlcAACRAQAwXQAATwAQXgAAkQEAMF8BAIwBACFzAQCMAQAhdEAAjwEAIXUBAIwBACF2AgCNAQAhd0AAjwEAIQhcAACSAQAwXQAASQAQXgAAkgEAMF8BAH8AIXhAAIIBACF5AgCAAQAhegIAgAEAIXsCAIABACEIXAAAkwEAMF0AADYAEF4AAJMBADBfAQCMAQAheEAAjwEAIXkCAI0BACF6AgCNAQAhewIAjQEAIQxcAACUAQAwXQAAMAAQXgAAlAEAMF8BAH8AIWABAH8AIXdAAIIBACF8AQB_ACF9AQB_ACF-AQB_ACF_AgCAAQAhgAFAAIIBACGBAQEAfwAhDFwAAJUBADBdAAAdABBeAACVAQAwXwEAjAEAIWABAIwBACF3QACPAQAhfAEAjAEAIX0BAIwBACF-AQCMAQAhfwIAjQEAIYABQACPAQAhgQEBAIwBACEDYAEAAAABfAEAAAABfQEAAAABIFwAAJcBADBdAAAXABBeAACXAQAwXwEAfwAhYAEAfwAhYQEAfwAhYwIAgAEAIWQCAIABACFlAgCAAQAhZggAgQEAIXdAAIIBACGDAQEAfwAhhAEBAH8AIYUBQACCAQAhhgFAAIIBACGHAQgAgQEAIYgBAgCAAQAhiQECAIABACGKAQIAgAEAIYsBAgCAAQAhjAECAIABACGNAQIAgAEAIY4BAQB_ACGPAQEAfwAhkAEBAH8AIZEBAgCAAQAhkgECAIABACGTAQIAgAEAIZQBAQB_ACGVAQIAgAEAIZYBAQB_ACGXAQEAfwAhIFwAAJgBADBdAAAEABBeAACYAQAwXwEAjAEAIWABAIwBACFhAQCMAQAhYwIAjQEAIWQCAI0BACFlAgCNAQAhZggAjgEAIXdAAI8BACGDAQEAjAEAIYQBAQCMAQAhhQFAAI8BACGGAUAAjwEAIYcBCACOAQAhiAECAI0BACGJAQIAjQEAIYoBAgCNAQAhiwECAI0BACGMAQIAjQEAIY0BAgCNAQAhjgEBAIwBACGPAQEAjAEAIZABAQCMAQAhkQECAI0BACGSAQIAjQEAIZMBAgCNAQAhlAEBAIwBACGVAQIAjQEAIZYBAQCMAQAhlwEBAIwBACEAAAAAAAGYAQEAAAABBZgBAgAAAAGZAQIAAAABmgECAAAAAZsBAgAAAAGcAQIAAAABBZgBCAAAAAGZAQgAAAABmgEIAAAAAZsBCAAAAAGcAQgAAAABAZgBQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFQAGFgAHFwAIGAAJGQAKAAAAAAAFFQAGFgAHFwAIGAAJGQAKAAAABRUAEBYAERcAEhgAExkAFAAAAAAABRUAEBYAERcAEhgAExkAFAAAAAUVABoWABsXABwYAB0ZAB4AAAAAAAUVABoWABsXABwYAB0ZAB4AAAAFFQAkFgAlFwAmGAAnGQAoAAAAAAAFFQAkFgAlFwAmGAAnGQAoAAAABRUALhYALxcAMBgAMRkAMgAAAAAABRUALhYALxcAMBgAMRkAMgECAQIDAQUGAQYHAQcIAQkKAQoMAgsNAwwPAQ0RAg4SBBETARIUARMVAhoYBRsZCxwbDB0cDB4fDB8gDCAhDCEjDCIlAiMmDSQoDCUqAiYrDicsDCgtDCkuAioxDysyFSw0Fi01Fi44Fi85FjA6FjE8FjI-AjM_FzRBFjVDAjZEGDdFFjhGFjlHAjpKGTtLHzxNID1OID5RID9SIEBTIEFVIEJXAkNYIURaIEVcAkZdIkdeIEhfIElgAkpjI0tkKUxmKk1nKk5qKk9rKlBsKlFuKlJwAlNxK1RzKlV1AlZ2LFd3Klh4Kll5Alp8LVt9Mw"
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {
|
|
@@ -227,6 +227,16 @@ export interface PrismaClient<
|
|
|
227
227
|
* ```
|
|
228
228
|
*/
|
|
229
229
|
get report(): Prisma.ReportDelegate<ExtArgs, { omit: OmitOpts }>;
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* `prisma.sessionAnalysis`: Exposes CRUD operations for the **SessionAnalysis** model.
|
|
233
|
+
* Example usage:
|
|
234
|
+
* ```ts
|
|
235
|
+
* // Fetch zero or more SessionAnalyses
|
|
236
|
+
* const sessionAnalyses = await prisma.sessionAnalysis.findMany()
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
get sessionAnalysis(): Prisma.SessionAnalysisDelegate<ExtArgs, { omit: OmitOpts }>;
|
|
230
240
|
}
|
|
231
241
|
|
|
232
242
|
export function getPrismaClientClass(): PrismaClientConstructor {
|
|
@@ -387,7 +387,8 @@ export const ModelName = {
|
|
|
387
387
|
Session: 'Session',
|
|
388
388
|
Image: 'Image',
|
|
389
389
|
SyncLog: 'SyncLog',
|
|
390
|
-
Report: 'Report'
|
|
390
|
+
Report: 'Report',
|
|
391
|
+
SessionAnalysis: 'SessionAnalysis'
|
|
391
392
|
} as const
|
|
392
393
|
|
|
393
394
|
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
|
|
@@ -403,7 +404,7 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
|
|
|
403
404
|
omit: GlobalOmitOptions
|
|
404
405
|
}
|
|
405
406
|
meta: {
|
|
406
|
-
modelProps: "session" | "image" | "syncLog" | "report"
|
|
407
|
+
modelProps: "session" | "image" | "syncLog" | "report" | "sessionAnalysis"
|
|
407
408
|
txIsolationLevel: TransactionIsolationLevel
|
|
408
409
|
}
|
|
409
410
|
model: {
|
|
@@ -703,6 +704,80 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
|
|
|
703
704
|
}
|
|
704
705
|
}
|
|
705
706
|
}
|
|
707
|
+
SessionAnalysis: {
|
|
708
|
+
payload: Prisma.$SessionAnalysisPayload<ExtArgs>
|
|
709
|
+
fields: Prisma.SessionAnalysisFieldRefs
|
|
710
|
+
operations: {
|
|
711
|
+
findUnique: {
|
|
712
|
+
args: Prisma.SessionAnalysisFindUniqueArgs<ExtArgs>
|
|
713
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload> | null
|
|
714
|
+
}
|
|
715
|
+
findUniqueOrThrow: {
|
|
716
|
+
args: Prisma.SessionAnalysisFindUniqueOrThrowArgs<ExtArgs>
|
|
717
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>
|
|
718
|
+
}
|
|
719
|
+
findFirst: {
|
|
720
|
+
args: Prisma.SessionAnalysisFindFirstArgs<ExtArgs>
|
|
721
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload> | null
|
|
722
|
+
}
|
|
723
|
+
findFirstOrThrow: {
|
|
724
|
+
args: Prisma.SessionAnalysisFindFirstOrThrowArgs<ExtArgs>
|
|
725
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>
|
|
726
|
+
}
|
|
727
|
+
findMany: {
|
|
728
|
+
args: Prisma.SessionAnalysisFindManyArgs<ExtArgs>
|
|
729
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>[]
|
|
730
|
+
}
|
|
731
|
+
create: {
|
|
732
|
+
args: Prisma.SessionAnalysisCreateArgs<ExtArgs>
|
|
733
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>
|
|
734
|
+
}
|
|
735
|
+
createMany: {
|
|
736
|
+
args: Prisma.SessionAnalysisCreateManyArgs<ExtArgs>
|
|
737
|
+
result: BatchPayload
|
|
738
|
+
}
|
|
739
|
+
createManyAndReturn: {
|
|
740
|
+
args: Prisma.SessionAnalysisCreateManyAndReturnArgs<ExtArgs>
|
|
741
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>[]
|
|
742
|
+
}
|
|
743
|
+
delete: {
|
|
744
|
+
args: Prisma.SessionAnalysisDeleteArgs<ExtArgs>
|
|
745
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>
|
|
746
|
+
}
|
|
747
|
+
update: {
|
|
748
|
+
args: Prisma.SessionAnalysisUpdateArgs<ExtArgs>
|
|
749
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>
|
|
750
|
+
}
|
|
751
|
+
deleteMany: {
|
|
752
|
+
args: Prisma.SessionAnalysisDeleteManyArgs<ExtArgs>
|
|
753
|
+
result: BatchPayload
|
|
754
|
+
}
|
|
755
|
+
updateMany: {
|
|
756
|
+
args: Prisma.SessionAnalysisUpdateManyArgs<ExtArgs>
|
|
757
|
+
result: BatchPayload
|
|
758
|
+
}
|
|
759
|
+
updateManyAndReturn: {
|
|
760
|
+
args: Prisma.SessionAnalysisUpdateManyAndReturnArgs<ExtArgs>
|
|
761
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>[]
|
|
762
|
+
}
|
|
763
|
+
upsert: {
|
|
764
|
+
args: Prisma.SessionAnalysisUpsertArgs<ExtArgs>
|
|
765
|
+
result: runtime.Types.Utils.PayloadToResult<Prisma.$SessionAnalysisPayload>
|
|
766
|
+
}
|
|
767
|
+
aggregate: {
|
|
768
|
+
args: Prisma.SessionAnalysisAggregateArgs<ExtArgs>
|
|
769
|
+
result: runtime.Types.Utils.Optional<Prisma.AggregateSessionAnalysis>
|
|
770
|
+
}
|
|
771
|
+
groupBy: {
|
|
772
|
+
args: Prisma.SessionAnalysisGroupByArgs<ExtArgs>
|
|
773
|
+
result: runtime.Types.Utils.Optional<Prisma.SessionAnalysisGroupByOutputType>[]
|
|
774
|
+
}
|
|
775
|
+
count: {
|
|
776
|
+
args: Prisma.SessionAnalysisCountArgs<ExtArgs>
|
|
777
|
+
result: runtime.Types.Utils.Optional<Prisma.SessionAnalysisCountAggregateOutputType> | number
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
}
|
|
706
781
|
}
|
|
707
782
|
} & {
|
|
708
783
|
other: {
|
|
@@ -766,6 +841,8 @@ export const SessionScalarFieldEnum = {
|
|
|
766
841
|
userInterruptions: 'userInterruptions',
|
|
767
842
|
permissionModesJson: 'permissionModesJson',
|
|
768
843
|
systemPromptEdits: 'systemPromptEdits',
|
|
844
|
+
cliVersion: 'cliVersion',
|
|
845
|
+
modelCountsJson: 'modelCountsJson',
|
|
769
846
|
createdAt: 'createdAt'
|
|
770
847
|
} as const
|
|
771
848
|
|
|
@@ -810,6 +887,21 @@ export const ReportScalarFieldEnum = {
|
|
|
810
887
|
export type ReportScalarFieldEnum = (typeof ReportScalarFieldEnum)[keyof typeof ReportScalarFieldEnum]
|
|
811
888
|
|
|
812
889
|
|
|
890
|
+
export const SessionAnalysisScalarFieldEnum = {
|
|
891
|
+
id: 'id',
|
|
892
|
+
sessionId: 'sessionId',
|
|
893
|
+
model: 'model',
|
|
894
|
+
classifications: 'classifications',
|
|
895
|
+
totalMessages: 'totalMessages',
|
|
896
|
+
inputTokens: 'inputTokens',
|
|
897
|
+
outputTokens: 'outputTokens',
|
|
898
|
+
costUSD: 'costUSD',
|
|
899
|
+
analyzedAt: 'analyzedAt'
|
|
900
|
+
} as const
|
|
901
|
+
|
|
902
|
+
export type SessionAnalysisScalarFieldEnum = (typeof SessionAnalysisScalarFieldEnum)[keyof typeof SessionAnalysisScalarFieldEnum]
|
|
903
|
+
|
|
904
|
+
|
|
813
905
|
export const SortOrder = {
|
|
814
906
|
asc: 'asc',
|
|
815
907
|
desc: 'desc'
|
|
@@ -950,6 +1042,7 @@ export type GlobalOmitConfig = {
|
|
|
950
1042
|
image?: Prisma.ImageOmit
|
|
951
1043
|
syncLog?: Prisma.SyncLogOmit
|
|
952
1044
|
report?: Prisma.ReportOmit
|
|
1045
|
+
sessionAnalysis?: Prisma.SessionAnalysisOmit
|
|
953
1046
|
}
|
|
954
1047
|
|
|
955
1048
|
/* Types for Logging */
|
|
@@ -54,7 +54,8 @@ export const ModelName = {
|
|
|
54
54
|
Session: 'Session',
|
|
55
55
|
Image: 'Image',
|
|
56
56
|
SyncLog: 'SyncLog',
|
|
57
|
-
Report: 'Report'
|
|
57
|
+
Report: 'Report',
|
|
58
|
+
SessionAnalysis: 'SessionAnalysis'
|
|
58
59
|
} as const
|
|
59
60
|
|
|
60
61
|
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
|
|
@@ -97,6 +98,8 @@ export const SessionScalarFieldEnum = {
|
|
|
97
98
|
userInterruptions: 'userInterruptions',
|
|
98
99
|
permissionModesJson: 'permissionModesJson',
|
|
99
100
|
systemPromptEdits: 'systemPromptEdits',
|
|
101
|
+
cliVersion: 'cliVersion',
|
|
102
|
+
modelCountsJson: 'modelCountsJson',
|
|
100
103
|
createdAt: 'createdAt'
|
|
101
104
|
} as const
|
|
102
105
|
|
|
@@ -141,6 +144,21 @@ export const ReportScalarFieldEnum = {
|
|
|
141
144
|
export type ReportScalarFieldEnum = (typeof ReportScalarFieldEnum)[keyof typeof ReportScalarFieldEnum]
|
|
142
145
|
|
|
143
146
|
|
|
147
|
+
export const SessionAnalysisScalarFieldEnum = {
|
|
148
|
+
id: 'id',
|
|
149
|
+
sessionId: 'sessionId',
|
|
150
|
+
model: 'model',
|
|
151
|
+
classifications: 'classifications',
|
|
152
|
+
totalMessages: 'totalMessages',
|
|
153
|
+
inputTokens: 'inputTokens',
|
|
154
|
+
outputTokens: 'outputTokens',
|
|
155
|
+
costUSD: 'costUSD',
|
|
156
|
+
analyzedAt: 'analyzedAt'
|
|
157
|
+
} as const
|
|
158
|
+
|
|
159
|
+
export type SessionAnalysisScalarFieldEnum = (typeof SessionAnalysisScalarFieldEnum)[keyof typeof SessionAnalysisScalarFieldEnum]
|
|
160
|
+
|
|
161
|
+
|
|
144
162
|
export const SortOrder = {
|
|
145
163
|
asc: 'asc',
|
|
146
164
|
desc: 'desc'
|