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/README.md +179 -119
- package/dist/agents.d.ts +151 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +305 -0
- package/dist/agents.js.map +1 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +4 -2
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +210 -50
- package/dist/index.js.map +1 -1
- package/package.json +30 -5
- package/skills/codesession/SKILL.md +97 -0
- package/src/db.ts +0 -239
- package/src/formatters.ts +0 -152
- package/src/git.ts +0 -44
- package/src/index.ts +0 -206
- package/src/types.ts +0 -49
- package/src/watcher.ts +0 -52
- package/test.ts +0 -4
- package/tsconfig.json +0 -20
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('
|
|
16
|
-
.description('Track
|
|
17
|
-
.version('1.
|
|
18
|
-
//
|
|
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
|
-
.
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
80
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
(
|
|
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
|
|
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
|
-
(
|
|
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
|
|
202
|
+
// ─── Stats ─────────────────────────────────────────────────────
|
|
124
203
|
program
|
|
125
204
|
.command('stats')
|
|
126
205
|
.description('Show overall statistics')
|
|
127
|
-
.
|
|
206
|
+
.option('--json', 'Output JSON (for agents)')
|
|
207
|
+
.action((options) => {
|
|
128
208
|
const stats = (0, db_1.getStats)();
|
|
129
|
-
(
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
266
|
+
// ─── Status ────────────────────────────────────────────────────
|
|
156
267
|
program
|
|
157
268
|
.command('status')
|
|
158
269
|
.description('Show active session status')
|
|
159
|
-
.
|
|
270
|
+
.option('--json', 'Output JSON (for agents)')
|
|
271
|
+
.action((options) => {
|
|
160
272
|
const session = (0, db_1.getActiveSession)();
|
|
161
273
|
if (!session) {
|
|
162
|
-
|
|
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
|
-
(
|
|
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
|
-
|
|
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.
|
|
4
|
-
"description": "Track
|
|
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
|
-
"
|
|
34
|
+
"ai-agent",
|
|
35
|
+
"openclaw",
|
|
36
|
+
"claude-code",
|
|
37
|
+
"cost-tracking",
|
|
38
|
+
"token-tracking",
|
|
22
39
|
"git",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
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.
|