swarm-engine 1.51.0 → 1.54.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/dist/cli/commands/usage.d.ts +3 -0
- package/dist/cli/commands/usage.d.ts.map +1 -0
- package/dist/cli/commands/usage.js +85 -0
- package/dist/cli/commands/usage.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/types.d.ts +21 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/hooks/cli.js +4 -1
- package/dist/hooks/cli.js.map +1 -1
- package/dist/hooks/index.d.ts +9 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +54 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/transcript-parser.d.ts +68 -0
- package/dist/hooks/transcript-parser.d.ts.map +1 -0
- package/dist/hooks/transcript-parser.js +163 -0
- package/dist/hooks/transcript-parser.js.map +1 -0
- package/dist/hooks/usage-logger.d.ts +30 -0
- package/dist/hooks/usage-logger.d.ts.map +1 -0
- package/dist/hooks/usage-logger.js +67 -0
- package/dist/hooks/usage-logger.js.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/agent-runner.d.ts +1 -0
- package/dist/runtime/agent-runner.d.ts.map +1 -1
- package/dist/runtime/agent-runner.js +77 -10
- package/dist/runtime/agent-runner.js.map +1 -1
- package/dist/runtime/backends/claude.d.ts +29 -0
- package/dist/runtime/backends/claude.d.ts.map +1 -1
- package/dist/runtime/backends/claude.js +63 -1
- package/dist/runtime/backends/claude.js.map +1 -1
- package/dist/runtime/engine.d.ts +1 -0
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +100 -1
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/handoff.d.ts +8 -0
- package/dist/runtime/handoff.d.ts.map +1 -0
- package/dist/runtime/handoff.js +109 -0
- package/dist/runtime/handoff.js.map +1 -0
- package/dist/runtime/heuristics.d.ts +2 -1
- package/dist/runtime/heuristics.d.ts.map +1 -1
- package/dist/runtime/heuristics.js +15 -2
- package/dist/runtime/heuristics.js.map +1 -1
- package/dist/runtime/model-router.d.ts +2 -1
- package/dist/runtime/model-router.d.ts.map +1 -1
- package/dist/runtime/model-router.js +8 -1
- package/dist/runtime/model-router.js.map +1 -1
- package/dist/runtime/savings-manifest.d.ts +66 -0
- package/dist/runtime/savings-manifest.d.ts.map +1 -0
- package/dist/runtime/savings-manifest.js +103 -0
- package/dist/runtime/savings-manifest.js.map +1 -0
- package/dist/runtime/stats.d.ts.map +1 -1
- package/dist/runtime/stats.js +6 -0
- package/dist/runtime/stats.js.map +1 -1
- package/dist/runtime/violation-tracker.d.ts +31 -0
- package/dist/runtime/violation-tracker.d.ts.map +1 -0
- package/dist/runtime/violation-tracker.js +125 -0
- package/dist/runtime/violation-tracker.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
3
|
+
import { dirname } from 'path';
|
|
4
|
+
import { getDatabase } from './database.js';
|
|
5
|
+
export class ViolationTracker {
|
|
6
|
+
db;
|
|
7
|
+
ownDb;
|
|
8
|
+
constructor(dbPath) {
|
|
9
|
+
if (dbPath) {
|
|
10
|
+
const dir = dirname(dbPath);
|
|
11
|
+
if (!existsSync(dir))
|
|
12
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
13
|
+
this.db = new Database(dbPath);
|
|
14
|
+
this.db.pragma('journal_mode = WAL');
|
|
15
|
+
this.db.pragma('busy_timeout = 5000');
|
|
16
|
+
this.ownDb = true;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.db = getDatabase();
|
|
20
|
+
this.ownDb = false;
|
|
21
|
+
}
|
|
22
|
+
this.initSchema();
|
|
23
|
+
}
|
|
24
|
+
initSchema() {
|
|
25
|
+
this.db.exec(`
|
|
26
|
+
CREATE TABLE IF NOT EXISTS violation_log (
|
|
27
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
+
type TEXT NOT NULL,
|
|
29
|
+
orchestration_id TEXT NOT NULL,
|
|
30
|
+
phase TEXT,
|
|
31
|
+
agent_type TEXT,
|
|
32
|
+
details TEXT NOT NULL,
|
|
33
|
+
repo TEXT,
|
|
34
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
35
|
+
);
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_violation_type ON violation_log(type);
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_violation_repo ON violation_log(repo);
|
|
38
|
+
`);
|
|
39
|
+
}
|
|
40
|
+
/** Record a violation */
|
|
41
|
+
record(violation) {
|
|
42
|
+
this.db
|
|
43
|
+
.prepare(`INSERT INTO violation_log (type, orchestration_id, phase, agent_type, details, repo)
|
|
44
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
45
|
+
.run(violation.type, violation.orchestrationId, violation.phase ?? null, violation.agentType ?? null, violation.details, violation.repo ?? null);
|
|
46
|
+
}
|
|
47
|
+
/** Get hot spots — violations that recurred across multiple orchestrations */
|
|
48
|
+
getHotSpots(repo, minCount) {
|
|
49
|
+
const min = minCount ?? 2;
|
|
50
|
+
// Use a simpler two-query approach for the "most recent details" to avoid
|
|
51
|
+
// correlated subquery issues with the GROUP BY + HAVING clause.
|
|
52
|
+
let rows;
|
|
53
|
+
if (repo) {
|
|
54
|
+
rows = this.db
|
|
55
|
+
.prepare(`SELECT type, COUNT(*) as count, MAX(created_at) as last_seen
|
|
56
|
+
FROM violation_log
|
|
57
|
+
WHERE repo = ?
|
|
58
|
+
GROUP BY type
|
|
59
|
+
HAVING count >= ?
|
|
60
|
+
ORDER BY count DESC`)
|
|
61
|
+
.all(repo, min);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
rows = this.db
|
|
65
|
+
.prepare(`SELECT type, COUNT(*) as count, MAX(created_at) as last_seen
|
|
66
|
+
FROM violation_log
|
|
67
|
+
GROUP BY type
|
|
68
|
+
HAVING count >= ?
|
|
69
|
+
ORDER BY count DESC`)
|
|
70
|
+
.all(min);
|
|
71
|
+
}
|
|
72
|
+
return rows.map((r) => {
|
|
73
|
+
// Fetch most recent details for this type in a separate query
|
|
74
|
+
let detailRow;
|
|
75
|
+
if (repo) {
|
|
76
|
+
detailRow = this.db
|
|
77
|
+
.prepare(`SELECT details FROM violation_log WHERE type = ? AND repo = ? ORDER BY created_at DESC LIMIT 1`)
|
|
78
|
+
.get(r.type, repo);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
detailRow = this.db
|
|
82
|
+
.prepare(`SELECT details FROM violation_log WHERE type = ? ORDER BY created_at DESC LIMIT 1`)
|
|
83
|
+
.get(r.type);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
type: r.type,
|
|
87
|
+
count: r.count,
|
|
88
|
+
lastSeen: r.last_seen,
|
|
89
|
+
details: detailRow?.details ?? '',
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/** Get recent violations for a specific orchestration */
|
|
94
|
+
getForOrchestration(orchestrationId) {
|
|
95
|
+
const rows = this.db
|
|
96
|
+
.prepare(`SELECT type, orchestration_id, phase, agent_type, details, repo
|
|
97
|
+
FROM violation_log WHERE orchestration_id = ?
|
|
98
|
+
ORDER BY id DESC`)
|
|
99
|
+
.all(orchestrationId);
|
|
100
|
+
return rows.map((r) => ({
|
|
101
|
+
type: r.type,
|
|
102
|
+
orchestrationId: r.orchestration_id,
|
|
103
|
+
phase: r.phase ?? undefined,
|
|
104
|
+
agentType: r.agent_type ?? undefined,
|
|
105
|
+
details: r.details,
|
|
106
|
+
repo: r.repo ?? undefined,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
/** Format hot spots as a pre-flight warning string */
|
|
110
|
+
formatPreFlightWarnings(repo) {
|
|
111
|
+
const hotSpots = this.getHotSpots(repo, 2);
|
|
112
|
+
if (hotSpots.length === 0)
|
|
113
|
+
return null;
|
|
114
|
+
const lines = ['## Pre-flight Warnings (recurring violations)'];
|
|
115
|
+
for (const hs of hotSpots) {
|
|
116
|
+
lines.push(`- **${hs.type}** (${hs.count}× across runs, last: ${hs.lastSeen}): ${hs.details}`);
|
|
117
|
+
}
|
|
118
|
+
return lines.join('\n');
|
|
119
|
+
}
|
|
120
|
+
close() {
|
|
121
|
+
if (this.ownDb)
|
|
122
|
+
this.db.close();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=violation-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"violation-tracker.js","sourceRoot":"","sources":["../../src/runtime/violation-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA0B5C,MAAM,OAAO,gBAAgB;IACnB,EAAE,CAAoB;IACtB,KAAK,CAAU;IAEvB,YAAY,MAAe;QACzB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;KAaZ,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,SAAoB;QACzB,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;iCACyB,CAC1B;aACA,GAAG,CACF,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,eAAe,EACzB,SAAS,CAAC,KAAK,IAAI,IAAI,EACvB,SAAS,CAAC,SAAS,IAAI,IAAI,EAC3B,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,IAAI,IAAI,IAAI,CACvB,CAAC;IACN,CAAC;IAED,8EAA8E;IAC9E,WAAW,CAAC,IAAa,EAAE,QAAiB;QAC1C,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAC,CAAC;QAE1B,0EAA0E;QAC1E,gEAAgE;QAChE,IAAI,IAA+D,CAAC;QACpE,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,GAAG,IAAI,CAAC,EAAE;iBACX,OAAO,CACN;;;;;6BAKmB,CACpB;iBACA,GAAG,CAAC,IAAI,EAAE,GAAG,CAAgB,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,EAAE;iBACX,OAAO,CACN;;;;6BAImB,CACpB;iBACA,GAAG,CAAC,GAAG,CAAgB,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,8DAA8D;YAC9D,IAAI,SAA0C,CAAC;YAC/C,IAAI,IAAI,EAAE,CAAC;gBACT,SAAS,GAAG,IAAI,CAAC,EAAE;qBAChB,OAAO,CAAC,gGAAgG,CAAC;qBACzG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAqB,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC,EAAE;qBAChB,OAAO,CAAC,mFAAmF,CAAC;qBAC5F,GAAG,CAAC,CAAC,CAAC,IAAI,CAAqB,CAAC;YACrC,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,IAAqB;gBAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE;aAClC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IACzD,mBAAmB,CAAC,eAAuB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;wBAEgB,CACjB;aACA,GAAG,CAAC,eAAe,CAOpB,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,IAAI,EAAE,CAAC,CAAC,IAAqB;YAC7B,eAAe,EAAE,CAAC,CAAC,gBAAgB;YACnC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,SAAS;YAC3B,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,SAAS;YACpC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;SAC1B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,sDAAsD;IACtD,uBAAuB,CAAC,IAAa;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvC,MAAM,KAAK,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAChE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,KAAK,wBAAwB,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swarm-engine",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.54.0",
|
|
4
4
|
"description": "Self-aware multi-agent orchestration engine with knowledge graph, causal inference, GNN failure prediction, and self-evolving rules — pure TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|