network-ai 4.15.3 → 5.0.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/INTEGRATION_GUIDE.md +11 -4
- package/QUICKSTART.md +31 -4
- package/README.md +37 -15
- package/bin/dashboard.ts +146 -0
- package/bin/mcp-server.ts +3 -2
- package/dist/adapters/adapter-registry.d.ts +33 -1
- package/dist/adapters/adapter-registry.d.ts.map +1 -1
- package/dist/adapters/adapter-registry.js +49 -0
- package/dist/adapters/adapter-registry.js.map +1 -1
- package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
- package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
- package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
- package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
- package/dist/adapters/browser-agent-adapter.d.ts +121 -0
- package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
- package/dist/adapters/browser-agent-adapter.js +219 -0
- package/dist/adapters/browser-agent-adapter.js.map +1 -0
- package/dist/adapters/copilot-adapter.d.ts +59 -0
- package/dist/adapters/copilot-adapter.d.ts.map +1 -0
- package/dist/adapters/copilot-adapter.js +132 -0
- package/dist/adapters/copilot-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +15 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +22 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/langgraph-adapter.d.ts +70 -0
- package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
- package/dist/adapters/langgraph-adapter.js +119 -0
- package/dist/adapters/langgraph-adapter.js.map +1 -0
- package/dist/adapters/openai-agents-adapter.d.ts +100 -0
- package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
- package/dist/adapters/openai-agents-adapter.js +118 -0
- package/dist/adapters/openai-agents-adapter.js.map +1 -0
- package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
- package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
- package/dist/adapters/pydantic-ai-adapter.js +163 -0
- package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
- package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
- package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
- package/dist/adapters/vertex-ai-adapter.js +166 -0
- package/dist/adapters/vertex-ai-adapter.js.map +1 -0
- package/dist/bin/dashboard.d.ts +11 -0
- package/dist/bin/dashboard.d.ts.map +1 -0
- package/dist/bin/dashboard.js +135 -0
- package/dist/bin/dashboard.js.map +1 -0
- package/dist/bin/mcp-server.js +3 -2
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/index.d.ts +103 -559
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +295 -1074
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter-test-harness.d.ts +88 -0
- package/dist/lib/adapter-test-harness.d.ts.map +1 -0
- package/dist/lib/adapter-test-harness.js +118 -0
- package/dist/lib/adapter-test-harness.js.map +1 -0
- package/dist/lib/agent-conversation.d.ts +115 -0
- package/dist/lib/agent-conversation.d.ts.map +1 -0
- package/dist/lib/agent-conversation.js +155 -0
- package/dist/lib/agent-conversation.js.map +1 -0
- package/dist/lib/agent-debate.d.ts +115 -0
- package/dist/lib/agent-debate.d.ts.map +1 -0
- package/dist/lib/agent-debate.js +146 -0
- package/dist/lib/agent-debate.js.map +1 -0
- package/dist/lib/agent-memory.d.ts +157 -0
- package/dist/lib/agent-memory.d.ts.map +1 -0
- package/dist/lib/agent-memory.js +336 -0
- package/dist/lib/agent-memory.js.map +1 -0
- package/dist/lib/agent-vcr.d.ts +133 -0
- package/dist/lib/agent-vcr.d.ts.map +1 -0
- package/dist/lib/agent-vcr.js +218 -0
- package/dist/lib/agent-vcr.js.map +1 -0
- package/dist/lib/anomaly-detector.d.ts +112 -0
- package/dist/lib/anomaly-detector.d.ts.map +1 -0
- package/dist/lib/anomaly-detector.js +178 -0
- package/dist/lib/anomaly-detector.js.map +1 -0
- package/dist/lib/approval-inbox.d.ts +147 -0
- package/dist/lib/approval-inbox.d.ts.map +1 -0
- package/dist/lib/approval-inbox.js +385 -0
- package/dist/lib/approval-inbox.js.map +1 -0
- package/dist/lib/auth-guardian.d.ts +170 -0
- package/dist/lib/auth-guardian.d.ts.map +1 -0
- package/dist/lib/auth-guardian.js +604 -0
- package/dist/lib/auth-guardian.js.map +1 -0
- package/dist/lib/auth-validator.d.ts +70 -0
- package/dist/lib/auth-validator.d.ts.map +1 -0
- package/dist/lib/auth-validator.js +32 -0
- package/dist/lib/auth-validator.js.map +1 -0
- package/dist/lib/blackboard-validator.d.ts +56 -0
- package/dist/lib/blackboard-validator.d.ts.map +1 -1
- package/dist/lib/blackboard-validator.js +181 -4
- package/dist/lib/blackboard-validator.js.map +1 -1
- package/dist/lib/comparison-runner.d.ts +99 -0
- package/dist/lib/comparison-runner.d.ts.map +1 -0
- package/dist/lib/comparison-runner.js +138 -0
- package/dist/lib/comparison-runner.js.map +1 -0
- package/dist/lib/config-watcher.d.ts +109 -0
- package/dist/lib/config-watcher.d.ts.map +1 -0
- package/dist/lib/config-watcher.js +215 -0
- package/dist/lib/config-watcher.js.map +1 -0
- package/dist/lib/cost-governor.d.ts +105 -0
- package/dist/lib/cost-governor.d.ts.map +1 -0
- package/dist/lib/cost-governor.js +128 -0
- package/dist/lib/cost-governor.js.map +1 -0
- package/dist/lib/cost-heatmap.d.ts +104 -0
- package/dist/lib/cost-heatmap.d.ts.map +1 -0
- package/dist/lib/cost-heatmap.js +161 -0
- package/dist/lib/cost-heatmap.js.map +1 -0
- package/dist/lib/coverage-reporter.d.ts +92 -0
- package/dist/lib/coverage-reporter.d.ts.map +1 -0
- package/dist/lib/coverage-reporter.js +177 -0
- package/dist/lib/coverage-reporter.js.map +1 -0
- package/dist/lib/dashboard-server.d.ts +71 -0
- package/dist/lib/dashboard-server.d.ts.map +1 -0
- package/dist/lib/dashboard-server.js +403 -0
- package/dist/lib/dashboard-server.js.map +1 -0
- package/dist/lib/dry-run.d.ts +73 -0
- package/dist/lib/dry-run.d.ts.map +1 -0
- package/dist/lib/dry-run.js +130 -0
- package/dist/lib/dry-run.js.map +1 -0
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +38 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/event-bus.d.ts +167 -0
- package/dist/lib/event-bus.d.ts.map +1 -0
- package/dist/lib/event-bus.js +229 -0
- package/dist/lib/event-bus.js.map +1 -0
- package/dist/lib/explainability.d.ts +85 -0
- package/dist/lib/explainability.d.ts.map +1 -0
- package/dist/lib/explainability.js +102 -0
- package/dist/lib/explainability.js.map +1 -0
- package/dist/lib/goal-dsl.d.ts +157 -0
- package/dist/lib/goal-dsl.d.ts.map +1 -0
- package/dist/lib/goal-dsl.js +392 -0
- package/dist/lib/goal-dsl.js.map +1 -0
- package/dist/lib/job-queue.d.ts +183 -0
- package/dist/lib/job-queue.d.ts.map +1 -0
- package/dist/lib/job-queue.js +310 -0
- package/dist/lib/job-queue.js.map +1 -0
- package/dist/lib/learning-loop.d.ts +113 -0
- package/dist/lib/learning-loop.d.ts.map +1 -0
- package/dist/lib/learning-loop.js +181 -0
- package/dist/lib/learning-loop.js.map +1 -0
- package/dist/lib/lifecycle-hooks.d.ts +116 -0
- package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
- package/dist/lib/lifecycle-hooks.js +148 -0
- package/dist/lib/lifecycle-hooks.js.map +1 -0
- package/dist/lib/locked-blackboard.d.ts.map +1 -1
- package/dist/lib/locked-blackboard.js +9 -5
- package/dist/lib/locked-blackboard.js.map +1 -1
- package/dist/lib/mcp-tool-consumer.d.ts +153 -0
- package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
- package/dist/lib/mcp-tool-consumer.js +320 -0
- package/dist/lib/mcp-tool-consumer.js.map +1 -0
- package/dist/lib/metrics.d.ts +119 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +284 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/orchestrator-types.d.ts +309 -0
- package/dist/lib/orchestrator-types.d.ts.map +1 -0
- package/dist/lib/orchestrator-types.js +61 -0
- package/dist/lib/orchestrator-types.js.map +1 -0
- package/dist/lib/otel-bridge.d.ts +74 -0
- package/dist/lib/otel-bridge.d.ts.map +1 -0
- package/dist/lib/otel-bridge.js +167 -0
- package/dist/lib/otel-bridge.js.map +1 -0
- package/dist/lib/playground.d.ts +76 -0
- package/dist/lib/playground.d.ts.map +1 -0
- package/dist/lib/playground.js +224 -0
- package/dist/lib/playground.js.map +1 -0
- package/dist/lib/quadtree.d.ts +114 -0
- package/dist/lib/quadtree.d.ts.map +1 -0
- package/dist/lib/quadtree.js +259 -0
- package/dist/lib/quadtree.js.map +1 -0
- package/dist/lib/shared-blackboard.d.ts +101 -0
- package/dist/lib/shared-blackboard.d.ts.map +1 -0
- package/dist/lib/shared-blackboard.js +249 -0
- package/dist/lib/shared-blackboard.js.map +1 -0
- package/dist/lib/speculative-executor.d.ts +89 -0
- package/dist/lib/speculative-executor.d.ts.map +1 -0
- package/dist/lib/speculative-executor.js +107 -0
- package/dist/lib/speculative-executor.js.map +1 -0
- package/dist/lib/swarm-transport.d.ts +150 -0
- package/dist/lib/swarm-transport.d.ts.map +1 -0
- package/dist/lib/swarm-transport.js +307 -0
- package/dist/lib/swarm-transport.js.map +1 -0
- package/dist/lib/task-decomposer.d.ts +41 -0
- package/dist/lib/task-decomposer.d.ts.map +1 -0
- package/dist/lib/task-decomposer.js +272 -0
- package/dist/lib/task-decomposer.js.map +1 -0
- package/dist/lib/timeline-scrubber.d.ts +84 -0
- package/dist/lib/timeline-scrubber.d.ts.map +1 -0
- package/dist/lib/timeline-scrubber.js +173 -0
- package/dist/lib/timeline-scrubber.js.map +1 -0
- package/dist/lib/topology.d.ts +361 -0
- package/dist/lib/topology.d.ts.map +1 -0
- package/dist/lib/topology.js +591 -0
- package/dist/lib/topology.js.map +1 -0
- package/dist/security.d.ts +95 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +266 -4
- package/dist/security.js.map +1 -1
- package/package.json +7 -5
- package/types/agent-adapter.d.ts +5 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ComparisonRunner — Run the same goal across two adapter configurations side-by-side
|
|
4
|
+
*
|
|
5
|
+
* Executes identical tasks through two different adapter setups and produces
|
|
6
|
+
* a structured comparison of results, timing, cost, and quality.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const runner = new ComparisonRunner();
|
|
10
|
+
* const result = await runner.compare({
|
|
11
|
+
* goal: { action: 'review', params: { code: '...' } },
|
|
12
|
+
* configA: { name: 'GPT-4', adapter: openaiAdapter },
|
|
13
|
+
* configB: { name: 'Claude', adapter: anthropicAdapter },
|
|
14
|
+
* });
|
|
15
|
+
* runner.printReport(result);
|
|
16
|
+
*
|
|
17
|
+
* @module ComparisonRunner
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.ComparisonRunner = void 0;
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// RUNNER
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* ComparisonRunner — Side-by-side adapter comparison.
|
|
27
|
+
*/
|
|
28
|
+
class ComparisonRunner {
|
|
29
|
+
/**
|
|
30
|
+
* Run the same goal through two configurations and compare results.
|
|
31
|
+
*/
|
|
32
|
+
async compare(input) {
|
|
33
|
+
const runs = input.runs ?? 1;
|
|
34
|
+
const [runsA, runsB] = await Promise.all([
|
|
35
|
+
this.runSide(input.configA, input.goal, runs, input.scorer),
|
|
36
|
+
this.runSide(input.configB, input.goal, runs, input.scorer),
|
|
37
|
+
]);
|
|
38
|
+
const a = this.aggregateSide(input.configA.name, runsA, input.scorer);
|
|
39
|
+
const b = this.aggregateSide(input.configB.name, runsB, input.scorer);
|
|
40
|
+
const { winner, winReason } = this.determineWinner(a, b);
|
|
41
|
+
return {
|
|
42
|
+
goal: input.goal,
|
|
43
|
+
a,
|
|
44
|
+
b,
|
|
45
|
+
winner,
|
|
46
|
+
winReason,
|
|
47
|
+
comparedAt: Date.now(),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Print a human-readable comparison report.
|
|
52
|
+
*/
|
|
53
|
+
printReport(result) {
|
|
54
|
+
const { a, b } = result;
|
|
55
|
+
console.log('═'.repeat(60));
|
|
56
|
+
console.log(' COMPARISON REPORT');
|
|
57
|
+
console.log('═'.repeat(60));
|
|
58
|
+
console.log(` A: ${a.name}`);
|
|
59
|
+
console.log(` B: ${b.name}`);
|
|
60
|
+
console.log('─'.repeat(60));
|
|
61
|
+
const rows = [
|
|
62
|
+
['Metric', a.name, b.name],
|
|
63
|
+
['Success Rate', `${pct(a.successRate)}`, `${pct(b.successRate)}`],
|
|
64
|
+
['Avg Duration', `${a.avgDurationMs.toFixed(0)}ms`, `${b.avgDurationMs.toFixed(0)}ms`],
|
|
65
|
+
];
|
|
66
|
+
if (a.avgScore !== null) {
|
|
67
|
+
rows.push(['Avg Score', `${a.avgScore.toFixed(1)}`, `${b.avgScore?.toFixed(1) ?? 'N/A'}`]);
|
|
68
|
+
}
|
|
69
|
+
if (a.avgCostUsd !== null) {
|
|
70
|
+
rows.push(['Avg Cost', `$${a.avgCostUsd.toFixed(4)}`, `$${b.avgCostUsd?.toFixed(4) ?? 'N/A'}`]);
|
|
71
|
+
}
|
|
72
|
+
for (const [label, va, vb] of rows) {
|
|
73
|
+
console.log(` ${label.padEnd(20)} ${va.padEnd(18)} ${vb}`);
|
|
74
|
+
}
|
|
75
|
+
console.log('─'.repeat(60));
|
|
76
|
+
console.log(` Winner: ${result.winner === 'TIE' ? 'TIE' : result.winner === 'A' ? a.name : b.name}`);
|
|
77
|
+
console.log(` Reason: ${result.winReason}`);
|
|
78
|
+
console.log('═'.repeat(60));
|
|
79
|
+
}
|
|
80
|
+
// --------------------------------------------------------------------------
|
|
81
|
+
// Internal
|
|
82
|
+
// --------------------------------------------------------------------------
|
|
83
|
+
async runSide(config, goal, runs, _scorer) {
|
|
84
|
+
const results = [];
|
|
85
|
+
for (let i = 0; i < runs; i++) {
|
|
86
|
+
const start = Date.now();
|
|
87
|
+
let output;
|
|
88
|
+
try {
|
|
89
|
+
output = await config.handler(goal);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
output = {
|
|
93
|
+
success: false,
|
|
94
|
+
error: err instanceof Error ? err.message : String(err),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
results.push({ output, durationMs: Date.now() - start, runIndex: i });
|
|
98
|
+
}
|
|
99
|
+
return results;
|
|
100
|
+
}
|
|
101
|
+
aggregateSide(name, runs, scorer) {
|
|
102
|
+
const avgDurationMs = runs.reduce((s, r) => s + r.durationMs, 0) / runs.length;
|
|
103
|
+
const successRate = runs.filter((r) => r.output.success).length / runs.length;
|
|
104
|
+
let avgScore = null;
|
|
105
|
+
if (scorer) {
|
|
106
|
+
const scores = runs.map((r) => scorer(r.output));
|
|
107
|
+
avgScore = scores.reduce((s, v) => s + v, 0) / scores.length;
|
|
108
|
+
}
|
|
109
|
+
let avgCostUsd = null;
|
|
110
|
+
const costs = runs.map((r) => r.output.costUsd).filter((c) => c !== undefined);
|
|
111
|
+
if (costs.length > 0) {
|
|
112
|
+
avgCostUsd = costs.reduce((s, c) => s + c, 0) / costs.length;
|
|
113
|
+
}
|
|
114
|
+
return { name, runs, avgDurationMs, avgScore, avgCostUsd, successRate };
|
|
115
|
+
}
|
|
116
|
+
determineWinner(a, b) {
|
|
117
|
+
// Priority: success rate > score > speed > cost
|
|
118
|
+
if (a.successRate !== b.successRate) {
|
|
119
|
+
const w = a.successRate > b.successRate ? 'A' : 'B';
|
|
120
|
+
return { winner: w, winReason: `Higher success rate (${pct(Math.max(a.successRate, b.successRate))})` };
|
|
121
|
+
}
|
|
122
|
+
if (a.avgScore !== null && b.avgScore !== null && Math.abs(a.avgScore - b.avgScore) > 1) {
|
|
123
|
+
const w = a.avgScore > b.avgScore ? 'A' : 'B';
|
|
124
|
+
return { winner: w, winReason: `Higher quality score` };
|
|
125
|
+
}
|
|
126
|
+
const speedDiff = Math.abs(a.avgDurationMs - b.avgDurationMs);
|
|
127
|
+
if (speedDiff > a.avgDurationMs * 0.1) {
|
|
128
|
+
const w = a.avgDurationMs < b.avgDurationMs ? 'A' : 'B';
|
|
129
|
+
return { winner: w, winReason: `Faster execution` };
|
|
130
|
+
}
|
|
131
|
+
return { winner: 'TIE', winReason: 'No significant difference' };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.ComparisonRunner = ComparisonRunner;
|
|
135
|
+
function pct(n) {
|
|
136
|
+
return `${(n * 100).toFixed(0)}%`;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=comparison-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-runner.js","sourceRoot":"","sources":["../../lib/comparison-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigWatcher — Hot-reload configuration from disk.
|
|
3
|
+
*
|
|
4
|
+
* Uses `fs.watch()` to monitor config files and applies changes to
|
|
5
|
+
* live CONFIG, trust levels, resource profiles, and budget ceilings.
|
|
6
|
+
* Emits events on reload so components can react.
|
|
7
|
+
*
|
|
8
|
+
* @module ConfigWatcher
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
/** Fields that can be hot-reloaded on CONFIG */
|
|
12
|
+
export interface ReloadableConfig {
|
|
13
|
+
maxParallelAgents?: number;
|
|
14
|
+
defaultTimeout?: number;
|
|
15
|
+
enableTracing?: boolean;
|
|
16
|
+
grantTokenTTL?: number;
|
|
17
|
+
maxBlackboardValueSize?: number;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
/** Trust level entry */
|
|
21
|
+
export interface TrustEntry {
|
|
22
|
+
agentId: string;
|
|
23
|
+
level: number;
|
|
24
|
+
tags?: string[];
|
|
25
|
+
}
|
|
26
|
+
/** Budget overrides */
|
|
27
|
+
export interface BudgetOverrides {
|
|
28
|
+
ceiling?: number;
|
|
29
|
+
perAgentCeiling?: number;
|
|
30
|
+
}
|
|
31
|
+
/** Callback targets for reloaded config */
|
|
32
|
+
export interface ConfigTargets {
|
|
33
|
+
/** Mutable CONFIG object to patch in-place */
|
|
34
|
+
config?: Record<string, unknown>;
|
|
35
|
+
/** AuthGuardian instance — for trust level updates */
|
|
36
|
+
authGuardian?: {
|
|
37
|
+
setTrustLevel?(agentId: string, level: number): void;
|
|
38
|
+
};
|
|
39
|
+
/** FederatedBudget instance — for ceiling updates */
|
|
40
|
+
budget?: {
|
|
41
|
+
setCeiling?(ceiling: number): void;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Emitted on successful reload */
|
|
45
|
+
export interface ReloadEvent {
|
|
46
|
+
file: string;
|
|
47
|
+
timestamp: number;
|
|
48
|
+
changes: string[];
|
|
49
|
+
}
|
|
50
|
+
/** Emitted on reload error */
|
|
51
|
+
export interface ReloadError {
|
|
52
|
+
file: string;
|
|
53
|
+
timestamp: number;
|
|
54
|
+
error: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Watches config files on disk and applies changes to live objects.
|
|
58
|
+
*
|
|
59
|
+
* Supports three config file types:
|
|
60
|
+
* - **config.json** — patches `CONFIG` object fields
|
|
61
|
+
* - **trust_levels.json** — array of `{ agentId, level }` applied to AuthGuardian
|
|
62
|
+
* - **budget.json** — `{ ceiling, perAgentCeiling }` applied to FederatedBudget
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const watcher = new ConfigWatcher({
|
|
67
|
+
* configPath: './data/config.json',
|
|
68
|
+
* trustPath: './data/trust_levels.json',
|
|
69
|
+
* targets: { config: CONFIG, authGuardian: guardian, budget: fed },
|
|
70
|
+
* });
|
|
71
|
+
* watcher.on('reload', (evt) => console.log('Reloaded:', evt.file));
|
|
72
|
+
* watcher.start();
|
|
73
|
+
* // ... later
|
|
74
|
+
* watcher.stop();
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare class ConfigWatcher extends EventEmitter {
|
|
78
|
+
private watchers;
|
|
79
|
+
private targets;
|
|
80
|
+
private configPath?;
|
|
81
|
+
private trustPath?;
|
|
82
|
+
private budgetPath?;
|
|
83
|
+
private debounceMs;
|
|
84
|
+
private debounceTimers;
|
|
85
|
+
private running;
|
|
86
|
+
constructor(options?: {
|
|
87
|
+
configPath?: string;
|
|
88
|
+
trustPath?: string;
|
|
89
|
+
budgetPath?: string;
|
|
90
|
+
targets?: ConfigTargets;
|
|
91
|
+
debounceMs?: number;
|
|
92
|
+
});
|
|
93
|
+
/** Update targets after construction */
|
|
94
|
+
setTargets(targets: ConfigTargets): void;
|
|
95
|
+
/** Start watching all configured paths */
|
|
96
|
+
start(): void;
|
|
97
|
+
/** Stop all watchers */
|
|
98
|
+
stop(): void;
|
|
99
|
+
/** Manually trigger a reload for a specific file */
|
|
100
|
+
reload(filePath: string): void;
|
|
101
|
+
/** Whether the watcher is currently active */
|
|
102
|
+
isRunning(): boolean;
|
|
103
|
+
private debouncedReload;
|
|
104
|
+
private applyReload;
|
|
105
|
+
private applyConfig;
|
|
106
|
+
private applyTrust;
|
|
107
|
+
private applyBudget;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=config-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-watcher.d.ts","sourceRoot":"","sources":["../../lib/config-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAwB;AACxB,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,sDAAsD;IACtD,YAAY,CAAC,EAAE;QAAE,aAAa,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACxE,qDAAqD;IACrD,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACjD;AAED,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,8BAA8B;AAC9B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAyD;IAC/E,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,aAAa,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;KAChB;IASN,wCAAwC;IACxC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIxC,0CAA0C;IAC1C,KAAK,IAAI,IAAI;IAkBb,wBAAwB;IACxB,IAAI,IAAI,IAAI;IAUZ,oDAAoD;IACpD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9B,8CAA8C;IAC9C,SAAS,IAAI,OAAO;IAQpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,WAAW;CAQpB"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ConfigWatcher — Hot-reload configuration from disk.
|
|
4
|
+
*
|
|
5
|
+
* Uses `fs.watch()` to monitor config files and applies changes to
|
|
6
|
+
* live CONFIG, trust levels, resource profiles, and budget ceilings.
|
|
7
|
+
* Emits events on reload so components can react.
|
|
8
|
+
*
|
|
9
|
+
* @module ConfigWatcher
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.ConfigWatcher = void 0;
|
|
46
|
+
const events_1 = require("events");
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// CONFIG WATCHER
|
|
51
|
+
// ============================================================================
|
|
52
|
+
/**
|
|
53
|
+
* Watches config files on disk and applies changes to live objects.
|
|
54
|
+
*
|
|
55
|
+
* Supports three config file types:
|
|
56
|
+
* - **config.json** — patches `CONFIG` object fields
|
|
57
|
+
* - **trust_levels.json** — array of `{ agentId, level }` applied to AuthGuardian
|
|
58
|
+
* - **budget.json** — `{ ceiling, perAgentCeiling }` applied to FederatedBudget
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* const watcher = new ConfigWatcher({
|
|
63
|
+
* configPath: './data/config.json',
|
|
64
|
+
* trustPath: './data/trust_levels.json',
|
|
65
|
+
* targets: { config: CONFIG, authGuardian: guardian, budget: fed },
|
|
66
|
+
* });
|
|
67
|
+
* watcher.on('reload', (evt) => console.log('Reloaded:', evt.file));
|
|
68
|
+
* watcher.start();
|
|
69
|
+
* // ... later
|
|
70
|
+
* watcher.stop();
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
class ConfigWatcher extends events_1.EventEmitter {
|
|
74
|
+
watchers = [];
|
|
75
|
+
targets;
|
|
76
|
+
configPath;
|
|
77
|
+
trustPath;
|
|
78
|
+
budgetPath;
|
|
79
|
+
debounceMs;
|
|
80
|
+
debounceTimers = new Map();
|
|
81
|
+
running = false;
|
|
82
|
+
constructor(options = {}) {
|
|
83
|
+
super();
|
|
84
|
+
this.configPath = options.configPath;
|
|
85
|
+
this.trustPath = options.trustPath;
|
|
86
|
+
this.budgetPath = options.budgetPath;
|
|
87
|
+
this.targets = options.targets ?? {};
|
|
88
|
+
this.debounceMs = options.debounceMs ?? 300;
|
|
89
|
+
}
|
|
90
|
+
/** Update targets after construction */
|
|
91
|
+
setTargets(targets) {
|
|
92
|
+
Object.assign(this.targets, targets);
|
|
93
|
+
}
|
|
94
|
+
/** Start watching all configured paths */
|
|
95
|
+
start() {
|
|
96
|
+
if (this.running)
|
|
97
|
+
return;
|
|
98
|
+
this.running = true;
|
|
99
|
+
const paths = [this.configPath, this.trustPath, this.budgetPath].filter(Boolean);
|
|
100
|
+
for (const filePath of paths) {
|
|
101
|
+
try {
|
|
102
|
+
if (!fs.existsSync(filePath))
|
|
103
|
+
continue;
|
|
104
|
+
const watcher = fs.watch(filePath, { persistent: false }, (_event) => {
|
|
105
|
+
this.debouncedReload(filePath);
|
|
106
|
+
});
|
|
107
|
+
this.watchers.push(watcher);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// File doesn't exist or not watchable — skip silently
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Stop all watchers */
|
|
115
|
+
stop() {
|
|
116
|
+
this.running = false;
|
|
117
|
+
for (const w of this.watchers) {
|
|
118
|
+
try {
|
|
119
|
+
w.close();
|
|
120
|
+
}
|
|
121
|
+
catch { /* ignore */ }
|
|
122
|
+
}
|
|
123
|
+
this.watchers = [];
|
|
124
|
+
for (const timer of this.debounceTimers.values())
|
|
125
|
+
clearTimeout(timer);
|
|
126
|
+
this.debounceTimers.clear();
|
|
127
|
+
}
|
|
128
|
+
/** Manually trigger a reload for a specific file */
|
|
129
|
+
reload(filePath) {
|
|
130
|
+
this.applyReload(filePath);
|
|
131
|
+
}
|
|
132
|
+
/** Whether the watcher is currently active */
|
|
133
|
+
isRunning() {
|
|
134
|
+
return this.running;
|
|
135
|
+
}
|
|
136
|
+
// --------------------------------------------------------------------------
|
|
137
|
+
// INTERNAL
|
|
138
|
+
// --------------------------------------------------------------------------
|
|
139
|
+
debouncedReload(filePath) {
|
|
140
|
+
const existing = this.debounceTimers.get(filePath);
|
|
141
|
+
if (existing)
|
|
142
|
+
clearTimeout(existing);
|
|
143
|
+
this.debounceTimers.set(filePath, setTimeout(() => {
|
|
144
|
+
this.debounceTimers.delete(filePath);
|
|
145
|
+
this.applyReload(filePath);
|
|
146
|
+
}, this.debounceMs));
|
|
147
|
+
}
|
|
148
|
+
applyReload(filePath) {
|
|
149
|
+
try {
|
|
150
|
+
const resolved = path.resolve(filePath);
|
|
151
|
+
const raw = fs.readFileSync(resolved, 'utf-8');
|
|
152
|
+
const data = JSON.parse(raw);
|
|
153
|
+
const changes = [];
|
|
154
|
+
if (resolved === path.resolve(this.configPath ?? '')) {
|
|
155
|
+
this.applyConfig(data, changes);
|
|
156
|
+
}
|
|
157
|
+
else if (resolved === path.resolve(this.trustPath ?? '')) {
|
|
158
|
+
this.applyTrust(data, changes);
|
|
159
|
+
}
|
|
160
|
+
else if (resolved === path.resolve(this.budgetPath ?? '')) {
|
|
161
|
+
this.applyBudget(data, changes);
|
|
162
|
+
}
|
|
163
|
+
const evt = { file: filePath, timestamp: Date.now(), changes };
|
|
164
|
+
this.emit('reload', evt);
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
const errEvt = {
|
|
168
|
+
file: filePath,
|
|
169
|
+
timestamp: Date.now(),
|
|
170
|
+
error: err instanceof Error ? err.message : String(err),
|
|
171
|
+
};
|
|
172
|
+
this.emit('error', errEvt);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
applyConfig(data, changes) {
|
|
176
|
+
if (!this.targets.config || typeof data !== 'object' || data === null)
|
|
177
|
+
return;
|
|
178
|
+
const obj = data;
|
|
179
|
+
const allowed = new Set([
|
|
180
|
+
'maxParallelAgents', 'defaultTimeout', 'enableTracing',
|
|
181
|
+
'grantTokenTTL', 'maxBlackboardValueSize',
|
|
182
|
+
]);
|
|
183
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
184
|
+
if (allowed.has(key)) {
|
|
185
|
+
this.targets.config[key] = value;
|
|
186
|
+
changes.push(`config.${key}=${JSON.stringify(value)}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
applyTrust(data, changes) {
|
|
191
|
+
if (!this.targets.authGuardian?.setTrustLevel || !Array.isArray(data))
|
|
192
|
+
return;
|
|
193
|
+
for (const entry of data) {
|
|
194
|
+
if (typeof entry === 'object' && entry !== null &&
|
|
195
|
+
'agentId' in entry && 'level' in entry &&
|
|
196
|
+
typeof entry.agentId === 'string' &&
|
|
197
|
+
typeof entry.level === 'number') {
|
|
198
|
+
const { agentId, level } = entry;
|
|
199
|
+
this.targets.authGuardian.setTrustLevel(agentId, level);
|
|
200
|
+
changes.push(`trust.${agentId}=${level}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
applyBudget(data, changes) {
|
|
205
|
+
if (!this.targets.budget?.setCeiling || typeof data !== 'object' || data === null)
|
|
206
|
+
return;
|
|
207
|
+
const obj = data;
|
|
208
|
+
if (typeof obj.ceiling === 'number') {
|
|
209
|
+
this.targets.budget.setCeiling(obj.ceiling);
|
|
210
|
+
changes.push(`budget.ceiling=${obj.ceiling}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.ConfigWatcher = ConfigWatcher;
|
|
215
|
+
//# sourceMappingURL=config-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-watcher.js","sourceRoot":"","sources":["../../lib/config-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CostGovernor — Pre-flight budget prediction for task DAGs.
|
|
3
|
+
*
|
|
4
|
+
* Walks a TaskDAG, estimates per-node token spend using a pluggable cost
|
|
5
|
+
* model, and checks the total against FederatedBudget before execution.
|
|
6
|
+
*
|
|
7
|
+
* @module CostGovernor
|
|
8
|
+
*/
|
|
9
|
+
/** Per-node cost estimate */
|
|
10
|
+
export interface NodeCostEstimate {
|
|
11
|
+
taskId: string;
|
|
12
|
+
agent: string;
|
|
13
|
+
action: string;
|
|
14
|
+
estimatedTokens: number;
|
|
15
|
+
confidence: number;
|
|
16
|
+
}
|
|
17
|
+
/** Full DAG cost prediction */
|
|
18
|
+
export interface DAGCostPrediction {
|
|
19
|
+
/** Total estimated tokens across all nodes */
|
|
20
|
+
totalTokens: number;
|
|
21
|
+
/** Per-node breakdown */
|
|
22
|
+
nodes: NodeCostEstimate[];
|
|
23
|
+
/** Whether the prediction fits within the budget */
|
|
24
|
+
withinBudget: boolean;
|
|
25
|
+
/** Budget remaining after predicted spend */
|
|
26
|
+
budgetRemaining: number;
|
|
27
|
+
/** Current budget ceiling */
|
|
28
|
+
budgetCeiling: number;
|
|
29
|
+
/** Per-agent totals */
|
|
30
|
+
perAgent: Record<string, number>;
|
|
31
|
+
/** Agents that would exceed their per-agent ceiling */
|
|
32
|
+
overBudgetAgents: string[];
|
|
33
|
+
/** Average confidence across estimates */
|
|
34
|
+
averageConfidence: number;
|
|
35
|
+
}
|
|
36
|
+
/** Cost model: maps (agent, action, params) → estimated tokens */
|
|
37
|
+
export interface CostModel {
|
|
38
|
+
estimate(agent: string, action: string, params: Record<string, unknown>): {
|
|
39
|
+
tokens: number;
|
|
40
|
+
confidence: number;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Minimal DAG shape — avoids importing from goal-decomposer */
|
|
44
|
+
export interface CostDAGNode {
|
|
45
|
+
id: string;
|
|
46
|
+
agent: string;
|
|
47
|
+
action: string;
|
|
48
|
+
params: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
/** Minimal budget interface */
|
|
51
|
+
export interface CostBudget {
|
|
52
|
+
remaining(): number;
|
|
53
|
+
getCeiling(): number;
|
|
54
|
+
getAgentSpent(agentId: string): number;
|
|
55
|
+
getPerAgentCeiling(): number | undefined;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Lookup-based cost model. Register per-agent or per-action token estimates.
|
|
59
|
+
* Falls back to a configurable default.
|
|
60
|
+
*/
|
|
61
|
+
export declare class LookupCostModel implements CostModel {
|
|
62
|
+
private agentDefaults;
|
|
63
|
+
private actionOverrides;
|
|
64
|
+
private defaultTokens;
|
|
65
|
+
constructor(defaultTokens?: number);
|
|
66
|
+
/** Set default token estimate for an agent */
|
|
67
|
+
setAgentDefault(agent: string, tokens: number): void;
|
|
68
|
+
/** Set token estimate for a specific agent:action pair */
|
|
69
|
+
setActionEstimate(agent: string, action: string, tokens: number): void;
|
|
70
|
+
estimate(agent: string, action: string, _params: Record<string, unknown>): {
|
|
71
|
+
tokens: number;
|
|
72
|
+
confidence: number;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Pre-flight budget check for task DAGs.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* const governor = new CostGovernor(budget, new LookupCostModel(1000));
|
|
81
|
+
* const prediction = governor.predict(dag.nodes);
|
|
82
|
+
* if (!prediction.withinBudget) {
|
|
83
|
+
* console.log('DAG would exceed budget by', -prediction.budgetRemaining, 'tokens');
|
|
84
|
+
* }
|
|
85
|
+
*
|
|
86
|
+
* // As approval callback:
|
|
87
|
+
* const options = { approvalCallback: (dag) => governor.approve(dag.nodes) };
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare class CostGovernor {
|
|
91
|
+
private budget;
|
|
92
|
+
private model;
|
|
93
|
+
constructor(budget: CostBudget, model?: CostModel);
|
|
94
|
+
/** Replace the cost model */
|
|
95
|
+
setCostModel(model: CostModel): void;
|
|
96
|
+
/**
|
|
97
|
+
* Predict the total cost of a DAG and check against budget.
|
|
98
|
+
*/
|
|
99
|
+
predict(nodes: CostDAGNode[]): DAGCostPrediction;
|
|
100
|
+
/**
|
|
101
|
+
* Approval callback for TeamRunner — returns true if DAG fits budget.
|
|
102
|
+
*/
|
|
103
|
+
approve(nodes: CostDAGNode[]): Promise<boolean>;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=cost-governor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-governor.d.ts","sourceRoot":"","sources":["../../lib/cost-governor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,oDAAoD;IACpD,YAAY,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAClH;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,+BAA+B;AAC/B,MAAM,WAAW,UAAU;IACzB,SAAS,IAAI,MAAM,CAAC;IACpB,UAAU,IAAI,MAAM,CAAC;IACrB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAAC;CAC1C;AAMD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,SAAM;IAI/B,8CAA8C;IAC9C,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,0DAA0D;IAC1D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAItE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAUlH;AAMD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAY;gBAEb,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS;IAKjD,6BAA6B;IAC7B,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIpC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,iBAAiB;IAgDhD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAGtD"}
|