agent-nuvira 1.14.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 (379) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +891 -0
  3. package/dist/agent-sdk/src/agent.d.ts +118 -0
  4. package/dist/agent-sdk/src/agent.d.ts.map +1 -0
  5. package/dist/agent-sdk/src/agent.js +88 -0
  6. package/dist/agent-sdk/src/agent.js.map +1 -0
  7. package/dist/agent-sdk/src/index.d.ts +33 -0
  8. package/dist/agent-sdk/src/index.d.ts.map +1 -0
  9. package/dist/agent-sdk/src/index.js +32 -0
  10. package/dist/agent-sdk/src/index.js.map +1 -0
  11. package/dist/agent-sdk/src/register.d.ts +70 -0
  12. package/dist/agent-sdk/src/register.d.ts.map +1 -0
  13. package/dist/agent-sdk/src/register.js +181 -0
  14. package/dist/agent-sdk/src/register.js.map +1 -0
  15. package/dist/agent-sdk/src/scaffold.d.ts +50 -0
  16. package/dist/agent-sdk/src/scaffold.d.ts.map +1 -0
  17. package/dist/agent-sdk/src/scaffold.js +291 -0
  18. package/dist/agent-sdk/src/scaffold.js.map +1 -0
  19. package/dist/agent-sdk/src/testing.d.ts +187 -0
  20. package/dist/agent-sdk/src/testing.d.ts.map +1 -0
  21. package/dist/agent-sdk/src/testing.js +243 -0
  22. package/dist/agent-sdk/src/testing.js.map +1 -0
  23. package/dist/agent-sdk/src/types.d.ts +202 -0
  24. package/dist/agent-sdk/src/types.d.ts.map +1 -0
  25. package/dist/agent-sdk/src/types.js +11 -0
  26. package/dist/agent-sdk/src/types.js.map +1 -0
  27. package/dist/agents/agent.d.ts +132 -0
  28. package/dist/agents/agent.d.ts.map +1 -0
  29. package/dist/agents/agent.js +19 -0
  30. package/dist/agents/agent.js.map +1 -0
  31. package/dist/agents/agents/context-gatherer.d.ts +42 -0
  32. package/dist/agents/agents/context-gatherer.d.ts.map +1 -0
  33. package/dist/agents/agents/context-gatherer.js +366 -0
  34. package/dist/agents/agents/context-gatherer.js.map +1 -0
  35. package/dist/agents/agents/debugger.d.ts +58 -0
  36. package/dist/agents/agents/debugger.d.ts.map +1 -0
  37. package/dist/agents/agents/debugger.js +257 -0
  38. package/dist/agents/agents/debugger.js.map +1 -0
  39. package/dist/agents/agents/git-agent.d.ts +34 -0
  40. package/dist/agents/agents/git-agent.d.ts.map +1 -0
  41. package/dist/agents/agents/git-agent.js +200 -0
  42. package/dist/agents/agents/git-agent.js.map +1 -0
  43. package/dist/agents/agents/github-release-agent.d.ts +65 -0
  44. package/dist/agents/agents/github-release-agent.d.ts.map +1 -0
  45. package/dist/agents/agents/github-release-agent.js +439 -0
  46. package/dist/agents/agents/github-release-agent.js.map +1 -0
  47. package/dist/agents/agents/package-agent.d.ts +33 -0
  48. package/dist/agents/agents/package-agent.d.ts.map +1 -0
  49. package/dist/agents/agents/package-agent.js +233 -0
  50. package/dist/agents/agents/package-agent.js.map +1 -0
  51. package/dist/agents/agents/planner.d.ts +26 -0
  52. package/dist/agents/agents/planner.d.ts.map +1 -0
  53. package/dist/agents/agents/planner.js +222 -0
  54. package/dist/agents/agents/planner.js.map +1 -0
  55. package/dist/agents/agents/reviewer.d.ts +34 -0
  56. package/dist/agents/agents/reviewer.d.ts.map +1 -0
  57. package/dist/agents/agents/reviewer.js +159 -0
  58. package/dist/agents/agents/reviewer.js.map +1 -0
  59. package/dist/agents/agents/runner.d.ts +73 -0
  60. package/dist/agents/agents/runner.d.ts.map +1 -0
  61. package/dist/agents/agents/runner.js +299 -0
  62. package/dist/agents/agents/runner.js.map +1 -0
  63. package/dist/agents/agents/security-agent.d.ts +33 -0
  64. package/dist/agents/agents/security-agent.d.ts.map +1 -0
  65. package/dist/agents/agents/security-agent.js +184 -0
  66. package/dist/agents/agents/security-agent.js.map +1 -0
  67. package/dist/agents/agents/tester.d.ts +96 -0
  68. package/dist/agents/agents/tester.d.ts.map +1 -0
  69. package/dist/agents/agents/tester.js +410 -0
  70. package/dist/agents/agents/tester.js.map +1 -0
  71. package/dist/agents/agents/writer.d.ts +51 -0
  72. package/dist/agents/agents/writer.d.ts.map +1 -0
  73. package/dist/agents/agents/writer.js +384 -0
  74. package/dist/agents/agents/writer.js.map +1 -0
  75. package/dist/agents/context-vault.d.ts +49 -0
  76. package/dist/agents/context-vault.d.ts.map +1 -0
  77. package/dist/agents/context-vault.js +134 -0
  78. package/dist/agents/context-vault.js.map +1 -0
  79. package/dist/agents/orchestrator.d.ts +97 -0
  80. package/dist/agents/orchestrator.d.ts.map +1 -0
  81. package/dist/agents/orchestrator.js +696 -0
  82. package/dist/agents/orchestrator.js.map +1 -0
  83. package/dist/agents/utils/file-tree.d.ts +28 -0
  84. package/dist/agents/utils/file-tree.d.ts.map +1 -0
  85. package/dist/agents/utils/file-tree.js +93 -0
  86. package/dist/agents/utils/file-tree.js.map +1 -0
  87. package/dist/cli/agent.d.ts +25 -0
  88. package/dist/cli/agent.d.ts.map +1 -0
  89. package/dist/cli/agent.js +374 -0
  90. package/dist/cli/agent.js.map +1 -0
  91. package/dist/cli/benchmark.d.ts +24 -0
  92. package/dist/cli/benchmark.d.ts.map +1 -0
  93. package/dist/cli/benchmark.js +235 -0
  94. package/dist/cli/benchmark.js.map +1 -0
  95. package/dist/cli/cache.d.ts +12 -0
  96. package/dist/cli/cache.d.ts.map +1 -0
  97. package/dist/cli/cache.js +58 -0
  98. package/dist/cli/cache.js.map +1 -0
  99. package/dist/cli/chat.d.ts +37 -0
  100. package/dist/cli/chat.d.ts.map +1 -0
  101. package/dist/cli/chat.js +393 -0
  102. package/dist/cli/chat.js.map +1 -0
  103. package/dist/cli/commands.d.ts +24 -0
  104. package/dist/cli/commands.d.ts.map +1 -0
  105. package/dist/cli/commands.js +18 -0
  106. package/dist/cli/commands.js.map +1 -0
  107. package/dist/cli/config.d.ts +19 -0
  108. package/dist/cli/config.d.ts.map +1 -0
  109. package/dist/cli/config.js +162 -0
  110. package/dist/cli/config.js.map +1 -0
  111. package/dist/cli/dashboard.d.ts +34 -0
  112. package/dist/cli/dashboard.d.ts.map +1 -0
  113. package/dist/cli/dashboard.js +126 -0
  114. package/dist/cli/dashboard.js.map +1 -0
  115. package/dist/cli/doctor.d.ts +68 -0
  116. package/dist/cli/doctor.d.ts.map +1 -0
  117. package/dist/cli/doctor.js +585 -0
  118. package/dist/cli/doctor.js.map +1 -0
  119. package/dist/cli/edit.d.ts +11 -0
  120. package/dist/cli/edit.d.ts.map +1 -0
  121. package/dist/cli/edit.js +86 -0
  122. package/dist/cli/edit.js.map +1 -0
  123. package/dist/cli/execute.d.ts +25 -0
  124. package/dist/cli/execute.d.ts.map +1 -0
  125. package/dist/cli/execute.js +186 -0
  126. package/dist/cli/execute.js.map +1 -0
  127. package/dist/cli/federation.d.ts +31 -0
  128. package/dist/cli/federation.d.ts.map +1 -0
  129. package/dist/cli/federation.js +387 -0
  130. package/dist/cli/federation.js.map +1 -0
  131. package/dist/cli/history.d.ts +22 -0
  132. package/dist/cli/history.d.ts.map +1 -0
  133. package/dist/cli/history.js +140 -0
  134. package/dist/cli/history.js.map +1 -0
  135. package/dist/cli/init.d.ts +49 -0
  136. package/dist/cli/init.d.ts.map +1 -0
  137. package/dist/cli/init.js +423 -0
  138. package/dist/cli/init.js.map +1 -0
  139. package/dist/cli/learn.d.ts +31 -0
  140. package/dist/cli/learn.d.ts.map +1 -0
  141. package/dist/cli/learn.js +320 -0
  142. package/dist/cli/learn.js.map +1 -0
  143. package/dist/cli/memory.d.ts +38 -0
  144. package/dist/cli/memory.d.ts.map +1 -0
  145. package/dist/cli/memory.js +295 -0
  146. package/dist/cli/memory.js.map +1 -0
  147. package/dist/cli/model-picker.d.ts +18 -0
  148. package/dist/cli/model-picker.d.ts.map +1 -0
  149. package/dist/cli/model-picker.js +225 -0
  150. package/dist/cli/model-picker.js.map +1 -0
  151. package/dist/cli/models.d.ts +11 -0
  152. package/dist/cli/models.d.ts.map +1 -0
  153. package/dist/cli/models.js +132 -0
  154. package/dist/cli/models.js.map +1 -0
  155. package/dist/cli/plan.d.ts +11 -0
  156. package/dist/cli/plan.d.ts.map +1 -0
  157. package/dist/cli/plan.js +94 -0
  158. package/dist/cli/plan.js.map +1 -0
  159. package/dist/cli/plugins.d.ts +15 -0
  160. package/dist/cli/plugins.d.ts.map +1 -0
  161. package/dist/cli/plugins.js +123 -0
  162. package/dist/cli/plugins.js.map +1 -0
  163. package/dist/cli/router.d.ts +20 -0
  164. package/dist/cli/router.d.ts.map +1 -0
  165. package/dist/cli/router.js +142 -0
  166. package/dist/cli/router.js.map +1 -0
  167. package/dist/cli/run.d.ts +22 -0
  168. package/dist/cli/run.d.ts.map +1 -0
  169. package/dist/cli/run.js +110 -0
  170. package/dist/cli/run.js.map +1 -0
  171. package/dist/cli/sandbox.d.ts +27 -0
  172. package/dist/cli/sandbox.d.ts.map +1 -0
  173. package/dist/cli/sandbox.js +264 -0
  174. package/dist/cli/sandbox.js.map +1 -0
  175. package/dist/cli/sdk.d.ts +27 -0
  176. package/dist/cli/sdk.d.ts.map +1 -0
  177. package/dist/cli/sdk.js +204 -0
  178. package/dist/cli/sdk.js.map +1 -0
  179. package/dist/cli/stats.d.ts +18 -0
  180. package/dist/cli/stats.d.ts.map +1 -0
  181. package/dist/cli/stats.js +78 -0
  182. package/dist/cli/stats.js.map +1 -0
  183. package/dist/cli/team.d.ts +42 -0
  184. package/dist/cli/team.d.ts.map +1 -0
  185. package/dist/cli/team.js +473 -0
  186. package/dist/cli/team.js.map +1 -0
  187. package/dist/cli/workflow.d.ts +27 -0
  188. package/dist/cli/workflow.d.ts.map +1 -0
  189. package/dist/cli/workflow.js +347 -0
  190. package/dist/cli/workflow.js.map +1 -0
  191. package/dist/config/manager.d.ts +37 -0
  192. package/dist/config/manager.d.ts.map +1 -0
  193. package/dist/config/manager.js +147 -0
  194. package/dist/config/manager.js.map +1 -0
  195. package/dist/config/types.d.ts +53 -0
  196. package/dist/config/types.d.ts.map +1 -0
  197. package/dist/config/types.js +2 -0
  198. package/dist/config/types.js.map +1 -0
  199. package/dist/context/cache.d.ts +27 -0
  200. package/dist/context/cache.d.ts.map +1 -0
  201. package/dist/context/cache.js +116 -0
  202. package/dist/context/cache.js.map +1 -0
  203. package/dist/context/history.d.ts +87 -0
  204. package/dist/context/history.d.ts.map +1 -0
  205. package/dist/context/history.js +249 -0
  206. package/dist/context/history.js.map +1 -0
  207. package/dist/context/parser.d.ts +61 -0
  208. package/dist/context/parser.d.ts.map +1 -0
  209. package/dist/context/parser.js +194 -0
  210. package/dist/context/parser.js.map +1 -0
  211. package/dist/federation/client.d.ts +49 -0
  212. package/dist/federation/client.d.ts.map +1 -0
  213. package/dist/federation/client.js +239 -0
  214. package/dist/federation/client.js.map +1 -0
  215. package/dist/federation/protocol.d.ts +155 -0
  216. package/dist/federation/protocol.d.ts.map +1 -0
  217. package/dist/federation/protocol.js +57 -0
  218. package/dist/federation/protocol.js.map +1 -0
  219. package/dist/federation/server.d.ts +25 -0
  220. package/dist/federation/server.d.ts.map +1 -0
  221. package/dist/federation/server.js +401 -0
  222. package/dist/federation/server.js.map +1 -0
  223. package/dist/index.d.ts +67 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +93 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/inference/factory.d.ts +20 -0
  228. package/dist/inference/factory.d.ts.map +1 -0
  229. package/dist/inference/factory.js +46 -0
  230. package/dist/inference/factory.js.map +1 -0
  231. package/dist/inference/gemini-adapter.d.ts +17 -0
  232. package/dist/inference/gemini-adapter.d.ts.map +1 -0
  233. package/dist/inference/gemini-adapter.js +176 -0
  234. package/dist/inference/gemini-adapter.js.map +1 -0
  235. package/dist/inference/groq-adapter.d.ts +17 -0
  236. package/dist/inference/groq-adapter.d.ts.map +1 -0
  237. package/dist/inference/groq-adapter.js +103 -0
  238. package/dist/inference/groq-adapter.js.map +1 -0
  239. package/dist/inference/interface.d.ts +49 -0
  240. package/dist/inference/interface.d.ts.map +1 -0
  241. package/dist/inference/interface.js +2 -0
  242. package/dist/inference/interface.js.map +1 -0
  243. package/dist/inference/local-adapter.d.ts +35 -0
  244. package/dist/inference/local-adapter.d.ts.map +1 -0
  245. package/dist/inference/local-adapter.js +311 -0
  246. package/dist/inference/local-adapter.js.map +1 -0
  247. package/dist/inference/model-catalog.d.ts +53 -0
  248. package/dist/inference/model-catalog.d.ts.map +1 -0
  249. package/dist/inference/model-catalog.js +306 -0
  250. package/dist/inference/model-catalog.js.map +1 -0
  251. package/dist/inference/nim-adapter.d.ts +17 -0
  252. package/dist/inference/nim-adapter.d.ts.map +1 -0
  253. package/dist/inference/nim-adapter.js +103 -0
  254. package/dist/inference/nim-adapter.js.map +1 -0
  255. package/dist/inference/openrouter-adapter.d.ts +17 -0
  256. package/dist/inference/openrouter-adapter.d.ts.map +1 -0
  257. package/dist/inference/openrouter-adapter.js +105 -0
  258. package/dist/inference/openrouter-adapter.js.map +1 -0
  259. package/dist/inference/sse.d.ts +20 -0
  260. package/dist/inference/sse.d.ts.map +1 -0
  261. package/dist/inference/sse.js +91 -0
  262. package/dist/inference/sse.js.map +1 -0
  263. package/dist/learning/agent-stats.d.ts +109 -0
  264. package/dist/learning/agent-stats.d.ts.map +1 -0
  265. package/dist/learning/agent-stats.js +240 -0
  266. package/dist/learning/agent-stats.js.map +1 -0
  267. package/dist/learning/benchmark.d.ts +161 -0
  268. package/dist/learning/benchmark.d.ts.map +1 -0
  269. package/dist/learning/benchmark.js +589 -0
  270. package/dist/learning/benchmark.js.map +1 -0
  271. package/dist/learning/cost-tracker.d.ts +101 -0
  272. package/dist/learning/cost-tracker.d.ts.map +1 -0
  273. package/dist/learning/cost-tracker.js +224 -0
  274. package/dist/learning/cost-tracker.js.map +1 -0
  275. package/dist/learning/feedback.d.ts +88 -0
  276. package/dist/learning/feedback.d.ts.map +1 -0
  277. package/dist/learning/feedback.js +169 -0
  278. package/dist/learning/feedback.js.map +1 -0
  279. package/dist/learning/hybrid-router.d.ts +201 -0
  280. package/dist/learning/hybrid-router.d.ts.map +1 -0
  281. package/dist/learning/hybrid-router.js +450 -0
  282. package/dist/learning/hybrid-router.js.map +1 -0
  283. package/dist/learning/model-compare.d.ts +76 -0
  284. package/dist/learning/model-compare.d.ts.map +1 -0
  285. package/dist/learning/model-compare.js +252 -0
  286. package/dist/learning/model-compare.js.map +1 -0
  287. package/dist/learning/model-router.d.ts +68 -0
  288. package/dist/learning/model-router.d.ts.map +1 -0
  289. package/dist/learning/model-router.js +140 -0
  290. package/dist/learning/model-router.js.map +1 -0
  291. package/dist/learning/pattern-extractor.d.ts +99 -0
  292. package/dist/learning/pattern-extractor.d.ts.map +1 -0
  293. package/dist/learning/pattern-extractor.js +310 -0
  294. package/dist/learning/pattern-extractor.js.map +1 -0
  295. package/dist/learning/scorer.d.ts +51 -0
  296. package/dist/learning/scorer.d.ts.map +1 -0
  297. package/dist/learning/scorer.js +64 -0
  298. package/dist/learning/scorer.js.map +1 -0
  299. package/dist/learning/self-improver.d.ts +48 -0
  300. package/dist/learning/self-improver.d.ts.map +1 -0
  301. package/dist/learning/self-improver.js +161 -0
  302. package/dist/learning/self-improver.js.map +1 -0
  303. package/dist/memory/embedder.d.ts +65 -0
  304. package/dist/memory/embedder.d.ts.map +1 -0
  305. package/dist/memory/embedder.js +424 -0
  306. package/dist/memory/embedder.js.map +1 -0
  307. package/dist/memory/memory-integration.d.ts +56 -0
  308. package/dist/memory/memory-integration.d.ts.map +1 -0
  309. package/dist/memory/memory-integration.js +95 -0
  310. package/dist/memory/memory-integration.js.map +1 -0
  311. package/dist/memory/trajectory-store.d.ts +149 -0
  312. package/dist/memory/trajectory-store.d.ts.map +1 -0
  313. package/dist/memory/trajectory-store.js +476 -0
  314. package/dist/memory/trajectory-store.js.map +1 -0
  315. package/dist/memory/vector-store.d.ts +78 -0
  316. package/dist/memory/vector-store.d.ts.map +1 -0
  317. package/dist/memory/vector-store.js +186 -0
  318. package/dist/memory/vector-store.js.map +1 -0
  319. package/dist/plugins/agent-plugin.d.ts +73 -0
  320. package/dist/plugins/agent-plugin.d.ts.map +1 -0
  321. package/dist/plugins/agent-plugin.js +199 -0
  322. package/dist/plugins/agent-plugin.js.map +1 -0
  323. package/dist/plugins/registry.d.ts +61 -0
  324. package/dist/plugins/registry.d.ts.map +1 -0
  325. package/dist/plugins/registry.js +67 -0
  326. package/dist/plugins/registry.js.map +1 -0
  327. package/dist/sandbox/images.d.ts +31 -0
  328. package/dist/sandbox/images.d.ts.map +1 -0
  329. package/dist/sandbox/images.js +129 -0
  330. package/dist/sandbox/images.js.map +1 -0
  331. package/dist/sandbox/manager.d.ts +134 -0
  332. package/dist/sandbox/manager.d.ts.map +1 -0
  333. package/dist/sandbox/manager.js +470 -0
  334. package/dist/sandbox/manager.js.map +1 -0
  335. package/dist/sandbox/types.d.ts +113 -0
  336. package/dist/sandbox/types.d.ts.map +1 -0
  337. package/dist/sandbox/types.js +107 -0
  338. package/dist/sandbox/types.js.map +1 -0
  339. package/dist/security/scanner.d.ts +53 -0
  340. package/dist/security/scanner.d.ts.map +1 -0
  341. package/dist/security/scanner.js +271 -0
  342. package/dist/security/scanner.js.map +1 -0
  343. package/dist/team/config.d.ts +50 -0
  344. package/dist/team/config.d.ts.map +1 -0
  345. package/dist/team/config.js +108 -0
  346. package/dist/team/config.js.map +1 -0
  347. package/dist/team/memory.d.ts +63 -0
  348. package/dist/team/memory.d.ts.map +1 -0
  349. package/dist/team/memory.js +282 -0
  350. package/dist/team/memory.js.map +1 -0
  351. package/dist/team/review.d.ts +123 -0
  352. package/dist/team/review.d.ts.map +1 -0
  353. package/dist/team/review.js +293 -0
  354. package/dist/team/review.js.map +1 -0
  355. package/dist/utils/env.d.ts +19 -0
  356. package/dist/utils/env.d.ts.map +1 -0
  357. package/dist/utils/env.js +250 -0
  358. package/dist/utils/env.js.map +1 -0
  359. package/dist/utils/logger.d.ts +11 -0
  360. package/dist/utils/logger.d.ts.map +1 -0
  361. package/dist/utils/logger.js +45 -0
  362. package/dist/utils/logger.js.map +1 -0
  363. package/dist/web-dashboard/server.d.ts +59 -0
  364. package/dist/web-dashboard/server.d.ts.map +1 -0
  365. package/dist/web-dashboard/server.js +418 -0
  366. package/dist/web-dashboard/server.js.map +1 -0
  367. package/dist/workflow/registry.d.ts +127 -0
  368. package/dist/workflow/registry.d.ts.map +1 -0
  369. package/dist/workflow/registry.js +482 -0
  370. package/dist/workflow/registry.js.map +1 -0
  371. package/dist/workflow/templates.d.ts +93 -0
  372. package/dist/workflow/templates.d.ts.map +1 -0
  373. package/dist/workflow/templates.js +481 -0
  374. package/dist/workflow/templates.js.map +1 -0
  375. package/package.json +78 -0
  376. package/src/web-dashboard/public/assets/index-B08nDkSB.css +1 -0
  377. package/src/web-dashboard/public/assets/index-BKL8YOFD.js +135 -0
  378. package/src/web-dashboard/public/assets/index-BKL8YOFD.js.map +1 -0
  379. package/src/web-dashboard/public/index.html +13 -0
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Federation Protocol — Types and constants for agent-to-agent communication.
3
+ *
4
+ * The protocol uses HTTP/SSE with pre-shared key authentication.
5
+ * Messages are JSON-encoded with a standard envelope format.
6
+ *
7
+ * ## Protocol Flow
8
+ *
9
+ * 1. Client connects to remote server: POST /federation/handshake
10
+ * → Server validates pre-shared key, returns session token
11
+ * 2. Client delegates a task: POST /federation/task
12
+ * → Server accepts and responds via SSE for progress events
13
+ * 3. Server processes the task and sends progress/results via SSE
14
+ * 4. Client can cancel a task: POST /federation/cancel
15
+ * 5. Health check: GET /federation/health
16
+ *
17
+ * ## Authentication
18
+ *
19
+ * All requests include a pre-shared key in the Authorization header.
20
+ * The key is set via FEDERATION_SECRET env var or config file.
21
+ * First-party requests use Bearer token from handshake.
22
+ *
23
+ * ## Envelope Format
24
+ *
25
+ * All HTTP requests/responses use a standard envelope:
26
+ * {
27
+ * "version": "1.0",
28
+ * "type": "request" | "response" | "error" | "event",
29
+ * "payload": { ... },
30
+ * "timestamp": 1234567890
31
+ * }
32
+ */
33
+ /** Default port for the federation server */
34
+ export declare const DEFAULT_FEDERATION_PORT = 8374;
35
+ /** Default host to bind to */
36
+ export declare const DEFAULT_FEDERATION_HOST = "0.0.0.0";
37
+ /** Protocol version */
38
+ export declare const FEDERATION_PROTOCOL_VERSION = "1.0";
39
+ /** Timeout for task execution (ms) — default 30 min */
40
+ export declare const DEFAULT_TASK_TIMEOUT_MS: number;
41
+ /** Timeout for HTTP requests (ms) */
42
+ export declare const DEFAULT_REQUEST_TIMEOUT_MS = 10000;
43
+ /** Heartbeat interval for SSE connections (ms) */
44
+ export declare const DEFAULT_HEARTBEAT_INTERVAL_MS = 15000;
45
+ /** Federation message envelope */
46
+ export interface FederationEnvelope {
47
+ version: string;
48
+ type: 'request' | 'response' | 'error' | 'event';
49
+ payload: unknown;
50
+ timestamp: number;
51
+ }
52
+ /** Handshake request — sent by client to initiate a session */
53
+ export interface HandshakeRequest {
54
+ /** Pre-shared secret key */
55
+ secret: string;
56
+ /** Client identity (hostname, machine name) */
57
+ clientId: string;
58
+ /** Client capabilities (which agent types it can run) */
59
+ capabilities: string[];
60
+ }
61
+ /** Handshake response — sent by server on successful auth */
62
+ export interface HandshakeResponse {
63
+ /** Session token for subsequent requests */
64
+ sessionToken: string;
65
+ /** Server identity */
66
+ serverId: string;
67
+ /** Session expiry timestamp */
68
+ expiresAt: number;
69
+ /** Server capabilities */
70
+ capabilities: string[];
71
+ }
72
+ /** Task delegation request */
73
+ export interface TaskDelegationRequest {
74
+ /** Task prompt/goal */
75
+ goal: string;
76
+ /** Agent type to run (e.g., 'writer', 'planner') */
77
+ agentType: string;
78
+ /** Provider/model override */
79
+ provider?: string;
80
+ model?: string;
81
+ /** Timeout in ms */
82
+ timeoutMs?: number;
83
+ /** File context (base64-encoded tarball or file paths) */
84
+ contextFiles?: string[];
85
+ /** Whether to stream progress via SSE */
86
+ streamProgress?: boolean;
87
+ }
88
+ /** Task delegation response */
89
+ export interface TaskDelegationResponse {
90
+ /** Task ID for tracking */
91
+ taskId: string;
92
+ /** Status: 'accepted' | 'queued' | 'rejected' */
93
+ status: 'accepted' | 'queued' | 'rejected';
94
+ /** Reason if rejected */
95
+ reason?: string;
96
+ /** Estimated wait time (ms) */
97
+ estimatedWaitMs?: number;
98
+ }
99
+ /** Task result — sent when task completes */
100
+ export interface TaskResult {
101
+ taskId: string;
102
+ success: boolean;
103
+ summary: string;
104
+ details?: string;
105
+ error?: string;
106
+ /** Execution duration in ms */
107
+ durationMs: number;
108
+ /** Output files (base64 encoded) */
109
+ outputFiles?: Array<{
110
+ path: string;
111
+ content: string;
112
+ }>;
113
+ /** Cost incurred (USD) */
114
+ costUsd?: number;
115
+ }
116
+ /** Task progress event (SSE) */
117
+ export interface TaskProgressEvent {
118
+ taskId: string;
119
+ status: 'running' | 'completed' | 'failed';
120
+ progress?: number;
121
+ message?: string;
122
+ result?: TaskResult;
123
+ }
124
+ /** Server health information */
125
+ export interface FederationHealth {
126
+ status: 'ok' | 'degraded' | 'offline';
127
+ uptime: number;
128
+ activeTasks: number;
129
+ completedTasks: number;
130
+ failedTasks: number;
131
+ version: string;
132
+ loadAverage?: number[];
133
+ }
134
+ /** Configuration for a federation server or client */
135
+ export interface FederationConfig {
136
+ /** Whether federation is enabled */
137
+ enabled: boolean;
138
+ /** Secret key for authentication */
139
+ secret: string;
140
+ /** Host to bind/connect to */
141
+ host: string;
142
+ /** Port to bind/connect to */
143
+ port: number;
144
+ /** Maximum concurrent tasks */
145
+ maxConcurrentTasks: number;
146
+ /** Task timeout (ms) */
147
+ taskTimeoutMs: number;
148
+ /** Node identity (hostname) */
149
+ nodeId: string;
150
+ /** Capabilities (which agent types this node can run) */
151
+ capabilities: string[];
152
+ }
153
+ /** Default federation configuration */
154
+ export declare const DEFAULT_FEDERATION_CONFIG: FederationConfig;
155
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/federation/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Federation Protocol — Types and constants for agent-to-agent communication.
3
+ *
4
+ * The protocol uses HTTP/SSE with pre-shared key authentication.
5
+ * Messages are JSON-encoded with a standard envelope format.
6
+ *
7
+ * ## Protocol Flow
8
+ *
9
+ * 1. Client connects to remote server: POST /federation/handshake
10
+ * → Server validates pre-shared key, returns session token
11
+ * 2. Client delegates a task: POST /federation/task
12
+ * → Server accepts and responds via SSE for progress events
13
+ * 3. Server processes the task and sends progress/results via SSE
14
+ * 4. Client can cancel a task: POST /federation/cancel
15
+ * 5. Health check: GET /federation/health
16
+ *
17
+ * ## Authentication
18
+ *
19
+ * All requests include a pre-shared key in the Authorization header.
20
+ * The key is set via FEDERATION_SECRET env var or config file.
21
+ * First-party requests use Bearer token from handshake.
22
+ *
23
+ * ## Envelope Format
24
+ *
25
+ * All HTTP requests/responses use a standard envelope:
26
+ * {
27
+ * "version": "1.0",
28
+ * "type": "request" | "response" | "error" | "event",
29
+ * "payload": { ... },
30
+ * "timestamp": 1234567890
31
+ * }
32
+ */
33
+ // ─── Configuration ──────────────────────────────────────────────────────────
34
+ /** Default port for the federation server */
35
+ export const DEFAULT_FEDERATION_PORT = 8374;
36
+ /** Default host to bind to */
37
+ export const DEFAULT_FEDERATION_HOST = '0.0.0.0';
38
+ /** Protocol version */
39
+ export const FEDERATION_PROTOCOL_VERSION = '1.0';
40
+ /** Timeout for task execution (ms) — default 30 min */
41
+ export const DEFAULT_TASK_TIMEOUT_MS = 30 * 60 * 1000;
42
+ /** Timeout for HTTP requests (ms) */
43
+ export const DEFAULT_REQUEST_TIMEOUT_MS = 10_000;
44
+ /** Heartbeat interval for SSE connections (ms) */
45
+ export const DEFAULT_HEARTBEAT_INTERVAL_MS = 15_000;
46
+ /** Default federation configuration */
47
+ export const DEFAULT_FEDERATION_CONFIG = {
48
+ enabled: false,
49
+ secret: '',
50
+ host: DEFAULT_FEDERATION_HOST,
51
+ port: DEFAULT_FEDERATION_PORT,
52
+ maxConcurrentTasks: 4,
53
+ taskTimeoutMs: DEFAULT_TASK_TIMEOUT_MS,
54
+ nodeId: 'unknown',
55
+ capabilities: ['planner', 'context-gatherer', 'writer', 'reviewer', 'tester', 'debugger', 'runner'],
56
+ };
57
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/federation/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,+EAA+E;AAE/E,6CAA6C;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAEjD,uBAAuB;AACvB,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD,uDAAuD;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtD,qCAAqC;AACrC,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAEjD,kDAAkD;AAClD,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAsHpD,uCAAuC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACzD,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,uBAAuB;IAC7B,kBAAkB,EAAE,CAAC;IACrB,aAAa,EAAE,uBAAuB;IACtC,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;CACpG,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * FederationServer — HTTP server that accepts remote agent task delegations.
3
+ *
4
+ * Runs on a configurable port and listens for:
5
+ * - POST /federation/handshake — Authentication and session creation
6
+ * - POST /federation/task — Task delegation (with SSE for progress)
7
+ * - POST /federation/cancel — Cancel a running task
8
+ * - GET /federation/health — Health check endpoint
9
+ *
10
+ * Uses only Node.js built-in modules (http, crypto) — no external dependencies.
11
+ */
12
+ import { createServer } from 'node:http';
13
+ import { type FederationConfig } from './protocol.js';
14
+ /**
15
+ * Create and start a federation server.
16
+ *
17
+ * @param config — Federation configuration (defaults to reading from env/config)
18
+ * @returns The started HTTP server instance
19
+ */
20
+ export declare function createFederationServer(config?: Partial<FederationConfig>): ReturnType<typeof createServer>;
21
+ /**
22
+ * Start the federation server on the configured port.
23
+ */
24
+ export declare function startFederationServer(config?: Partial<FederationConfig>): Promise<ReturnType<typeof createServer>>;
25
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/federation/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AAMpF,OAAO,EACL,KAAK,gBAAgB,EAWtB,MAAM,eAAe,CAAC;AA+ZvB;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAqB1G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAoBlH"}
@@ -0,0 +1,401 @@
1
+ /**
2
+ * FederationServer — HTTP server that accepts remote agent task delegations.
3
+ *
4
+ * Runs on a configurable port and listens for:
5
+ * - POST /federation/handshake — Authentication and session creation
6
+ * - POST /federation/task — Task delegation (with SSE for progress)
7
+ * - POST /federation/cancel — Cancel a running task
8
+ * - GET /federation/health — Health check endpoint
9
+ *
10
+ * Uses only Node.js built-in modules (http, crypto) — no external dependencies.
11
+ */
12
+ import { createServer } from 'node:http';
13
+ import { randomBytes, timingSafeEqual } from 'node:crypto';
14
+ import { logger } from '../utils/logger.js';
15
+ import { ConfigManager } from '../config/manager.js';
16
+ import { Orchestrator } from '../agents/orchestrator.js';
17
+ import { FEDERATION_PROTOCOL_VERSION, DEFAULT_FEDERATION_CONFIG, } from './protocol.js';
18
+ const sessions = new Map();
19
+ const runningTasks = new Map();
20
+ const sseClients = new Map(); // taskId → SSE clients
21
+ let taskCounter = 0;
22
+ let completedTaskCount = 0;
23
+ let failedTaskCount = 0;
24
+ const serverStartTime = Date.now();
25
+ // ─── Helpers ────────────────────────────────────────────────────────────────
26
+ function generateToken() {
27
+ return randomBytes(32).toString('hex');
28
+ }
29
+ function generateTaskId() {
30
+ return `fed-task-${Date.now()}-${++taskCounter}`;
31
+ }
32
+ function createEnvelope(type, payload) {
33
+ return {
34
+ version: FEDERATION_PROTOCOL_VERSION,
35
+ type,
36
+ payload,
37
+ timestamp: Date.now(),
38
+ };
39
+ }
40
+ function sendJSON(res, statusCode, data) {
41
+ res.writeHead(statusCode, {
42
+ 'Content-Type': 'application/json',
43
+ 'Access-Control-Allow-Origin': '*',
44
+ });
45
+ res.end(JSON.stringify(data));
46
+ }
47
+ function sendError(res, statusCode, message) {
48
+ sendJSON(res, statusCode, createEnvelope('error', { message }));
49
+ }
50
+ function parseBody(req) {
51
+ return new Promise((resolve, reject) => {
52
+ const chunks = [];
53
+ req.on('data', (chunk) => chunks.push(chunk));
54
+ req.on('end', () => {
55
+ try {
56
+ const body = Buffer.concat(chunks).toString('utf-8');
57
+ resolve(body ? JSON.parse(body) : {});
58
+ }
59
+ catch (err) {
60
+ reject(new Error('Invalid JSON body'));
61
+ }
62
+ });
63
+ req.on('error', reject);
64
+ });
65
+ }
66
+ function getBearerToken(req) {
67
+ const auth = req.headers.authorization;
68
+ if (!auth)
69
+ return null;
70
+ const parts = auth.split(' ');
71
+ return parts[0].toLowerCase() === 'bearer' ? parts.slice(1).join(' ') : null;
72
+ }
73
+ function authenticateSession(token) {
74
+ const session = sessions.get(token);
75
+ if (!session)
76
+ return null;
77
+ if (Date.now() > session.expiresAt) {
78
+ sessions.delete(token);
79
+ return null;
80
+ }
81
+ return session;
82
+ }
83
+ function constantTimeCompare(a, b) {
84
+ try {
85
+ const bufA = Buffer.from(a);
86
+ const bufB = Buffer.from(b);
87
+ if (bufA.length !== bufB.length)
88
+ return false;
89
+ return timingSafeEqual(bufA, bufB);
90
+ }
91
+ catch {
92
+ return false;
93
+ }
94
+ }
95
+ // ─── SSE Helpers ────────────────────────────────────────────────────────────
96
+ function sendSSE(res, event, data) {
97
+ res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
98
+ }
99
+ function setupSSEConnection(res, taskId) {
100
+ res.writeHead(200, {
101
+ 'Content-Type': 'text/event-stream',
102
+ 'Cache-Control': 'no-cache',
103
+ 'Connection': 'keep-alive',
104
+ 'Access-Control-Allow-Origin': '*',
105
+ });
106
+ // Add to SSE clients for this task
107
+ if (!sseClients.has(taskId)) {
108
+ sseClients.set(taskId, new Set());
109
+ }
110
+ sseClients.get(taskId).add(res);
111
+ // Send initial connected event
112
+ sendSSE(res, 'connected', { taskId });
113
+ // Start heartbeat
114
+ const heartbeat = setInterval(() => {
115
+ try {
116
+ sendSSE(res, 'heartbeat', { timestamp: Date.now() });
117
+ }
118
+ catch {
119
+ clearInterval(heartbeat);
120
+ }
121
+ }, 15_000);
122
+ // Clean up on close
123
+ res.on('close', () => {
124
+ clearInterval(heartbeat);
125
+ const clients = sseClients.get(taskId);
126
+ if (clients) {
127
+ clients.delete(res);
128
+ if (clients.size === 0)
129
+ sseClients.delete(taskId);
130
+ }
131
+ });
132
+ }
133
+ function broadcastTaskProgress(taskId, event) {
134
+ const clients = sseClients.get(taskId);
135
+ if (!clients)
136
+ return;
137
+ for (const client of clients) {
138
+ try {
139
+ sendSSE(client, 'progress', event);
140
+ }
141
+ catch {
142
+ clients.delete(client);
143
+ }
144
+ }
145
+ }
146
+ // ─── Task Executor ──────────────────────────────────────────────────────────
147
+ async function executeDelegatedTask(task, taskId, abortController) {
148
+ const startTime = Date.now();
149
+ broadcastTaskProgress(taskId, { taskId, status: 'running', progress: 0, message: 'Starting task...' });
150
+ try {
151
+ const configManager = new ConfigManager();
152
+ const orchestrator = new Orchestrator(configManager);
153
+ // Execute the task
154
+ const result = await orchestrator.execute(task.goal, {
155
+ provider: task.provider,
156
+ model: task.model,
157
+ verbose: false,
158
+ dryRun: false,
159
+ });
160
+ const durationMs = Date.now() - startTime;
161
+ broadcastTaskProgress(taskId, {
162
+ taskId,
163
+ status: result.success ? 'completed' : 'failed',
164
+ progress: 100,
165
+ message: result.summary,
166
+ });
167
+ return {
168
+ taskId,
169
+ success: result.success,
170
+ summary: result.summary,
171
+ details: result.fileChanges,
172
+ error: result.error,
173
+ durationMs,
174
+ };
175
+ }
176
+ catch (err) {
177
+ const durationMs = Date.now() - startTime;
178
+ const msg = err instanceof Error ? err.message : String(err);
179
+ broadcastTaskProgress(taskId, {
180
+ taskId,
181
+ status: 'failed',
182
+ progress: 100,
183
+ message: msg,
184
+ });
185
+ return {
186
+ taskId,
187
+ success: false,
188
+ summary: 'Task execution failed',
189
+ error: msg,
190
+ durationMs,
191
+ };
192
+ }
193
+ }
194
+ // ─── Route Handlers ─────────────────────────────────────────────────────────
195
+ async function handleHandshake(req, res, config) {
196
+ const body = await parseBody(req);
197
+ if (!body.secret || !body.clientId) {
198
+ sendError(res, 400, 'Missing secret or clientId');
199
+ return;
200
+ }
201
+ // Validate pre-shared key using constant-time comparison
202
+ if (!constantTimeCompare(body.secret, config.secret)) {
203
+ sendError(res, 401, 'Invalid secret key');
204
+ return;
205
+ }
206
+ // Create session
207
+ const token = generateToken();
208
+ const expiresAt = Date.now() + 24 * 60 * 60 * 1000; // 24 hours
209
+ const session = {
210
+ token,
211
+ clientId: body.clientId,
212
+ createdAt: Date.now(),
213
+ expiresAt,
214
+ };
215
+ sessions.set(token, session);
216
+ logger.success(`Federation: Client '${body.clientId}' connected (capabilities: ${(body.capabilities || []).join(', ')})`);
217
+ const response = {
218
+ sessionToken: token,
219
+ serverId: config.nodeId,
220
+ expiresAt,
221
+ capabilities: config.capabilities,
222
+ };
223
+ sendJSON(res, 200, createEnvelope('response', response));
224
+ }
225
+ async function handleTaskDelegation(req, res, _config) {
226
+ const token = getBearerToken(req);
227
+ if (!token || !authenticateSession(token)) {
228
+ sendError(res, 401, 'Invalid or expired session token');
229
+ return;
230
+ }
231
+ const body = await parseBody(req);
232
+ if (!body.goal || !body.agentType) {
233
+ sendError(res, 400, 'Missing goal or agentType');
234
+ return;
235
+ }
236
+ const taskId = generateTaskId();
237
+ // Check if streaming requested
238
+ if (body.streamProgress !== false) {
239
+ setupSSEConnection(res, taskId);
240
+ }
241
+ else {
242
+ // Non-streaming: return immediately with accepted status
243
+ const response = {
244
+ taskId,
245
+ status: 'accepted',
246
+ };
247
+ sendJSON(res, 202, createEnvelope('response', response));
248
+ }
249
+ // Execute task asynchronously
250
+ const abortController = new AbortController();
251
+ const runningTask = {
252
+ taskId,
253
+ sessionToken: token,
254
+ goal: body.goal,
255
+ startedAt: Date.now(),
256
+ abortController,
257
+ };
258
+ runningTasks.set(taskId, runningTask);
259
+ logger.info(`Federation: Executing task ${taskId} (${body.agentType}: ${body.goal.slice(0, 80)})`);
260
+ const result = await executeDelegatedTask(body, taskId, abortController);
261
+ runningTasks.delete(taskId);
262
+ if (result.success) {
263
+ completedTaskCount++;
264
+ }
265
+ else {
266
+ failedTaskCount++;
267
+ }
268
+ // For non-streaming requests, send the result back via SSE if connected
269
+ if (body.streamProgress !== false) {
270
+ broadcastTaskProgress(taskId, {
271
+ taskId,
272
+ status: result.success ? 'completed' : 'failed',
273
+ progress: 100,
274
+ message: result.summary,
275
+ result,
276
+ });
277
+ }
278
+ logger.success(`Federation: Task ${taskId} completed (${result.success ? '✅' : '❌'})`);
279
+ }
280
+ async function handleCancel(req, res) {
281
+ const token = getBearerToken(req);
282
+ if (!token || !authenticateSession(token)) {
283
+ sendError(res, 401, 'Invalid or expired session token');
284
+ return;
285
+ }
286
+ const body = await parseBody(req);
287
+ if (!body.taskId) {
288
+ sendError(res, 400, 'Missing taskId');
289
+ return;
290
+ }
291
+ const runningTask = runningTasks.get(body.taskId);
292
+ if (!runningTask) {
293
+ sendError(res, 404, 'Task not found or already completed');
294
+ return;
295
+ }
296
+ runningTask.abortController.abort();
297
+ runningTasks.delete(body.taskId);
298
+ broadcastTaskProgress(body.taskId, {
299
+ taskId: body.taskId,
300
+ status: 'failed',
301
+ progress: 100,
302
+ message: 'Cancelled by user',
303
+ });
304
+ sendJSON(res, 200, createEnvelope('response', { taskId: body.taskId, status: 'cancelled' }));
305
+ logger.info(`Federation: Task ${body.taskId} cancelled`);
306
+ }
307
+ function handleHealth(_req, res) {
308
+ const health = {
309
+ status: 'ok',
310
+ uptime: Date.now() - serverStartTime,
311
+ activeTasks: runningTasks.size,
312
+ completedTasks: completedTaskCount,
313
+ failedTasks: failedTaskCount,
314
+ version: FEDERATION_PROTOCOL_VERSION,
315
+ };
316
+ sendJSON(res, 200, createEnvelope('response', health));
317
+ }
318
+ // ─── Request Router ─────────────────────────────────────────────────────────
319
+ function routeRequest(req, res, config) {
320
+ // CORS preflight
321
+ if (req.method === 'OPTIONS') {
322
+ res.writeHead(204, {
323
+ 'Access-Control-Allow-Origin': '*',
324
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
325
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
326
+ });
327
+ res.end();
328
+ return;
329
+ }
330
+ const url = req.url || '/';
331
+ const method = req.method || 'GET';
332
+ try {
333
+ if (method === 'POST' && url === '/federation/handshake') {
334
+ handleHandshake(req, res, config);
335
+ }
336
+ else if (method === 'POST' && url === '/federation/task') {
337
+ handleTaskDelegation(req, res, config);
338
+ }
339
+ else if (method === 'POST' && url === '/federation/cancel') {
340
+ handleCancel(req, res);
341
+ }
342
+ else if (method === 'GET' && url === '/federation/health') {
343
+ handleHealth(req, res);
344
+ }
345
+ else {
346
+ sendError(res, 404, `Not found: ${method} ${url}`);
347
+ }
348
+ }
349
+ catch (err) {
350
+ const msg = err instanceof Error ? err.message : String(err);
351
+ sendError(res, 500, msg);
352
+ logger.error(`Federation server error: ${msg}`);
353
+ }
354
+ }
355
+ // ─── Server Creation ────────────────────────────────────────────────────────
356
+ /**
357
+ * Create and start a federation server.
358
+ *
359
+ * @param config — Federation configuration (defaults to reading from env/config)
360
+ * @returns The started HTTP server instance
361
+ */
362
+ export function createFederationServer(config) {
363
+ const resolvedConfig = {
364
+ ...DEFAULT_FEDERATION_CONFIG,
365
+ ...config,
366
+ };
367
+ if (!resolvedConfig.secret) {
368
+ // Try to read from env or config
369
+ resolvedConfig.secret = process.env.FEDERATION_SECRET || '';
370
+ }
371
+ if (!resolvedConfig.secret) {
372
+ throw new Error('Federation secret not configured. Set FEDERATION_SECRET env var ' +
373
+ 'or pass it via FederationConfig.secret.');
374
+ }
375
+ const server = createServer((req, res) => routeRequest(req, res, resolvedConfig));
376
+ return server;
377
+ }
378
+ /**
379
+ * Start the federation server on the configured port.
380
+ */
381
+ export function startFederationServer(config) {
382
+ const resolvedConfig = { ...DEFAULT_FEDERATION_CONFIG, ...config };
383
+ const server = createFederationServer(resolvedConfig);
384
+ return new Promise((resolve, reject) => {
385
+ server.listen(resolvedConfig.port, resolvedConfig.host, () => {
386
+ logger.success(`Federation server listening on ${resolvedConfig.host}:${resolvedConfig.port}`);
387
+ logger.info(` Node ID: ${resolvedConfig.nodeId}`);
388
+ logger.info(` Capabilities: ${resolvedConfig.capabilities.join(', ')}`);
389
+ resolve(server);
390
+ });
391
+ server.on('error', (err) => {
392
+ if (err.code === 'EADDRINUSE') {
393
+ reject(new Error(`Port ${resolvedConfig.port} is already in use`));
394
+ }
395
+ else {
396
+ reject(err);
397
+ }
398
+ });
399
+ });
400
+ }
401
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/federation/server.ts"],"names":[],"mappings":"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"}