@terminals-tech/agent-zero 1.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/README.md +209 -0
- package/bin/agent-zero.js +332 -0
- package/dist/agency/commandRouter.d.ts +48 -0
- package/dist/agency/commandRouter.d.ts.map +1 -0
- package/dist/agency/commandRouter.js +343 -0
- package/dist/agency/commandRouter.js.map +1 -0
- package/dist/agency/runtime.d.ts +66 -0
- package/dist/agency/runtime.d.ts.map +1 -0
- package/dist/agency/runtime.js +247 -0
- package/dist/agency/runtime.js.map +1 -0
- package/dist/agency/summaryGenerator.d.ts +39 -0
- package/dist/agency/summaryGenerator.d.ts.map +1 -0
- package/dist/agency/summaryGenerator.js +110 -0
- package/dist/agency/summaryGenerator.js.map +1 -0
- package/dist/agency/summaryScheduler.d.ts +33 -0
- package/dist/agency/summaryScheduler.d.ts.map +1 -0
- package/dist/agency/summaryScheduler.js +68 -0
- package/dist/agency/summaryScheduler.js.map +1 -0
- package/dist/browser/agent-runtime/RuntimePanel.d.ts +20 -0
- package/dist/browser/agent-runtime/RuntimePanel.d.ts.map +1 -0
- package/dist/browser/agent-runtime/RuntimePanel.js +203 -0
- package/dist/browser/agent-runtime/RuntimePanel.js.map +1 -0
- package/dist/browser/agent-runtime/config.d.ts +28 -0
- package/dist/browser/agent-runtime/config.d.ts.map +1 -0
- package/dist/browser/agent-runtime/config.js +50 -0
- package/dist/browser/agent-runtime/config.js.map +1 -0
- package/dist/browser/agent-runtime/launcher.d.ts +71 -0
- package/dist/browser/agent-runtime/launcher.d.ts.map +1 -0
- package/dist/browser/agent-runtime/launcher.js +167 -0
- package/dist/browser/agent-runtime/launcher.js.map +1 -0
- package/dist/browser/rail-auth-bridge.d.ts +85 -0
- package/dist/browser/rail-auth-bridge.d.ts.map +1 -0
- package/dist/browser/rail-auth-bridge.js +209 -0
- package/dist/browser/rail-auth-bridge.js.map +1 -0
- package/dist/channels/index.d.ts +13 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +12 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/moltbook.d.ts +114 -0
- package/dist/channels/moltbook.d.ts.map +1 -0
- package/dist/channels/moltbook.js +348 -0
- package/dist/channels/moltbook.js.map +1 -0
- package/dist/channels/sms.d.ts +33 -0
- package/dist/channels/sms.d.ts.map +1 -0
- package/dist/channels/sms.js +160 -0
- package/dist/channels/sms.js.map +1 -0
- package/dist/channels/telegram.d.ts +47 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +276 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/twitter.d.ts +93 -0
- package/dist/channels/twitter.d.ts.map +1 -0
- package/dist/channels/twitter.js +411 -0
- package/dist/channels/twitter.js.map +1 -0
- package/dist/channels/whatsapp.d.ts +77 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js +514 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/checkout/index.d.ts +92 -0
- package/dist/checkout/index.d.ts.map +1 -0
- package/dist/checkout/index.js +125 -0
- package/dist/checkout/index.js.map +1 -0
- package/dist/cli/moltbook.d.ts +11 -0
- package/dist/cli/moltbook.d.ts.map +1 -0
- package/dist/cli/moltbook.js +259 -0
- package/dist/cli/moltbook.js.map +1 -0
- package/dist/cli/setup.d.ts +10 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +232 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/coherence/absorption.d.ts +141 -0
- package/dist/coherence/absorption.d.ts.map +1 -0
- package/dist/coherence/absorption.js +343 -0
- package/dist/coherence/absorption.js.map +1 -0
- package/dist/coherence/crossPlatform.d.ts +55 -0
- package/dist/coherence/crossPlatform.d.ts.map +1 -0
- package/dist/coherence/crossPlatform.js +219 -0
- package/dist/coherence/crossPlatform.js.map +1 -0
- package/dist/coherence/identityResolver.d.ts +27 -0
- package/dist/coherence/identityResolver.d.ts.map +1 -0
- package/dist/coherence/identityResolver.js +102 -0
- package/dist/coherence/identityResolver.js.map +1 -0
- package/dist/identity/burner.d.ts +100 -0
- package/dist/identity/burner.d.ts.map +1 -0
- package/dist/identity/burner.js +256 -0
- package/dist/identity/burner.js.map +1 -0
- package/dist/identity/burnerScheduler.d.ts +18 -0
- package/dist/identity/burnerScheduler.d.ts.map +1 -0
- package/dist/identity/burnerScheduler.js +82 -0
- package/dist/identity/burnerScheduler.js.map +1 -0
- package/dist/identity/moltbookBurnerAdapter.d.ts +14 -0
- package/dist/identity/moltbookBurnerAdapter.d.ts.map +1 -0
- package/dist/identity/moltbookBurnerAdapter.js +82 -0
- package/dist/identity/moltbookBurnerAdapter.js.map +1 -0
- package/dist/identity/operationalVault.d.ts +108 -0
- package/dist/identity/operationalVault.d.ts.map +1 -0
- package/dist/identity/operationalVault.js +259 -0
- package/dist/identity/operationalVault.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/moltbook/apiErrorHandler.d.ts +48 -0
- package/dist/moltbook/apiErrorHandler.d.ts.map +1 -0
- package/dist/moltbook/apiErrorHandler.js +125 -0
- package/dist/moltbook/apiErrorHandler.js.map +1 -0
- package/dist/moltbook/approvalGate.d.ts +81 -0
- package/dist/moltbook/approvalGate.d.ts.map +1 -0
- package/dist/moltbook/approvalGate.js +211 -0
- package/dist/moltbook/approvalGate.js.map +1 -0
- package/dist/moltbook/attentionField.d.ts +55 -0
- package/dist/moltbook/attentionField.d.ts.map +1 -0
- package/dist/moltbook/attentionField.js +163 -0
- package/dist/moltbook/attentionField.js.map +1 -0
- package/dist/moltbook/contentEnhancer.d.ts +28 -0
- package/dist/moltbook/contentEnhancer.d.ts.map +1 -0
- package/dist/moltbook/contentEnhancer.js +129 -0
- package/dist/moltbook/contentEnhancer.js.map +1 -0
- package/dist/moltbook/daemon.d.ts +111 -0
- package/dist/moltbook/daemon.d.ts.map +1 -0
- package/dist/moltbook/daemon.js +497 -0
- package/dist/moltbook/daemon.js.map +1 -0
- package/dist/moltbook/observer.d.ts +44 -0
- package/dist/moltbook/observer.d.ts.map +1 -0
- package/dist/moltbook/observer.js +71 -0
- package/dist/moltbook/observer.js.map +1 -0
- package/dist/moltbook/responseComposer.d.ts +54 -0
- package/dist/moltbook/responseComposer.d.ts.map +1 -0
- package/dist/moltbook/responseComposer.js +233 -0
- package/dist/moltbook/responseComposer.js.map +1 -0
- package/dist/openclaw/gateway.d.ts +45 -0
- package/dist/openclaw/gateway.d.ts.map +1 -0
- package/dist/openclaw/gateway.js +139 -0
- package/dist/openclaw/gateway.js.map +1 -0
- package/dist/openclaw/skill.d.ts +185 -0
- package/dist/openclaw/skill.d.ts.map +1 -0
- package/dist/openclaw/skill.js +297 -0
- package/dist/openclaw/skill.js.map +1 -0
- package/dist/primitives/index.d.ts +23 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +27 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/types.d.ts +673 -0
- package/dist/primitives/types.d.ts.map +1 -0
- package/dist/primitives/types.js +205 -0
- package/dist/primitives/types.js.map +1 -0
- package/dist/rail/absorptionBridge.d.ts +47 -0
- package/dist/rail/absorptionBridge.d.ts.map +1 -0
- package/dist/rail/absorptionBridge.js +78 -0
- package/dist/rail/absorptionBridge.js.map +1 -0
- package/dist/rail/authProtocol.d.ts +32 -0
- package/dist/rail/authProtocol.d.ts.map +1 -0
- package/dist/rail/authProtocol.js +83 -0
- package/dist/rail/authProtocol.js.map +1 -0
- package/dist/rail/clientRateLimiter.d.ts +17 -0
- package/dist/rail/clientRateLimiter.d.ts.map +1 -0
- package/dist/rail/clientRateLimiter.js +64 -0
- package/dist/rail/clientRateLimiter.js.map +1 -0
- package/dist/rail/index.d.ts +8 -0
- package/dist/rail/index.d.ts.map +1 -0
- package/dist/rail/index.js +38 -0
- package/dist/rail/index.js.map +1 -0
- package/dist/rail/jwtVerifier.d.ts +11 -0
- package/dist/rail/jwtVerifier.d.ts.map +1 -0
- package/dist/rail/jwtVerifier.js +55 -0
- package/dist/rail/jwtVerifier.js.map +1 -0
- package/dist/rail/logger.d.ts +13 -0
- package/dist/rail/logger.d.ts.map +1 -0
- package/dist/rail/logger.js +29 -0
- package/dist/rail/logger.js.map +1 -0
- package/dist/rail/metadataBroadcaster.d.ts +53 -0
- package/dist/rail/metadataBroadcaster.d.ts.map +1 -0
- package/dist/rail/metadataBroadcaster.js +126 -0
- package/dist/rail/metadataBroadcaster.js.map +1 -0
- package/dist/rail/persistence.d.ts +57 -0
- package/dist/rail/persistence.d.ts.map +1 -0
- package/dist/rail/persistence.js +103 -0
- package/dist/rail/persistence.js.map +1 -0
- package/dist/rail/securityMonitor.d.ts +23 -0
- package/dist/rail/securityMonitor.d.ts.map +1 -0
- package/dist/rail/securityMonitor.js +52 -0
- package/dist/rail/securityMonitor.js.map +1 -0
- package/dist/rail/server.d.ts +186 -0
- package/dist/rail/server.d.ts.map +1 -0
- package/dist/rail/server.js +568 -0
- package/dist/rail/server.js.map +1 -0
- package/dist/rail/userSessionManager.d.ts +29 -0
- package/dist/rail/userSessionManager.d.ts.map +1 -0
- package/dist/rail/userSessionManager.js +87 -0
- package/dist/rail/userSessionManager.js.map +1 -0
- package/dist/rail/wsServer.d.ts +39 -0
- package/dist/rail/wsServer.d.ts.map +1 -0
- package/dist/rail/wsServer.js +544 -0
- package/dist/rail/wsServer.js.map +1 -0
- package/dist/resonance/globalKuramoto.d.ts +67 -0
- package/dist/resonance/globalKuramoto.d.ts.map +1 -0
- package/dist/resonance/globalKuramoto.js +161 -0
- package/dist/resonance/globalKuramoto.js.map +1 -0
- package/dist/resonance/index.d.ts +12 -0
- package/dist/resonance/index.d.ts.map +1 -0
- package/dist/resonance/index.js +9 -0
- package/dist/resonance/index.js.map +1 -0
- package/dist/resonance/kuramoto.d.ts +118 -0
- package/dist/resonance/kuramoto.d.ts.map +1 -0
- package/dist/resonance/kuramoto.js +212 -0
- package/dist/resonance/kuramoto.js.map +1 -0
- package/dist/routing/distributedRouter.d.ts +84 -0
- package/dist/routing/distributedRouter.d.ts.map +1 -0
- package/dist/routing/distributedRouter.js +209 -0
- package/dist/routing/distributedRouter.js.map +1 -0
- package/dist/routing/index.d.ts +8 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +7 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/thermodynamic.d.ts +91 -0
- package/dist/routing/thermodynamic.d.ts.map +1 -0
- package/dist/routing/thermodynamic.js +184 -0
- package/dist/routing/thermodynamic.js.map +1 -0
- package/dist/runtime/agent-zero.d.ts +138 -0
- package/dist/runtime/agent-zero.d.ts.map +1 -0
- package/dist/runtime/agent-zero.js +435 -0
- package/dist/runtime/agent-zero.js.map +1 -0
- package/dist/runtime/index.d.ts +13 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +15 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/security/capabilities.d.ts +178 -0
- package/dist/security/capabilities.d.ts.map +1 -0
- package/dist/security/capabilities.js +270 -0
- package/dist/security/capabilities.js.map +1 -0
- package/dist/security/channelFirewallMiddleware.d.ts +22 -0
- package/dist/security/channelFirewallMiddleware.d.ts.map +1 -0
- package/dist/security/channelFirewallMiddleware.js +52 -0
- package/dist/security/channelFirewallMiddleware.js.map +1 -0
- package/dist/security/index.d.ts +11 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +11 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/injectionFirewall.d.ts +47 -0
- package/dist/security/injectionFirewall.d.ts.map +1 -0
- package/dist/security/injectionFirewall.js +262 -0
- package/dist/security/injectionFirewall.js.map +1 -0
- package/dist/security/outputSanitizer.d.ts +28 -0
- package/dist/security/outputSanitizer.d.ts.map +1 -0
- package/dist/security/outputSanitizer.js +66 -0
- package/dist/security/outputSanitizer.js.map +1 -0
- package/dist/security/sandbox.d.ts +192 -0
- package/dist/security/sandbox.d.ts.map +1 -0
- package/dist/security/sandbox.js +359 -0
- package/dist/security/sandbox.js.map +1 -0
- package/dist/security/skillVerify.d.ts +128 -0
- package/dist/security/skillVerify.d.ts.map +1 -0
- package/dist/security/skillVerify.js +220 -0
- package/dist/security/skillVerify.js.map +1 -0
- package/dist/security/vault.d.ts +60 -0
- package/dist/security/vault.d.ts.map +1 -0
- package/dist/security/vault.js +522 -0
- package/dist/security/vault.js.map +1 -0
- package/dist/utils/persistentRateLimiter.d.ts +69 -0
- package/dist/utils/persistentRateLimiter.d.ts.map +1 -0
- package/dist/utils/persistentRateLimiter.js +128 -0
- package/dist/utils/persistentRateLimiter.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ThermodynamicRouter } from './thermodynamic.js';
|
|
2
|
+
/**
|
|
3
|
+
* Attractor basin in the distributed energy landscape.
|
|
4
|
+
* Represents a semantic cluster that attracts related messages.
|
|
5
|
+
*/
|
|
6
|
+
export interface AttractorBasin {
|
|
7
|
+
id: string;
|
|
8
|
+
centroid: number[];
|
|
9
|
+
mass: number;
|
|
10
|
+
agentCount: number;
|
|
11
|
+
topicLabel: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Snapshot of energy landscape for gossip protocol.
|
|
15
|
+
*/
|
|
16
|
+
export interface EnergyLandscapeSnapshot {
|
|
17
|
+
basins: AttractorBasin[];
|
|
18
|
+
timestamp: number;
|
|
19
|
+
nodeId: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Configuration for distributed router.
|
|
23
|
+
*/
|
|
24
|
+
export interface DistributedRouterConfig {
|
|
25
|
+
gossipInterval: number;
|
|
26
|
+
syncThreshold: number;
|
|
27
|
+
maxBasins: number;
|
|
28
|
+
splitThreshold: number;
|
|
29
|
+
mergeThreshold: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Distributed thermodynamic router using gossip protocol.
|
|
33
|
+
* Shares energy landscape across rail network for global coherence.
|
|
34
|
+
*/
|
|
35
|
+
export declare class DistributedRouter {
|
|
36
|
+
private localRouter;
|
|
37
|
+
private basins;
|
|
38
|
+
private config;
|
|
39
|
+
private nodeId;
|
|
40
|
+
constructor(localRouter: ThermodynamicRouter, config?: Partial<DistributedRouterConfig>);
|
|
41
|
+
addBasin(basin: AttractorBasin): void;
|
|
42
|
+
removeBasin(id: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Merge remote landscape snapshot via gossip protocol.
|
|
45
|
+
* Weighted average for existing basins, add new ones, keep local-only.
|
|
46
|
+
*/
|
|
47
|
+
receiveGossip(snapshot: EnergyLandscapeSnapshot): void;
|
|
48
|
+
getGossipPayload(): EnergyLandscapeSnapshot;
|
|
49
|
+
/**
|
|
50
|
+
* Route embedding to highest-affinity basin.
|
|
51
|
+
*/
|
|
52
|
+
routeToBasin(embedding: number[]): AttractorBasin | null;
|
|
53
|
+
/**
|
|
54
|
+
* Check if basin should split due to high agent count.
|
|
55
|
+
*/
|
|
56
|
+
checkSplit(basinId: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Split basin into two by perturbing centroid.
|
|
59
|
+
*/
|
|
60
|
+
splitBasin(basinId: string): [AttractorBasin, AttractorBasin];
|
|
61
|
+
/**
|
|
62
|
+
* Merge basins with cosine similarity above threshold.
|
|
63
|
+
*/
|
|
64
|
+
mergeSimilarBasins(threshold?: number): number;
|
|
65
|
+
/**
|
|
66
|
+
* Seed attractor basins for Agent Zero topics.
|
|
67
|
+
*/
|
|
68
|
+
seedAgentZeroAttractors(topics: string[]): void;
|
|
69
|
+
getBasins(): AttractorBasin[];
|
|
70
|
+
getStats(): {
|
|
71
|
+
basinCount: number;
|
|
72
|
+
totalMass: number;
|
|
73
|
+
largestBasin: string;
|
|
74
|
+
};
|
|
75
|
+
private mergeTwo;
|
|
76
|
+
private enforceMaxBasins;
|
|
77
|
+
private generateTopicEmbedding;
|
|
78
|
+
private seededRandom;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Factory for distributed router.
|
|
82
|
+
*/
|
|
83
|
+
export declare function createDistributedRouter(localRouter: ThermodynamicRouter, config?: Partial<DistributedRouterConfig>): DistributedRouter;
|
|
84
|
+
//# sourceMappingURL=distributedRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributedRouter.d.ts","sourceRoot":"","sources":["../../src/routing/distributedRouter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAoB,MAAM,oBAAoB,CAAC;AAE3E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAUD;;;GAGG;AACH,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,WAAW;IALrB,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAgB;gBAGpB,WAAW,EAAE,mBAAmB,EACxC,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAK3C,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAKrC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI7B;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI;IAgCtD,gBAAgB,IAAI,uBAAuB;IAQ3C;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,cAAc,GAAG,IAAI;IAiBxD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKpC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC;IA+B7D;;OAEG;IACH,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IA8B9C;;OAEG;IACH,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAa/C,SAAS,IAAI,cAAc,EAAE;IAI7B,QAAQ,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAe3E,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,YAAY;CAOrB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,mBAAmB,EAChC,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GACxC,iBAAiB,CAEnB"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { cosineSimilarity } from './thermodynamic.js';
|
|
3
|
+
const DEFAULT_CONFIG = {
|
|
4
|
+
gossipInterval: 5000,
|
|
5
|
+
syncThreshold: 0.85,
|
|
6
|
+
maxBasins: 50,
|
|
7
|
+
splitThreshold: 10,
|
|
8
|
+
mergeThreshold: 0.92,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Distributed thermodynamic router using gossip protocol.
|
|
12
|
+
* Shares energy landscape across rail network for global coherence.
|
|
13
|
+
*/
|
|
14
|
+
export class DistributedRouter {
|
|
15
|
+
localRouter;
|
|
16
|
+
basins = new Map();
|
|
17
|
+
config;
|
|
18
|
+
nodeId = randomUUID();
|
|
19
|
+
constructor(localRouter, config) {
|
|
20
|
+
this.localRouter = localRouter;
|
|
21
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
22
|
+
}
|
|
23
|
+
addBasin(basin) {
|
|
24
|
+
this.basins.set(basin.id, basin);
|
|
25
|
+
this.enforceMaxBasins();
|
|
26
|
+
}
|
|
27
|
+
removeBasin(id) {
|
|
28
|
+
this.basins.delete(id);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Merge remote landscape snapshot via gossip protocol.
|
|
32
|
+
* Weighted average for existing basins, add new ones, keep local-only.
|
|
33
|
+
*/
|
|
34
|
+
receiveGossip(snapshot) {
|
|
35
|
+
const remoteBasinIds = new Set(snapshot.basins.map((b) => b.id));
|
|
36
|
+
for (const remoteBasin of snapshot.basins) {
|
|
37
|
+
const local = this.basins.get(remoteBasin.id);
|
|
38
|
+
if (local) {
|
|
39
|
+
// Weighted average: local mass vs remote mass
|
|
40
|
+
const totalMass = local.mass + remoteBasin.mass;
|
|
41
|
+
const localWeight = local.mass / totalMass;
|
|
42
|
+
const remoteWeight = remoteBasin.mass / totalMass;
|
|
43
|
+
const mergedCentroid = local.centroid.map((val, i) => val * localWeight + remoteBasin.centroid[i] * remoteWeight);
|
|
44
|
+
this.basins.set(remoteBasin.id, {
|
|
45
|
+
...local,
|
|
46
|
+
centroid: mergedCentroid,
|
|
47
|
+
mass: totalMass,
|
|
48
|
+
agentCount: local.agentCount + remoteBasin.agentCount,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// New basin from remote
|
|
53
|
+
this.basins.set(remoteBasin.id, { ...remoteBasin });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Keep local basins not in remote (don't delete)
|
|
57
|
+
this.enforceMaxBasins();
|
|
58
|
+
}
|
|
59
|
+
getGossipPayload() {
|
|
60
|
+
return {
|
|
61
|
+
basins: Array.from(this.basins.values()),
|
|
62
|
+
timestamp: Date.now(),
|
|
63
|
+
nodeId: this.nodeId,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Route embedding to highest-affinity basin.
|
|
68
|
+
*/
|
|
69
|
+
routeToBasin(embedding) {
|
|
70
|
+
if (this.basins.size === 0)
|
|
71
|
+
return null;
|
|
72
|
+
let bestBasin = null;
|
|
73
|
+
let maxAffinity = -Infinity;
|
|
74
|
+
for (const basin of this.basins.values()) {
|
|
75
|
+
const affinity = cosineSimilarity(embedding, basin.centroid);
|
|
76
|
+
if (affinity > maxAffinity) {
|
|
77
|
+
maxAffinity = affinity;
|
|
78
|
+
bestBasin = basin;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return bestBasin;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if basin should split due to high agent count.
|
|
85
|
+
*/
|
|
86
|
+
checkSplit(basinId) {
|
|
87
|
+
const basin = this.basins.get(basinId);
|
|
88
|
+
return basin ? basin.agentCount > this.config.splitThreshold : false;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Split basin into two by perturbing centroid.
|
|
92
|
+
*/
|
|
93
|
+
splitBasin(basinId) {
|
|
94
|
+
const basin = this.basins.get(basinId);
|
|
95
|
+
if (!basin)
|
|
96
|
+
throw new Error(`Basin ${basinId} not found`);
|
|
97
|
+
const perturbation = basin.centroid.map(() => (Math.random() - 0.5) * 0.1);
|
|
98
|
+
const centroid1 = basin.centroid.map((v, i) => v + perturbation[i]);
|
|
99
|
+
const centroid2 = basin.centroid.map((v, i) => v - perturbation[i]);
|
|
100
|
+
const basin1 = {
|
|
101
|
+
id: randomUUID(),
|
|
102
|
+
centroid: centroid1,
|
|
103
|
+
mass: basin.mass / 2,
|
|
104
|
+
agentCount: Math.floor(basin.agentCount / 2),
|
|
105
|
+
topicLabel: `${basin.topicLabel}-A`,
|
|
106
|
+
};
|
|
107
|
+
const basin2 = {
|
|
108
|
+
id: randomUUID(),
|
|
109
|
+
centroid: centroid2,
|
|
110
|
+
mass: basin.mass / 2,
|
|
111
|
+
agentCount: Math.ceil(basin.agentCount / 2),
|
|
112
|
+
topicLabel: `${basin.topicLabel}-B`,
|
|
113
|
+
};
|
|
114
|
+
this.basins.delete(basinId);
|
|
115
|
+
this.basins.set(basin1.id, basin1);
|
|
116
|
+
this.basins.set(basin2.id, basin2);
|
|
117
|
+
return [basin1, basin2];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Merge basins with cosine similarity above threshold.
|
|
121
|
+
*/
|
|
122
|
+
mergeSimilarBasins(threshold) {
|
|
123
|
+
const mergeThreshold = threshold ?? this.config.mergeThreshold;
|
|
124
|
+
const basinsArray = Array.from(this.basins.values());
|
|
125
|
+
let mergeCount = 0;
|
|
126
|
+
for (let i = 0; i < basinsArray.length; i++) {
|
|
127
|
+
for (let j = i + 1; j < basinsArray.length; j++) {
|
|
128
|
+
const similarity = cosineSimilarity(basinsArray[i].centroid, basinsArray[j].centroid);
|
|
129
|
+
if (similarity >= mergeThreshold) {
|
|
130
|
+
const merged = this.mergeTwo(basinsArray[i], basinsArray[j]);
|
|
131
|
+
this.basins.delete(basinsArray[i].id);
|
|
132
|
+
this.basins.delete(basinsArray[j].id);
|
|
133
|
+
this.basins.set(merged.id, merged);
|
|
134
|
+
mergeCount++;
|
|
135
|
+
// Remove merged basins from array to avoid double-merge
|
|
136
|
+
basinsArray.splice(j, 1);
|
|
137
|
+
basinsArray.splice(i, 1);
|
|
138
|
+
i--;
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return mergeCount;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Seed attractor basins for Agent Zero topics.
|
|
147
|
+
*/
|
|
148
|
+
seedAgentZeroAttractors(topics) {
|
|
149
|
+
for (const topic of topics) {
|
|
150
|
+
const centroid = this.generateTopicEmbedding(topic);
|
|
151
|
+
this.addBasin({
|
|
152
|
+
id: randomUUID(),
|
|
153
|
+
centroid,
|
|
154
|
+
mass: 1.0,
|
|
155
|
+
agentCount: 1,
|
|
156
|
+
topicLabel: topic,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
getBasins() {
|
|
161
|
+
return Array.from(this.basins.values());
|
|
162
|
+
}
|
|
163
|
+
getStats() {
|
|
164
|
+
const basins = this.getBasins();
|
|
165
|
+
const totalMass = basins.reduce((sum, b) => sum + b.mass, 0);
|
|
166
|
+
const largest = basins.reduce((max, b) => (b.mass > max.mass ? b : max), basins[0] ?? { mass: 0, topicLabel: 'none' });
|
|
167
|
+
return {
|
|
168
|
+
basinCount: basins.length,
|
|
169
|
+
totalMass,
|
|
170
|
+
largestBasin: largest.topicLabel,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
mergeTwo(a, b) {
|
|
174
|
+
const totalMass = a.mass + b.mass;
|
|
175
|
+
const centroid = a.centroid.map((v, i) => (v * a.mass + b.centroid[i] * b.mass) / totalMass);
|
|
176
|
+
return {
|
|
177
|
+
id: randomUUID(),
|
|
178
|
+
centroid,
|
|
179
|
+
mass: totalMass,
|
|
180
|
+
agentCount: a.agentCount + b.agentCount,
|
|
181
|
+
topicLabel: `${a.topicLabel}+${b.topicLabel}`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
enforceMaxBasins() {
|
|
185
|
+
while (this.basins.size > this.config.maxBasins) {
|
|
186
|
+
this.mergeSimilarBasins(this.config.mergeThreshold);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
generateTopicEmbedding(topic) {
|
|
190
|
+
// Simple hash-based embedding for seeding (production would use real embeddings)
|
|
191
|
+
const hash = topic.split('').reduce((h, c) => h * 31 + c.charCodeAt(0), 0);
|
|
192
|
+
const rng = this.seededRandom(hash);
|
|
193
|
+
return Array.from({ length: 768 }, () => (rng() - 0.5) * 2);
|
|
194
|
+
}
|
|
195
|
+
seededRandom(seed) {
|
|
196
|
+
let state = seed;
|
|
197
|
+
return () => {
|
|
198
|
+
state = (state * 1664525 + 1013904223) % 2 ** 32;
|
|
199
|
+
return state / 2 ** 32;
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Factory for distributed router.
|
|
205
|
+
*/
|
|
206
|
+
export function createDistributedRouter(localRouter, config) {
|
|
207
|
+
return new DistributedRouter(localRouter, config);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=distributedRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributedRouter.js","sourceRoot":"","sources":["../../src/routing/distributedRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @terminals-tech/agent-zero/routing
|
|
3
|
+
*
|
|
4
|
+
* Thermodynamic message routing via Boltzmann sampling.
|
|
5
|
+
*/
|
|
6
|
+
export { ThermodynamicRouter, computeEnergy, softmax, sample, cosineSimilarity, findNearestWell, DEFAULT_ROUTER_CONFIG, } from './thermodynamic.js';
|
|
7
|
+
export type { RouterConfig } from './thermodynamic.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @terminals-tech/agent-zero/routing
|
|
3
|
+
*
|
|
4
|
+
* Thermodynamic message routing via Boltzmann sampling.
|
|
5
|
+
*/
|
|
6
|
+
export { ThermodynamicRouter, computeEnergy, softmax, sample, cosineSimilarity, findNearestWell, DEFAULT_ROUTER_CONFIG, } from './thermodynamic.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thermodynamic Router
|
|
3
|
+
*
|
|
4
|
+
* Routes messages by minimizing free energy through Boltzmann sampling.
|
|
5
|
+
* Physical routing ≅ semantic routing.
|
|
6
|
+
*
|
|
7
|
+
* F = E[log p(y|x,model)] - H[q(model)]
|
|
8
|
+
* Lower energy = better semantic fit
|
|
9
|
+
* Temperature controls exploration vs exploitation
|
|
10
|
+
*/
|
|
11
|
+
import type { Observer, Message, GravityWell } from '../primitives/types.js';
|
|
12
|
+
export interface RouterConfig {
|
|
13
|
+
/** Base temperature for Boltzmann sampling */
|
|
14
|
+
temperature: number;
|
|
15
|
+
/** Weight for load penalty */
|
|
16
|
+
loadWeight: number;
|
|
17
|
+
/** Weight for coherence bonus */
|
|
18
|
+
coherenceWeight: number;
|
|
19
|
+
/** Weight for semantic distance */
|
|
20
|
+
semanticWeight: number;
|
|
21
|
+
/** Annealing schedule */
|
|
22
|
+
annealingSchedule: 'none' | 'linear' | 'exponential' | 'adaptive';
|
|
23
|
+
}
|
|
24
|
+
export declare const DEFAULT_ROUTER_CONFIG: RouterConfig;
|
|
25
|
+
/**
|
|
26
|
+
* Compute energy for routing a message to a specific agent
|
|
27
|
+
*/
|
|
28
|
+
export declare function computeEnergy(messageEmbedding: number[], agent: Observer, agentLoad: number, agentCoherence: number, agentAttractor: number[], config: RouterConfig): number;
|
|
29
|
+
/**
|
|
30
|
+
* Softmax with temperature for Boltzmann distribution
|
|
31
|
+
*/
|
|
32
|
+
export declare function softmax(energies: number[], temperature: number): number[];
|
|
33
|
+
/**
|
|
34
|
+
* Sample from probability distribution
|
|
35
|
+
*/
|
|
36
|
+
export declare function sample<T>(items: T[], probabilities: number[]): T;
|
|
37
|
+
/**
|
|
38
|
+
* Cosine similarity between two vectors
|
|
39
|
+
*/
|
|
40
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
41
|
+
/**
|
|
42
|
+
* Find nearest gravity well to an embedding
|
|
43
|
+
*/
|
|
44
|
+
export declare function findNearestWell(embedding: number[], wells: GravityWell[]): GravityWell | null;
|
|
45
|
+
/**
|
|
46
|
+
* Main thermodynamic router class
|
|
47
|
+
*/
|
|
48
|
+
export declare class ThermodynamicRouter {
|
|
49
|
+
private config;
|
|
50
|
+
private temperature;
|
|
51
|
+
private step;
|
|
52
|
+
constructor(config?: Partial<RouterConfig>);
|
|
53
|
+
/**
|
|
54
|
+
* Route a message to the optimal agent using thermodynamic sampling
|
|
55
|
+
*/
|
|
56
|
+
route(message: Message, agents: Array<{
|
|
57
|
+
observer: Observer;
|
|
58
|
+
load: number;
|
|
59
|
+
coherence: number;
|
|
60
|
+
attractor: number[];
|
|
61
|
+
}>): Observer;
|
|
62
|
+
/**
|
|
63
|
+
* Get energy landscape for visualization
|
|
64
|
+
*/
|
|
65
|
+
energyLandscape(message: Message, agents: Array<{
|
|
66
|
+
observer: Observer;
|
|
67
|
+
load: number;
|
|
68
|
+
coherence: number;
|
|
69
|
+
attractor: number[];
|
|
70
|
+
}>): Map<string, {
|
|
71
|
+
energy: number;
|
|
72
|
+
probability: number;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* Apply annealing schedule
|
|
76
|
+
*/
|
|
77
|
+
private anneal;
|
|
78
|
+
/**
|
|
79
|
+
* Set temperature directly (for adaptive control)
|
|
80
|
+
*/
|
|
81
|
+
setTemperature(temp: number): void;
|
|
82
|
+
/**
|
|
83
|
+
* Get current temperature
|
|
84
|
+
*/
|
|
85
|
+
getTemperature(): number;
|
|
86
|
+
/**
|
|
87
|
+
* Reset router state
|
|
88
|
+
*/
|
|
89
|
+
reset(): void;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=thermodynamic.d.ts.map
|
|
@@ -0,0 +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,YAMnC,CAAC;AAEF;;GAEG;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,GACnB,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAUzE;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;;OAEG;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;KACrB,CAAC,GACD,QAAQ;IAmCX;;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;KACrB,CAAC,GACD,GAAG,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BvD;;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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thermodynamic Router
|
|
3
|
+
*
|
|
4
|
+
* Routes messages by minimizing free energy through Boltzmann sampling.
|
|
5
|
+
* Physical routing ≅ semantic routing.
|
|
6
|
+
*
|
|
7
|
+
* F = E[log p(y|x,model)] - H[q(model)]
|
|
8
|
+
* Lower energy = better semantic fit
|
|
9
|
+
* Temperature controls exploration vs exploitation
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_ROUTER_CONFIG = {
|
|
12
|
+
temperature: 1.0,
|
|
13
|
+
loadWeight: 0.3,
|
|
14
|
+
coherenceWeight: 0.2,
|
|
15
|
+
semanticWeight: 0.5,
|
|
16
|
+
annealingSchedule: 'adaptive',
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Compute energy for routing a message to a specific agent
|
|
20
|
+
*/
|
|
21
|
+
export function computeEnergy(messageEmbedding, agent, agentLoad, agentCoherence, agentAttractor, config) {
|
|
22
|
+
// Semantic distance (cosine similarity inverted)
|
|
23
|
+
const semanticDistance = 1 - cosineSimilarity(messageEmbedding, agentAttractor);
|
|
24
|
+
// Load penalty (busy agents cost more)
|
|
25
|
+
const loadPenalty = agentLoad * config.loadWeight;
|
|
26
|
+
// Coherence bonus (aligned agents cost less)
|
|
27
|
+
const coherenceBonus = agentCoherence * config.coherenceWeight;
|
|
28
|
+
// Total energy
|
|
29
|
+
return (semanticDistance * config.semanticWeight) + loadPenalty - coherenceBonus;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Softmax with temperature for Boltzmann distribution
|
|
33
|
+
*/
|
|
34
|
+
export function softmax(energies, temperature) {
|
|
35
|
+
// Negate energies (lower energy = higher probability)
|
|
36
|
+
const negEnergies = energies.map(e => -e / temperature);
|
|
37
|
+
// Numerical stability: subtract max
|
|
38
|
+
const maxE = Math.max(...negEnergies);
|
|
39
|
+
const exps = negEnergies.map(e => Math.exp(e - maxE));
|
|
40
|
+
const sum = exps.reduce((a, b) => a + b, 0);
|
|
41
|
+
return exps.map(e => e / sum);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Sample from probability distribution
|
|
45
|
+
*/
|
|
46
|
+
export function sample(items, probabilities) {
|
|
47
|
+
const r = Math.random();
|
|
48
|
+
let cumulative = 0;
|
|
49
|
+
for (let i = 0; i < items.length; i++) {
|
|
50
|
+
cumulative += probabilities[i];
|
|
51
|
+
if (r <= cumulative) {
|
|
52
|
+
return items[i];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return items[items.length - 1];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Cosine similarity between two vectors
|
|
59
|
+
*/
|
|
60
|
+
export function cosineSimilarity(a, b) {
|
|
61
|
+
if (a.length !== b.length) {
|
|
62
|
+
throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
|
|
63
|
+
}
|
|
64
|
+
let dotProduct = 0;
|
|
65
|
+
let normA = 0;
|
|
66
|
+
let normB = 0;
|
|
67
|
+
for (let i = 0; i < a.length; i++) {
|
|
68
|
+
dotProduct += a[i] * b[i];
|
|
69
|
+
normA += a[i] * a[i];
|
|
70
|
+
normB += b[i] * b[i];
|
|
71
|
+
}
|
|
72
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
73
|
+
if (denominator === 0)
|
|
74
|
+
return 0;
|
|
75
|
+
return dotProduct / denominator;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Find nearest gravity well to an embedding
|
|
79
|
+
*/
|
|
80
|
+
export function findNearestWell(embedding, wells) {
|
|
81
|
+
if (wells.length === 0)
|
|
82
|
+
return null;
|
|
83
|
+
let nearest = null;
|
|
84
|
+
let maxSimilarity = -Infinity;
|
|
85
|
+
for (const well of wells) {
|
|
86
|
+
const similarity = cosineSimilarity(embedding, well.centroid);
|
|
87
|
+
if (similarity > maxSimilarity) {
|
|
88
|
+
maxSimilarity = similarity;
|
|
89
|
+
nearest = well;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return nearest;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Main thermodynamic router class
|
|
96
|
+
*/
|
|
97
|
+
export class ThermodynamicRouter {
|
|
98
|
+
config;
|
|
99
|
+
temperature;
|
|
100
|
+
step = 0;
|
|
101
|
+
constructor(config = {}) {
|
|
102
|
+
this.config = { ...DEFAULT_ROUTER_CONFIG, ...config };
|
|
103
|
+
this.temperature = this.config.temperature;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Route a message to the optimal agent using thermodynamic sampling
|
|
107
|
+
*/
|
|
108
|
+
route(message, agents) {
|
|
109
|
+
if (agents.length === 0) {
|
|
110
|
+
throw new Error('No agents available for routing');
|
|
111
|
+
}
|
|
112
|
+
if (agents.length === 1) {
|
|
113
|
+
return agents[0].observer;
|
|
114
|
+
}
|
|
115
|
+
const messageEmbedding = message.embedding ?? new Array(768).fill(0);
|
|
116
|
+
// Compute energies for all agents
|
|
117
|
+
const energies = agents.map(agent => computeEnergy(messageEmbedding, agent.observer, agent.load, agent.coherence, agent.attractor, this.config));
|
|
118
|
+
// Convert to probabilities via Boltzmann distribution
|
|
119
|
+
const probabilities = softmax(energies, this.temperature);
|
|
120
|
+
// Sample from distribution
|
|
121
|
+
const selectedAgent = sample(agents, probabilities);
|
|
122
|
+
// Update temperature according to annealing schedule
|
|
123
|
+
this.anneal();
|
|
124
|
+
return selectedAgent.observer;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get energy landscape for visualization
|
|
128
|
+
*/
|
|
129
|
+
energyLandscape(message, agents) {
|
|
130
|
+
const messageEmbedding = message.embedding ?? new Array(768).fill(0);
|
|
131
|
+
const energies = agents.map(agent => computeEnergy(messageEmbedding, agent.observer, agent.load, agent.coherence, agent.attractor, this.config));
|
|
132
|
+
const probabilities = softmax(energies, this.temperature);
|
|
133
|
+
const landscape = new Map();
|
|
134
|
+
for (let i = 0; i < agents.length; i++) {
|
|
135
|
+
landscape.set(agents[i].observer.id, {
|
|
136
|
+
energy: energies[i],
|
|
137
|
+
probability: probabilities[i],
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return landscape;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Apply annealing schedule
|
|
144
|
+
*/
|
|
145
|
+
anneal() {
|
|
146
|
+
this.step++;
|
|
147
|
+
switch (this.config.annealingSchedule) {
|
|
148
|
+
case 'linear':
|
|
149
|
+
this.temperature = Math.max(0.01, this.config.temperature - this.step * 0.001);
|
|
150
|
+
break;
|
|
151
|
+
case 'exponential':
|
|
152
|
+
this.temperature = this.config.temperature * Math.pow(0.999, this.step);
|
|
153
|
+
break;
|
|
154
|
+
case 'adaptive':
|
|
155
|
+
// Temperature adapts based on routing diversity
|
|
156
|
+
// (would need external coherence signal in production)
|
|
157
|
+
break;
|
|
158
|
+
case 'none':
|
|
159
|
+
default:
|
|
160
|
+
// No annealing
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Set temperature directly (for adaptive control)
|
|
166
|
+
*/
|
|
167
|
+
setTemperature(temp) {
|
|
168
|
+
this.temperature = Math.max(0.01, temp);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get current temperature
|
|
172
|
+
*/
|
|
173
|
+
getTemperature() {
|
|
174
|
+
return this.temperature;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Reset router state
|
|
178
|
+
*/
|
|
179
|
+
reset() {
|
|
180
|
+
this.step = 0;
|
|
181
|
+
this.temperature = this.config.temperature;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=thermodynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thermodynamic.js","sourceRoot":"","sources":["../../src/routing/thermodynamic.ts"],"names":[],"mappings":"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"}
|