@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.
- package/CHANGELOG.md +12 -0
- package/dashboard-dist/index.html +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
- package/dashboard-dist/assets/index-CuCBzQyQ.js +0 -548
- package/dashboard-dist/dist/assets/index-BMhL7wL8.css +0 -1
- package/dashboard-dist/dist/assets/index-CuCBzQyQ.js +0 -548
- package/dashboard-dist/dist/favicon.svg +0 -4
- package/dashboard-dist/dist/index.html +0 -33
- package/dist/commands/connect.d.ts +0 -5
- package/dist/commands/connect.d.ts.map +0 -1
- package/dist/commands/connect.js +0 -39
- package/dist/commands/connect.js.map +0 -1
- package/dist/commands/insights.d.ts +0 -13
- package/dist/commands/insights.d.ts.map +0 -1
- package/dist/commands/insights.js +0 -87
- package/dist/commands/insights.js.map +0 -1
- package/dist/commands/link.d.ts +0 -8
- package/dist/commands/link.d.ts.map +0 -1
- package/dist/commands/link.js +0 -39
- package/dist/commands/link.js.map +0 -1
- package/dist/commands/stats/data/cache.d.ts +0 -29
- package/dist/commands/stats/data/cache.d.ts.map +0 -1
- package/dist/commands/stats/data/cache.js +0 -197
- package/dist/commands/stats/data/cache.js.map +0 -1
- package/dist/commands/stats/data/firestore.d.ts +0 -13
- package/dist/commands/stats/data/firestore.d.ts.map +0 -1
- package/dist/commands/stats/data/firestore.js +0 -170
- package/dist/commands/stats/data/firestore.js.map +0 -1
- package/dist/firebase/client.d.ts +0 -45
- package/dist/firebase/client.d.ts.map +0 -1
- package/dist/firebase/client.js +0 -344
- package/dist/firebase/client.js.map +0 -1
- package/dist/parser/insights.d.ts +0 -7
- package/dist/parser/insights.d.ts.map +0 -1
- package/dist/parser/insights.js +0 -271
- package/dist/parser/insights.js.map +0 -1
- package/dist/utils/firebase-json.d.ts +0 -87
- package/dist/utils/firebase-json.d.ts.map +0 -1
- package/dist/utils/firebase-json.js +0 -207
- package/dist/utils/firebase-json.js.map +0 -1
- package/server-dist/dist/index.d.ts +0 -12
- package/server-dist/dist/index.d.ts.map +0 -1
- package/server-dist/dist/index.js +0 -92
- package/server-dist/dist/index.js.map +0 -1
- package/server-dist/dist/llm/analysis.d.ts +0 -80
- package/server-dist/dist/llm/analysis.d.ts.map +0 -1
- package/server-dist/dist/llm/analysis.js +0 -509
- package/server-dist/dist/llm/analysis.js.map +0 -1
- package/server-dist/dist/llm/client.d.ts +0 -27
- package/server-dist/dist/llm/client.d.ts.map +0 -1
- package/server-dist/dist/llm/client.js +0 -71
- package/server-dist/dist/llm/client.js.map +0 -1
- package/server-dist/dist/llm/index.d.ts +0 -7
- package/server-dist/dist/llm/index.d.ts.map +0 -1
- package/server-dist/dist/llm/index.js +0 -5
- package/server-dist/dist/llm/index.js.map +0 -1
- package/server-dist/dist/llm/prompts.d.ts +0 -73
- package/server-dist/dist/llm/prompts.d.ts.map +0 -1
- package/server-dist/dist/llm/prompts.js +0 -242
- package/server-dist/dist/llm/prompts.js.map +0 -1
- package/server-dist/dist/llm/providers/anthropic.d.ts +0 -3
- package/server-dist/dist/llm/providers/anthropic.d.ts.map +0 -1
- package/server-dist/dist/llm/providers/anthropic.js +0 -45
- package/server-dist/dist/llm/providers/anthropic.js.map +0 -1
- package/server-dist/dist/llm/providers/gemini.d.ts +0 -3
- package/server-dist/dist/llm/providers/gemini.d.ts.map +0 -1
- package/server-dist/dist/llm/providers/gemini.js +0 -51
- package/server-dist/dist/llm/providers/gemini.js.map +0 -1
- package/server-dist/dist/llm/providers/ollama.d.ts +0 -12
- package/server-dist/dist/llm/providers/ollama.d.ts.map +0 -1
- package/server-dist/dist/llm/providers/ollama.js +0 -61
- package/server-dist/dist/llm/providers/ollama.js.map +0 -1
- package/server-dist/dist/llm/providers/openai.d.ts +0 -3
- package/server-dist/dist/llm/providers/openai.d.ts.map +0 -1
- package/server-dist/dist/llm/providers/openai.js +0 -39
- package/server-dist/dist/llm/providers/openai.js.map +0 -1
- package/server-dist/dist/llm/types.d.ts +0 -22
- package/server-dist/dist/llm/types.d.ts.map +0 -1
- package/server-dist/dist/llm/types.js +0 -5
- package/server-dist/dist/llm/types.js.map +0 -1
- package/server-dist/dist/routes/analysis.d.ts +0 -4
- package/server-dist/dist/routes/analysis.d.ts.map +0 -1
- package/server-dist/dist/routes/analysis.js +0 -103
- package/server-dist/dist/routes/analysis.js.map +0 -1
- package/server-dist/dist/routes/analytics.d.ts +0 -4
- package/server-dist/dist/routes/analytics.d.ts.map +0 -1
- package/server-dist/dist/routes/analytics.js +0 -47
- package/server-dist/dist/routes/analytics.js.map +0 -1
- package/server-dist/dist/routes/config.d.ts +0 -4
- package/server-dist/dist/routes/config.d.ts.map +0 -1
- package/server-dist/dist/routes/config.js +0 -108
- package/server-dist/dist/routes/config.js.map +0 -1
- package/server-dist/dist/routes/export.d.ts +0 -4
- package/server-dist/dist/routes/export.d.ts.map +0 -1
- package/server-dist/dist/routes/export.js +0 -52
- package/server-dist/dist/routes/export.js.map +0 -1
- package/server-dist/dist/routes/insights.d.ts +0 -4
- package/server-dist/dist/routes/insights.d.ts.map +0 -1
- package/server-dist/dist/routes/insights.js +0 -80
- package/server-dist/dist/routes/insights.js.map +0 -1
- package/server-dist/dist/routes/messages.d.ts +0 -4
- package/server-dist/dist/routes/messages.d.ts.map +0 -1
- package/server-dist/dist/routes/messages.js +0 -19
- package/server-dist/dist/routes/messages.js.map +0 -1
- package/server-dist/dist/routes/projects.d.ts +0 -4
- package/server-dist/dist/routes/projects.d.ts.map +0 -1
- package/server-dist/dist/routes/projects.js +0 -32
- package/server-dist/dist/routes/projects.js.map +0 -1
- package/server-dist/dist/routes/sessions.d.ts +0 -4
- package/server-dist/dist/routes/sessions.d.ts.map +0 -1
- package/server-dist/dist/routes/sessions.js +0 -65
- package/server-dist/dist/routes/sessions.js.map +0 -1
- package/server-dist/dist/utils.d.ts +0 -6
- package/server-dist/dist/utils.d.ts.map +0 -1
- package/server-dist/dist/utils.js +0 -9
- package/server-dist/dist/utils.js.map +0 -1
- /package/dashboard-dist/{dist/assets → assets}/index-CUWKxcRo.js +0 -0
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none">
|
|
2
|
-
<rect width="32" height="32" rx="6" fill="#18181b"/>
|
|
3
|
-
<path d="M8 22 L12 14 L16 18 L20 10 L24 22" stroke="#a1a1aa" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
4
|
-
</svg>
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Code Insights</title>
|
|
7
|
-
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
8
|
-
<!-- FOUC prevention: apply theme class before React renders to avoid flash.
|
|
9
|
-
Wrapped in try/catch so it silently degrades to light mode in
|
|
10
|
-
restricted environments where localStorage access is blocked. -->
|
|
11
|
-
<script>
|
|
12
|
-
(function () {
|
|
13
|
-
try {
|
|
14
|
-
var stored = localStorage.getItem('code-insights-theme');
|
|
15
|
-
var isDark = stored === 'dark';
|
|
16
|
-
var isSystem = !stored || stored === 'system' || (stored !== 'light' && stored !== 'dark');
|
|
17
|
-
var resolved = isDark || (isSystem && window.matchMedia('(prefers-color-scheme: dark)').matches)
|
|
18
|
-
? 'dark'
|
|
19
|
-
: 'light';
|
|
20
|
-
} catch (e) {
|
|
21
|
-
var resolved = 'light';
|
|
22
|
-
}
|
|
23
|
-
document.documentElement.classList.remove('light', 'dark');
|
|
24
|
-
document.documentElement.classList.add(resolved);
|
|
25
|
-
})();
|
|
26
|
-
</script>
|
|
27
|
-
<script type="module" crossorigin src="/assets/index-CUWKxcRo.js"></script>
|
|
28
|
-
<link rel="stylesheet" crossorigin href="/assets/index-BMhL7wL8.css">
|
|
29
|
-
</head>
|
|
30
|
-
<body>
|
|
31
|
-
<div id="root"></div>
|
|
32
|
-
</body>
|
|
33
|
-
</html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCpD"}
|
package/dist/commands/connect.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { isConfigured, loadWebConfig, hasWebConfig } from '../utils/config.js';
|
|
3
|
-
import { trackEvent } from '../utils/telemetry.js';
|
|
4
|
-
import { generateDashboardUrl, validateWebConfig } from '../utils/firebase-json.js';
|
|
5
|
-
/**
|
|
6
|
-
* Generate and display the dashboard connection URL
|
|
7
|
-
*/
|
|
8
|
-
export async function connectCommand() {
|
|
9
|
-
if (!isConfigured()) {
|
|
10
|
-
console.log(chalk.red('\n❌ Code Insights is not configured.'));
|
|
11
|
-
console.log(chalk.gray('The connect command requires Firebase setup.\n'));
|
|
12
|
-
console.log(chalk.white(' To set up Firebase:'));
|
|
13
|
-
console.log(chalk.gray(' code-insights init\n'));
|
|
14
|
-
console.log(chalk.white(' For local-only analytics (no setup needed):'));
|
|
15
|
-
console.log(chalk.gray(' code-insights stats\n'));
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
if (!hasWebConfig()) {
|
|
19
|
-
console.log(chalk.yellow('\n⚠ No web config found.'));
|
|
20
|
-
console.log(chalk.gray('\nRe-run "code-insights init" to add your web config.'));
|
|
21
|
-
console.log(chalk.gray('Or visit the dashboard and configure Firebase manually:'));
|
|
22
|
-
console.log(chalk.white(' https://code-insights.app\n'));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const webConfigData = loadWebConfig();
|
|
26
|
-
if (!webConfigData || !validateWebConfig(webConfigData)) {
|
|
27
|
-
console.log(chalk.red('\n❌ Invalid web config stored.'));
|
|
28
|
-
console.log(chalk.gray('Run "code-insights init" to reconfigure.\n'));
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const webConfig = webConfigData;
|
|
32
|
-
const url = generateDashboardUrl(webConfig);
|
|
33
|
-
console.log(chalk.cyan('\n🔗 Dashboard Connection URL\n'));
|
|
34
|
-
console.log(chalk.white('Open this URL to connect the dashboard to your Firebase:'));
|
|
35
|
-
console.log(chalk.bold.underline(url));
|
|
36
|
-
console.log('');
|
|
37
|
-
trackEvent('connect', true);
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=connect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,aAAa,EAAE,CAAC;IACtC,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,aAAkC,CAAC;IACrD,MAAM,GAAG,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { InsightType } from '../types.js';
|
|
2
|
-
interface InsightsOptions {
|
|
3
|
-
type?: InsightType;
|
|
4
|
-
project?: string;
|
|
5
|
-
today?: boolean;
|
|
6
|
-
limit?: number;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Display recent insights from Firestore
|
|
10
|
-
*/
|
|
11
|
-
export declare function insightsCommand(options?: InsightsOptions): Promise<void>;
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=insights.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ElF"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { format } from 'date-fns';
|
|
3
|
-
import { loadConfig, isConfigured } from '../utils/config.js';
|
|
4
|
-
import { initializeFirebase, getRecentInsights } from '../firebase/client.js';
|
|
5
|
-
/**
|
|
6
|
-
* Display recent insights from Firestore
|
|
7
|
-
*/
|
|
8
|
-
export async function insightsCommand(options = {}) {
|
|
9
|
-
// Check if configured
|
|
10
|
-
if (!isConfigured()) {
|
|
11
|
-
console.log(chalk.red('Not configured. Run `claudeinsight init` first.'));
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
// Load config and initialize Firebase
|
|
15
|
-
const config = loadConfig();
|
|
16
|
-
if (!config) {
|
|
17
|
-
console.log(chalk.red('Configuration error.'));
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
initializeFirebase(config);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
console.log(chalk.red('Failed to connect to Firebase.'));
|
|
25
|
-
console.error(error instanceof Error ? error.message : 'Unknown error');
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
const limit = options.limit || 20;
|
|
29
|
-
// Fetch insights
|
|
30
|
-
const insights = await getRecentInsights(limit, {
|
|
31
|
-
type: options.type,
|
|
32
|
-
project: options.project,
|
|
33
|
-
todayOnly: options.today,
|
|
34
|
-
});
|
|
35
|
-
if (insights.length === 0) {
|
|
36
|
-
console.log(chalk.yellow('\nNo insights found.'));
|
|
37
|
-
if (options.today) {
|
|
38
|
-
console.log(chalk.gray('Try running without --today to see older insights.'));
|
|
39
|
-
}
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
console.log(chalk.cyan(`\n📊 Recent Insights (${insights.length})\n`));
|
|
43
|
-
// Group by type
|
|
44
|
-
const summaries = insights.filter((i) => i.type === 'summary');
|
|
45
|
-
const decisions = insights.filter((i) => i.type === 'decision');
|
|
46
|
-
const learnings = insights.filter((i) => i.type === 'learning');
|
|
47
|
-
const techniques = insights.filter((i) => i.type === 'technique');
|
|
48
|
-
if (summaries.length > 0) {
|
|
49
|
-
console.log(chalk.bold.magenta('📝 Summaries'));
|
|
50
|
-
for (const insight of summaries) {
|
|
51
|
-
printInsight(insight);
|
|
52
|
-
}
|
|
53
|
-
console.log();
|
|
54
|
-
}
|
|
55
|
-
if (decisions.length > 0) {
|
|
56
|
-
console.log(chalk.bold.blue('🎯 Decisions'));
|
|
57
|
-
for (const insight of decisions) {
|
|
58
|
-
printInsight(insight);
|
|
59
|
-
}
|
|
60
|
-
console.log();
|
|
61
|
-
}
|
|
62
|
-
if (learnings.length > 0) {
|
|
63
|
-
console.log(chalk.bold.green('💡 Learnings'));
|
|
64
|
-
for (const insight of learnings) {
|
|
65
|
-
printInsight(insight);
|
|
66
|
-
}
|
|
67
|
-
console.log();
|
|
68
|
-
}
|
|
69
|
-
if (techniques.length > 0) {
|
|
70
|
-
console.log(chalk.bold.yellow('🔧 Techniques'));
|
|
71
|
-
for (const insight of techniques) {
|
|
72
|
-
printInsight(insight);
|
|
73
|
-
}
|
|
74
|
-
console.log();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function printInsight(insight) {
|
|
78
|
-
const date = insight.timestamp
|
|
79
|
-
? format(new Date(insight.timestamp), 'MMM d')
|
|
80
|
-
: 'Unknown';
|
|
81
|
-
console.log(chalk.white(` • ${insight.title}`));
|
|
82
|
-
console.log(chalk.gray(` ${insight.projectName} | ${date}`));
|
|
83
|
-
if (insight.content && insight.content.length < 100) {
|
|
84
|
-
console.log(chalk.gray(` ${insight.content}`));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=insights.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/link.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCrE"}
|
package/dist/commands/link.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import qrcode from 'qrcode-terminal';
|
|
3
|
-
import { isConfigured, loadWebConfig, hasWebConfig } from '../utils/config.js';
|
|
4
|
-
import { generateDashboardUrl, validateWebConfig } from '../utils/firebase-json.js';
|
|
5
|
-
/**
|
|
6
|
-
* Generate and display dashboard link
|
|
7
|
-
*/
|
|
8
|
-
export async function linkCommand(options) {
|
|
9
|
-
if (!isConfigured()) {
|
|
10
|
-
console.log(chalk.red('\n❌ Code Insights is not configured.'));
|
|
11
|
-
console.log(chalk.gray('Run "code-insights init" first.\n'));
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
if (!hasWebConfig()) {
|
|
15
|
-
console.log(chalk.yellow('\n⚠ No web config found.'));
|
|
16
|
-
console.log(chalk.gray('\nTo generate a dashboard link, add web config:'));
|
|
17
|
-
console.log(chalk.white(' code-insights init --web-config <path-to-config.json>\n'));
|
|
18
|
-
console.log(chalk.gray('Or visit the dashboard and configure Firebase manually:'));
|
|
19
|
-
console.log(chalk.white(' https://code-insights.app\n'));
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
const webConfigData = loadWebConfig();
|
|
23
|
-
if (!webConfigData || !validateWebConfig(webConfigData)) {
|
|
24
|
-
console.log(chalk.red('\n❌ Invalid web config stored.'));
|
|
25
|
-
console.log(chalk.gray('Run "code-insights init --web-config <path>" to reconfigure.\n'));
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
const webConfig = webConfigData;
|
|
29
|
-
const url = generateDashboardUrl(webConfig);
|
|
30
|
-
console.log(chalk.cyan('\n🔗 Dashboard Link\n'));
|
|
31
|
-
console.log(chalk.white('Open this URL to connect the dashboard:'));
|
|
32
|
-
console.log(chalk.bold.underline(url));
|
|
33
|
-
if (options.qr !== false) {
|
|
34
|
-
console.log(chalk.gray('\n📱 QR Code:\n'));
|
|
35
|
-
qrcode.generate(url, { small: true });
|
|
36
|
-
}
|
|
37
|
-
console.log('');
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=link.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAOpF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,aAAa,EAAE,CAAC;IACtC,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,aAAkC,CAAC;IACrD,MAAM,GAAG,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { ParsedSession } from '../../../types.js';
|
|
2
|
-
import type { SessionRow } from './types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Transform the CLI's ParsedSession into the stats SessionRow shape.
|
|
5
|
-
* Uses a module-level cache for projectId to avoid repeated git spawns.
|
|
6
|
-
*/
|
|
7
|
-
export declare function parsedSessionToRow(session: ParsedSession): SessionRow;
|
|
8
|
-
export declare class StatsCache {
|
|
9
|
-
private data;
|
|
10
|
-
private dirty;
|
|
11
|
-
constructor();
|
|
12
|
-
/**
|
|
13
|
-
* Refresh the cache by discovering and parsing sessions from all providers.
|
|
14
|
-
* Returns counts of new and total sessions.
|
|
15
|
-
*/
|
|
16
|
-
refresh(): Promise<{
|
|
17
|
-
newSessions: number;
|
|
18
|
-
totalSessions: number;
|
|
19
|
-
}>;
|
|
20
|
-
/**
|
|
21
|
-
* Return all cached session rows with dates properly deserialized.
|
|
22
|
-
* JSON serialization turns Date objects into ISO strings — reconstruct them.
|
|
23
|
-
*/
|
|
24
|
-
getAllRows(): SessionRow[];
|
|
25
|
-
private load;
|
|
26
|
-
private save;
|
|
27
|
-
private empty;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/cache.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA+C7C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAoCrE;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,KAAK,CAAU;;IAOvB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IA2ExE;;;OAGG;IACH,UAAU,IAAI,UAAU,EAAE;IAkB1B,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
// ──────────────────────────────────────────────────────
|
|
2
|
-
// Stats cache — disk-based parsed session store
|
|
3
|
-
//
|
|
4
|
-
// Stores pre-parsed SessionRow[] keyed by source file path
|
|
5
|
-
// with mtime-based invalidation. Lives at:
|
|
6
|
-
// ~/.code-insights/stats-cache.json
|
|
7
|
-
// ──────────────────────────────────────────────────────
|
|
8
|
-
import * as fs from 'fs';
|
|
9
|
-
import * as path from 'path';
|
|
10
|
-
import * as os from 'os';
|
|
11
|
-
import { generateStableProjectId } from '../../../utils/device.js';
|
|
12
|
-
import { ensureConfigDir } from '../../../utils/config.js';
|
|
13
|
-
import { splitVirtualPath } from '../../../utils/paths.js';
|
|
14
|
-
import { getAllProviders } from '../../../providers/registry.js';
|
|
15
|
-
// ──────────────────────────────────────────────────────
|
|
16
|
-
// Constants
|
|
17
|
-
// ──────────────────────────────────────────────────────
|
|
18
|
-
const CACHE_PATH = path.join(os.homedir(), '.code-insights', 'stats-cache.json');
|
|
19
|
-
// ──────────────────────────────────────────────────────
|
|
20
|
-
// Module-level projectId cache — avoids repeated git
|
|
21
|
-
// process spawns for the same project path
|
|
22
|
-
// ──────────────────────────────────────────────────────
|
|
23
|
-
const projectIdCache = new Map();
|
|
24
|
-
function getCachedProjectId(projectPath) {
|
|
25
|
-
const existing = projectIdCache.get(projectPath);
|
|
26
|
-
if (existing)
|
|
27
|
-
return existing;
|
|
28
|
-
const { projectId } = generateStableProjectId(projectPath);
|
|
29
|
-
projectIdCache.set(projectPath, projectId);
|
|
30
|
-
return projectId;
|
|
31
|
-
}
|
|
32
|
-
// ──────────────────────────────────────────────────────
|
|
33
|
-
// Exported helpers
|
|
34
|
-
// ──────────────────────────────────────────────────────
|
|
35
|
-
/**
|
|
36
|
-
* Transform the CLI's ParsedSession into the stats SessionRow shape.
|
|
37
|
-
* Uses a module-level cache for projectId to avoid repeated git spawns.
|
|
38
|
-
*/
|
|
39
|
-
export function parsedSessionToRow(session) {
|
|
40
|
-
const projectId = getCachedProjectId(session.projectPath);
|
|
41
|
-
return {
|
|
42
|
-
// identity
|
|
43
|
-
id: session.id,
|
|
44
|
-
projectId,
|
|
45
|
-
projectName: session.projectName,
|
|
46
|
-
// timing
|
|
47
|
-
startedAt: session.startedAt,
|
|
48
|
-
endedAt: session.endedAt,
|
|
49
|
-
// counts
|
|
50
|
-
messageCount: session.messageCount,
|
|
51
|
-
userMessageCount: session.userMessageCount,
|
|
52
|
-
assistantMessageCount: session.assistantMessageCount,
|
|
53
|
-
toolCallCount: session.toolCallCount,
|
|
54
|
-
// cost / usage (optional)
|
|
55
|
-
estimatedCostUsd: session.usage?.estimatedCostUsd,
|
|
56
|
-
totalInputTokens: session.usage?.totalInputTokens,
|
|
57
|
-
totalOutputTokens: session.usage?.totalOutputTokens,
|
|
58
|
-
cacheCreationTokens: session.usage?.cacheCreationTokens,
|
|
59
|
-
cacheReadTokens: session.usage?.cacheReadTokens,
|
|
60
|
-
// metadata
|
|
61
|
-
primaryModel: session.usage?.primaryModel,
|
|
62
|
-
modelsUsed: session.usage?.modelsUsed,
|
|
63
|
-
generatedTitle: session.generatedTitle ?? undefined,
|
|
64
|
-
customTitle: session.customTitle,
|
|
65
|
-
summary: session.summary ?? undefined,
|
|
66
|
-
sessionCharacter: session.sessionCharacter ?? undefined,
|
|
67
|
-
sourceTool: session.sourceTool,
|
|
68
|
-
usageSource: session.usage?.usageSource,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
// ──────────────────────────────────────────────────────
|
|
72
|
-
// StatsCache class
|
|
73
|
-
// ──────────────────────────────────────────────────────
|
|
74
|
-
export class StatsCache {
|
|
75
|
-
data;
|
|
76
|
-
dirty;
|
|
77
|
-
constructor() {
|
|
78
|
-
this.dirty = false;
|
|
79
|
-
this.data = this.load();
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Refresh the cache by discovering and parsing sessions from all providers.
|
|
83
|
-
* Returns counts of new and total sessions.
|
|
84
|
-
*/
|
|
85
|
-
async refresh() {
|
|
86
|
-
const providers = getAllProviders();
|
|
87
|
-
let newSessions = 0;
|
|
88
|
-
// Collect all discovered file paths (keyed by provider name for metadata)
|
|
89
|
-
const allDiscoveredPaths = new Set();
|
|
90
|
-
for (const provider of providers) {
|
|
91
|
-
const providerName = provider.getProviderName();
|
|
92
|
-
let filePaths;
|
|
93
|
-
try {
|
|
94
|
-
filePaths = await provider.discover();
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
// If discovery fails for a provider, skip it
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
for (const filePath of filePaths) {
|
|
101
|
-
allDiscoveredPaths.add(filePath);
|
|
102
|
-
// Check mtime for cache invalidation
|
|
103
|
-
const { realPath } = splitVirtualPath(filePath);
|
|
104
|
-
let currentMtime;
|
|
105
|
-
try {
|
|
106
|
-
currentMtime = fs.statSync(realPath).mtime.toISOString();
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
// File no longer accessible, skip
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
const cached = this.data.entries[filePath];
|
|
113
|
-
if (cached && cached.lastModified === currentMtime) {
|
|
114
|
-
// Cache hit — mtime unchanged
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
// Cache miss — parse the file
|
|
118
|
-
let session;
|
|
119
|
-
try {
|
|
120
|
-
session = await provider.parse(filePath);
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// Parse error — skip this file
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
if (!session)
|
|
127
|
-
continue;
|
|
128
|
-
const row = parsedSessionToRow(session);
|
|
129
|
-
this.data.entries[filePath] = {
|
|
130
|
-
lastModified: currentMtime,
|
|
131
|
-
provider: providerName,
|
|
132
|
-
rows: [row],
|
|
133
|
-
};
|
|
134
|
-
this.dirty = true;
|
|
135
|
-
newSessions++;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
// Prune entries for file paths that no longer exist in any provider's discovery
|
|
139
|
-
for (const cachedPath of Object.keys(this.data.entries)) {
|
|
140
|
-
if (!allDiscoveredPaths.has(cachedPath)) {
|
|
141
|
-
delete this.data.entries[cachedPath];
|
|
142
|
-
this.dirty = true;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// Persist if anything changed
|
|
146
|
-
if (this.dirty) {
|
|
147
|
-
this.data.lastRefresh = new Date().toISOString();
|
|
148
|
-
this.save();
|
|
149
|
-
}
|
|
150
|
-
return { newSessions, totalSessions: this.getAllRows().length };
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Return all cached session rows with dates properly deserialized.
|
|
154
|
-
* JSON serialization turns Date objects into ISO strings — reconstruct them.
|
|
155
|
-
*/
|
|
156
|
-
getAllRows() {
|
|
157
|
-
const rows = [];
|
|
158
|
-
for (const entry of Object.values(this.data.entries)) {
|
|
159
|
-
for (const row of entry.rows) {
|
|
160
|
-
rows.push({
|
|
161
|
-
...row,
|
|
162
|
-
startedAt: new Date(row.startedAt),
|
|
163
|
-
endedAt: new Date(row.endedAt),
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return rows;
|
|
168
|
-
}
|
|
169
|
-
// ──────────────────────────────────────────────────────
|
|
170
|
-
// Private methods
|
|
171
|
-
// ──────────────────────────────────────────────────────
|
|
172
|
-
load() {
|
|
173
|
-
try {
|
|
174
|
-
if (!fs.existsSync(CACHE_PATH)) {
|
|
175
|
-
return this.empty();
|
|
176
|
-
}
|
|
177
|
-
const content = fs.readFileSync(CACHE_PATH, 'utf-8');
|
|
178
|
-
const parsed = JSON.parse(content);
|
|
179
|
-
if (parsed.version !== 1) {
|
|
180
|
-
return this.empty();
|
|
181
|
-
}
|
|
182
|
-
return parsed;
|
|
183
|
-
}
|
|
184
|
-
catch {
|
|
185
|
-
return this.empty();
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
save() {
|
|
189
|
-
ensureConfigDir();
|
|
190
|
-
fs.writeFileSync(CACHE_PATH, JSON.stringify(this.data, null, 2));
|
|
191
|
-
this.dirty = false;
|
|
192
|
-
}
|
|
193
|
-
empty() {
|
|
194
|
-
return { version: 1, lastRefresh: '', entries: {} };
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { ClaudeInsightConfig } from '../../../types.js';
|
|
2
|
-
import type { StatsDataSource, SessionRow, SessionQueryOptions, UsageStatsDoc, ProjectResolution, PrepareResult, StatsFlags } from './types.js';
|
|
3
|
-
export declare class FirestoreDataSource implements StatsDataSource {
|
|
4
|
-
private config;
|
|
5
|
-
readonly name = "firestore";
|
|
6
|
-
constructor(config: ClaudeInsightConfig);
|
|
7
|
-
prepare(flags: StatsFlags): Promise<PrepareResult>;
|
|
8
|
-
getSessions(opts: SessionQueryOptions): Promise<SessionRow[]>;
|
|
9
|
-
getUsageStats(): Promise<UsageStatsDoc | null>;
|
|
10
|
-
resolveProjectId(name: string): Promise<ProjectResolution>;
|
|
11
|
-
getLastSession(opts?: Pick<SessionQueryOptions, 'sourceTool' | 'projectId'>): Promise<SessionRow | null>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=firestore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/firestore.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAgEpB,qBAAa,mBAAoB,YAAW,eAAe;IAG7C,OAAO,CAAC,MAAM;IAF1B,QAAQ,CAAC,IAAI,eAAe;gBAER,MAAM,EAAE,mBAAmB;IAEzC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBlD,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiC7D,aAAa,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgB9C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqB1D,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CA8B/G"}
|