@code-insights/cli 3.0.3 → 3.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.
- package/dashboard-dist/assets/index-CuCBzQyQ.js +548 -0
- package/dashboard-dist/dist/assets/index-BMhL7wL8.css +1 -0
- package/dashboard-dist/dist/assets/index-BuJps5yp.js +548 -0
- package/dashboard-dist/dist/assets/index-CuCBzQyQ.js +548 -0
- package/dashboard-dist/dist/favicon.svg +4 -0
- package/dashboard-dist/dist/index.html +33 -0
- package/dashboard-dist/index.html +1 -1
- package/dist/commands/connect.d.ts +5 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +39 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/insights.d.ts +13 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +87 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/link.d.ts +8 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +39 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/stats/data/cache.d.ts +29 -0
- package/dist/commands/stats/data/cache.d.ts.map +1 -0
- package/dist/commands/stats/data/cache.js +197 -0
- package/dist/commands/stats/data/cache.js.map +1 -0
- package/dist/commands/stats/data/firestore.d.ts +13 -0
- package/dist/commands/stats/data/firestore.d.ts.map +1 -0
- package/dist/commands/stats/data/firestore.js +170 -0
- package/dist/commands/stats/data/firestore.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +20 -4
- package/dist/commands/sync.js.map +1 -1
- package/dist/db/schema.d.ts +1 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +1 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/firebase/client.d.ts +45 -0
- package/dist/firebase/client.d.ts.map +1 -0
- package/dist/firebase/client.js +344 -0
- package/dist/firebase/client.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/parser/insights.d.ts +7 -0
- package/dist/parser/insights.d.ts.map +1 -0
- package/dist/parser/insights.js +271 -0
- package/dist/parser/insights.js.map +1 -0
- package/dist/providers/codex.js +31 -0
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/copilot-cli.js +14 -2
- package/dist/providers/copilot-cli.js.map +1 -1
- package/dist/providers/cursor.js +44 -2
- package/dist/providers/cursor.js.map +1 -1
- package/dist/utils/firebase-json.d.ts +87 -0
- package/dist/utils/firebase-json.d.ts.map +1 -0
- package/dist/utils/firebase-json.js +207 -0
- package/dist/utils/firebase-json.js.map +1 -0
- package/dist/utils/telemetry.d.ts.map +1 -1
- package/dist/utils/telemetry.js +28 -3
- package/dist/utils/telemetry.js.map +1 -1
- package/package.json +3 -1
- package/server-dist/dist/index.d.ts +20 -0
- package/server-dist/dist/index.d.ts.map +1 -0
- package/server-dist/dist/index.js +102 -0
- package/server-dist/dist/index.js.map +1 -0
- package/server-dist/dist/llm/analysis.d.ts +80 -0
- package/server-dist/dist/llm/analysis.d.ts.map +1 -0
- package/server-dist/dist/llm/analysis.js +509 -0
- package/server-dist/dist/llm/analysis.js.map +1 -0
- package/server-dist/dist/llm/client.d.ts +27 -0
- package/server-dist/dist/llm/client.d.ts.map +1 -0
- package/server-dist/dist/llm/client.js +71 -0
- package/server-dist/dist/llm/client.js.map +1 -0
- package/server-dist/dist/llm/index.d.ts +7 -0
- package/server-dist/dist/llm/index.d.ts.map +1 -0
- package/server-dist/dist/llm/index.js +5 -0
- package/server-dist/dist/llm/index.js.map +1 -0
- package/server-dist/dist/llm/prompts.d.ts +73 -0
- package/server-dist/dist/llm/prompts.d.ts.map +1 -0
- package/server-dist/dist/llm/prompts.js +242 -0
- package/server-dist/dist/llm/prompts.js.map +1 -0
- package/server-dist/dist/llm/providers/anthropic.d.ts +3 -0
- package/server-dist/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/server-dist/dist/llm/providers/anthropic.js +45 -0
- package/server-dist/dist/llm/providers/anthropic.js.map +1 -0
- package/server-dist/dist/llm/providers/gemini.d.ts +3 -0
- package/server-dist/dist/llm/providers/gemini.d.ts.map +1 -0
- package/server-dist/dist/llm/providers/gemini.js +51 -0
- package/server-dist/dist/llm/providers/gemini.js.map +1 -0
- package/server-dist/dist/llm/providers/ollama.d.ts +12 -0
- package/server-dist/dist/llm/providers/ollama.d.ts.map +1 -0
- package/server-dist/dist/llm/providers/ollama.js +61 -0
- package/server-dist/dist/llm/providers/ollama.js.map +1 -0
- package/server-dist/dist/llm/providers/openai.d.ts +3 -0
- package/server-dist/dist/llm/providers/openai.d.ts.map +1 -0
- package/server-dist/dist/llm/providers/openai.js +39 -0
- package/server-dist/dist/llm/providers/openai.js.map +1 -0
- package/server-dist/dist/llm/types.d.ts +22 -0
- package/server-dist/dist/llm/types.d.ts.map +1 -0
- package/server-dist/dist/llm/types.js +5 -0
- package/server-dist/dist/llm/types.js.map +1 -0
- package/server-dist/dist/routes/analysis.d.ts +4 -0
- package/server-dist/dist/routes/analysis.d.ts.map +1 -0
- package/server-dist/dist/routes/analysis.js +103 -0
- package/server-dist/dist/routes/analysis.js.map +1 -0
- package/server-dist/dist/routes/analytics.d.ts +4 -0
- package/server-dist/dist/routes/analytics.d.ts.map +1 -0
- package/server-dist/dist/routes/analytics.js +47 -0
- package/server-dist/dist/routes/analytics.js.map +1 -0
- package/server-dist/dist/routes/config.d.ts +4 -0
- package/server-dist/dist/routes/config.d.ts.map +1 -0
- package/server-dist/dist/routes/config.js +108 -0
- package/server-dist/dist/routes/config.js.map +1 -0
- package/server-dist/dist/routes/export.d.ts +4 -0
- package/server-dist/dist/routes/export.d.ts.map +1 -0
- package/server-dist/dist/routes/export.js +52 -0
- package/server-dist/dist/routes/export.js.map +1 -0
- package/server-dist/dist/routes/insights.d.ts +4 -0
- package/server-dist/dist/routes/insights.d.ts.map +1 -0
- package/server-dist/dist/routes/insights.js +80 -0
- package/server-dist/dist/routes/insights.js.map +1 -0
- package/server-dist/dist/routes/messages.d.ts +4 -0
- package/server-dist/dist/routes/messages.d.ts.map +1 -0
- package/server-dist/dist/routes/messages.js +19 -0
- package/server-dist/dist/routes/messages.js.map +1 -0
- package/server-dist/dist/routes/projects.d.ts +4 -0
- package/server-dist/dist/routes/projects.d.ts.map +1 -0
- package/server-dist/dist/routes/projects.js +32 -0
- package/server-dist/dist/routes/projects.js.map +1 -0
- package/server-dist/dist/routes/sessions.d.ts +4 -0
- package/server-dist/dist/routes/sessions.d.ts.map +1 -0
- package/server-dist/dist/routes/sessions.js +65 -0
- package/server-dist/dist/routes/sessions.js.map +1 -0
- package/server-dist/dist/utils.d.ts +6 -0
- package/server-dist/dist/utils.d.ts.map +1 -0
- package/server-dist/dist/utils.js +9 -0
- package/server-dist/dist/utils.js.map +1 -0
- /package/dashboard-dist/{assets → dist/assets}/index-CUWKxcRo.js +0 -0
package/dist/utils/telemetry.js
CHANGED
|
@@ -4,7 +4,13 @@ import * as os from 'os';
|
|
|
4
4
|
import * as crypto from 'crypto';
|
|
5
5
|
import { createRequire } from 'module';
|
|
6
6
|
import { loadConfig, getConfigDir, getClaudeDir } from './config.js';
|
|
7
|
-
const TELEMETRY_ENDPOINT = 'https://xrbkoqjfolxiyfxubiom.supabase.co/functions/v1/cli-telemetry';
|
|
7
|
+
const TELEMETRY_ENDPOINT = 'https://xrbkoqjfolxiyfxubiom.supabase.co/functions/v1/cli-telemetry-v2';
|
|
8
|
+
// HMAC signing key for request integrity.
|
|
9
|
+
// This is a deterrent, NOT a security boundary — npm packages are public and this key
|
|
10
|
+
// is extractable. The real security is enforced server-side in the Edge Function.
|
|
11
|
+
// Rotation: bump the endpoint version (cli-telemetry-v3) to rotate the key.
|
|
12
|
+
// The Edge Function accepts keys as a Supabase secret (HMAC_KEYS env var), not hardcoded.
|
|
13
|
+
const HMAC_KEY = 'fb73eabc121b8fe0bde2eb6f8a2d09c21bf74708d2148d7a520bb00661f03b7f';
|
|
8
14
|
// Touch file path that tracks whether the one-time disclosure has been shown
|
|
9
15
|
const NOTICE_FILE = path.join(getConfigDir(), '.telemetry-notice-shown');
|
|
10
16
|
/**
|
|
@@ -271,6 +277,18 @@ function detectHook() {
|
|
|
271
277
|
return false;
|
|
272
278
|
}
|
|
273
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Sign the request body with HMAC-SHA256.
|
|
282
|
+
* Returns the hex digest prefixed with 'sha256=' for the X-Signature header.
|
|
283
|
+
*
|
|
284
|
+
* Note: the key is public (extractable from the npm package) — this is a deterrent
|
|
285
|
+
* against casual data poisoning, not a cryptographic secret. Security is enforced
|
|
286
|
+
* server-side in the Edge Function using constant-time comparison.
|
|
287
|
+
*/
|
|
288
|
+
function signPayload(body) {
|
|
289
|
+
const digest = crypto.createHmac('sha256', HMAC_KEY).update(body).digest('hex');
|
|
290
|
+
return `sha256=${digest}`;
|
|
291
|
+
}
|
|
274
292
|
/**
|
|
275
293
|
* Internal: Send the event to the telemetry endpoint.
|
|
276
294
|
* AbortController ensures we don't hang longer than 2 seconds.
|
|
@@ -281,10 +299,17 @@ async function sendEvent(event) {
|
|
|
281
299
|
// 2s timeout — enough for a healthy network, short enough to not delay anything
|
|
282
300
|
const timer = setTimeout(() => controller.abort(), 2000);
|
|
283
301
|
try {
|
|
302
|
+
const body = JSON.stringify(event);
|
|
284
303
|
await fetch(TELEMETRY_ENDPOINT, {
|
|
285
304
|
method: 'POST',
|
|
286
|
-
headers: {
|
|
287
|
-
|
|
305
|
+
headers: {
|
|
306
|
+
'Content-Type': 'application/json',
|
|
307
|
+
// HMAC signature — lets the Edge Function verify the payload wasn't tampered.
|
|
308
|
+
// The v2 endpoint accepts but does not require this header initially, allowing
|
|
309
|
+
// older CLI versions (which don't send it) to continue working.
|
|
310
|
+
'X-Signature': signPayload(body),
|
|
311
|
+
},
|
|
312
|
+
body,
|
|
288
313
|
signal: controller.signal,
|
|
289
314
|
});
|
|
290
315
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/utils/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/utils/telemetry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-insights/cli",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "AI coding session analytics with built-in dashboard",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
"build": "tsc",
|
|
24
24
|
"dev": "tsc --watch",
|
|
25
25
|
"start": "node dist/index.js",
|
|
26
|
+
"test": "vitest run",
|
|
27
|
+
"test:watch": "vitest",
|
|
26
28
|
"prepublishOnly": "cd .. && pnpm -r build && cp -r dashboard/dist cli/dashboard-dist && cp -r server/dist cli/server-dist"
|
|
27
29
|
},
|
|
28
30
|
"files": [
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
export interface ServerOptions {
|
|
3
|
+
port: number;
|
|
4
|
+
staticDir: string;
|
|
5
|
+
openBrowser: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Create the Hono app with all API routes mounted.
|
|
9
|
+
* Does NOT add static file serving or call serve() — that's startServer's job.
|
|
10
|
+
* Exported so tests can use app.request() without starting a real server.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createApp(): Hono;
|
|
13
|
+
/**
|
|
14
|
+
* Start the Code Insights local dashboard server.
|
|
15
|
+
* Calls createApp(), adds static file serving + SPA fallback if staticDir exists,
|
|
16
|
+
* then calls serve().
|
|
17
|
+
* Called by the CLI `dashboard` command.
|
|
18
|
+
*/
|
|
19
|
+
export declare function startServer(options: ServerOptions): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAa5B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAgChC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDvE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { serve } from '@hono/node-server';
|
|
2
|
+
import { serveStatic } from '@hono/node-server/serve-static';
|
|
3
|
+
import { Hono } from 'hono';
|
|
4
|
+
import { existsSync, readFileSync } from 'fs';
|
|
5
|
+
import { relative, join } from 'path';
|
|
6
|
+
import { openUrl } from '@code-insights/cli/utils/browser';
|
|
7
|
+
import projectsRouter from './routes/projects.js';
|
|
8
|
+
import sessionsRouter from './routes/sessions.js';
|
|
9
|
+
import messagesRouter from './routes/messages.js';
|
|
10
|
+
import insightsRouter from './routes/insights.js';
|
|
11
|
+
import analysisRouter from './routes/analysis.js';
|
|
12
|
+
import analyticsRouter from './routes/analytics.js';
|
|
13
|
+
import configRouter from './routes/config.js';
|
|
14
|
+
import exportRouter from './routes/export.js';
|
|
15
|
+
/**
|
|
16
|
+
* Create the Hono app with all API routes mounted.
|
|
17
|
+
* Does NOT add static file serving or call serve() — that's startServer's job.
|
|
18
|
+
* Exported so tests can use app.request() without starting a real server.
|
|
19
|
+
*/
|
|
20
|
+
export function createApp() {
|
|
21
|
+
const app = new Hono();
|
|
22
|
+
// Global error handler — prevents stack trace leakage to clients.
|
|
23
|
+
// Detects malformed JSON bodies (SyntaxError) and returns 400 instead of 500.
|
|
24
|
+
app.onError((err, c) => {
|
|
25
|
+
if (err instanceof SyntaxError && err.message.includes('JSON')) {
|
|
26
|
+
return c.json({ error: 'Invalid JSON in request body' }, 400);
|
|
27
|
+
}
|
|
28
|
+
console.error(err);
|
|
29
|
+
return c.json({ error: 'Internal server error' }, 500);
|
|
30
|
+
});
|
|
31
|
+
// API routes — all under /api
|
|
32
|
+
app.route('/api/projects', projectsRouter);
|
|
33
|
+
app.route('/api/sessions', sessionsRouter);
|
|
34
|
+
app.route('/api/messages', messagesRouter);
|
|
35
|
+
app.route('/api/insights', insightsRouter);
|
|
36
|
+
app.route('/api/analysis', analysisRouter);
|
|
37
|
+
app.route('/api/analytics', analyticsRouter);
|
|
38
|
+
app.route('/api/config', configRouter);
|
|
39
|
+
app.route('/api/export', exportRouter);
|
|
40
|
+
// Health check
|
|
41
|
+
app.get('/api/health', (c) => c.json({ ok: true, version: '0.1.0' }));
|
|
42
|
+
// API 404 catch-all — must come AFTER all /api sub-routers and BEFORE static serving.
|
|
43
|
+
// Without this, unmatched /api/* routes fall through to the SPA fallback and return
|
|
44
|
+
// index.html as 200, which breaks API clients expecting JSON errors.
|
|
45
|
+
app.all('/api/*', (c) => c.json({ error: 'Not found' }, 404));
|
|
46
|
+
return app;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Start the Code Insights local dashboard server.
|
|
50
|
+
* Calls createApp(), adds static file serving + SPA fallback if staticDir exists,
|
|
51
|
+
* then calls serve().
|
|
52
|
+
* Called by the CLI `dashboard` command.
|
|
53
|
+
*/
|
|
54
|
+
export async function startServer(options) {
|
|
55
|
+
const { port, staticDir, openBrowser } = options;
|
|
56
|
+
const app = createApp();
|
|
57
|
+
// Static file serving — only if the dashboard has been built.
|
|
58
|
+
// serveStatic requires a path relative to process.cwd(), not an absolute path.
|
|
59
|
+
if (existsSync(staticDir)) {
|
|
60
|
+
const relativeStaticDir = relative(process.cwd(), staticDir);
|
|
61
|
+
app.use('/*', serveStatic({ root: relativeStaticDir }));
|
|
62
|
+
// Cache index.html at startup — avoids a readFileSync on every SPA navigation
|
|
63
|
+
// request, which would be a pointless disk read for a file that never changes
|
|
64
|
+
// while the server is running.
|
|
65
|
+
const indexPath = join(staticDir, 'index.html');
|
|
66
|
+
const indexHtml = existsSync(indexPath) ? readFileSync(indexPath, 'utf-8') : null;
|
|
67
|
+
// SPA fallback: any non-API route not matched by serveStatic serves index.html
|
|
68
|
+
// so react-router can handle client-side routing.
|
|
69
|
+
app.get('*', (c) => {
|
|
70
|
+
if (indexHtml)
|
|
71
|
+
return c.html(indexHtml);
|
|
72
|
+
return c.text('Dashboard not found. Run pnpm build first.', 404);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Dashboard not built — serve a helpful message
|
|
77
|
+
app.get('*', (c) => c.html(`
|
|
78
|
+
<html><body style="font-family:monospace;padding:2rem">
|
|
79
|
+
<h2>Code Insights Dashboard</h2>
|
|
80
|
+
<p>The dashboard has not been built yet.</p>
|
|
81
|
+
<pre>pnpm install && pnpm build</pre>
|
|
82
|
+
<p>Then restart the server.</p>
|
|
83
|
+
</body></html>
|
|
84
|
+
`));
|
|
85
|
+
}
|
|
86
|
+
// Graceful shutdown: just call process.exit(0).
|
|
87
|
+
// The process 'exit' handler in cli/src/db/client.ts already calls closeDb()
|
|
88
|
+
// which runs WAL checkpoint. Calling closeDb() here would double-close.
|
|
89
|
+
const shutdown = () => {
|
|
90
|
+
process.exit(0);
|
|
91
|
+
};
|
|
92
|
+
process.on('SIGINT', shutdown);
|
|
93
|
+
process.on('SIGTERM', shutdown);
|
|
94
|
+
serve({ fetch: app.fetch, port }, (info) => {
|
|
95
|
+
const url = `http://localhost:${info.port}`;
|
|
96
|
+
console.log(` Code Insights dashboard running at ${url}`);
|
|
97
|
+
if (openBrowser) {
|
|
98
|
+
openUrl(url);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAS9C;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,kEAAkE;IAClE,8EAA8E;IAC9E,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACrB,IAAI,GAAG,YAAY,WAAW,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,8BAA8B;IAC9B,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAC7C,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACvC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAEvC,eAAe;IACf,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAEtE,sFAAsF;IACtF,oFAAoF;IACpF,qEAAqE;IACrE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAE9D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAsB;IACtD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEjD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAExB,8DAA8D;IAC9D,+EAA+E;IAC/E,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7D,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAExD,8EAA8E;QAC9E,8EAA8E;QAC9E,+BAA+B;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAElF,+EAA+E;QAC/E,kDAAkD;QAClD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,SAAS;gBAAE,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,CAAC,CAAC,IAAI,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,gDAAgD;QAChD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACjB,CAAC,CAAC,IAAI,CAAC;;;;;;;OAON,CAAC,CACH,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type SQLiteMessageRow } from './prompts.js';
|
|
2
|
+
export type { SQLiteMessageRow };
|
|
3
|
+
export interface AnalysisProgress {
|
|
4
|
+
phase: 'loading_messages' | 'analyzing' | 'saving';
|
|
5
|
+
currentChunk?: number;
|
|
6
|
+
totalChunks?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface AnalysisOptions {
|
|
9
|
+
onProgress?: (progress: AnalysisProgress) => void;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
export interface AnalysisResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
insights: InsightRow[];
|
|
15
|
+
error?: string;
|
|
16
|
+
usage?: {
|
|
17
|
+
inputTokens: number;
|
|
18
|
+
outputTokens: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface InsightRow {
|
|
22
|
+
id: string;
|
|
23
|
+
session_id: string;
|
|
24
|
+
project_id: string;
|
|
25
|
+
project_name: string;
|
|
26
|
+
type: string;
|
|
27
|
+
title: string;
|
|
28
|
+
content: string;
|
|
29
|
+
summary: string;
|
|
30
|
+
bullets: string;
|
|
31
|
+
confidence: number;
|
|
32
|
+
source: 'llm';
|
|
33
|
+
metadata: string | null;
|
|
34
|
+
timestamp: string;
|
|
35
|
+
created_at: string;
|
|
36
|
+
scope: string;
|
|
37
|
+
analysis_version: string;
|
|
38
|
+
}
|
|
39
|
+
export interface SessionData {
|
|
40
|
+
id: string;
|
|
41
|
+
project_id: string;
|
|
42
|
+
project_name: string;
|
|
43
|
+
project_path: string;
|
|
44
|
+
summary: string | null;
|
|
45
|
+
ended_at: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Analyze a session and generate insights, saving them to SQLite.
|
|
49
|
+
*/
|
|
50
|
+
export declare function analyzeSession(session: SessionData, messages: SQLiteMessageRow[], options?: AnalysisOptions): Promise<AnalysisResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Analyze prompt quality for a session.
|
|
53
|
+
*/
|
|
54
|
+
export declare function analyzePromptQuality(session: SessionData, messages: SQLiteMessageRow[], options?: AnalysisOptions): Promise<AnalysisResult>;
|
|
55
|
+
export interface RecurringInsightGroup {
|
|
56
|
+
insightIds: string[];
|
|
57
|
+
theme: string;
|
|
58
|
+
}
|
|
59
|
+
export interface RecurringInsightResult {
|
|
60
|
+
success: boolean;
|
|
61
|
+
groups: RecurringInsightGroup[];
|
|
62
|
+
updatedCount: number;
|
|
63
|
+
error?: string;
|
|
64
|
+
usage?: {
|
|
65
|
+
inputTokens: number;
|
|
66
|
+
outputTokens: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Find recurring patterns across multiple insights and write bidirectional links to SQLite.
|
|
71
|
+
*/
|
|
72
|
+
export declare function findRecurringInsights(insights: Array<{
|
|
73
|
+
id: string;
|
|
74
|
+
type: string;
|
|
75
|
+
title: string;
|
|
76
|
+
summary: string;
|
|
77
|
+
project_name: string;
|
|
78
|
+
session_id: string;
|
|
79
|
+
}>): Promise<RecurringInsightResult>;
|
|
80
|
+
//# sourceMappingURL=analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/llm/analysis.ts"],"names":[],"mappings":"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"}
|