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,iBAmGrD"}
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"}
@@ -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
- session_id: t.sessionId,
39
- project_path: null,
40
- title: t.summary || t.project || null,
41
- model: null,
42
- started_at: t.date,
43
- duration_minutes: t.stats?.duration || null,
44
- input_tokens: 0,
45
- output_tokens: 0,
46
- cost_usd: null,
47
- }));
48
- // Transform costs
49
- const daily_costs = data.costDaily.map((c) => ({
50
- date: c.date,
51
- total_cost_usd: c.totalCost || 0,
52
- total_input_tokens: c.inputTokens || 0,
53
- total_output_tokens: c.outputTokens || 0,
54
- model: c.modelBreakdowns?.[0]?.modelName || null,
55
- session_count: 0,
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":"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"}
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.1.2",
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.1.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"