@terminals-tech/agent-zero 1.0.0 → 2.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/LICENSE +21 -0
- package/THEORY.md +207 -0
- package/dist/agency/commandRouter.d.ts +10 -0
- package/dist/agency/commandRouter.d.ts.map +1 -1
- package/dist/agency/commandRouter.js +206 -0
- package/dist/agency/commandRouter.js.map +1 -1
- package/dist/agency/runtime.d.ts +26 -0
- package/dist/agency/runtime.d.ts.map +1 -1
- package/dist/agency/runtime.js +138 -6
- package/dist/agency/runtime.js.map +1 -1
- package/dist/channels/gemini.d.ts +73 -0
- package/dist/channels/gemini.d.ts.map +1 -0
- package/dist/channels/gemini.js +246 -0
- package/dist/channels/gemini.js.map +1 -0
- package/dist/channels/sms.d.ts.map +1 -1
- package/dist/channels/sms.js +1 -2
- package/dist/channels/sms.js.map +1 -1
- package/dist/interop/a2a.d.ts +133 -0
- package/dist/interop/a2a.d.ts.map +1 -0
- package/dist/interop/a2a.js +357 -0
- package/dist/interop/a2a.js.map +1 -0
- package/dist/interop/index.d.ts +10 -0
- package/dist/interop/index.d.ts.map +1 -0
- package/dist/interop/index.js +10 -0
- package/dist/interop/index.js.map +1 -0
- package/dist/interop/mcp.d.ts +111 -0
- package/dist/interop/mcp.d.ts.map +1 -0
- package/dist/interop/mcp.js +337 -0
- package/dist/interop/mcp.js.map +1 -0
- package/dist/moltbook/approvalGate.d.ts +23 -0
- package/dist/moltbook/approvalGate.d.ts.map +1 -1
- package/dist/moltbook/approvalGate.js +45 -0
- package/dist/moltbook/approvalGate.js.map +1 -1
- package/dist/moltbook/attentionField.d.ts +14 -0
- package/dist/moltbook/attentionField.d.ts.map +1 -1
- package/dist/moltbook/attentionField.js +37 -1
- package/dist/moltbook/attentionField.js.map +1 -1
- package/dist/moltbook/daemon.d.ts +27 -0
- package/dist/moltbook/daemon.d.ts.map +1 -1
- package/dist/moltbook/daemon.js +184 -5
- package/dist/moltbook/daemon.js.map +1 -1
- package/dist/moltbook/responseComposer.d.ts +7 -2
- package/dist/moltbook/responseComposer.d.ts.map +1 -1
- package/dist/moltbook/responseComposer.js +36 -7
- package/dist/moltbook/responseComposer.js.map +1 -1
- package/dist/moltbook/strategicContext.d.ts +89 -0
- package/dist/moltbook/strategicContext.d.ts.map +1 -0
- package/dist/moltbook/strategicContext.js +283 -0
- package/dist/moltbook/strategicContext.js.map +1 -0
- package/dist/primitives/index.d.ts +6 -2
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +6 -2
- package/dist/primitives/index.js.map +1 -1
- package/dist/rail/persistence.d.ts +70 -1
- package/dist/rail/persistence.d.ts.map +1 -1
- package/dist/rail/persistence.js +270 -3
- package/dist/rail/persistence.js.map +1 -1
- package/dist/rail/plugin.d.ts +76 -0
- package/dist/rail/plugin.d.ts.map +1 -0
- package/dist/rail/plugin.js +141 -0
- package/dist/rail/plugin.js.map +1 -0
- package/dist/rail/server.d.ts +121 -30
- package/dist/rail/server.d.ts.map +1 -1
- package/dist/rail/server.js +404 -28
- package/dist/rail/server.js.map +1 -1
- package/dist/rail/wsServer.d.ts +7 -0
- package/dist/rail/wsServer.d.ts.map +1 -1
- package/dist/rail/wsServer.js +233 -11
- package/dist/rail/wsServer.js.map +1 -1
- package/dist/resonance/globalKuramoto.d.ts +20 -0
- package/dist/resonance/globalKuramoto.d.ts.map +1 -1
- package/dist/resonance/globalKuramoto.js +95 -2
- package/dist/resonance/globalKuramoto.js.map +1 -1
- package/dist/resonance/kuramoto.d.ts +6 -0
- package/dist/resonance/kuramoto.d.ts.map +1 -1
- package/dist/resonance/kuramoto.js +25 -0
- package/dist/resonance/kuramoto.js.map +1 -1
- package/dist/routing/index.d.ts +2 -0
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +1 -0
- package/dist/routing/index.js.map +1 -1
- package/dist/routing/modelRegistry.d.ts +54 -0
- package/dist/routing/modelRegistry.d.ts.map +1 -0
- package/dist/routing/modelRegistry.js +150 -0
- package/dist/routing/modelRegistry.js.map +1 -0
- package/dist/routing/thermodynamic.d.ts +14 -3
- package/dist/routing/thermodynamic.d.ts.map +1 -1
- package/dist/routing/thermodynamic.js +26 -12
- package/dist/routing/thermodynamic.js.map +1 -1
- package/dist/runtime/agent-zero.d.ts +38 -2
- package/dist/runtime/agent-zero.d.ts.map +1 -1
- package/dist/runtime/agent-zero.js +110 -7
- package/dist/runtime/agent-zero.js.map +1 -1
- package/dist/runtime/contextWindow.d.ts +62 -0
- package/dist/runtime/contextWindow.d.ts.map +1 -0
- package/dist/runtime/contextWindow.js +125 -0
- package/dist/runtime/contextWindow.js.map +1 -0
- package/dist/runtime/identity.d.ts +65 -0
- package/dist/runtime/identity.d.ts.map +1 -0
- package/dist/runtime/identity.js +199 -0
- package/dist/runtime/identity.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/sessionStore.d.ts +70 -0
- package/dist/runtime/sessionStore.d.ts.map +1 -0
- package/dist/runtime/sessionStore.js +134 -0
- package/dist/runtime/sessionStore.js.map +1 -0
- package/dist/security/capabilities.d.ts +46 -0
- package/dist/security/capabilities.d.ts.map +1 -1
- package/dist/security/capabilities.js +176 -0
- package/dist/security/capabilities.js.map +1 -1
- package/dist/security/combinators.d.ts +89 -0
- package/dist/security/combinators.d.ts.map +1 -0
- package/dist/security/combinators.js +168 -0
- package/dist/security/combinators.js.map +1 -0
- package/dist/security/index.d.ts +7 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +4 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/isolation.d.ts +76 -0
- package/dist/security/isolation.d.ts.map +1 -0
- package/dist/security/isolation.js +118 -0
- package/dist/security/isolation.js.map +1 -0
- package/dist/security/sandbox.d.ts +38 -1
- package/dist/security/sandbox.d.ts.map +1 -1
- package/dist/security/sandbox.js +68 -8
- package/dist/security/sandbox.js.map +1 -1
- package/package.json +13 -3
|
@@ -4,19 +4,22 @@
|
|
|
4
4
|
* Network-wide phase synchronization with TTL enforcement,
|
|
5
5
|
* adaptive coupling, and flood attack detection.
|
|
6
6
|
*/
|
|
7
|
-
import { KuramotoEngine } from './kuramoto.js';
|
|
7
|
+
import { KuramotoEngine, computeCoherence } from './kuramoto.js';
|
|
8
8
|
const DEFAULT_GLOBAL_CONFIG = {
|
|
9
9
|
frequencyVariance: 0.1,
|
|
10
10
|
couplingStrength: 0.5,
|
|
11
11
|
targetCoherence: 0.8,
|
|
12
12
|
coherenceThreshold: 0.3,
|
|
13
13
|
dt: 100,
|
|
14
|
+
convergenceTimeoutTicks: 300,
|
|
15
|
+
convergenceMinDelta: 0.01,
|
|
14
16
|
broadcastHz: 1,
|
|
15
17
|
staleTTL: 30000,
|
|
16
18
|
adaptiveCoupling: true,
|
|
17
19
|
minCoupling: 0.1,
|
|
18
20
|
maxCoupling: 1.5,
|
|
19
21
|
groupthinkThreshold: 0.95,
|
|
22
|
+
crossModelCouplingFactor: 0.7,
|
|
20
23
|
};
|
|
21
24
|
export class GlobalKuramotoEngine {
|
|
22
25
|
engine;
|
|
@@ -60,6 +63,7 @@ export class GlobalKuramotoEngine {
|
|
|
60
63
|
lastReported: Date.now(),
|
|
61
64
|
networkLatency: 0,
|
|
62
65
|
trustScore: 1.0,
|
|
66
|
+
modelType: observer.modelType,
|
|
63
67
|
});
|
|
64
68
|
}
|
|
65
69
|
removeAgent(agentId) {
|
|
@@ -69,10 +73,63 @@ export class GlobalKuramotoEngine {
|
|
|
69
73
|
}
|
|
70
74
|
tick() {
|
|
71
75
|
const result = this.engine.tick();
|
|
76
|
+
// Post-tick: apply cross-model coupling reduction
|
|
77
|
+
this.applyCrossModelCorrection();
|
|
72
78
|
if (this.config.adaptiveCoupling) {
|
|
73
79
|
this.adaptCoupling(result.coherence);
|
|
74
80
|
}
|
|
75
|
-
|
|
81
|
+
// Recompute coherence after correction
|
|
82
|
+
const correctedCoherence = this.engine.getCoherence();
|
|
83
|
+
return { coherence: correctedCoherence, phases: result.phases, adaptedK: this.currentCoupling };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Apply reduced coupling between oscillators of different model types.
|
|
87
|
+
* The base KuramotoEngine applies uniform coupling K to all pairs.
|
|
88
|
+
* This post-tick step partially reverts phase changes from cross-model
|
|
89
|
+
* pairs so they effectively couple at K * crossModelCouplingFactor.
|
|
90
|
+
*/
|
|
91
|
+
applyCrossModelCorrection() {
|
|
92
|
+
const oscillators = this.engine.getOscillators();
|
|
93
|
+
const factor = this.config.crossModelCouplingFactor ?? 0.7;
|
|
94
|
+
const N = oscillators.length;
|
|
95
|
+
// No correction needed if factor is 1 or fewer than 2 oscillators
|
|
96
|
+
if (factor >= 1.0 || N < 2)
|
|
97
|
+
return;
|
|
98
|
+
// Check if any oscillators have model types assigned
|
|
99
|
+
let hasModelTypes = false;
|
|
100
|
+
for (const osc of oscillators) {
|
|
101
|
+
const meta = this.networkMeta.get(osc.id);
|
|
102
|
+
if (meta?.modelType) {
|
|
103
|
+
hasModelTypes = true;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (!hasModelTypes)
|
|
108
|
+
return;
|
|
109
|
+
for (const osc of oscillators) {
|
|
110
|
+
const meta = this.networkMeta.get(osc.id);
|
|
111
|
+
if (!meta?.modelType)
|
|
112
|
+
continue;
|
|
113
|
+
let crossModelInfluence = 0;
|
|
114
|
+
for (const other of oscillators) {
|
|
115
|
+
if (other.id === osc.id)
|
|
116
|
+
continue;
|
|
117
|
+
const otherMeta = this.networkMeta.get(other.id);
|
|
118
|
+
if (otherMeta?.modelType && otherMeta.modelType !== meta.modelType) {
|
|
119
|
+
crossModelInfluence += Math.sin(other.phase - osc.phase);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// The engine applied full coupling K/N * sin(diff) * dt to all pairs.
|
|
123
|
+
// Cross-model pairs should only couple at factor * K, so revert (1-factor) portion.
|
|
124
|
+
if (crossModelInfluence !== 0) {
|
|
125
|
+
const revertAmount = (this.currentCoupling / N) *
|
|
126
|
+
crossModelInfluence *
|
|
127
|
+
(1 - factor) *
|
|
128
|
+
(this.config.dt / 1000);
|
|
129
|
+
osc.phase -= revertAmount;
|
|
130
|
+
osc.observer.phase = osc.phase;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
76
133
|
}
|
|
77
134
|
adaptCoupling(coherence) {
|
|
78
135
|
if (coherence < this.config.coherenceThreshold) {
|
|
@@ -116,6 +173,42 @@ export class GlobalKuramotoEngine {
|
|
|
116
173
|
}
|
|
117
174
|
return false;
|
|
118
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Calculate per-model-type Kuramoto order parameter.
|
|
178
|
+
* Groups oscillators by modelType and computes coherence within each group.
|
|
179
|
+
* Oscillators without a modelType are grouped under the key 'unknown'.
|
|
180
|
+
*/
|
|
181
|
+
getCoherenceByModel() {
|
|
182
|
+
const oscillators = this.engine.getOscillators();
|
|
183
|
+
const groups = new Map();
|
|
184
|
+
for (const osc of oscillators) {
|
|
185
|
+
const meta = this.networkMeta.get(osc.id);
|
|
186
|
+
const modelType = meta?.modelType ?? 'unknown';
|
|
187
|
+
const group = groups.get(modelType);
|
|
188
|
+
if (group) {
|
|
189
|
+
group.push(osc);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
groups.set(modelType, [osc]);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const result = new Map();
|
|
196
|
+
for (const [modelType, oscs] of groups) {
|
|
197
|
+
result.set(modelType, computeCoherence(oscs));
|
|
198
|
+
}
|
|
199
|
+
return result;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if any model-specific cluster exceeds the groupthink threshold.
|
|
203
|
+
*/
|
|
204
|
+
getGroupthinkByModel() {
|
|
205
|
+
const coherenceByModel = this.getCoherenceByModel();
|
|
206
|
+
const result = new Map();
|
|
207
|
+
for (const [modelType, coherence] of coherenceByModel) {
|
|
208
|
+
result.set(modelType, coherence > this.config.groupthinkThreshold);
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
119
212
|
// Compatibility methods for drop-in replacement of KuramotoEngine in server.ts
|
|
120
213
|
addObserver(observer) {
|
|
121
214
|
this.addAgent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalKuramoto.js","sourceRoot":"","sources":["../../src/resonance/globalKuramoto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAwC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"globalKuramoto.js","sourceRoot":"","sources":["../../src/resonance/globalKuramoto.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,10 @@ export interface KuramotoConfig {
|
|
|
24
24
|
coherenceThreshold: number;
|
|
25
25
|
/** Time step for phase evolution (ms) */
|
|
26
26
|
dt: number;
|
|
27
|
+
/** Max ticks without meaningful convergence progress before auto-intervention */
|
|
28
|
+
convergenceTimeoutTicks: number;
|
|
29
|
+
/** Minimum coherence improvement per window to count as "progressing" */
|
|
30
|
+
convergenceMinDelta: number;
|
|
27
31
|
}
|
|
28
32
|
export declare const DEFAULT_KURAMOTO_CONFIG: KuramotoConfig;
|
|
29
33
|
export interface Oscillator {
|
|
@@ -56,6 +60,8 @@ export declare class KuramotoEngine {
|
|
|
56
60
|
private oscillators;
|
|
57
61
|
private coherenceHistory;
|
|
58
62
|
private lastTick;
|
|
63
|
+
private stalledTicks;
|
|
64
|
+
private lastWindowCoherence;
|
|
59
65
|
constructor(config?: Partial<KuramotoConfig>);
|
|
60
66
|
/**
|
|
61
67
|
* Register an observer as an oscillator
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kuramoto.d.ts","sourceRoot":"","sources":["../../src/resonance/kuramoto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"kuramoto.d.ts","sourceRoot":"","sources":["../../src/resonance/kuramoto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,uBAAuB,EAAE,MAAM,CAAC;IAChC,yEAAyE;IACzE,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,uBAAuB,EAAE,cAQrC,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAalE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAYlE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,UAAU,EAAE,EAC5B,gBAAgB,EAAE,MAAM,EACxB,EAAE,EAAE,MAAM,GACT,MAAM,CAuBR;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,mBAAmB,CAAa;gBAE5B,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAKhD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAarC;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,IAAI,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IA2D1D;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAWxB;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI3C;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,QAAQ,IAAI;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;KAClB;IAgBD;;OAEG;IACH,cAAc,IAAI,UAAU,EAAE;IAI9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAOd"}
|
|
@@ -18,6 +18,8 @@ export const DEFAULT_KURAMOTO_CONFIG = {
|
|
|
18
18
|
targetCoherence: 0.8,
|
|
19
19
|
coherenceThreshold: 0.3,
|
|
20
20
|
dt: 16, // 60fps
|
|
21
|
+
convergenceTimeoutTicks: 300, // ~5s at 60fps
|
|
22
|
+
convergenceMinDelta: 0.01,
|
|
21
23
|
};
|
|
22
24
|
/**
|
|
23
25
|
* Compute the Kuramoto order parameter
|
|
@@ -83,6 +85,8 @@ export class KuramotoEngine {
|
|
|
83
85
|
oscillators = new Map();
|
|
84
86
|
coherenceHistory = [];
|
|
85
87
|
lastTick = 0;
|
|
88
|
+
stalledTicks = 0;
|
|
89
|
+
lastWindowCoherence = 0;
|
|
86
90
|
constructor(config = {}) {
|
|
87
91
|
this.config = { ...DEFAULT_KURAMOTO_CONFIG, ...config };
|
|
88
92
|
this.lastTick = Date.now();
|
|
@@ -135,6 +139,25 @@ export class KuramotoEngine {
|
|
|
135
139
|
if (this.coherenceHistory.length > 1000) {
|
|
136
140
|
this.coherenceHistory.shift();
|
|
137
141
|
}
|
|
142
|
+
// Convergence stall detection: if coherence isn't improving, auto-intervene
|
|
143
|
+
if (coherence < this.config.targetCoherence) {
|
|
144
|
+
const delta = coherence - this.lastWindowCoherence;
|
|
145
|
+
if (delta < this.config.convergenceMinDelta) {
|
|
146
|
+
this.stalledTicks++;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.stalledTicks = 0;
|
|
150
|
+
}
|
|
151
|
+
this.lastWindowCoherence = coherence;
|
|
152
|
+
if (this.stalledTicks >= this.config.convergenceTimeoutTicks) {
|
|
153
|
+
this.forceSynchronize();
|
|
154
|
+
this.stalledTicks = 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this.stalledTicks = 0;
|
|
159
|
+
this.lastWindowCoherence = coherence;
|
|
160
|
+
}
|
|
138
161
|
return { coherence, phases: newPhases };
|
|
139
162
|
}
|
|
140
163
|
/**
|
|
@@ -207,6 +230,8 @@ export class KuramotoEngine {
|
|
|
207
230
|
this.oscillators.clear();
|
|
208
231
|
this.coherenceHistory = [];
|
|
209
232
|
this.lastTick = Date.now();
|
|
233
|
+
this.stalledTicks = 0;
|
|
234
|
+
this.lastWindowCoherence = 0;
|
|
210
235
|
}
|
|
211
236
|
}
|
|
212
237
|
//# sourceMappingURL=kuramoto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kuramoto.js","sourceRoot":"","sources":["../../src/resonance/kuramoto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"kuramoto.js","sourceRoot":"","sources":["../../src/resonance/kuramoto.ts"],"names":[],"mappings":"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"}
|
package/dist/routing/index.d.ts
CHANGED
|
@@ -5,4 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { ThermodynamicRouter, computeEnergy, softmax, sample, cosineSimilarity, findNearestWell, DEFAULT_ROUTER_CONFIG, } from './thermodynamic.js';
|
|
7
7
|
export type { RouterConfig } from './thermodynamic.js';
|
|
8
|
+
export { ModelRegistry, generateDeterministicEmbedding, } from './modelRegistry.js';
|
|
9
|
+
export type { ModelEntry, ModelCapability, } from './modelRegistry.js';
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EACL,aAAa,EACb,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,UAAU,EACV,eAAe,GAChB,MAAM,oBAAoB,CAAC"}
|
package/dist/routing/index.js
CHANGED
|
@@ -4,4 +4,5 @@
|
|
|
4
4
|
* Thermodynamic message routing via Boltzmann sampling.
|
|
5
5
|
*/
|
|
6
6
|
export { ThermodynamicRouter, computeEnergy, softmax, sample, cosineSimilarity, findNearestWell, DEFAULT_ROUTER_CONFIG, } from './thermodynamic.js';
|
|
7
|
+
export { ModelRegistry, generateDeterministicEmbedding, } from './modelRegistry.js';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,aAAa,EACb,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Registry
|
|
3
|
+
*
|
|
4
|
+
* Registry of available AI models with capabilities, costs, and identity
|
|
5
|
+
* embeddings for semantic routing. Identity embeddings enable the
|
|
6
|
+
* thermodynamic router to factor model affinity into energy calculations.
|
|
7
|
+
*/
|
|
8
|
+
export interface ModelCapability {
|
|
9
|
+
name: string;
|
|
10
|
+
strength: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ModelEntry {
|
|
13
|
+
id: string;
|
|
14
|
+
provider: 'anthropic' | 'google' | 'openai' | 'openrouter';
|
|
15
|
+
name: string;
|
|
16
|
+
capabilities: ModelCapability[];
|
|
17
|
+
costPer1kTokens: number;
|
|
18
|
+
maxContextTokens: number;
|
|
19
|
+
supportsStreaming: boolean;
|
|
20
|
+
supportsTools: boolean;
|
|
21
|
+
identityEmbedding: number[];
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate a deterministic 768-dim unit embedding from a seed string.
|
|
26
|
+
* Uses a simple LCG seeded from the string hash for reproducibility.
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateDeterministicEmbedding(seed: string): number[];
|
|
29
|
+
export declare class ModelRegistry {
|
|
30
|
+
private models;
|
|
31
|
+
register(entry: ModelEntry): void;
|
|
32
|
+
unregister(modelId: string): void;
|
|
33
|
+
get(modelId: string): ModelEntry | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Find models that have a specific capability, optionally above a minimum strength.
|
|
36
|
+
*/
|
|
37
|
+
findByCapability(capabilityName: string, minStrength?: number): ModelEntry[];
|
|
38
|
+
/**
|
|
39
|
+
* Find the model whose identity embedding is closest to the task embedding.
|
|
40
|
+
* Optionally filters by max cost per 1k tokens.
|
|
41
|
+
*/
|
|
42
|
+
findBestMatch(taskEmbedding: number[], maxCost?: number): ModelEntry | null;
|
|
43
|
+
/**
|
|
44
|
+
* Estimate cost in USD for a given model and token counts.
|
|
45
|
+
* Returns 0 if model is not found.
|
|
46
|
+
*/
|
|
47
|
+
estimateCost(modelId: string, inputTokens: number, outputTokens: number): number;
|
|
48
|
+
listAll(): ModelEntry[];
|
|
49
|
+
/**
|
|
50
|
+
* Create a registry pre-populated with default model entries.
|
|
51
|
+
*/
|
|
52
|
+
static createWithDefaults(): ModelRegistry;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=modelRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelRegistry.d.ts","sourceRoot":"","sources":["../../src/routing/modelRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAcrE;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsC;IAEpD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIjC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI5C;;OAEG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,GAAE,MAAU,GAAG,UAAU,EAAE;IAW/E;;;OAGG;IACH,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAiB3E;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAMhF,OAAO,IAAI,UAAU,EAAE;IAIvB;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,aAAa;CAmE3C"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Registry
|
|
3
|
+
*
|
|
4
|
+
* Registry of available AI models with capabilities, costs, and identity
|
|
5
|
+
* embeddings for semantic routing. Identity embeddings enable the
|
|
6
|
+
* thermodynamic router to factor model affinity into energy calculations.
|
|
7
|
+
*/
|
|
8
|
+
import { cosineSimilarity } from './thermodynamic.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate a deterministic 768-dim unit embedding from a seed string.
|
|
11
|
+
* Uses a simple LCG seeded from the string hash for reproducibility.
|
|
12
|
+
*/
|
|
13
|
+
export function generateDeterministicEmbedding(seed) {
|
|
14
|
+
let hash = 0;
|
|
15
|
+
for (let i = 0; i < seed.length; i++) {
|
|
16
|
+
hash = ((hash << 5) - hash + seed.charCodeAt(i)) | 0;
|
|
17
|
+
}
|
|
18
|
+
const embedding = new Array(768);
|
|
19
|
+
for (let i = 0; i < 768; i++) {
|
|
20
|
+
hash = (hash * 1103515245 + 12345) & 0x7fffffff;
|
|
21
|
+
embedding[i] = (hash / 0x7fffffff) * 2 - 1;
|
|
22
|
+
}
|
|
23
|
+
// Normalize to unit vector
|
|
24
|
+
const norm = Math.sqrt(embedding.reduce((s, v) => s + v * v, 0));
|
|
25
|
+
if (norm === 0)
|
|
26
|
+
return embedding;
|
|
27
|
+
return embedding.map(v => v / norm);
|
|
28
|
+
}
|
|
29
|
+
export class ModelRegistry {
|
|
30
|
+
models = new Map();
|
|
31
|
+
register(entry) {
|
|
32
|
+
this.models.set(entry.id, entry);
|
|
33
|
+
}
|
|
34
|
+
unregister(modelId) {
|
|
35
|
+
this.models.delete(modelId);
|
|
36
|
+
}
|
|
37
|
+
get(modelId) {
|
|
38
|
+
return this.models.get(modelId);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Find models that have a specific capability, optionally above a minimum strength.
|
|
42
|
+
*/
|
|
43
|
+
findByCapability(capabilityName, minStrength = 0) {
|
|
44
|
+
const results = [];
|
|
45
|
+
for (const model of this.models.values()) {
|
|
46
|
+
const cap = model.capabilities.find(c => c.name === capabilityName);
|
|
47
|
+
if (cap && cap.strength >= minStrength) {
|
|
48
|
+
results.push(model);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return results;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Find the model whose identity embedding is closest to the task embedding.
|
|
55
|
+
* Optionally filters by max cost per 1k tokens.
|
|
56
|
+
*/
|
|
57
|
+
findBestMatch(taskEmbedding, maxCost) {
|
|
58
|
+
let bestModel = null;
|
|
59
|
+
let bestSimilarity = -Infinity;
|
|
60
|
+
for (const model of this.models.values()) {
|
|
61
|
+
if (maxCost !== undefined && model.costPer1kTokens > maxCost)
|
|
62
|
+
continue;
|
|
63
|
+
const similarity = cosineSimilarity(taskEmbedding, model.identityEmbedding);
|
|
64
|
+
if (similarity > bestSimilarity) {
|
|
65
|
+
bestSimilarity = similarity;
|
|
66
|
+
bestModel = model;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return bestModel;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Estimate cost in USD for a given model and token counts.
|
|
73
|
+
* Returns 0 if model is not found.
|
|
74
|
+
*/
|
|
75
|
+
estimateCost(modelId, inputTokens, outputTokens) {
|
|
76
|
+
const model = this.models.get(modelId);
|
|
77
|
+
if (!model)
|
|
78
|
+
return 0;
|
|
79
|
+
return model.costPer1kTokens * ((inputTokens + outputTokens) / 1000);
|
|
80
|
+
}
|
|
81
|
+
listAll() {
|
|
82
|
+
return Array.from(this.models.values());
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a registry pre-populated with default model entries.
|
|
86
|
+
*/
|
|
87
|
+
static createWithDefaults() {
|
|
88
|
+
const registry = new ModelRegistry();
|
|
89
|
+
registry.register({
|
|
90
|
+
id: 'claude-opus-4',
|
|
91
|
+
provider: 'anthropic',
|
|
92
|
+
name: 'Claude Opus 4',
|
|
93
|
+
capabilities: [
|
|
94
|
+
{ name: 'reasoning', strength: 0.95 },
|
|
95
|
+
{ name: 'code', strength: 0.9 },
|
|
96
|
+
],
|
|
97
|
+
costPer1kTokens: 0.015,
|
|
98
|
+
maxContextTokens: 200000,
|
|
99
|
+
supportsStreaming: true,
|
|
100
|
+
supportsTools: true,
|
|
101
|
+
identityEmbedding: generateDeterministicEmbedding('claude-opus-4'),
|
|
102
|
+
});
|
|
103
|
+
registry.register({
|
|
104
|
+
id: 'claude-sonnet-4',
|
|
105
|
+
provider: 'anthropic',
|
|
106
|
+
name: 'Claude Sonnet 4',
|
|
107
|
+
capabilities: [
|
|
108
|
+
{ name: 'reasoning', strength: 0.85 },
|
|
109
|
+
{ name: 'code', strength: 0.85 },
|
|
110
|
+
],
|
|
111
|
+
costPer1kTokens: 0.003,
|
|
112
|
+
maxContextTokens: 200000,
|
|
113
|
+
supportsStreaming: true,
|
|
114
|
+
supportsTools: true,
|
|
115
|
+
identityEmbedding: generateDeterministicEmbedding('claude-sonnet-4'),
|
|
116
|
+
});
|
|
117
|
+
registry.register({
|
|
118
|
+
id: 'gemini-2.5-flash',
|
|
119
|
+
provider: 'google',
|
|
120
|
+
name: 'Gemini 2.5 Flash',
|
|
121
|
+
capabilities: [
|
|
122
|
+
{ name: 'reasoning', strength: 0.8 },
|
|
123
|
+
{ name: 'code', strength: 0.75 },
|
|
124
|
+
{ name: 'search', strength: 0.9 },
|
|
125
|
+
],
|
|
126
|
+
costPer1kTokens: 0.0001,
|
|
127
|
+
maxContextTokens: 1000000,
|
|
128
|
+
supportsStreaming: true,
|
|
129
|
+
supportsTools: true,
|
|
130
|
+
identityEmbedding: generateDeterministicEmbedding('gemini-2.5-flash'),
|
|
131
|
+
});
|
|
132
|
+
registry.register({
|
|
133
|
+
id: 'gemini-2.5-pro',
|
|
134
|
+
provider: 'google',
|
|
135
|
+
name: 'Gemini 2.5 Pro',
|
|
136
|
+
capabilities: [
|
|
137
|
+
{ name: 'reasoning', strength: 0.9 },
|
|
138
|
+
{ name: 'code', strength: 0.85 },
|
|
139
|
+
{ name: 'vision', strength: 0.9 },
|
|
140
|
+
],
|
|
141
|
+
costPer1kTokens: 0.00125,
|
|
142
|
+
maxContextTokens: 1000000,
|
|
143
|
+
supportsStreaming: true,
|
|
144
|
+
supportsTools: true,
|
|
145
|
+
identityEmbedding: generateDeterministicEmbedding('gemini-2.5-pro'),
|
|
146
|
+
});
|
|
147
|
+
return registry;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=modelRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelRegistry.js","sourceRoot":"","sources":["../../src/routing/modelRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* Temperature controls exploration vs exploitation
|
|
10
10
|
*/
|
|
11
11
|
import type { Observer, Message, GravityWell } from '../primitives/types.js';
|
|
12
|
+
/** Minimum temperature to prevent degenerate Boltzmann distributions */
|
|
13
|
+
export declare const MIN_TEMPERATURE = 0.01;
|
|
12
14
|
export interface RouterConfig {
|
|
13
15
|
/** Base temperature for Boltzmann sampling */
|
|
14
16
|
temperature: number;
|
|
@@ -18,14 +20,20 @@ export interface RouterConfig {
|
|
|
18
20
|
coherenceWeight: number;
|
|
19
21
|
/** Weight for semantic distance */
|
|
20
22
|
semanticWeight: number;
|
|
23
|
+
/** Weight for model affinity bonus (default 0) */
|
|
24
|
+
modelWeight?: number;
|
|
21
25
|
/** Annealing schedule */
|
|
22
26
|
annealingSchedule: 'none' | 'linear' | 'exponential' | 'adaptive';
|
|
23
27
|
}
|
|
24
28
|
export declare const DEFAULT_ROUTER_CONFIG: RouterConfig;
|
|
25
29
|
/**
|
|
26
|
-
* Compute energy for routing a message to a specific agent
|
|
30
|
+
* Compute energy for routing a message to a specific agent.
|
|
31
|
+
* Lower energy = higher probability of selection.
|
|
32
|
+
*
|
|
33
|
+
* Model affinity is an optional bonus: when the model's identity embedding
|
|
34
|
+
* is semantically close to the message, energy decreases (better fit).
|
|
27
35
|
*/
|
|
28
|
-
export declare function computeEnergy(messageEmbedding: number[], agent: Observer, agentLoad: number, agentCoherence: number, agentAttractor: number[], config: RouterConfig): number;
|
|
36
|
+
export declare function computeEnergy(messageEmbedding: number[], agent: Observer, agentLoad: number, agentCoherence: number, agentAttractor: number[], config: RouterConfig, modelEmbedding?: number[]): number;
|
|
29
37
|
/**
|
|
30
38
|
* Softmax with temperature for Boltzmann distribution
|
|
31
39
|
*/
|
|
@@ -51,13 +59,15 @@ export declare class ThermodynamicRouter {
|
|
|
51
59
|
private step;
|
|
52
60
|
constructor(config?: Partial<RouterConfig>);
|
|
53
61
|
/**
|
|
54
|
-
* Route a message to the optimal agent using thermodynamic sampling
|
|
62
|
+
* Route a message to the optimal agent using thermodynamic sampling.
|
|
63
|
+
* Agents may optionally carry a modelEmbedding for model-affinity routing.
|
|
55
64
|
*/
|
|
56
65
|
route(message: Message, agents: Array<{
|
|
57
66
|
observer: Observer;
|
|
58
67
|
load: number;
|
|
59
68
|
coherence: number;
|
|
60
69
|
attractor: number[];
|
|
70
|
+
modelEmbedding?: number[];
|
|
61
71
|
}>): Observer;
|
|
62
72
|
/**
|
|
63
73
|
* Get energy landscape for visualization
|
|
@@ -67,6 +77,7 @@ export declare class ThermodynamicRouter {
|
|
|
67
77
|
load: number;
|
|
68
78
|
coherence: number;
|
|
69
79
|
attractor: number[];
|
|
80
|
+
modelEmbedding?: number[];
|
|
70
81
|
}>): Map<string, {
|
|
71
82
|
energy: number;
|
|
72
83
|
probability: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thermodynamic.d.ts","sourceRoot":"","sources":["../../src/routing/thermodynamic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAsB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,iBAAiB,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC;CACnE;AAED,eAAO,MAAM,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"thermodynamic.d.ts","sourceRoot":"","sources":["../../src/routing/thermodynamic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAsB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjG,wEAAwE;AACxE,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,iBAAiB,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC;CACnE;AAED,eAAO,MAAM,qBAAqB,EAAE,YAOnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,YAAY,EACpB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAYzE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC,CAYhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAmBjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,WAAW,EAAE,GACnB,WAAW,GAAG,IAAI,CAepB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAa;gBAEb,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAK9C;;;OAGG;IACH,KAAK,CACH,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,QAAQ,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC,GACD,QAAQ;IAoCX;;OAEG;IACH,eAAe,CACb,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,QAAQ,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC,GACD,GAAG,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA4BvD;;OAEG;IACH,OAAO,CAAC,MAAM;IAqBd;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|