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.
Files changed (63) hide show
  1. package/dist/cli/commands/usage.d.ts +3 -0
  2. package/dist/cli/commands/usage.d.ts.map +1 -0
  3. package/dist/cli/commands/usage.js +85 -0
  4. package/dist/cli/commands/usage.js.map +1 -0
  5. package/dist/cli/index.js +2 -0
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/core/types.d.ts +21 -1
  8. package/dist/core/types.d.ts.map +1 -1
  9. package/dist/core/types.js.map +1 -1
  10. package/dist/hooks/cli.js +4 -1
  11. package/dist/hooks/cli.js.map +1 -1
  12. package/dist/hooks/index.d.ts +9 -0
  13. package/dist/hooks/index.d.ts.map +1 -1
  14. package/dist/hooks/index.js +54 -0
  15. package/dist/hooks/index.js.map +1 -1
  16. package/dist/hooks/transcript-parser.d.ts +68 -0
  17. package/dist/hooks/transcript-parser.d.ts.map +1 -0
  18. package/dist/hooks/transcript-parser.js +163 -0
  19. package/dist/hooks/transcript-parser.js.map +1 -0
  20. package/dist/hooks/usage-logger.d.ts +30 -0
  21. package/dist/hooks/usage-logger.d.ts.map +1 -0
  22. package/dist/hooks/usage-logger.js +67 -0
  23. package/dist/hooks/usage-logger.js.map +1 -0
  24. package/dist/index.d.ts +13 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +8 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/runtime/agent-runner.d.ts +1 -0
  29. package/dist/runtime/agent-runner.d.ts.map +1 -1
  30. package/dist/runtime/agent-runner.js +77 -10
  31. package/dist/runtime/agent-runner.js.map +1 -1
  32. package/dist/runtime/backends/claude.d.ts +29 -0
  33. package/dist/runtime/backends/claude.d.ts.map +1 -1
  34. package/dist/runtime/backends/claude.js +63 -1
  35. package/dist/runtime/backends/claude.js.map +1 -1
  36. package/dist/runtime/engine.d.ts +1 -0
  37. package/dist/runtime/engine.d.ts.map +1 -1
  38. package/dist/runtime/engine.js +100 -1
  39. package/dist/runtime/engine.js.map +1 -1
  40. package/dist/runtime/handoff.d.ts +8 -0
  41. package/dist/runtime/handoff.d.ts.map +1 -0
  42. package/dist/runtime/handoff.js +109 -0
  43. package/dist/runtime/handoff.js.map +1 -0
  44. package/dist/runtime/heuristics.d.ts +2 -1
  45. package/dist/runtime/heuristics.d.ts.map +1 -1
  46. package/dist/runtime/heuristics.js +15 -2
  47. package/dist/runtime/heuristics.js.map +1 -1
  48. package/dist/runtime/model-router.d.ts +2 -1
  49. package/dist/runtime/model-router.d.ts.map +1 -1
  50. package/dist/runtime/model-router.js +8 -1
  51. package/dist/runtime/model-router.js.map +1 -1
  52. package/dist/runtime/savings-manifest.d.ts +66 -0
  53. package/dist/runtime/savings-manifest.d.ts.map +1 -0
  54. package/dist/runtime/savings-manifest.js +103 -0
  55. package/dist/runtime/savings-manifest.js.map +1 -0
  56. package/dist/runtime/stats.d.ts.map +1 -1
  57. package/dist/runtime/stats.js +6 -0
  58. package/dist/runtime/stats.js.map +1 -1
  59. package/dist/runtime/violation-tracker.d.ts +31 -0
  60. package/dist/runtime/violation-tracker.d.ts.map +1 -0
  61. package/dist/runtime/violation-tracker.js +125 -0
  62. package/dist/runtime/violation-tracker.js.map +1 -0
  63. package/package.json +1 -1
@@ -0,0 +1,109 @@
1
+ // ─── Context-Exhaustion Detection ─────────────────────────────────
2
+ /** Detect if an error is a context-window exhaustion (vs a normal failure). */
3
+ export function isContextExhaustion(error) {
4
+ const msg = (error.message || '').toLowerCase();
5
+ return (msg.includes('context window') ||
6
+ msg.includes('context length') ||
7
+ msg.includes('token limit') ||
8
+ msg.includes('maximum context') ||
9
+ msg.includes('too many tokens') ||
10
+ msg.includes('context_length_exceeded') ||
11
+ msg.includes('max_tokens'));
12
+ }
13
+ // ─── Packet Builder ───────────────────────────────────────────────
14
+ /** Build a HandoffPacket from the failed agent's output and error. */
15
+ export function buildHandoffPacket(originalTask, attempt, agentOutput, error) {
16
+ return {
17
+ originalTask,
18
+ attempt,
19
+ filesTouched: extractFiles(agentOutput),
20
+ decisions: extractDecisions(agentOutput),
21
+ completedWork: extractSection(agentOutput, 'completed', 'done', 'changes made', 'files touched'),
22
+ remainingWork: extractSection(agentOutput, 'remaining', 'todo', 'next steps', 'blockers'),
23
+ failureReason: error.message.slice(0, 500),
24
+ keyContext: extractKeyContext(agentOutput),
25
+ };
26
+ }
27
+ // ─── Prompt Formatter ─────────────────────────────────────────────
28
+ /** Format a HandoffPacket as a prompt prefix for the replacement agent. */
29
+ export function formatHandoffPrompt(packet) {
30
+ const parts = [];
31
+ parts.push(`## Handoff from Previous Attempt (attempt ${packet.attempt})`);
32
+ parts.push(`The previous agent exhausted its context window. Here is its state:\n`);
33
+ if (packet.completedWork) {
34
+ parts.push(`### Completed Work\n${packet.completedWork}\n`);
35
+ }
36
+ if (packet.remainingWork) {
37
+ parts.push(`### Remaining Work\n${packet.remainingWork}\n`);
38
+ }
39
+ if (packet.filesTouched.length > 0) {
40
+ parts.push(`### Files Touched\n${packet.filesTouched.map((f) => `- ${f}`).join('\n')}\n`);
41
+ }
42
+ if (packet.decisions.length > 0) {
43
+ parts.push(`### Decisions Made\n${packet.decisions.map((d) => `- ${d}`).join('\n')}\n`);
44
+ }
45
+ if (packet.keyContext.length > 0) {
46
+ parts.push(`### Key Context\n${packet.keyContext.map((c) => `- ${c}`).join('\n')}\n`);
47
+ }
48
+ parts.push(`### Failure Reason\n${packet.failureReason}\n`);
49
+ parts.push(`**Continue from where the previous agent left off. Do NOT redo completed work.**`);
50
+ return parts.join('\n');
51
+ }
52
+ // ─── Extraction Helpers ───────────────────────────────────────────
53
+ function extractFiles(output) {
54
+ const files = new Set();
55
+ // Match common file path patterns
56
+ const patterns = [
57
+ /(?:^|\s)((?:src|tests?|lib|dist|docs?)\/[\w/.+-]+\.\w+)/gm,
58
+ /[`"']([\w/.+-]+\.\w{1,5})[`"']/g,
59
+ /(?:edited?|modified|created?|touched|changed)\s+[`"]?([\w/.+-]+\.\w+)/gi,
60
+ ];
61
+ for (const pattern of patterns) {
62
+ let match;
63
+ while ((match = pattern.exec(output)) !== null) {
64
+ if (match[1])
65
+ files.add(match[1]);
66
+ }
67
+ }
68
+ return [...files].slice(0, 20); // cap at 20
69
+ }
70
+ function extractDecisions(output) {
71
+ const decisions = [];
72
+ // Look for decision-like patterns
73
+ const lines = output.split('\n');
74
+ for (const line of lines) {
75
+ if (/(?:decided|chose|picked|selected|using|went with|approach:|decision:)/i.test(line)) {
76
+ decisions.push(line.trim().slice(0, 200));
77
+ }
78
+ }
79
+ return decisions.slice(0, 10);
80
+ }
81
+ function extractSection(output, ...keywords) {
82
+ const lines = output.split('\n');
83
+ for (let i = 0; i < lines.length; i++) {
84
+ const lower = lines[i].toLowerCase();
85
+ if (keywords.some((k) => lower.includes(k)) && /^#{1,3}\s/.test(lines[i])) {
86
+ // Found a section header matching a keyword — grab content until next header
87
+ const content = [];
88
+ for (let j = i + 1; j < lines.length && j < i + 20; j++) {
89
+ if (/^#{1,3}\s/.test(lines[j]))
90
+ break;
91
+ if (lines[j].trim())
92
+ content.push(lines[j]);
93
+ }
94
+ return content.join('\n').slice(0, 1000);
95
+ }
96
+ }
97
+ return '';
98
+ }
99
+ function extractKeyContext(output) {
100
+ const context = [];
101
+ const lines = output.split('\n');
102
+ for (const line of lines) {
103
+ if (/(?:important|note|warning|caveat|gotcha|careful|watch out)/i.test(line) && line.trim().length > 10) {
104
+ context.push(line.trim().slice(0, 200));
105
+ }
106
+ }
107
+ return context.slice(0, 5);
108
+ }
109
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/runtime/handoff.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,8 @@ export declare class HeuristicStore {
16
16
  private initSchema;
17
17
  /** Extract heuristics from a completed execution trace */
18
18
  extractFromTrace(trace: ExecutionTrace): Heuristic[];
19
- /** Store a heuristic */
19
+ /** Store a heuristic. Deduplicates: if the same task_pattern+lesson already exists,
20
+ * increments use_count and updates confidence instead of inserting a duplicate row. */
20
21
  store(h: Heuristic): number;
21
22
  /** Retrieve relevant heuristics for a task using FTS5 */
22
23
  retrieve(task: string, limit?: number): Heuristic[];
@@ -1 +1 @@
1
- {"version":3,"file":"heuristics.d.ts","sourceRoot":"","sources":["../../src/runtime/heuristics.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAuBlB,0DAA0D;IAC1D,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE;IAiEpD,wBAAwB;IACxB,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM;IAmB3B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,SAAS,EAAE;IAwCtD,+EAA+E;IAC/E,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAgB7D,6DAA6D;IAC7D,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM;IAUjD,yCAAyC;IACzC,QAAQ,CAAC,OAAO,GAAE,MAAW,GAAG,IAAI;IAWpC,sDAAsD;IACtD,OAAO,CAAC,aAAa;IAUrB,KAAK,CAAC,OAAO,GAAE,MAAc,GAAG,IAAI;IAMpC,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"heuristics.d.ts","sourceRoot":"","sources":["../../src/runtime/heuristics.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAuBlB,0DAA0D;IAC1D,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE;IAiEpD;2FACuF;IACvF,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM;IA6B3B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,SAAS,EAAE;IAwCtD,+EAA+E;IAC/E,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAgB7D,6DAA6D;IAC7D,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM;IAUjD,yCAAyC;IACzC,QAAQ,CAAC,OAAO,GAAE,MAAW,GAAG,IAAI;IAWpC,sDAAsD;IACtD,OAAO,CAAC,aAAa;IAUrB,KAAK,CAAC,OAAO,GAAE,MAAc,GAAG,IAAI;IAMpC,KAAK,IAAI,IAAI;CAGd"}
@@ -105,14 +105,27 @@ export class HeuristicStore {
105
105
  }
106
106
  return heuristics;
107
107
  }
108
- /** Store a heuristic */
108
+ /** Store a heuristic. Deduplicates: if the same task_pattern+lesson already exists,
109
+ * increments use_count and updates confidence instead of inserting a duplicate row. */
109
110
  store(h) {
111
+ const pattern = redactSecrets(h.taskPattern);
112
+ const lesson = redactSecrets(h.lesson);
113
+ // Check for existing duplicate
114
+ const existing = this.db
115
+ .prepare('SELECT id, use_count, success_when_used FROM heuristics WHERE task_pattern = ? AND lesson = ?')
116
+ .get(pattern, lesson);
117
+ if (existing) {
118
+ this.db
119
+ .prepare('UPDATE heuristics SET use_count = ?, success_when_used = ?, confidence = MAX(confidence, ?) WHERE id = ?')
120
+ .run(existing.use_count + 1, existing.success_when_used + h.successWhenUsed, h.confidence, existing.id);
121
+ return existing.id;
122
+ }
110
123
  const result = this.db
111
124
  .prepare(`
112
125
  INSERT INTO heuristics (task_pattern, lesson, source, confidence, use_count, success_when_used)
113
126
  VALUES (?, ?, ?, ?, ?, ?)
114
127
  `)
115
- .run(redactSecrets(h.taskPattern), redactSecrets(h.lesson), h.source, h.confidence, h.useCount, h.successWhenUsed);
128
+ .run(pattern, lesson, h.source, h.confidence, h.useCount, h.successWhenUsed);
116
129
  return result.lastInsertRowid;
117
130
  }
118
131
  /** Retrieve relevant heuristics for a task using FTS5 */
@@ -1 +1 @@
1
- {"version":3,"file":"heuristics.js","sourceRoot":"","sources":["../../src/runtime/heuristics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"heuristics.js","sourceRoot":"","sources":["../../src/runtime/heuristics.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,8 @@ export declare class ModelRouter {
11
11
  private ownDb;
12
12
  constructor(dbPath?: string);
13
13
  private initSchema;
14
- /** Record an outcome for a model on a task type */
14
+ /** Record an outcome for a model on a task type.
15
+ * Retains at most 200 rows per model+task_type to prevent unbounded growth. */
15
16
  record(model: string, taskType: string, success: boolean, reward?: number): void;
16
17
  /** Select the best model for a task type using UCB1 */
17
18
  recommend(taskType: string, candidates: string[]): string;
@@ -1 +1 @@
1
- {"version":3,"file":"model-router.d.ts","sourceRoot":"","sources":["../../src/runtime/model-router.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAclB,mDAAmD;IACnD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAMhF,uDAAuD;IACvD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IA4CzD,gDAAgD;IAChD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAwBzC,KAAK,CAAC,OAAO,GAAE,MAAc,GAAG,IAAI;IAQpC,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"model-router.d.ts","sourceRoot":"","sources":["../../src/runtime/model-router.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAclB;mFAC+E;IAC/E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAehF,uDAAuD;IACvD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IA4CzD,gDAAgD;IAChD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAwBzC,KAAK,CAAC,OAAO,GAAE,MAAc,GAAG,IAAI;IAQpC,KAAK,IAAI,IAAI;CAGd"}
@@ -34,11 +34,18 @@ export class ModelRouter {
34
34
  CREATE INDEX IF NOT EXISTS idx_model_task ON model_outcomes(model, task_type);
35
35
  `);
36
36
  }
37
- /** Record an outcome for a model on a task type */
37
+ /** Record an outcome for a model on a task type.
38
+ * Retains at most 200 rows per model+task_type to prevent unbounded growth. */
38
39
  record(model, taskType, success, reward) {
39
40
  this.db
40
41
  .prepare('INSERT INTO model_outcomes (model, task_type, success, reward) VALUES (?, ?, ?, ?)')
41
42
  .run(model, taskType, success ? 1 : 0, reward ?? (success ? 1.0 : 0.0));
43
+ // Prune oldest beyond retention cap (200 per model+task_type)
44
+ this.db
45
+ .prepare(`DELETE FROM model_outcomes WHERE model = ? AND task_type = ? AND id NOT IN (
46
+ SELECT id FROM model_outcomes WHERE model = ? AND task_type = ? ORDER BY created_at DESC LIMIT 200
47
+ )`)
48
+ .run(model, taskType, model, taskType);
42
49
  }
43
50
  /** Select the best model for a task type using UCB1 */
44
51
  recommend(taskType, candidates) {
@@ -1 +1 @@
1
- {"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../src/runtime/model-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../src/runtime/model-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ export interface AgentSavingsEntry {
2
+ agentId: string;
3
+ agentType: string;
4
+ model: string;
5
+ /** Estimated tokens per turn WITHOUT any optimizations */
6
+ naiveTokensPerTurn: number;
7
+ /** Breakdown of what was saved per turn */
8
+ optimizations: {
9
+ /** ~14K saved by ENABLE_TOOL_SEARCH (deferred tool schemas) */
10
+ toolSearchSaved: number;
11
+ /** Tokens saved by promptDiet (lite/minimal tier stripping) */
12
+ promptDietSaved: number;
13
+ /** Tokens saved by context filtering (irrelevant phase outputs removed) */
14
+ contextFilteringSaved: number;
15
+ /** Tokens saved by VerbatimCompactor on shared context */
16
+ compactionSaved: number;
17
+ };
18
+ /** Total estimated savings per turn (sum of above) */
19
+ savedPerTurn: number;
20
+ /** Timestamp when this entry was written */
21
+ timestamp: string;
22
+ }
23
+ export interface SavingsManifest {
24
+ orchestrationId: string;
25
+ pattern: string;
26
+ startedAt: string;
27
+ agents: AgentSavingsEntry[];
28
+ }
29
+ /** Get the manifest file path for an orchestration */
30
+ export declare function getManifestPath(cwd: string, orchestrationId: string): string;
31
+ /** Write a savings manifest for an orchestration */
32
+ export declare function writeSavingsManifest(cwd: string, manifest: SavingsManifest): void;
33
+ /** Add an agent entry to an existing manifest */
34
+ export declare function appendAgentToManifest(cwd: string, orchestrationId: string, entry: AgentSavingsEntry): void;
35
+ /** Read a savings manifest */
36
+ export declare function readSavingsManifest(cwd: string, orchestrationId: string): SavingsManifest | null;
37
+ /** Find the most recent savings manifest in the .swarm directory */
38
+ export declare function findLatestManifest(cwd: string): SavingsManifest | null;
39
+ /** Clean up old manifests (keep last N) */
40
+ export declare function pruneManifests(cwd: string, keep?: number): void;
41
+ /**
42
+ * Calculate naive (unoptimized) tokens per turn for an agent.
43
+ * Returns the theoretical maximum and what each optimization saved.
44
+ *
45
+ * @param opts.basePayloadFull - Base payload without ENABLE_TOOL_SEARCH (~45K)
46
+ * @param opts.fullPromptTokens - Agent prompt size in tokens (full, before any diet)
47
+ * @param opts.appliedPromptTokens - Agent prompt size after diet
48
+ * @param opts.unfilteredContextTokens - Cross-phase context before filtering
49
+ * @param opts.filteredContextTokens - Cross-phase context after filtering
50
+ * @param opts.uncompactedSharedTokens - Shared context before compaction
51
+ * @param opts.compactedSharedTokens - Shared context after compaction
52
+ */
53
+ export declare function calculateNaiveTokensPerTurn(opts: {
54
+ basePayloadFull: number;
55
+ fullPromptTokens: number;
56
+ appliedPromptTokens: number;
57
+ unfilteredContextTokens: number;
58
+ filteredContextTokens: number;
59
+ uncompactedSharedTokens: number;
60
+ compactedSharedTokens: number;
61
+ }): {
62
+ naive: number;
63
+ optimizations: AgentSavingsEntry['optimizations'];
64
+ saved: number;
65
+ };
66
+ //# sourceMappingURL=savings-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"savings-manifest.d.ts","sourceRoot":"","sources":["../../src/runtime/savings-manifest.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,aAAa,EAAE;QACb,+DAA+D;QAC/D,eAAe,EAAE,MAAM,CAAC;QACxB,+DAA+D;QAC/D,eAAe,EAAE,MAAM,CAAC;QACxB,2EAA2E;QAC3E,qBAAqB,EAAE,MAAM,CAAC;QAC9B,0DAA0D;QAC1D,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAID,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAOjF;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAc1G;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAMhG;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAYtE;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,IAAI,CAYnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsBtF"}
@@ -0,0 +1,103 @@
1
+ import { writeFileSync, mkdirSync, existsSync, readFileSync, readdirSync, unlinkSync } from 'fs';
2
+ import { join } from 'path';
3
+ const MANIFEST_DIR = '.swarm';
4
+ /** Get the manifest file path for an orchestration */
5
+ export function getManifestPath(cwd, orchestrationId) {
6
+ return join(cwd, MANIFEST_DIR, `savings-manifest-${orchestrationId}.json`);
7
+ }
8
+ /** Write a savings manifest for an orchestration */
9
+ export function writeSavingsManifest(cwd, manifest) {
10
+ const dir = join(cwd, MANIFEST_DIR);
11
+ if (!existsSync(dir)) {
12
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
13
+ }
14
+ const path = getManifestPath(cwd, manifest.orchestrationId);
15
+ writeFileSync(path, JSON.stringify(manifest, null, 2), { mode: 0o600 });
16
+ }
17
+ /** Add an agent entry to an existing manifest */
18
+ export function appendAgentToManifest(cwd, orchestrationId, entry) {
19
+ const path = getManifestPath(cwd, orchestrationId);
20
+ let manifest;
21
+ try {
22
+ manifest = JSON.parse(readFileSync(path, 'utf-8'));
23
+ }
24
+ catch {
25
+ manifest = { orchestrationId, pattern: '', startedAt: new Date().toISOString(), agents: [] };
26
+ }
27
+ manifest.agents.push(entry);
28
+ const dir = join(cwd, MANIFEST_DIR);
29
+ if (!existsSync(dir)) {
30
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
31
+ }
32
+ writeFileSync(path, JSON.stringify(manifest, null, 2), { mode: 0o600 });
33
+ }
34
+ /** Read a savings manifest */
35
+ export function readSavingsManifest(cwd, orchestrationId) {
36
+ try {
37
+ return JSON.parse(readFileSync(getManifestPath(cwd, orchestrationId), 'utf-8'));
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ /** Find the most recent savings manifest in the .swarm directory */
44
+ export function findLatestManifest(cwd) {
45
+ const dir = join(cwd, MANIFEST_DIR);
46
+ try {
47
+ const files = readdirSync(dir)
48
+ .filter((f) => f.startsWith('savings-manifest-') && f.endsWith('.json'))
49
+ .sort()
50
+ .reverse();
51
+ if (files.length === 0)
52
+ return null;
53
+ return JSON.parse(readFileSync(join(dir, files[0]), 'utf-8'));
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ }
59
+ /** Clean up old manifests (keep last N) */
60
+ export function pruneManifests(cwd, keep = 10) {
61
+ const dir = join(cwd, MANIFEST_DIR);
62
+ try {
63
+ const files = readdirSync(dir)
64
+ .filter((f) => f.startsWith('savings-manifest-') && f.endsWith('.json'))
65
+ .sort();
66
+ while (files.length > keep) {
67
+ unlinkSync(join(dir, files.shift()));
68
+ }
69
+ }
70
+ catch {
71
+ /* silent */
72
+ }
73
+ }
74
+ /**
75
+ * Calculate naive (unoptimized) tokens per turn for an agent.
76
+ * Returns the theoretical maximum and what each optimization saved.
77
+ *
78
+ * @param opts.basePayloadFull - Base payload without ENABLE_TOOL_SEARCH (~45K)
79
+ * @param opts.fullPromptTokens - Agent prompt size in tokens (full, before any diet)
80
+ * @param opts.appliedPromptTokens - Agent prompt size after diet
81
+ * @param opts.unfilteredContextTokens - Cross-phase context before filtering
82
+ * @param opts.filteredContextTokens - Cross-phase context after filtering
83
+ * @param opts.uncompactedSharedTokens - Shared context before compaction
84
+ * @param opts.compactedSharedTokens - Shared context after compaction
85
+ */
86
+ export function calculateNaiveTokensPerTurn(opts) {
87
+ // ENABLE_TOOL_SEARCH drops base payload from ~45K to ~31K
88
+ const BASE_WITH_TOOL_SEARCH = 31_000;
89
+ const toolSearchSaved = Math.max(0, opts.basePayloadFull - BASE_WITH_TOOL_SEARCH);
90
+ const promptDietSaved = Math.max(0, opts.fullPromptTokens - opts.appliedPromptTokens);
91
+ const contextFilteringSaved = Math.max(0, opts.unfilteredContextTokens - opts.filteredContextTokens);
92
+ const compactionSaved = Math.max(0, opts.uncompactedSharedTokens - opts.compactedSharedTokens);
93
+ const naive = opts.basePayloadFull + opts.fullPromptTokens + opts.unfilteredContextTokens + opts.uncompactedSharedTokens;
94
+ const optimizations = {
95
+ toolSearchSaved,
96
+ promptDietSaved,
97
+ contextFilteringSaved,
98
+ compactionSaved,
99
+ };
100
+ const saved = toolSearchSaved + promptDietSaved + contextFilteringSaved + compactionSaved;
101
+ return { naive, optimizations, saved };
102
+ }
103
+ //# sourceMappingURL=savings-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"savings-manifest.js","sourceRoot":"","sources":["../../src/runtime/savings-manifest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/runtime/stats.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAwClB,yCAAyC;IACzC,MAAM,CAAC,IAAI,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC;YACpB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;YAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;YAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;SACnC,CAAC;QACF,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IA8BR,qDAAqD;IACrD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAmDrE,6BAA6B;IAC7B,cAAc,IAAI,UAAU,EAAE;IAY9B,oDAAoD;IACpD,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAyCvD,yEAAyE;IACzE,iBAAiB,CACf,OAAO,CAAC,EAAE,MAAM,GACf,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BzG,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/runtime/stats.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAwClB,yCAAyC;IACzC,MAAM,CAAC,IAAI,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC;YACpB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;YAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;YAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;SACnC,CAAC;QACF,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAuCR,qDAAqD;IACrD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAmDrE,6BAA6B;IAC7B,cAAc,IAAI,UAAU,EAAE;IAY9B,oDAAoD;IACpD,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAyCvD,yEAAyE;IACzE,iBAAiB,CACf,OAAO,CAAC,EAAE,MAAM,GACf,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BzG,KAAK,IAAI,IAAI;CAGd"}
@@ -67,6 +67,12 @@ export class StatsCollector {
67
67
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
68
68
  `)
69
69
  .run(data.agentType, data.agentName ?? null, data.model, data.backend ?? null, data.pattern ?? null, data.phase ?? null, data.usage.inputTokens, data.usage.outputTokens, data.usage.totalTokens, data.usage.costUsd, data.usage.durationMs, data.usage.turns, data.usage.toolCalls, data.usage.cacheReadInputTokens ?? 0, data.usage.cacheCreationInputTokens ?? 0, data.success ? 1 : 0, data.confidence ?? null, data.retries ?? 0);
70
+ // Prune oldest beyond retention cap (300 per agent_type+model)
71
+ this.db
72
+ .prepare(`DELETE FROM execution_stats WHERE agent_type = ? AND model = ? AND id NOT IN (
73
+ SELECT id FROM execution_stats WHERE agent_type = ? AND model = ? ORDER BY created_at DESC LIMIT 300
74
+ )`)
75
+ .run(data.agentType, data.model, data.agentType, data.model);
70
76
  }
71
77
  /** Get aggregated stats for an agent type + model */
72
78
  getAgentProfile(agentType, model) {
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/runtime/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/runtime/stats.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAQ,OAAO,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAa5C,MAAM,OAAO,cAAc;IACjB,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;;;;;;;;;;;;;;;;;;;;;;;;;KAyBZ,CAAC,CAAC;QAEH,wFAAwF;QACxF,0FAA0F;QAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAwB,CAAC;QAC/F,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,CAAC,IAqBN;QACC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;KAGH,CACE;aACA,GAAG,CACF,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,IAAI,IAAI,EACtB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,IAAI,IAAI,EACpB,IAAI,CAAC,OAAO,IAAI,IAAI,EACpB,IAAI,CAAC,KAAK,IAAI,IAAI,EAClB,IAAI,CAAC,KAAK,CAAC,WAAW,EACtB,IAAI,CAAC,KAAK,CAAC,YAAY,EACvB,IAAI,CAAC,KAAK,CAAC,WAAW,EACtB,IAAI,CAAC,KAAK,CAAC,OAAO,EAClB,IAAI,CAAC,KAAK,CAAC,UAAU,EACrB,IAAI,CAAC,KAAK,CAAC,KAAK,EAChB,IAAI,CAAC,KAAK,CAAC,SAAS,EACpB,IAAI,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,EACpC,IAAI,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,EACxC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACpB,IAAI,CAAC,UAAU,IAAI,IAAI,EACvB,IAAI,CAAC,OAAO,IAAI,CAAC,CAClB,CAAC;QAEJ,+DAA+D;QAC/D,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;UAEE,CACH;aACA,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,qDAAqD;IACrD,eAAe,CAAC,SAAiB,EAAE,KAAc;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACxE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAExD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;;;;;;;;cASM,KAAK;;;;KAId,CACE;aACA,GAAG,CAAC,GAAG,MAAM,CAAoC,CAAC;QAErD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE;aACtB,OAAO,CACN;;cAEM,KAAK;;KAEd,CACE;aACA,GAAG,CAAC,GAAG,MAAM,CAAoC,CAAC;QAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAErD,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,IAAI,GAAG,CAAC,UAAU;YAC9D,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,IAAI,GAAG,CAAC,UAAU;YAC9D,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;YAC3C,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,WAAW,EAAE,GAAG,CAAC,YAAY;SAC9B,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,cAAc;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;KAEH,CACE;aACA,GAAG,EAAkD,CAAC;QAEzD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACjH,CAAC;IAED,oDAAoD;IACpD,gBAAgB,CAAC,GAAa,EAAE,OAAgB;QAC9C,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAA2B,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2C,CAAC;YAC/D,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,IAAI,CAAC,MAAM,CAAC;gBACV,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;gBACvC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;gBACvC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;gBACtC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBACnC,OAAO;gBACP,KAAK,EAAE;oBACL,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;oBACnC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;oBACrC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;oBACnC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC;oBAC3B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC;oBACjC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;oBACvB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;oBAC/B,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,CAAC;oBACrD,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,IAAI,CAAC;iBAC9D;gBACD,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;aAClD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAA2B,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC;gBACV,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;gBACvC,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBACnC,OAAO;gBACP,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;gBAC7G,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,iBAAiB,CACf,OAAgB;QAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAExC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;QAIA,KAAK;;;KAGR,CACE;aACA,GAAG,CAAC,GAAG,MAAM,CAA+B,CAAC;QAEhD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,SAAS;YAC/B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC;YAChC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;YACxC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;SAC7C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,31 @@
1
+ export type ViolationType = 'file-conflict' | 'review-repeat' | 'retry-burst' | 'phase-timeout' | 'cost-overrun' | 'cold-wake-burst';
2
+ export interface Violation {
3
+ type: ViolationType;
4
+ orchestrationId: string;
5
+ phase?: string;
6
+ agentType?: string;
7
+ details: string;
8
+ repo?: string;
9
+ }
10
+ export interface ViolationHotSpot {
11
+ type: ViolationType;
12
+ count: number;
13
+ lastSeen: string;
14
+ details: string;
15
+ }
16
+ export declare class ViolationTracker {
17
+ private db;
18
+ private ownDb;
19
+ constructor(dbPath?: string);
20
+ private initSchema;
21
+ /** Record a violation */
22
+ record(violation: Violation): void;
23
+ /** Get hot spots — violations that recurred across multiple orchestrations */
24
+ getHotSpots(repo?: string, minCount?: number): ViolationHotSpot[];
25
+ /** Get recent violations for a specific orchestration */
26
+ getForOrchestration(orchestrationId: string): Violation[];
27
+ /** Format hot spots as a pre-flight warning string */
28
+ formatPreFlightWarnings(repo?: string): string | null;
29
+ close(): void;
30
+ }
31
+ //# sourceMappingURL=violation-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violation-tracker.d.ts","sourceRoot":"","sources":["../../src/runtime/violation-tracker.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,eAAe,GACf,aAAa,GACb,eAAe,GACf,cAAc,GACd,iBAAiB,CAAC;AAEtB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAiBlB,yBAAyB;IACzB,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAgBlC,8EAA8E;IAC9E,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAmDjE,yDAAyD;IACzD,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,EAAE;IA0BzD,sDAAsD;IACtD,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWrD,KAAK,IAAI,IAAI;CAGd"}