@agenttrace-io/sdk 0.1.9
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/benchmark.d.ts +79 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +324 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/index.d.ts +358 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1169 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/001-initial.d.ts +5 -0
- package/dist/migrations/001-initial.d.ts.map +1 -0
- package/dist/migrations/001-initial.js +86 -0
- package/dist/migrations/001-initial.js.map +1 -0
- package/dist/migrations/002-scores.d.ts +5 -0
- package/dist/migrations/002-scores.d.ts.map +1 -0
- package/dist/migrations/002-scores.js +17 -0
- package/dist/migrations/002-scores.js.map +1 -0
- package/dist/migrations/003-alerts.d.ts +5 -0
- package/dist/migrations/003-alerts.d.ts.map +1 -0
- package/dist/migrations/003-alerts.js +27 -0
- package/dist/migrations/003-alerts.js.map +1 -0
- package/dist/migrations/004-trace-context.d.ts +5 -0
- package/dist/migrations/004-trace-context.d.ts.map +1 -0
- package/dist/migrations/004-trace-context.js +16 -0
- package/dist/migrations/004-trace-context.js.map +1 -0
- package/dist/migrations/005-agent-usage.d.ts +5 -0
- package/dist/migrations/005-agent-usage.d.ts.map +1 -0
- package/dist/migrations/005-agent-usage.js +27 -0
- package/dist/migrations/005-agent-usage.js.map +1 -0
- package/dist/migrations/005-webhooks.d.ts +5 -0
- package/dist/migrations/005-webhooks.d.ts.map +1 -0
- package/dist/migrations/005-webhooks.js +33 -0
- package/dist/migrations/005-webhooks.js.map +1 -0
- package/dist/migrations/006-api-keys.d.ts +5 -0
- package/dist/migrations/006-api-keys.d.ts.map +1 -0
- package/dist/migrations/006-api-keys.js +27 -0
- package/dist/migrations/006-api-keys.js.map +1 -0
- package/dist/migrations.d.ts +29 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +107 -0
- package/dist/migrations.js.map +1 -0
- package/dist/rate-limiter.d.ts +34 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +74 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/self-track.d.ts +42 -0
- package/dist/self-track.d.ts.map +1 -0
- package/dist/self-track.js +288 -0
- package/dist/self-track.js.map +1 -0
- package/dist/storage.d.ts +149 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +1479 -0
- package/dist/storage.js.map +1 -0
- package/dist/types.d.ts +323 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentTrace -- Token Bucket Rate Limiter
|
|
3
|
+
*
|
|
4
|
+
* Prevents trace flooding by enforcing per-second and per-minute
|
|
5
|
+
* rate limits using a token bucket algorithm.
|
|
6
|
+
*/
|
|
7
|
+
export class TokenBucketRateLimiter {
|
|
8
|
+
secondBucket;
|
|
9
|
+
minuteBucket;
|
|
10
|
+
_droppedTraces = 0;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
// Per-second bucket
|
|
13
|
+
this.secondBucket = {
|
|
14
|
+
tokens: config.burstAllowance,
|
|
15
|
+
lastRefill: Date.now(),
|
|
16
|
+
maxTokens: config.maxTracesPerSecond + config.burstAllowance,
|
|
17
|
+
refillRatePerMs: config.maxTracesPerSecond / 1000,
|
|
18
|
+
};
|
|
19
|
+
// Per-minute bucket
|
|
20
|
+
this.minuteBucket = {
|
|
21
|
+
tokens: config.burstAllowance,
|
|
22
|
+
lastRefill: Date.now(),
|
|
23
|
+
maxTokens: config.maxTracesPerMinute + config.burstAllowance,
|
|
24
|
+
refillRatePerMs: config.maxTracesPerMinute / 60000,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Try to consume one token. Returns true if allowed, false if rate-limited.
|
|
29
|
+
*/
|
|
30
|
+
tryConsume() {
|
|
31
|
+
this.refill();
|
|
32
|
+
const secondOk = this.secondBucket.refillRatePerMs === 0 || this.secondBucket.tokens >= 1;
|
|
33
|
+
const minuteOk = this.minuteBucket.refillRatePerMs === 0 || this.minuteBucket.tokens >= 1;
|
|
34
|
+
if (secondOk && minuteOk) {
|
|
35
|
+
if (this.secondBucket.refillRatePerMs > 0)
|
|
36
|
+
this.secondBucket.tokens -= 1;
|
|
37
|
+
if (this.minuteBucket.refillRatePerMs > 0)
|
|
38
|
+
this.minuteBucket.tokens -= 1;
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
this._droppedTraces++;
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the total number of traces dropped due to rate limiting.
|
|
46
|
+
*/
|
|
47
|
+
getDroppedTraces() {
|
|
48
|
+
return this._droppedTraces;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Reset the dropped traces counter.
|
|
52
|
+
*/
|
|
53
|
+
resetDroppedTraces() {
|
|
54
|
+
this._droppedTraces = 0;
|
|
55
|
+
}
|
|
56
|
+
refill() {
|
|
57
|
+
const now = Date.now();
|
|
58
|
+
// Refill second bucket
|
|
59
|
+
if (this.secondBucket.refillRatePerMs > 0) {
|
|
60
|
+
const elapsed = now - this.secondBucket.lastRefill;
|
|
61
|
+
const tokensToAdd = elapsed * this.secondBucket.refillRatePerMs;
|
|
62
|
+
this.secondBucket.tokens = Math.min(this.secondBucket.maxTokens, this.secondBucket.tokens + tokensToAdd);
|
|
63
|
+
this.secondBucket.lastRefill = now;
|
|
64
|
+
}
|
|
65
|
+
// Refill minute bucket
|
|
66
|
+
if (this.minuteBucket.refillRatePerMs > 0) {
|
|
67
|
+
const elapsed = now - this.minuteBucket.lastRefill;
|
|
68
|
+
const tokensToAdd = elapsed * this.minuteBucket.refillRatePerMs;
|
|
69
|
+
this.minuteBucket.tokens = Math.min(this.minuteBucket.maxTokens, this.minuteBucket.tokens + tokensToAdd);
|
|
70
|
+
this.minuteBucket.lastRefill = now;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentTrace Self-Tracker
|
|
3
|
+
* Thin wrapper for AI agents to automatically track their own operations
|
|
4
|
+
* via AgentTrace storage + JSONL log for external consumption.
|
|
5
|
+
*/
|
|
6
|
+
export interface SelfTrackerConfig {
|
|
7
|
+
agentName: string;
|
|
8
|
+
agentType: string;
|
|
9
|
+
dbPath?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class SelfTracker {
|
|
12
|
+
private agentName;
|
|
13
|
+
private agentType;
|
|
14
|
+
private storage;
|
|
15
|
+
private dbPath;
|
|
16
|
+
private logPath;
|
|
17
|
+
private currentSessionId;
|
|
18
|
+
private sessionStartTime;
|
|
19
|
+
constructor(config: SelfTrackerConfig);
|
|
20
|
+
private ensureLogDir;
|
|
21
|
+
private appendLog;
|
|
22
|
+
private ensureSession;
|
|
23
|
+
startSession(): string;
|
|
24
|
+
trackAction(action: string, target: string, metadata?: Record<string, unknown>): void;
|
|
25
|
+
trackDelegation(targetAgent: string, task: string): void;
|
|
26
|
+
trackResearch(query: string, results: number): void;
|
|
27
|
+
trackImplementation(files: string[], linesOfCode: number): void;
|
|
28
|
+
trackReview(prNumber: string, status: string): void;
|
|
29
|
+
endSession(): void;
|
|
30
|
+
getSessionStats(): {
|
|
31
|
+
sessionId: string;
|
|
32
|
+
actions: number;
|
|
33
|
+
duration: number;
|
|
34
|
+
tokens: number;
|
|
35
|
+
cost: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Close underlying storage (for cleanup in tests / long running)
|
|
39
|
+
*/
|
|
40
|
+
close(): void;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=self-track.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-track.d.ts","sourceRoot":"","sources":["../src/self-track.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,MAAM,EAAE,iBAAiB;IAUrC,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,aAAa;IAOrB,YAAY,IAAI,MAAM;IA0BtB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAuCzF,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAqCxD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAqCnD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAqC/D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAqCnD,UAAU,IAAI,IAAI;IAgBlB,eAAe,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd;IAgBD;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentTrace Self-Tracker
|
|
3
|
+
* Thin wrapper for AI agents to automatically track their own operations
|
|
4
|
+
* via AgentTrace storage + JSONL log for external consumption.
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from 'node:crypto';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import * as os from 'node:os';
|
|
9
|
+
import { appendFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
10
|
+
import { TraceStorage } from './storage.js';
|
|
11
|
+
export class SelfTracker {
|
|
12
|
+
agentName;
|
|
13
|
+
agentType;
|
|
14
|
+
storage;
|
|
15
|
+
dbPath;
|
|
16
|
+
logPath;
|
|
17
|
+
currentSessionId = null;
|
|
18
|
+
sessionStartTime = 0;
|
|
19
|
+
constructor(config) {
|
|
20
|
+
this.agentName = config.agentName;
|
|
21
|
+
this.agentType = config.agentType;
|
|
22
|
+
this.dbPath = config.dbPath || process.env.AGENTTRACE_DB_PATH || './agenttrace.db';
|
|
23
|
+
this.storage = new TraceStorage(this.dbPath);
|
|
24
|
+
// Allow override via env for deployment flexibility
|
|
25
|
+
const envLog = process.env.AGENTTRACE_USAGE_LOG;
|
|
26
|
+
this.logPath = envLog || path.join(os.homedir(), '.config', 'agenttrace', 'usage.jsonl');
|
|
27
|
+
}
|
|
28
|
+
ensureLogDir() {
|
|
29
|
+
const dir = path.dirname(this.logPath);
|
|
30
|
+
if (!existsSync(dir)) {
|
|
31
|
+
mkdirSync(dir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
appendLog(entry) {
|
|
35
|
+
this.ensureLogDir();
|
|
36
|
+
appendFileSync(this.logPath, JSON.stringify({ ...entry, timestamp: entry.timestamp || Date.now() }) + '\n', 'utf8');
|
|
37
|
+
}
|
|
38
|
+
ensureSession() {
|
|
39
|
+
if (!this.currentSessionId) {
|
|
40
|
+
this.startSession();
|
|
41
|
+
}
|
|
42
|
+
return this.currentSessionId;
|
|
43
|
+
}
|
|
44
|
+
startSession() {
|
|
45
|
+
const sessionId = randomUUID();
|
|
46
|
+
const startedAt = Date.now();
|
|
47
|
+
this.storage.createRun({
|
|
48
|
+
id: sessionId,
|
|
49
|
+
name: `${this.agentName}-self-session`,
|
|
50
|
+
startedAt,
|
|
51
|
+
metadata: {
|
|
52
|
+
agentName: this.agentName,
|
|
53
|
+
agentType: this.agentType,
|
|
54
|
+
selfTracked: true,
|
|
55
|
+
kind: 'self-session',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
this.currentSessionId = sessionId;
|
|
59
|
+
this.sessionStartTime = startedAt;
|
|
60
|
+
this.appendLog({
|
|
61
|
+
timestamp: startedAt,
|
|
62
|
+
agentName: this.agentName,
|
|
63
|
+
agentType: this.agentType,
|
|
64
|
+
sessionId,
|
|
65
|
+
type: 'session_start',
|
|
66
|
+
});
|
|
67
|
+
return sessionId;
|
|
68
|
+
}
|
|
69
|
+
trackAction(action, target, metadata = {}) {
|
|
70
|
+
const sessionId = this.ensureSession();
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
const trace = {
|
|
73
|
+
id: randomUUID(),
|
|
74
|
+
runId: sessionId,
|
|
75
|
+
name: `self:action:${action}`,
|
|
76
|
+
status: 'success',
|
|
77
|
+
input: { target },
|
|
78
|
+
output: null,
|
|
79
|
+
tokens: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
80
|
+
toolCalls: [],
|
|
81
|
+
latencyMs: 0,
|
|
82
|
+
costUsd: 0,
|
|
83
|
+
error: undefined,
|
|
84
|
+
metadata: {
|
|
85
|
+
selfTracked: true,
|
|
86
|
+
agentName: this.agentName,
|
|
87
|
+
agentType: this.agentType,
|
|
88
|
+
actionType: 'action',
|
|
89
|
+
action,
|
|
90
|
+
target,
|
|
91
|
+
...metadata,
|
|
92
|
+
},
|
|
93
|
+
parentId: undefined,
|
|
94
|
+
};
|
|
95
|
+
this.storage.createTrace(trace);
|
|
96
|
+
this.appendLog({
|
|
97
|
+
timestamp: now,
|
|
98
|
+
agentName: this.agentName,
|
|
99
|
+
agentType: this.agentType,
|
|
100
|
+
sessionId,
|
|
101
|
+
type: 'action',
|
|
102
|
+
action,
|
|
103
|
+
target,
|
|
104
|
+
metadata,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
trackDelegation(targetAgent, task) {
|
|
108
|
+
const sessionId = this.ensureSession();
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
const trace = {
|
|
111
|
+
id: randomUUID(),
|
|
112
|
+
runId: sessionId,
|
|
113
|
+
name: 'self:delegation',
|
|
114
|
+
status: 'success',
|
|
115
|
+
input: { task },
|
|
116
|
+
output: null,
|
|
117
|
+
tokens: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
118
|
+
toolCalls: [],
|
|
119
|
+
latencyMs: 0,
|
|
120
|
+
costUsd: 0,
|
|
121
|
+
error: undefined,
|
|
122
|
+
metadata: {
|
|
123
|
+
selfTracked: true,
|
|
124
|
+
agentName: this.agentName,
|
|
125
|
+
agentType: this.agentType,
|
|
126
|
+
actionType: 'delegation',
|
|
127
|
+
targetAgent,
|
|
128
|
+
task,
|
|
129
|
+
},
|
|
130
|
+
parentId: undefined,
|
|
131
|
+
};
|
|
132
|
+
this.storage.createTrace(trace);
|
|
133
|
+
this.appendLog({
|
|
134
|
+
timestamp: now,
|
|
135
|
+
agentName: this.agentName,
|
|
136
|
+
agentType: this.agentType,
|
|
137
|
+
sessionId,
|
|
138
|
+
type: 'delegation',
|
|
139
|
+
target: targetAgent,
|
|
140
|
+
task,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
trackResearch(query, results) {
|
|
144
|
+
const sessionId = this.ensureSession();
|
|
145
|
+
const now = Date.now();
|
|
146
|
+
const trace = {
|
|
147
|
+
id: randomUUID(),
|
|
148
|
+
runId: sessionId,
|
|
149
|
+
name: 'self:research',
|
|
150
|
+
status: 'success',
|
|
151
|
+
input: { query },
|
|
152
|
+
output: { results },
|
|
153
|
+
tokens: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
154
|
+
toolCalls: [],
|
|
155
|
+
latencyMs: 0,
|
|
156
|
+
costUsd: 0,
|
|
157
|
+
error: undefined,
|
|
158
|
+
metadata: {
|
|
159
|
+
selfTracked: true,
|
|
160
|
+
agentName: this.agentName,
|
|
161
|
+
agentType: this.agentType,
|
|
162
|
+
actionType: 'research',
|
|
163
|
+
query,
|
|
164
|
+
results,
|
|
165
|
+
},
|
|
166
|
+
parentId: undefined,
|
|
167
|
+
};
|
|
168
|
+
this.storage.createTrace(trace);
|
|
169
|
+
this.appendLog({
|
|
170
|
+
timestamp: now,
|
|
171
|
+
agentName: this.agentName,
|
|
172
|
+
agentType: this.agentType,
|
|
173
|
+
sessionId,
|
|
174
|
+
type: 'research',
|
|
175
|
+
query,
|
|
176
|
+
results,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
trackImplementation(files, linesOfCode) {
|
|
180
|
+
const sessionId = this.ensureSession();
|
|
181
|
+
const now = Date.now();
|
|
182
|
+
const trace = {
|
|
183
|
+
id: randomUUID(),
|
|
184
|
+
runId: sessionId,
|
|
185
|
+
name: 'self:implementation',
|
|
186
|
+
status: 'success',
|
|
187
|
+
input: { files },
|
|
188
|
+
output: { linesOfCode },
|
|
189
|
+
tokens: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
190
|
+
toolCalls: [],
|
|
191
|
+
latencyMs: 0,
|
|
192
|
+
costUsd: 0,
|
|
193
|
+
error: undefined,
|
|
194
|
+
metadata: {
|
|
195
|
+
selfTracked: true,
|
|
196
|
+
agentName: this.agentName,
|
|
197
|
+
agentType: this.agentType,
|
|
198
|
+
actionType: 'implementation',
|
|
199
|
+
files,
|
|
200
|
+
linesOfCode,
|
|
201
|
+
},
|
|
202
|
+
parentId: undefined,
|
|
203
|
+
};
|
|
204
|
+
this.storage.createTrace(trace);
|
|
205
|
+
this.appendLog({
|
|
206
|
+
timestamp: now,
|
|
207
|
+
agentName: this.agentName,
|
|
208
|
+
agentType: this.agentType,
|
|
209
|
+
sessionId,
|
|
210
|
+
type: 'implementation',
|
|
211
|
+
files,
|
|
212
|
+
linesOfCode,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
trackReview(prNumber, status) {
|
|
216
|
+
const sessionId = this.ensureSession();
|
|
217
|
+
const now = Date.now();
|
|
218
|
+
const trace = {
|
|
219
|
+
id: randomUUID(),
|
|
220
|
+
runId: sessionId,
|
|
221
|
+
name: 'self:review',
|
|
222
|
+
status: 'success',
|
|
223
|
+
input: { prNumber },
|
|
224
|
+
output: { status },
|
|
225
|
+
tokens: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
226
|
+
toolCalls: [],
|
|
227
|
+
latencyMs: 0,
|
|
228
|
+
costUsd: 0,
|
|
229
|
+
error: undefined,
|
|
230
|
+
metadata: {
|
|
231
|
+
selfTracked: true,
|
|
232
|
+
agentName: this.agentName,
|
|
233
|
+
agentType: this.agentType,
|
|
234
|
+
actionType: 'review',
|
|
235
|
+
prNumber,
|
|
236
|
+
status,
|
|
237
|
+
},
|
|
238
|
+
parentId: undefined,
|
|
239
|
+
};
|
|
240
|
+
this.storage.createTrace(trace);
|
|
241
|
+
this.appendLog({
|
|
242
|
+
timestamp: now,
|
|
243
|
+
agentName: this.agentName,
|
|
244
|
+
agentType: this.agentType,
|
|
245
|
+
sessionId,
|
|
246
|
+
type: 'review',
|
|
247
|
+
prNumber,
|
|
248
|
+
status,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
endSession() {
|
|
252
|
+
if (this.currentSessionId) {
|
|
253
|
+
const now = Date.now();
|
|
254
|
+
this.storage.completeRun(this.currentSessionId, 'success');
|
|
255
|
+
this.appendLog({
|
|
256
|
+
timestamp: now,
|
|
257
|
+
agentName: this.agentName,
|
|
258
|
+
agentType: this.agentType,
|
|
259
|
+
sessionId: this.currentSessionId,
|
|
260
|
+
type: 'session_end',
|
|
261
|
+
});
|
|
262
|
+
this.currentSessionId = null;
|
|
263
|
+
this.sessionStartTime = 0;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
getSessionStats() {
|
|
267
|
+
if (!this.currentSessionId) {
|
|
268
|
+
return { sessionId: '', actions: 0, duration: 0, tokens: 0, cost: 0 };
|
|
269
|
+
}
|
|
270
|
+
const run = this.storage.getRun(this.currentSessionId);
|
|
271
|
+
const traces = this.storage.getTraces({ runId: this.currentSessionId });
|
|
272
|
+
const duration = Date.now() - (this.sessionStartTime || (run?.startedAt ?? Date.now()));
|
|
273
|
+
return {
|
|
274
|
+
sessionId: this.currentSessionId,
|
|
275
|
+
actions: traces.length,
|
|
276
|
+
duration: Math.max(0, Math.floor(duration / 1000)), // seconds
|
|
277
|
+
tokens: run?.totalTokens?.totalTokens ?? 0,
|
|
278
|
+
cost: run?.totalCostUsd ?? 0,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Close underlying storage (for cleanup in tests / long running)
|
|
283
|
+
*/
|
|
284
|
+
close() {
|
|
285
|
+
this.storage.close();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=self-track.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-track.js","sourceRoot":"","sources":["../src/self-track.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentTrace -- SQLite Storage Layer
|
|
3
|
+
* Local storage for agent traces with zero cloud dependency
|
|
4
|
+
*/
|
|
5
|
+
import { Trace, Run, TraceFilter, TraceStats, TokenUsage, CostBreakdown, AlertHistory, TraceTreeNode, AgentUsageRecord, AgentUsageFilter, UsageStats, AgentWho, AgentSession, WebhookConfig, Project } from './types.js';
|
|
6
|
+
export declare class TraceStorage {
|
|
7
|
+
private db;
|
|
8
|
+
private dbPath;
|
|
9
|
+
private _droppedTraces;
|
|
10
|
+
private tenantId;
|
|
11
|
+
private static _connections;
|
|
12
|
+
constructor(dbPath?: string, tenantId?: string);
|
|
13
|
+
private initSchema;
|
|
14
|
+
createRun(run: Partial<Run> & {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
startedAt: number;
|
|
18
|
+
}): Run;
|
|
19
|
+
getRun(id: string): Run | null;
|
|
20
|
+
getRuns(limit?: number): Run[];
|
|
21
|
+
completeRun(id: string, status: Run['status']): void;
|
|
22
|
+
updateRunStats(runId: string, tokens: TokenUsage, toolCalls: number, latencyMs: number, costUsd: number): void;
|
|
23
|
+
createTrace(trace: Omit<Trace, 'createdAt' | 'updatedAt'>): Trace;
|
|
24
|
+
getTrace(id: string): Trace | null;
|
|
25
|
+
getTraces(filter?: TraceFilter): Trace[];
|
|
26
|
+
createScore(id: string, traceId: string, name: string, value: number): void;
|
|
27
|
+
getScores(traceId?: string): Array<{
|
|
28
|
+
id: string;
|
|
29
|
+
traceId: string;
|
|
30
|
+
name: string;
|
|
31
|
+
value: number;
|
|
32
|
+
createdAt: number;
|
|
33
|
+
}>;
|
|
34
|
+
saveAlert(name: string, config: Record<string, unknown>): void;
|
|
35
|
+
getStoredAlerts(): Array<{
|
|
36
|
+
name: string;
|
|
37
|
+
config: {
|
|
38
|
+
webhook?: string;
|
|
39
|
+
email?: string;
|
|
40
|
+
cooldown: number;
|
|
41
|
+
lastTriggered?: number;
|
|
42
|
+
};
|
|
43
|
+
createdAt: number;
|
|
44
|
+
}>;
|
|
45
|
+
insertAlertHistory(entry: AlertHistory): void;
|
|
46
|
+
getAlertHistory(): AlertHistory[];
|
|
47
|
+
setTraceParent(traceId: string, parentId: string): void;
|
|
48
|
+
getTraceParentId(traceId: string): string | null;
|
|
49
|
+
getChildTraceIds(parentId: string): string[];
|
|
50
|
+
getLinkedTraceIds(traceId: string): string[];
|
|
51
|
+
linkTraces(traceIds: string[]): void;
|
|
52
|
+
getTraceTree(traceId: string): TraceTreeNode;
|
|
53
|
+
recordAgentUsage(params: AgentUsageRecord): void;
|
|
54
|
+
getAgentUsage(filter?: AgentUsageFilter, tenantId?: string): AgentUsageRecord[];
|
|
55
|
+
getUsageStats(agentName?: string, fromDate?: number, toDate?: number, tenantId?: string): UsageStats;
|
|
56
|
+
getActiveAgents(): {
|
|
57
|
+
agentName: string;
|
|
58
|
+
lastActive: string;
|
|
59
|
+
totalActions: number;
|
|
60
|
+
}[];
|
|
61
|
+
getAgentWho(filter?: {
|
|
62
|
+
activeOnly?: boolean;
|
|
63
|
+
agentType?: string;
|
|
64
|
+
limit?: number;
|
|
65
|
+
}): AgentWho[];
|
|
66
|
+
getAgentSessions(filter?: {
|
|
67
|
+
agentName?: string;
|
|
68
|
+
activeOnly?: boolean;
|
|
69
|
+
limit?: number;
|
|
70
|
+
}): AgentSession[];
|
|
71
|
+
getAgentCostSummary(filter?: {
|
|
72
|
+
agentName?: string;
|
|
73
|
+
fromDate?: number;
|
|
74
|
+
toDate?: number;
|
|
75
|
+
}): {
|
|
76
|
+
totalCostUsd: number;
|
|
77
|
+
costByAgent: Record<string, number>;
|
|
78
|
+
costByModel: Record<string, number>;
|
|
79
|
+
};
|
|
80
|
+
getStats(tenantId?: string): TraceStats;
|
|
81
|
+
getCostBreakdown(runId?: string, tenantId?: string): CostBreakdown;
|
|
82
|
+
cleanup(maxTraces?: number): number;
|
|
83
|
+
cleanupOldTraces(before: number): number;
|
|
84
|
+
cleanupOldRuns(before: number): number;
|
|
85
|
+
cleanupOldAgentUsage(before: number): number;
|
|
86
|
+
getSetting(key: string): string | null;
|
|
87
|
+
setSetting(key: string, value: string): void;
|
|
88
|
+
getRetentionPolicy(): {
|
|
89
|
+
retentionDays: number;
|
|
90
|
+
cleanupIntervalHours: number;
|
|
91
|
+
};
|
|
92
|
+
setRetentionPolicy(retentionDays: number, cleanupIntervalHours?: number): void;
|
|
93
|
+
getHealthInfo(): {
|
|
94
|
+
dbPath: string;
|
|
95
|
+
traceCount: number;
|
|
96
|
+
dbSize: number;
|
|
97
|
+
integrity: {
|
|
98
|
+
tablesExist: boolean;
|
|
99
|
+
noOrphans: boolean;
|
|
100
|
+
details?: string;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
private getDbSize;
|
|
104
|
+
private checkIntegrity;
|
|
105
|
+
private rowToRun;
|
|
106
|
+
private safeJsonParse;
|
|
107
|
+
private rowToTrace;
|
|
108
|
+
private rowToAgentUsage;
|
|
109
|
+
registerWebhook(url: string, events: string[], secret?: string): string;
|
|
110
|
+
getWebhooks(): WebhookConfig[];
|
|
111
|
+
deleteWebhook(id: string): void;
|
|
112
|
+
updateWebhookLastTriggered(id: string): void;
|
|
113
|
+
incrementWebhookFailures(id: string): void;
|
|
114
|
+
resetWebhookFailures(id: string): void;
|
|
115
|
+
getEnabledWebhooksForEvent(event: string): WebhookConfig[];
|
|
116
|
+
createApiKey(name: string, permissions?: string[], key?: string): {
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
key: string;
|
|
120
|
+
preview: string;
|
|
121
|
+
createdAt: number;
|
|
122
|
+
};
|
|
123
|
+
getApiKeys(): {
|
|
124
|
+
id: string;
|
|
125
|
+
name: string;
|
|
126
|
+
createdAt: number;
|
|
127
|
+
lastUsedAt: number | null;
|
|
128
|
+
enabled: boolean;
|
|
129
|
+
}[];
|
|
130
|
+
validateApiKey(key: string): {
|
|
131
|
+
valid: boolean;
|
|
132
|
+
permissions: string[];
|
|
133
|
+
};
|
|
134
|
+
revokeApiKey(id: string): void;
|
|
135
|
+
getStorageStats(): {
|
|
136
|
+
totalSizeBytes: number;
|
|
137
|
+
traceCount: number;
|
|
138
|
+
runCount: number;
|
|
139
|
+
oldestTrace: number | null;
|
|
140
|
+
newestTrace: number | null;
|
|
141
|
+
};
|
|
142
|
+
createProject(name: string): Project;
|
|
143
|
+
getProject(apiKey: string): Project | null;
|
|
144
|
+
getProjectById(id: string): Project | null;
|
|
145
|
+
listProjects(): Project[];
|
|
146
|
+
deleteProject(id: string): boolean;
|
|
147
|
+
close(): void;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|