codesession-cli 1.0.0 → 1.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.
package/dist/index.js CHANGED
@@ -4,27 +4,60 @@ 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.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.2.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
+ // ─── Start ─────────────────────────────────────────────────────
19
46
  program
20
47
  .command('start')
21
48
  .description('Start a new coding session')
22
49
  .argument('<name>', 'Session name')
23
- .action(async (name) => {
50
+ .option('--json', 'Output JSON (for agents)')
51
+ .action(async (name, options) => {
24
52
  const active = (0, db_1.getActiveSession)();
25
53
  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'));
54
+ if (options.json) {
55
+ console.log(JSON.stringify({ error: 'session_active', activeSession: active.name, id: active.id }));
56
+ }
57
+ else {
58
+ console.log(chalk_1.default.yellow(`\nSession "${active.name}" is already active.`));
59
+ console.log(chalk_1.default.gray('End it with: cs end\n'));
60
+ }
28
61
  return;
29
62
  }
30
63
  const cwd = process.cwd();
@@ -40,32 +73,47 @@ program
40
73
  });
41
74
  // Initialize git tracking
42
75
  (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'));
76
+ // Start file watcher (only for long-running mode, not --json agent calls)
77
+ if (!options.json) {
78
+ (0, watcher_1.startWatcher)(sessionId, cwd);
79
+ // Check for commits every 10 seconds
80
+ const gitInterval = setInterval(async () => {
81
+ await (0, git_1.checkForNewCommits)(sessionId);
82
+ }, 10000);
83
+ // Store interval ID
84
+ global.gitInterval = gitInterval;
85
+ }
86
+ if (options.json) {
87
+ const gitInfo = await (0, git_1.getGitInfo)();
88
+ console.log(JSON.stringify({ id: sessionId, name, directory: cwd, branch: gitInfo?.branch || null }));
89
+ process.exit(0);
90
+ }
91
+ else {
92
+ const gitInfo = await (0, git_1.getGitInfo)();
93
+ console.log(chalk_1.default.green(`\n✓ Session started: ${name}`));
94
+ if (gitInfo) {
95
+ console.log(chalk_1.default.gray(` Branch: ${gitInfo.branch}`));
96
+ }
97
+ console.log(chalk_1.default.gray(` Directory: ${cwd}`));
98
+ console.log(chalk_1.default.gray('\n Tracking: files, commits, AI usage'));
99
+ console.log(chalk_1.default.gray(' End with: cs end\n'));
100
+ }
59
101
  });
60
- // End command
102
+ // ─── End ───────────────────────────────────────────────────────
61
103
  program
62
104
  .command('end')
63
105
  .description('End the active session')
64
106
  .option('-n, --notes <notes>', 'Session notes')
107
+ .option('--json', 'Output JSON (for agents)')
65
108
  .action((options) => {
66
109
  const session = (0, db_1.getActiveSession)();
67
110
  if (!session) {
68
- console.log(chalk_1.default.yellow('\nNo active session.\n'));
111
+ if (options.json) {
112
+ console.log(JSON.stringify({ error: 'no_active_session' }));
113
+ }
114
+ else {
115
+ console.log(chalk_1.default.yellow('\nNo active session.\n'));
116
+ }
69
117
  return;
70
118
  }
71
119
  // Stop tracking
@@ -76,17 +124,26 @@ program
76
124
  (0, db_1.endSession)(session.id, new Date().toISOString(), options.notes);
77
125
  const updated = (0, db_1.getSession)(session.id);
78
126
  if (updated) {
79
- console.log(chalk_1.default.green('\n✓ Session ended\n'));
80
- (0, formatters_1.displaySession)(updated);
127
+ if (options.json) {
128
+ const files = (0, db_1.getFileChanges)(updated.id);
129
+ const commits = (0, db_1.getCommits)(updated.id);
130
+ const aiUsage = (0, db_1.getAIUsage)(updated.id);
131
+ console.log(JSON.stringify(sessionToJSON(updated, { files, commits, aiUsage })));
132
+ }
133
+ else {
134
+ console.log(chalk_1.default.green('\n✓ Session ended\n'));
135
+ (0, formatters_1.displaySession)(updated);
136
+ }
81
137
  }
82
138
  });
83
- // Show command
139
+ // ─── Show ──────────────────────────────────────────────────────
84
140
  program
85
141
  .command('show')
86
142
  .description('Show session details')
87
143
  .argument('[id]', 'Session ID (defaults to last session)')
88
144
  .option('--files', 'Show file changes')
89
145
  .option('--commits', 'Show commits')
146
+ .option('--json', 'Output JSON (for agents)')
90
147
  .action((id, options) => {
91
148
  let session;
92
149
  if (id) {
@@ -97,49 +154,92 @@ program
97
154
  session = sessions[0];
98
155
  }
99
156
  if (!session) {
100
- console.log(chalk_1.default.yellow('\nSession not found.\n'));
157
+ if (options.json) {
158
+ console.log(JSON.stringify({ error: 'session_not_found' }));
159
+ }
160
+ else {
161
+ console.log(chalk_1.default.yellow('\nSession not found.\n'));
162
+ }
101
163
  return;
102
164
  }
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);
165
+ if (options.json) {
166
+ const extras = {};
167
+ if (options.files)
168
+ extras.files = (0, db_1.getFileChanges)(session.id);
169
+ if (options.commits)
170
+ extras.commits = (0, db_1.getCommits)(session.id);
171
+ extras.aiUsage = (0, db_1.getAIUsage)(session.id);
172
+ console.log(JSON.stringify(sessionToJSON(session, extras)));
107
173
  }
108
- if (options.commits) {
109
- const commits = (0, db_1.getCommits)(session.id);
110
- (0, formatters_1.displayCommits)(commits);
174
+ else {
175
+ (0, formatters_1.displaySession)(session);
176
+ if (options.files) {
177
+ const files = (0, db_1.getFileChanges)(session.id);
178
+ (0, formatters_1.displayFileChanges)(files);
179
+ }
180
+ if (options.commits) {
181
+ const commits = (0, db_1.getCommits)(session.id);
182
+ (0, formatters_1.displayCommits)(commits);
183
+ }
111
184
  }
112
185
  });
113
- // List command
186
+ // ─── List ──────────────────────────────────────────────────────
114
187
  program
115
188
  .command('list')
116
189
  .alias('ls')
117
190
  .description('List recent sessions')
118
191
  .option('-l, --limit <number>', 'Number of sessions to show', parseInt, 10)
192
+ .option('--json', 'Output JSON (for agents)')
119
193
  .action((options) => {
120
194
  const sessions = (0, db_1.getSessions)(options.limit);
121
- (0, formatters_1.displaySessions)(sessions);
195
+ if (options.json) {
196
+ console.log(JSON.stringify(sessions.map((s) => sessionToJSON(s))));
197
+ }
198
+ else {
199
+ (0, formatters_1.displaySessions)(sessions);
200
+ }
122
201
  });
123
- // Stats command
202
+ // ─── Stats ─────────────────────────────────────────────────────
124
203
  program
125
204
  .command('stats')
126
205
  .description('Show overall statistics')
127
- .action(() => {
206
+ .option('--json', 'Output JSON (for agents)')
207
+ .action((options) => {
128
208
  const stats = (0, db_1.getStats)();
129
- (0, formatters_1.displayStats)(stats);
209
+ if (options.json) {
210
+ console.log(JSON.stringify({
211
+ totalSessions: stats.totalSessions,
212
+ totalTime: stats.totalTime,
213
+ totalTimeFormatted: (0, formatters_2.formatDuration)(stats.totalTime),
214
+ totalFiles: stats.totalFiles,
215
+ totalCommits: stats.totalCommits,
216
+ totalAICost: stats.totalAICost,
217
+ avgSessionTime: stats.avgSessionTime,
218
+ avgSessionFormatted: (0, formatters_2.formatDuration)(stats.avgSessionTime),
219
+ }));
220
+ }
221
+ else {
222
+ (0, formatters_1.displayStats)(stats);
223
+ }
130
224
  });
131
- // Log AI usage command
225
+ // ─── Log AI ────────────────────────────────────────────────────
132
226
  program
133
227
  .command('log-ai')
134
228
  .description('Log AI usage for active session')
135
- .requiredOption('-p, --provider <provider>', 'AI provider')
229
+ .requiredOption('-p, --provider <provider>', 'AI provider (anthropic, openai, google, etc.)')
136
230
  .requiredOption('-m, --model <model>', 'Model name')
137
231
  .requiredOption('-t, --tokens <tokens>', 'Total tokens', parseInt)
138
232
  .requiredOption('-c, --cost <cost>', 'Cost in dollars', parseFloat)
233
+ .option('--json', 'Output JSON (for agents)')
139
234
  .action((options) => {
140
235
  const session = (0, db_1.getActiveSession)();
141
236
  if (!session) {
142
- console.log(chalk_1.default.yellow('\nNo active session. Start one with: ds start <name>\n'));
237
+ if (options.json) {
238
+ console.log(JSON.stringify({ error: 'no_active_session' }));
239
+ }
240
+ else {
241
+ console.log(chalk_1.default.yellow('\nNo active session. Start one with: cs start <name>\n'));
242
+ }
143
243
  return;
144
244
  }
145
245
  (0, db_1.addAIUsage)({
@@ -150,19 +250,79 @@ program
150
250
  cost: options.cost,
151
251
  timestamp: new Date().toISOString(),
152
252
  });
153
- console.log(chalk_1.default.green(`\n✓ Logged AI usage: ${options.tokens.toLocaleString()} tokens, $${options.cost.toFixed(2)}\n`));
253
+ // Re-read the updated session
254
+ const updated = (0, db_1.getSession)(session.id);
255
+ if (options.json) {
256
+ console.log(JSON.stringify({
257
+ logged: { provider: options.provider, model: options.model, tokens: options.tokens, cost: options.cost },
258
+ session: { id: session.id, aiCost: updated?.aiCost || 0, aiTokens: updated?.aiTokens || 0 },
259
+ }));
260
+ }
261
+ else {
262
+ console.log(chalk_1.default.green(`\n✓ Logged: ${options.tokens.toLocaleString()} tokens, ${(0, formatters_2.formatCost)(options.cost)}`));
263
+ console.log(chalk_1.default.gray(` Session total: ${(updated?.aiTokens || 0).toLocaleString()} tokens, ${(0, formatters_2.formatCost)(updated?.aiCost || 0)}\n`));
264
+ }
154
265
  });
155
- // Status command
266
+ // ─── Status ────────────────────────────────────────────────────
156
267
  program
157
268
  .command('status')
158
269
  .description('Show active session status')
159
- .action(() => {
270
+ .option('--json', 'Output JSON (for agents)')
271
+ .action((options) => {
160
272
  const session = (0, db_1.getActiveSession)();
161
273
  if (!session) {
162
- console.log(chalk_1.default.yellow('\nNo active session.\n'));
274
+ if (options.json) {
275
+ console.log(JSON.stringify({ error: 'no_active_session' }));
276
+ }
277
+ else {
278
+ console.log(chalk_1.default.yellow('\nNo active session.\n'));
279
+ }
163
280
  return;
164
281
  }
165
- (0, formatters_1.displaySession)(session);
282
+ if (options.json) {
283
+ // Calculate live duration
284
+ const now = new Date();
285
+ const start = new Date(session.startTime);
286
+ const liveDuration = Math.floor((now.getTime() - start.getTime()) / 1000);
287
+ const aiUsage = (0, db_1.getAIUsage)(session.id);
288
+ console.log(JSON.stringify({
289
+ ...sessionToJSON(session),
290
+ liveDuration,
291
+ liveDurationFormatted: (0, formatters_2.formatDuration)(liveDuration),
292
+ aiUsage,
293
+ }));
294
+ }
295
+ else {
296
+ (0, formatters_1.displaySession)(session);
297
+ }
166
298
  });
167
- program.parse();
299
+ // Only parse CLI args when run directly (not when imported as a library)
300
+ if (require.main === module) {
301
+ program.parse();
302
+ }
303
+ // Programmatic API exports
304
+ var db_2 = require("./db");
305
+ Object.defineProperty(exports, "createSession", { enumerable: true, get: function () { return db_2.createSession; } });
306
+ Object.defineProperty(exports, "getActiveSession", { enumerable: true, get: function () { return db_2.getActiveSession; } });
307
+ Object.defineProperty(exports, "endSession", { enumerable: true, get: function () { return db_2.endSession; } });
308
+ Object.defineProperty(exports, "getSession", { enumerable: true, get: function () { return db_2.getSession; } });
309
+ Object.defineProperty(exports, "getSessions", { enumerable: true, get: function () { return db_2.getSessions; } });
310
+ Object.defineProperty(exports, "getStats", { enumerable: true, get: function () { return db_2.getStats; } });
311
+ Object.defineProperty(exports, "addFileChange", { enumerable: true, get: function () { return db_2.addFileChange; } });
312
+ Object.defineProperty(exports, "addCommit", { enumerable: true, get: function () { return db_2.addCommit; } });
313
+ Object.defineProperty(exports, "addAIUsage", { enumerable: true, get: function () { return db_2.addAIUsage; } });
314
+ Object.defineProperty(exports, "getFileChanges", { enumerable: true, get: function () { return db_2.getFileChanges; } });
315
+ Object.defineProperty(exports, "getCommits", { enumerable: true, get: function () { return db_2.getCommits; } });
316
+ Object.defineProperty(exports, "getAIUsage", { enumerable: true, get: function () { return db_2.getAIUsage; } });
317
+ var git_2 = require("./git");
318
+ Object.defineProperty(exports, "initGit", { enumerable: true, get: function () { return git_2.initGit; } });
319
+ Object.defineProperty(exports, "checkForNewCommits", { enumerable: true, get: function () { return git_2.checkForNewCommits; } });
320
+ Object.defineProperty(exports, "getGitInfo", { enumerable: true, get: function () { return git_2.getGitInfo; } });
321
+ var watcher_2 = require("./watcher");
322
+ Object.defineProperty(exports, "startWatcher", { enumerable: true, get: function () { return watcher_2.startWatcher; } });
323
+ Object.defineProperty(exports, "stopWatcher", { enumerable: true, get: function () { return watcher_2.stopWatcher; } });
324
+ var agents_1 = require("./agents");
325
+ Object.defineProperty(exports, "AgentSession", { enumerable: true, get: function () { return agents_1.AgentSession; } });
326
+ Object.defineProperty(exports, "BudgetExceededError", { enumerable: true, get: function () { return agents_1.BudgetExceededError; } });
327
+ Object.defineProperty(exports, "runAgentSession", { enumerable: true, get: function () { return agents_1.runAgentSession; } });
168
328
  //# 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/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.2.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,97 @@
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
+ user-invocable: true
5
+ metadata:
6
+ {
7
+ "openclaw":
8
+ {
9
+ "emoji": "📊",
10
+ "homepage": "https://github.com/brian-mwirigi/codesession-cli",
11
+ "requires": { "bins": ["cs"] },
12
+ "install":
13
+ [
14
+ {
15
+ "id": "npm",
16
+ "kind": "node",
17
+ "package": "codesession-cli",
18
+ "bins": ["cs"],
19
+ "label": "Install codesession-cli (npm)"
20
+ }
21
+ ]
22
+ }
23
+ }
24
+ ---
25
+
26
+ # Session Cost Tracking (codesession-cli)
27
+
28
+ You have access to `cs` (codesession-cli) for tracking session costs, file changes, and git activity.
29
+
30
+ ## When to use
31
+
32
+ - **Always** start a tracked session at the beginning of a multi-step task
33
+ - **Always** log AI usage after each API call you make
34
+ - **Always** end the session when the task is complete
35
+ - Check budget before expensive operations
36
+
37
+ ## Commands
38
+
39
+ ### Start tracking
40
+ ```bash
41
+ cs start "task description"
42
+ ```
43
+
44
+ ### Log AI usage (after each API call)
45
+ ```bash
46
+ cs log-ai -p <provider> -m <model> -t <tokens> -c <cost>
47
+ ```
48
+ Providers: `anthropic`, `openai`, `google`, `mistral`, `deepseek`
49
+
50
+ ### Check current status
51
+ ```bash
52
+ cs status --json
53
+ ```
54
+ Returns JSON with current session cost, tokens, files changed, duration.
55
+
56
+ ### End session and get summary
57
+ ```bash
58
+ cs end -n "completion notes"
59
+ ```
60
+
61
+ ### View session details with full breakdown
62
+ ```bash
63
+ cs show --json --files --commits
64
+ ```
65
+
66
+ ### View historical stats
67
+ ```bash
68
+ cs stats --json
69
+ ```
70
+
71
+ ## Workflow
72
+
73
+ 1. At task start: `cs start "Fix authentication bug"`
74
+ 2. After each AI call: `cs log-ai -p anthropic -m claude-opus-4-6 -t 15000 -c 0.30`
75
+ 3. Check spend: `cs status --json` → read `aiCost` field
76
+ 4. At task end: `cs end -n "Fixed the auth bug, added tests"`
77
+
78
+ ## Cost estimation guide
79
+
80
+ | Model | Input (per 1M tokens) | Output (per 1M tokens) |
81
+ |-------|----------------------|----------------------|
82
+ | claude-opus-4-6 | $15.00 | $75.00 |
83
+ | claude-sonnet-4-5 | $3.00 | $15.00 |
84
+ | gpt-4o | $2.50 | $10.00 |
85
+ | gpt-4.1 | $2.00 | $8.00 |
86
+ | gemini-2.5-pro | $1.25 | $10.00 |
87
+
88
+ ## Budget awareness
89
+
90
+ If the user has set a budget or you detect high spending:
91
+ - Check `cs status --json` before expensive operations
92
+ - Warn the user if `aiCost` exceeds $5.00 in a single session
93
+ - Suggest cheaper models if costs are escalating
94
+
95
+ ## JSON output
96
+
97
+ All commands support `--json` for machine-readable output. Use this when you need to parse session data programmatically.