@nicofains1/agentwatch 0.1.0 → 0.2.1

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 CHANGED
@@ -2,7 +2,36 @@
2
2
 
3
3
  Observability for multi-agent systems. Track heartbeats, trace cross-agent actions, detect cascade failures, and replay what went wrong.
4
4
 
5
- Built for teams running fleets of AI agents (CrewAI, AutoGen, LangGraph, custom) who need to understand why Agent B failed after Agent A timed out.
5
+ Built for teams running fleets of AI agents (CrewAI, AutoGen, LangGraph, PocketFlow, custom) who need to understand why Agent B failed after Agent A timed out.
6
+
7
+ ## Try it in 30 seconds
8
+
9
+ No install needed. Run this and see a full cascade failure traced across 5 agents:
10
+
11
+ ```bash
12
+ npx @nicofains1/agentwatch demo
13
+ ```
14
+
15
+ Output:
16
+
17
+ ```
18
+ AgentWatch Fleet Dashboard
19
+ ============================================================
20
+ Agents: 5 total | 3 healthy | 1 degraded | 1 error | 0 offline
21
+
22
+ Cascade Failure (4 steps, root cause: scheduler/dispatch-batch)
23
+ ============================================================
24
+ [ROOT] scheduler/dispatch-batch [ok] 15ms
25
+ |
26
+ [ 1 ] fetcher/call-api [error] 30000ms
27
+ TIMEOUT after 30000ms
28
+ |
29
+ [ 2 ] processor/transform [error] 120ms
30
+ Error: input is null - expected array from fetcher
31
+ |
32
+ [FAIL] notifier/send-alert [error] 8ms
33
+ Error: no processed data to report
34
+ ```
6
35
 
7
36
  ## Install
8
37
 
@@ -15,27 +44,31 @@ npm install @nicofains1/agentwatch
15
44
  ```typescript
16
45
  import { AgentWatch } from '@nicofains1/agentwatch';
17
46
 
18
- const aw = new AgentWatch(); // uses agentwatch.db by default
47
+ const aw = new AgentWatch(); // creates agentwatch.db
19
48
 
20
- // Register heartbeats from your agents
49
+ // 1. Report heartbeats from your agents
21
50
  aw.report('agent-a', 'healthy');
22
51
  aw.report('agent-b', 'healthy');
23
52
 
24
- // Trace cross-agent actions
53
+ // 2. Trace actions across agents
25
54
  const traceId = aw.createTraceId();
26
55
 
27
- const e1 = aw.trace(traceId, 'agent-a', 'fetch-data', 'url=https://api.example.com', 'rows=150');
28
- const e2 = aw.trace(traceId, 'agent-b', 'process', JSON.stringify({ rows: 150 }), '', {
29
- parentEventId: e1.id,
30
- status: 'error',
31
- durationMs: 4200,
32
- });
56
+ const e1 = aw.trace(traceId, 'agent-a', 'fetch-data',
57
+ 'url=https://api.example.com', 'rows=150');
33
58
 
34
- // Find the root cause
59
+ const e2 = aw.trace(traceId, 'agent-b', 'process',
60
+ JSON.stringify({ rows: 150 }), 'Error: out of memory', {
61
+ parentEventId: e1.id,
62
+ status: 'error',
63
+ durationMs: 4200,
64
+ });
65
+
66
+ // 3. Find the root cause
35
67
  const chain = aw.correlate(e2.id);
36
- console.log(chain?.root_cause); // -> agent-a / fetch-data
68
+ console.log(chain?.root_cause);
69
+ // -> { agent: 'agent-a', action: 'fetch-data', ... }
37
70
 
38
- // Fleet dashboard
71
+ // 4. Fleet dashboard
39
72
  console.log(aw.dashboardText());
40
73
  ```
41
74
 
@@ -53,14 +86,17 @@ console.log(aw.dashboardText());
53
86
 
54
87
  **Forensic replay** - Given a trace ID, replay all cascade chains to understand the full failure sequence.
55
88
 
89
+ **OpenTelemetry export** - Export traces as OTEL spans with GenAI semantic conventions. Plug into Jaeger, Grafana, or any OTEL-compatible backend.
90
+
56
91
  ## CLI
57
92
 
58
93
  ```bash
59
- npx agentwatch dashboard # Fleet health overview
60
- npx agentwatch cascade <event-id> # Trace cascade from a failure
61
- npx agentwatch failures [agent] # List recent failures
62
- npx agentwatch alerts [agent] # List active alerts
63
- npx agentwatch replay <trace-id> # Replay all cascades in a trace
94
+ npx @nicofains1/agentwatch demo # See it in action with sample data
95
+ npx @nicofains1/agentwatch dashboard # Fleet health overview
96
+ npx @nicofains1/agentwatch cascade <event-id> # Trace cascade from a failure
97
+ npx @nicofains1/agentwatch failures [agent] # List recent failures
98
+ npx @nicofains1/agentwatch alerts [agent] # List active alerts
99
+ npx @nicofains1/agentwatch replay <trace-id> # Replay all cascades in a trace
64
100
  ```
65
101
 
66
102
  Set `AGENTWATCH_DB` to point to your database file (default: `agentwatch.db`).
@@ -71,56 +107,68 @@ Set `AGENTWATCH_DB` to point to your database file (default: `agentwatch.db`).
71
107
 
72
108
  ```typescript
73
109
  const aw = new AgentWatch({
74
- db_path: 'agentwatch.db', // SQLite file path (default: agentwatch.db)
75
- alert_window_minutes: 30, // De-dup window for alerts (default: 30)
76
- heartbeat_stale_minutes: 30, // When to mark agents as offline (default: 30)
110
+ db_path: 'agentwatch.db', // SQLite file path
111
+ alert_window_minutes: 30, // De-dup window for alerts
112
+ heartbeat_stale_minutes: 30, // When to mark agents as offline
77
113
  });
78
114
  ```
79
115
 
80
116
  ### Heartbeats
81
117
 
82
118
  ```typescript
83
- aw.report(agent: string, status: 'healthy' | 'degraded' | 'error' | 'offline', context?: string)
84
- aw.getLatestHeartbeat(agent: string): Heartbeat | undefined
85
- aw.getFleetHealth(): AgentHealth[]
119
+ aw.report(agent, status, context?) // status: 'healthy' | 'degraded' | 'error' | 'offline'
120
+ aw.getLatestHeartbeat(agent) // -> Heartbeat | undefined
121
+ aw.getFleetHealth() // -> AgentHealth[]
86
122
  ```
87
123
 
88
124
  ### Tracing
89
125
 
90
126
  ```typescript
91
- aw.createTraceId(): string
92
- aw.trace(traceId, agent, action, input, output, opts?): TraceEvent
93
- aw.getTraceEvents(traceId: string): TraceEvent[]
94
- aw.getRecentFailures(agent?: string, limit?: number): TraceEvent[]
127
+ aw.createTraceId() // -> string (UUID)
128
+ aw.trace(traceId, agent, action, input, output, {
129
+ parentEventId?: number, // link to parent event
130
+ status?: 'ok' | 'error', // default: 'ok'
131
+ durationMs?: number, // execution time
132
+ }) // -> TraceEvent
133
+ aw.getTraceEvents(traceId) // -> TraceEvent[]
134
+ aw.getRecentFailures(agent?, limit?) // -> TraceEvent[]
95
135
  ```
96
136
 
97
137
  ### Cascade Detection
98
138
 
99
139
  ```typescript
100
- aw.correlate(failureEventId: number): CascadeChain | null
101
- aw.replay(traceId: string): CascadeChain[]
140
+ aw.correlate(failureEventId) // -> CascadeChain | null (walk back to root cause)
141
+ aw.replay(traceId) // -> CascadeChain[] (all cascades in a trace)
102
142
  ```
103
143
 
104
144
  ### Alerts
105
145
 
106
146
  ```typescript
107
- aw.alert(agent, alertType, message): Alert
108
- aw.resolveAlert(alertId: number): void
109
- aw.activeAlerts(agent?: string): Alert[]
147
+ aw.alert(agent, alertType, message) // auto-deduplicates within window
148
+ aw.resolveAlert(alertId)
149
+ aw.activeAlerts(agent?) // -> Alert[]
110
150
  ```
111
151
 
112
152
  ### Dashboard
113
153
 
114
154
  ```typescript
115
- aw.dashboard(): DashboardOutput
116
- aw.dashboardText(): string
155
+ aw.dashboard() // -> DashboardOutput (structured)
156
+ aw.dashboardText() // -> string (formatted for terminal)
157
+ ```
158
+
159
+ ### OpenTelemetry Export
160
+
161
+ ```typescript
162
+ // Requires optional peer deps: @opentelemetry/api, @opentelemetry/sdk-trace-base
163
+ await aw.exportTraceToOtel(traceId, { serviceName: 'my-agents' });
164
+ await aw.exportRecentToOtel(1); // last 1 hour
117
165
  ```
118
166
 
119
167
  ## Storage
120
168
 
121
169
  Uses SQLite via `better-sqlite3`. The database file is created automatically on first use. WAL mode is enabled for concurrent reads.
122
170
 
123
- Tables: `heartbeats`, `trace_events`, `alerts` - all with proper indexes for fast lookups.
171
+ Tables: `heartbeats`, `trace_events`, `alerts` - all with proper indexes.
124
172
 
125
173
  ## License
126
174
 
@@ -1 +1 @@
1
- {"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../src/alerts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,YAAY,CAAC;AAOvD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,GACzB,KAAK,CAuCP;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,GACd,IAAI,CAEN;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,KAAK,EAAE,CAWT"}
1
+ {"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../src/alerts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,YAAY,CAAC;AAOvD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,GACzB,KAAK,CAuCP;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,GACd,IAAI,CAEN;AAMD,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,KAAK,EAAE,CAWT"}
package/dist/alerts.js CHANGED
@@ -23,7 +23,7 @@ export function recordAlert(db, agent, alertType, message, windowMinutes = 30) {
23
23
  SET count = ?, severity = ?, message = ?, last_seen = datetime('now')
24
24
  WHERE id = ?
25
25
  `).run(newCount, severity, message, existing.id);
26
- return { ...existing, count: newCount, severity, message, last_seen: new Date().toISOString() };
26
+ return { ...existing, count: newCount, severity, message, last_seen: sqliteNow(), resolved: !!existing.resolved };
27
27
  }
28
28
  const stmt = db.prepare(`
29
29
  INSERT INTO alerts (agent, alert_type, severity, message)
@@ -37,25 +37,28 @@ export function recordAlert(db, agent, alertType, message, windowMinutes = 30) {
37
37
  severity: 'info',
38
38
  message,
39
39
  count: 1,
40
- first_seen: new Date().toISOString(),
41
- last_seen: new Date().toISOString(),
40
+ first_seen: sqliteNow(),
41
+ last_seen: sqliteNow(),
42
42
  resolved: false,
43
43
  };
44
44
  }
45
45
  export function resolveAlert(db, alertId) {
46
46
  db.prepare(`UPDATE alerts SET resolved = 1 WHERE id = ?`).run(alertId);
47
47
  }
48
+ function coerceAlert(row) {
49
+ return { ...row, resolved: !!row.resolved };
50
+ }
48
51
  export function getActiveAlerts(db, agent) {
49
52
  if (agent) {
50
53
  return db.prepare(`
51
54
  SELECT * FROM alerts WHERE agent = ? AND resolved = 0
52
55
  ORDER BY severity DESC, last_seen DESC
53
- `).all(agent);
56
+ `).all(agent).map(coerceAlert);
54
57
  }
55
58
  return db.prepare(`
56
59
  SELECT * FROM alerts WHERE resolved = 0
57
60
  ORDER BY severity DESC, last_seen DESC
58
- `).all();
61
+ `).all().map(coerceAlert);
59
62
  }
60
63
  function escalateSeverity(count) {
61
64
  if (count >= 10)
@@ -1 +1 @@
1
- {"version":3,"file":"alerts.js","sourceRoot":"","sources":["../src/alerts.ts"],"names":[],"mappings":"AAGA,SAAS,SAAS,CAAC,QAAQ,GAAG,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,EAAqB,EACrB,KAAa,EACb,SAAiB,EACjB,OAAe,EACf,gBAAwB,EAAE;IAE1B,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAK3B,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAsB,CAAC;IAE3D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5C,EAAE,CAAC,OAAO,CAAC;;;;KAIV,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEjD,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAClG,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;QAClC,KAAK;QACL,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,MAAM;QAChB,OAAO;QACP,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,EAAqB,EACrB,OAAe;IAEf,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,EAAqB,EACrB,KAAc;IAEd,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,CAAC,OAAO,CAAC;;;KAGjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAY,CAAC;IAC3B,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,CAAC;;;GAGjB,CAAC,CAAC,GAAG,EAAa,CAAC;AACtB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"alerts.js","sourceRoot":"","sources":["../src/alerts.ts"],"names":[],"mappings":"AAGA,SAAS,SAAS,CAAC,QAAQ,GAAG,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,EAAqB,EACrB,KAAa,EACb,SAAiB,EACjB,OAAe,EACf,gBAAwB,EAAE;IAE1B,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAK3B,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAsB,CAAC;IAE3D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5C,EAAE,CAAC,OAAO,CAAC;;;;KAIV,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEjD,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACpH,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;QAClC,KAAK;QACL,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,MAAM;QAChB,OAAO;QACP,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,SAAS,EAAE;QACvB,SAAS,EAAE,SAAS,EAAE;QACtB,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,EAAqB,EACrB,OAAe;IAEf,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,WAAW,CAAC,GAA4B;IAC/C,OAAO,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAW,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,EAAqB,EACrB,KAAc;IAEd,IAAI,KAAK,EAAE,CAAC;QACV,OAAQ,EAAE,CAAC,OAAO,CAAC;;;KAGlB,CAAC,CAAC,GAAG,CAAC,KAAK,CAA+B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IACD,OAAQ,EAAE,CAAC,OAAO,CAAC;;;GAGlB,CAAC,CAAC,GAAG,EAAgC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/cli/index.js CHANGED
@@ -1,118 +1,185 @@
1
1
  #!/usr/bin/env node
2
2
  import { AgentWatch } from '../index.js';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
3
5
  const args = process.argv.slice(2);
4
6
  const command = args[0];
5
- const dbPath = process.env.AGENTWATCH_DB ?? 'agentwatch.db';
6
- const aw = new AgentWatch({ db_path: dbPath });
7
- try {
8
- switch (command) {
9
- case 'dashboard': {
10
- console.log(aw.dashboardText());
11
- break;
12
- }
13
- case 'cascade': {
14
- const failureId = parseInt(args[1], 10);
15
- if (isNaN(failureId)) {
16
- console.error('Usage: agentwatch cascade <failure-event-id>');
17
- process.exit(1);
18
- }
19
- const chain = aw.correlate(failureId);
20
- if (!chain) {
21
- console.error(`No trace event found with id ${failureId}`);
22
- process.exit(1);
23
- }
24
- console.log(`Cascade for failure #${failureId}`);
7
+ if (command === 'demo') {
8
+ runDemo();
9
+ }
10
+ else {
11
+ const dbPath = process.env.AGENTWATCH_DB ?? 'agentwatch.db';
12
+ const aw = new AgentWatch({ db_path: dbPath });
13
+ runCli(aw, command);
14
+ }
15
+ function runDemo() {
16
+ const dbPath = join(tmpdir(), `agentwatch-demo-${Date.now()}.db`);
17
+ const aw = new AgentWatch({ db_path: dbPath });
18
+ try {
19
+ // Seed heartbeats for a 5-agent fleet
20
+ aw.report('scheduler', 'healthy', '{"tasks_queued": 12}');
21
+ aw.report('fetcher', 'healthy', '{"apis_connected": 3}');
22
+ aw.report('processor', 'degraded', '{"queue_depth": 847}');
23
+ aw.report('notifier', 'healthy', '{"channels": ["slack", "email"]}');
24
+ aw.report('reporter', 'error', '{"last_report": "failed"}');
25
+ // Create a cascade: fetcher times out -> processor gets bad data -> notifier fails
26
+ const t1 = aw.createTraceId();
27
+ const e1 = aw.trace(t1, 'scheduler', 'dispatch-batch', '{"batch_id": 42}', '{"assigned_to": "fetcher"}', { durationMs: 15 });
28
+ const e2 = aw.trace(t1, 'fetcher', 'call-api', '{"url": "https://api.vendor.io/data"}', 'TIMEOUT after 30000ms', { parentEventId: e1.id, status: 'error', durationMs: 30000 });
29
+ const e3 = aw.trace(t1, 'processor', 'transform', '{"source": "fetcher"}', 'Error: input is null - expected array from fetcher', { parentEventId: e2.id, status: 'error', durationMs: 120 });
30
+ const e4 = aw.trace(t1, 'notifier', 'send-alert', '{"type": "batch-complete"}', 'Error: no processed data to report', { parentEventId: e3.id, status: 'error', durationMs: 8 });
31
+ // A second trace that works fine
32
+ const t2 = aw.createTraceId();
33
+ aw.trace(t2, 'scheduler', 'dispatch-batch', '{"batch_id": 43}', '{"assigned_to": "fetcher"}', { durationMs: 10 });
34
+ aw.trace(t2, 'fetcher', 'call-api', '{"url": "https://api.vendor.io/data"}', '{"rows": 250}', { durationMs: 800 });
35
+ // Print everything
36
+ console.log(aw.dashboardText());
37
+ console.log('');
38
+ // Show cascade
39
+ const chain = aw.correlate(e4.id);
40
+ if (chain) {
41
+ console.log(`Cascade Failure (4 steps, root cause: ${chain.root_cause.agent}/${chain.root_cause.action})`);
25
42
  console.log('='.repeat(60));
26
- console.log(`Root cause: ${chain.root_cause.agent} / ${chain.root_cause.action}`);
27
- console.log(`Chain length: ${chain.chain.length} steps`);
28
- console.log('');
29
43
  for (let i = 0; i < chain.chain.length; i++) {
30
44
  const step = chain.chain[i];
31
- const prefix = i === 0 ? 'ROOT' : i === chain.chain.length - 1 ? 'FAIL' : ` ${i} `;
32
- console.log(`[${prefix}] ${step.agent} / ${step.action} (${step.status}, ${step.duration_ms}ms)`);
33
- console.log(` Input: ${truncate(step.input, 120)}`);
34
- console.log(` Output: ${truncate(step.output, 120)}`);
35
- console.log(` Time: ${step.timestamp}`);
45
+ const tag = i === 0 ? 'ROOT' : i === chain.chain.length - 1 ? 'FAIL' : ` ${i} `;
46
+ console.log(`[${tag}] ${step.agent}/${step.action} [${step.status}] ${step.duration_ms}ms`);
47
+ console.log(` ${truncate(step.output, 80)}`);
36
48
  if (i < chain.chain.length - 1)
37
49
  console.log(' |');
38
50
  }
39
- break;
40
51
  }
41
- case 'failures': {
42
- const agent = args[1];
43
- const limit = parseInt(args[2] ?? '20', 10);
44
- const failures = aw.getRecentFailures(agent, limit);
45
- if (failures.length === 0) {
46
- console.log('No recent failures.');
52
+ console.log('');
53
+ console.log(`Alerts: ${aw.activeAlerts().length} active`);
54
+ for (const a of aw.activeAlerts()) {
55
+ console.log(` [${a.severity.toUpperCase()}] ${a.agent}: ${truncate(a.message, 60)}`);
56
+ }
57
+ console.log('');
58
+ console.log('---');
59
+ console.log(`Demo database: ${dbPath}`);
60
+ console.log('Explore it:');
61
+ console.log(` AGENTWATCH_DB=${dbPath} npx @nicofains1/agentwatch dashboard`);
62
+ console.log(` AGENTWATCH_DB=${dbPath} npx @nicofains1/agentwatch failures`);
63
+ console.log(` AGENTWATCH_DB=${dbPath} npx @nicofains1/agentwatch cascade ${e4.id}`);
64
+ console.log(` AGENTWATCH_DB=${dbPath} npx @nicofains1/agentwatch replay ${t1}`);
65
+ }
66
+ finally {
67
+ aw.close();
68
+ }
69
+ return;
70
+ }
71
+ function runCli(aw, command) {
72
+ try {
73
+ switch (command) {
74
+ case 'dashboard': {
75
+ console.log(aw.dashboardText());
47
76
  break;
48
77
  }
49
- console.log(`Recent failures${agent ? ` for ${agent}` : ''} (${failures.length})`);
50
- console.log('='.repeat(60));
51
- for (const f of failures) {
52
- console.log(`#${f.id} | ${f.agent} / ${f.action} | trace=${f.trace_id.slice(0, 8)} | ${f.created_at}`);
53
- console.log(` Output: ${truncate(f.output, 100)}`);
54
- }
55
- break;
56
- }
57
- case 'alerts': {
58
- const alertAgent = args[1];
59
- const alerts = aw.activeAlerts(alertAgent);
60
- if (alerts.length === 0) {
61
- console.log('No active alerts.');
78
+ case 'cascade': {
79
+ const failureId = parseInt(args[1], 10);
80
+ if (isNaN(failureId)) {
81
+ console.error('Usage: agentwatch cascade <failure-event-id>');
82
+ process.exit(1);
83
+ }
84
+ const chain = aw.correlate(failureId);
85
+ if (!chain) {
86
+ console.error(`No trace event found with id ${failureId}`);
87
+ process.exit(1);
88
+ }
89
+ console.log(`Cascade for failure #${failureId}`);
90
+ console.log('='.repeat(60));
91
+ console.log(`Root cause: ${chain.root_cause.agent} / ${chain.root_cause.action}`);
92
+ console.log(`Chain length: ${chain.chain.length} steps`);
93
+ console.log('');
94
+ for (let i = 0; i < chain.chain.length; i++) {
95
+ const step = chain.chain[i];
96
+ const prefix = i === 0 ? 'ROOT' : i === chain.chain.length - 1 ? 'FAIL' : ` ${i} `;
97
+ console.log(`[${prefix}] ${step.agent} / ${step.action} (${step.status}, ${step.duration_ms}ms)`);
98
+ console.log(` Input: ${truncate(step.input, 120)}`);
99
+ console.log(` Output: ${truncate(step.output, 120)}`);
100
+ console.log(` Time: ${step.timestamp}`);
101
+ if (i < chain.chain.length - 1)
102
+ console.log(' |');
103
+ }
62
104
  break;
63
105
  }
64
- console.log(`Active alerts (${alerts.length})`);
65
- console.log('='.repeat(60));
66
- for (const a of alerts) {
67
- console.log(`[${a.severity.toUpperCase()}] ${a.agent} / ${a.alert_type} (x${a.count})`);
68
- console.log(` ${a.message}`);
69
- console.log(` First: ${a.first_seen} | Last: ${a.last_seen}`);
106
+ case 'failures': {
107
+ const agent = args[1];
108
+ const limit = parseInt(args[2] ?? '20', 10);
109
+ const failures = aw.getRecentFailures(agent, limit);
110
+ if (failures.length === 0) {
111
+ console.log('No recent failures.');
112
+ break;
113
+ }
114
+ console.log(`Recent failures${agent ? ` for ${agent}` : ''} (${failures.length})`);
115
+ console.log('='.repeat(60));
116
+ for (const f of failures) {
117
+ console.log(`#${f.id} | ${f.agent} / ${f.action} | trace=${f.trace_id.slice(0, 8)} | ${f.created_at}`);
118
+ console.log(` Output: ${truncate(f.output, 100)}`);
119
+ }
120
+ break;
70
121
  }
71
- break;
72
- }
73
- case 'replay': {
74
- const traceId = args[1];
75
- if (!traceId) {
76
- console.error('Usage: agentwatch replay <trace-id>');
77
- process.exit(1);
122
+ case 'alerts': {
123
+ const alertAgent = args[1];
124
+ const alerts = aw.activeAlerts(alertAgent);
125
+ if (alerts.length === 0) {
126
+ console.log('No active alerts.');
127
+ break;
128
+ }
129
+ console.log(`Active alerts (${alerts.length})`);
130
+ console.log('='.repeat(60));
131
+ for (const a of alerts) {
132
+ console.log(`[${a.severity.toUpperCase()}] ${a.agent} / ${a.alert_type} (x${a.count})`);
133
+ console.log(` ${a.message}`);
134
+ console.log(` First: ${a.first_seen} | Last: ${a.last_seen}`);
135
+ }
136
+ break;
78
137
  }
79
- const chains = aw.replay(traceId);
80
- if (chains.length === 0) {
81
- console.log(`No failures found in trace ${traceId}`);
138
+ case 'replay': {
139
+ const traceId = args[1];
140
+ if (!traceId) {
141
+ console.error('Usage: agentwatch replay <trace-id>');
142
+ process.exit(1);
143
+ }
144
+ const chains = aw.replay(traceId);
145
+ if (chains.length === 0) {
146
+ console.log(`No failures found in trace ${traceId}`);
147
+ break;
148
+ }
149
+ console.log(`Trace ${traceId} - ${chains.length} cascade(s) found`);
150
+ console.log('='.repeat(60));
151
+ for (const chain of chains) {
152
+ console.log('');
153
+ console.log(`Cascade -> failure #${chain.failure_id} (${chain.chain.length} steps)`);
154
+ for (let i = 0; i < chain.chain.length; i++) {
155
+ const step = chain.chain[i];
156
+ const arrow = i < chain.chain.length - 1 ? ' ->' : ' X';
157
+ console.log(` ${step.agent}/${step.action} [${step.status}]${arrow}`);
158
+ console.log(` in: ${truncate(step.input, 80)}`);
159
+ console.log(` out: ${truncate(step.output, 80)}`);
160
+ }
161
+ }
82
162
  break;
83
163
  }
84
- console.log(`Trace ${traceId} - ${chains.length} cascade(s) found`);
85
- console.log('='.repeat(60));
86
- for (const chain of chains) {
164
+ default: {
165
+ console.log('AgentWatch - Multi-agent observability');
87
166
  console.log('');
88
- console.log(`Cascade -> failure #${chain.failure_id} (${chain.chain.length} steps)`);
89
- for (let i = 0; i < chain.chain.length; i++) {
90
- const step = chain.chain[i];
91
- const arrow = i < chain.chain.length - 1 ? ' ->' : ' X';
92
- console.log(` ${step.agent}/${step.action} [${step.status}]${arrow}`);
93
- console.log(` in: ${truncate(step.input, 80)}`);
94
- console.log(` out: ${truncate(step.output, 80)}`);
95
- }
167
+ console.log('Usage:');
168
+ console.log(' agentwatch demo Run a demo with sample data');
169
+ console.log(' agentwatch dashboard Fleet health overview');
170
+ console.log(' agentwatch cascade <event-id> Trace cascade from failure');
171
+ console.log(' agentwatch failures [agent] List recent failures');
172
+ console.log(' agentwatch alerts [agent] List active alerts');
173
+ console.log(' agentwatch replay <trace-id> Replay all cascades in a trace');
174
+ console.log('');
175
+ console.log('Environment:');
176
+ console.log(' AGENTWATCH_DB Path to SQLite database (default: agentwatch.db)');
96
177
  }
97
- break;
98
- }
99
- default: {
100
- console.log('AgentWatch - Multi-agent observability');
101
- console.log('');
102
- console.log('Usage:');
103
- console.log(' agentwatch dashboard Fleet health overview');
104
- console.log(' agentwatch cascade <event-id> Trace cascade from failure');
105
- console.log(' agentwatch failures [agent] List recent failures');
106
- console.log(' agentwatch alerts [agent] List active alerts');
107
- console.log(' agentwatch replay <trace-id> Replay all cascades in a trace');
108
- console.log('');
109
- console.log('Environment:');
110
- console.log(' AGENTWATCH_DB Path to SQLite database (default: agentwatch.db)');
111
178
  }
112
179
  }
113
- }
114
- finally {
115
- aw.close();
180
+ finally {
181
+ aw.close();
182
+ }
116
183
  }
117
184
  function truncate(s, max) {
118
185
  const oneline = s.replace(/\n/g, ' ');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
package/dist/heartbeat.js CHANGED
@@ -14,7 +14,7 @@ export function report(db, agent, status, context = '{}') {
14
14
  agent,
15
15
  status,
16
16
  context,
17
- created_at: new Date().toISOString(),
17
+ created_at: sqliteNow(),
18
18
  };
19
19
  }
20
20
  export function getLatestHeartbeat(db, agent) {
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,SAAS,SAAS,CAAC,QAAQ,GAAG,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,EAAqB,EACrB,KAAa,EACb,MAAmB,EACnB,UAAkB,IAAI;IAEtB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;QAClC,KAAK;QACL,MAAM;QACN,OAAO;QACP,UAAU,EAAE,SAAS,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,EAAqB,EACrB,KAAa;IAEb,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;GAKjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAA0B,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAqB,EACrB,eAAuB,EAAE;IAEzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;GAEzB,CAAC,CAAC,GAAG,EAAyB,CAAC;IAEhC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAwB,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QAC1G,CAAC;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC;QACnD,MAAM,MAAM,GAAgB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAEhE,0DAA0D;QAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG7B,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAoB,CAAC;QAEzC,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG/B,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAoB,CAAC;QAEzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACvD,CAAC,CAAC,CAAC,CAAC;QAEN,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAoB,CAAC;QAEjC,OAAO;YACL,KAAK;YACL,MAAM;YACN,cAAc,EAAE,MAAM,CAAC,UAAU;YACjC,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,UAAU,CAAC,GAAG;SAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { AgentWatchConfig, AgentStatus, TraceEvent, CascadeChain } from './types.js';
2
+ import type { OtelExportOptions } from './otel.js';
2
3
  export declare class AgentWatch {
3
4
  private db;
4
5
  private alertWindowMinutes;
@@ -22,8 +23,12 @@ export declare class AgentWatch {
22
23
  getRecentFailures(agent?: string, limit?: number): TraceEvent[];
23
24
  getLatestHeartbeat(agent: string): import("./types.js").Heartbeat | undefined;
24
25
  getFleetHealth(): import("./types.js").AgentHealth[];
26
+ exportTraceToOtel(traceId: string, options?: OtelExportOptions): Promise<number>;
27
+ exportRecentToOtel(hours?: number, options?: OtelExportOptions): Promise<number>;
25
28
  close(): void;
26
29
  }
27
30
  export type { AgentStatus, AlertSeverity, Heartbeat, TraceEvent, Alert, AgentHealth, CascadeStep, CascadeChain, AgentWatchConfig, } from './types.js';
28
31
  export { createTraceId } from './trace.js';
32
+ export { exportTraceEvents } from './otel.js';
33
+ export type { OtelExportOptions } from './otel.js';
29
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1F,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,qBAAqB,CAAS;gBAE1B,MAAM,GAAE,gBAAqB;IAQzC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,MAAa;IAKjE,KAAK,CACH,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9E,UAAU;IAWb,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKtD,SAAS;IAIT,aAAa,IAAI,MAAM;IAKvB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIvD,YAAY,CAAC,OAAO,EAAE,MAAM;IAI5B,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM;IAK3B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAKvC,aAAa,IAAI,MAAM;IAIvB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAI7C,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAI/D,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAIhC,cAAc;IAId,KAAK;CAGN;AAGD,YAAY,EACV,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,KAAK,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,qBAAqB,CAAS;gBAE1B,MAAM,GAAE,gBAAqB;IAQzC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,MAAa;IAKjE,KAAK,CACH,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9E,UAAU;IAWb,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKtD,SAAS;IAIT,aAAa,IAAI,MAAM;IAKvB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIvD,YAAY,CAAC,OAAO,EAAE,MAAM;IAI5B,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM;IAK3B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAKvC,aAAa,IAAI,MAAM;IAIvB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAI7C,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAI/D,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAIhC,cAAc;IAKR,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAMhF,kBAAkB,CAAC,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAWzF,KAAK;CAGN;AAGD,YAAY,EACV,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,KAAK,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -66,10 +66,27 @@ export class AgentWatch {
66
66
  getFleetHealth() {
67
67
  return getFleetHealth(this.db, this.heartbeatStaleMinutes);
68
68
  }
69
+ // Feature 6: OTEL span export
70
+ async exportTraceToOtel(traceId, options) {
71
+ const events = this.getTraceEvents(traceId);
72
+ const { exportTraceEvents } = await import('./otel.js');
73
+ return exportTraceEvents(events, options);
74
+ }
75
+ async exportRecentToOtel(hours = 1, options) {
76
+ const since = new Date(Date.now() - hours * 3600_000).toISOString().replace('T', ' ').replace('Z', '');
77
+ const events = this.db.prepare(`
78
+ SELECT * FROM trace_events
79
+ WHERE created_at >= ?
80
+ ORDER BY created_at ASC
81
+ `).all(since);
82
+ const { exportTraceEvents } = await import('./otel.js');
83
+ return exportTraceEvents(events, options);
84
+ }
69
85
  close() {
70
86
  this.db.close();
71
87
  }
72
88
  }
73
89
  // Re-export for direct use
74
90
  export { createTraceId } from './trace.js';
91
+ export { exportTraceEvents } from './otel.js';
75
92
  //# 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":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7G,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG/D,MAAM,OAAO,UAAU;IACb,EAAE,CAAoB;IACtB,kBAAkB,CAAS;IAC3B,qBAAqB,CAAS;IAEtC,YAAY,SAA2B,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;QACjD,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,oCAAoC;IACpC,MAAM,CAAC,KAAa,EAAE,MAAmB,EAAE,UAAkB,IAAI;QAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,2CAA2C;IAC3C,KAAK,CACH,OAAe,EACf,KAAa,EACb,MAAc,EACd,KAAa,EACb,MAAc,EACd,IAA+E;QAE/E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE1E,uBAAuB;QACvB,IAAI,IAAI,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,cAAsB;QAC9B,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5C,CAAC;IAED,oCAAoC;IACpC,SAAS;QACP,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa;QACX,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,KAAa,EAAE,SAAiB,EAAE,OAAe;QACrD,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClF,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,OAAe;QACpB,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,YAAY;IACZ,aAAa;QACX,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,iBAAiB,CAAC,KAAc,EAAE,KAAc;QAC9C,OAAO,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,kBAAkB,CAAC,KAAa;QAC9B,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc;QACZ,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAeD,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/otel.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * OpenTelemetry span exporter for AgentWatch traces.
3
+ *
4
+ * Converts stored trace events into OTEL spans following the
5
+ * GenAI semantic conventions (gen_ai.operation.name = "invoke_agent").
6
+ *
7
+ * Requires optional peer dependencies:
8
+ * @opentelemetry/api
9
+ * @opentelemetry/sdk-trace-base
10
+ */
11
+ import type { TraceEvent } from './types.js';
12
+ /** Options for creating an OTEL exporter from AgentWatch traces. */
13
+ export interface OtelExportOptions {
14
+ /** OTEL SpanExporter instance. If not provided, uses ConsoleSpanExporter. */
15
+ exporter?: unknown;
16
+ /** Service name reported in OTEL resource. Default: "agentwatch" */
17
+ serviceName?: string;
18
+ }
19
+ /**
20
+ * Export an array of AgentWatch trace events as OTEL spans.
21
+ *
22
+ * Each TraceEvent becomes a span with GenAI semantic attributes.
23
+ * Parent-child relationships are preserved where possible within
24
+ * the same export batch.
25
+ */
26
+ export declare function exportTraceEvents(events: TraceEvent[], options?: OtelExportOptions): Promise<number>;
27
+ //# sourceMappingURL=otel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoDD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA0DjB"}
package/dist/otel.js ADDED
@@ -0,0 +1,80 @@
1
+ /**
2
+ * OpenTelemetry span exporter for AgentWatch traces.
3
+ *
4
+ * Converts stored trace events into OTEL spans following the
5
+ * GenAI semantic conventions (gen_ai.operation.name = "invoke_agent").
6
+ *
7
+ * Requires optional peer dependencies:
8
+ * @opentelemetry/api
9
+ * @opentelemetry/sdk-trace-base
10
+ */
11
+ let otelApi = null;
12
+ let sdkTrace = null;
13
+ async function loadOtelDeps() {
14
+ if (otelApi && sdkTrace)
15
+ return { api: otelApi, sdk: sdkTrace };
16
+ try {
17
+ otelApi = await import('@opentelemetry/api');
18
+ sdkTrace = await import('@opentelemetry/sdk-trace-base');
19
+ return { api: otelApi, sdk: sdkTrace };
20
+ }
21
+ catch {
22
+ throw new Error('OpenTelemetry packages not installed. Run: npm install @opentelemetry/api @opentelemetry/sdk-trace-base');
23
+ }
24
+ }
25
+ /**
26
+ * Export an array of AgentWatch trace events as OTEL spans.
27
+ *
28
+ * Each TraceEvent becomes a span with GenAI semantic attributes.
29
+ * Parent-child relationships are preserved where possible within
30
+ * the same export batch.
31
+ */
32
+ export async function exportTraceEvents(events, options = {}) {
33
+ if (events.length === 0)
34
+ return 0;
35
+ const { sdk } = await loadOtelDeps();
36
+ const exporter = (options.exporter ?? new sdk.ConsoleSpanExporter());
37
+ const processor = new sdk.SimpleSpanProcessor(exporter);
38
+ const provider = new sdk.BasicTracerProvider({
39
+ spanProcessors: [processor],
40
+ });
41
+ const tracer = provider.getTracer(options.serviceName ?? 'agentwatch', '0.1.0');
42
+ let exported = 0;
43
+ for (const event of events) {
44
+ const spanName = `invoke_agent ${event.agent}`;
45
+ const startTime = new Date(event.created_at);
46
+ const startMs = startTime.getTime();
47
+ const span = tracer.startSpan(spanName, {
48
+ startTime: [Math.floor(startMs / 1000), (startMs % 1000) * 1_000_000],
49
+ });
50
+ // GenAI semantic conventions
51
+ span.setAttribute('gen_ai.operation.name', 'invoke_agent');
52
+ span.setAttribute('gen_ai.agent.name', event.agent);
53
+ // AgentWatch-specific attributes
54
+ span.setAttribute('agentwatch.trace_id', event.trace_id);
55
+ span.setAttribute('agentwatch.action', event.action);
56
+ span.setAttribute('agentwatch.event_id', event.id);
57
+ span.setAttribute('agentwatch.duration_ms', event.duration_ms);
58
+ if (event.input)
59
+ span.setAttribute('agentwatch.input', event.input);
60
+ if (event.output)
61
+ span.setAttribute('agentwatch.output', event.output);
62
+ if (event.parent_event_id !== null) {
63
+ span.setAttribute('agentwatch.parent_event_id', event.parent_event_id);
64
+ }
65
+ if (event.status === 'error') {
66
+ span.setStatus({ code: 2, message: event.output }); // SpanStatusCode.ERROR = 2
67
+ span.setAttribute('error.type', `agent_error:${event.action}`);
68
+ }
69
+ else {
70
+ span.setStatus({ code: 1 }); // SpanStatusCode.OK = 1
71
+ }
72
+ // End span at start + duration
73
+ const endMs = startMs + event.duration_ms;
74
+ span.end([Math.floor(endMs / 1000), (endMs % 1000) * 1_000_000]);
75
+ exported++;
76
+ }
77
+ await provider.forceFlush();
78
+ return exported;
79
+ }
80
+ //# sourceMappingURL=otel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAExE,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,KAAK,CACnB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IACJ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GACL,UAAU,CA2BZ;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,GACd,UAAU,EAAE,CAMd;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,cAAc,EAAE,MAAM,GACrB,YAAY,GAAG,IAAI,CAkCrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,GAAE,MAAW,GACjB,UAAU,EAAE,CAed;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,GACd,YAAY,EAAE,CAUhB"}
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAQxE,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,KAAK,CACnB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IACJ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GACL,UAAU,CA2BZ;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,GACd,UAAU,EAAE,CAMd;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,cAAc,EAAE,MAAM,GACrB,YAAY,GAAG,IAAI,CAkCrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,GAAE,MAAW,GACjB,UAAU,EAAE,CAed;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,GACd,YAAY,EAAE,CAUhB"}
package/dist/trace.js CHANGED
@@ -1,4 +1,9 @@
1
1
  import { randomUUID } from 'node:crypto';
2
+ /** Format a date as SQLite-compatible `YYYY-MM-DD HH:MM:SS` */
3
+ function sqliteNow() {
4
+ const d = new Date();
5
+ return d.toISOString().replace('T', ' ').replace(/\.\d{3}Z$/, '');
6
+ }
2
7
  export function createTraceId() {
3
8
  return randomUUID();
4
9
  }
@@ -18,7 +23,7 @@ export function trace(db, traceId, agent, action, input, output, opts = {}) {
18
23
  parent_event_id: opts.parentEventId ?? null,
19
24
  status: opts.status ?? 'ok',
20
25
  duration_ms: opts.durationMs ?? 0,
21
- created_at: new Date().toISOString(),
26
+ created_at: sqliteNow(),
22
27
  };
23
28
  }
24
29
  export function getTraceEvents(db, traceId) {
package/dist/trace.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,EAAqB,EACrB,OAAe,EACf,KAAa,EACb,MAAc,EACd,KAAa,EACb,MAAc,EACd,OAII,EAAE;IAEN,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,OAAO,EACP,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,IAAI,CAAC,aAAa,IAAI,IAAI,EAC1B,IAAI,CAAC,MAAM,IAAI,IAAI,EACnB,IAAI,CAAC,UAAU,IAAI,CAAC,CACrB,CAAC;IACF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;QAClC,QAAQ,EAAE,OAAO;QACjB,KAAK;QACL,MAAM;QACN,KAAK;QACL,MAAM;QACN,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;QAC3C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC3B,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;QACjC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAqB,EACrB,OAAe;IAEf,OAAO,EAAE,CAAC,OAAO,CAAC;;;;GAIjB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAiB,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,EAAqB,EACrB,cAAsB;IAEtB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;GAE1B,CAAC,CAAC,GAAG,CAAC,cAAc,CAA2B,CAAC;IAEjD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,OAAO,GAA2B,OAAO,CAAC;IAE9C,OAAO,OAAO,EAAE,CAAC;QACf,KAAK,CAAC,OAAO,CAAC;YACZ,QAAQ,EAAE,OAAO,CAAC,EAAE;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI;YAAE,MAAM;QAE5C,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;KAEpB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAA2B,CAAC;IAC5D,CAAC;IAED,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACpB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAqB,EACrB,KAAc,EACd,QAAgB,EAAE;IAElB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;KAKjB,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAiB,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;GAKjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAiB,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,EAAqB,EACrB,OAAe;IAEf,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAI3B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAiB,CAAC;IAEhC,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nicofains1/agentwatch",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Multi-agent observability: cascade failure detection, heartbeats, and forensic replay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,7 +18,17 @@
18
18
  "dependencies": {
19
19
  "better-sqlite3": "^11.8.0"
20
20
  },
21
+ "peerDependencies": {
22
+ "@opentelemetry/api": "^1.9.0",
23
+ "@opentelemetry/sdk-trace-base": "^1.30.0 || ^2.0.0"
24
+ },
25
+ "peerDependenciesMeta": {
26
+ "@opentelemetry/api": { "optional": true },
27
+ "@opentelemetry/sdk-trace-base": { "optional": true }
28
+ },
21
29
  "devDependencies": {
30
+ "@opentelemetry/api": "^1.9.0",
31
+ "@opentelemetry/sdk-trace-base": "^2.0.0",
22
32
  "@types/better-sqlite3": "^7.6.8"
23
33
  },
24
34
  "files": [
@@ -34,7 +44,9 @@
34
44
  "tracing",
35
45
  "fleet-management",
36
46
  "ai-agents",
37
- "debugging"
47
+ "debugging",
48
+ "opentelemetry",
49
+ "otel"
38
50
  ],
39
51
  "author": "nicofains1",
40
52
  "repository": {