@code-insights/cli 1.0.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/LICENSE +21 -0
- package/README.md +287 -0
- package/dist/commands/connect.d.ts +8 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +33 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +176 -0
- package/dist/commands/init.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/install-hook.d.ts +9 -0
- package/dist/commands/install-hook.d.ts.map +1 -0
- package/dist/commands/install-hook.js +98 -0
- package/dist/commands/install-hook.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/reset.d.ts +3 -0
- package/dist/commands/reset.d.ts.map +1 -0
- package/dist/commands/reset.js +95 -0
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +107 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +205 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/firebase/client.d.ts +35 -0
- package/dist/firebase/client.d.ts.map +1 -0
- package/dist/firebase/client.js +317 -0
- package/dist/firebase/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -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/parser/jsonl.d.ts +6 -0
- package/dist/parser/jsonl.d.ts.map +1 -0
- package/dist/parser/jsonl.js +305 -0
- package/dist/parser/jsonl.js.map +1 -0
- package/dist/parser/titles.d.ts +14 -0
- package/dist/parser/titles.d.ts.map +1 -0
- package/dist/parser/titles.js +258 -0
- package/dist/parser/titles.js.map +1 -0
- package/dist/types.d.ts +216 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +46 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +106 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/device.d.ts +32 -0
- package/dist/utils/device.d.ts.map +1 -0
- package/dist/utils/device.js +132 -0
- package/dist/utils/device.js.map +1 -0
- 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 +206 -0
- package/dist/utils/firebase-json.js.map +1 -0
- package/dist/utils/pricing.d.ts +29 -0
- package/dist/utils/pricing.d.ts.map +1 -0
- package/dist/utils/pricing.js +66 -0
- package/dist/utils/pricing.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
// Skip patterns - generic responses that make poor titles
|
|
2
|
+
const SKIP_PATTERNS = [
|
|
3
|
+
/^(yes|no|ok|okay|sure|thanks|thank you|continue|go ahead|sounds good|looks good|perfect|great|nice|cool|done|got it)\.?$/i,
|
|
4
|
+
/^(y|n|k)$/i,
|
|
5
|
+
/^```/, // Code blocks
|
|
6
|
+
];
|
|
7
|
+
// Prefixes to remove from titles
|
|
8
|
+
const PREFIX_REMOVALS = [
|
|
9
|
+
/^(help me|can you|could you|please|i want to|i need to|i'd like to|let's)\s+/i,
|
|
10
|
+
/^(hi|hello|hey),?\s*/i,
|
|
11
|
+
];
|
|
12
|
+
// Action verbs that indicate good title candidates
|
|
13
|
+
const ACTION_VERBS = /^(fix|add|create|build|implement|update|remove|delete|refactor|move|rename|change|modify|setup|configure|install|debug|test|write|make|get|set|find|search|check|review|analyze|optimize|improve|migrate|convert|integrate)/i;
|
|
14
|
+
/**
|
|
15
|
+
* Generate a smart title for a session
|
|
16
|
+
*/
|
|
17
|
+
export function generateTitle(session) {
|
|
18
|
+
// 1. If Claude Code provided a summary, use it
|
|
19
|
+
if (session.summary && session.summary.trim().length > 0) {
|
|
20
|
+
return {
|
|
21
|
+
title: cleanTitle(session.summary),
|
|
22
|
+
source: 'claude',
|
|
23
|
+
character: null,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// 2. Try to extract from first user message
|
|
27
|
+
const userMessageCandidate = extractFromUserMessage(session.messages);
|
|
28
|
+
if (userMessageCandidate && userMessageCandidate.score >= 40) {
|
|
29
|
+
return {
|
|
30
|
+
title: cleanTitle(userMessageCandidate.text),
|
|
31
|
+
source: userMessageCandidate.source,
|
|
32
|
+
character: null,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// 3. Try session character-based title
|
|
36
|
+
const character = detectSessionCharacter(session);
|
|
37
|
+
if (character) {
|
|
38
|
+
const characterTitle = generateCharacterTitle(session, character);
|
|
39
|
+
return {
|
|
40
|
+
title: characterTitle,
|
|
41
|
+
source: 'character',
|
|
42
|
+
character,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// 4. Use user message even with lower score if available
|
|
46
|
+
if (userMessageCandidate) {
|
|
47
|
+
return {
|
|
48
|
+
title: cleanTitle(userMessageCandidate.text),
|
|
49
|
+
source: userMessageCandidate.source,
|
|
50
|
+
character: null,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// 5. Fallback
|
|
54
|
+
return {
|
|
55
|
+
title: `${session.projectName} session (${session.messageCount} messages)`,
|
|
56
|
+
source: 'fallback',
|
|
57
|
+
character: null,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract title candidate from first meaningful user message
|
|
62
|
+
*/
|
|
63
|
+
function extractFromUserMessage(messages) {
|
|
64
|
+
const userMessages = messages.filter(m => m.type === 'user');
|
|
65
|
+
for (const msg of userMessages.slice(0, 3)) {
|
|
66
|
+
const content = msg.content.trim();
|
|
67
|
+
if (SKIP_PATTERNS.some(p => p.test(content))) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const wordCount = content.split(/\s+/).length;
|
|
71
|
+
if (wordCount < 3) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
let text = content;
|
|
75
|
+
if (wordCount > 50) {
|
|
76
|
+
const firstSentence = content.split(/[.!?]/)[0];
|
|
77
|
+
text = firstSentence.length > 10 ? firstSentence : content.split(/\s+/).slice(0, 20).join(' ');
|
|
78
|
+
}
|
|
79
|
+
const score = scoreUserMessage(text);
|
|
80
|
+
if (score > 0) {
|
|
81
|
+
return { text, source: 'user_message', score };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Score a user message for title quality
|
|
88
|
+
*/
|
|
89
|
+
function scoreUserMessage(text) {
|
|
90
|
+
const wordCount = text.split(/\s+/).length;
|
|
91
|
+
if (wordCount < 3)
|
|
92
|
+
return 0;
|
|
93
|
+
if (wordCount > 100)
|
|
94
|
+
return 0;
|
|
95
|
+
if (ACTION_VERBS.test(text)) {
|
|
96
|
+
if (wordCount >= 5 && wordCount <= 15)
|
|
97
|
+
return 80;
|
|
98
|
+
if (wordCount > 15 && wordCount <= 30)
|
|
99
|
+
return 70;
|
|
100
|
+
return 60;
|
|
101
|
+
}
|
|
102
|
+
if (text.includes('?')) {
|
|
103
|
+
if (wordCount >= 5 && wordCount <= 20)
|
|
104
|
+
return 70;
|
|
105
|
+
return 50;
|
|
106
|
+
}
|
|
107
|
+
if (wordCount >= 5 && wordCount <= 15)
|
|
108
|
+
return 60;
|
|
109
|
+
if (wordCount > 15 && wordCount <= 50)
|
|
110
|
+
return 40;
|
|
111
|
+
return 20;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Detect the session's character based on patterns
|
|
115
|
+
*/
|
|
116
|
+
export function detectSessionCharacter(session) {
|
|
117
|
+
const { messages, toolCallCount, messageCount } = session;
|
|
118
|
+
const toolCounts = {};
|
|
119
|
+
const filesModified = new Set();
|
|
120
|
+
const filesCreated = new Set();
|
|
121
|
+
for (const msg of messages) {
|
|
122
|
+
for (const tc of msg.toolCalls) {
|
|
123
|
+
toolCounts[tc.name] = (toolCounts[tc.name] || 0) + 1;
|
|
124
|
+
if (tc.name === 'Edit' || tc.name === 'Write') {
|
|
125
|
+
const filePath = tc.input?.file_path;
|
|
126
|
+
if (filePath) {
|
|
127
|
+
filesModified.add(filePath);
|
|
128
|
+
if (tc.name === 'Write') {
|
|
129
|
+
filesCreated.add(filePath);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const editCount = (toolCounts['Edit'] || 0) + (toolCounts['Write'] || 0);
|
|
136
|
+
const readCount = (toolCounts['Read'] || 0) + (toolCounts['Grep'] || 0) + (toolCounts['Glob'] || 0);
|
|
137
|
+
if (messageCount >= 50 && filesModified.size <= 3 && filesModified.size > 0) {
|
|
138
|
+
return 'deep_focus';
|
|
139
|
+
}
|
|
140
|
+
const hasErrorPatterns = messages.some(m => /error|bug|fix|issue|broken|fail/i.test(m.content));
|
|
141
|
+
const hasFix = messages.some(m => /fixed|resolved|working now/i.test(m.content));
|
|
142
|
+
if (hasErrorPatterns && hasFix && editCount > 0) {
|
|
143
|
+
return 'bug_hunt';
|
|
144
|
+
}
|
|
145
|
+
if (filesCreated.size >= 3) {
|
|
146
|
+
return 'feature_build';
|
|
147
|
+
}
|
|
148
|
+
if (readCount > editCount * 3 && editCount < 5) {
|
|
149
|
+
return 'exploration';
|
|
150
|
+
}
|
|
151
|
+
if (editCount > 10 && filesCreated.size === 0) {
|
|
152
|
+
return 'refactor';
|
|
153
|
+
}
|
|
154
|
+
const questionCount = messages.filter(m => m.type === 'user' && m.content.includes('?')).length;
|
|
155
|
+
if (questionCount >= 3 && toolCallCount < messageCount) {
|
|
156
|
+
return 'learning';
|
|
157
|
+
}
|
|
158
|
+
if (messageCount < 10 && editCount > 0) {
|
|
159
|
+
return 'quick_task';
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Generate title based on session character
|
|
165
|
+
*/
|
|
166
|
+
function generateCharacterTitle(session, character) {
|
|
167
|
+
const fileCounts = {};
|
|
168
|
+
for (const msg of session.messages) {
|
|
169
|
+
for (const tc of msg.toolCalls) {
|
|
170
|
+
if (tc.name === 'Edit' || tc.name === 'Write') {
|
|
171
|
+
const filePath = tc.input?.file_path;
|
|
172
|
+
if (filePath) {
|
|
173
|
+
const fileName = filePath.split('/').pop() || filePath;
|
|
174
|
+
fileCounts[fileName] = (fileCounts[fileName] || 0) + 1;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const primaryFile = Object.entries(fileCounts)
|
|
180
|
+
.sort((a, b) => b[1] - a[1])[0]?.[0] || 'files';
|
|
181
|
+
const userContent = session.messages
|
|
182
|
+
.filter(m => m.type === 'user')
|
|
183
|
+
.map(m => m.content)
|
|
184
|
+
.join(' ')
|
|
185
|
+
.toLowerCase();
|
|
186
|
+
const topic = extractTopic(userContent) || session.projectName;
|
|
187
|
+
switch (character) {
|
|
188
|
+
case 'deep_focus':
|
|
189
|
+
return `Deep work: ${primaryFile}`;
|
|
190
|
+
case 'bug_hunt':
|
|
191
|
+
return `Fixed: ${extractBugDescription(session.messages) || primaryFile}`;
|
|
192
|
+
case 'feature_build':
|
|
193
|
+
return `Built: ${topic}`;
|
|
194
|
+
case 'exploration':
|
|
195
|
+
return `Explored: ${topic}`;
|
|
196
|
+
case 'refactor':
|
|
197
|
+
return `Refactored: ${primaryFile}`;
|
|
198
|
+
case 'learning':
|
|
199
|
+
return `Learned: ${topic}`;
|
|
200
|
+
case 'quick_task':
|
|
201
|
+
return `Updated: ${primaryFile}`;
|
|
202
|
+
default:
|
|
203
|
+
return `${session.projectName} session`;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Extract a topic from user content
|
|
208
|
+
*/
|
|
209
|
+
function extractTopic(content) {
|
|
210
|
+
const patterns = [
|
|
211
|
+
/(?:about|for|with|using)\s+([a-z][a-z0-9\s-]{2,20})/i,
|
|
212
|
+
/([a-z][a-z0-9\s-]{2,15})\s+(?:feature|component|module|function|api)/i,
|
|
213
|
+
];
|
|
214
|
+
for (const pattern of patterns) {
|
|
215
|
+
const match = content.match(pattern);
|
|
216
|
+
if (match) {
|
|
217
|
+
return match[1].trim();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Extract bug description from messages
|
|
224
|
+
*/
|
|
225
|
+
function extractBugDescription(messages) {
|
|
226
|
+
for (const msg of messages) {
|
|
227
|
+
if (msg.type === 'user') {
|
|
228
|
+
const match = msg.content.match(/(?:fix|bug|error|issue)[:\s]+([^.!?\n]{5,40})/i);
|
|
229
|
+
if (match) {
|
|
230
|
+
return match[1].trim();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Clean and format a title
|
|
238
|
+
*/
|
|
239
|
+
export function cleanTitle(raw) {
|
|
240
|
+
let title = raw;
|
|
241
|
+
for (const pattern of PREFIX_REMOVALS) {
|
|
242
|
+
title = title.replace(pattern, '');
|
|
243
|
+
}
|
|
244
|
+
title = title.replace(/[*_`#]/g, '');
|
|
245
|
+
title = title.replace(/\s+/g, ' ').trim();
|
|
246
|
+
if (title.length > 60) {
|
|
247
|
+
title = title.slice(0, 57) + '...';
|
|
248
|
+
}
|
|
249
|
+
title = title.charAt(0).toUpperCase() + title.slice(1);
|
|
250
|
+
return title;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Capitalize first letter of string
|
|
254
|
+
*/
|
|
255
|
+
function capitalize(str) {
|
|
256
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=titles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"titles.js","sourceRoot":"","sources":["../../src/parser/titles.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
export interface ClaudeMessage {
|
|
2
|
+
type: 'user' | 'assistant' | 'system';
|
|
3
|
+
parentUuid?: string | null;
|
|
4
|
+
uuid: string;
|
|
5
|
+
sessionId: string;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
cwd?: string;
|
|
8
|
+
gitBranch?: string;
|
|
9
|
+
version?: string;
|
|
10
|
+
isSidechain?: boolean;
|
|
11
|
+
isMeta?: boolean;
|
|
12
|
+
message: {
|
|
13
|
+
role: string;
|
|
14
|
+
content: string | MessageContent[];
|
|
15
|
+
model?: string;
|
|
16
|
+
usage?: {
|
|
17
|
+
input_tokens?: number;
|
|
18
|
+
output_tokens?: number;
|
|
19
|
+
cache_creation_input_tokens?: number;
|
|
20
|
+
cache_read_input_tokens?: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface MessageContent {
|
|
25
|
+
type: 'text' | 'thinking' | 'tool_use' | 'tool_result';
|
|
26
|
+
text?: string;
|
|
27
|
+
thinking?: string;
|
|
28
|
+
id?: string;
|
|
29
|
+
name?: string;
|
|
30
|
+
input?: Record<string, unknown>;
|
|
31
|
+
tool_use_id?: string;
|
|
32
|
+
content?: string | Array<{
|
|
33
|
+
type: string;
|
|
34
|
+
text: string;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
export interface SessionSummary {
|
|
38
|
+
type: 'summary';
|
|
39
|
+
summary: string;
|
|
40
|
+
leafUuid: string;
|
|
41
|
+
}
|
|
42
|
+
export interface FileHistorySnapshot {
|
|
43
|
+
type: 'file-history-snapshot';
|
|
44
|
+
messageId: string;
|
|
45
|
+
snapshot: {
|
|
46
|
+
messageId: string;
|
|
47
|
+
trackedFileBackups: Record<string, unknown>;
|
|
48
|
+
timestamp: string;
|
|
49
|
+
};
|
|
50
|
+
isSnapshotUpdate: boolean;
|
|
51
|
+
}
|
|
52
|
+
export type JsonlEntry = ClaudeMessage | SessionSummary | FileHistorySnapshot;
|
|
53
|
+
export interface ParsedSession {
|
|
54
|
+
id: string;
|
|
55
|
+
projectPath: string;
|
|
56
|
+
projectName: string;
|
|
57
|
+
summary: string | null;
|
|
58
|
+
generatedTitle: string | null;
|
|
59
|
+
titleSource: TitleSource | null;
|
|
60
|
+
sessionCharacter: SessionCharacter | null;
|
|
61
|
+
startedAt: Date;
|
|
62
|
+
endedAt: Date;
|
|
63
|
+
messageCount: number;
|
|
64
|
+
userMessageCount: number;
|
|
65
|
+
assistantMessageCount: number;
|
|
66
|
+
toolCallCount: number;
|
|
67
|
+
customTitle?: string;
|
|
68
|
+
gitBranch: string | null;
|
|
69
|
+
claudeVersion: string | null;
|
|
70
|
+
usage?: SessionUsage;
|
|
71
|
+
messages: ParsedMessage[];
|
|
72
|
+
}
|
|
73
|
+
export interface ParsedMessage {
|
|
74
|
+
id: string;
|
|
75
|
+
sessionId: string;
|
|
76
|
+
type: 'user' | 'assistant' | 'system';
|
|
77
|
+
content: string;
|
|
78
|
+
thinking: string | null;
|
|
79
|
+
toolCalls: ToolCall[];
|
|
80
|
+
toolResults: ToolResult[];
|
|
81
|
+
usage: MessageUsage | null;
|
|
82
|
+
timestamp: Date;
|
|
83
|
+
parentId: string | null;
|
|
84
|
+
}
|
|
85
|
+
export interface SessionUsage {
|
|
86
|
+
totalInputTokens: number;
|
|
87
|
+
totalOutputTokens: number;
|
|
88
|
+
cacheCreationTokens: number;
|
|
89
|
+
cacheReadTokens: number;
|
|
90
|
+
estimatedCostUsd: number;
|
|
91
|
+
modelsUsed: string[];
|
|
92
|
+
primaryModel: string;
|
|
93
|
+
usageSource: 'jsonl';
|
|
94
|
+
}
|
|
95
|
+
export type SessionCharacter = 'deep_focus' | 'bug_hunt' | 'feature_build' | 'exploration' | 'refactor' | 'learning' | 'quick_task';
|
|
96
|
+
export type TitleSource = 'claude' | 'user_message' | 'insight' | 'character' | 'fallback';
|
|
97
|
+
export interface TitleCandidate {
|
|
98
|
+
text: string;
|
|
99
|
+
source: TitleSource;
|
|
100
|
+
score: number;
|
|
101
|
+
}
|
|
102
|
+
export interface GeneratedTitle {
|
|
103
|
+
title: string;
|
|
104
|
+
source: TitleSource;
|
|
105
|
+
character: SessionCharacter | null;
|
|
106
|
+
}
|
|
107
|
+
export interface ParsedInsightContent {
|
|
108
|
+
title: string;
|
|
109
|
+
summary: string;
|
|
110
|
+
bullets: string[];
|
|
111
|
+
rawContent: string;
|
|
112
|
+
}
|
|
113
|
+
export interface ToolCall {
|
|
114
|
+
id: string;
|
|
115
|
+
name: string;
|
|
116
|
+
input: Record<string, unknown>;
|
|
117
|
+
}
|
|
118
|
+
export interface ToolResult {
|
|
119
|
+
toolUseId: string;
|
|
120
|
+
output: string;
|
|
121
|
+
}
|
|
122
|
+
export interface MessageUsage {
|
|
123
|
+
inputTokens: number;
|
|
124
|
+
outputTokens: number;
|
|
125
|
+
cacheCreationTokens: number;
|
|
126
|
+
cacheReadTokens: number;
|
|
127
|
+
model: string;
|
|
128
|
+
estimatedCostUsd: number;
|
|
129
|
+
}
|
|
130
|
+
export type InsightType = 'summary' | 'decision' | 'learning' | 'technique' | 'prompt_quality';
|
|
131
|
+
export type InsightScope = 'session' | 'project' | 'overall';
|
|
132
|
+
export interface Insight {
|
|
133
|
+
id: string;
|
|
134
|
+
sessionId: string;
|
|
135
|
+
projectId: string;
|
|
136
|
+
projectName: string;
|
|
137
|
+
type: InsightType;
|
|
138
|
+
title: string;
|
|
139
|
+
content: string;
|
|
140
|
+
summary: string;
|
|
141
|
+
bullets: string[];
|
|
142
|
+
confidence: number;
|
|
143
|
+
source: 'llm';
|
|
144
|
+
metadata: InsightMetadata;
|
|
145
|
+
timestamp: Date;
|
|
146
|
+
createdAt?: Date;
|
|
147
|
+
scope: InsightScope;
|
|
148
|
+
analysisVersion: string;
|
|
149
|
+
}
|
|
150
|
+
export interface InsightMetadata {
|
|
151
|
+
alternatives?: string[];
|
|
152
|
+
reasoning?: string;
|
|
153
|
+
context?: string;
|
|
154
|
+
applicability?: string;
|
|
155
|
+
}
|
|
156
|
+
export interface ClaudeInsightConfig {
|
|
157
|
+
firebase: {
|
|
158
|
+
projectId: string;
|
|
159
|
+
clientEmail: string;
|
|
160
|
+
privateKey: string;
|
|
161
|
+
};
|
|
162
|
+
webConfig?: FirebaseWebConfig;
|
|
163
|
+
sync: {
|
|
164
|
+
claudeDir: string;
|
|
165
|
+
excludeProjects: string[];
|
|
166
|
+
};
|
|
167
|
+
dashboardUrl?: string;
|
|
168
|
+
}
|
|
169
|
+
export interface SyncState {
|
|
170
|
+
lastSync: string;
|
|
171
|
+
files: Record<string, FileSyncState>;
|
|
172
|
+
}
|
|
173
|
+
export interface FileSyncState {
|
|
174
|
+
lastModified: string;
|
|
175
|
+
lastSyncedLine: number;
|
|
176
|
+
sessionId: string;
|
|
177
|
+
}
|
|
178
|
+
export interface Project {
|
|
179
|
+
id: string;
|
|
180
|
+
name: string;
|
|
181
|
+
path: string;
|
|
182
|
+
sessionCount: number;
|
|
183
|
+
lastActivity: Date;
|
|
184
|
+
createdAt: Date;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Firebase Service Account JSON file structure
|
|
188
|
+
* Downloaded from Firebase Console > Project Settings > Service Accounts
|
|
189
|
+
*/
|
|
190
|
+
export interface FirebaseServiceAccountJson {
|
|
191
|
+
type: 'service_account';
|
|
192
|
+
project_id: string;
|
|
193
|
+
private_key_id: string;
|
|
194
|
+
private_key: string;
|
|
195
|
+
client_email: string;
|
|
196
|
+
client_id: string;
|
|
197
|
+
auth_uri: string;
|
|
198
|
+
token_uri: string;
|
|
199
|
+
auth_provider_x509_cert_url: string;
|
|
200
|
+
client_x509_cert_url: string;
|
|
201
|
+
universe_domain?: string;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Firebase Web SDK config
|
|
205
|
+
* Found in Firebase Console > Project Settings > General > Your Apps > Web App
|
|
206
|
+
*/
|
|
207
|
+
export interface FirebaseWebConfig {
|
|
208
|
+
apiKey: string;
|
|
209
|
+
authDomain: string;
|
|
210
|
+
projectId: string;
|
|
211
|
+
storageBucket: string;
|
|
212
|
+
messagingSenderId: string;
|
|
213
|
+
appId: string;
|
|
214
|
+
measurementId?: string;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+BAA+B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ClaudeInsightConfig, SyncState, FirebaseWebConfig } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ensure config directory exists
|
|
4
|
+
*/
|
|
5
|
+
export declare function ensureConfigDir(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Load configuration from file
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadConfig(): ClaudeInsightConfig | null;
|
|
10
|
+
/**
|
|
11
|
+
* Save configuration to file
|
|
12
|
+
*/
|
|
13
|
+
export declare function saveConfig(config: ClaudeInsightConfig): void;
|
|
14
|
+
/**
|
|
15
|
+
* Load sync state
|
|
16
|
+
*/
|
|
17
|
+
export declare function loadSyncState(): SyncState;
|
|
18
|
+
/**
|
|
19
|
+
* Save sync state
|
|
20
|
+
*/
|
|
21
|
+
export declare function saveSyncState(state: SyncState): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get default Claude directory
|
|
24
|
+
*/
|
|
25
|
+
export declare function getClaudeDir(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Check if config exists
|
|
28
|
+
*/
|
|
29
|
+
export declare function isConfigured(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get config directory path
|
|
32
|
+
*/
|
|
33
|
+
export declare function getConfigDir(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Load web config from file
|
|
36
|
+
*/
|
|
37
|
+
export declare function loadWebConfig(): Record<string, unknown> | null;
|
|
38
|
+
/**
|
|
39
|
+
* Save web config to file
|
|
40
|
+
*/
|
|
41
|
+
export declare function saveWebConfig(config: FirebaseWebConfig): void;
|
|
42
|
+
/**
|
|
43
|
+
* Check if web config exists
|
|
44
|
+
*/
|
|
45
|
+
export declare function hasWebConfig(): boolean;
|
|
46
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOrF;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,mBAAmB,GAAG,IAAI,CAUvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAG5D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAUzC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAGpD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAG7D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
const CONFIG_DIR = path.join(os.homedir(), '.code-insights');
|
|
5
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
6
|
+
const SYNC_STATE_FILE = path.join(CONFIG_DIR, 'sync-state.json');
|
|
7
|
+
const WEB_CONFIG_FILE = path.join(CONFIG_DIR, 'web-config.json');
|
|
8
|
+
/**
|
|
9
|
+
* Ensure config directory exists
|
|
10
|
+
*/
|
|
11
|
+
export function ensureConfigDir() {
|
|
12
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
13
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Load configuration from file
|
|
18
|
+
*/
|
|
19
|
+
export function loadConfig() {
|
|
20
|
+
try {
|
|
21
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const content = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
25
|
+
return JSON.parse(content);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Save configuration to file
|
|
33
|
+
*/
|
|
34
|
+
export function saveConfig(config) {
|
|
35
|
+
ensureConfigDir();
|
|
36
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Load sync state
|
|
40
|
+
*/
|
|
41
|
+
export function loadSyncState() {
|
|
42
|
+
try {
|
|
43
|
+
if (!fs.existsSync(SYNC_STATE_FILE)) {
|
|
44
|
+
return { lastSync: '', files: {} };
|
|
45
|
+
}
|
|
46
|
+
const content = fs.readFileSync(SYNC_STATE_FILE, 'utf-8');
|
|
47
|
+
return JSON.parse(content);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return { lastSync: '', files: {} };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Save sync state
|
|
55
|
+
*/
|
|
56
|
+
export function saveSyncState(state) {
|
|
57
|
+
ensureConfigDir();
|
|
58
|
+
fs.writeFileSync(SYNC_STATE_FILE, JSON.stringify(state, null, 2));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get default Claude directory
|
|
62
|
+
*/
|
|
63
|
+
export function getClaudeDir() {
|
|
64
|
+
return path.join(os.homedir(), '.claude', 'projects');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if config exists
|
|
68
|
+
*/
|
|
69
|
+
export function isConfigured() {
|
|
70
|
+
return fs.existsSync(CONFIG_FILE);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get config directory path
|
|
74
|
+
*/
|
|
75
|
+
export function getConfigDir() {
|
|
76
|
+
return CONFIG_DIR;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Load web config from file
|
|
80
|
+
*/
|
|
81
|
+
export function loadWebConfig() {
|
|
82
|
+
try {
|
|
83
|
+
if (!fs.existsSync(WEB_CONFIG_FILE)) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const content = fs.readFileSync(WEB_CONFIG_FILE, 'utf-8');
|
|
87
|
+
return JSON.parse(content);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Save web config to file
|
|
95
|
+
*/
|
|
96
|
+
export function saveWebConfig(config) {
|
|
97
|
+
ensureConfigDir();
|
|
98
|
+
fs.writeFileSync(WEB_CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if web config exists
|
|
102
|
+
*/
|
|
103
|
+
export function hasWebConfig() {
|
|
104
|
+
return fs.existsSync(WEB_CONFIG_FILE);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|