@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,409 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example: Multi-Agent VR World Creation with 90fps Performance
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates how to use the three-layer spatial agent
|
|
5
|
+
* communication stack to create a VR world with multiple specialized agents
|
|
6
|
+
* working together while maintaining 90fps performance.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { SpatialCommClient, WorldSpec, TaskSpec } from '../index';
|
|
10
|
+
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// AGENT ROLES
|
|
13
|
+
// ============================================================================
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Terrain Agent - Handles terrain generation and updates
|
|
17
|
+
*/
|
|
18
|
+
class TerrainAgent {
|
|
19
|
+
private client: SpatialCommClient;
|
|
20
|
+
|
|
21
|
+
constructor(agentId: string) {
|
|
22
|
+
this.client = new SpatialCommClient(agentId);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async init(): Promise<void> {
|
|
26
|
+
await this.client.init();
|
|
27
|
+
|
|
28
|
+
// Register task handlers
|
|
29
|
+
this.client.on('layer2:message', async (message) => {
|
|
30
|
+
if (message.type === 'task_assignment' && message.task.task_type === 'terrain') {
|
|
31
|
+
await this.handleTerrainTask(message.task);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
console.log('[TerrainAgent] Initialized');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async handleTerrainTask(task: TaskSpec): Promise<void> {
|
|
39
|
+
console.log(`[TerrainAgent] Generating terrain for region:`, task.spatial_region);
|
|
40
|
+
|
|
41
|
+
const startTime = performance.now();
|
|
42
|
+
|
|
43
|
+
// Claim spatial region
|
|
44
|
+
if (task.spatial_region) {
|
|
45
|
+
await this.client.claimSpatialRegion(
|
|
46
|
+
`terrain-${task.task_id}`,
|
|
47
|
+
{
|
|
48
|
+
min: [
|
|
49
|
+
task.spatial_region.center[0] - task.spatial_region.size[0] / 2,
|
|
50
|
+
task.spatial_region.center[1] - task.spatial_region.size[1] / 2,
|
|
51
|
+
task.spatial_region.center[2] - task.spatial_region.size[2] / 2,
|
|
52
|
+
],
|
|
53
|
+
max: [
|
|
54
|
+
task.spatial_region.center[0] + task.spatial_region.size[0] / 2,
|
|
55
|
+
task.spatial_region.center[1] + task.spatial_region.size[1] / 2,
|
|
56
|
+
task.spatial_region.center[2] + task.spatial_region.size[2] / 2,
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
task.priority,
|
|
60
|
+
30000 // 30 second claim
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Simulate terrain generation with frame budget awareness
|
|
65
|
+
for (let i = 0; i < 100; i++) {
|
|
66
|
+
const frameStart = performance.now();
|
|
67
|
+
|
|
68
|
+
// Do terrain work...
|
|
69
|
+
await this.generateTerrainChunk(i);
|
|
70
|
+
|
|
71
|
+
// Record frame time
|
|
72
|
+
const frameTime = performance.now() - frameStart;
|
|
73
|
+
this.client.recordFrameTime(frameTime);
|
|
74
|
+
|
|
75
|
+
// Sync position every frame
|
|
76
|
+
await this.client.syncPosition(
|
|
77
|
+
[task.spatial_region?.center[0] || 0, 0, 0],
|
|
78
|
+
[0, 0, 0, 1],
|
|
79
|
+
[1, 1, 1]
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
// Send frame budget update every 10 frames
|
|
83
|
+
if (i % 10 === 0) {
|
|
84
|
+
await this.client.sendFrameBudget();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Check if we're over budget
|
|
88
|
+
const stats = this.client.getFrameBudgetStats();
|
|
89
|
+
if (!stats.withinBudget) {
|
|
90
|
+
console.warn('[TerrainAgent] Over budget, reducing quality to:', stats.qualityLevel);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const duration = performance.now() - startTime;
|
|
95
|
+
|
|
96
|
+
// Complete task
|
|
97
|
+
await this.client.completeTask(task.task_id, true, {
|
|
98
|
+
chunks_generated: 100,
|
|
99
|
+
duration_ms: duration,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
console.log(`[TerrainAgent] Task ${task.task_id} completed in ${duration}ms`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private async generateTerrainChunk(index: number): Promise<void> {
|
|
106
|
+
// Simulate work (adjust based on quality level)
|
|
107
|
+
const stats = this.client.getFrameBudgetStats();
|
|
108
|
+
const workAmount = {
|
|
109
|
+
high: 10,
|
|
110
|
+
medium: 5,
|
|
111
|
+
low: 2,
|
|
112
|
+
minimal: 1,
|
|
113
|
+
}[stats.qualityLevel];
|
|
114
|
+
|
|
115
|
+
await new Promise((resolve) => setTimeout(resolve, workAmount));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async shutdown(): Promise<void> {
|
|
119
|
+
await this.client.shutdown();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Asset Agent - Handles asset placement and management
|
|
125
|
+
*/
|
|
126
|
+
class AssetAgent {
|
|
127
|
+
private client: SpatialCommClient;
|
|
128
|
+
|
|
129
|
+
constructor(agentId: string) {
|
|
130
|
+
this.client = new SpatialCommClient(agentId);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async init(): Promise<void> {
|
|
134
|
+
await this.client.init();
|
|
135
|
+
|
|
136
|
+
this.client.on('layer2:message', async (message) => {
|
|
137
|
+
if (message.type === 'task_assignment' && message.task.task_type === 'assets') {
|
|
138
|
+
await this.handleAssetTask(message.task);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
console.log('[AssetAgent] Initialized');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async handleAssetTask(task: TaskSpec): Promise<void> {
|
|
146
|
+
console.log(`[AssetAgent] Placing assets in region:`, task.spatial_region);
|
|
147
|
+
|
|
148
|
+
// Request resources
|
|
149
|
+
await this.client.requestResource('mesh-library', 'mesh', undefined, 'high');
|
|
150
|
+
await this.client.requestResource('texture-atlas', 'texture', undefined, 'high');
|
|
151
|
+
|
|
152
|
+
// Simulate asset placement
|
|
153
|
+
for (let i = 0; i < 50; i++) {
|
|
154
|
+
const frameStart = performance.now();
|
|
155
|
+
|
|
156
|
+
await this.placeAsset(i);
|
|
157
|
+
|
|
158
|
+
const frameTime = performance.now() - frameStart;
|
|
159
|
+
this.client.recordFrameTime(frameTime);
|
|
160
|
+
|
|
161
|
+
// Sync position
|
|
162
|
+
await this.client.syncPosition([i * 2, 0, 0], [0, 0, 0, 1], [1, 1, 1]);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Release resources
|
|
166
|
+
await this.client.releaseResource('mesh-library');
|
|
167
|
+
await this.client.releaseResource('texture-atlas');
|
|
168
|
+
|
|
169
|
+
await this.client.completeTask(task.task_id, true, { assets_placed: 50 });
|
|
170
|
+
|
|
171
|
+
console.log(`[AssetAgent] Task ${task.task_id} completed`);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private async placeAsset(index: number): Promise<void> {
|
|
175
|
+
const stats = this.client.getFrameBudgetStats();
|
|
176
|
+
const workAmount = {
|
|
177
|
+
high: 8,
|
|
178
|
+
medium: 4,
|
|
179
|
+
low: 2,
|
|
180
|
+
minimal: 1,
|
|
181
|
+
}[stats.qualityLevel];
|
|
182
|
+
|
|
183
|
+
await new Promise((resolve) => setTimeout(resolve, workAmount));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async shutdown(): Promise<void> {
|
|
187
|
+
await this.client.shutdown();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Orchestrator Agent - Coordinates all agents and manages world creation
|
|
193
|
+
*/
|
|
194
|
+
class OrchestratorAgent {
|
|
195
|
+
private client: SpatialCommClient;
|
|
196
|
+
private worldId?: string;
|
|
197
|
+
|
|
198
|
+
constructor(agentId: string) {
|
|
199
|
+
this.client = new SpatialCommClient(agentId);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async init(): Promise<void> {
|
|
203
|
+
await this.client.init();
|
|
204
|
+
|
|
205
|
+
// Listen for task completions
|
|
206
|
+
this.client.on('layer2:message', (message) => {
|
|
207
|
+
if (message.type === 'task_complete') {
|
|
208
|
+
console.log(`[Orchestrator] Task completed:`, message.task_id);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
console.log('[Orchestrator] Initialized');
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async createWorld(): Promise<void> {
|
|
216
|
+
// Define world specification
|
|
217
|
+
const worldSpec: WorldSpec = {
|
|
218
|
+
name: 'Multi-Agent Test World',
|
|
219
|
+
template: 'playground',
|
|
220
|
+
dimensions: {
|
|
221
|
+
width: 1000,
|
|
222
|
+
height: 500,
|
|
223
|
+
depth: 1000,
|
|
224
|
+
},
|
|
225
|
+
target_fps: 90,
|
|
226
|
+
max_agents: 10,
|
|
227
|
+
features: {
|
|
228
|
+
terrain: true,
|
|
229
|
+
physics: true,
|
|
230
|
+
lighting: true,
|
|
231
|
+
audio: true,
|
|
232
|
+
},
|
|
233
|
+
agent_roles: [
|
|
234
|
+
{
|
|
235
|
+
role: 'terrain',
|
|
236
|
+
agent_type: 'terrain-generator',
|
|
237
|
+
spatial_region: {
|
|
238
|
+
center: [0, 0, 0],
|
|
239
|
+
size: [1000, 100, 1000],
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
role: 'assets',
|
|
244
|
+
agent_type: 'asset-placer',
|
|
245
|
+
spatial_region: {
|
|
246
|
+
center: [0, 50, 0],
|
|
247
|
+
size: [1000, 100, 1000],
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
// Create world via Layer 3
|
|
254
|
+
console.log('[Orchestrator] Creating world...');
|
|
255
|
+
const result = await this.client.createWorld(worldSpec);
|
|
256
|
+
this.worldId = result.world_id;
|
|
257
|
+
|
|
258
|
+
console.log(`[Orchestrator] World created: ${this.worldId}`);
|
|
259
|
+
|
|
260
|
+
// Assign tasks to agents
|
|
261
|
+
await this.assignTasks();
|
|
262
|
+
|
|
263
|
+
// Monitor progress
|
|
264
|
+
await this.monitorProgress();
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
private async assignTasks(): Promise<void> {
|
|
268
|
+
// Assign terrain task
|
|
269
|
+
const terrainTask: TaskSpec = {
|
|
270
|
+
task_id: 'terrain-001',
|
|
271
|
+
task_type: 'terrain',
|
|
272
|
+
priority: 'high',
|
|
273
|
+
parameters: {
|
|
274
|
+
algorithm: 'perlin_noise',
|
|
275
|
+
resolution: 'high',
|
|
276
|
+
},
|
|
277
|
+
spatial_region: {
|
|
278
|
+
center: [0, 0, 0],
|
|
279
|
+
size: [1000, 100, 1000],
|
|
280
|
+
},
|
|
281
|
+
frame_budget_ms: 8, // 8ms budget per frame
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
console.log('[Orchestrator] Assigning terrain task...');
|
|
285
|
+
await this.client.assignTask('terrain-agent-001', terrainTask);
|
|
286
|
+
|
|
287
|
+
// Wait for terrain to complete before assets
|
|
288
|
+
// (In production, would use dependency system)
|
|
289
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
290
|
+
|
|
291
|
+
// Assign asset task
|
|
292
|
+
const assetTask: TaskSpec = {
|
|
293
|
+
task_id: 'assets-001',
|
|
294
|
+
task_type: 'assets',
|
|
295
|
+
priority: 'medium',
|
|
296
|
+
parameters: {
|
|
297
|
+
asset_types: ['trees', 'rocks', 'buildings'],
|
|
298
|
+
density: 'medium',
|
|
299
|
+
},
|
|
300
|
+
spatial_region: {
|
|
301
|
+
center: [0, 50, 0],
|
|
302
|
+
size: [1000, 100, 1000],
|
|
303
|
+
},
|
|
304
|
+
frame_budget_ms: 6, // 6ms budget per frame
|
|
305
|
+
dependencies: ['terrain-001'],
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
console.log('[Orchestrator] Assigning asset task...');
|
|
309
|
+
await this.client.assignTask('asset-agent-001', assetTask);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
private async monitorProgress(): Promise<void> {
|
|
313
|
+
console.log('[Orchestrator] Monitoring world creation progress...');
|
|
314
|
+
|
|
315
|
+
const interval = setInterval(async () => {
|
|
316
|
+
// Get world status
|
|
317
|
+
if (this.worldId) {
|
|
318
|
+
const status = await this.client.getWorldStatus(this.worldId);
|
|
319
|
+
console.log('[Orchestrator] World status:', {
|
|
320
|
+
world: status.world_id,
|
|
321
|
+
status: status.status,
|
|
322
|
+
fps: status.performance.current_fps,
|
|
323
|
+
agents: status.active_agents.length,
|
|
324
|
+
conflicts: status.spatial_conflicts,
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
// Get performance metrics
|
|
328
|
+
const metrics = await this.client.getPerformanceMetrics({ world_id: this.worldId });
|
|
329
|
+
console.log('[Orchestrator] System metrics:', metrics.system);
|
|
330
|
+
|
|
331
|
+
// Check if all agents done
|
|
332
|
+
if (status.status === 'active' && status.active_agents.length === 0) {
|
|
333
|
+
console.log('[Orchestrator] All agents completed, stopping monitor');
|
|
334
|
+
clearInterval(interval);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}, 1000); // Check every second
|
|
338
|
+
|
|
339
|
+
// Stop after 30 seconds max
|
|
340
|
+
setTimeout(() => {
|
|
341
|
+
clearInterval(interval);
|
|
342
|
+
}, 30000);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
async exportWorld(format: 'gltf' | 'fbx' | 'usdz'): Promise<void> {
|
|
346
|
+
if (!this.worldId) throw new Error('No world created');
|
|
347
|
+
|
|
348
|
+
console.log(`[Orchestrator] Exporting world to ${format}...`);
|
|
349
|
+
const result = await this.client.exportWorld(format);
|
|
350
|
+
console.log(`[Orchestrator] World exported:`, result.url);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
async shutdown(): Promise<void> {
|
|
354
|
+
await this.client.shutdown();
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// ============================================================================
|
|
359
|
+
// MAIN EXAMPLE
|
|
360
|
+
// ============================================================================
|
|
361
|
+
|
|
362
|
+
async function main() {
|
|
363
|
+
console.log('='.repeat(80));
|
|
364
|
+
console.log('Multi-Agent VR World Creation Example');
|
|
365
|
+
console.log('Three-Layer Spatial Communication Stack (90fps target)');
|
|
366
|
+
console.log('='.repeat(80));
|
|
367
|
+
|
|
368
|
+
// Create agents
|
|
369
|
+
const orchestrator = new OrchestratorAgent('orchestrator-001');
|
|
370
|
+
const terrainAgent = new TerrainAgent('terrain-agent-001');
|
|
371
|
+
const assetAgent = new AssetAgent('asset-agent-001');
|
|
372
|
+
|
|
373
|
+
try {
|
|
374
|
+
// Initialize all agents
|
|
375
|
+
console.log('\n[STEP 1] Initializing agents...');
|
|
376
|
+
await orchestrator.init();
|
|
377
|
+
await terrainAgent.init();
|
|
378
|
+
await assetAgent.init();
|
|
379
|
+
|
|
380
|
+
// Create world and coordinate agents
|
|
381
|
+
console.log('\n[STEP 2] Creating world and assigning tasks...');
|
|
382
|
+
await orchestrator.createWorld();
|
|
383
|
+
|
|
384
|
+
// Wait for completion
|
|
385
|
+
console.log('\n[STEP 3] Waiting for agents to complete...');
|
|
386
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
387
|
+
|
|
388
|
+
// Export world
|
|
389
|
+
console.log('\n[STEP 4] Exporting world...');
|
|
390
|
+
await orchestrator.exportWorld('gltf');
|
|
391
|
+
|
|
392
|
+
console.log('\n[SUCCESS] Multi-agent world creation completed!');
|
|
393
|
+
} catch (error) {
|
|
394
|
+
console.error('\n[ERROR]', error);
|
|
395
|
+
} finally {
|
|
396
|
+
// Cleanup
|
|
397
|
+
console.log('\n[CLEANUP] Shutting down agents...');
|
|
398
|
+
await orchestrator.shutdown();
|
|
399
|
+
await terrainAgent.shutdown();
|
|
400
|
+
await assetAgent.shutdown();
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Run example
|
|
405
|
+
if (require.main === module) {
|
|
406
|
+
main().catch(console.error);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
export { OrchestratorAgent, TerrainAgent, AssetAgent };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @holoscript/core - Spatial Agent Communication Stack
|
|
3
|
+
*
|
|
4
|
+
* Three-layer communication protocol for multi-agent VR world creation
|
|
5
|
+
* with 90fps performance targeting.
|
|
6
|
+
*
|
|
7
|
+
* @module spatial-comms
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// Protocol Types
|
|
11
|
+
export * from './ProtocolTypes';
|
|
12
|
+
|
|
13
|
+
// Layer 1: Real-Time Communication (UDP/WebRTC)
|
|
14
|
+
export {
|
|
15
|
+
Layer1RealTimeClient,
|
|
16
|
+
UDPRealTimeTransport,
|
|
17
|
+
WebRTCRealTimeTransport,
|
|
18
|
+
encodeRealTimeMessage,
|
|
19
|
+
decodeRealTimeMessage,
|
|
20
|
+
type RealTimeTransport,
|
|
21
|
+
} from './Layer1RealTime';
|
|
22
|
+
|
|
23
|
+
// Layer 2: A2A Coordination (JSON-RPC over HTTP/2)
|
|
24
|
+
export { Layer2A2AClient } from './Layer2A2A';
|
|
25
|
+
|
|
26
|
+
// Layer 3: MCP Metadata Layer
|
|
27
|
+
export {
|
|
28
|
+
Layer3MCPClient,
|
|
29
|
+
Layer3MCPServer,
|
|
30
|
+
SPATIAL_MCP_TOOLS,
|
|
31
|
+
type MCPTool,
|
|
32
|
+
type MCPCommandHandler,
|
|
33
|
+
} from './Layer3MCP';
|
|
34
|
+
|
|
35
|
+
// Unified Client
|
|
36
|
+
export { SpatialCommClient, FrameBudgetTracker } from './SpatialCommClient';
|
|
37
|
+
|
|
38
|
+
// Re-export key types for convenience
|
|
39
|
+
export type {
|
|
40
|
+
// Layer 1
|
|
41
|
+
RealTimeMessage,
|
|
42
|
+
PositionSyncMessage,
|
|
43
|
+
FrameBudgetMessage,
|
|
44
|
+
SpatialConflictMessage,
|
|
45
|
+
RealTimeProtocolConfig,
|
|
46
|
+
|
|
47
|
+
// Layer 2
|
|
48
|
+
A2AMessage,
|
|
49
|
+
A2AResponse,
|
|
50
|
+
TaskSpec,
|
|
51
|
+
ConflictResolutionStrategy,
|
|
52
|
+
A2AProtocolConfig,
|
|
53
|
+
|
|
54
|
+
// Layer 3
|
|
55
|
+
MCPCommandType,
|
|
56
|
+
MCPCommandRequest,
|
|
57
|
+
MCPCommandResponse,
|
|
58
|
+
WorldSpec,
|
|
59
|
+
WorldStatus,
|
|
60
|
+
PerformanceMetrics,
|
|
61
|
+
ExportFormat,
|
|
62
|
+
MCPProtocolConfig,
|
|
63
|
+
|
|
64
|
+
// Unified
|
|
65
|
+
SpatialCommProtocolConfig,
|
|
66
|
+
} from './ProtocolTypes';
|