coderadar 0.1.2 → 0.2.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAuIrD"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { loadConfig } from 'coderadar-core';
|
|
1
|
+
import { loadConfig, enrichTimelineWithSessionData } from 'coderadar-core';
|
|
2
2
|
import { collectDashboardData } from '../collector.js';
|
|
3
3
|
import ora from 'ora';
|
|
4
4
|
export async function syncCommand(options) {
|
|
@@ -16,6 +16,10 @@ export async function syncCommand(options) {
|
|
|
16
16
|
const spinner = ora('Collecting local data...').start();
|
|
17
17
|
try {
|
|
18
18
|
const data = collectDashboardData(config, { noCosts: options.noCosts });
|
|
19
|
+
spinner.text = 'Enriching session data...';
|
|
20
|
+
// Enrich timeline with token/cost/model data
|
|
21
|
+
const sessionEnrichment = await enrichTimelineWithSessionData(config.claudeDir, data.timeline, 60);
|
|
22
|
+
spinner.text = 'Transforming data for sync...';
|
|
19
23
|
// Transform projects for API
|
|
20
24
|
const projects = data.projects.map((p) => ({
|
|
21
25
|
name: p.name,
|
|
@@ -33,27 +37,49 @@ export async function syncCommand(options) {
|
|
|
33
37
|
last_commit_message: p.lastCommit || null,
|
|
34
38
|
updated_at: new Date().toISOString(),
|
|
35
39
|
}));
|
|
36
|
-
// Transform sessions from timeline
|
|
37
|
-
const sessions = data.timeline.map((t) =>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
40
|
+
// Transform sessions from timeline with enrichment data
|
|
41
|
+
const sessions = data.timeline.map((t) => {
|
|
42
|
+
const enrichment = sessionEnrichment.get(t.sessionId);
|
|
43
|
+
return {
|
|
44
|
+
session_id: t.sessionId,
|
|
45
|
+
project_path: enrichment?.projectPath || t.project || null,
|
|
46
|
+
title: t.summary || t.project || null,
|
|
47
|
+
model: enrichment?.model || null,
|
|
48
|
+
started_at: t.date,
|
|
49
|
+
duration_minutes: t.stats?.duration || null,
|
|
50
|
+
input_tokens: enrichment?.inputTokens || 0,
|
|
51
|
+
output_tokens: enrichment?.outputTokens || 0,
|
|
52
|
+
cost_usd: enrichment?.costUsd || null,
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
// Transform costs - create one record per model per day to match Supabase UNIQUE constraint
|
|
56
|
+
const daily_costs = [];
|
|
57
|
+
for (const c of data.costDaily) {
|
|
58
|
+
if (c.modelBreakdowns && c.modelBreakdowns.length > 0) {
|
|
59
|
+
// Create one record per model
|
|
60
|
+
for (const mb of c.modelBreakdowns) {
|
|
61
|
+
daily_costs.push({
|
|
62
|
+
date: c.date,
|
|
63
|
+
total_cost_usd: mb.cost || 0,
|
|
64
|
+
total_input_tokens: mb.inputTokens || 0,
|
|
65
|
+
total_output_tokens: mb.outputTokens || 0,
|
|
66
|
+
model: mb.modelName || null,
|
|
67
|
+
session_count: 0, // We don't have session count per model yet
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Fallback: single record with aggregated data
|
|
73
|
+
daily_costs.push({
|
|
74
|
+
date: c.date,
|
|
75
|
+
total_cost_usd: c.totalCost || 0,
|
|
76
|
+
total_input_tokens: c.inputTokens || 0,
|
|
77
|
+
total_output_tokens: c.outputTokens || 0,
|
|
78
|
+
model: null,
|
|
79
|
+
session_count: 0,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
57
83
|
spinner.text = `Syncing ${projects.length} projects, ${sessions.length} sessions, ${daily_costs.length} cost records...`;
|
|
58
84
|
const response = await fetch(`${cloudUrl}/api/sync`, {
|
|
59
85
|
method: 'POST',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coderadar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Intelligent dashboard for Claude Code project supervision - scan projects, track sessions, monitor costs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"node": ">=18.0.0"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"coderadar-core": "^0.
|
|
27
|
+
"coderadar-core": "^0.2.0",
|
|
28
28
|
"commander": "^13.0.0",
|
|
29
29
|
"ora": "^8.1.0",
|
|
30
30
|
"open": "^10.1.0"
|