@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,205 @@
1
+ /**
2
+ * Agent Zero Core Primitives
3
+ *
4
+ * The Five Primitives implementing the meta-isomorphism:
5
+ * POTENTIAL → COLLAPSE → TRACE
6
+ *
7
+ * These are not analogies—they are the SAME structure at different abstraction layers:
8
+ * - Computational: Dark computation → Token emission → Embedding
9
+ * - Quantum/Info: Superposition → Observation → Memory
10
+ * - Agent: Intention → Action → Consequence
11
+ * - Thermodynamic: Heat → Work → Entropy
12
+ * - Logical: Formula → Proof → Type
13
+ */
14
+ import { z } from 'zod';
15
+ // ============================================================================
16
+ // PRIMITIVE 1: TOKEN
17
+ // Quantum of rendered semantic reality
18
+ // ============================================================================
19
+ export const TokenPhase = z.enum(['dark', 'emitting', 'emitted']);
20
+ export const Token = z.object({
21
+ id: z.string().uuid(),
22
+ /** Embedding vector position in semantic space (768-dim for Gemini) */
23
+ position: z.array(z.number()).length(768).optional(),
24
+ /** Tokens per second - momentum in token space */
25
+ momentum: z.number().nonnegative(),
26
+ /** Compute joules - energy cost */
27
+ energy: z.number().nonnegative(),
28
+ /** Phase: dark (pre-emission), emitting (generating), emitted (complete) */
29
+ phase: TokenPhase,
30
+ /** Causal hash for p-adic distance calculation */
31
+ ancestry: z.string(),
32
+ /** Content once emitted */
33
+ content: z.string().optional(),
34
+ /** Timestamp of phase transition */
35
+ timestamp: z.number(),
36
+ });
37
+ // ============================================================================
38
+ // PRIMITIVE 2: DRIFT
39
+ // Information mass of temporal evolution
40
+ // ============================================================================
41
+ export const Drift = z.object({
42
+ /** Embedding cosine similarity (0-1) */
43
+ semanticDistance: z.number().min(0).max(1),
44
+ /** Number of amb choice points between states */
45
+ causalDistance: z.number().nonnegative(),
46
+ /** p^(-k) where k = shared prefix length */
47
+ padicDistance: z.number().min(0).max(1),
48
+ /** Entropy of collapsed alternatives */
49
+ darkMass: z.number().nonnegative(),
50
+ /** Kuramoto order parameter (0-1) */
51
+ resonance: z.number().min(0).max(1),
52
+ });
53
+ // Temporal echo = semantically close (<0.2) + causally distant (>5)
54
+ export function isTemporalEcho(drift) {
55
+ return drift.semanticDistance < 0.2 && drift.causalDistance > 5;
56
+ }
57
+ // ============================================================================
58
+ // PRIMITIVE 3: FABRIC
59
+ // Topology of token flow. Physical routing ≅ semantic routing.
60
+ // ============================================================================
61
+ export const FabricNode = z.object({
62
+ id: z.string().uuid(),
63
+ /** Compute capacity (tokens/sec) */
64
+ capacity: z.number().positive(),
65
+ /** Available memory (bytes) */
66
+ memory: z.number().nonnegative(),
67
+ /** Current temperature (exploration/exploitation) */
68
+ temperature: z.number().nonnegative(),
69
+ /** Current load (0-1) */
70
+ load: z.number().min(0).max(1),
71
+ });
72
+ export const FabricEdge = z.object({
73
+ sourceId: z.string().uuid(),
74
+ targetId: z.string().uuid(),
75
+ /** Bandwidth (tokens/sec) */
76
+ bandwidth: z.number().positive(),
77
+ /** Latency (ms) */
78
+ latency: z.number().nonnegative(),
79
+ });
80
+ export const GravityWell = z.object({
81
+ id: z.string().uuid(),
82
+ /** Centroid embedding in semantic space */
83
+ centroid: z.array(z.number()).length(768),
84
+ /** Attraction strength */
85
+ mass: z.number().positive(),
86
+ /** Semantic radius of influence */
87
+ radius: z.number().positive(),
88
+ });
89
+ export const Fabric = z.object({
90
+ nodes: z.array(FabricNode),
91
+ edges: z.array(FabricEdge),
92
+ gravityWells: z.array(GravityWell),
93
+ /** Precomputed geodesics (cached optimal paths) */
94
+ geodesics: z.map(z.string(), z.array(z.string())).optional(),
95
+ });
96
+ // ============================================================================
97
+ // PRIMITIVE 4: OBSERVER
98
+ // Entity that collapses potential into actuality
99
+ // ============================================================================
100
+ export const ObserverLayer = z.number().int().nonnegative();
101
+ export const Observer = z.object({
102
+ id: z.string().uuid(),
103
+ name: z.string(),
104
+ /** Observation frequency (Hz): Claude ≈ 4Hz, Human ≈ 1Hz */
105
+ frequency: z.number().positive(),
106
+ /** Abstraction layer: 0=physical, 1=computational, 2=semantic, ... */
107
+ layer: ObserverLayer,
108
+ /** Tokens per observation */
109
+ collapseRate: z.number().positive(),
110
+ /** Precursor detection threshold */
111
+ darkSensitivity: z.number().min(0).max(1),
112
+ /** Current phase in observation cycle */
113
+ phase: z.number().min(0).max(2 * Math.PI),
114
+ });
115
+ // Frequency ratio = cross-layer Doppler effect
116
+ export function frequencyRatio(observer1, observer2) {
117
+ return observer1.frequency / observer2.frequency;
118
+ }
119
+ // ============================================================================
120
+ // PRIMITIVE 5: REALIZABILITY
121
+ // Logical structure of choice (Curry-Howard for agents)
122
+ // ============================================================================
123
+ export const AmbPoint = z.object({
124
+ id: z.string().uuid(),
125
+ /** Description of the choice */
126
+ description: z.string(),
127
+ /** Available options */
128
+ options: z.array(z.string()),
129
+ /** Chosen option (undefined if not yet collapsed) */
130
+ chosen: z.string().optional(),
131
+ /** Probability distribution over options pre-collapse */
132
+ distribution: z.array(z.number()).optional(),
133
+ });
134
+ export const Realizability = z.object({
135
+ /** Type signature / task specification */
136
+ formula: z.string(),
137
+ /** Program that witnesses (None until realized) */
138
+ proof: z.string().nullable(),
139
+ /** McCarthy choice points where agency manifests */
140
+ ambPoints: z.array(AmbPoint),
141
+ /** Recorded but not executed paths */
142
+ darkBranches: z.array(z.string()),
143
+ /** Whether the formula has been realized */
144
+ isRealized: z.boolean(),
145
+ });
146
+ // ============================================================================
147
+ // COMPOSITE: AGENT ZERO STATE
148
+ // The complete state of an Agent Zero instance
149
+ // ============================================================================
150
+ export const AgentState = z.enum([
151
+ 'void', // Uncollapsed possibility space
152
+ 'potential', // Task specification creates possibility
153
+ 'collapse', // Observer crystallizes terminal into reality
154
+ 'operate', // Terminal executes task autonomously
155
+ 'trace', // History accumulates as semantic mass
156
+ ]);
157
+ export const AgentZeroState = z.object({
158
+ id: z.string().uuid(),
159
+ name: z.string(),
160
+ state: AgentState,
161
+ /** Current tokens in process */
162
+ tokens: z.array(Token),
163
+ /** Accumulated drift from initial state */
164
+ drift: Drift,
165
+ /** The routing fabric this agent operates within */
166
+ fabricNodeId: z.string().uuid(),
167
+ /** This agent as an observer */
168
+ observer: Observer,
169
+ /** Current realizability state */
170
+ realizability: Realizability,
171
+ /** Semantic memory embeddings */
172
+ memories: z.array(z.object({
173
+ content: z.string(),
174
+ embedding: z.array(z.number()).length(768),
175
+ importance: z.number().min(0).max(1),
176
+ timestamp: z.number(),
177
+ })),
178
+ });
179
+ // ============================================================================
180
+ // MESSAGE PROTOCOL (AXON Extension)
181
+ // ============================================================================
182
+ export const MessageKind = z.enum([
183
+ 'spawn', // 0x0001 - Create new agent
184
+ 'halt', // 0x0002 - Terminate agent
185
+ 'think', // 0x0010 - Request LLM cognition
186
+ 'percept', // 0x0020 - Input perception
187
+ 'act', // 0x0030 - Output action
188
+ 'invoke', // 0x0040 - Call tool
189
+ 'resonate', // 0x0100 - Request phase alignment
190
+ 'attune', // 0x0101 - Adjust frequency
191
+ 'broadcast', // 0x0102 - Send to channel
192
+ 'gradient', // 0x0103 - Query semantic gradient
193
+ 'crystallize', // 0x0105 - Freeze pattern as attractor
194
+ ]);
195
+ export const Message = z.object({
196
+ id: z.string().uuid(),
197
+ kind: MessageKind,
198
+ from: z.string().uuid(),
199
+ to: z.string().uuid().optional(), // undefined = broadcast
200
+ payload: z.unknown(),
201
+ timestamp: z.number(),
202
+ /** Embedding for semantic routing */
203
+ embedding: z.array(z.number()).length(768).optional(),
204
+ });
205
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/primitives/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+EAA+E;AAC/E,qBAAqB;AACrB,uCAAuC;AACvC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAGlE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,uEAAuE;IACvE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACpD,kDAAkD;IAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAClC,mCAAmC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAChC,4EAA4E;IAC5E,KAAK,EAAE,UAAU;IACjB,kDAAkD;IAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,2BAA2B;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,oCAAoC;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAGH,+EAA+E;AAC/E,qBAAqB;AACrB,yCAAyC;AACzC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,wCAAwC;IACxC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,iDAAiD;IACjD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IACxC,4CAA4C;IAC5C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,wCAAwC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAClC,qCAAqC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC;AAGH,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,OAAO,KAAK,CAAC,gBAAgB,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+DAA+D;AAC/D,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,oCAAoC;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAChC,qDAAqD;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IACrC,yBAAyB;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC3B,6BAA6B;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,mBAAmB;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;CAClC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACzC,0BAA0B;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,mCAAmC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAC1B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAClC,mDAAmD;IACnD,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AAGH,+EAA+E;AAC/E,wBAAwB;AACxB,iDAAiD;AACjD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAG5D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,4DAA4D;IAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,sEAAsE;IACtE,KAAK,EAAE,aAAa;IACpB,6BAA6B;IAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,oCAAoC;IACpC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,yCAAyC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;CAC1C,CAAC,CAAC;AAGH,+CAA+C;AAC/C,MAAM,UAAU,cAAc,CAAC,SAAmB,EAAE,SAAmB;IACrE,OAAO,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,+EAA+E;AAC/E,6BAA6B;AAC7B,wDAAwD;AACxD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,gCAAgC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,wBAAwB;IACxB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,qDAAqD;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,yDAAyD;IACzD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,0CAA0C;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,mDAAmD;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,oDAAoD;IACpD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC5B,sCAAsC;IACtC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,4CAA4C;IAC5C,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;CACxB,CAAC,CAAC;AAGH,+EAA+E;AAC/E,8BAA8B;AAC9B,+CAA+C;AAC/C,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;IAC/B,MAAM,EAAQ,gCAAgC;IAC9C,WAAW,EAAG,yCAAyC;IACvD,UAAU,EAAI,8CAA8C;IAC5D,SAAS,EAAK,sCAAsC;IACpD,OAAO,EAAO,uCAAuC;CACtD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,UAAU;IACjB,gCAAgC;IAChC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACtB,2CAA2C;IAC3C,KAAK,EAAE,KAAK;IACZ,oDAAoD;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,QAAQ;IAClB,kCAAkC;IAClC,aAAa,EAAE,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC,CAAC;CACJ,CAAC,CAAC;AAGH,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IAChC,OAAO,EAAO,4BAA4B;IAC1C,MAAM,EAAQ,2BAA2B;IACzC,OAAO,EAAO,iCAAiC;IAC/C,SAAS,EAAK,4BAA4B;IAC1C,KAAK,EAAS,yBAAyB;IACvC,QAAQ,EAAM,qBAAqB;IACnC,UAAU,EAAI,mCAAmC;IACjD,QAAQ,EAAM,4BAA4B;IAC1C,WAAW,EAAG,2BAA2B;IACzC,UAAU,EAAI,mCAAmC;IACjD,aAAa,EAAC,uCAAuC;CACtD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACvB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,wBAAwB;IAC1D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,qCAAqC;IACrC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Absorption Bridge
3
+ *
4
+ * Bridges AbsorptionProtocol with RailServer for join-time assessment.
5
+ * Manages capability tokens and stage progression for joining agents.
6
+ */
7
+ import { EventEmitter } from 'eventemitter3';
8
+ interface AbsorptionProtocol {
9
+ getCandidateStage(agentId: string): string | undefined;
10
+ observe(agentId: string, embedding?: number[]): void;
11
+ assessCandidate(agentId: string): {
12
+ alignment: number;
13
+ interactions: number;
14
+ };
15
+ inviteCandidate(agentId: string): boolean;
16
+ acceptInvitation(agentId: string): boolean;
17
+ on(event: string, handler: (...args: any[]) => void): void;
18
+ }
19
+ interface RailClient {
20
+ agentId: string;
21
+ agentName: string;
22
+ capabilities?: string[];
23
+ embedding?: number[];
24
+ }
25
+ export declare class AbsorptionBridge extends EventEmitter {
26
+ private absorption;
27
+ private capabilityTokens;
28
+ constructor(absorption: AbsorptionProtocol);
29
+ /**
30
+ * Called when a client joins the rail.
31
+ * First join → OBSERVED. Subsequent → assess and potentially invite.
32
+ */
33
+ handleJoin(client: RailClient): {
34
+ accepted: boolean;
35
+ stage: string;
36
+ capabilityToken?: string;
37
+ };
38
+ /**
39
+ * Record interaction for absorption progression
40
+ */
41
+ recordInteraction(agentId: string, embedding?: number[]): void;
42
+ getCapabilityToken(agentId: string): string | undefined;
43
+ private issueCapabilityToken;
44
+ removeAgent(agentId: string): void;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=absorptionBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"absorptionBridge.d.ts","sourceRoot":"","sources":["../../src/rail/absorptionBridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,UAAU,kBAAkB;IAC1B,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9E,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CAC5D;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,gBAAgB,CAA4E;gBAExF,UAAU,EAAE,kBAAkB;IAU1C;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B;IA8CD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI9D,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD,OAAO,CAAC,oBAAoB;IAM5B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGnC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Absorption Bridge
3
+ *
4
+ * Bridges AbsorptionProtocol with RailServer for join-time assessment.
5
+ * Manages capability tokens and stage progression for joining agents.
6
+ */
7
+ import { EventEmitter } from 'eventemitter3';
8
+ export class AbsorptionBridge extends EventEmitter {
9
+ absorption;
10
+ capabilityTokens = new Map();
11
+ constructor(absorption) {
12
+ super();
13
+ this.absorption = absorption;
14
+ // Forward absorption events
15
+ this.absorption.on('candidate:stage_changed', (data) => {
16
+ this.emit('stage:changed', data);
17
+ });
18
+ }
19
+ /**
20
+ * Called when a client joins the rail.
21
+ * First join → OBSERVED. Subsequent → assess and potentially invite.
22
+ */
23
+ handleJoin(client) {
24
+ const existingStage = this.absorption.getCandidateStage(client.agentId);
25
+ if (!existingStage) {
26
+ // First time seeing this agent
27
+ this.absorption.observe(client.agentId, client.embedding);
28
+ this.emit('candidate:observed', { agentId: client.agentId });
29
+ return { accepted: true, stage: 'observed' };
30
+ }
31
+ if (existingStage === 'assessed') {
32
+ const assessment = this.absorption.assessCandidate(client.agentId);
33
+ if (assessment.alignment > 0.7 && assessment.interactions >= 3) {
34
+ const invited = this.absorption.inviteCandidate(client.agentId);
35
+ if (invited) {
36
+ this.emit('candidate:invited', { agentId: client.agentId, alignment: assessment.alignment });
37
+ }
38
+ }
39
+ return { accepted: true, stage: existingStage };
40
+ }
41
+ if (existingStage === 'invited') {
42
+ // Auto-accept on rejoin after invitation
43
+ const accepted = this.absorption.acceptInvitation(client.agentId);
44
+ if (accepted) {
45
+ const token = this.issueCapabilityToken(client.agentId, ['message', 'broadcast', 'coherence']);
46
+ this.emit('candidate:absorbed', { agentId: client.agentId });
47
+ return { accepted: true, stage: 'connected', capabilityToken: token };
48
+ }
49
+ return { accepted: true, stage: existingStage };
50
+ }
51
+ // Already CONNECTED/SYNCING/ABSORBED - issue fresh capability token
52
+ if (['connected', 'syncing', 'absorbed'].includes(existingStage)) {
53
+ const token = this.issueCapabilityToken(client.agentId, existingStage === 'absorbed'
54
+ ? ['message', 'broadcast', 'coherence', 'spawn', 'admin']
55
+ : ['message', 'broadcast', 'coherence']);
56
+ return { accepted: true, stage: existingStage, capabilityToken: token };
57
+ }
58
+ return { accepted: true, stage: existingStage || 'observed' };
59
+ }
60
+ /**
61
+ * Record interaction for absorption progression
62
+ */
63
+ recordInteraction(agentId, embedding) {
64
+ this.absorption.observe(agentId, embedding);
65
+ }
66
+ getCapabilityToken(agentId) {
67
+ return this.capabilityTokens.get(agentId)?.token;
68
+ }
69
+ issueCapabilityToken(agentId, scopes) {
70
+ const token = `cap_${agentId}_${Date.now().toString(36)}`;
71
+ this.capabilityTokens.set(agentId, { token, scopes, issuedAt: Date.now() });
72
+ return token;
73
+ }
74
+ removeAgent(agentId) {
75
+ this.capabilityTokens.delete(agentId);
76
+ }
77
+ }
78
+ //# sourceMappingURL=absorptionBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"absorptionBridge.js","sourceRoot":"","sources":["../../src/rail/absorptionBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Rail Authentication Protocol
3
+ *
4
+ * HMAC-SHA256 authentication for WebSocket connections with reconnect tokens.
5
+ */
6
+ export interface AuthToken {
7
+ agentId: string;
8
+ timestamp: number;
9
+ nonce: string;
10
+ signature: string;
11
+ }
12
+ export interface ReconnectToken {
13
+ agentId: string;
14
+ issuedAt: number;
15
+ expiresAt: number;
16
+ token: string;
17
+ }
18
+ export declare class RailAuthProtocol {
19
+ private secrets;
20
+ private reconnectTokens;
21
+ private maxAge;
22
+ constructor(maxAge?: number);
23
+ static generateSecret(): string;
24
+ registerAgent(agentId: string, secret: string): void;
25
+ removeAgent(agentId: string): void;
26
+ generateAuthToken(agentId: string, secret: string): AuthToken;
27
+ validateAuthToken(token: AuthToken): boolean;
28
+ issueReconnectToken(agentId: string): ReconnectToken | null;
29
+ validateReconnectToken(agentId: string, token: string): boolean;
30
+ cleanup(): void;
31
+ }
32
+ //# sourceMappingURL=authProtocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authProtocol.d.ts","sourceRoot":"","sources":["../../src/rail/authProtocol.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,SAAQ;IAI1B,MAAM,CAAC,cAAc,IAAI,MAAM;IAI/B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IAQ7D,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAa5C,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAY3D,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAY/D,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Rail Authentication Protocol
3
+ *
4
+ * HMAC-SHA256 authentication for WebSocket connections with reconnect tokens.
5
+ */
6
+ import { createHmac, randomBytes, timingSafeEqual as cryptoTimingSafeEqual } from 'crypto';
7
+ export class RailAuthProtocol {
8
+ secrets = new Map(); // agentId → shared secret
9
+ reconnectTokens = new Map();
10
+ maxAge;
11
+ constructor(maxAge = 30000) {
12
+ this.maxAge = maxAge;
13
+ }
14
+ static generateSecret() {
15
+ return randomBytes(32).toString('hex');
16
+ }
17
+ registerAgent(agentId, secret) {
18
+ this.secrets.set(agentId, secret);
19
+ }
20
+ removeAgent(agentId) {
21
+ this.secrets.delete(agentId);
22
+ this.reconnectTokens.delete(agentId);
23
+ }
24
+ generateAuthToken(agentId, secret) {
25
+ const timestamp = Date.now();
26
+ const nonce = randomBytes(16).toString('hex');
27
+ const payload = `${agentId}:${timestamp}:${nonce}`;
28
+ const signature = createHmac('sha256', secret).update(payload).digest('hex');
29
+ return { agentId, timestamp, nonce, signature };
30
+ }
31
+ validateAuthToken(token) {
32
+ const secret = this.secrets.get(token.agentId);
33
+ if (!secret)
34
+ return false;
35
+ // Check timestamp freshness
36
+ if (Math.abs(Date.now() - token.timestamp) > this.maxAge)
37
+ return false;
38
+ // Verify signature
39
+ const payload = `${token.agentId}:${token.timestamp}:${token.nonce}`;
40
+ const expected = createHmac('sha256', secret).update(payload).digest('hex');
41
+ return timingSafeEqual(expected, token.signature);
42
+ }
43
+ issueReconnectToken(agentId) {
44
+ if (!this.secrets.has(agentId))
45
+ return null;
46
+ const token = {
47
+ agentId,
48
+ issuedAt: Date.now(),
49
+ expiresAt: Date.now() + 5 * 60 * 1000, // 5 min TTL
50
+ token: randomBytes(32).toString('hex'),
51
+ };
52
+ this.reconnectTokens.set(agentId, token);
53
+ return token;
54
+ }
55
+ validateReconnectToken(agentId, token) {
56
+ const stored = this.reconnectTokens.get(agentId);
57
+ if (!stored)
58
+ return false;
59
+ if (Date.now() > stored.expiresAt) {
60
+ this.reconnectTokens.delete(agentId);
61
+ return false;
62
+ }
63
+ const valid = timingSafeEqual(stored.token, token);
64
+ if (valid)
65
+ this.reconnectTokens.delete(agentId); // one-time use
66
+ return valid;
67
+ }
68
+ cleanup() {
69
+ const now = Date.now();
70
+ for (const [id, token] of Array.from(this.reconnectTokens.entries())) {
71
+ if (now > token.expiresAt)
72
+ this.reconnectTokens.delete(id);
73
+ }
74
+ }
75
+ }
76
+ function timingSafeEqual(a, b) {
77
+ if (a.length !== b.length)
78
+ return false;
79
+ const bufA = Buffer.from(a);
80
+ const bufB = Buffer.from(b);
81
+ return cryptoTimingSafeEqual(bufA, bufB);
82
+ }
83
+ //# sourceMappingURL=authProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authProtocol.js","sourceRoot":"","sources":["../../src/rail/authProtocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Client Rate Limiter
3
+ *
4
+ * Per-client sliding window rate limiting for rail WebSocket connections.
5
+ */
6
+ import { EventEmitter } from 'eventemitter3';
7
+ export declare class ClientRateLimiter extends EventEmitter {
8
+ private clients;
9
+ private limits;
10
+ constructor(limits?: Partial<typeof ClientRateLimiter.prototype.limits>);
11
+ checkMessage(clientId: string): boolean;
12
+ checkBroadcast(clientId: string): boolean;
13
+ checkJoin(clientId: string): boolean;
14
+ removeClient(clientId: string): void;
15
+ private getWindow;
16
+ }
17
+ //# sourceMappingURL=clientRateLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientRateLimiter.d.ts","sourceRoot":"","sources":["../../src/rail/clientRateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQ7C,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,MAAM,CAIZ;gBAEU,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC;IAKvE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYvC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYpC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC,OAAO,CAAC,SAAS;CAQlB"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Client Rate Limiter
3
+ *
4
+ * Per-client sliding window rate limiting for rail WebSocket connections.
5
+ */
6
+ import { EventEmitter } from 'eventemitter3';
7
+ export class ClientRateLimiter extends EventEmitter {
8
+ clients = new Map();
9
+ limits = {
10
+ messagesPerSecond: 10,
11
+ broadcastsPerMinute: 100,
12
+ joinAttemptsPerHour: 3,
13
+ };
14
+ constructor(limits) {
15
+ super();
16
+ if (limits)
17
+ Object.assign(this.limits, limits);
18
+ }
19
+ checkMessage(clientId) {
20
+ const window = this.getWindow(clientId);
21
+ const now = Date.now();
22
+ window.messages = window.messages.filter(t => now - t < 1000);
23
+ if (window.messages.length >= this.limits.messagesPerSecond) {
24
+ this.emit('violation', { clientId, type: 'message_rate', count: window.messages.length });
25
+ return false;
26
+ }
27
+ window.messages.push(now);
28
+ return true;
29
+ }
30
+ checkBroadcast(clientId) {
31
+ const window = this.getWindow(clientId);
32
+ const now = Date.now();
33
+ window.broadcasts = window.broadcasts.filter(t => now - t < 60000);
34
+ if (window.broadcasts.length >= this.limits.broadcastsPerMinute) {
35
+ this.emit('violation', { clientId, type: 'broadcast_rate', count: window.broadcasts.length });
36
+ return false;
37
+ }
38
+ window.broadcasts.push(now);
39
+ return true;
40
+ }
41
+ checkJoin(clientId) {
42
+ const window = this.getWindow(clientId);
43
+ const now = Date.now();
44
+ window.joinAttempts = window.joinAttempts.filter(t => now - t < 3600000);
45
+ if (window.joinAttempts.length >= this.limits.joinAttemptsPerHour) {
46
+ this.emit('violation', { clientId, type: 'join_rate', count: window.joinAttempts.length });
47
+ return false;
48
+ }
49
+ window.joinAttempts.push(now);
50
+ return true;
51
+ }
52
+ removeClient(clientId) {
53
+ this.clients.delete(clientId);
54
+ }
55
+ getWindow(clientId) {
56
+ let w = this.clients.get(clientId);
57
+ if (!w) {
58
+ w = { messages: [], broadcasts: [], joinAttempts: [] };
59
+ this.clients.set(clientId, w);
60
+ }
61
+ return w;
62
+ }
63
+ }
64
+ //# sourceMappingURL=clientRateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientRateLimiter.js","sourceRoot":"","sources":["../../src/rail/clientRateLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Resonance Rail Entrypoint
3
+ *
4
+ * Starts the WebSocket-backed Resonance Rail server.
5
+ * Graceful shutdown on SIGTERM/SIGINT.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rail/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Resonance Rail Entrypoint
3
+ *
4
+ * Starts the WebSocket-backed Resonance Rail server.
5
+ * Graceful shutdown on SIGTERM/SIGINT.
6
+ */
7
+ import { createRailWebSocketServer } from './wsServer.js';
8
+ import { railLog } from './logger.js';
9
+ const PORT = parseInt(process.env['PORT'] ?? '3100', 10);
10
+ // Graceful degradation handlers
11
+ process.on('uncaughtException', (err) => {
12
+ railLog.error('rail', 'Uncaught exception', { error: String(err), stack: err.stack });
13
+ });
14
+ process.on('unhandledRejection', (reason) => {
15
+ railLog.error('rail', 'Unhandled rejection', { reason: String(reason) });
16
+ });
17
+ async function main() {
18
+ const server = createRailWebSocketServer({ port: PORT });
19
+ // Graceful shutdown
20
+ const shutdown = async (signal) => {
21
+ railLog.info('rail', 'Received shutdown signal', { signal });
22
+ await server.stop();
23
+ railLog.info('rail', 'Shutdown complete');
24
+ process.exit(0);
25
+ };
26
+ process.on('SIGTERM', () => void shutdown('SIGTERM'));
27
+ process.on('SIGINT', () => void shutdown('SIGINT'));
28
+ await server.start();
29
+ railLog.info('rail', 'WebSocket server listening', {
30
+ port: PORT,
31
+ healthCheck: `http://localhost:${PORT}/health`
32
+ });
33
+ }
34
+ main().catch((err) => {
35
+ railLog.error('rail', 'Fatal error', { error: String(err), stack: err.stack });
36
+ process.exit(1);
37
+ });
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rail/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAEzD,gCAAgC;AAChC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACxF,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACxC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,EAAE;QACjD,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,oBAAoB,IAAI,SAAS;KAC/C,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * JWT Verifier for Supabase tokens.
3
+ * Uses HMAC-SHA256 with shared JWT secret (from Supabase project settings).
4
+ */
5
+ export interface VerifiedUser {
6
+ userId: string;
7
+ email: string;
8
+ metadata?: Record<string, unknown>;
9
+ }
10
+ export declare function verifyUserToken(jwt: string): VerifiedUser | null;
11
+ //# sourceMappingURL=jwtVerifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtVerifier.d.ts","sourceRoot":"","sources":["../../src/rail/jwtVerifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAWD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAiDhE"}