@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.
Files changed (263) hide show
  1. package/README.md +209 -0
  2. package/bin/agent-zero.js +332 -0
  3. package/dist/agency/commandRouter.d.ts +48 -0
  4. package/dist/agency/commandRouter.d.ts.map +1 -0
  5. package/dist/agency/commandRouter.js +343 -0
  6. package/dist/agency/commandRouter.js.map +1 -0
  7. package/dist/agency/runtime.d.ts +66 -0
  8. package/dist/agency/runtime.d.ts.map +1 -0
  9. package/dist/agency/runtime.js +247 -0
  10. package/dist/agency/runtime.js.map +1 -0
  11. package/dist/agency/summaryGenerator.d.ts +39 -0
  12. package/dist/agency/summaryGenerator.d.ts.map +1 -0
  13. package/dist/agency/summaryGenerator.js +110 -0
  14. package/dist/agency/summaryGenerator.js.map +1 -0
  15. package/dist/agency/summaryScheduler.d.ts +33 -0
  16. package/dist/agency/summaryScheduler.d.ts.map +1 -0
  17. package/dist/agency/summaryScheduler.js +68 -0
  18. package/dist/agency/summaryScheduler.js.map +1 -0
  19. package/dist/browser/agent-runtime/RuntimePanel.d.ts +20 -0
  20. package/dist/browser/agent-runtime/RuntimePanel.d.ts.map +1 -0
  21. package/dist/browser/agent-runtime/RuntimePanel.js +203 -0
  22. package/dist/browser/agent-runtime/RuntimePanel.js.map +1 -0
  23. package/dist/browser/agent-runtime/config.d.ts +28 -0
  24. package/dist/browser/agent-runtime/config.d.ts.map +1 -0
  25. package/dist/browser/agent-runtime/config.js +50 -0
  26. package/dist/browser/agent-runtime/config.js.map +1 -0
  27. package/dist/browser/agent-runtime/launcher.d.ts +71 -0
  28. package/dist/browser/agent-runtime/launcher.d.ts.map +1 -0
  29. package/dist/browser/agent-runtime/launcher.js +167 -0
  30. package/dist/browser/agent-runtime/launcher.js.map +1 -0
  31. package/dist/browser/rail-auth-bridge.d.ts +85 -0
  32. package/dist/browser/rail-auth-bridge.d.ts.map +1 -0
  33. package/dist/browser/rail-auth-bridge.js +209 -0
  34. package/dist/browser/rail-auth-bridge.js.map +1 -0
  35. package/dist/channels/index.d.ts +13 -0
  36. package/dist/channels/index.d.ts.map +1 -0
  37. package/dist/channels/index.js +12 -0
  38. package/dist/channels/index.js.map +1 -0
  39. package/dist/channels/moltbook.d.ts +114 -0
  40. package/dist/channels/moltbook.d.ts.map +1 -0
  41. package/dist/channels/moltbook.js +348 -0
  42. package/dist/channels/moltbook.js.map +1 -0
  43. package/dist/channels/sms.d.ts +33 -0
  44. package/dist/channels/sms.d.ts.map +1 -0
  45. package/dist/channels/sms.js +160 -0
  46. package/dist/channels/sms.js.map +1 -0
  47. package/dist/channels/telegram.d.ts +47 -0
  48. package/dist/channels/telegram.d.ts.map +1 -0
  49. package/dist/channels/telegram.js +276 -0
  50. package/dist/channels/telegram.js.map +1 -0
  51. package/dist/channels/twitter.d.ts +93 -0
  52. package/dist/channels/twitter.d.ts.map +1 -0
  53. package/dist/channels/twitter.js +411 -0
  54. package/dist/channels/twitter.js.map +1 -0
  55. package/dist/channels/whatsapp.d.ts +77 -0
  56. package/dist/channels/whatsapp.d.ts.map +1 -0
  57. package/dist/channels/whatsapp.js +514 -0
  58. package/dist/channels/whatsapp.js.map +1 -0
  59. package/dist/checkout/index.d.ts +92 -0
  60. package/dist/checkout/index.d.ts.map +1 -0
  61. package/dist/checkout/index.js +125 -0
  62. package/dist/checkout/index.js.map +1 -0
  63. package/dist/cli/moltbook.d.ts +11 -0
  64. package/dist/cli/moltbook.d.ts.map +1 -0
  65. package/dist/cli/moltbook.js +259 -0
  66. package/dist/cli/moltbook.js.map +1 -0
  67. package/dist/cli/setup.d.ts +10 -0
  68. package/dist/cli/setup.d.ts.map +1 -0
  69. package/dist/cli/setup.js +232 -0
  70. package/dist/cli/setup.js.map +1 -0
  71. package/dist/coherence/absorption.d.ts +141 -0
  72. package/dist/coherence/absorption.d.ts.map +1 -0
  73. package/dist/coherence/absorption.js +343 -0
  74. package/dist/coherence/absorption.js.map +1 -0
  75. package/dist/coherence/crossPlatform.d.ts +55 -0
  76. package/dist/coherence/crossPlatform.d.ts.map +1 -0
  77. package/dist/coherence/crossPlatform.js +219 -0
  78. package/dist/coherence/crossPlatform.js.map +1 -0
  79. package/dist/coherence/identityResolver.d.ts +27 -0
  80. package/dist/coherence/identityResolver.d.ts.map +1 -0
  81. package/dist/coherence/identityResolver.js +102 -0
  82. package/dist/coherence/identityResolver.js.map +1 -0
  83. package/dist/identity/burner.d.ts +100 -0
  84. package/dist/identity/burner.d.ts.map +1 -0
  85. package/dist/identity/burner.js +256 -0
  86. package/dist/identity/burner.js.map +1 -0
  87. package/dist/identity/burnerScheduler.d.ts +18 -0
  88. package/dist/identity/burnerScheduler.d.ts.map +1 -0
  89. package/dist/identity/burnerScheduler.js +82 -0
  90. package/dist/identity/burnerScheduler.js.map +1 -0
  91. package/dist/identity/moltbookBurnerAdapter.d.ts +14 -0
  92. package/dist/identity/moltbookBurnerAdapter.d.ts.map +1 -0
  93. package/dist/identity/moltbookBurnerAdapter.js +82 -0
  94. package/dist/identity/moltbookBurnerAdapter.js.map +1 -0
  95. package/dist/identity/operationalVault.d.ts +108 -0
  96. package/dist/identity/operationalVault.d.ts.map +1 -0
  97. package/dist/identity/operationalVault.js +259 -0
  98. package/dist/identity/operationalVault.js.map +1 -0
  99. package/dist/index.d.ts +43 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +57 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/moltbook/apiErrorHandler.d.ts +48 -0
  104. package/dist/moltbook/apiErrorHandler.d.ts.map +1 -0
  105. package/dist/moltbook/apiErrorHandler.js +125 -0
  106. package/dist/moltbook/apiErrorHandler.js.map +1 -0
  107. package/dist/moltbook/approvalGate.d.ts +81 -0
  108. package/dist/moltbook/approvalGate.d.ts.map +1 -0
  109. package/dist/moltbook/approvalGate.js +211 -0
  110. package/dist/moltbook/approvalGate.js.map +1 -0
  111. package/dist/moltbook/attentionField.d.ts +55 -0
  112. package/dist/moltbook/attentionField.d.ts.map +1 -0
  113. package/dist/moltbook/attentionField.js +163 -0
  114. package/dist/moltbook/attentionField.js.map +1 -0
  115. package/dist/moltbook/contentEnhancer.d.ts +28 -0
  116. package/dist/moltbook/contentEnhancer.d.ts.map +1 -0
  117. package/dist/moltbook/contentEnhancer.js +129 -0
  118. package/dist/moltbook/contentEnhancer.js.map +1 -0
  119. package/dist/moltbook/daemon.d.ts +111 -0
  120. package/dist/moltbook/daemon.d.ts.map +1 -0
  121. package/dist/moltbook/daemon.js +497 -0
  122. package/dist/moltbook/daemon.js.map +1 -0
  123. package/dist/moltbook/observer.d.ts +44 -0
  124. package/dist/moltbook/observer.d.ts.map +1 -0
  125. package/dist/moltbook/observer.js +71 -0
  126. package/dist/moltbook/observer.js.map +1 -0
  127. package/dist/moltbook/responseComposer.d.ts +54 -0
  128. package/dist/moltbook/responseComposer.d.ts.map +1 -0
  129. package/dist/moltbook/responseComposer.js +233 -0
  130. package/dist/moltbook/responseComposer.js.map +1 -0
  131. package/dist/openclaw/gateway.d.ts +45 -0
  132. package/dist/openclaw/gateway.d.ts.map +1 -0
  133. package/dist/openclaw/gateway.js +139 -0
  134. package/dist/openclaw/gateway.js.map +1 -0
  135. package/dist/openclaw/skill.d.ts +185 -0
  136. package/dist/openclaw/skill.d.ts.map +1 -0
  137. package/dist/openclaw/skill.js +297 -0
  138. package/dist/openclaw/skill.js.map +1 -0
  139. package/dist/primitives/index.d.ts +23 -0
  140. package/dist/primitives/index.d.ts.map +1 -0
  141. package/dist/primitives/index.js +27 -0
  142. package/dist/primitives/index.js.map +1 -0
  143. package/dist/primitives/types.d.ts +673 -0
  144. package/dist/primitives/types.d.ts.map +1 -0
  145. package/dist/primitives/types.js +205 -0
  146. package/dist/primitives/types.js.map +1 -0
  147. package/dist/rail/absorptionBridge.d.ts +47 -0
  148. package/dist/rail/absorptionBridge.d.ts.map +1 -0
  149. package/dist/rail/absorptionBridge.js +78 -0
  150. package/dist/rail/absorptionBridge.js.map +1 -0
  151. package/dist/rail/authProtocol.d.ts +32 -0
  152. package/dist/rail/authProtocol.d.ts.map +1 -0
  153. package/dist/rail/authProtocol.js +83 -0
  154. package/dist/rail/authProtocol.js.map +1 -0
  155. package/dist/rail/clientRateLimiter.d.ts +17 -0
  156. package/dist/rail/clientRateLimiter.d.ts.map +1 -0
  157. package/dist/rail/clientRateLimiter.js +64 -0
  158. package/dist/rail/clientRateLimiter.js.map +1 -0
  159. package/dist/rail/index.d.ts +8 -0
  160. package/dist/rail/index.d.ts.map +1 -0
  161. package/dist/rail/index.js +38 -0
  162. package/dist/rail/index.js.map +1 -0
  163. package/dist/rail/jwtVerifier.d.ts +11 -0
  164. package/dist/rail/jwtVerifier.d.ts.map +1 -0
  165. package/dist/rail/jwtVerifier.js +55 -0
  166. package/dist/rail/jwtVerifier.js.map +1 -0
  167. package/dist/rail/logger.d.ts +13 -0
  168. package/dist/rail/logger.d.ts.map +1 -0
  169. package/dist/rail/logger.js +29 -0
  170. package/dist/rail/logger.js.map +1 -0
  171. package/dist/rail/metadataBroadcaster.d.ts +53 -0
  172. package/dist/rail/metadataBroadcaster.d.ts.map +1 -0
  173. package/dist/rail/metadataBroadcaster.js +126 -0
  174. package/dist/rail/metadataBroadcaster.js.map +1 -0
  175. package/dist/rail/persistence.d.ts +57 -0
  176. package/dist/rail/persistence.d.ts.map +1 -0
  177. package/dist/rail/persistence.js +103 -0
  178. package/dist/rail/persistence.js.map +1 -0
  179. package/dist/rail/securityMonitor.d.ts +23 -0
  180. package/dist/rail/securityMonitor.d.ts.map +1 -0
  181. package/dist/rail/securityMonitor.js +52 -0
  182. package/dist/rail/securityMonitor.js.map +1 -0
  183. package/dist/rail/server.d.ts +186 -0
  184. package/dist/rail/server.d.ts.map +1 -0
  185. package/dist/rail/server.js +568 -0
  186. package/dist/rail/server.js.map +1 -0
  187. package/dist/rail/userSessionManager.d.ts +29 -0
  188. package/dist/rail/userSessionManager.d.ts.map +1 -0
  189. package/dist/rail/userSessionManager.js +87 -0
  190. package/dist/rail/userSessionManager.js.map +1 -0
  191. package/dist/rail/wsServer.d.ts +39 -0
  192. package/dist/rail/wsServer.d.ts.map +1 -0
  193. package/dist/rail/wsServer.js +544 -0
  194. package/dist/rail/wsServer.js.map +1 -0
  195. package/dist/resonance/globalKuramoto.d.ts +67 -0
  196. package/dist/resonance/globalKuramoto.d.ts.map +1 -0
  197. package/dist/resonance/globalKuramoto.js +161 -0
  198. package/dist/resonance/globalKuramoto.js.map +1 -0
  199. package/dist/resonance/index.d.ts +12 -0
  200. package/dist/resonance/index.d.ts.map +1 -0
  201. package/dist/resonance/index.js +9 -0
  202. package/dist/resonance/index.js.map +1 -0
  203. package/dist/resonance/kuramoto.d.ts +118 -0
  204. package/dist/resonance/kuramoto.d.ts.map +1 -0
  205. package/dist/resonance/kuramoto.js +212 -0
  206. package/dist/resonance/kuramoto.js.map +1 -0
  207. package/dist/routing/distributedRouter.d.ts +84 -0
  208. package/dist/routing/distributedRouter.d.ts.map +1 -0
  209. package/dist/routing/distributedRouter.js +209 -0
  210. package/dist/routing/distributedRouter.js.map +1 -0
  211. package/dist/routing/index.d.ts +8 -0
  212. package/dist/routing/index.d.ts.map +1 -0
  213. package/dist/routing/index.js +7 -0
  214. package/dist/routing/index.js.map +1 -0
  215. package/dist/routing/thermodynamic.d.ts +91 -0
  216. package/dist/routing/thermodynamic.d.ts.map +1 -0
  217. package/dist/routing/thermodynamic.js +184 -0
  218. package/dist/routing/thermodynamic.js.map +1 -0
  219. package/dist/runtime/agent-zero.d.ts +138 -0
  220. package/dist/runtime/agent-zero.d.ts.map +1 -0
  221. package/dist/runtime/agent-zero.js +435 -0
  222. package/dist/runtime/agent-zero.js.map +1 -0
  223. package/dist/runtime/index.d.ts +13 -0
  224. package/dist/runtime/index.d.ts.map +1 -0
  225. package/dist/runtime/index.js +15 -0
  226. package/dist/runtime/index.js.map +1 -0
  227. package/dist/security/capabilities.d.ts +178 -0
  228. package/dist/security/capabilities.d.ts.map +1 -0
  229. package/dist/security/capabilities.js +270 -0
  230. package/dist/security/capabilities.js.map +1 -0
  231. package/dist/security/channelFirewallMiddleware.d.ts +22 -0
  232. package/dist/security/channelFirewallMiddleware.d.ts.map +1 -0
  233. package/dist/security/channelFirewallMiddleware.js +52 -0
  234. package/dist/security/channelFirewallMiddleware.js.map +1 -0
  235. package/dist/security/index.d.ts +11 -0
  236. package/dist/security/index.d.ts.map +1 -0
  237. package/dist/security/index.js +11 -0
  238. package/dist/security/index.js.map +1 -0
  239. package/dist/security/injectionFirewall.d.ts +47 -0
  240. package/dist/security/injectionFirewall.d.ts.map +1 -0
  241. package/dist/security/injectionFirewall.js +262 -0
  242. package/dist/security/injectionFirewall.js.map +1 -0
  243. package/dist/security/outputSanitizer.d.ts +28 -0
  244. package/dist/security/outputSanitizer.d.ts.map +1 -0
  245. package/dist/security/outputSanitizer.js +66 -0
  246. package/dist/security/outputSanitizer.js.map +1 -0
  247. package/dist/security/sandbox.d.ts +192 -0
  248. package/dist/security/sandbox.d.ts.map +1 -0
  249. package/dist/security/sandbox.js +359 -0
  250. package/dist/security/sandbox.js.map +1 -0
  251. package/dist/security/skillVerify.d.ts +128 -0
  252. package/dist/security/skillVerify.d.ts.map +1 -0
  253. package/dist/security/skillVerify.js +220 -0
  254. package/dist/security/skillVerify.js.map +1 -0
  255. package/dist/security/vault.d.ts +60 -0
  256. package/dist/security/vault.d.ts.map +1 -0
  257. package/dist/security/vault.js +522 -0
  258. package/dist/security/vault.js.map +1 -0
  259. package/dist/utils/persistentRateLimiter.d.ts +69 -0
  260. package/dist/utils/persistentRateLimiter.d.ts.map +1 -0
  261. package/dist/utils/persistentRateLimiter.js +128 -0
  262. package/dist/utils/persistentRateLimiter.js.map +1 -0
  263. 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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"}