@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.
- package/ALL-test-results.json +1 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/ROADMAP.md +175 -0
- package/dist/AgentManifest-CB4xM-Ma.d.cts +704 -0
- package/dist/AgentManifest-CB4xM-Ma.d.ts +704 -0
- package/dist/BehaviorTree-BrBFECv5.d.cts +103 -0
- package/dist/BehaviorTree-BrBFECv5.d.ts +103 -0
- package/dist/InvisibleWallet-BB6tFvRA.d.cts +1732 -0
- package/dist/InvisibleWallet-rtRrBOA8.d.ts +1732 -0
- package/dist/OrchestratorAgent-BvWgf9uw.d.cts +798 -0
- package/dist/OrchestratorAgent-Q_CbVTmO.d.ts +798 -0
- package/dist/agents/index.cjs +4790 -0
- package/dist/agents/index.d.cts +1788 -0
- package/dist/agents/index.d.ts +1788 -0
- package/dist/agents/index.js +4695 -0
- package/dist/ai/index.cjs +5347 -0
- package/dist/ai/index.d.cts +1753 -0
- package/dist/ai/index.d.ts +1753 -0
- package/dist/ai/index.js +5244 -0
- package/dist/behavior.cjs +449 -0
- package/dist/behavior.d.cts +130 -0
- package/dist/behavior.d.ts +130 -0
- package/dist/behavior.js +407 -0
- package/dist/economy/index.cjs +3659 -0
- package/dist/economy/index.d.cts +747 -0
- package/dist/economy/index.d.ts +747 -0
- package/dist/economy/index.js +3617 -0
- package/dist/implementations-D9T3un9D.d.cts +236 -0
- package/dist/implementations-D9T3un9D.d.ts +236 -0
- package/dist/index.cjs +24550 -0
- package/dist/index.d.cts +1729 -0
- package/dist/index.d.ts +1729 -0
- package/dist/index.js +24277 -0
- package/dist/learning/index.cjs +219 -0
- package/dist/learning/index.d.cts +104 -0
- package/dist/learning/index.d.ts +104 -0
- package/dist/learning/index.js +189 -0
- package/dist/negotiation/index.cjs +970 -0
- package/dist/negotiation/index.d.cts +610 -0
- package/dist/negotiation/index.d.ts +610 -0
- package/dist/negotiation/index.js +931 -0
- package/dist/skills/index.cjs +1118 -0
- package/dist/skills/index.d.cts +289 -0
- package/dist/skills/index.d.ts +289 -0
- package/dist/skills/index.js +1079 -0
- package/dist/swarm/index.cjs +5268 -0
- package/dist/swarm/index.d.cts +2433 -0
- package/dist/swarm/index.d.ts +2433 -0
- package/dist/swarm/index.js +5221 -0
- package/dist/training/index.cjs +2745 -0
- package/dist/training/index.d.cts +1734 -0
- package/dist/training/index.d.ts +1734 -0
- package/dist/training/index.js +2687 -0
- package/extract-failures.js +10 -0
- package/package.json +82 -0
- package/src/__tests__/bounty-marketplace.test.ts +374 -0
- package/src/__tests__/delegation.test.ts +144 -0
- package/src/__tests__/distributed-claimer.test.ts +147 -0
- package/src/__tests__/done-log-audit.test.ts +342 -0
- package/src/__tests__/framework.test.ts +865 -0
- package/src/__tests__/goal-synthesizer.test.ts +236 -0
- package/src/__tests__/presence.test.ts +223 -0
- package/src/__tests__/protocol-agent.test.ts +254 -0
- package/src/__tests__/revenue-splitter.test.ts +114 -0
- package/src/__tests__/scenario-driven-todo.test.ts +197 -0
- package/src/__tests__/self-improve.test.ts +349 -0
- package/src/__tests__/service-lifecycle.test.ts +237 -0
- package/src/__tests__/skill-router.test.ts +121 -0
- package/src/agents/AgentManifest.ts +493 -0
- package/src/agents/AgentRegistry.ts +475 -0
- package/src/agents/AgentTypes.ts +585 -0
- package/src/agents/AgentWalletRegistry.ts +83 -0
- package/src/agents/AuthenticatedCRDT.ts +388 -0
- package/src/agents/CapabilityMatcher.ts +453 -0
- package/src/agents/CrossRealityHandoff.ts +305 -0
- package/src/agents/CulturalMemory.ts +454 -0
- package/src/agents/FederatedRegistryAdapter.ts +429 -0
- package/src/agents/NormEngine.ts +450 -0
- package/src/agents/OrchestratorAgent.ts +414 -0
- package/src/agents/SkillWorkflowEngine.ts +472 -0
- package/src/agents/TaskDelegationService.ts +551 -0
- package/src/agents/__tests__/AgentManifest.prod.test.ts +134 -0
- package/src/agents/__tests__/AgentManifest.test.ts +182 -0
- package/src/agents/__tests__/AgentModule.test.ts +864 -0
- package/src/agents/__tests__/AgentRegistry.prod.test.ts +125 -0
- package/src/agents/__tests__/AgentRegistry.test.ts +148 -0
- package/src/agents/__tests__/AgentTypes.test.ts +534 -0
- package/src/agents/__tests__/AgentWalletRegistry.test.ts +152 -0
- package/src/agents/__tests__/AuthenticatedCRDT.test.ts +558 -0
- package/src/agents/__tests__/CapabilityMatcher.prod.test.ts +117 -0
- package/src/agents/__tests__/CapabilityMatcher.test.ts +178 -0
- package/src/agents/__tests__/CrossRealityHandoff.test.ts +402 -0
- package/src/agents/__tests__/CulturalMemory.test.ts +200 -0
- package/src/agents/__tests__/FederatedRegistryAdapter.test.ts +409 -0
- package/src/agents/__tests__/NormEngine.test.ts +276 -0
- package/src/agents/__tests__/OrchestratorAgent.test.ts +182 -0
- package/src/agents/__tests__/SkillWorkflowEngine.test.ts +357 -0
- package/src/agents/__tests__/TaskDelegationService.test.ts +446 -0
- package/src/agents/index.ts +107 -0
- package/src/agents/spatial-comms/Layer1RealTime.ts +621 -0
- package/src/agents/spatial-comms/Layer2A2A.ts +661 -0
- package/src/agents/spatial-comms/Layer3MCP.ts +651 -0
- package/src/agents/spatial-comms/ProtocolTypes.ts +543 -0
- package/src/agents/spatial-comms/SpatialCommClient.ts +483 -0
- package/src/agents/spatial-comms/__tests__/performance-benchmark.test.ts +465 -0
- package/src/agents/spatial-comms/examples/multi-agent-world-creation.ts +409 -0
- package/src/agents/spatial-comms/index.ts +66 -0
- package/src/ai/AIAdapter.ts +313 -0
- package/src/ai/AICopilot.ts +331 -0
- package/src/ai/AIOutputValidator.ts +203 -0
- package/src/ai/BTNodes.ts +239 -0
- package/src/ai/BehaviorSelector.ts +135 -0
- package/src/ai/BehaviorTree.ts +153 -0
- package/src/ai/Blackboard.ts +165 -0
- package/src/ai/GenerationAnalytics.ts +461 -0
- package/src/ai/GenerationCache.ts +265 -0
- package/src/ai/GoalPlanner.ts +165 -0
- package/src/ai/HoloScriptGenerator.ts +580 -0
- package/src/ai/InfluenceMap.ts +180 -0
- package/src/ai/NavMesh.ts +168 -0
- package/src/ai/PerceptionSystem.ts +178 -0
- package/src/ai/PromptTemplates.ts +453 -0
- package/src/ai/SemanticSearchService.ts +80 -0
- package/src/ai/StateMachine.ts +196 -0
- package/src/ai/SteeringBehavior.ts +150 -0
- package/src/ai/SteeringBehaviors.ts +244 -0
- package/src/ai/TrainingDataGenerator.ts +1082 -0
- package/src/ai/UtilityAI.ts +145 -0
- package/src/ai/__tests__/AIAdapter.prod.test.ts +259 -0
- package/src/ai/__tests__/AIAdapter.test.ts +109 -0
- package/src/ai/__tests__/AICopilot.prod.test.ts +341 -0
- package/src/ai/__tests__/AICopilot.test.ts +178 -0
- package/src/ai/__tests__/AIOutputValidator.prod.test.ts +226 -0
- package/src/ai/__tests__/AIOutputValidator.test.ts +138 -0
- package/src/ai/__tests__/BTNodes.prod.test.ts +391 -0
- package/src/ai/__tests__/BTNodes.test.ts +263 -0
- package/src/ai/__tests__/BehaviorSelector.prod.test.ts +129 -0
- package/src/ai/__tests__/BehaviorSelector.test.ts +132 -0
- package/src/ai/__tests__/BehaviorTree.prod.test.ts +266 -0
- package/src/ai/__tests__/BehaviorTree.test.ts +216 -0
- package/src/ai/__tests__/Blackboard.prod.test.ts +339 -0
- package/src/ai/__tests__/Blackboard.test.ts +183 -0
- package/src/ai/__tests__/GenerationAnalytics.prod.test.ts +141 -0
- package/src/ai/__tests__/GenerationAnalytics.test.ts +165 -0
- package/src/ai/__tests__/GenerationCache.prod.test.ts +144 -0
- package/src/ai/__tests__/GenerationCache.test.ts +171 -0
- package/src/ai/__tests__/GoalPlanner.prod.test.ts +189 -0
- package/src/ai/__tests__/GoalPlanner.test.ts +137 -0
- package/src/ai/__tests__/GoalPlannerDepth.prod.test.ts +217 -0
- package/src/ai/__tests__/HoloScriptGenerator.test.ts +125 -0
- package/src/ai/__tests__/InfluenceMap.prod.test.ts +146 -0
- package/src/ai/__tests__/InfluenceMap.test.ts +149 -0
- package/src/ai/__tests__/NavMesh.prod.test.ts +141 -0
- package/src/ai/__tests__/NavMesh.test.ts +159 -0
- package/src/ai/__tests__/PerceptionSystem.prod.test.ts +135 -0
- package/src/ai/__tests__/PerceptionSystem.test.ts +250 -0
- package/src/ai/__tests__/PromptTemplates.prod.test.ts +313 -0
- package/src/ai/__tests__/PromptTemplates.test.ts +146 -0
- package/src/ai/__tests__/SemanticSearch.test.ts +37 -0
- package/src/ai/__tests__/StateMachine.prod.test.ts +162 -0
- package/src/ai/__tests__/StateMachine.test.ts +163 -0
- package/src/ai/__tests__/SteeringBehavior.prod.test.ts +251 -0
- package/src/ai/__tests__/SteeringBehavior.test.ts +135 -0
- package/src/ai/__tests__/SteeringBehaviors.prod.test.ts +133 -0
- package/src/ai/__tests__/SteeringBehaviors.test.ts +151 -0
- package/src/ai/__tests__/TrainingDataGenerator.prod.test.ts +286 -0
- package/src/ai/__tests__/TrainingDataGenerator.test.ts +286 -0
- package/src/ai/__tests__/UtilityAI.prod.test.ts +207 -0
- package/src/ai/__tests__/UtilityAI.test.ts +155 -0
- package/src/ai/__tests__/adapters.prod.test.ts +263 -0
- package/src/ai/__tests__/adapters.test.ts +320 -0
- package/src/ai/adapters.ts +1585 -0
- package/src/ai/index.ts +130 -0
- package/src/behavior/BehaviorPresets.ts +140 -0
- package/src/behavior/BehaviorTree.ts +236 -0
- package/src/behavior/StateMachine.ts +176 -0
- package/src/behavior/StateTrait.ts +67 -0
- package/src/behavior/index.ts +8 -0
- package/src/behavior.ts +8 -0
- package/src/board/audit.ts +284 -0
- package/src/board/board-ops.ts +336 -0
- package/src/board/board-types.ts +302 -0
- package/src/board/index.ts +69 -0
- package/src/define-agent.ts +46 -0
- package/src/define-team.ts +33 -0
- package/src/delegation.ts +265 -0
- package/src/distributed-claimer.ts +228 -0
- package/src/economy/AgentBudgetEnforcer.ts +464 -0
- package/src/economy/BountyManager.ts +185 -0
- package/src/economy/CreatorRevenueAggregator.ts +460 -0
- package/src/economy/InvisibleWallet.ts +82 -0
- package/src/economy/KnowledgeMarketplace.ts +193 -0
- package/src/economy/PaymentWebhookService.ts +512 -0
- package/src/economy/RevenueSplitter.ts +156 -0
- package/src/economy/SubscriptionManager.ts +546 -0
- package/src/economy/UnifiedBudgetOptimizer.ts +635 -0
- package/src/economy/UsageMeter.ts +440 -0
- package/src/economy/_core-stubs.ts +219 -0
- package/src/economy/index.ts +100 -0
- package/src/economy/x402-facilitator.ts +1978 -0
- package/src/index.ts +348 -0
- package/src/knowledge/__tests__/knowledge-consolidator.test.ts +444 -0
- package/src/knowledge/__tests__/knowledge-store-vector.test.ts +291 -0
- package/src/knowledge/brain.ts +167 -0
- package/src/knowledge/consolidation.ts +581 -0
- package/src/knowledge/knowledge-consolidator.ts +510 -0
- package/src/knowledge/knowledge-store.ts +616 -0
- package/src/learning/MemoryConsolidator.ts +102 -0
- package/src/learning/MemoryScorer.ts +69 -0
- package/src/learning/ProceduralCompiler.ts +45 -0
- package/src/learning/SemanticClusterer.ts +66 -0
- package/src/learning/index.ts +8 -0
- package/src/llm/llm-adapter.ts +159 -0
- package/src/mesh/index.ts +309 -0
- package/src/negotiation/NegotiationProtocol.ts +694 -0
- package/src/negotiation/NegotiationTypes.ts +473 -0
- package/src/negotiation/VotingMechanisms.ts +691 -0
- package/src/negotiation/index.ts +49 -0
- package/src/protocol/goal-synthesizer.ts +317 -0
- package/src/protocol/implementations.ts +474 -0
- package/src/protocol/micro-phase-decomposer.ts +299 -0
- package/src/protocol/micro-step-decomposer.test.ts +306 -0
- package/src/protocol-agent.test.ts +353 -0
- package/src/protocol-agent.ts +670 -0
- package/src/self-improve/absorb-scanner.ts +252 -0
- package/src/self-improve/evolution-engine.ts +149 -0
- package/src/self-improve/framework-absorber.ts +214 -0
- package/src/self-improve/index.ts +50 -0
- package/src/self-improve/prompt-optimizer.ts +212 -0
- package/src/self-improve/test-generator.ts +175 -0
- package/src/skill-router.ts +186 -0
- package/src/skills/index.ts +5 -0
- package/src/skills/skill-md-bridge.ts +1699 -0
- package/src/swarm/ACOEngine.ts +261 -0
- package/src/swarm/CollectiveIntelligence.ts +383 -0
- package/src/swarm/ContributionSynthesizer.ts +481 -0
- package/src/swarm/LeaderElection.ts +393 -0
- package/src/swarm/PSOEngine.ts +206 -0
- package/src/swarm/QuorumPolicy.ts +173 -0
- package/src/swarm/SwarmCoordinator.ts +335 -0
- package/src/swarm/SwarmManager.ts +442 -0
- package/src/swarm/SwarmMembership.ts +456 -0
- package/src/swarm/VotingRound.ts +255 -0
- package/src/swarm/__tests__/ACOEngine.prod.test.ts +164 -0
- package/src/swarm/__tests__/ACOEngine.test.ts +117 -0
- package/src/swarm/__tests__/CollectiveIntelligence.prod.test.ts +296 -0
- package/src/swarm/__tests__/CollectiveIntelligence.test.ts +457 -0
- package/src/swarm/__tests__/ContributionSynthesizer.prod.test.ts +269 -0
- package/src/swarm/__tests__/ContributionSynthesizer.test.ts +254 -0
- package/src/swarm/__tests__/LeaderElection.prod.test.ts +196 -0
- package/src/swarm/__tests__/LeaderElection.test.ts +151 -0
- package/src/swarm/__tests__/PSOEngine.prod.test.ts +162 -0
- package/src/swarm/__tests__/PSOEngine.test.ts +106 -0
- package/src/swarm/__tests__/QuorumPolicy.prod.test.ts +216 -0
- package/src/swarm/__tests__/QuorumPolicy.test.ts +177 -0
- package/src/swarm/__tests__/SwarmCoordinator.prod.test.ts +186 -0
- package/src/swarm/__tests__/SwarmCoordinator.test.ts +167 -0
- package/src/swarm/__tests__/SwarmManager.prod.test.ts +308 -0
- package/src/swarm/__tests__/SwarmManager.test.ts +373 -0
- package/src/swarm/__tests__/SwarmMembership.prod.test.ts +273 -0
- package/src/swarm/__tests__/SwarmMembership.test.ts +264 -0
- package/src/swarm/__tests__/VotingRound.prod.test.ts +233 -0
- package/src/swarm/__tests__/VotingRound.test.ts +174 -0
- package/src/swarm/analytics/SwarmInspector.ts +476 -0
- package/src/swarm/analytics/SwarmMetrics.ts +449 -0
- package/src/swarm/analytics/__tests__/SwarmInspector.prod.test.ts +366 -0
- package/src/swarm/analytics/__tests__/SwarmInspector.test.ts +454 -0
- package/src/swarm/analytics/__tests__/SwarmMetrics.prod.test.ts +254 -0
- package/src/swarm/analytics/__tests__/SwarmMetrics.test.ts +370 -0
- package/src/swarm/analytics/index.ts +7 -0
- package/src/swarm/index.ts +69 -0
- package/src/swarm/messaging/BroadcastChannel.ts +509 -0
- package/src/swarm/messaging/GossipProtocol.ts +565 -0
- package/src/swarm/messaging/SwarmEventBus.ts +443 -0
- package/src/swarm/messaging/__tests__/BroadcastChannel.prod.test.ts +331 -0
- package/src/swarm/messaging/__tests__/BroadcastChannel.test.ts +333 -0
- package/src/swarm/messaging/__tests__/GossipProtocol.prod.test.ts +356 -0
- package/src/swarm/messaging/__tests__/GossipProtocol.test.ts +437 -0
- package/src/swarm/messaging/__tests__/SwarmEventBus.prod.test.ts +191 -0
- package/src/swarm/messaging/__tests__/SwarmEventBus.test.ts +247 -0
- package/src/swarm/messaging/index.ts +8 -0
- package/src/swarm/spatial/FlockingBehavior.ts +462 -0
- package/src/swarm/spatial/FormationController.ts +500 -0
- package/src/swarm/spatial/Vector3.ts +170 -0
- package/src/swarm/spatial/ZoneClaiming.ts +509 -0
- package/src/swarm/spatial/__tests__/FlockingBehavior.prod.test.ts +239 -0
- package/src/swarm/spatial/__tests__/FlockingBehavior.test.ts +298 -0
- package/src/swarm/spatial/__tests__/FormationController.prod.test.ts +240 -0
- package/src/swarm/spatial/__tests__/FormationController.test.ts +297 -0
- package/src/swarm/spatial/__tests__/Vector3.prod.test.ts +283 -0
- package/src/swarm/spatial/__tests__/Vector3.test.ts +224 -0
- package/src/swarm/spatial/__tests__/ZoneClaiming.prod.test.ts +246 -0
- package/src/swarm/spatial/__tests__/ZoneClaiming.test.ts +374 -0
- package/src/swarm/spatial/index.ts +28 -0
- package/src/team.ts +1245 -0
- package/src/training/LRScheduler.ts +377 -0
- package/src/training/QualityScoringPipeline.ts +139 -0
- package/src/training/SoftDedup.ts +461 -0
- package/src/training/SparsityMonitor.ts +685 -0
- package/src/training/SparsityMonitorTypes.ts +209 -0
- package/src/training/SpatialTrainingDataGenerator.ts +1526 -0
- package/src/training/SpatialTrainingDataTypes.ts +216 -0
- package/src/training/TrainingPipelineConfig.ts +215 -0
- package/src/training/constants.ts +94 -0
- package/src/training/index.ts +138 -0
- package/src/training/schema.ts +147 -0
- package/src/training/scripts/generate-novel-use-cases-dataset.ts +272 -0
- package/src/training/scripts/generate-spatial-dataset.ts +521 -0
- package/src/training/training/data/novel-use-cases.jsonl +153 -0
- package/src/training/training/data/spatial-reasoning-10k.jsonl +9354 -0
- package/src/training/trainingmonkey/TrainingMonkeyIntegration.ts +477 -0
- package/src/training/trainingmonkey/TrainingMonkeyTypes.ts +230 -0
- package/src/training/trainingmonkey/index.ts +26 -0
- package/src/training/trait-mappings.ts +157 -0
- package/src/types/core-stubs.d.ts +113 -0
- package/src/types.ts +304 -0
- package/test-output.txt +0 -0
- package/test-result.json +1 -0
- package/tsc-errors.txt +4 -0
- package/tsc_output.txt +0 -0
- package/tsconfig.json +14 -0
- package/tsup-learning-esm.config.ts +12 -0
- package/tsup.config.ts +21 -0
- package/typescript-errors-2.txt +0 -0
- package/typescript-errors.txt +22 -0
- package/vitest-log-utf8.txt +268 -0
- package/vitest-log.txt +0 -0
- 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
|
+
}
|