@agenttrace-io/dashboard 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.
@@ -0,0 +1,41 @@
1
+ /**
2
+ * AgentTrace Dashboard
3
+ * Local web UI + REST API for viewing agent traces
4
+ */
5
+ import { Express } from 'express';
6
+ import { AgentTrace, DashboardConfig } from '@agenttrace-io/sdk';
7
+ export declare const VERSION = "0.1.0";
8
+ export declare const PACKAGE_NAME = "@agenttrace-io/dashboard";
9
+ export interface ApiKeyRecord {
10
+ id: string;
11
+ name: string;
12
+ hash: string;
13
+ prefix: string;
14
+ createdAt: number;
15
+ }
16
+ /** In-memory key store. Key = SHA-256 hash, Value = record. */
17
+ export declare const apiKeyStore: Map<string, ApiKeyRecord>;
18
+ /**
19
+ * Create a new API key. Returns { record, plaintextKey }.
20
+ * The plaintext key is shown once; only the hash is stored.
21
+ */
22
+ export declare function createApiKey(name: string): {
23
+ record: ApiKeyRecord;
24
+ plaintextKey: string;
25
+ };
26
+ export interface DashboardApp {
27
+ app: Express;
28
+ trace: AgentTrace;
29
+ close: () => void;
30
+ }
31
+ /**
32
+ * Create an Express app with the AgentTrace dashboard API + static frontend.
33
+ * Does not start the listener (useful for testing).
34
+ */
35
+ export declare function createDashboardApp(dbPath?: string): DashboardApp;
36
+ /**
37
+ * Start the dashboard HTTP server and return the listening server instance.
38
+ */
39
+ export declare function startDashboard(config?: DashboardConfig): import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
40
+ export default startDashboard;
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAgB,EAAqB,OAAO,EAAgB,MAAM,SAAS,CAAC;AAM5E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAkC,MAAM,oBAAoB,CAAC;AAEjG,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAUvD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+DAA+D;AAC/D,eAAO,MAAM,WAAW,2BAAkC,CAAC;AAW3D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAczF;AA0ED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CA+ZhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,GAAE,eAAoB,qHAyB1D;AAED,eAAe,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,520 @@
1
+ /**
2
+ * AgentTrace Dashboard
3
+ * Local web UI + REST API for viewing agent traces
4
+ */
5
+ import express from 'express';
6
+ import path from 'path';
7
+ import { fileURLToPath } from 'url';
8
+ import fs from 'node:fs';
9
+ import os from 'node:os';
10
+ import crypto from 'node:crypto';
11
+ import { AgentTrace } from '@agenttrace-io/sdk';
12
+ export const VERSION = '0.1.0';
13
+ export const PACKAGE_NAME = '@agenttrace-io/dashboard';
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = path.dirname(__filename);
16
+ // Public assets are sibling to dist/ in the published package
17
+ const PUBLIC_DIR = path.join(__dirname, '..', 'public');
18
+ /** In-memory key store. Key = SHA-256 hash, Value = record. */
19
+ export const apiKeyStore = new Map();
20
+ function sha256(input) {
21
+ return crypto.createHash('sha256').update(input).digest('hex');
22
+ }
23
+ /** Generate a random API key string. */
24
+ function generateApiKey() {
25
+ return crypto.randomBytes(32).toString('hex');
26
+ }
27
+ /**
28
+ * Create a new API key. Returns { record, plaintextKey }.
29
+ * The plaintext key is shown once; only the hash is stored.
30
+ */
31
+ export function createApiKey(name) {
32
+ const plaintextKey = generateApiKey();
33
+ const hash = sha256(plaintextKey);
34
+ const id = crypto.randomBytes(8).toString('hex');
35
+ const prefix = plaintextKey.slice(0, 8);
36
+ const record = {
37
+ id,
38
+ name,
39
+ hash,
40
+ prefix,
41
+ createdAt: Date.now(),
42
+ };
43
+ apiKeyStore.set(hash, record);
44
+ return { record, plaintextKey };
45
+ }
46
+ /** Validate a presented key. Returns the record if valid. */
47
+ function validateApiKey(key) {
48
+ if (!key)
49
+ return null;
50
+ const hash = sha256(key);
51
+ return apiKeyStore.get(hash) || null;
52
+ }
53
+ /**
54
+ * Authentication middleware.
55
+ * Checks the X-API-Key header on API routes.
56
+ * Allows /api/health without authentication.
57
+ */
58
+ function authMiddleware(req, res, next) {
59
+ // Allow health check without auth
60
+ if (req.path === '/api/health') {
61
+ next();
62
+ return;
63
+ }
64
+ // Only protect /api/* routes
65
+ if (!req.path.startsWith('/api/')) {
66
+ next();
67
+ return;
68
+ }
69
+ const key = req.headers['x-api-key'];
70
+ const record = validateApiKey(key);
71
+ if (!record) {
72
+ res.status(401).json({ error: 'Invalid or missing API key', code: 'UNAUTHORIZED' });
73
+ return;
74
+ }
75
+ next();
76
+ }
77
+ // ---- Health check helpers (internal) ----
78
+ function getDiskSpace(dbPath) {
79
+ let checkPath = process.cwd();
80
+ if (dbPath && dbPath !== ':memory:') {
81
+ try {
82
+ const dir = path.dirname(dbPath);
83
+ checkPath = dir || checkPath;
84
+ }
85
+ catch {
86
+ /* ignore */
87
+ }
88
+ }
89
+ try {
90
+ const stats = fs.statfsSync(checkPath);
91
+ const totalBytes = Number(stats.blocks) * Number(stats.bsize);
92
+ const freeBytes = Number(stats.bavail ?? stats.bfree) * Number(stats.bsize);
93
+ return { freeBytes: Math.max(0, freeBytes), totalBytes: Math.max(0, totalBytes) };
94
+ }
95
+ catch {
96
+ return { freeBytes: 0, totalBytes: 0 };
97
+ }
98
+ }
99
+ function getMemoryUsage() {
100
+ const totalBytes = os.totalmem();
101
+ const freeBytes = os.freemem();
102
+ const usedBytes = Math.max(0, totalBytes - freeBytes);
103
+ return { usedBytes, totalBytes };
104
+ }
105
+ function resourceStatus(usedBytes, totalBytes) {
106
+ if (!totalBytes || totalBytes <= 0)
107
+ return 'ok';
108
+ const usedPct = usedBytes / totalBytes;
109
+ if (usedPct >= 0.9)
110
+ return 'critical';
111
+ if (usedPct >= 0.8)
112
+ return 'warning';
113
+ return 'ok';
114
+ }
115
+ /**
116
+ * Create an Express app with the AgentTrace dashboard API + static frontend.
117
+ * Does not start the listener (useful for testing).
118
+ */
119
+ export function createDashboardApp(dbPath) {
120
+ const app = express();
121
+ const effectiveDbPath = dbPath || './agenttrace.db';
122
+ const trace = new AgentTrace({
123
+ dbPath: effectiveDbPath,
124
+ silent: true,
125
+ });
126
+ const startTime = Date.now();
127
+ // Parse JSON bodies
128
+ app.use(express.json({ limit: '1mb' }));
129
+ app.use((req, res, next) => {
130
+ res.setHeader('Access-Control-Allow-Origin', req.headers.origin || 'http://localhost:3000');
131
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
132
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-API-Key');
133
+ if (req.method === 'OPTIONS') {
134
+ res.sendStatus(204);
135
+ return;
136
+ }
137
+ next();
138
+ });
139
+ // Serve the static frontend without auth (assets, index.html)
140
+ app.use(express.static(PUBLIC_DIR, { index: 'index.html' }));
141
+ // Authentication middleware — protects /api/* only, skips /api/health
142
+ app.use(authMiddleware);
143
+ // ---------- API Key Management Routes ----------
144
+ app.get('/api/v1/keys', (_req, res) => {
145
+ const keys = Array.from(apiKeyStore.values()).map((r) => ({
146
+ id: r.id,
147
+ name: r.name,
148
+ prefix: r.prefix,
149
+ createdAt: r.createdAt,
150
+ }));
151
+ res.json({ keys });
152
+ });
153
+ app.post('/api/v1/keys', (req, res) => {
154
+ const name = req.body?.name ? String(req.body.name) : 'default';
155
+ const { record, plaintextKey } = createApiKey(name);
156
+ res.status(201).json({
157
+ id: record.id,
158
+ name: record.name,
159
+ prefix: record.prefix,
160
+ key: plaintextKey,
161
+ createdAt: record.createdAt,
162
+ });
163
+ });
164
+ app.delete('/api/v1/keys/:id', (req, res) => {
165
+ const id = String(req.params.id || '');
166
+ let found = false;
167
+ for (const [hash, record] of apiKeyStore) {
168
+ if (record.id === id) {
169
+ apiKeyStore.delete(hash);
170
+ found = true;
171
+ break;
172
+ }
173
+ }
174
+ if (!found) {
175
+ res.status(404).json({ error: 'Key not found', code: 'NOT_FOUND' });
176
+ return;
177
+ }
178
+ res.status(204).send();
179
+ });
180
+ // ---------- API Routes ----------
181
+ app.get('/api/stats', (_req, res) => {
182
+ try {
183
+ const stats = trace.getStats();
184
+ res.json(stats);
185
+ }
186
+ catch (err) {
187
+ res.status(500).json({ error: String(err) });
188
+ }
189
+ });
190
+ app.get('/api/costs', (req, res) => {
191
+ try {
192
+ const runId = (req.query['run-id'] || req.query.runId || req.query['runId']);
193
+ const breakdown = trace.getCostBreakdown({ runId: runId ? String(runId) : undefined });
194
+ res.json(breakdown);
195
+ }
196
+ catch (err) {
197
+ res.status(500).json({ error: String(err) });
198
+ }
199
+ });
200
+ app.get('/api/runs', (req, res) => {
201
+ try {
202
+ const limit = req.query.limit ? parseInt(String(req.query.limit), 10) : 200;
203
+ const allRuns = trace.getRuns(Math.max(1, Math.min(1000, limit || 200)));
204
+ const status = req.query.status;
205
+ const runs = status
206
+ ? (() => {
207
+ const allowed = status.split(',').filter(Boolean);
208
+ return allowed.length ? allRuns.filter((r) => allowed.includes(r.status)) : allRuns;
209
+ })()
210
+ : allRuns;
211
+ res.json(runs);
212
+ }
213
+ catch (err) {
214
+ res.status(500).json({ error: String(err) });
215
+ }
216
+ });
217
+ app.get('/api/runs/:id', (req, res) => {
218
+ try {
219
+ const run = trace.getRun(String(req.params.id || ''));
220
+ if (!run) {
221
+ res.status(404).json({ error: 'Run not found' });
222
+ return;
223
+ }
224
+ res.json(run);
225
+ return;
226
+ }
227
+ catch (err) {
228
+ res.status(500).json({ error: String(err) });
229
+ return;
230
+ }
231
+ });
232
+ app.get('/api/traces', (req, res) => {
233
+ try {
234
+ const filter = {};
235
+ if (req.query.runId) {
236
+ filter.runId = String(req.query.runId);
237
+ }
238
+ if (req.query.status) {
239
+ filter.status = String(req.query.status).split(',').filter(Boolean);
240
+ }
241
+ if (req.query.name) {
242
+ filter.name = String(req.query.name);
243
+ }
244
+ if (req.query.limit) {
245
+ filter.limit = parseInt(String(req.query.limit), 10);
246
+ }
247
+ if (req.query.offset) {
248
+ filter.offset = parseInt(String(req.query.offset), 10);
249
+ }
250
+ const traces = trace.getTraces(filter);
251
+ res.json(traces);
252
+ }
253
+ catch (err) {
254
+ res.status(500).json({ error: String(err) });
255
+ }
256
+ });
257
+ app.get('/api/traces/:id', (req, res) => {
258
+ try {
259
+ const t = trace.getTrace(String(req.params.id || ''));
260
+ if (!t) {
261
+ res.status(404).json({ error: 'Trace not found' });
262
+ return;
263
+ }
264
+ res.json(t);
265
+ return;
266
+ }
267
+ catch (err) {
268
+ res.status(500).json({ error: String(err) });
269
+ return;
270
+ }
271
+ });
272
+ app.get('/api/traces/:id/tree', (req, res) => {
273
+ try {
274
+ const tree = trace.getTraceTree(String(req.params.id || ''));
275
+ res.json(tree);
276
+ }
277
+ catch (err) {
278
+ const msg = String(err);
279
+ if (msg.includes('not found') || msg.includes('Trace')) {
280
+ res.status(404).json({ error: 'Trace not found' });
281
+ return;
282
+ }
283
+ res.status(500).json({ error: msg });
284
+ }
285
+ });
286
+ app.get('/api/export', (req, res) => {
287
+ try {
288
+ const format = (req.query.format === 'csv' ? 'csv' : 'json');
289
+ // Use SDK export (traces). Could be extended to include runs.
290
+ const data = trace.export(format);
291
+ const mime = format === 'csv' ? 'text/csv; charset=utf-8' : 'application/json; charset=utf-8';
292
+ const filename = `agenttrace-export.${format}`;
293
+ res.setHeader('Content-Type', mime);
294
+ res.setHeader('Content-Disposition', `attachment; filename="${filename}"`);
295
+ res.send(data);
296
+ }
297
+ catch (err) {
298
+ res.status(500).json({ error: String(err) });
299
+ }
300
+ });
301
+ // ---------- Agent Usage APIs (for /usage dashboard) ----------
302
+ app.get('/api/usage', (req, res) => {
303
+ try {
304
+ const filter = {};
305
+ if (req.query.agentName)
306
+ filter.agentName = String(req.query.agentName);
307
+ if (req.query.agentType)
308
+ filter.agentType = String(req.query.agentType);
309
+ if (req.query.action)
310
+ filter.action = String(req.query.action);
311
+ if (req.query.status) {
312
+ const s = String(req.query.status);
313
+ filter.status = s.includes(',') ? s.split(',').filter(Boolean) : s;
314
+ }
315
+ if (req.query.fromDate || req.query.from) {
316
+ filter.fromDate = parseInt(String(req.query.fromDate || req.query.from), 10);
317
+ }
318
+ if (req.query.toDate || req.query.to) {
319
+ filter.toDate = parseInt(String(req.query.toDate || req.query.to), 10);
320
+ }
321
+ if (req.query.limit)
322
+ filter.limit = parseInt(String(req.query.limit), 10);
323
+ if (req.query.offset)
324
+ filter.offset = parseInt(String(req.query.offset), 10);
325
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
326
+ const recs = trace.getAgentUsage(filter);
327
+ res.json(recs);
328
+ }
329
+ catch (err) {
330
+ res.status(500).json({ error: String(err) });
331
+ }
332
+ });
333
+ app.get('/api/usage/stats', (req, res) => {
334
+ try {
335
+ const agentName = req.query.agentName ? String(req.query.agentName) : undefined;
336
+ const fromDate = req.query.fromDate ? parseInt(String(req.query.fromDate), 10) : undefined;
337
+ const toDate = req.query.toDate ? parseInt(String(req.query.toDate), 10) : undefined;
338
+ const stats = trace.getUsageStats(agentName, fromDate, toDate);
339
+ res.json(stats);
340
+ }
341
+ catch (err) {
342
+ res.status(500).json({ error: String(err) });
343
+ }
344
+ });
345
+ app.get('/api/usage/active', (_req, res) => {
346
+ try {
347
+ const active = trace.getActiveAgents();
348
+ res.json(active);
349
+ }
350
+ catch (err) {
351
+ res.status(500).json({ error: String(err) });
352
+ }
353
+ });
354
+ // SSE endpoint: pushes new usage events as they are recorded (via AgentTrace emitter)
355
+ app.get('/api/usage/stream', (req, res) => {
356
+ res.setHeader('Content-Type', 'text/event-stream');
357
+ res.setHeader('Cache-Control', 'no-cache, no-transform');
358
+ res.setHeader('Connection', 'keep-alive');
359
+ res.setHeader('X-Accel-Buffering', 'no'); // disable nginx buffering if any
360
+ res.flushHeaders?.();
361
+ const send = (event, data) => {
362
+ res.write(`event: ${event}\n`);
363
+ res.write(`data: ${JSON.stringify(data)}\n\n`);
364
+ };
365
+ // initial hello
366
+ send('connected', { ts: Date.now() });
367
+ const onUsage = (record) => {
368
+ try {
369
+ send('usage', record);
370
+ }
371
+ catch (_) {
372
+ /* client gone */
373
+ }
374
+ };
375
+ trace.onUsage(onUsage);
376
+ // heartbeat to keep connection alive
377
+ const hb = setInterval(() => {
378
+ try {
379
+ res.write(`: hb ${Date.now()}\n\n`);
380
+ }
381
+ catch (_) {
382
+ clearInterval(hb);
383
+ }
384
+ }, 15000);
385
+ const cleanup = () => {
386
+ clearInterval(hb);
387
+ trace.offUsage(onUsage);
388
+ res.end();
389
+ };
390
+ req.on('close', cleanup);
391
+ req.on('error', cleanup);
392
+ // also timeout safety? but long lived
393
+ });
394
+ // Serve dedicated usage page at clean /usage URL
395
+ app.get('/usage', (_req, res) => {
396
+ res.sendFile(path.join(PUBLIC_DIR, 'usage.html'));
397
+ });
398
+ // Detailed health check for Docker / orchestration (status, resource checks, DB ping)
399
+ app.get('/api/health', (_req, res) => {
400
+ const checkStart = Date.now();
401
+ const checks = {
402
+ database: { status: 'error', responseTime: 0 },
403
+ diskSpace: { status: 'ok', freeBytes: 0, totalBytes: 0 },
404
+ memory: { status: 'ok', usedBytes: 0, totalBytes: 0 },
405
+ activeAgents: 0,
406
+ totalTraces: 0,
407
+ };
408
+ // DB connectivity test (simple query) + totalTraces + activeAgents
409
+ try {
410
+ const qStart = Date.now();
411
+ // Use getStats for connectivity + totalTraces (exercises DB)
412
+ const stats = trace.getStats();
413
+ const dbRespTime = Date.now() - qStart;
414
+ checks.database = { status: 'ok', responseTime: dbRespTime };
415
+ checks.totalTraces = stats.totalTraces || 0;
416
+ // activeAgents via COUNT(DISTINCT) on agent_usage (private storage access is internal)
417
+ try {
418
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
419
+ const storage = trace.storage;
420
+ const db = storage?.db;
421
+ if (db && typeof db.prepare === 'function') {
422
+ const ag = db.prepare('SELECT COUNT(DISTINCT agent_name) as c FROM agent_usage').get();
423
+ checks.activeAgents = ag?.c ?? 0;
424
+ }
425
+ }
426
+ catch {
427
+ checks.activeAgents = 0;
428
+ }
429
+ }
430
+ catch {
431
+ checks.database = { status: 'error', responseTime: Date.now() - checkStart };
432
+ checks.totalTraces = 0;
433
+ checks.activeAgents = 0;
434
+ }
435
+ // Disk space (relative to DB dir or cwd)
436
+ try {
437
+ const disk = getDiskSpace(effectiveDbPath);
438
+ const dstatus = resourceStatus(disk.totalBytes - disk.freeBytes, disk.totalBytes);
439
+ checks.diskSpace = {
440
+ status: dstatus,
441
+ freeBytes: disk.freeBytes,
442
+ totalBytes: disk.totalBytes,
443
+ };
444
+ }
445
+ catch {
446
+ checks.diskSpace = { status: 'ok', freeBytes: 0, totalBytes: 0 };
447
+ }
448
+ // Memory (system, reflects container limits when cgrouped)
449
+ try {
450
+ const mem = getMemoryUsage();
451
+ const mstatus = resourceStatus(mem.usedBytes, mem.totalBytes);
452
+ checks.memory = { status: mstatus, usedBytes: mem.usedBytes, totalBytes: mem.totalBytes };
453
+ }
454
+ catch {
455
+ checks.memory = { status: 'ok', usedBytes: 0, totalBytes: 0 };
456
+ }
457
+ // Derive overall status
458
+ const critical = checks.database.status === 'error' ||
459
+ checks.diskSpace.status === 'critical' ||
460
+ checks.memory.status === 'critical';
461
+ const warning = checks.diskSpace.status === 'warning' || checks.memory.status === 'warning';
462
+ const overall = critical
463
+ ? 'unhealthy'
464
+ : warning
465
+ ? 'degraded'
466
+ : 'healthy';
467
+ const uptime = Date.now() - startTime;
468
+ const timestamp = new Date().toISOString();
469
+ const payload = {
470
+ status: overall,
471
+ version: VERSION,
472
+ uptime,
473
+ checks,
474
+ timestamp,
475
+ };
476
+ const httpCode = overall === 'unhealthy' ? 503 : 200;
477
+ res.status(httpCode).json(payload);
478
+ });
479
+ // Fallback: serve index.html for unknown GET paths (SPA-friendly client routing).
480
+ // Placed after static + API routes. Compatible with Express 5 / path-to-regexp v8.
481
+ app.use((req, res, _next) => {
482
+ if (req.method === 'GET' && !req.path.includes('.') && !req.path.startsWith('/api/')) {
483
+ return res.sendFile(path.join(PUBLIC_DIR, 'index.html'));
484
+ }
485
+ // Let other cases 404 naturally
486
+ if (!res.headersSent) {
487
+ res.status(404).send('Not found');
488
+ }
489
+ });
490
+ const close = () => {
491
+ trace.close();
492
+ };
493
+ return { app, trace, close };
494
+ }
495
+ /**
496
+ * Start the dashboard HTTP server and return the listening server instance.
497
+ */
498
+ export function startDashboard(config = {}) {
499
+ const { port = 4317, host = '127.0.0.1', dbPath } = config;
500
+ const { app, close } = createDashboardApp(dbPath);
501
+ const server = app.listen(port, host, () => {
502
+ const url = `http://${host}:${port}`;
503
+ console.log(`[agenttrace] Dashboard running at ${url}`);
504
+ console.log(`[agenttrace] Open in browser: ${url}`);
505
+ console.log(`[agenttrace] Press Ctrl+C to stop`);
506
+ });
507
+ // Graceful shutdown
508
+ const shutdown = () => {
509
+ console.log('\n[agenttrace] Shutting down dashboard...');
510
+ server.close(() => {
511
+ close();
512
+ process.exit(0);
513
+ });
514
+ };
515
+ process.on('SIGINT', shutdown);
516
+ process.on('SIGTERM', shutdown);
517
+ return server;
518
+ }
519
+ export default startDashboard;
520
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@agenttrace-io/dashboard",
3
+ "version": "0.1.9",
4
+ "description": "Local web dashboard for AgentTrace — view runs, traces, costs, and stats",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/Klepsiphron/agenttrace.git",
18
+ "directory": "packages/dashboard"
19
+ },
20
+ "homepage": "https://github.com/Klepsiphron/agenttrace#readme",
21
+ "keywords": [
22
+ "ai",
23
+ "agents",
24
+ "observability",
25
+ "dashboard",
26
+ "tracing",
27
+ "llm"
28
+ ],
29
+ "files": [
30
+ "dist",
31
+ "public"
32
+ ],
33
+ "scripts": {
34
+ "build": "tsc -p tsconfig.json",
35
+ "dev": "tsc -p tsconfig.json --watch",
36
+ "test": "vitest run --config ../../vitest.config.ts packages/dashboard",
37
+ "start": "node dist/index.js",
38
+ "dashboard": "node dist/index.js"
39
+ },
40
+ "dependencies": {
41
+ "express": "^5.2.1",
42
+ "@agenttrace-io/sdk": "workspace:*"
43
+ },
44
+ "devDependencies": {
45
+ "@types/express": "^5.0.6",
46
+ "jsdom": "^29.1.1"
47
+ }
48
+ }