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/README.md +201 -119
- package/dist/agents.d.ts +155 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +308 -0
- package/dist/agents.js.map +1 -0
- package/dist/db.d.ts +1 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +44 -5
- 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 +290 -54
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +30 -5
- package/skills/codesession/SKILL.md +92 -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/agents.js
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent Sessions - Programmatic API for AI agents
|
|
4
|
+
*
|
|
5
|
+
* Track agent runs with automatic file watching, git tracking,
|
|
6
|
+
* AI cost logging, and budget enforcement.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { AgentSession } from 'codesession-cli/agents';
|
|
11
|
+
*
|
|
12
|
+
* const session = new AgentSession('Refactor auth module', {
|
|
13
|
+
* budget: 5.00,
|
|
14
|
+
* directory: './src',
|
|
15
|
+
* git: true,
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* session.start();
|
|
19
|
+
* // ... agent does work ...
|
|
20
|
+
* const summary = session.end();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.BudgetExceededError = exports.AgentSession = void 0;
|
|
25
|
+
exports.runAgentSession = runAgentSession;
|
|
26
|
+
const db_1 = require("./db");
|
|
27
|
+
const git_1 = require("./git");
|
|
28
|
+
const watcher_1 = require("./watcher");
|
|
29
|
+
class AgentSession {
|
|
30
|
+
constructor(name, config = {}) {
|
|
31
|
+
this.sessionId = null;
|
|
32
|
+
this.gitInterval = null;
|
|
33
|
+
this.totalCost = 0;
|
|
34
|
+
this.totalTokens = 0;
|
|
35
|
+
this.started = false;
|
|
36
|
+
this.ended = false;
|
|
37
|
+
this.name = name;
|
|
38
|
+
this.config = {
|
|
39
|
+
git: true,
|
|
40
|
+
gitPollInterval: 5000,
|
|
41
|
+
...config,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Start the agent session. Begins file watching and git tracking.
|
|
46
|
+
* @returns The session ID
|
|
47
|
+
*/
|
|
48
|
+
start() {
|
|
49
|
+
if (this.started) {
|
|
50
|
+
throw new Error(`Session "${this.name}" is already started.`);
|
|
51
|
+
}
|
|
52
|
+
if (this.ended) {
|
|
53
|
+
throw new Error(`Session "${this.name}" has already ended. Create a new AgentSession.`);
|
|
54
|
+
}
|
|
55
|
+
const cwd = this.config.directory || process.cwd();
|
|
56
|
+
this.sessionId = (0, db_1.createSession)({
|
|
57
|
+
name: this.name,
|
|
58
|
+
startTime: new Date().toISOString(),
|
|
59
|
+
workingDirectory: cwd,
|
|
60
|
+
filesChanged: 0,
|
|
61
|
+
commits: 0,
|
|
62
|
+
aiCost: 0,
|
|
63
|
+
aiTokens: 0,
|
|
64
|
+
status: 'active',
|
|
65
|
+
});
|
|
66
|
+
// Start file watcher
|
|
67
|
+
(0, watcher_1.startWatcher)(this.sessionId, cwd);
|
|
68
|
+
// Start git polling
|
|
69
|
+
if (this.config.git) {
|
|
70
|
+
(0, git_1.initGit)(cwd);
|
|
71
|
+
this.gitInterval = setInterval(async () => {
|
|
72
|
+
if (this.sessionId) {
|
|
73
|
+
await (0, git_1.checkForNewCommits)(this.sessionId);
|
|
74
|
+
}
|
|
75
|
+
}, this.config.gitPollInterval);
|
|
76
|
+
}
|
|
77
|
+
this.started = true;
|
|
78
|
+
return this.sessionId;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Log AI usage for this session. Automatically checks budget.
|
|
82
|
+
* Cost is optional — auto-calculated from built-in pricing if omitted (requires known model).
|
|
83
|
+
* @returns The remaining budget (null if no budget set)
|
|
84
|
+
* @throws BudgetExceededError if budget is exceeded
|
|
85
|
+
*/
|
|
86
|
+
logAI(provider, model, tokens, cost, options) {
|
|
87
|
+
this.assertStarted();
|
|
88
|
+
(0, db_1.addAIUsage)({
|
|
89
|
+
sessionId: this.sessionId,
|
|
90
|
+
provider,
|
|
91
|
+
model,
|
|
92
|
+
tokens,
|
|
93
|
+
promptTokens: options?.promptTokens,
|
|
94
|
+
completionTokens: options?.completionTokens,
|
|
95
|
+
cost,
|
|
96
|
+
timestamp: new Date().toISOString(),
|
|
97
|
+
});
|
|
98
|
+
this.totalCost += cost;
|
|
99
|
+
this.totalTokens += tokens;
|
|
100
|
+
// Notify callback
|
|
101
|
+
if (this.config.onAIUsage) {
|
|
102
|
+
this.config.onAIUsage(cost, this.totalCost, model);
|
|
103
|
+
}
|
|
104
|
+
// Check budget
|
|
105
|
+
if (this.config.budget !== undefined && this.totalCost >= this.config.budget) {
|
|
106
|
+
if (this.config.onBudgetExceeded) {
|
|
107
|
+
this.config.onBudgetExceeded(this.totalCost, this.config.budget);
|
|
108
|
+
}
|
|
109
|
+
this.end(`Budget exceeded: $${this.totalCost.toFixed(2)} / $${this.config.budget.toFixed(2)}`);
|
|
110
|
+
throw new BudgetExceededError(this.totalCost, this.config.budget);
|
|
111
|
+
}
|
|
112
|
+
return this.config.budget !== undefined
|
|
113
|
+
? Math.max(0, this.config.budget - this.totalCost)
|
|
114
|
+
: null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check how much budget remains.
|
|
118
|
+
* @returns Remaining budget in dollars, or null if no budget set
|
|
119
|
+
*/
|
|
120
|
+
get budgetRemaining() {
|
|
121
|
+
if (this.config.budget === undefined)
|
|
122
|
+
return null;
|
|
123
|
+
return Math.max(0, this.config.budget - this.totalCost);
|
|
124
|
+
}
|
|
125
|
+
/** Current total cost spent in this session */
|
|
126
|
+
get spent() {
|
|
127
|
+
return this.totalCost;
|
|
128
|
+
}
|
|
129
|
+
/** Current total tokens used in this session */
|
|
130
|
+
get tokens() {
|
|
131
|
+
return this.totalTokens;
|
|
132
|
+
}
|
|
133
|
+
/** Whether this session is currently active */
|
|
134
|
+
get isActive() {
|
|
135
|
+
return this.started && !this.ended;
|
|
136
|
+
}
|
|
137
|
+
/** The database session ID (null if not started) */
|
|
138
|
+
get id() {
|
|
139
|
+
return this.sessionId;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* End the agent session and return a full summary.
|
|
143
|
+
*/
|
|
144
|
+
end(notes) {
|
|
145
|
+
this.assertStarted();
|
|
146
|
+
// Stop tracking
|
|
147
|
+
(0, watcher_1.stopWatcher)();
|
|
148
|
+
if (this.gitInterval) {
|
|
149
|
+
clearInterval(this.gitInterval);
|
|
150
|
+
this.gitInterval = null;
|
|
151
|
+
}
|
|
152
|
+
const endTime = new Date().toISOString();
|
|
153
|
+
(0, db_1.endSession)(this.sessionId, endTime, notes);
|
|
154
|
+
this.ended = true;
|
|
155
|
+
// Build summary
|
|
156
|
+
const session = (0, db_1.getSession)(this.sessionId);
|
|
157
|
+
const files = (0, db_1.getFileChanges)(this.sessionId);
|
|
158
|
+
const commits = (0, db_1.getCommits)(this.sessionId);
|
|
159
|
+
const aiUsage = (0, db_1.getAIUsage)(this.sessionId);
|
|
160
|
+
return {
|
|
161
|
+
sessionId: this.sessionId,
|
|
162
|
+
name: this.name,
|
|
163
|
+
duration: session.duration || 0,
|
|
164
|
+
filesChanged: session.filesChanged,
|
|
165
|
+
commits: session.commits,
|
|
166
|
+
aiCost: session.aiCost,
|
|
167
|
+
aiTokens: session.aiTokens,
|
|
168
|
+
budgetRemaining: this.config.budget !== undefined
|
|
169
|
+
? Math.max(0, this.config.budget - session.aiCost)
|
|
170
|
+
: null,
|
|
171
|
+
files: files.map((f) => ({
|
|
172
|
+
path: f.filePath,
|
|
173
|
+
type: f.changeType,
|
|
174
|
+
timestamp: f.timestamp,
|
|
175
|
+
})),
|
|
176
|
+
commitList: commits.map((c) => ({
|
|
177
|
+
hash: c.hash,
|
|
178
|
+
message: c.message,
|
|
179
|
+
timestamp: c.timestamp,
|
|
180
|
+
})),
|
|
181
|
+
aiUsageBreakdown: aiUsage.map((a) => ({
|
|
182
|
+
provider: a.provider,
|
|
183
|
+
model: a.model,
|
|
184
|
+
tokens: a.tokens,
|
|
185
|
+
cost: a.cost,
|
|
186
|
+
timestamp: a.timestamp,
|
|
187
|
+
})),
|
|
188
|
+
metadata: this.config.metadata,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Check if an AI call would exceed the budget.
|
|
193
|
+
* Useful for pre-flight checks before making expensive API calls.
|
|
194
|
+
* @returns true if the call would stay within budget
|
|
195
|
+
*/
|
|
196
|
+
canAfford(estimatedCost) {
|
|
197
|
+
if (this.config.budget === undefined)
|
|
198
|
+
return true;
|
|
199
|
+
return this.totalCost + estimatedCost <= this.config.budget;
|
|
200
|
+
}
|
|
201
|
+
assertStarted() {
|
|
202
|
+
if (!this.started) {
|
|
203
|
+
throw new Error(`Session "${this.name}" has not been started. Call .start() first.`);
|
|
204
|
+
}
|
|
205
|
+
if (this.ended) {
|
|
206
|
+
throw new Error(`Session "${this.name}" has already ended.`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.AgentSession = AgentSession;
|
|
211
|
+
/**
|
|
212
|
+
* Thrown when an agent session exceeds its budget.
|
|
213
|
+
* Catch this to handle budget enforcement gracefully.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* try {
|
|
218
|
+
* session.logAI('openai', 'gpt-4o', 5000, 0.10);
|
|
219
|
+
* } catch (e) {
|
|
220
|
+
* if (e instanceof BudgetExceededError) {
|
|
221
|
+
* console.log(`Over budget: spent $${e.spent}, limit $${e.budget}`);
|
|
222
|
+
* }
|
|
223
|
+
* }
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
class BudgetExceededError extends Error {
|
|
227
|
+
constructor(spent, budget) {
|
|
228
|
+
super(`Budget exceeded: spent $${spent.toFixed(2)} of $${budget.toFixed(2)} limit`);
|
|
229
|
+
this.name = 'BudgetExceededError';
|
|
230
|
+
this.spent = spent;
|
|
231
|
+
this.budget = budget;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.BudgetExceededError = BudgetExceededError;
|
|
235
|
+
/**
|
|
236
|
+
* Quick helper to run an agent function within a tracked session.
|
|
237
|
+
* Handles start/end/error automatically.
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```typescript
|
|
241
|
+
* const summary = await runAgentSession('Fix all linting errors', {
|
|
242
|
+
* budget: 3.00,
|
|
243
|
+
* directory: './src',
|
|
244
|
+
* }, async (session) => {
|
|
245
|
+
* // Your agent logic here
|
|
246
|
+
* const response = await openai.chat.completions.create({ ... });
|
|
247
|
+
* session.logAI('openai', 'gpt-4o', response.usage.total_tokens, 0.05);
|
|
248
|
+
* });
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
async function runAgentSession(name, config, agentFn) {
|
|
252
|
+
const session = new AgentSession(name, config);
|
|
253
|
+
session.start();
|
|
254
|
+
try {
|
|
255
|
+
await agentFn(session);
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
if (error instanceof BudgetExceededError) {
|
|
259
|
+
// Session already ended by logAI, return summary from DB
|
|
260
|
+
const dbSession = (0, db_1.getSession)(session.id);
|
|
261
|
+
const files = (0, db_1.getFileChanges)(session.id);
|
|
262
|
+
const commits = (0, db_1.getCommits)(session.id);
|
|
263
|
+
const aiUsage = (0, db_1.getAIUsage)(session.id);
|
|
264
|
+
return {
|
|
265
|
+
sessionId: session.id,
|
|
266
|
+
name,
|
|
267
|
+
duration: dbSession.duration || 0,
|
|
268
|
+
filesChanged: dbSession.filesChanged,
|
|
269
|
+
commits: dbSession.commits,
|
|
270
|
+
aiCost: dbSession.aiCost,
|
|
271
|
+
aiTokens: dbSession.aiTokens,
|
|
272
|
+
budgetRemaining: 0,
|
|
273
|
+
files: files.map((f) => ({ path: f.filePath, type: f.changeType, timestamp: f.timestamp })),
|
|
274
|
+
commitList: commits.map((c) => ({ hash: c.hash, message: c.message, timestamp: c.timestamp })),
|
|
275
|
+
aiUsageBreakdown: aiUsage.map((a) => ({ provider: a.provider, model: a.model, tokens: a.tokens, cost: a.cost, timestamp: a.timestamp })),
|
|
276
|
+
metadata: config.metadata,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
// For non-budget errors, end session with error note and re-throw
|
|
280
|
+
if (session.isActive) {
|
|
281
|
+
session.end(`Error: ${error.message}`);
|
|
282
|
+
}
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
if (session.isActive) {
|
|
286
|
+
return session.end();
|
|
287
|
+
}
|
|
288
|
+
// Session was ended during agentFn (e.g. explicit end call)
|
|
289
|
+
const dbSession = (0, db_1.getSession)(session.id);
|
|
290
|
+
const files = (0, db_1.getFileChanges)(session.id);
|
|
291
|
+
const commitsList = (0, db_1.getCommits)(session.id);
|
|
292
|
+
const aiUsage = (0, db_1.getAIUsage)(session.id);
|
|
293
|
+
return {
|
|
294
|
+
sessionId: session.id,
|
|
295
|
+
name,
|
|
296
|
+
duration: dbSession.duration || 0,
|
|
297
|
+
filesChanged: dbSession.filesChanged,
|
|
298
|
+
commits: dbSession.commits,
|
|
299
|
+
aiCost: dbSession.aiCost,
|
|
300
|
+
aiTokens: dbSession.aiTokens,
|
|
301
|
+
budgetRemaining: config.budget !== undefined ? Math.max(0, config.budget - dbSession.aiCost) : null,
|
|
302
|
+
files: files.map((f) => ({ path: f.filePath, type: f.changeType, timestamp: f.timestamp })),
|
|
303
|
+
commitList: commitsList.map((c) => ({ hash: c.hash, message: c.message, timestamp: c.timestamp })),
|
|
304
|
+
aiUsageBreakdown: aiUsage.map((a) => ({ provider: a.provider, model: a.model, tokens: a.tokens, cost: a.cost, timestamp: a.timestamp })),
|
|
305
|
+
metadata: config.metadata,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/db.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare function addAIUsage(usage: Omit<AIUsage, 'id'>): void;
|
|
|
10
10
|
export declare function getFileChanges(sessionId: number): FileChange[];
|
|
11
11
|
export declare function getCommits(sessionId: number): Commit[];
|
|
12
12
|
export declare function getAIUsage(sessionId: number): AIUsage[];
|
|
13
|
+
export declare function exportSessions(format: 'json' | 'csv', limit?: number): string;
|
|
13
14
|
export declare function getStats(): SessionStats;
|
|
14
15
|
export declare function closeDb(): void;
|
|
15
16
|
//# sourceMappingURL=db.d.ts.map
|
package/dist/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA8E7E,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,MAAM,CAOlE;AAED,wBAAgB,gBAAgB,IAAI,OAAO,GAAG,IAAI,CAKjD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAYnF;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAI5D;AAED,wBAAgB,WAAW,CAAC,KAAK,SAAK,GAAG,OAAO,EAAE,CAIjD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,CAalE;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAa1D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAkB3D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CAU9D;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAcvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB7E;AAED,wBAAgB,QAAQ,IAAI,YAAY,CAqBvC;AAmBD,wBAAgB,OAAO,IAAI,IAAI,CAE9B"}
|
package/dist/db.js
CHANGED
|
@@ -14,6 +14,7 @@ exports.addAIUsage = addAIUsage;
|
|
|
14
14
|
exports.getFileChanges = getFileChanges;
|
|
15
15
|
exports.getCommits = getCommits;
|
|
16
16
|
exports.getAIUsage = getAIUsage;
|
|
17
|
+
exports.exportSessions = exportSessions;
|
|
17
18
|
exports.getStats = getStats;
|
|
18
19
|
exports.closeDb = closeDb;
|
|
19
20
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
@@ -26,6 +27,9 @@ if (!(0, fs_1.existsSync)(DB_DIR)) {
|
|
|
26
27
|
(0, fs_1.mkdirSync)(DB_DIR, { recursive: true });
|
|
27
28
|
}
|
|
28
29
|
const db = new better_sqlite3_1.default(DB_PATH);
|
|
30
|
+
// Enable WAL mode + busy timeout for concurrent access safety
|
|
31
|
+
db.pragma('journal_mode = WAL');
|
|
32
|
+
db.pragma('busy_timeout = 5000');
|
|
29
33
|
// Initialize database
|
|
30
34
|
db.exec(`
|
|
31
35
|
CREATE TABLE IF NOT EXISTS sessions (
|
|
@@ -70,11 +74,22 @@ db.exec(`
|
|
|
70
74
|
provider TEXT NOT NULL,
|
|
71
75
|
model TEXT NOT NULL,
|
|
72
76
|
tokens INTEGER NOT NULL,
|
|
77
|
+
prompt_tokens INTEGER,
|
|
78
|
+
completion_tokens INTEGER,
|
|
73
79
|
cost REAL NOT NULL,
|
|
74
80
|
timestamp TEXT NOT NULL,
|
|
75
81
|
FOREIGN KEY (session_id) REFERENCES sessions(id)
|
|
76
82
|
)
|
|
77
83
|
`);
|
|
84
|
+
// Migration: add granular token columns if missing
|
|
85
|
+
try {
|
|
86
|
+
db.exec('ALTER TABLE ai_usage ADD COLUMN prompt_tokens INTEGER');
|
|
87
|
+
}
|
|
88
|
+
catch (_) { /* column already exists */ }
|
|
89
|
+
try {
|
|
90
|
+
db.exec('ALTER TABLE ai_usage ADD COLUMN completion_tokens INTEGER');
|
|
91
|
+
}
|
|
92
|
+
catch (_) { /* column already exists */ }
|
|
78
93
|
function createSession(session) {
|
|
79
94
|
const stmt = db.prepare(`
|
|
80
95
|
INSERT INTO sessions (name, start_time, working_directory, status)
|
|
@@ -138,10 +153,10 @@ function addCommit(commit) {
|
|
|
138
153
|
}
|
|
139
154
|
function addAIUsage(usage) {
|
|
140
155
|
const stmt = db.prepare(`
|
|
141
|
-
INSERT INTO ai_usage (session_id, provider, model, tokens, cost, timestamp)
|
|
142
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
156
|
+
INSERT INTO ai_usage (session_id, provider, model, tokens, prompt_tokens, completion_tokens, cost, timestamp)
|
|
157
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
143
158
|
`);
|
|
144
|
-
stmt.run(usage.sessionId, usage.provider, usage.model, usage.tokens, usage.cost, usage.timestamp);
|
|
159
|
+
stmt.run(usage.sessionId, usage.provider, usage.model, usage.tokens, usage.promptTokens || null, usage.completionTokens || null, usage.cost, usage.timestamp);
|
|
145
160
|
// Update session AI totals
|
|
146
161
|
const sumStmt = db.prepare(`
|
|
147
162
|
SELECT SUM(cost) as total_cost, SUM(tokens) as total_tokens
|
|
@@ -149,7 +164,9 @@ function addAIUsage(usage) {
|
|
|
149
164
|
`);
|
|
150
165
|
const result = sumStmt.get(usage.sessionId);
|
|
151
166
|
const updateStmt = db.prepare('UPDATE sessions SET ai_cost = ?, ai_tokens = ? WHERE id = ?');
|
|
152
|
-
|
|
167
|
+
// Round to 10 decimal places to prevent floating-point accumulation drift
|
|
168
|
+
const roundedCost = Math.round((result.total_cost || 0) * 1e10) / 1e10;
|
|
169
|
+
updateStmt.run(roundedCost, result.total_tokens || 0, usage.sessionId);
|
|
153
170
|
}
|
|
154
171
|
function getFileChanges(sessionId) {
|
|
155
172
|
const stmt = db.prepare('SELECT * FROM file_changes WHERE session_id = ? ORDER BY timestamp');
|
|
@@ -182,10 +199,32 @@ function getAIUsage(sessionId) {
|
|
|
182
199
|
provider: row.provider,
|
|
183
200
|
model: row.model,
|
|
184
201
|
tokens: row.tokens,
|
|
202
|
+
promptTokens: row.prompt_tokens || undefined,
|
|
203
|
+
completionTokens: row.completion_tokens || undefined,
|
|
185
204
|
cost: row.cost,
|
|
186
205
|
timestamp: row.timestamp,
|
|
187
206
|
}));
|
|
188
207
|
}
|
|
208
|
+
function exportSessions(format, limit) {
|
|
209
|
+
const sessions = getSessions(limit || 999999);
|
|
210
|
+
if (format === 'json') {
|
|
211
|
+
const full = sessions.map((s) => {
|
|
212
|
+
const aiUsage = getAIUsage(s.id);
|
|
213
|
+
const files = getFileChanges(s.id);
|
|
214
|
+
const commits = getCommits(s.id);
|
|
215
|
+
return { ...s, aiUsage, files, commits };
|
|
216
|
+
});
|
|
217
|
+
return JSON.stringify(full, null, 2);
|
|
218
|
+
}
|
|
219
|
+
// CSV
|
|
220
|
+
const header = 'id,name,status,startTime,endTime,duration,filesChanged,commits,aiTokens,aiCost,notes';
|
|
221
|
+
const rows = sessions.map((s) => [
|
|
222
|
+
s.id, `"${(s.name || '').replace(/"/g, '""')}"`, s.status, s.startTime, s.endTime || '',
|
|
223
|
+
s.duration || '', s.filesChanged, s.commits, s.aiTokens,
|
|
224
|
+
s.aiCost, `"${(s.notes || '').replace(/"/g, '""')}"`
|
|
225
|
+
].join(','));
|
|
226
|
+
return [header, ...rows].join('\n');
|
|
227
|
+
}
|
|
189
228
|
function getStats() {
|
|
190
229
|
const stmt = db.prepare(`
|
|
191
230
|
SELECT
|
|
@@ -217,7 +256,7 @@ function mapSession(row) {
|
|
|
217
256
|
workingDirectory: row.working_directory,
|
|
218
257
|
filesChanged: row.files_changed,
|
|
219
258
|
commits: row.commits,
|
|
220
|
-
aiCost: row.ai_cost,
|
|
259
|
+
aiCost: Math.round((row.ai_cost || 0) * 1e10) / 1e10,
|
|
221
260
|
aiTokens: row.ai_tokens,
|
|
222
261
|
notes: row.notes,
|
|
223
262
|
status: row.status,
|
package/dist/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export {};
|
|
2
|
+
export { createSession, getActiveSession, endSession, getSession, getSessions, getStats, addFileChange, addCommit, addAIUsage, getFileChanges, getCommits, getAIUsage, exportSessions } from './db';
|
|
3
|
+
export { initGit, checkForNewCommits, getGitInfo } from './git';
|
|
4
|
+
export { startWatcher, stopWatcher } from './watcher';
|
|
5
|
+
export { Session, FileChange, Commit, AIUsage, SessionStats } from './types';
|
|
6
|
+
export { AgentSession, AgentSessionConfig, AgentSessionSummary, BudgetExceededError, runAgentSession } from './agents';
|
|
3
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA4ZA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACpM,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
|