@holoscript/framework 6.0.3

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 (329) hide show
  1. package/ALL-test-results.json +1 -0
  2. package/CHANGELOG.md +8 -0
  3. package/LICENSE +21 -0
  4. package/ROADMAP.md +175 -0
  5. package/dist/AgentManifest-CB4xM-Ma.d.cts +704 -0
  6. package/dist/AgentManifest-CB4xM-Ma.d.ts +704 -0
  7. package/dist/BehaviorTree-BrBFECv5.d.cts +103 -0
  8. package/dist/BehaviorTree-BrBFECv5.d.ts +103 -0
  9. package/dist/InvisibleWallet-BB6tFvRA.d.cts +1732 -0
  10. package/dist/InvisibleWallet-rtRrBOA8.d.ts +1732 -0
  11. package/dist/OrchestratorAgent-BvWgf9uw.d.cts +798 -0
  12. package/dist/OrchestratorAgent-Q_CbVTmO.d.ts +798 -0
  13. package/dist/agents/index.cjs +4790 -0
  14. package/dist/agents/index.d.cts +1788 -0
  15. package/dist/agents/index.d.ts +1788 -0
  16. package/dist/agents/index.js +4695 -0
  17. package/dist/ai/index.cjs +5347 -0
  18. package/dist/ai/index.d.cts +1753 -0
  19. package/dist/ai/index.d.ts +1753 -0
  20. package/dist/ai/index.js +5244 -0
  21. package/dist/behavior.cjs +449 -0
  22. package/dist/behavior.d.cts +130 -0
  23. package/dist/behavior.d.ts +130 -0
  24. package/dist/behavior.js +407 -0
  25. package/dist/economy/index.cjs +3659 -0
  26. package/dist/economy/index.d.cts +747 -0
  27. package/dist/economy/index.d.ts +747 -0
  28. package/dist/economy/index.js +3617 -0
  29. package/dist/implementations-D9T3un9D.d.cts +236 -0
  30. package/dist/implementations-D9T3un9D.d.ts +236 -0
  31. package/dist/index.cjs +24550 -0
  32. package/dist/index.d.cts +1729 -0
  33. package/dist/index.d.ts +1729 -0
  34. package/dist/index.js +24277 -0
  35. package/dist/learning/index.cjs +219 -0
  36. package/dist/learning/index.d.cts +104 -0
  37. package/dist/learning/index.d.ts +104 -0
  38. package/dist/learning/index.js +189 -0
  39. package/dist/negotiation/index.cjs +970 -0
  40. package/dist/negotiation/index.d.cts +610 -0
  41. package/dist/negotiation/index.d.ts +610 -0
  42. package/dist/negotiation/index.js +931 -0
  43. package/dist/skills/index.cjs +1118 -0
  44. package/dist/skills/index.d.cts +289 -0
  45. package/dist/skills/index.d.ts +289 -0
  46. package/dist/skills/index.js +1079 -0
  47. package/dist/swarm/index.cjs +5268 -0
  48. package/dist/swarm/index.d.cts +2433 -0
  49. package/dist/swarm/index.d.ts +2433 -0
  50. package/dist/swarm/index.js +5221 -0
  51. package/dist/training/index.cjs +2745 -0
  52. package/dist/training/index.d.cts +1734 -0
  53. package/dist/training/index.d.ts +1734 -0
  54. package/dist/training/index.js +2687 -0
  55. package/extract-failures.js +10 -0
  56. package/package.json +82 -0
  57. package/src/__tests__/bounty-marketplace.test.ts +374 -0
  58. package/src/__tests__/delegation.test.ts +144 -0
  59. package/src/__tests__/distributed-claimer.test.ts +147 -0
  60. package/src/__tests__/done-log-audit.test.ts +342 -0
  61. package/src/__tests__/framework.test.ts +865 -0
  62. package/src/__tests__/goal-synthesizer.test.ts +236 -0
  63. package/src/__tests__/presence.test.ts +223 -0
  64. package/src/__tests__/protocol-agent.test.ts +254 -0
  65. package/src/__tests__/revenue-splitter.test.ts +114 -0
  66. package/src/__tests__/scenario-driven-todo.test.ts +197 -0
  67. package/src/__tests__/self-improve.test.ts +349 -0
  68. package/src/__tests__/service-lifecycle.test.ts +237 -0
  69. package/src/__tests__/skill-router.test.ts +121 -0
  70. package/src/agents/AgentManifest.ts +493 -0
  71. package/src/agents/AgentRegistry.ts +475 -0
  72. package/src/agents/AgentTypes.ts +585 -0
  73. package/src/agents/AgentWalletRegistry.ts +83 -0
  74. package/src/agents/AuthenticatedCRDT.ts +388 -0
  75. package/src/agents/CapabilityMatcher.ts +453 -0
  76. package/src/agents/CrossRealityHandoff.ts +305 -0
  77. package/src/agents/CulturalMemory.ts +454 -0
  78. package/src/agents/FederatedRegistryAdapter.ts +429 -0
  79. package/src/agents/NormEngine.ts +450 -0
  80. package/src/agents/OrchestratorAgent.ts +414 -0
  81. package/src/agents/SkillWorkflowEngine.ts +472 -0
  82. package/src/agents/TaskDelegationService.ts +551 -0
  83. package/src/agents/__tests__/AgentManifest.prod.test.ts +134 -0
  84. package/src/agents/__tests__/AgentManifest.test.ts +182 -0
  85. package/src/agents/__tests__/AgentModule.test.ts +864 -0
  86. package/src/agents/__tests__/AgentRegistry.prod.test.ts +125 -0
  87. package/src/agents/__tests__/AgentRegistry.test.ts +148 -0
  88. package/src/agents/__tests__/AgentTypes.test.ts +534 -0
  89. package/src/agents/__tests__/AgentWalletRegistry.test.ts +152 -0
  90. package/src/agents/__tests__/AuthenticatedCRDT.test.ts +558 -0
  91. package/src/agents/__tests__/CapabilityMatcher.prod.test.ts +117 -0
  92. package/src/agents/__tests__/CapabilityMatcher.test.ts +178 -0
  93. package/src/agents/__tests__/CrossRealityHandoff.test.ts +402 -0
  94. package/src/agents/__tests__/CulturalMemory.test.ts +200 -0
  95. package/src/agents/__tests__/FederatedRegistryAdapter.test.ts +409 -0
  96. package/src/agents/__tests__/NormEngine.test.ts +276 -0
  97. package/src/agents/__tests__/OrchestratorAgent.test.ts +182 -0
  98. package/src/agents/__tests__/SkillWorkflowEngine.test.ts +357 -0
  99. package/src/agents/__tests__/TaskDelegationService.test.ts +446 -0
  100. package/src/agents/index.ts +107 -0
  101. package/src/agents/spatial-comms/Layer1RealTime.ts +621 -0
  102. package/src/agents/spatial-comms/Layer2A2A.ts +661 -0
  103. package/src/agents/spatial-comms/Layer3MCP.ts +651 -0
  104. package/src/agents/spatial-comms/ProtocolTypes.ts +543 -0
  105. package/src/agents/spatial-comms/SpatialCommClient.ts +483 -0
  106. package/src/agents/spatial-comms/__tests__/performance-benchmark.test.ts +465 -0
  107. package/src/agents/spatial-comms/examples/multi-agent-world-creation.ts +409 -0
  108. package/src/agents/spatial-comms/index.ts +66 -0
  109. package/src/ai/AIAdapter.ts +313 -0
  110. package/src/ai/AICopilot.ts +331 -0
  111. package/src/ai/AIOutputValidator.ts +203 -0
  112. package/src/ai/BTNodes.ts +239 -0
  113. package/src/ai/BehaviorSelector.ts +135 -0
  114. package/src/ai/BehaviorTree.ts +153 -0
  115. package/src/ai/Blackboard.ts +165 -0
  116. package/src/ai/GenerationAnalytics.ts +461 -0
  117. package/src/ai/GenerationCache.ts +265 -0
  118. package/src/ai/GoalPlanner.ts +165 -0
  119. package/src/ai/HoloScriptGenerator.ts +580 -0
  120. package/src/ai/InfluenceMap.ts +180 -0
  121. package/src/ai/NavMesh.ts +168 -0
  122. package/src/ai/PerceptionSystem.ts +178 -0
  123. package/src/ai/PromptTemplates.ts +453 -0
  124. package/src/ai/SemanticSearchService.ts +80 -0
  125. package/src/ai/StateMachine.ts +196 -0
  126. package/src/ai/SteeringBehavior.ts +150 -0
  127. package/src/ai/SteeringBehaviors.ts +244 -0
  128. package/src/ai/TrainingDataGenerator.ts +1082 -0
  129. package/src/ai/UtilityAI.ts +145 -0
  130. package/src/ai/__tests__/AIAdapter.prod.test.ts +259 -0
  131. package/src/ai/__tests__/AIAdapter.test.ts +109 -0
  132. package/src/ai/__tests__/AICopilot.prod.test.ts +341 -0
  133. package/src/ai/__tests__/AICopilot.test.ts +178 -0
  134. package/src/ai/__tests__/AIOutputValidator.prod.test.ts +226 -0
  135. package/src/ai/__tests__/AIOutputValidator.test.ts +138 -0
  136. package/src/ai/__tests__/BTNodes.prod.test.ts +391 -0
  137. package/src/ai/__tests__/BTNodes.test.ts +263 -0
  138. package/src/ai/__tests__/BehaviorSelector.prod.test.ts +129 -0
  139. package/src/ai/__tests__/BehaviorSelector.test.ts +132 -0
  140. package/src/ai/__tests__/BehaviorTree.prod.test.ts +266 -0
  141. package/src/ai/__tests__/BehaviorTree.test.ts +216 -0
  142. package/src/ai/__tests__/Blackboard.prod.test.ts +339 -0
  143. package/src/ai/__tests__/Blackboard.test.ts +183 -0
  144. package/src/ai/__tests__/GenerationAnalytics.prod.test.ts +141 -0
  145. package/src/ai/__tests__/GenerationAnalytics.test.ts +165 -0
  146. package/src/ai/__tests__/GenerationCache.prod.test.ts +144 -0
  147. package/src/ai/__tests__/GenerationCache.test.ts +171 -0
  148. package/src/ai/__tests__/GoalPlanner.prod.test.ts +189 -0
  149. package/src/ai/__tests__/GoalPlanner.test.ts +137 -0
  150. package/src/ai/__tests__/GoalPlannerDepth.prod.test.ts +217 -0
  151. package/src/ai/__tests__/HoloScriptGenerator.test.ts +125 -0
  152. package/src/ai/__tests__/InfluenceMap.prod.test.ts +146 -0
  153. package/src/ai/__tests__/InfluenceMap.test.ts +149 -0
  154. package/src/ai/__tests__/NavMesh.prod.test.ts +141 -0
  155. package/src/ai/__tests__/NavMesh.test.ts +159 -0
  156. package/src/ai/__tests__/PerceptionSystem.prod.test.ts +135 -0
  157. package/src/ai/__tests__/PerceptionSystem.test.ts +250 -0
  158. package/src/ai/__tests__/PromptTemplates.prod.test.ts +313 -0
  159. package/src/ai/__tests__/PromptTemplates.test.ts +146 -0
  160. package/src/ai/__tests__/SemanticSearch.test.ts +37 -0
  161. package/src/ai/__tests__/StateMachine.prod.test.ts +162 -0
  162. package/src/ai/__tests__/StateMachine.test.ts +163 -0
  163. package/src/ai/__tests__/SteeringBehavior.prod.test.ts +251 -0
  164. package/src/ai/__tests__/SteeringBehavior.test.ts +135 -0
  165. package/src/ai/__tests__/SteeringBehaviors.prod.test.ts +133 -0
  166. package/src/ai/__tests__/SteeringBehaviors.test.ts +151 -0
  167. package/src/ai/__tests__/TrainingDataGenerator.prod.test.ts +286 -0
  168. package/src/ai/__tests__/TrainingDataGenerator.test.ts +286 -0
  169. package/src/ai/__tests__/UtilityAI.prod.test.ts +207 -0
  170. package/src/ai/__tests__/UtilityAI.test.ts +155 -0
  171. package/src/ai/__tests__/adapters.prod.test.ts +263 -0
  172. package/src/ai/__tests__/adapters.test.ts +320 -0
  173. package/src/ai/adapters.ts +1585 -0
  174. package/src/ai/index.ts +130 -0
  175. package/src/behavior/BehaviorPresets.ts +140 -0
  176. package/src/behavior/BehaviorTree.ts +236 -0
  177. package/src/behavior/StateMachine.ts +176 -0
  178. package/src/behavior/StateTrait.ts +67 -0
  179. package/src/behavior/index.ts +8 -0
  180. package/src/behavior.ts +8 -0
  181. package/src/board/audit.ts +284 -0
  182. package/src/board/board-ops.ts +336 -0
  183. package/src/board/board-types.ts +302 -0
  184. package/src/board/index.ts +69 -0
  185. package/src/define-agent.ts +46 -0
  186. package/src/define-team.ts +33 -0
  187. package/src/delegation.ts +265 -0
  188. package/src/distributed-claimer.ts +228 -0
  189. package/src/economy/AgentBudgetEnforcer.ts +464 -0
  190. package/src/economy/BountyManager.ts +185 -0
  191. package/src/economy/CreatorRevenueAggregator.ts +460 -0
  192. package/src/economy/InvisibleWallet.ts +82 -0
  193. package/src/economy/KnowledgeMarketplace.ts +193 -0
  194. package/src/economy/PaymentWebhookService.ts +512 -0
  195. package/src/economy/RevenueSplitter.ts +156 -0
  196. package/src/economy/SubscriptionManager.ts +546 -0
  197. package/src/economy/UnifiedBudgetOptimizer.ts +635 -0
  198. package/src/economy/UsageMeter.ts +440 -0
  199. package/src/economy/_core-stubs.ts +219 -0
  200. package/src/economy/index.ts +100 -0
  201. package/src/economy/x402-facilitator.ts +1978 -0
  202. package/src/index.ts +348 -0
  203. package/src/knowledge/__tests__/knowledge-consolidator.test.ts +444 -0
  204. package/src/knowledge/__tests__/knowledge-store-vector.test.ts +291 -0
  205. package/src/knowledge/brain.ts +167 -0
  206. package/src/knowledge/consolidation.ts +581 -0
  207. package/src/knowledge/knowledge-consolidator.ts +510 -0
  208. package/src/knowledge/knowledge-store.ts +616 -0
  209. package/src/learning/MemoryConsolidator.ts +102 -0
  210. package/src/learning/MemoryScorer.ts +69 -0
  211. package/src/learning/ProceduralCompiler.ts +45 -0
  212. package/src/learning/SemanticClusterer.ts +66 -0
  213. package/src/learning/index.ts +8 -0
  214. package/src/llm/llm-adapter.ts +159 -0
  215. package/src/mesh/index.ts +309 -0
  216. package/src/negotiation/NegotiationProtocol.ts +694 -0
  217. package/src/negotiation/NegotiationTypes.ts +473 -0
  218. package/src/negotiation/VotingMechanisms.ts +691 -0
  219. package/src/negotiation/index.ts +49 -0
  220. package/src/protocol/goal-synthesizer.ts +317 -0
  221. package/src/protocol/implementations.ts +474 -0
  222. package/src/protocol/micro-phase-decomposer.ts +299 -0
  223. package/src/protocol/micro-step-decomposer.test.ts +306 -0
  224. package/src/protocol-agent.test.ts +353 -0
  225. package/src/protocol-agent.ts +670 -0
  226. package/src/self-improve/absorb-scanner.ts +252 -0
  227. package/src/self-improve/evolution-engine.ts +149 -0
  228. package/src/self-improve/framework-absorber.ts +214 -0
  229. package/src/self-improve/index.ts +50 -0
  230. package/src/self-improve/prompt-optimizer.ts +212 -0
  231. package/src/self-improve/test-generator.ts +175 -0
  232. package/src/skill-router.ts +186 -0
  233. package/src/skills/index.ts +5 -0
  234. package/src/skills/skill-md-bridge.ts +1699 -0
  235. package/src/swarm/ACOEngine.ts +261 -0
  236. package/src/swarm/CollectiveIntelligence.ts +383 -0
  237. package/src/swarm/ContributionSynthesizer.ts +481 -0
  238. package/src/swarm/LeaderElection.ts +393 -0
  239. package/src/swarm/PSOEngine.ts +206 -0
  240. package/src/swarm/QuorumPolicy.ts +173 -0
  241. package/src/swarm/SwarmCoordinator.ts +335 -0
  242. package/src/swarm/SwarmManager.ts +442 -0
  243. package/src/swarm/SwarmMembership.ts +456 -0
  244. package/src/swarm/VotingRound.ts +255 -0
  245. package/src/swarm/__tests__/ACOEngine.prod.test.ts +164 -0
  246. package/src/swarm/__tests__/ACOEngine.test.ts +117 -0
  247. package/src/swarm/__tests__/CollectiveIntelligence.prod.test.ts +296 -0
  248. package/src/swarm/__tests__/CollectiveIntelligence.test.ts +457 -0
  249. package/src/swarm/__tests__/ContributionSynthesizer.prod.test.ts +269 -0
  250. package/src/swarm/__tests__/ContributionSynthesizer.test.ts +254 -0
  251. package/src/swarm/__tests__/LeaderElection.prod.test.ts +196 -0
  252. package/src/swarm/__tests__/LeaderElection.test.ts +151 -0
  253. package/src/swarm/__tests__/PSOEngine.prod.test.ts +162 -0
  254. package/src/swarm/__tests__/PSOEngine.test.ts +106 -0
  255. package/src/swarm/__tests__/QuorumPolicy.prod.test.ts +216 -0
  256. package/src/swarm/__tests__/QuorumPolicy.test.ts +177 -0
  257. package/src/swarm/__tests__/SwarmCoordinator.prod.test.ts +186 -0
  258. package/src/swarm/__tests__/SwarmCoordinator.test.ts +167 -0
  259. package/src/swarm/__tests__/SwarmManager.prod.test.ts +308 -0
  260. package/src/swarm/__tests__/SwarmManager.test.ts +373 -0
  261. package/src/swarm/__tests__/SwarmMembership.prod.test.ts +273 -0
  262. package/src/swarm/__tests__/SwarmMembership.test.ts +264 -0
  263. package/src/swarm/__tests__/VotingRound.prod.test.ts +233 -0
  264. package/src/swarm/__tests__/VotingRound.test.ts +174 -0
  265. package/src/swarm/analytics/SwarmInspector.ts +476 -0
  266. package/src/swarm/analytics/SwarmMetrics.ts +449 -0
  267. package/src/swarm/analytics/__tests__/SwarmInspector.prod.test.ts +366 -0
  268. package/src/swarm/analytics/__tests__/SwarmInspector.test.ts +454 -0
  269. package/src/swarm/analytics/__tests__/SwarmMetrics.prod.test.ts +254 -0
  270. package/src/swarm/analytics/__tests__/SwarmMetrics.test.ts +370 -0
  271. package/src/swarm/analytics/index.ts +7 -0
  272. package/src/swarm/index.ts +69 -0
  273. package/src/swarm/messaging/BroadcastChannel.ts +509 -0
  274. package/src/swarm/messaging/GossipProtocol.ts +565 -0
  275. package/src/swarm/messaging/SwarmEventBus.ts +443 -0
  276. package/src/swarm/messaging/__tests__/BroadcastChannel.prod.test.ts +331 -0
  277. package/src/swarm/messaging/__tests__/BroadcastChannel.test.ts +333 -0
  278. package/src/swarm/messaging/__tests__/GossipProtocol.prod.test.ts +356 -0
  279. package/src/swarm/messaging/__tests__/GossipProtocol.test.ts +437 -0
  280. package/src/swarm/messaging/__tests__/SwarmEventBus.prod.test.ts +191 -0
  281. package/src/swarm/messaging/__tests__/SwarmEventBus.test.ts +247 -0
  282. package/src/swarm/messaging/index.ts +8 -0
  283. package/src/swarm/spatial/FlockingBehavior.ts +462 -0
  284. package/src/swarm/spatial/FormationController.ts +500 -0
  285. package/src/swarm/spatial/Vector3.ts +170 -0
  286. package/src/swarm/spatial/ZoneClaiming.ts +509 -0
  287. package/src/swarm/spatial/__tests__/FlockingBehavior.prod.test.ts +239 -0
  288. package/src/swarm/spatial/__tests__/FlockingBehavior.test.ts +298 -0
  289. package/src/swarm/spatial/__tests__/FormationController.prod.test.ts +240 -0
  290. package/src/swarm/spatial/__tests__/FormationController.test.ts +297 -0
  291. package/src/swarm/spatial/__tests__/Vector3.prod.test.ts +283 -0
  292. package/src/swarm/spatial/__tests__/Vector3.test.ts +224 -0
  293. package/src/swarm/spatial/__tests__/ZoneClaiming.prod.test.ts +246 -0
  294. package/src/swarm/spatial/__tests__/ZoneClaiming.test.ts +374 -0
  295. package/src/swarm/spatial/index.ts +28 -0
  296. package/src/team.ts +1245 -0
  297. package/src/training/LRScheduler.ts +377 -0
  298. package/src/training/QualityScoringPipeline.ts +139 -0
  299. package/src/training/SoftDedup.ts +461 -0
  300. package/src/training/SparsityMonitor.ts +685 -0
  301. package/src/training/SparsityMonitorTypes.ts +209 -0
  302. package/src/training/SpatialTrainingDataGenerator.ts +1526 -0
  303. package/src/training/SpatialTrainingDataTypes.ts +216 -0
  304. package/src/training/TrainingPipelineConfig.ts +215 -0
  305. package/src/training/constants.ts +94 -0
  306. package/src/training/index.ts +138 -0
  307. package/src/training/schema.ts +147 -0
  308. package/src/training/scripts/generate-novel-use-cases-dataset.ts +272 -0
  309. package/src/training/scripts/generate-spatial-dataset.ts +521 -0
  310. package/src/training/training/data/novel-use-cases.jsonl +153 -0
  311. package/src/training/training/data/spatial-reasoning-10k.jsonl +9354 -0
  312. package/src/training/trainingmonkey/TrainingMonkeyIntegration.ts +477 -0
  313. package/src/training/trainingmonkey/TrainingMonkeyTypes.ts +230 -0
  314. package/src/training/trainingmonkey/index.ts +26 -0
  315. package/src/training/trait-mappings.ts +157 -0
  316. package/src/types/core-stubs.d.ts +113 -0
  317. package/src/types.ts +304 -0
  318. package/test-output.txt +0 -0
  319. package/test-result.json +1 -0
  320. package/tsc-errors.txt +4 -0
  321. package/tsc_output.txt +0 -0
  322. package/tsconfig.json +14 -0
  323. package/tsup-learning-esm.config.ts +12 -0
  324. package/tsup.config.ts +21 -0
  325. package/typescript-errors-2.txt +0 -0
  326. package/typescript-errors.txt +22 -0
  327. package/vitest-log-utf8.txt +268 -0
  328. package/vitest-log.txt +0 -0
  329. package/vitest.config.ts +8 -0
@@ -0,0 +1,414 @@
1
+ /**
2
+ * @holoscript/framework - Orchestrator Agent
3
+ *
4
+ * First concrete implementation of BaseAgent from the uAA2++ protocol.
5
+ * Maps the 7-phase protocol to agent orchestration concerns:
6
+ * INTAKE → discover available agents
7
+ * REFLECT → match capabilities to task requirements
8
+ * EXECUTE → delegate tasks or run workflows
9
+ * COMPRESS → summarize execution results
10
+ * REINTAKE → check delegation results, update agent status
11
+ * GROW → record delegation patterns (what worked/failed)
12
+ * EVOLVE → optimize routing preferences
13
+ *
14
+ * Part of HoloScript v5.5 "Agents as Universal Orchestrators".
15
+ */
16
+
17
+ import {
18
+ BaseAgent,
19
+ ProtocolPhase,
20
+ type AgentIdentity,
21
+ type PhaseResult,
22
+ } from '../protocol/implementations';
23
+ import { AgentRegistry, getDefaultRegistry } from './AgentRegistry';
24
+ import { FederatedRegistryAdapter, type FederatedRegistryConfig } from './FederatedRegistryAdapter';
25
+ import { TaskDelegationService, type DelegationResult } from './TaskDelegationService';
26
+ import {
27
+ SkillWorkflowEngine,
28
+ type WorkflowDefinition,
29
+ type WorkflowResult,
30
+ } from './SkillWorkflowEngine';
31
+ import type { AgentManifest } from './AgentManifest';
32
+ import type { CapabilityQuery, AgentMatch } from './CapabilityMatcher';
33
+
34
+ // =============================================================================
35
+ // CONFIGURATION
36
+ // =============================================================================
37
+
38
+ export interface OrchestratorConfig {
39
+ /** Agent name */
40
+ name: string;
41
+ /** Primary domain */
42
+ domain: string;
43
+ /** Seed URLs for federated discovery */
44
+ seedUrls?: string[];
45
+ /** Whether to auto-discover on intake (default true) */
46
+ autoDiscovery?: boolean;
47
+ /** Discovery poll interval in ms */
48
+ discoveryIntervalMs?: number;
49
+ /** Custom fetch function (for testing) */
50
+ fetchFn?: FederatedRegistryConfig['fetchFn'];
51
+ /** Local tool executor (for testing/integration) */
52
+ localExecutor?: (skillId: string, args: Record<string, unknown>) => Promise<unknown>;
53
+ }
54
+
55
+ // =============================================================================
56
+ // INTERNAL STATE
57
+ // =============================================================================
58
+
59
+ interface DelegationPattern {
60
+ agentId: string;
61
+ skillId: string;
62
+ successCount: number;
63
+ failureCount: number;
64
+ avgDurationMs: number;
65
+ lastUsed: number;
66
+ }
67
+
68
+ // =============================================================================
69
+ // ORCHESTRATOR AGENT
70
+ // =============================================================================
71
+
72
+ export class OrchestratorAgent extends BaseAgent {
73
+ readonly identity: AgentIdentity;
74
+
75
+ private registry: AgentRegistry;
76
+ private adapter: FederatedRegistryAdapter;
77
+ private delegator: TaskDelegationService;
78
+ private workflowEngine: SkillWorkflowEngine;
79
+ private config: OrchestratorConfig;
80
+
81
+ /** Learned delegation patterns (GROW phase) */
82
+ private patterns: Map<string, DelegationPattern> = new Map();
83
+ /** Routing preferences (EVOLVE phase) */
84
+ private preferences: Map<string, string> = new Map(); // skillId → preferred agentId
85
+ /** Last discovered agents */
86
+ private lastDiscovery: AgentMatch[] = [];
87
+
88
+ constructor(config: OrchestratorConfig) {
89
+ super();
90
+ this.config = config;
91
+ this.identity = {
92
+ id: `orchestrator-${config.name.toLowerCase().replace(/\s+/g, '-')}`,
93
+ name: config.name,
94
+ domain: config.domain,
95
+ version: '1.0.0',
96
+ capabilities: ['orchestrate', 'delegate', 'discover', 'workflow'],
97
+ };
98
+
99
+ this.registry = getDefaultRegistry();
100
+ this.adapter = new FederatedRegistryAdapter(this.registry, {
101
+ seedUrls: config.seedUrls || [],
102
+ pollIntervalMs: config.discoveryIntervalMs || 60_000,
103
+ fetchFn: config.fetchFn,
104
+ });
105
+ this.delegator = new TaskDelegationService(this.registry, this.adapter, {
106
+ localExecutor: config.localExecutor,
107
+ });
108
+ this.workflowEngine = new SkillWorkflowEngine();
109
+ }
110
+
111
+ // ===========================================================================
112
+ // PHASE 0: INTAKE — Discover available agents
113
+ // ===========================================================================
114
+
115
+ async intake(input: unknown): Promise<PhaseResult> {
116
+ const startTime = Date.now();
117
+ const data = input as Record<string, unknown>;
118
+
119
+ // Discover agents
120
+ if (this.config.autoDiscovery !== false) {
121
+ await this.adapter.pollAll();
122
+ }
123
+
124
+ const allAgents = this.registry.getAllManifests();
125
+ const onlineAgents = allAgents.filter((a) => a.status === 'online');
126
+
127
+ return {
128
+ phase: ProtocolPhase.INTAKE,
129
+ status: 'success',
130
+ data: {
131
+ task: data.task || 'orchestrate',
132
+ context: data,
133
+ totalAgents: allAgents.length,
134
+ onlineAgents: onlineAgents.length,
135
+ remoteAgents: this.adapter.remoteAgentCount,
136
+ agents: onlineAgents.map((a) => ({
137
+ id: a.id,
138
+ name: a.name,
139
+ capabilities: a.capabilities.map((c) => `${c.type}:${c.domain}`),
140
+ })),
141
+ },
142
+ durationMs: Date.now() - startTime,
143
+ timestamp: Date.now(),
144
+ };
145
+ }
146
+
147
+ // ===========================================================================
148
+ // PHASE 1: REFLECT — Match capabilities to task requirements
149
+ // ===========================================================================
150
+
151
+ async reflect(data: unknown): Promise<PhaseResult> {
152
+ const startTime = Date.now();
153
+ const intakeData = data as Record<string, unknown>;
154
+ const task = (intakeData.task as string) || '';
155
+
156
+ // Build a capability query from the task
157
+ const query = this.taskToQuery(task, intakeData.context as Record<string, unknown>);
158
+ this.lastDiscovery = await this.registry.discoverWithScores(query);
159
+
160
+ // Check for preferred agents from EVOLVE patterns
161
+ const preferredAgents = this.getPreferredAgents(task);
162
+
163
+ return {
164
+ phase: ProtocolPhase.REFLECT,
165
+ status: 'success',
166
+ data: {
167
+ task,
168
+ matchingAgents: this.lastDiscovery.length,
169
+ topAgent: this.lastDiscovery[0]
170
+ ? { id: this.lastDiscovery[0].manifest.id, score: this.lastDiscovery[0].score }
171
+ : null,
172
+ preferredAgents,
173
+ query,
174
+ },
175
+ durationMs: Date.now() - startTime,
176
+ timestamp: Date.now(),
177
+ };
178
+ }
179
+
180
+ // ===========================================================================
181
+ // PHASE 2: EXECUTE — Delegate tasks or run workflows
182
+ // ===========================================================================
183
+
184
+ async execute(plan: unknown): Promise<PhaseResult> {
185
+ const startTime = Date.now();
186
+ const reflectData = plan as Record<string, unknown>;
187
+ const task = (reflectData.task as string) || '';
188
+
189
+ let result: DelegationResult | WorkflowResult | null = null;
190
+ let executionType = 'none';
191
+
192
+ if (this.lastDiscovery.length > 0) {
193
+ // Simple delegation to best agent
194
+ const bestAgent = this.lastDiscovery[0].manifest;
195
+ result = await this.delegator.delegateTo({
196
+ targetAgentId: bestAgent.id,
197
+ skillId: task,
198
+ arguments: (reflectData.query as Record<string, unknown>) || {},
199
+ });
200
+ executionType = 'delegation';
201
+ }
202
+
203
+ return {
204
+ phase: ProtocolPhase.EXECUTE,
205
+ status: 'success',
206
+ data: {
207
+ executionType,
208
+ result,
209
+ task,
210
+ },
211
+ durationMs: Date.now() - startTime,
212
+ timestamp: Date.now(),
213
+ };
214
+ }
215
+
216
+ // ===========================================================================
217
+ // PHASE 3: COMPRESS — Summarize results
218
+ // ===========================================================================
219
+
220
+ async compress(results: unknown): Promise<PhaseResult> {
221
+ const startTime = Date.now();
222
+ const execData = results as Record<string, unknown>;
223
+ const result = execData.result as Record<string, unknown> | null;
224
+
225
+ return {
226
+ phase: ProtocolPhase.COMPRESS,
227
+ status: 'success',
228
+ data: {
229
+ summary: {
230
+ executionType: execData.executionType,
231
+ status: result?.status || 'no-execution',
232
+ task: execData.task,
233
+ durationMs: result?.durationMs,
234
+ },
235
+ },
236
+ durationMs: Date.now() - startTime,
237
+ timestamp: Date.now(),
238
+ };
239
+ }
240
+
241
+ // ===========================================================================
242
+ // PHASE 4: REINTAKE — Check delegation results
243
+ // ===========================================================================
244
+
245
+ async reintake(compressed: unknown): Promise<PhaseResult> {
246
+ const startTime = Date.now();
247
+ const summary = (compressed as Record<string, unknown>).summary as Record<string, unknown>;
248
+ const stats = this.delegator.getStats();
249
+
250
+ return {
251
+ phase: ProtocolPhase.REINTAKE,
252
+ status: 'success',
253
+ data: {
254
+ delegationStats: stats,
255
+ lastResult: summary,
256
+ registryHealth: this.registry.getStatusCounts(),
257
+ },
258
+ durationMs: Date.now() - startTime,
259
+ timestamp: Date.now(),
260
+ };
261
+ }
262
+
263
+ // ===========================================================================
264
+ // PHASE 5: GROW — Learn patterns from delegations
265
+ // ===========================================================================
266
+
267
+ async grow(learnings: unknown): Promise<PhaseResult> {
268
+ const startTime = Date.now();
269
+ const data = learnings as Record<string, unknown>;
270
+ const lastResult = data.lastResult as Record<string, unknown> | undefined;
271
+
272
+ // Record delegation pattern
273
+ if (lastResult?.status === 'completed') {
274
+ const key = `${lastResult.task}`;
275
+ const existing = this.patterns.get(key);
276
+ if (existing) {
277
+ existing.successCount++;
278
+ existing.avgDurationMs =
279
+ (existing.avgDurationMs + ((lastResult.durationMs as number) || 0)) / 2;
280
+ existing.lastUsed = Date.now();
281
+ } else {
282
+ this.patterns.set(key, {
283
+ agentId: 'unknown',
284
+ skillId: key,
285
+ successCount: 1,
286
+ failureCount: 0,
287
+ avgDurationMs: (lastResult.durationMs as number) || 0,
288
+ lastUsed: Date.now(),
289
+ });
290
+ }
291
+ }
292
+
293
+ return {
294
+ phase: ProtocolPhase.GROW,
295
+ status: 'success',
296
+ data: {
297
+ totalPatterns: this.patterns.size,
298
+ newPattern: lastResult?.task || null,
299
+ },
300
+ durationMs: Date.now() - startTime,
301
+ timestamp: Date.now(),
302
+ };
303
+ }
304
+
305
+ // ===========================================================================
306
+ // PHASE 6: EVOLVE — Optimize routing preferences
307
+ // ===========================================================================
308
+
309
+ async evolve(adaptations: unknown): Promise<PhaseResult> {
310
+ const startTime = Date.now();
311
+
312
+ // Update routing preferences based on patterns
313
+ for (const [skillId, pattern] of this.patterns) {
314
+ if (pattern.successCount > pattern.failureCount) {
315
+ this.preferences.set(skillId, pattern.agentId);
316
+ }
317
+ }
318
+
319
+ return {
320
+ phase: ProtocolPhase.EVOLVE,
321
+ status: 'success',
322
+ data: {
323
+ totalPreferences: this.preferences.size,
324
+ totalPatterns: this.patterns.size,
325
+ },
326
+ durationMs: Date.now() - startTime,
327
+ timestamp: Date.now(),
328
+ };
329
+ }
330
+
331
+ // ===========================================================================
332
+ // CONVENIENCE METHODS
333
+ // ===========================================================================
334
+
335
+ /**
336
+ * Delegate a task without running a full cycle.
337
+ */
338
+ async delegateTask(skillId: string, args: Record<string, unknown>): Promise<DelegationResult> {
339
+ // Check preferences first
340
+ const preferredAgentId = this.preferences.get(skillId);
341
+ if (preferredAgentId && this.registry.has(preferredAgentId)) {
342
+ return this.delegator.delegateTo({
343
+ targetAgentId: preferredAgentId,
344
+ skillId,
345
+ arguments: args,
346
+ });
347
+ }
348
+
349
+ // Auto-delegate
350
+ return this.delegator.autoDelegate({}, skillId, args);
351
+ }
352
+
353
+ /**
354
+ * Run a workflow without running a full cycle.
355
+ */
356
+ async runWorkflow(definition: WorkflowDefinition): Promise<WorkflowResult> {
357
+ const executor = this.config.localExecutor
358
+ ? async (skillId: string, inputs: Record<string, unknown>) => {
359
+ const result = await this.config.localExecutor!(skillId, inputs);
360
+ return (typeof result === 'object' && result !== null ? result : { result }) as Record<
361
+ string,
362
+ unknown
363
+ >;
364
+ }
365
+ : async (skillId: string, inputs: Record<string, unknown>) => {
366
+ return { skillId, inputs, note: 'No executor configured' } as Record<string, unknown>;
367
+ };
368
+
369
+ return this.workflowEngine.execute(definition, executor);
370
+ }
371
+
372
+ /**
373
+ * Get all discovered agents.
374
+ */
375
+ getDiscoveredAgents(): AgentManifest[] {
376
+ return this.registry.getAllManifests();
377
+ }
378
+
379
+ /**
380
+ * Get learned patterns.
381
+ */
382
+ getPatterns(): DelegationPattern[] {
383
+ return Array.from(this.patterns.values());
384
+ }
385
+
386
+ /**
387
+ * Stop polling and cleanup.
388
+ */
389
+ shutdown(): void {
390
+ this.adapter.stopPolling();
391
+ }
392
+
393
+ // ===========================================================================
394
+ // PRIVATE HELPERS
395
+ // ===========================================================================
396
+
397
+ private taskToQuery(task: string, context?: Record<string, unknown>): CapabilityQuery {
398
+ const query: CapabilityQuery = { includeOffline: false };
399
+
400
+ // Extract type/domain hints from task string
401
+ if (context?.type) query.type = context.type as string;
402
+ if (context?.domain) query.domain = context.domain as string;
403
+ if (context?.tags) query.tags = context.tags as string[];
404
+
405
+ return query;
406
+ }
407
+
408
+ private getPreferredAgents(task: string): string[] {
409
+ const preferred: string[] = [];
410
+ const agentId = this.preferences.get(task);
411
+ if (agentId) preferred.push(agentId);
412
+ return preferred;
413
+ }
414
+ }