codesession-cli 1.0.0 → 1.3.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/dist/index.js CHANGED
@@ -4,27 +4,89 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.runAgentSession = exports.BudgetExceededError = exports.AgentSession = exports.stopWatcher = exports.startWatcher = exports.getGitInfo = exports.checkForNewCommits = exports.initGit = exports.exportSessions = exports.getAIUsage = exports.getCommits = exports.getFileChanges = exports.addAIUsage = exports.addCommit = exports.addFileChange = exports.getStats = exports.getSessions = exports.getSession = exports.endSession = exports.getActiveSession = exports.createSession = void 0;
7
8
  const commander_1 = require("commander");
8
9
  const chalk_1 = __importDefault(require("chalk"));
9
10
  const db_1 = require("./db");
10
11
  const git_1 = require("./git");
11
12
  const watcher_1 = require("./watcher");
12
13
  const formatters_1 = require("./formatters");
14
+ const formatters_2 = require("./formatters");
13
15
  const program = new commander_1.Command();
14
16
  program
15
- .name('devsession')
16
- .description('Track your AI coding sessions: time, files, commits, AI costs')
17
- .version('1.0.0');
18
- // Start command
17
+ .name('codesession')
18
+ .description('Track AI coding sessions & agent runs — time, files, commits, costs')
19
+ .version('1.3.0');
20
+ // ─── Helpers ───────────────────────────────────────────────────
21
+ function sessionToJSON(session, extras) {
22
+ const obj = {
23
+ id: session.id,
24
+ name: session.name,
25
+ status: session.status,
26
+ startTime: session.startTime,
27
+ endTime: session.endTime || null,
28
+ duration: session.duration || null,
29
+ durationFormatted: session.duration ? (0, formatters_2.formatDuration)(session.duration) : null,
30
+ workingDirectory: session.workingDirectory,
31
+ filesChanged: session.filesChanged,
32
+ commits: session.commits,
33
+ aiTokens: session.aiTokens,
34
+ aiCost: session.aiCost,
35
+ notes: session.notes || null,
36
+ };
37
+ if (extras?.files)
38
+ obj.files = extras.files;
39
+ if (extras?.commits)
40
+ obj.commits = extras.commits;
41
+ if (extras?.aiUsage)
42
+ obj.aiUsage = extras.aiUsage;
43
+ return obj;
44
+ }
45
+ // ─── Pricing Table ─────────────────────────────────────────────
46
+ const PRICING = {
47
+ // Anthropic (per 1M tokens)
48
+ 'claude-opus-4-6': { input: 15, output: 75 },
49
+ 'claude-sonnet-4-5': { input: 3, output: 15 },
50
+ 'claude-sonnet-4': { input: 3, output: 15 },
51
+ 'claude-haiku-3.5': { input: 0.80, output: 4 },
52
+ // OpenAI (per 1M tokens)
53
+ 'gpt-4o': { input: 2.50, output: 10 },
54
+ 'gpt-4o-mini': { input: 0.15, output: 0.60 },
55
+ 'gpt-4.1': { input: 2, output: 8 },
56
+ 'gpt-4.1-mini': { input: 0.40, output: 1.60 },
57
+ 'gpt-4.1-nano': { input: 0.10, output: 0.40 },
58
+ 'o3': { input: 2, output: 8 },
59
+ 'o4-mini': { input: 1.10, output: 4.40 },
60
+ // Google (per 1M tokens)
61
+ 'gemini-2.5-pro': { input: 1.25, output: 10 },
62
+ 'gemini-2.5-flash': { input: 0.15, output: 0.60 },
63
+ 'gemini-2.0-flash': { input: 0.10, output: 0.40 },
64
+ // DeepSeek
65
+ 'deepseek-r1': { input: 0.55, output: 2.19 },
66
+ 'deepseek-v3': { input: 0.27, output: 1.10 },
67
+ };
68
+ function estimateCost(model, promptTokens, completionTokens) {
69
+ const pricing = PRICING[model];
70
+ if (!pricing)
71
+ return null;
72
+ return (promptTokens * pricing.input + completionTokens * pricing.output) / 1000000;
73
+ }
74
+ // ─── Start ─────────────────────────────────────────────────────
19
75
  program
20
76
  .command('start')
21
77
  .description('Start a new coding session')
22
78
  .argument('<name>', 'Session name')
23
- .action(async (name) => {
79
+ .option('--json', 'Output JSON (for agents)')
80
+ .action(async (name, options) => {
24
81
  const active = (0, db_1.getActiveSession)();
25
82
  if (active) {
26
- console.log(chalk_1.default.yellow(`\nSession "${active.name}" is already active.`));
27
- console.log(chalk_1.default.gray('End it with: ds end\n'));
83
+ if (options.json) {
84
+ console.log(JSON.stringify({ error: 'session_active', activeSession: active.name, id: active.id }));
85
+ }
86
+ else {
87
+ console.log(chalk_1.default.yellow(`\nSession "${active.name}" is already active.`));
88
+ console.log(chalk_1.default.gray('End it with: cs end\n'));
89
+ }
28
90
  return;
29
91
  }
30
92
  const cwd = process.cwd();
@@ -40,32 +102,47 @@ program
40
102
  });
41
103
  // Initialize git tracking
42
104
  (0, git_1.initGit)(cwd);
43
- // Start file watcher
44
- (0, watcher_1.startWatcher)(sessionId, cwd);
45
- // Check for commits every 10 seconds
46
- const gitInterval = setInterval(async () => {
47
- await (0, git_1.checkForNewCommits)(sessionId);
48
- }, 10000);
49
- // Store interval ID
50
- global.gitInterval = gitInterval;
51
- const gitInfo = await (0, git_1.getGitInfo)();
52
- console.log(chalk_1.default.green(`\n✓ Session started: ${name}`));
53
- if (gitInfo) {
54
- console.log(chalk_1.default.gray(` Branch: ${gitInfo.branch}`));
55
- }
56
- console.log(chalk_1.default.gray(` Directory: ${cwd}`));
57
- console.log(chalk_1.default.gray('\n Tracking: files, commits, AI usage'));
58
- console.log(chalk_1.default.gray(' End with: ds end\n'));
105
+ // Start file watcher (only for long-running mode, not --json agent calls)
106
+ if (!options.json) {
107
+ (0, watcher_1.startWatcher)(sessionId, cwd);
108
+ // Check for commits every 10 seconds
109
+ const gitInterval = setInterval(async () => {
110
+ await (0, git_1.checkForNewCommits)(sessionId);
111
+ }, 10000);
112
+ // Store interval ID
113
+ global.gitInterval = gitInterval;
114
+ }
115
+ if (options.json) {
116
+ const gitInfo = await (0, git_1.getGitInfo)();
117
+ console.log(JSON.stringify({ id: sessionId, name, directory: cwd, branch: gitInfo?.branch || null }));
118
+ process.exit(0);
119
+ }
120
+ else {
121
+ const gitInfo = await (0, git_1.getGitInfo)();
122
+ console.log(chalk_1.default.green(`\n✓ Session started: ${name}`));
123
+ if (gitInfo) {
124
+ console.log(chalk_1.default.gray(` Branch: ${gitInfo.branch}`));
125
+ }
126
+ console.log(chalk_1.default.gray(` Directory: ${cwd}`));
127
+ console.log(chalk_1.default.gray('\n Tracking: files, commits, AI usage'));
128
+ console.log(chalk_1.default.gray(' End with: cs end\n'));
129
+ }
59
130
  });
60
- // End command
131
+ // ─── End ───────────────────────────────────────────────────────
61
132
  program
62
133
  .command('end')
63
134
  .description('End the active session')
64
135
  .option('-n, --notes <notes>', 'Session notes')
136
+ .option('--json', 'Output JSON (for agents)')
65
137
  .action((options) => {
66
138
  const session = (0, db_1.getActiveSession)();
67
139
  if (!session) {
68
- console.log(chalk_1.default.yellow('\nNo active session.\n'));
140
+ if (options.json) {
141
+ console.log(JSON.stringify({ error: 'no_active_session' }));
142
+ }
143
+ else {
144
+ console.log(chalk_1.default.yellow('\nNo active session.\n'));
145
+ }
69
146
  return;
70
147
  }
71
148
  // Stop tracking
@@ -76,17 +153,26 @@ program
76
153
  (0, db_1.endSession)(session.id, new Date().toISOString(), options.notes);
77
154
  const updated = (0, db_1.getSession)(session.id);
78
155
  if (updated) {
79
- console.log(chalk_1.default.green('\n✓ Session ended\n'));
80
- (0, formatters_1.displaySession)(updated);
156
+ if (options.json) {
157
+ const files = (0, db_1.getFileChanges)(updated.id);
158
+ const commits = (0, db_1.getCommits)(updated.id);
159
+ const aiUsage = (0, db_1.getAIUsage)(updated.id);
160
+ console.log(JSON.stringify(sessionToJSON(updated, { files, commits, aiUsage })));
161
+ }
162
+ else {
163
+ console.log(chalk_1.default.green('\n✓ Session ended\n'));
164
+ (0, formatters_1.displaySession)(updated);
165
+ }
81
166
  }
82
167
  });
83
- // Show command
168
+ // ─── Show ──────────────────────────────────────────────────────
84
169
  program
85
170
  .command('show')
86
171
  .description('Show session details')
87
172
  .argument('[id]', 'Session ID (defaults to last session)')
88
173
  .option('--files', 'Show file changes')
89
174
  .option('--commits', 'Show commits')
175
+ .option('--json', 'Output JSON (for agents)')
90
176
  .action((id, options) => {
91
177
  let session;
92
178
  if (id) {
@@ -97,72 +183,222 @@ program
97
183
  session = sessions[0];
98
184
  }
99
185
  if (!session) {
100
- console.log(chalk_1.default.yellow('\nSession not found.\n'));
186
+ if (options.json) {
187
+ console.log(JSON.stringify({ error: 'session_not_found' }));
188
+ }
189
+ else {
190
+ console.log(chalk_1.default.yellow('\nSession not found.\n'));
191
+ }
101
192
  return;
102
193
  }
103
- (0, formatters_1.displaySession)(session);
104
- if (options.files) {
105
- const files = (0, db_1.getFileChanges)(session.id);
106
- (0, formatters_1.displayFileChanges)(files);
194
+ if (options.json) {
195
+ const extras = {};
196
+ if (options.files)
197
+ extras.files = (0, db_1.getFileChanges)(session.id);
198
+ if (options.commits)
199
+ extras.commits = (0, db_1.getCommits)(session.id);
200
+ extras.aiUsage = (0, db_1.getAIUsage)(session.id);
201
+ console.log(JSON.stringify(sessionToJSON(session, extras)));
107
202
  }
108
- if (options.commits) {
109
- const commits = (0, db_1.getCommits)(session.id);
110
- (0, formatters_1.displayCommits)(commits);
203
+ else {
204
+ (0, formatters_1.displaySession)(session);
205
+ if (options.files) {
206
+ const files = (0, db_1.getFileChanges)(session.id);
207
+ (0, formatters_1.displayFileChanges)(files);
208
+ }
209
+ if (options.commits) {
210
+ const commits = (0, db_1.getCommits)(session.id);
211
+ (0, formatters_1.displayCommits)(commits);
212
+ }
111
213
  }
112
214
  });
113
- // List command
215
+ // ─── List ──────────────────────────────────────────────────────
114
216
  program
115
217
  .command('list')
116
218
  .alias('ls')
117
219
  .description('List recent sessions')
118
220
  .option('-l, --limit <number>', 'Number of sessions to show', parseInt, 10)
221
+ .option('--json', 'Output JSON (for agents)')
119
222
  .action((options) => {
120
223
  const sessions = (0, db_1.getSessions)(options.limit);
121
- (0, formatters_1.displaySessions)(sessions);
224
+ if (options.json) {
225
+ console.log(JSON.stringify(sessions.map((s) => sessionToJSON(s))));
226
+ }
227
+ else {
228
+ (0, formatters_1.displaySessions)(sessions);
229
+ }
122
230
  });
123
- // Stats command
231
+ // ─── Stats ─────────────────────────────────────────────────────
124
232
  program
125
233
  .command('stats')
126
234
  .description('Show overall statistics')
127
- .action(() => {
235
+ .option('--json', 'Output JSON (for agents)')
236
+ .action((options) => {
128
237
  const stats = (0, db_1.getStats)();
129
- (0, formatters_1.displayStats)(stats);
238
+ if (options.json) {
239
+ console.log(JSON.stringify({
240
+ totalSessions: stats.totalSessions,
241
+ totalTime: stats.totalTime,
242
+ totalTimeFormatted: (0, formatters_2.formatDuration)(stats.totalTime),
243
+ totalFiles: stats.totalFiles,
244
+ totalCommits: stats.totalCommits,
245
+ totalAICost: stats.totalAICost,
246
+ avgSessionTime: stats.avgSessionTime,
247
+ avgSessionFormatted: (0, formatters_2.formatDuration)(stats.avgSessionTime),
248
+ }));
249
+ }
250
+ else {
251
+ (0, formatters_1.displayStats)(stats);
252
+ }
130
253
  });
131
- // Log AI usage command
254
+ // ─── Log AI ────────────────────────────────────────────────────
132
255
  program
133
256
  .command('log-ai')
134
257
  .description('Log AI usage for active session')
135
- .requiredOption('-p, --provider <provider>', 'AI provider')
258
+ .requiredOption('-p, --provider <provider>', 'AI provider (anthropic, openai, google, etc.)')
136
259
  .requiredOption('-m, --model <model>', 'Model name')
137
- .requiredOption('-t, --tokens <tokens>', 'Total tokens', parseInt)
138
- .requiredOption('-c, --cost <cost>', 'Cost in dollars', parseFloat)
260
+ .option('-t, --tokens <tokens>', 'Total tokens', parseInt)
261
+ .option('-c, --cost <cost>', 'Cost in dollars (auto-calculated if omitted)', parseFloat)
262
+ .option('--prompt-tokens <n>', 'Prompt/input tokens', parseInt)
263
+ .option('--completion-tokens <n>', 'Completion/output tokens', parseInt)
264
+ .option('--json', 'Output JSON (for agents)')
139
265
  .action((options) => {
140
266
  const session = (0, db_1.getActiveSession)();
141
267
  if (!session) {
142
- console.log(chalk_1.default.yellow('\nNo active session. Start one with: ds start <name>\n'));
268
+ if (options.json) {
269
+ console.log(JSON.stringify({ error: 'no_active_session' }));
270
+ }
271
+ else {
272
+ console.log(chalk_1.default.yellow('\nNo active session. Start one with: cs start <name>\n'));
273
+ }
143
274
  return;
144
275
  }
276
+ const promptTk = options.promptTokens || 0;
277
+ const completionTk = options.completionTokens || 0;
278
+ const totalTokens = options.tokens || (promptTk + completionTk);
279
+ if (totalTokens === 0) {
280
+ const msg = 'Must provide --tokens or --prompt-tokens/--completion-tokens';
281
+ if (options.json) {
282
+ console.log(JSON.stringify({ error: 'missing_tokens', message: msg }));
283
+ }
284
+ else {
285
+ console.log(chalk_1.default.red(`\n✗ ${msg}\n`));
286
+ }
287
+ return;
288
+ }
289
+ let cost = options.cost;
290
+ if (cost === undefined || cost === null) {
291
+ // Auto-calculate from pricing table
292
+ const auto = estimateCost(options.model, promptTk || totalTokens * 0.7, completionTk || totalTokens * 0.3);
293
+ if (auto !== null) {
294
+ cost = Math.round(auto * 1e10) / 1e10;
295
+ }
296
+ else {
297
+ const msg = `Unknown model "${options.model}" — provide -c <cost> or use --prompt-tokens/--completion-tokens with a known model`;
298
+ if (options.json) {
299
+ console.log(JSON.stringify({ error: 'unknown_model', message: msg }));
300
+ }
301
+ else {
302
+ console.log(chalk_1.default.red(`\n✗ ${msg}\n`));
303
+ }
304
+ return;
305
+ }
306
+ }
145
307
  (0, db_1.addAIUsage)({
146
308
  sessionId: session.id,
147
309
  provider: options.provider,
148
310
  model: options.model,
149
- tokens: options.tokens,
150
- cost: options.cost,
311
+ tokens: totalTokens,
312
+ promptTokens: promptTk || undefined,
313
+ completionTokens: completionTk || undefined,
314
+ cost,
151
315
  timestamp: new Date().toISOString(),
152
316
  });
153
- console.log(chalk_1.default.green(`\n✓ Logged AI usage: ${options.tokens.toLocaleString()} tokens, $${options.cost.toFixed(2)}\n`));
317
+ // Re-read the updated session
318
+ const updated = (0, db_1.getSession)(session.id);
319
+ if (options.json) {
320
+ console.log(JSON.stringify({
321
+ logged: { provider: options.provider, model: options.model, tokens: totalTokens, promptTokens: promptTk || undefined, completionTokens: completionTk || undefined, cost },
322
+ session: { id: session.id, aiCost: updated?.aiCost || 0, aiTokens: updated?.aiTokens || 0 },
323
+ }));
324
+ }
325
+ else {
326
+ console.log(chalk_1.default.green(`\n✓ Logged: ${totalTokens.toLocaleString()} tokens, ${(0, formatters_2.formatCost)(cost)}`));
327
+ console.log(chalk_1.default.gray(` Session total: ${(updated?.aiTokens || 0).toLocaleString()} tokens, ${(0, formatters_2.formatCost)(updated?.aiCost || 0)}\n`));
328
+ }
154
329
  });
155
- // Status command
330
+ // ─── Status ────────────────────────────────────────────────────
156
331
  program
157
332
  .command('status')
158
333
  .description('Show active session status')
159
- .action(() => {
334
+ .option('--json', 'Output JSON (for agents)')
335
+ .action((options) => {
160
336
  const session = (0, db_1.getActiveSession)();
161
337
  if (!session) {
162
- console.log(chalk_1.default.yellow('\nNo active session.\n'));
338
+ if (options.json) {
339
+ console.log(JSON.stringify({ error: 'no_active_session' }));
340
+ }
341
+ else {
342
+ console.log(chalk_1.default.yellow('\nNo active session.\n'));
343
+ }
163
344
  return;
164
345
  }
165
- (0, formatters_1.displaySession)(session);
346
+ if (options.json) {
347
+ // Calculate live duration
348
+ const now = new Date();
349
+ const start = new Date(session.startTime);
350
+ const liveDuration = Math.floor((now.getTime() - start.getTime()) / 1000);
351
+ const aiUsage = (0, db_1.getAIUsage)(session.id);
352
+ console.log(JSON.stringify({
353
+ ...sessionToJSON(session),
354
+ liveDuration,
355
+ liveDurationFormatted: (0, formatters_2.formatDuration)(liveDuration),
356
+ aiUsage,
357
+ }));
358
+ }
359
+ else {
360
+ (0, formatters_1.displaySession)(session);
361
+ }
362
+ });
363
+ // ─── Export ─────────────────────────────────────────────────
364
+ program
365
+ .command('export')
366
+ .description('Export sessions as JSON or CSV')
367
+ .option('-f, --format <format>', 'Output format: json or csv', 'json')
368
+ .option('-l, --limit <n>', 'Number of sessions to export', parseInt)
369
+ .action((options) => {
370
+ const format = options.format === 'csv' ? 'csv' : 'json';
371
+ const output = (0, db_1.exportSessions)(format, options.limit);
372
+ console.log(output);
166
373
  });
167
- program.parse();
374
+ // Only parse CLI args when run directly (not when imported as a library)
375
+ if (require.main === module) {
376
+ program.parse();
377
+ }
378
+ // Programmatic API exports
379
+ var db_2 = require("./db");
380
+ Object.defineProperty(exports, "createSession", { enumerable: true, get: function () { return db_2.createSession; } });
381
+ Object.defineProperty(exports, "getActiveSession", { enumerable: true, get: function () { return db_2.getActiveSession; } });
382
+ Object.defineProperty(exports, "endSession", { enumerable: true, get: function () { return db_2.endSession; } });
383
+ Object.defineProperty(exports, "getSession", { enumerable: true, get: function () { return db_2.getSession; } });
384
+ Object.defineProperty(exports, "getSessions", { enumerable: true, get: function () { return db_2.getSessions; } });
385
+ Object.defineProperty(exports, "getStats", { enumerable: true, get: function () { return db_2.getStats; } });
386
+ Object.defineProperty(exports, "addFileChange", { enumerable: true, get: function () { return db_2.addFileChange; } });
387
+ Object.defineProperty(exports, "addCommit", { enumerable: true, get: function () { return db_2.addCommit; } });
388
+ Object.defineProperty(exports, "addAIUsage", { enumerable: true, get: function () { return db_2.addAIUsage; } });
389
+ Object.defineProperty(exports, "getFileChanges", { enumerable: true, get: function () { return db_2.getFileChanges; } });
390
+ Object.defineProperty(exports, "getCommits", { enumerable: true, get: function () { return db_2.getCommits; } });
391
+ Object.defineProperty(exports, "getAIUsage", { enumerable: true, get: function () { return db_2.getAIUsage; } });
392
+ Object.defineProperty(exports, "exportSessions", { enumerable: true, get: function () { return db_2.exportSessions; } });
393
+ var git_2 = require("./git");
394
+ Object.defineProperty(exports, "initGit", { enumerable: true, get: function () { return git_2.initGit; } });
395
+ Object.defineProperty(exports, "checkForNewCommits", { enumerable: true, get: function () { return git_2.checkForNewCommits; } });
396
+ Object.defineProperty(exports, "getGitInfo", { enumerable: true, get: function () { return git_2.getGitInfo; } });
397
+ var watcher_2 = require("./watcher");
398
+ Object.defineProperty(exports, "startWatcher", { enumerable: true, get: function () { return watcher_2.startWatcher; } });
399
+ Object.defineProperty(exports, "stopWatcher", { enumerable: true, get: function () { return watcher_2.stopWatcher; } });
400
+ var agents_1 = require("./agents");
401
+ Object.defineProperty(exports, "AgentSession", { enumerable: true, get: function () { return agents_1.AgentSession; } });
402
+ Object.defineProperty(exports, "BudgetExceededError", { enumerable: true, get: function () { return agents_1.BudgetExceededError; } });
403
+ Object.defineProperty(exports, "runAgentSession", { enumerable: true, get: function () { return agents_1.runAgentSession; } });
168
404
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -32,6 +32,8 @@ export interface AIUsage {
32
32
  provider: string;
33
33
  model: string;
34
34
  tokens: number;
35
+ promptTokens?: number;
36
+ completionTokens?: number;
35
37
  cost: number;
36
38
  timestamp: string;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB"}
package/package.json CHANGED
@@ -1,12 +1,25 @@
1
1
  {
2
2
  "name": "codesession-cli",
3
- "version": "1.0.0",
4
- "description": "Track your AI coding sessions: time, files, commits, AI costs",
3
+ "version": "1.3.0",
4
+ "description": "Track AI agent & coding session costs files, commits, tokens. Works with OpenClaw, Claude Code, and any AI agent. Includes programmatic API with budget enforcement.",
5
5
  "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
6
7
  "bin": {
7
8
  "codesession": "./dist/index.js",
8
9
  "cs": "./dist/index.js"
9
10
  },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ },
17
+ "./agents": {
18
+ "import": "./dist/agents.js",
19
+ "require": "./dist/agents.js",
20
+ "types": "./dist/agents.d.ts"
21
+ }
22
+ },
10
23
  "scripts": {
11
24
  "build": "tsc",
12
25
  "dev": "tsx src/index.ts",
@@ -18,10 +31,16 @@
18
31
  "coding",
19
32
  "session",
20
33
  "tracker",
21
- "productivity",
34
+ "ai-agent",
35
+ "openclaw",
36
+ "claude-code",
37
+ "cost-tracking",
38
+ "token-tracking",
22
39
  "git",
23
- "time-tracking",
24
- "cli"
40
+ "cli",
41
+ "agents",
42
+ "budget",
43
+ "observability"
25
44
  ],
26
45
  "author": "Brian Mwirigi",
27
46
  "license": "MIT",
@@ -34,6 +53,12 @@
34
53
  "chokidar": "^3.5.3",
35
54
  "simple-git": "^3.22.0"
36
55
  },
56
+ "files": [
57
+ "dist",
58
+ "skills",
59
+ "README.md",
60
+ "LICENSE"
61
+ ],
37
62
  "devDependencies": {
38
63
  "@types/better-sqlite3": "^7.6.8",
39
64
  "@types/node": "^20.10.6",
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: codesession
3
+ description: Track agent session costs, file changes, and git commits with codesession-cli. Enforces budget limits and provides detailed session analytics.
4
+ metadata: {"openclaw": {"emoji": "📊", "homepage": "https://github.com/brian-mwirigi/codesession-cli", "requires": {"bins": ["cs"]}, "install": [{"id": "npm", "kind": "node", "package": "codesession-cli", "bins": ["cs"], "label": "Install codesession-cli (npm)"}]}}
5
+ ---
6
+
7
+ # Session Cost Tracking (codesession-cli)
8
+
9
+ You have access to `cs` (codesession-cli) for tracking session costs, file changes, and git activity.
10
+
11
+ ## When to use
12
+
13
+ - **Always** start a tracked session at the beginning of a multi-step task
14
+ - **Always** log AI usage after each API call you make
15
+ - **Always** end the session when the task is complete
16
+ - Check budget before expensive operations
17
+
18
+ ## Commands
19
+
20
+ ### Start tracking
21
+ ```bash
22
+ cs start "task description"
23
+ ```
24
+
25
+ ### Log AI usage (after each API call)
26
+ ```bash
27
+ # With granular tokens (cost auto-calculated from built-in pricing):
28
+ cs log-ai -p anthropic -m claude-sonnet-4 --prompt-tokens 8000 --completion-tokens 2000
29
+
30
+ # With manual cost:
31
+ cs log-ai -p anthropic -m claude-opus-4-6 -t 15000 -c 0.30
32
+
33
+ # With all fields:
34
+ cs log-ai -p openai -m gpt-4o --prompt-tokens 5000 --completion-tokens 1500 -c 0.04
35
+ ```
36
+ Providers: `anthropic`, `openai`, `google`, `mistral`, `deepseek`
37
+ Supported models for auto-pricing: claude-opus-4-6, claude-sonnet-4-5, claude-sonnet-4, claude-haiku-3.5, gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o3, o4-mini, gemini-2.5-pro, gemini-2.5-flash, gemini-2.0-flash, deepseek-r1, deepseek-v3
38
+
39
+ ### Check current status
40
+ ```bash
41
+ cs status --json
42
+ ```
43
+ Returns JSON with current session cost, tokens, files changed, duration.
44
+
45
+ ### End session and get summary
46
+ ```bash
47
+ cs end -n "completion notes"
48
+ ```
49
+
50
+ ### View session details with full breakdown
51
+ ```bash
52
+ cs show --json --files --commits
53
+ ```
54
+
55
+ ### View historical stats
56
+ ```bash
57
+ cs stats --json
58
+ ```
59
+
60
+ ### Export sessions
61
+ ```bash
62
+ cs export --format json --limit 10
63
+ cs export --format csv
64
+ ```
65
+
66
+ ## Workflow
67
+
68
+ 1. At task start: `cs start "Fix authentication bug"`
69
+ 2. After each AI call: `cs log-ai -p anthropic -m claude-sonnet-4 --prompt-tokens 8000 --completion-tokens 2000`
70
+ 3. Check spend: `cs status --json` → read `aiCost` field
71
+ 4. At task end: `cs end -n "Fixed the auth bug, added tests"`
72
+
73
+ ## Cost estimation guide
74
+
75
+ | Model | Input (per 1M tokens) | Output (per 1M tokens) |
76
+ |-------|----------------------|----------------------|
77
+ | claude-opus-4-6 | $15.00 | $75.00 |
78
+ | claude-sonnet-4-5 | $3.00 | $15.00 |
79
+ | gpt-4o | $2.50 | $10.00 |
80
+ | gpt-4.1 | $2.00 | $8.00 |
81
+ | gemini-2.5-pro | $1.25 | $10.00 |
82
+
83
+ ## Budget awareness
84
+
85
+ If the user has set a budget or you detect high spending:
86
+ - Check `cs status --json` before expensive operations
87
+ - Warn the user if `aiCost` exceeds $5.00 in a single session
88
+ - Suggest cheaper models if costs are escalating
89
+
90
+ ## JSON output
91
+
92
+ All commands support `--json` for machine-readable output. Use this when you need to parse session data programmatically.