@code-insights/cli 3.0.1 → 3.0.3

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 (119) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dashboard-dist/index.html +1 -1
  3. package/dist/index.js +3 -1
  4. package/dist/index.js.map +1 -1
  5. package/package.json +3 -1
  6. package/dashboard-dist/assets/index-CuCBzQyQ.js +0 -548
  7. package/dashboard-dist/dist/assets/index-BMhL7wL8.css +0 -1
  8. package/dashboard-dist/dist/assets/index-CuCBzQyQ.js +0 -548
  9. package/dashboard-dist/dist/favicon.svg +0 -4
  10. package/dashboard-dist/dist/index.html +0 -33
  11. package/dist/commands/connect.d.ts +0 -5
  12. package/dist/commands/connect.d.ts.map +0 -1
  13. package/dist/commands/connect.js +0 -39
  14. package/dist/commands/connect.js.map +0 -1
  15. package/dist/commands/insights.d.ts +0 -13
  16. package/dist/commands/insights.d.ts.map +0 -1
  17. package/dist/commands/insights.js +0 -87
  18. package/dist/commands/insights.js.map +0 -1
  19. package/dist/commands/link.d.ts +0 -8
  20. package/dist/commands/link.d.ts.map +0 -1
  21. package/dist/commands/link.js +0 -39
  22. package/dist/commands/link.js.map +0 -1
  23. package/dist/commands/stats/data/cache.d.ts +0 -29
  24. package/dist/commands/stats/data/cache.d.ts.map +0 -1
  25. package/dist/commands/stats/data/cache.js +0 -197
  26. package/dist/commands/stats/data/cache.js.map +0 -1
  27. package/dist/commands/stats/data/firestore.d.ts +0 -13
  28. package/dist/commands/stats/data/firestore.d.ts.map +0 -1
  29. package/dist/commands/stats/data/firestore.js +0 -170
  30. package/dist/commands/stats/data/firestore.js.map +0 -1
  31. package/dist/firebase/client.d.ts +0 -45
  32. package/dist/firebase/client.d.ts.map +0 -1
  33. package/dist/firebase/client.js +0 -344
  34. package/dist/firebase/client.js.map +0 -1
  35. package/dist/parser/insights.d.ts +0 -7
  36. package/dist/parser/insights.d.ts.map +0 -1
  37. package/dist/parser/insights.js +0 -271
  38. package/dist/parser/insights.js.map +0 -1
  39. package/dist/utils/firebase-json.d.ts +0 -87
  40. package/dist/utils/firebase-json.d.ts.map +0 -1
  41. package/dist/utils/firebase-json.js +0 -207
  42. package/dist/utils/firebase-json.js.map +0 -1
  43. package/server-dist/dist/index.d.ts +0 -12
  44. package/server-dist/dist/index.d.ts.map +0 -1
  45. package/server-dist/dist/index.js +0 -92
  46. package/server-dist/dist/index.js.map +0 -1
  47. package/server-dist/dist/llm/analysis.d.ts +0 -80
  48. package/server-dist/dist/llm/analysis.d.ts.map +0 -1
  49. package/server-dist/dist/llm/analysis.js +0 -509
  50. package/server-dist/dist/llm/analysis.js.map +0 -1
  51. package/server-dist/dist/llm/client.d.ts +0 -27
  52. package/server-dist/dist/llm/client.d.ts.map +0 -1
  53. package/server-dist/dist/llm/client.js +0 -71
  54. package/server-dist/dist/llm/client.js.map +0 -1
  55. package/server-dist/dist/llm/index.d.ts +0 -7
  56. package/server-dist/dist/llm/index.d.ts.map +0 -1
  57. package/server-dist/dist/llm/index.js +0 -5
  58. package/server-dist/dist/llm/index.js.map +0 -1
  59. package/server-dist/dist/llm/prompts.d.ts +0 -73
  60. package/server-dist/dist/llm/prompts.d.ts.map +0 -1
  61. package/server-dist/dist/llm/prompts.js +0 -242
  62. package/server-dist/dist/llm/prompts.js.map +0 -1
  63. package/server-dist/dist/llm/providers/anthropic.d.ts +0 -3
  64. package/server-dist/dist/llm/providers/anthropic.d.ts.map +0 -1
  65. package/server-dist/dist/llm/providers/anthropic.js +0 -45
  66. package/server-dist/dist/llm/providers/anthropic.js.map +0 -1
  67. package/server-dist/dist/llm/providers/gemini.d.ts +0 -3
  68. package/server-dist/dist/llm/providers/gemini.d.ts.map +0 -1
  69. package/server-dist/dist/llm/providers/gemini.js +0 -51
  70. package/server-dist/dist/llm/providers/gemini.js.map +0 -1
  71. package/server-dist/dist/llm/providers/ollama.d.ts +0 -12
  72. package/server-dist/dist/llm/providers/ollama.d.ts.map +0 -1
  73. package/server-dist/dist/llm/providers/ollama.js +0 -61
  74. package/server-dist/dist/llm/providers/ollama.js.map +0 -1
  75. package/server-dist/dist/llm/providers/openai.d.ts +0 -3
  76. package/server-dist/dist/llm/providers/openai.d.ts.map +0 -1
  77. package/server-dist/dist/llm/providers/openai.js +0 -39
  78. package/server-dist/dist/llm/providers/openai.js.map +0 -1
  79. package/server-dist/dist/llm/types.d.ts +0 -22
  80. package/server-dist/dist/llm/types.d.ts.map +0 -1
  81. package/server-dist/dist/llm/types.js +0 -5
  82. package/server-dist/dist/llm/types.js.map +0 -1
  83. package/server-dist/dist/routes/analysis.d.ts +0 -4
  84. package/server-dist/dist/routes/analysis.d.ts.map +0 -1
  85. package/server-dist/dist/routes/analysis.js +0 -103
  86. package/server-dist/dist/routes/analysis.js.map +0 -1
  87. package/server-dist/dist/routes/analytics.d.ts +0 -4
  88. package/server-dist/dist/routes/analytics.d.ts.map +0 -1
  89. package/server-dist/dist/routes/analytics.js +0 -47
  90. package/server-dist/dist/routes/analytics.js.map +0 -1
  91. package/server-dist/dist/routes/config.d.ts +0 -4
  92. package/server-dist/dist/routes/config.d.ts.map +0 -1
  93. package/server-dist/dist/routes/config.js +0 -108
  94. package/server-dist/dist/routes/config.js.map +0 -1
  95. package/server-dist/dist/routes/export.d.ts +0 -4
  96. package/server-dist/dist/routes/export.d.ts.map +0 -1
  97. package/server-dist/dist/routes/export.js +0 -52
  98. package/server-dist/dist/routes/export.js.map +0 -1
  99. package/server-dist/dist/routes/insights.d.ts +0 -4
  100. package/server-dist/dist/routes/insights.d.ts.map +0 -1
  101. package/server-dist/dist/routes/insights.js +0 -80
  102. package/server-dist/dist/routes/insights.js.map +0 -1
  103. package/server-dist/dist/routes/messages.d.ts +0 -4
  104. package/server-dist/dist/routes/messages.d.ts.map +0 -1
  105. package/server-dist/dist/routes/messages.js +0 -19
  106. package/server-dist/dist/routes/messages.js.map +0 -1
  107. package/server-dist/dist/routes/projects.d.ts +0 -4
  108. package/server-dist/dist/routes/projects.d.ts.map +0 -1
  109. package/server-dist/dist/routes/projects.js +0 -32
  110. package/server-dist/dist/routes/projects.js.map +0 -1
  111. package/server-dist/dist/routes/sessions.d.ts +0 -4
  112. package/server-dist/dist/routes/sessions.d.ts.map +0 -1
  113. package/server-dist/dist/routes/sessions.js +0 -65
  114. package/server-dist/dist/routes/sessions.js.map +0 -1
  115. package/server-dist/dist/utils.d.ts +0 -6
  116. package/server-dist/dist/utils.d.ts.map +0 -1
  117. package/server-dist/dist/utils.js +0 -9
  118. package/server-dist/dist/utils.js.map +0 -1
  119. /package/dashboard-dist/{dist/assets → assets}/index-CUWKxcRo.js +0 -0
@@ -1,170 +0,0 @@
1
- // ──────────────────────────────────────────────────────
2
- // Firestore data source for stats commands
3
- // ──────────────────────────────────────────────────────
4
- import admin from 'firebase-admin';
5
- import { initializeFirebase, getDb, getProjects } from '../../../firebase/client.js';
6
- import { ProjectNotFoundError, FirestoreIndexError } from './types.js';
7
- import { findSimilarNames } from './fuzzy-match.js';
8
- // ──────────────────────────────────────────────────────
9
- // Helpers
10
- // ──────────────────────────────────────────────────────
11
- /** Checks if error is a Firestore FAILED_PRECONDITION (missing composite index) */
12
- function isFirestoreIndexError(error) {
13
- if (typeof error === 'object' && error !== null && 'code' in error) {
14
- return error.code === 9;
15
- }
16
- return false;
17
- }
18
- /** Extracts the Firebase console index-creation URL from an error message */
19
- function extractIndexUrl(error) {
20
- if (typeof error === 'object' && error !== null && 'message' in error) {
21
- const message = error.message;
22
- const match = message.match(/(https:\/\/console\.firebase\.google\.com\/[^\s"]+)/);
23
- return match ? match[1] : null;
24
- }
25
- return null;
26
- }
27
- // ──────────────────────────────────────────────────────
28
- // Document mapper
29
- // ──────────────────────────────────────────────────────
30
- /** Maps a Firestore document to the universal SessionRow shape */
31
- function docToSessionRow(doc) {
32
- const data = doc.data();
33
- if (!data)
34
- throw new Error(`Session document ${doc.id} has no data`);
35
- return {
36
- id: doc.id,
37
- projectId: data.projectId,
38
- projectName: data.projectName,
39
- startedAt: data.startedAt?.toDate() ?? new Date(),
40
- endedAt: data.endedAt?.toDate() ?? new Date(),
41
- messageCount: data.messageCount ?? 0,
42
- userMessageCount: data.userMessageCount ?? 0,
43
- assistantMessageCount: data.assistantMessageCount ?? 0,
44
- toolCallCount: data.toolCallCount ?? 0,
45
- estimatedCostUsd: data.estimatedCostUsd,
46
- totalInputTokens: data.totalInputTokens,
47
- totalOutputTokens: data.totalOutputTokens,
48
- cacheCreationTokens: data.cacheCreationTokens,
49
- cacheReadTokens: data.cacheReadTokens,
50
- primaryModel: data.primaryModel,
51
- modelsUsed: data.modelsUsed,
52
- generatedTitle: data.generatedTitle,
53
- customTitle: data.customTitle,
54
- summary: data.summary,
55
- sessionCharacter: data.sessionCharacter,
56
- sourceTool: data.sourceTool,
57
- usageSource: data.usageSource,
58
- };
59
- }
60
- // ──────────────────────────────────────────────────────
61
- // FirestoreDataSource
62
- // ──────────────────────────────────────────────────────
63
- export class FirestoreDataSource {
64
- config;
65
- name = 'firestore';
66
- constructor(config) {
67
- this.config = config;
68
- }
69
- async prepare(flags) {
70
- initializeFirebase(this.config);
71
- if (!flags.noSync) {
72
- try {
73
- const { runSync } = await import('../../sync.js');
74
- const result = await runSync({ quiet: true });
75
- if (result.syncedCount > 0) {
76
- return { message: `Synced ${result.syncedCount} new sessions`, dataChanged: true };
77
- }
78
- return { message: 'Up to date', dataChanged: false };
79
- }
80
- catch {
81
- return { message: 'Sync failed (showing cached data)', dataChanged: false };
82
- }
83
- }
84
- return { message: 'Sync skipped', dataChanged: false };
85
- }
86
- async getSessions(opts) {
87
- const firestore = getDb();
88
- let query = firestore.collection('sessions');
89
- if (opts.projectId) {
90
- query = query.where('projectId', '==', opts.projectId);
91
- }
92
- if (opts.sourceTool) {
93
- query = query.where('sourceTool', '==', opts.sourceTool);
94
- }
95
- if (opts.periodStart) {
96
- query = query.where('startedAt', '>=', admin.firestore.Timestamp.fromDate(opts.periodStart));
97
- }
98
- query = query.orderBy('startedAt', 'desc');
99
- try {
100
- const snapshot = await query.get();
101
- return snapshot.docs.map(docToSessionRow);
102
- }
103
- catch (error) {
104
- if (isFirestoreIndexError(error)) {
105
- const url = extractIndexUrl(error);
106
- throw new FirestoreIndexError(url
107
- ? `Missing Firestore index. Create it here: ${url}`
108
- : 'Missing Firestore composite index. Check the error details in Firebase console.', url ?? '');
109
- }
110
- throw error;
111
- }
112
- }
113
- async getUsageStats() {
114
- const firestore = getDb();
115
- const doc = await firestore.collection('stats').doc('usage').get();
116
- if (!doc.exists)
117
- return null;
118
- const data = doc.data();
119
- return {
120
- totalInputTokens: data.totalInputTokens ?? 0,
121
- totalOutputTokens: data.totalOutputTokens ?? 0,
122
- cacheCreationTokens: data.cacheCreationTokens ?? 0,
123
- cacheReadTokens: data.cacheReadTokens ?? 0,
124
- estimatedCostUsd: data.estimatedCostUsd ?? 0,
125
- sessionsWithUsage: data.sessionsWithUsage ?? 0,
126
- lastUpdatedAt: data.lastUpdatedAt?.toDate() ?? new Date(),
127
- };
128
- }
129
- async resolveProjectId(name) {
130
- const projects = await getProjects();
131
- // Exact match (case-insensitive)
132
- const exact = projects.find((p) => p.name.toLowerCase() === name.toLowerCase());
133
- if (exact)
134
- return { projectId: exact.id, projectName: exact.name };
135
- // Substring match
136
- const substring = projects.filter((p) => p.name.toLowerCase().includes(name.toLowerCase()));
137
- if (substring.length === 1)
138
- return { projectId: substring[0].id, projectName: substring[0].name };
139
- // No match — throw with suggestions
140
- const suggestions = findSimilarNames(name, projects.map((p) => p.name));
141
- throw new ProjectNotFoundError(`Project "${name}" not found.`, name, projects.map((p) => ({ name: p.name })), suggestions);
142
- }
143
- async getLastSession(opts) {
144
- const firestore = getDb();
145
- let query = firestore.collection('sessions');
146
- if (opts?.sourceTool) {
147
- query = query.where('sourceTool', '==', opts.sourceTool);
148
- }
149
- if (opts?.projectId) {
150
- query = query.where('projectId', '==', opts.projectId);
151
- }
152
- query = query.orderBy('startedAt', 'desc').limit(1);
153
- try {
154
- const snapshot = await query.get();
155
- if (snapshot.empty)
156
- return null;
157
- return docToSessionRow(snapshot.docs[0]);
158
- }
159
- catch (error) {
160
- if (isFirestoreIndexError(error)) {
161
- const url = extractIndexUrl(error);
162
- throw new FirestoreIndexError(url
163
- ? `Missing Firestore index. Create it here: ${url}`
164
- : 'Missing Firestore composite index. Check the error details in Firebase console.', url ?? '');
165
- }
166
- throw error;
167
- }
168
- }
169
- }
170
- //# sourceMappingURL=firestore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/firestore.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- import admin from 'firebase-admin';
2
- import type { ClaudeInsightConfig, ParsedSession, Project } from '../types.js';
3
- /**
4
- * Initialize Firebase Admin SDK
5
- */
6
- export declare function initializeFirebase(config: ClaudeInsightConfig): void;
7
- /**
8
- * Get Firestore instance
9
- */
10
- export declare function getDb(): admin.firestore.Firestore;
11
- /**
12
- * Upload a session to Firestore
13
- */
14
- export declare function uploadSession(session: ParsedSession, isForceSync?: boolean): Promise<void>;
15
- /**
16
- * Upload messages to Firestore for LLM analysis
17
- */
18
- export declare function uploadMessages(session: ParsedSession): Promise<void>;
19
- /**
20
- * Check if a session already exists
21
- */
22
- export declare function sessionExists(sessionId: string): Promise<boolean>;
23
- /**
24
- * Get all projects
25
- */
26
- export declare function getProjects(): Promise<Project[]>;
27
- /**
28
- * Get recent sessions
29
- */
30
- export declare function getRecentSessions(limit?: number): Promise<ParsedSession[]>;
31
- /**
32
- * Recalculate usage stats from all sessions in Firestore.
33
- * Used after --force sync to reconcile totals.
34
- */
35
- export declare function recalculateUsageStats(): Promise<{
36
- sessionsWithUsage: number;
37
- totalTokens: number;
38
- estimatedCostUsd: number;
39
- }>;
40
- /**
41
- * Get per-tool session counts grouped by project.
42
- * Uses select() to only fetch projectId and sourceTool fields (efficient).
43
- */
44
- export declare function getProjectToolCounts(): Promise<Map<string, Map<string, number>>>;
45
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/firebase/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK/E;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAmBpE;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,CAKjD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG9F;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD1E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIvE;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAetD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA8BpF;AAGD;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CAwFD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAsBtF"}
@@ -1,344 +0,0 @@
1
- import admin from 'firebase-admin';
2
- import { generateStableProjectId, getDeviceInfo } from '../utils/device.js';
3
- let db = null;
4
- /**
5
- * Initialize Firebase Admin SDK
6
- */
7
- export function initializeFirebase(config) {
8
- if (!config.firebase) {
9
- throw new Error('Firebase credentials not configured. Run `code-insights init` to set up.');
10
- }
11
- if (admin.apps.length > 0) {
12
- db = admin.firestore();
13
- return;
14
- }
15
- admin.initializeApp({
16
- credential: admin.credential.cert({
17
- projectId: config.firebase.projectId,
18
- clientEmail: config.firebase.clientEmail,
19
- privateKey: config.firebase.privateKey.replace(/\\n/g, '\n'),
20
- }),
21
- });
22
- db = admin.firestore();
23
- }
24
- /**
25
- * Get Firestore instance
26
- */
27
- export function getDb() {
28
- if (!db) {
29
- throw new Error('Firebase not initialized. Call initializeFirebase first.');
30
- }
31
- return db;
32
- }
33
- /**
34
- * Upload a session to Firestore
35
- */
36
- export async function uploadSession(session, isForceSync = false) {
37
- const firestore = getDb();
38
- // Generate stable project ID (prefers git remote URL)
39
- const { projectId, source: projectIdSource, gitRemoteUrl } = generateStableProjectId(session.projectPath);
40
- // Get device info for multi-device support
41
- const deviceInfo = getDeviceInfo();
42
- // Check if session already exists (for idempotent session count)
43
- const sessionRef = firestore.collection('sessions').doc(session.id);
44
- const existingSession = await sessionRef.get();
45
- const isNewSession = !existingSession.exists;
46
- const batch = firestore.batch();
47
- // Upsert project
48
- const projectRef = firestore.collection('projects').doc(projectId);
49
- batch.set(projectRef, {
50
- name: session.projectName,
51
- path: session.projectPath,
52
- gitRemoteUrl: gitRemoteUrl,
53
- projectIdSource: projectIdSource,
54
- lastActivity: admin.firestore.Timestamp.fromDate(session.endedAt),
55
- updatedAt: admin.firestore.FieldValue.serverTimestamp(),
56
- }, { merge: true });
57
- // Only increment session count for NEW sessions (idempotent)
58
- if (isNewSession) {
59
- const incrementFields = {
60
- sessionCount: admin.firestore.FieldValue.increment(1),
61
- };
62
- if (!isForceSync && session.usage) {
63
- incrementFields.totalInputTokens = admin.firestore.FieldValue.increment(session.usage.totalInputTokens);
64
- incrementFields.totalOutputTokens = admin.firestore.FieldValue.increment(session.usage.totalOutputTokens);
65
- incrementFields.cacheCreationTokens = admin.firestore.FieldValue.increment(session.usage.cacheCreationTokens);
66
- incrementFields.cacheReadTokens = admin.firestore.FieldValue.increment(session.usage.cacheReadTokens);
67
- incrementFields.estimatedCostUsd = admin.firestore.FieldValue.increment(session.usage.estimatedCostUsd);
68
- }
69
- batch.update(projectRef, incrementFields);
70
- }
71
- // Upload session with device info
72
- batch.set(sessionRef, {
73
- projectId: projectId,
74
- projectName: session.projectName,
75
- projectPath: session.projectPath,
76
- gitRemoteUrl: gitRemoteUrl,
77
- summary: session.summary,
78
- generatedTitle: session.generatedTitle,
79
- titleSource: session.titleSource,
80
- sessionCharacter: session.sessionCharacter,
81
- startedAt: admin.firestore.Timestamp.fromDate(session.startedAt),
82
- endedAt: admin.firestore.Timestamp.fromDate(session.endedAt),
83
- messageCount: session.messageCount,
84
- userMessageCount: session.userMessageCount,
85
- assistantMessageCount: session.assistantMessageCount,
86
- toolCallCount: session.toolCallCount,
87
- gitBranch: session.gitBranch,
88
- claudeVersion: session.claudeVersion,
89
- sourceTool: session.sourceTool ?? 'claude-code',
90
- // Device info for multi-device tracking
91
- deviceId: deviceInfo.deviceId,
92
- deviceHostname: deviceInfo.hostname,
93
- devicePlatform: deviceInfo.platform,
94
- syncedAt: admin.firestore.FieldValue.serverTimestamp(),
95
- // Usage stats (conditional — absent for older sessions without token data)
96
- ...(session.usage ? {
97
- totalInputTokens: session.usage.totalInputTokens,
98
- totalOutputTokens: session.usage.totalOutputTokens,
99
- cacheCreationTokens: session.usage.cacheCreationTokens,
100
- cacheReadTokens: session.usage.cacheReadTokens,
101
- estimatedCostUsd: session.usage.estimatedCostUsd,
102
- modelsUsed: session.usage.modelsUsed,
103
- primaryModel: session.usage.primaryModel,
104
- usageSource: session.usage.usageSource,
105
- } : {}),
106
- });
107
- // Atomically increment usage stats for new sessions (non-force only)
108
- if (isNewSession && !isForceSync && session.usage) {
109
- const statsRef = firestore.collection('stats').doc('usage');
110
- batch.set(statsRef, {
111
- totalInputTokens: admin.firestore.FieldValue.increment(session.usage.totalInputTokens),
112
- totalOutputTokens: admin.firestore.FieldValue.increment(session.usage.totalOutputTokens),
113
- cacheCreationTokens: admin.firestore.FieldValue.increment(session.usage.cacheCreationTokens),
114
- cacheReadTokens: admin.firestore.FieldValue.increment(session.usage.cacheReadTokens),
115
- estimatedCostUsd: admin.firestore.FieldValue.increment(session.usage.estimatedCostUsd),
116
- sessionsWithUsage: admin.firestore.FieldValue.increment(1),
117
- lastUpdatedAt: admin.firestore.FieldValue.serverTimestamp(),
118
- }, { merge: true });
119
- }
120
- await batch.commit();
121
- }
122
- /**
123
- * Upload messages to Firestore for LLM analysis
124
- */
125
- export async function uploadMessages(session) {
126
- if (session.messages.length === 0)
127
- return;
128
- const firestore = getDb();
129
- const batches = [];
130
- let currentBatch = firestore.batch();
131
- let operationCount = 0;
132
- for (const message of session.messages) {
133
- const messageRef = firestore.collection('messages').doc(message.id);
134
- currentBatch.set(messageRef, {
135
- sessionId: message.sessionId,
136
- type: message.type,
137
- content: truncateContent(message.content, 10000),
138
- thinking: message.thinking
139
- ? truncateContent(message.thinking, 5000)
140
- : null,
141
- toolCalls: message.toolCalls.map((tc) => ({
142
- id: tc.id,
143
- name: tc.name,
144
- input: JSON.stringify(tc.input).slice(0, 1000),
145
- })),
146
- toolResults: message.toolResults.map((tr) => ({
147
- toolUseId: tr.toolUseId,
148
- output: truncateContent(tr.output, 2000),
149
- })),
150
- timestamp: admin.firestore.Timestamp.fromDate(message.timestamp),
151
- parentId: message.parentId,
152
- // Per-message usage (assistant messages only)
153
- ...(message.usage ? {
154
- usage: {
155
- inputTokens: message.usage.inputTokens,
156
- outputTokens: message.usage.outputTokens,
157
- cacheCreationTokens: message.usage.cacheCreationTokens,
158
- cacheReadTokens: message.usage.cacheReadTokens,
159
- model: message.usage.model,
160
- estimatedCostUsd: message.usage.estimatedCostUsd,
161
- },
162
- } : {}),
163
- });
164
- operationCount++;
165
- if (operationCount >= 500) {
166
- batches.push(currentBatch);
167
- currentBatch = firestore.batch();
168
- operationCount = 0;
169
- }
170
- }
171
- if (operationCount > 0) {
172
- batches.push(currentBatch);
173
- }
174
- await Promise.all(batches.map((batch) => batch.commit()));
175
- }
176
- /**
177
- * Check if a session already exists
178
- */
179
- export async function sessionExists(sessionId) {
180
- const firestore = getDb();
181
- const doc = await firestore.collection('sessions').doc(sessionId).get();
182
- return doc.exists;
183
- }
184
- /**
185
- * Get all projects
186
- */
187
- export async function getProjects() {
188
- const firestore = getDb();
189
- const snapshot = await firestore.collection('projects').orderBy('lastActivity', 'desc').get();
190
- return snapshot.docs.map((doc) => {
191
- const data = doc.data();
192
- return {
193
- id: doc.id,
194
- name: data.name,
195
- path: data.path,
196
- sessionCount: data.sessionCount || 0,
197
- lastActivity: data.lastActivity?.toDate() || new Date(),
198
- createdAt: data.createdAt?.toDate() || new Date(),
199
- };
200
- });
201
- }
202
- /**
203
- * Get recent sessions
204
- */
205
- export async function getRecentSessions(limit = 10) {
206
- const firestore = getDb();
207
- const snapshot = await firestore
208
- .collection('sessions')
209
- .orderBy('endedAt', 'desc')
210
- .limit(limit)
211
- .get();
212
- return snapshot.docs.map((doc) => {
213
- const data = doc.data();
214
- return {
215
- id: doc.id,
216
- projectPath: data.projectPath,
217
- projectName: data.projectName,
218
- summary: data.summary,
219
- startedAt: data.startedAt?.toDate() || new Date(),
220
- endedAt: data.endedAt?.toDate() || new Date(),
221
- messageCount: data.messageCount,
222
- userMessageCount: data.userMessageCount,
223
- assistantMessageCount: data.assistantMessageCount,
224
- toolCallCount: data.toolCallCount,
225
- messages: [],
226
- insights: [],
227
- gitBranch: data.gitBranch,
228
- claudeVersion: data.claudeVersion,
229
- generatedTitle: data.generatedTitle || null,
230
- titleSource: data.titleSource || null,
231
- sessionCharacter: data.sessionCharacter || null,
232
- };
233
- });
234
- }
235
- /**
236
- * Recalculate usage stats from all sessions in Firestore.
237
- * Used after --force sync to reconcile totals.
238
- */
239
- export async function recalculateUsageStats() {
240
- const firestore = getDb();
241
- // Query all sessions that have usage data
242
- const snapshot = await firestore
243
- .collection('sessions')
244
- .where('usageSource', '==', 'jsonl')
245
- .get();
246
- // Aggregate global + per-project totals
247
- const global = {
248
- totalInputTokens: 0,
249
- totalOutputTokens: 0,
250
- cacheCreationTokens: 0,
251
- cacheReadTokens: 0,
252
- estimatedCostUsd: 0,
253
- sessionsWithUsage: 0,
254
- };
255
- const perProject = {};
256
- for (const doc of snapshot.docs) {
257
- const data = doc.data();
258
- global.totalInputTokens += data.totalInputTokens ?? 0;
259
- global.totalOutputTokens += data.totalOutputTokens ?? 0;
260
- global.cacheCreationTokens += data.cacheCreationTokens ?? 0;
261
- global.cacheReadTokens += data.cacheReadTokens ?? 0;
262
- global.estimatedCostUsd += data.estimatedCostUsd ?? 0;
263
- global.sessionsWithUsage++;
264
- const pid = data.projectId;
265
- if (pid) {
266
- if (!perProject[pid]) {
267
- perProject[pid] = {
268
- totalInputTokens: 0,
269
- totalOutputTokens: 0,
270
- cacheCreationTokens: 0,
271
- cacheReadTokens: 0,
272
- estimatedCostUsd: 0,
273
- };
274
- }
275
- perProject[pid].totalInputTokens += data.totalInputTokens ?? 0;
276
- perProject[pid].totalOutputTokens += data.totalOutputTokens ?? 0;
277
- perProject[pid].cacheCreationTokens += data.cacheCreationTokens ?? 0;
278
- perProject[pid].cacheReadTokens += data.cacheReadTokens ?? 0;
279
- perProject[pid].estimatedCostUsd += data.estimatedCostUsd ?? 0;
280
- }
281
- }
282
- // Write global stats (overwrite, not merge)
283
- const statsRef = firestore.collection('stats').doc('usage');
284
- await statsRef.set({
285
- ...global,
286
- lastUpdatedAt: admin.firestore.FieldValue.serverTimestamp(),
287
- });
288
- // Update each project's usage fields
289
- const batches = [];
290
- let currentBatch = firestore.batch();
291
- let opCount = 0;
292
- for (const [projectId, usage] of Object.entries(perProject)) {
293
- const projectRef = firestore.collection('projects').doc(projectId);
294
- currentBatch.set(projectRef, usage, { merge: true });
295
- opCount++;
296
- if (opCount >= 500) {
297
- batches.push(currentBatch);
298
- currentBatch = firestore.batch();
299
- opCount = 0;
300
- }
301
- }
302
- if (opCount > 0)
303
- batches.push(currentBatch);
304
- await Promise.all(batches.map(b => b.commit()));
305
- const totalTokens = global.totalInputTokens + global.totalOutputTokens
306
- + global.cacheCreationTokens + global.cacheReadTokens;
307
- return {
308
- sessionsWithUsage: global.sessionsWithUsage,
309
- totalTokens,
310
- estimatedCostUsd: global.estimatedCostUsd,
311
- };
312
- }
313
- /**
314
- * Get per-tool session counts grouped by project.
315
- * Uses select() to only fetch projectId and sourceTool fields (efficient).
316
- */
317
- export async function getProjectToolCounts() {
318
- const firestore = getDb();
319
- const snapshot = await firestore
320
- .collection('sessions')
321
- .select('projectId', 'sourceTool')
322
- .get();
323
- const counts = new Map();
324
- for (const doc of snapshot.docs) {
325
- const data = doc.data();
326
- const projectId = data.projectId;
327
- const sourceTool = data.sourceTool || 'claude-code';
328
- if (!counts.has(projectId)) {
329
- counts.set(projectId, new Map());
330
- }
331
- const toolMap = counts.get(projectId);
332
- toolMap.set(sourceTool, (toolMap.get(sourceTool) || 0) + 1);
333
- }
334
- return counts;
335
- }
336
- /**
337
- * Truncate content to max length
338
- */
339
- function truncateContent(content, maxLength) {
340
- if (content.length <= maxLength)
341
- return content;
342
- return content.slice(0, maxLength - 20) + '\n... [truncated]';
343
- }
344
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/firebase/client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { ParsedSession, Insight, ParsedInsightContent } from '../types.js';
2
- export declare function parseInsightContent(raw: string): ParsedInsightContent;
3
- /**
4
- * Extract insights from a parsed session using pattern matching
5
- */
6
- export declare function extractInsights(session: ParsedSession): Insight[];
7
- //# sourceMappingURL=insights.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../src/parser/insights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,OAAO,EAAmB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGhH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAMrE;AAuDD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,EAAE,CA4BjE"}