@nicofains1/agentwatch 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +84 -36
- package/dist/cli/index.js +159 -92
- package/dist/cli/index.js.map +1 -1
- package/package.json +4 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 nicofains1
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
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(); //
|
|
47
|
+
const aw = new AgentWatch(); // creates agentwatch.db
|
|
19
48
|
|
|
20
|
-
//
|
|
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
|
|
53
|
+
// 2. Trace actions across agents
|
|
25
54
|
const traceId = aw.createTraceId();
|
|
26
55
|
|
|
27
|
-
const e1 = aw.trace(traceId, 'agent-a', 'fetch-data',
|
|
28
|
-
|
|
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
|
-
|
|
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);
|
|
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
|
|
60
|
-
npx agentwatch
|
|
61
|
-
npx agentwatch
|
|
62
|
-
npx agentwatch
|
|
63
|
-
npx agentwatch
|
|
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
|
|
75
|
-
alert_window_minutes: 30, // De-dup window for alerts
|
|
76
|
-
heartbeat_stale_minutes: 30, // When to mark agents as offline
|
|
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
|
|
84
|
-
aw.getLatestHeartbeat(agent
|
|
85
|
-
aw.getFleetHealth()
|
|
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()
|
|
92
|
-
aw.trace(traceId, agent, action, input, output,
|
|
93
|
-
|
|
94
|
-
|
|
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
|
|
101
|
-
aw.replay(traceId
|
|
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)
|
|
108
|
-
aw.resolveAlert(alertId
|
|
109
|
-
aw.activeAlerts(agent
|
|
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()
|
|
116
|
-
aw.dashboardText()
|
|
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
|
|
171
|
+
Tables: `heartbeats`, `trace_events`, `alerts` - all with proper indexes.
|
|
124
172
|
|
|
125
173
|
## License
|
|
126
174
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
32
|
-
console.log(`[${
|
|
33
|
-
console.log(`
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
console.log('
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
for (const chain of chains) {
|
|
164
|
+
default: {
|
|
165
|
+
console.log('AgentWatch - Multi-agent observability');
|
|
87
166
|
console.log('');
|
|
88
|
-
console.log(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
115
|
-
|
|
180
|
+
finally {
|
|
181
|
+
aw.close();
|
|
182
|
+
}
|
|
116
183
|
}
|
|
117
184
|
function truncate(s, max) {
|
|
118
185
|
const oneline = s.replace(/\n/g, ' ');
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.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.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Multi-agent observability: cascade failure detection, heartbeats, and forensic replay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
"better-sqlite3": "^11.8.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@types/better-sqlite3": "^7.6.8"
|
|
22
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
23
|
+
"typescript": "^5.7.0",
|
|
24
|
+
"vitest": "^3.0.0"
|
|
23
25
|
},
|
|
24
26
|
"files": [
|
|
25
27
|
"dist"
|