@code-insights/cli 1.2.0 → 2.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/CHANGELOG.md +26 -0
- package/README.md +101 -9
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +130 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +7 -1
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +52 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-hook.d.ts.map +1 -1
- package/dist/commands/install-hook.js +16 -3
- package/dist/commands/install-hook.js.map +1 -1
- package/dist/commands/open.d.ts +9 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +59 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +14 -1
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/stats/actions/cost.d.ts +3 -0
- package/dist/commands/stats/actions/cost.d.ts.map +1 -0
- package/dist/commands/stats/actions/cost.js +139 -0
- package/dist/commands/stats/actions/cost.js.map +1 -0
- package/dist/commands/stats/actions/error-handler.d.ts +6 -0
- package/dist/commands/stats/actions/error-handler.d.ts.map +1 -0
- package/dist/commands/stats/actions/error-handler.js +42 -0
- package/dist/commands/stats/actions/error-handler.js.map +1 -0
- package/dist/commands/stats/actions/models.d.ts +3 -0
- package/dist/commands/stats/actions/models.d.ts.map +1 -0
- package/dist/commands/stats/actions/models.js +101 -0
- package/dist/commands/stats/actions/models.js.map +1 -0
- package/dist/commands/stats/actions/overview.d.ts +3 -0
- package/dist/commands/stats/actions/overview.d.ts.map +1 -0
- package/dist/commands/stats/actions/overview.js +147 -0
- package/dist/commands/stats/actions/overview.js.map +1 -0
- package/dist/commands/stats/actions/projects.d.ts +3 -0
- package/dist/commands/stats/actions/projects.d.ts.map +1 -0
- package/dist/commands/stats/actions/projects.js +90 -0
- package/dist/commands/stats/actions/projects.js.map +1 -0
- package/dist/commands/stats/actions/today.d.ts +3 -0
- package/dist/commands/stats/actions/today.d.ts.map +1 -0
- package/dist/commands/stats/actions/today.js +118 -0
- package/dist/commands/stats/actions/today.js.map +1 -0
- package/dist/commands/stats/data/aggregation.d.ts +60 -0
- package/dist/commands/stats/data/aggregation.d.ts.map +1 -0
- package/dist/commands/stats/data/aggregation.js +614 -0
- package/dist/commands/stats/data/aggregation.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 +155 -0
- package/dist/commands/stats/data/firestore.js.map +1 -0
- package/dist/commands/stats/data/fuzzy-match.d.ts +5 -0
- package/dist/commands/stats/data/fuzzy-match.d.ts.map +1 -0
- package/dist/commands/stats/data/fuzzy-match.js +36 -0
- package/dist/commands/stats/data/fuzzy-match.js.map +1 -0
- package/dist/commands/stats/data/local.d.ts +12 -0
- package/dist/commands/stats/data/local.d.ts.map +1 -0
- package/dist/commands/stats/data/local.js +77 -0
- package/dist/commands/stats/data/local.js.map +1 -0
- package/dist/commands/stats/data/source.d.ts +13 -0
- package/dist/commands/stats/data/source.d.ts.map +1 -0
- package/dist/commands/stats/data/source.js +41 -0
- package/dist/commands/stats/data/source.js.map +1 -0
- package/dist/commands/stats/data/types.d.ts +229 -0
- package/dist/commands/stats/data/types.d.ts.map +1 -0
- package/dist/commands/stats/data/types.js +50 -0
- package/dist/commands/stats/data/types.js.map +1 -0
- package/dist/commands/stats/index.d.ts +3 -0
- package/dist/commands/stats/index.d.ts.map +1 -0
- package/dist/commands/stats/index.js +41 -0
- package/dist/commands/stats/index.js.map +1 -0
- package/dist/commands/stats/render/charts.d.ts +9 -0
- package/dist/commands/stats/render/charts.d.ts.map +1 -0
- package/dist/commands/stats/render/charts.js +45 -0
- package/dist/commands/stats/render/charts.js.map +1 -0
- package/dist/commands/stats/render/colors.d.ts +21 -0
- package/dist/commands/stats/render/colors.d.ts.map +1 -0
- package/dist/commands/stats/render/colors.js +47 -0
- package/dist/commands/stats/render/colors.js.map +1 -0
- package/dist/commands/stats/render/format.d.ts +10 -0
- package/dist/commands/stats/render/format.d.ts.map +1 -0
- package/dist/commands/stats/render/format.js +57 -0
- package/dist/commands/stats/render/format.js.map +1 -0
- package/dist/commands/stats/render/layout.d.ts +10 -0
- package/dist/commands/stats/render/layout.d.ts.map +1 -0
- package/dist/commands/stats/render/layout.js +48 -0
- package/dist/commands/stats/render/layout.js.map +1 -0
- package/dist/commands/stats/shared.d.ts +6 -0
- package/dist/commands/stats/shared.d.ts.map +1 -0
- package/dist/commands/stats/shared.js +26 -0
- package/dist/commands/stats/shared.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +50 -37
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +16 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +173 -80
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/telemetry.d.ts +3 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +106 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/firebase/client.d.ts +5 -0
- package/dist/firebase/client.d.ts.map +1 -1
- package/dist/firebase/client.js +5 -2
- package/dist/firebase/client.js.map +1 -1
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/parser/jsonl.js +3 -2
- package/dist/parser/jsonl.js.map +1 -1
- package/dist/providers/claude-code.d.ts.map +1 -1
- package/dist/providers/claude-code.js +5 -1
- package/dist/providers/claude-code.js.map +1 -1
- package/dist/providers/codex.d.ts +14 -0
- package/dist/providers/codex.d.ts.map +1 -0
- package/dist/providers/codex.js +364 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/copilot-cli.d.ts +14 -0
- package/dist/providers/copilot-cli.d.ts.map +1 -0
- package/dist/providers/copilot-cli.js +363 -0
- package/dist/providers/copilot-cli.js.map +1 -0
- package/dist/providers/cursor.d.ts +27 -0
- package/dist/providers/cursor.d.ts.map +1 -0
- package/dist/providers/cursor.js +356 -0
- package/dist/providers/cursor.js.map +1 -0
- package/dist/providers/registry.d.ts +0 -4
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +9 -6
- package/dist/providers/registry.js.map +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/config.d.ts +10 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +21 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +16 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/telemetry.d.ts +52 -0
- package/dist/utils/telemetry.d.ts.map +1 -0
- package/dist/utils/telemetry.js +304 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/dist/utils/tips.d.ts +11 -0
- package/dist/utils/tips.d.ts.map +1 -0
- package/dist/utils/tips.js +106 -0
- package/dist/utils/tips.js.map +1 -0
- package/dist/utils/welcome.d.ts +11 -0
- package/dist/utils/welcome.d.ts.map +1 -0
- package/dist/utils/welcome.js +101 -0
- package/dist/utils/welcome.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../src/commands/stats/render/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import type { StatsFlags } from './data/types.js';
|
|
3
|
+
export type { StatsFlags };
|
|
4
|
+
export declare function applySharedFlags(cmd: Command): Command;
|
|
5
|
+
export declare function parseFlags(options: Record<string, unknown>): StatsFlags;
|
|
6
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/stats/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK1D,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQtD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAavE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { InvalidPeriodError } from './data/types.js';
|
|
2
|
+
const VALID_PERIODS = ['7d', '30d', '90d', 'all'];
|
|
3
|
+
export function applySharedFlags(cmd) {
|
|
4
|
+
return cmd
|
|
5
|
+
.option('-p, --period <period>', 'Time range: 7d, 30d, 90d, all', '7d')
|
|
6
|
+
.option('--project <name>', 'Scope to a single project')
|
|
7
|
+
.option('--source <tool>', 'Filter by source tool (claude-code, cursor, etc.)')
|
|
8
|
+
.option('--no-sync', 'Skip auto-sync before displaying stats')
|
|
9
|
+
.option('--local', 'Use local session files (no Firebase required)')
|
|
10
|
+
.option('--remote', 'Force Firestore data source (requires Firebase config)');
|
|
11
|
+
}
|
|
12
|
+
export function parseFlags(options) {
|
|
13
|
+
const period = options.period || '7d';
|
|
14
|
+
if (!VALID_PERIODS.includes(period)) {
|
|
15
|
+
throw new InvalidPeriodError(`Invalid period "${period}". Expected: ${VALID_PERIODS.join(', ')}`);
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
period: period,
|
|
19
|
+
project: options.project,
|
|
20
|
+
source: options.source,
|
|
21
|
+
noSync: !options.sync, // Commander's --no-sync sets sync=false
|
|
22
|
+
local: !!options.local,
|
|
23
|
+
remote: !!options.remote,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/stats/shared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAIlD,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG;SACP,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,IAAI,CAAC;SACtE,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;SAC9E,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,SAAS,EAAE,gDAAgD,CAAC;SACnE,MAAM,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgC;IACzD,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,IAAI,IAAI,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,MAAM,gBAAgB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAgB;QACxB,OAAO,EAAE,OAAO,CAAC,OAA6B;QAC9C,MAAM,EAAE,OAAO,CAAC,MAA4B;QAC5C,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAG,wCAAwC;QAChE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;QACtB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA6FnD"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { loadConfig, loadSyncState, isConfigured, getConfigDir, getClaudeDir, hasWebConfig, loadWebConfig } from '../utils/config.js';
|
|
2
|
+
import { loadConfig, loadSyncState, isConfigured, getConfigDir, getClaudeDir, hasWebConfig, loadWebConfig, resolveDataSourcePreference } from '../utils/config.js';
|
|
3
3
|
import { initializeFirebase, getProjects } from '../firebase/client.js';
|
|
4
|
+
import { trackEvent } from '../utils/telemetry.js';
|
|
4
5
|
import * as fs from 'fs';
|
|
5
6
|
/**
|
|
6
7
|
* Show Code Insights status
|
|
@@ -9,17 +10,19 @@ export async function statusCommand() {
|
|
|
9
10
|
console.log(chalk.cyan('\n📊 Code Insights Status\n'));
|
|
10
11
|
// Check configuration
|
|
11
12
|
console.log(chalk.white('Configuration:'));
|
|
13
|
+
const preference = resolveDataSourcePreference();
|
|
12
14
|
if (isConfigured()) {
|
|
13
15
|
console.log(chalk.green(` ✓ Configured at ${getConfigDir()}`));
|
|
14
16
|
const config = loadConfig();
|
|
15
17
|
if (config) {
|
|
16
|
-
console.log(chalk.gray(` Project: ${config.firebase
|
|
18
|
+
console.log(chalk.gray(` Project: ${config.firebase?.projectId ?? '(local)'}`));
|
|
17
19
|
}
|
|
20
|
+
console.log(chalk.gray(` Data source: ${preference}`));
|
|
18
21
|
}
|
|
19
22
|
else {
|
|
20
|
-
console.log(chalk.
|
|
21
|
-
console.log(chalk.gray('
|
|
22
|
-
|
|
23
|
+
console.log(chalk.yellow(' ○ Not configured (running in zero-config mode)'));
|
|
24
|
+
console.log(chalk.gray(' Stats work without config: code-insights stats'));
|
|
25
|
+
console.log(chalk.gray(' To configure Firebase: code-insights init'));
|
|
23
26
|
}
|
|
24
27
|
// Check Claude directory
|
|
25
28
|
console.log(chalk.white('\nClaude Code:'));
|
|
@@ -46,45 +49,55 @@ export async function statusCommand() {
|
|
|
46
49
|
console.log(chalk.yellow(' ⚠ Never synced'));
|
|
47
50
|
console.log(chalk.gray(' Run `code-insights sync` to sync'));
|
|
48
51
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
if (preference === 'local') {
|
|
53
|
+
// Local mode — skip Firebase connection check
|
|
54
|
+
console.log(chalk.white('\nFirebase:'));
|
|
55
|
+
console.log(chalk.gray(' ○ Not applicable (data source is local)'));
|
|
56
|
+
console.log(chalk.gray(' Use `code-insights stats --local` for session analytics'));
|
|
57
|
+
console.log(chalk.gray(' To switch: code-insights config set-source firebase'));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Check Firebase connection
|
|
61
|
+
console.log(chalk.white('\nFirebase:'));
|
|
62
|
+
const config = loadConfig();
|
|
63
|
+
if (config) {
|
|
64
|
+
try {
|
|
65
|
+
initializeFirebase(config);
|
|
66
|
+
const projects = await getProjects();
|
|
67
|
+
console.log(chalk.green(' ✓ Connected'));
|
|
68
|
+
console.log(chalk.gray(` ${projects.length} projects in Firestore`));
|
|
69
|
+
if (projects.length > 0) {
|
|
70
|
+
console.log(chalk.white('\nSynced Projects:'));
|
|
71
|
+
for (const project of projects.slice(0, 5)) {
|
|
72
|
+
console.log(chalk.gray(` ${project.name} (${project.sessionCount} sessions)`));
|
|
73
|
+
}
|
|
74
|
+
if (projects.length > 5) {
|
|
75
|
+
console.log(chalk.gray(` ... and ${projects.length - 5} more`));
|
|
76
|
+
}
|
|
65
77
|
}
|
|
66
78
|
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.log(chalk.red(' ✗ Connection failed'));
|
|
81
|
+
console.log(chalk.gray(` ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
82
|
+
}
|
|
67
83
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
84
|
+
// Check web dashboard config
|
|
85
|
+
console.log(chalk.white('\nWeb Dashboard:'));
|
|
86
|
+
if (hasWebConfig()) {
|
|
87
|
+
const webConfig = loadWebConfig();
|
|
88
|
+
console.log(chalk.green(' ✓ Configured'));
|
|
89
|
+
if (webConfig && typeof webConfig.projectId === 'string') {
|
|
90
|
+
console.log(chalk.gray(` Project: ${webConfig.projectId}`));
|
|
91
|
+
}
|
|
92
|
+
console.log(chalk.gray(' Run "code-insights connect" to get dashboard URL'));
|
|
71
93
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (hasWebConfig()) {
|
|
76
|
-
const webConfig = loadWebConfig();
|
|
77
|
-
console.log(chalk.green(' ✓ Configured'));
|
|
78
|
-
if (webConfig && typeof webConfig.projectId === 'string') {
|
|
79
|
-
console.log(chalk.gray(` Project: ${webConfig.projectId}`));
|
|
94
|
+
else {
|
|
95
|
+
console.log(chalk.yellow(' ○ Not configured'));
|
|
96
|
+
console.log(chalk.gray(' Run "code-insights init" to configure'));
|
|
80
97
|
}
|
|
81
|
-
console.log(chalk.gray(' Run "code-insights connect" to get dashboard URL'));
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
console.log(chalk.yellow(' ○ Not configured'));
|
|
85
|
-
console.log(chalk.gray(' Run "code-insights init" to configure'));
|
|
86
98
|
}
|
|
87
99
|
console.log('');
|
|
100
|
+
trackEvent('status', true);
|
|
88
101
|
}
|
|
89
102
|
/**
|
|
90
103
|
* Count JSONL files in Claude directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/sync.d.ts
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
interface SyncOptions {
|
|
2
2
|
force?: boolean;
|
|
3
|
+
forceRemote?: boolean;
|
|
3
4
|
project?: string;
|
|
4
5
|
dryRun?: boolean;
|
|
5
6
|
quiet?: boolean;
|
|
6
7
|
regenerateTitles?: boolean;
|
|
8
|
+
source?: string;
|
|
7
9
|
}
|
|
10
|
+
export interface SyncResult {
|
|
11
|
+
syncedCount: number;
|
|
12
|
+
messageCount: number;
|
|
13
|
+
errorCount: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Core sync logic — reusable from stats commands and other callers.
|
|
17
|
+
*
|
|
18
|
+
* Throws on fatal errors (missing config, Firebase connection failure,
|
|
19
|
+
* unknown provider) instead of calling process.exit().
|
|
20
|
+
* Returns a SyncResult summary instead of printing one.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runSync(options?: SyncOptions): Promise<SyncResult>;
|
|
8
23
|
/**
|
|
9
|
-
* Sync
|
|
24
|
+
* Sync AI coding sessions to Firestore
|
|
10
25
|
*/
|
|
11
26
|
export declare function syncCommand(options?: SyncOptions): Promise<void>;
|
|
12
27
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiK5E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC1E"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -2,13 +2,19 @@ import * as fs from 'fs';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import ora from 'ora';
|
|
5
|
-
import { loadConfig, loadSyncState, saveSyncState } from '../utils/config.js';
|
|
5
|
+
import { loadConfig, loadSyncState, saveSyncState, resolveDataSourcePreference } from '../utils/config.js';
|
|
6
|
+
import { trackEvent } from '../utils/telemetry.js';
|
|
6
7
|
import { initializeFirebase, uploadSession, uploadMessages, sessionExists, recalculateUsageStats } from '../firebase/client.js';
|
|
7
|
-
import {
|
|
8
|
+
import { getAllProviders, getProvider } from '../providers/registry.js';
|
|
9
|
+
import { splitVirtualPath } from '../utils/paths.js';
|
|
8
10
|
/**
|
|
9
|
-
*
|
|
11
|
+
* Core sync logic — reusable from stats commands and other callers.
|
|
12
|
+
*
|
|
13
|
+
* Throws on fatal errors (missing config, Firebase connection failure,
|
|
14
|
+
* unknown provider) instead of calling process.exit().
|
|
15
|
+
* Returns a SyncResult summary instead of printing one.
|
|
10
16
|
*/
|
|
11
|
-
export async function
|
|
17
|
+
export async function runSync(options = {}) {
|
|
12
18
|
const log = options.quiet ? () => { } : console.log.bind(console);
|
|
13
19
|
const noopSpinner = {
|
|
14
20
|
start: function () { return this; },
|
|
@@ -20,12 +26,12 @@ export async function syncCommand(options = {}) {
|
|
|
20
26
|
const createSpinner = options.quiet
|
|
21
27
|
? () => noopSpinner
|
|
22
28
|
: ora;
|
|
23
|
-
log(chalk.cyan('\n
|
|
29
|
+
log(chalk.cyan('\n\uD83D\uDCE4 Code Insights Sync\n'));
|
|
24
30
|
// Load config
|
|
25
31
|
const config = loadConfig();
|
|
26
32
|
if (!config) {
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
throw new Error('Sync requires Firebase. Run `code-insights init` to set up.\n' +
|
|
34
|
+
' For local-only analytics: code-insights stats');
|
|
29
35
|
}
|
|
30
36
|
// Initialize Firebase
|
|
31
37
|
const spinner = createSpinner('Connecting to Firebase...').start();
|
|
@@ -35,81 +41,104 @@ export async function syncCommand(options = {}) {
|
|
|
35
41
|
}
|
|
36
42
|
catch (error) {
|
|
37
43
|
spinner.fail('Failed to connect to Firebase');
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
throw new Error(`Failed to connect to Firebase: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
45
|
+
}
|
|
46
|
+
// Dry-run banner
|
|
47
|
+
if (options.dryRun) {
|
|
48
|
+
log(chalk.yellow('\n\uD83D\uDD0D Dry run \u2014 no changes will be made'));
|
|
49
|
+
}
|
|
50
|
+
// Get providers to sync
|
|
51
|
+
let providers;
|
|
52
|
+
if (options.source) {
|
|
53
|
+
try {
|
|
54
|
+
providers = [getProvider(options.source)];
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
throw new Error(`Unknown source: ${options.source}. Available: ${getAllProviders().map(p => p.getProviderName()).join(', ')}`);
|
|
40
58
|
}
|
|
41
|
-
process.exit(1);
|
|
42
59
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
spinner.start('Discovering sessions...');
|
|
46
|
-
const jsonlFiles = await provider.discover({ projectFilter: options.project });
|
|
47
|
-
spinner.succeed(`Found ${jsonlFiles.length} session files`);
|
|
48
|
-
if (jsonlFiles.length === 0) {
|
|
49
|
-
log(chalk.yellow('No sessions to sync.'));
|
|
50
|
-
return;
|
|
60
|
+
else {
|
|
61
|
+
providers = getAllProviders();
|
|
51
62
|
}
|
|
52
63
|
// Load sync state
|
|
53
64
|
const syncState = options.force ? { lastSync: '', files: {} } : loadSyncState();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (options.dryRun) {
|
|
62
|
-
log(chalk.yellow('\n🔍 Dry run - no changes will be made'));
|
|
63
|
-
for (const file of filesToSync) {
|
|
64
|
-
log(chalk.gray(` Would sync: ${path.basename(file)}`));
|
|
65
|
-
}
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
// Process files
|
|
69
|
-
let syncedCount = 0;
|
|
70
|
-
let messageCount = 0;
|
|
71
|
-
let errorCount = 0;
|
|
72
|
-
for (const filePath of filesToSync) {
|
|
73
|
-
const fileName = path.basename(filePath);
|
|
74
|
-
spinner.start(`Processing ${fileName}...`);
|
|
65
|
+
let totalSyncedCount = 0;
|
|
66
|
+
let totalMessageCount = 0;
|
|
67
|
+
let totalErrorCount = 0;
|
|
68
|
+
for (const provider of providers) {
|
|
69
|
+
const providerName = provider.getProviderName();
|
|
75
70
|
try {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
if (providers.length > 1) {
|
|
72
|
+
log(chalk.cyan(`\n\uD83D\uDCE6 Syncing ${providerName}...`));
|
|
73
|
+
}
|
|
74
|
+
// Discovery
|
|
75
|
+
spinner.start(`Discovering ${providerName} sessions...`);
|
|
76
|
+
const sessionFiles = await provider.discover({ projectFilter: options.project });
|
|
77
|
+
spinner.succeed(`Found ${sessionFiles.length} ${providerName} session files`);
|
|
78
|
+
if (sessionFiles.length === 0)
|
|
79
|
+
continue;
|
|
80
|
+
// Filter to only new/modified files
|
|
81
|
+
const filesToSync = filterFilesToSync(sessionFiles, syncState, options.force);
|
|
82
|
+
log(chalk.gray(` ${filesToSync.length} files need syncing (${sessionFiles.length - filesToSync.length} already synced)`));
|
|
83
|
+
if (filesToSync.length === 0)
|
|
84
|
+
continue;
|
|
85
|
+
if (options.dryRun) {
|
|
86
|
+
for (const file of filesToSync) {
|
|
87
|
+
log(chalk.gray(` Would sync: ${path.basename(file)}`));
|
|
88
|
+
}
|
|
80
89
|
continue;
|
|
81
90
|
}
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
91
|
+
// Process files
|
|
92
|
+
for (const filePath of filesToSync) {
|
|
93
|
+
const fileName = path.basename(filePath);
|
|
94
|
+
spinner.start(`Processing ${fileName}...`);
|
|
95
|
+
try {
|
|
96
|
+
// Parse session
|
|
97
|
+
const session = await provider.parse(filePath);
|
|
98
|
+
if (!session) {
|
|
99
|
+
spinner.warn(`Skipped ${fileName} (no valid data)`);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// Check if already exists (unless force)
|
|
103
|
+
if (!options.force) {
|
|
104
|
+
const exists = await sessionExists(session.id);
|
|
105
|
+
if (exists) {
|
|
106
|
+
spinner.info(`Skipped ${fileName} (already synced)`);
|
|
107
|
+
updateSyncState(syncState, filePath, session.id);
|
|
108
|
+
saveSyncState(syncState);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Upload session and messages to Firestore
|
|
113
|
+
await uploadSession(session, !!options.force);
|
|
114
|
+
await uploadMessages(session);
|
|
115
|
+
// Update and persist sync state after each file
|
|
116
|
+
// so progress survives crashes (e.g., Firebase quota exceeded)
|
|
87
117
|
updateSyncState(syncState, filePath, session.id);
|
|
88
118
|
saveSyncState(syncState);
|
|
89
|
-
|
|
119
|
+
totalSyncedCount++;
|
|
120
|
+
totalMessageCount += session.messages.length;
|
|
121
|
+
spinner.succeed(`Synced ${fileName} (${session.messages.length} messages)`);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
totalErrorCount++;
|
|
125
|
+
spinner.fail(`Failed to sync ${fileName}`);
|
|
126
|
+
if (!options.quiet) {
|
|
127
|
+
console.error(chalk.red(` ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
128
|
+
}
|
|
90
129
|
}
|
|
91
130
|
}
|
|
92
|
-
// Upload session and messages to Firestore
|
|
93
|
-
await uploadSession(session, !!options.force);
|
|
94
|
-
await uploadMessages(session);
|
|
95
|
-
// Update and persist sync state after each file
|
|
96
|
-
// so progress survives crashes (e.g., Firebase quota exceeded)
|
|
97
|
-
updateSyncState(syncState, filePath, session.id);
|
|
98
|
-
saveSyncState(syncState);
|
|
99
|
-
syncedCount++;
|
|
100
|
-
messageCount += session.messages.length;
|
|
101
|
-
spinner.succeed(`Synced ${fileName} (${session.messages.length} messages)`);
|
|
102
131
|
}
|
|
103
132
|
catch (error) {
|
|
104
|
-
|
|
105
|
-
spinner.fail(`Failed to sync ${
|
|
133
|
+
totalErrorCount++;
|
|
134
|
+
spinner.fail(`Failed to sync ${providerName}`);
|
|
106
135
|
if (!options.quiet) {
|
|
107
136
|
console.error(chalk.red(` ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
108
137
|
}
|
|
109
138
|
}
|
|
110
139
|
}
|
|
111
|
-
// Reconcile usage stats after force sync
|
|
112
|
-
if (options.force) {
|
|
140
|
+
// Reconcile usage stats after force sync (skip if nothing changed)
|
|
141
|
+
if (options.force && (totalSyncedCount > 0 || totalErrorCount > 0)) {
|
|
113
142
|
spinner.start('Recalculating usage stats...');
|
|
114
143
|
try {
|
|
115
144
|
const result = await recalculateUsageStats();
|
|
@@ -125,14 +154,48 @@ export async function syncCommand(options = {}) {
|
|
|
125
154
|
// Save sync state
|
|
126
155
|
syncState.lastSync = new Date().toISOString();
|
|
127
156
|
saveSyncState(syncState);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
157
|
+
return {
|
|
158
|
+
syncedCount: totalSyncedCount,
|
|
159
|
+
messageCount: totalMessageCount,
|
|
160
|
+
errorCount: totalErrorCount,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Sync AI coding sessions to Firestore
|
|
165
|
+
*/
|
|
166
|
+
export async function syncCommand(options = {}) {
|
|
167
|
+
const log = options.quiet ? () => { } : console.log.bind(console);
|
|
168
|
+
const preference = resolveDataSourcePreference();
|
|
169
|
+
if (preference === 'local' && !options.forceRemote) {
|
|
170
|
+
log(chalk.yellow('\n ⚠ Data source is set to local. Sync is only used with Firebase.\n'));
|
|
171
|
+
log(chalk.gray(' To switch to Firebase: code-insights config set-source firebase'));
|
|
172
|
+
log(chalk.gray(' To sync anyway (one-time): code-insights sync --force-remote\n'));
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const result = await runSync(options);
|
|
177
|
+
// Summary (only if not quiet)
|
|
178
|
+
if (result.syncedCount === 0 && result.errorCount === 0) {
|
|
179
|
+
log(chalk.green('\n\u2705 Already up to date!'));
|
|
180
|
+
trackEvent('sync', true);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
log(chalk.cyan('\n\uD83D\uDCCA Sync Summary'));
|
|
184
|
+
log(chalk.white(` Sessions synced: ${result.syncedCount}`));
|
|
185
|
+
log(chalk.white(` Messages uploaded: ${result.messageCount}`));
|
|
186
|
+
if (result.errorCount > 0) {
|
|
187
|
+
log(chalk.red(` Errors: ${result.errorCount}`));
|
|
188
|
+
}
|
|
189
|
+
log(chalk.green('\n\u2705 Sync complete!'));
|
|
190
|
+
trackEvent('sync', true);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
trackEvent('sync', false);
|
|
194
|
+
if (!options.quiet) {
|
|
195
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Sync failed'));
|
|
196
|
+
}
|
|
197
|
+
process.exit(1);
|
|
134
198
|
}
|
|
135
|
-
log(chalk.green('\n✅ Sync complete!'));
|
|
136
199
|
}
|
|
137
200
|
/**
|
|
138
201
|
* Filter files to only those that need syncing
|
|
@@ -141,22 +204,52 @@ function filterFilesToSync(files, syncState, force) {
|
|
|
141
204
|
if (force)
|
|
142
205
|
return files;
|
|
143
206
|
return files.filter((filePath) => {
|
|
144
|
-
const
|
|
207
|
+
const { realPath, sessionFragment } = splitVirtualPath(filePath);
|
|
208
|
+
const stat = fs.statSync(realPath);
|
|
145
209
|
const lastModified = stat.mtime.toISOString();
|
|
146
|
-
const fileState = syncState.files[
|
|
147
|
-
//
|
|
148
|
-
|
|
210
|
+
const fileState = syncState.files[realPath];
|
|
211
|
+
// If file was never synced, sync it
|
|
212
|
+
if (!fileState)
|
|
213
|
+
return true;
|
|
214
|
+
// For virtual paths (multi-session files), check if this specific session was synced
|
|
215
|
+
if (sessionFragment && fileState.syncedSessionIds) {
|
|
216
|
+
return !fileState.syncedSessionIds.includes(sessionFragment);
|
|
217
|
+
}
|
|
218
|
+
// For regular files, check if modified since last sync
|
|
219
|
+
if (sessionFragment) {
|
|
220
|
+
// Virtual path but no syncedSessionIds tracked yet — needs sync
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
return fileState.lastModified !== lastModified;
|
|
149
224
|
});
|
|
150
225
|
}
|
|
151
226
|
/**
|
|
152
227
|
* Update sync state for a file
|
|
153
228
|
*/
|
|
154
229
|
function updateSyncState(state, filePath, sessionId) {
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
230
|
+
const { realPath, sessionFragment } = splitVirtualPath(filePath);
|
|
231
|
+
const stat = fs.statSync(realPath);
|
|
232
|
+
if (sessionFragment) {
|
|
233
|
+
// Virtual path: track the session fragment in syncedSessionIds
|
|
234
|
+
const existing = state.files[realPath];
|
|
235
|
+
const syncedIds = existing?.syncedSessionIds || [];
|
|
236
|
+
if (!syncedIds.includes(sessionFragment)) {
|
|
237
|
+
syncedIds.push(sessionFragment);
|
|
238
|
+
}
|
|
239
|
+
state.files[realPath] = {
|
|
240
|
+
lastModified: stat.mtime.toISOString(),
|
|
241
|
+
lastSyncedLine: 0,
|
|
242
|
+
sessionId,
|
|
243
|
+
syncedSessionIds: syncedIds,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// Regular file path
|
|
248
|
+
state.files[realPath] = {
|
|
249
|
+
lastModified: stat.mtime.toISOString(),
|
|
250
|
+
lastSyncedLine: 0,
|
|
251
|
+
sessionId,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
161
254
|
}
|
|
162
255
|
//# sourceMappingURL=sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgGpC,eAAO,MAAM,gBAAgB,SAIzB,CAAC"}
|