@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,651 @@
1
+ /**
2
+ * @holoscript/core - Layer 3: MCP Metadata Layer
3
+ *
4
+ * Model Context Protocol integration for high-level commands and tool access.
5
+ * Features:
6
+ * - World creation and management
7
+ * - Agent registry queries
8
+ * - Performance metrics collection
9
+ * - Global configuration
10
+ * - System event triggering
11
+ */
12
+
13
+ import { EventEmitter } from 'events';
14
+ import { DEFAULT_MCP_CONFIG } from './ProtocolTypes';
15
+ import type {
16
+ MCPCommandType,
17
+ MCPCommandRequest,
18
+ MCPCommandResponse,
19
+ MCPProtocolConfig,
20
+ WorldSpec,
21
+ WorldStatus,
22
+ PerformanceMetrics,
23
+ ExportFormat,
24
+ } from './ProtocolTypes';
25
+
26
+ // ============================================================================
27
+ // MCP TOOL DEFINITIONS
28
+ // ============================================================================
29
+
30
+ /**
31
+ * MCP tool definition
32
+ */
33
+ export interface MCPTool {
34
+ name: string;
35
+ description: string;
36
+ parameters: {
37
+ type: 'object';
38
+ properties: Record<string, any>;
39
+ required?: string[];
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Available MCP tools for spatial agent communication
45
+ */
46
+ export const SPATIAL_MCP_TOOLS: MCPTool[] = [
47
+ {
48
+ name: 'create_world',
49
+ description: 'Create a new VR world with multi-agent support',
50
+ parameters: {
51
+ type: 'object',
52
+ properties: {
53
+ world_spec: {
54
+ type: 'object',
55
+ description: 'World specification including dimensions, features, and agent roles',
56
+ },
57
+ },
58
+ required: ['world_spec'],
59
+ },
60
+ },
61
+ {
62
+ name: 'get_world_status',
63
+ description: 'Get current status of a VR world including agent activity and performance',
64
+ parameters: {
65
+ type: 'object',
66
+ properties: {
67
+ world_id: {
68
+ type: 'string',
69
+ description: 'ID of the world to query',
70
+ },
71
+ },
72
+ required: ['world_id'],
73
+ },
74
+ },
75
+ {
76
+ name: 'export_world',
77
+ description: 'Export VR world to specified format',
78
+ parameters: {
79
+ type: 'object',
80
+ properties: {
81
+ world_id: {
82
+ type: 'string',
83
+ description: 'ID of the world to export',
84
+ },
85
+ format: {
86
+ type: 'string',
87
+ enum: ['gltf', 'fbx', 'usdz', 'vrm', 'json', 'holoscript'],
88
+ description: 'Export format',
89
+ },
90
+ },
91
+ required: ['world_id', 'format'],
92
+ },
93
+ },
94
+ {
95
+ name: 'get_agent_registry',
96
+ description: 'Get all registered agents in the spatial communication system',
97
+ parameters: {
98
+ type: 'object',
99
+ properties: {
100
+ filter: {
101
+ type: 'object',
102
+ description: 'Optional filter criteria (status, role, etc.)',
103
+ },
104
+ },
105
+ },
106
+ },
107
+ {
108
+ name: 'get_performance_metrics',
109
+ description: 'Get real-time performance metrics for agents and system',
110
+ parameters: {
111
+ type: 'object',
112
+ properties: {
113
+ world_id: {
114
+ type: 'string',
115
+ description: 'Optional world ID to filter metrics',
116
+ },
117
+ agent_id: {
118
+ type: 'string',
119
+ description: 'Optional agent ID to filter metrics',
120
+ },
121
+ },
122
+ },
123
+ },
124
+ {
125
+ name: 'set_global_config',
126
+ description: 'Set global configuration for spatial communication system',
127
+ parameters: {
128
+ type: 'object',
129
+ properties: {
130
+ config: {
131
+ type: 'object',
132
+ description: 'Configuration object with settings to update',
133
+ },
134
+ },
135
+ required: ['config'],
136
+ },
137
+ },
138
+ {
139
+ name: 'trigger_event',
140
+ description: 'Trigger a system-wide event for agent coordination',
141
+ parameters: {
142
+ type: 'object',
143
+ properties: {
144
+ event_type: {
145
+ type: 'string',
146
+ description: 'Type of event to trigger',
147
+ },
148
+ event_data: {
149
+ type: 'object',
150
+ description: 'Event payload data',
151
+ },
152
+ },
153
+ required: ['event_type'],
154
+ },
155
+ },
156
+ ];
157
+
158
+ // ============================================================================
159
+ // LAYER 3 CLIENT
160
+ // ============================================================================
161
+
162
+ /**
163
+ * Layer 3 MCP Metadata Client
164
+ */
165
+ export class Layer3MCPClient extends EventEmitter {
166
+ private config: MCPProtocolConfig;
167
+ private agentId: string;
168
+
169
+ constructor(agentId: string, config?: Partial<MCPProtocolConfig>) {
170
+ super();
171
+ this.agentId = agentId;
172
+ this.config = { ...DEFAULT_MCP_CONFIG, ...config } as MCPProtocolConfig;
173
+ }
174
+
175
+ /**
176
+ * Execute MCP command
177
+ */
178
+ async execute(command: MCPCommandType, params: Record<string, any>): Promise<MCPCommandResponse> {
179
+ const request: MCPCommandRequest = {
180
+ command,
181
+ params,
182
+ };
183
+
184
+ try {
185
+ const response = await this.sendMCPRequest(request);
186
+ this.emit('command_success', { command, params, response });
187
+ return response;
188
+ } catch (error) {
189
+ this.emit('command_error', { command, params, error });
190
+ throw error;
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Create new VR world
196
+ */
197
+ async createWorld(worldSpec: WorldSpec): Promise<{ world_id: string; status: WorldStatus }> {
198
+ const response = await this.execute('create_world', { world_spec: worldSpec });
199
+
200
+ if (!response.success) {
201
+ throw new Error(response.error || 'Failed to create world');
202
+ }
203
+
204
+ return response.data as { world_id: string; status: WorldStatus };
205
+ }
206
+
207
+ /**
208
+ * Get world status
209
+ */
210
+ async getWorldStatus(worldId: string): Promise<WorldStatus> {
211
+ const response = await this.execute('get_world_status', { world_id: worldId });
212
+
213
+ if (!response.success) {
214
+ throw new Error(response.error || 'Failed to get world status');
215
+ }
216
+
217
+ return response.data as WorldStatus;
218
+ }
219
+
220
+ /**
221
+ * Export world
222
+ */
223
+ async exportWorld(worldId: string, format: ExportFormat): Promise<{ url: string; size: number }> {
224
+ const response = await this.execute('export_world', { world_id: worldId, format });
225
+
226
+ if (!response.success) {
227
+ throw new Error(response.error || 'Failed to export world');
228
+ }
229
+
230
+ return response.data as { url: string; size: number };
231
+ }
232
+
233
+ /**
234
+ * Get agent registry
235
+ */
236
+ async getAgentRegistry(filter?: {
237
+ status?: 'online' | 'offline' | 'degraded';
238
+ role?: string;
239
+ world_id?: string;
240
+ }): Promise<{
241
+ agents: Array<{
242
+ agent_id: string;
243
+ role: string;
244
+ status: 'online' | 'offline' | 'degraded';
245
+ world_id?: string;
246
+ capabilities: string[];
247
+ }>;
248
+ total: number;
249
+ }> {
250
+ const response = await this.execute('get_agent_registry', { filter });
251
+
252
+ if (!response.success) {
253
+ throw new Error(response.error || 'Failed to get agent registry');
254
+ }
255
+
256
+ return response.data as { agents: Array<{ agent_id: string; role: string; status: 'online' | 'offline' | 'degraded'; world_id?: string; capabilities: string[] }>; total: number };
257
+ }
258
+
259
+ /**
260
+ * Get performance metrics
261
+ */
262
+ async getPerformanceMetrics(options?: {
263
+ world_id?: string;
264
+ agent_id?: string;
265
+ }): Promise<PerformanceMetrics> {
266
+ const response = await this.execute('get_performance_metrics', options || {});
267
+
268
+ if (!response.success) {
269
+ throw new Error(response.error || 'Failed to get performance metrics');
270
+ }
271
+
272
+ return response.data as PerformanceMetrics;
273
+ }
274
+
275
+ /**
276
+ * Set global configuration
277
+ */
278
+ async setGlobalConfig(config: {
279
+ target_fps?: number;
280
+ max_agents?: number;
281
+ quality_level?: 'high' | 'medium' | 'low' | 'minimal';
282
+ enable_spatial_audio?: boolean;
283
+ enable_physics?: boolean;
284
+ }): Promise<void> {
285
+ const response = await this.execute('set_global_config', { config });
286
+
287
+ if (!response.success) {
288
+ throw new Error(response.error || 'Failed to set global config');
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Trigger system event
294
+ */
295
+ async triggerEvent(eventType: string, eventData?: Record<string, any>): Promise<void> {
296
+ const response = await this.execute('trigger_event', {
297
+ event_type: eventType,
298
+ event_data: eventData,
299
+ });
300
+
301
+ if (!response.success) {
302
+ throw new Error(response.error || 'Failed to trigger event');
303
+ }
304
+ }
305
+
306
+ /**
307
+ * Call MCP tool directly
308
+ */
309
+ async callTool(
310
+ server: string,
311
+ tool: string,
312
+ args: Record<string, any>
313
+ ): Promise<MCPCommandResponse> {
314
+ try {
315
+ const response = await this.mcpToolCall(server, tool, args);
316
+ this.emit('tool_call_success', { server, tool, args, response });
317
+ return {
318
+ success: true,
319
+ data: response,
320
+ timestamp: Date.now(),
321
+ };
322
+ } catch (error) {
323
+ this.emit('tool_call_error', { server, tool, args, error });
324
+ return {
325
+ success: false,
326
+ error: (error as Error).message,
327
+ timestamp: Date.now(),
328
+ };
329
+ }
330
+ }
331
+
332
+ /**
333
+ * Get available MCP tools
334
+ */
335
+ getAvailableTools(): MCPTool[] {
336
+ return SPATIAL_MCP_TOOLS;
337
+ }
338
+
339
+ /**
340
+ * Send MCP request
341
+ */
342
+ private async sendMCPRequest(request: MCPCommandRequest): Promise<MCPCommandResponse> {
343
+ const controller = new AbortController();
344
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
345
+
346
+ try {
347
+ const response = await fetch(`${this.config.endpoint}/mcp/command`, {
348
+ method: 'POST',
349
+ headers: {
350
+ 'Content-Type': 'application/json',
351
+ 'x-mcp-api-key': this.config.apiKey,
352
+ 'x-agent-id': this.agentId,
353
+ },
354
+ body: JSON.stringify(request),
355
+ signal: controller.signal,
356
+ });
357
+
358
+ if (!response.ok) {
359
+ throw new Error(`MCP HTTP ${response.status}: ${response.statusText}`);
360
+ }
361
+
362
+ const data = await response.json();
363
+ return data as MCPCommandResponse;
364
+ } finally {
365
+ clearTimeout(timeoutId);
366
+ }
367
+ }
368
+
369
+ /**
370
+ * Call MCP tool via orchestrator
371
+ */
372
+ private async mcpToolCall(server: string, tool: string, args: Record<string, any>): Promise<any> {
373
+ const controller = new AbortController();
374
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
375
+
376
+ try {
377
+ const response = await fetch(`${this.config.endpoint}/tools/call`, {
378
+ method: 'POST',
379
+ headers: {
380
+ 'Content-Type': 'application/json',
381
+ 'x-mcp-api-key': this.config.apiKey,
382
+ },
383
+ body: JSON.stringify({
384
+ server,
385
+ tool,
386
+ args,
387
+ }),
388
+ signal: controller.signal,
389
+ });
390
+
391
+ if (!response.ok) {
392
+ throw new Error(`MCP Tool Call HTTP ${response.status}: ${response.statusText}`);
393
+ }
394
+
395
+ const data = await response.json();
396
+ return data;
397
+ } finally {
398
+ clearTimeout(timeoutId);
399
+ }
400
+ }
401
+ }
402
+
403
+ // ============================================================================
404
+ // MCP SERVER (Backend)
405
+ // ============================================================================
406
+
407
+ /**
408
+ * MCP command handler
409
+ */
410
+ export type MCPCommandHandler = (
411
+ params: Record<string, any>,
412
+ context: { agent_id: string }
413
+ ) => Promise<any>;
414
+
415
+ /**
416
+ * Layer 3 MCP Server
417
+ * Handles incoming MCP commands from agents
418
+ */
419
+ export class Layer3MCPServer extends EventEmitter {
420
+ private handlers: Map<MCPCommandType, MCPCommandHandler> = new Map();
421
+ private worlds: Map<string, WorldStatus> = new Map();
422
+
423
+ constructor() {
424
+ super();
425
+ this.registerDefaultHandlers();
426
+ }
427
+
428
+ /**
429
+ * Register command handler
430
+ */
431
+ registerHandler(command: MCPCommandType, handler: MCPCommandHandler): void {
432
+ this.handlers.set(command, handler);
433
+ }
434
+
435
+ /**
436
+ * Handle incoming MCP request
437
+ */
438
+ async handleRequest(
439
+ request: MCPCommandRequest,
440
+ context: { agent_id: string }
441
+ ): Promise<MCPCommandResponse> {
442
+ try {
443
+ const handler = this.handlers.get(request.command);
444
+
445
+ if (!handler) {
446
+ return {
447
+ success: false,
448
+ error: `Unknown command: ${request.command}`,
449
+ timestamp: Date.now(),
450
+ };
451
+ }
452
+
453
+ const data = await handler(request.params, context);
454
+
455
+ this.emit('command_handled', { request, context, data });
456
+
457
+ return {
458
+ success: true,
459
+ data,
460
+ timestamp: Date.now(),
461
+ };
462
+ } catch (error) {
463
+ this.emit('command_error', { request, context, error });
464
+
465
+ return {
466
+ success: false,
467
+ error: (error as Error).message,
468
+ timestamp: Date.now(),
469
+ };
470
+ }
471
+ }
472
+
473
+ /**
474
+ * Register default handlers
475
+ */
476
+ private registerDefaultHandlers(): void {
477
+ // Create world handler
478
+ this.registerHandler('create_world', async (params, context) => {
479
+ const worldSpec = params.world_spec as WorldSpec;
480
+
481
+ const worldId = worldSpec.world_id || `world-${Date.now()}`;
482
+
483
+ const status: WorldStatus = {
484
+ world_id: worldId,
485
+ name: worldSpec.name,
486
+ status: 'initializing',
487
+ active_agents: [],
488
+ performance: {
489
+ current_fps: worldSpec.target_fps,
490
+ target_fps: worldSpec.target_fps,
491
+ frame_time_avg_ms: 1000 / worldSpec.target_fps,
492
+ frame_time_max_ms: 1000 / worldSpec.target_fps,
493
+ quality_level: 'high',
494
+ },
495
+ spatial_conflicts: 0,
496
+ resource_utilization: {
497
+ cpu_percent: 0,
498
+ memory_mb: 0,
499
+ gpu_percent: 0,
500
+ },
501
+ uptime_ms: 0,
502
+ created_at: new Date().toISOString(),
503
+ };
504
+
505
+ this.worlds.set(worldId, status);
506
+
507
+ this.emit('world_created', { worldId, worldSpec, context });
508
+
509
+ return { world_id: worldId, status };
510
+ });
511
+
512
+ // Get world status handler
513
+ this.registerHandler('get_world_status', async (params, context) => {
514
+ const worldId = params.world_id as string;
515
+ const status = this.worlds.get(worldId);
516
+
517
+ if (!status) {
518
+ throw new Error(`World not found: ${worldId}`);
519
+ }
520
+
521
+ return status;
522
+ });
523
+
524
+ // Export world handler
525
+ this.registerHandler('export_world', async (params, context) => {
526
+ const worldId = params.world_id as string;
527
+ const format = params.format as ExportFormat;
528
+
529
+ const world = this.worlds.get(worldId);
530
+ if (!world) {
531
+ throw new Error(`World not found: ${worldId}`);
532
+ }
533
+
534
+ this.emit('world_exported', { worldId, format, context });
535
+
536
+ // Simulate export
537
+ return {
538
+ url: `https://hololand.io/exports/${worldId}.${format}`,
539
+ size: 1024 * 1024 * 10, // 10MB
540
+ };
541
+ });
542
+
543
+ // Get agent registry handler
544
+ this.registerHandler('get_agent_registry', async (params, context) => {
545
+ const filter = params.filter as Record<string, unknown> | undefined;
546
+
547
+ // Get all agents from worlds
548
+ const agents: Record<string, unknown>[] = [];
549
+
550
+ for (const world of this.worlds.values()) {
551
+ for (const agent of world.active_agents) {
552
+ if (filter) {
553
+ if (filter.status && agent.status !== filter.status) continue;
554
+ if (filter.role && agent.role !== filter.role) continue;
555
+ if (filter.world_id && world.world_id !== filter.world_id) continue;
556
+ }
557
+
558
+ agents.push({
559
+ ...agent,
560
+ world_id: world.world_id,
561
+ capabilities: [],
562
+ });
563
+ }
564
+ }
565
+
566
+ return {
567
+ agents,
568
+ total: agents.length,
569
+ };
570
+ });
571
+
572
+ // Get performance metrics handler
573
+ this.registerHandler('get_performance_metrics', async (params, context) => {
574
+ const worldId = params.world_id as string | undefined;
575
+ const agentId = params.agent_id as string | undefined;
576
+
577
+ // Aggregate metrics from worlds
578
+ const metrics: PerformanceMetrics = {
579
+ timestamp: Date.now(),
580
+ agents: [],
581
+ system: {
582
+ total_fps: 90,
583
+ target_fps: 90,
584
+ frame_time_avg_ms: 11.1,
585
+ frame_time_max_ms: 15,
586
+ quality_level: 'high',
587
+ cpu_percent: 45,
588
+ memory_mb: 2048,
589
+ gpu_percent: 60,
590
+ },
591
+ };
592
+
593
+ for (const world of this.worlds.values()) {
594
+ if (worldId && world.world_id !== worldId) continue;
595
+
596
+ for (const agent of world.active_agents) {
597
+ if (agentId && agent.agent_id !== agentId) continue;
598
+
599
+ metrics.agents.push({
600
+ agent_id: agent.agent_id,
601
+ role: agent.role,
602
+ frame_time_avg_ms: 10,
603
+ frame_time_max_ms: 12,
604
+ messages_sent: 0,
605
+ messages_received: 0,
606
+ spatial_conflicts: 0,
607
+ });
608
+ }
609
+ }
610
+
611
+ return metrics;
612
+ });
613
+
614
+ // Set global config handler
615
+ this.registerHandler('set_global_config', async (params, context) => {
616
+ const config = params.config as Record<string, unknown>;
617
+
618
+ this.emit('config_updated', { config, context });
619
+
620
+ return { success: true };
621
+ });
622
+
623
+ // Trigger event handler
624
+ this.registerHandler('trigger_event', async (params, context) => {
625
+ const eventType = params.event_type as string;
626
+ const eventData = params.event_data as Record<string, unknown>;
627
+
628
+ this.emit('system_event', { eventType, eventData, context });
629
+
630
+ return { success: true };
631
+ });
632
+ }
633
+
634
+ /**
635
+ * Get all worlds
636
+ */
637
+ getWorlds(): WorldStatus[] {
638
+ return Array.from(this.worlds.values());
639
+ }
640
+
641
+ /**
642
+ * Update world status
643
+ */
644
+ updateWorld(worldId: string, updates: Partial<WorldStatus>): void {
645
+ const world = this.worlds.get(worldId);
646
+ if (world) {
647
+ Object.assign(world, updates);
648
+ this.emit('world_updated', { worldId, updates });
649
+ }
650
+ }
651
+ }