@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,305 @@
1
+ /**
2
+ * @fileoverview Cross-Reality Agent Handoff Protocol
3
+ * @module @holoscript/core/agents
4
+ *
5
+ * Implements the Minimum Viable Continuity (MVC) handoff schema:
6
+ * exactly 5 typed objects transferred during cross-device agent handoff.
7
+ * Payload is <10KB. Full context is lazy-loaded after transition.
8
+ *
9
+ * The handoff protocol:
10
+ * 1. Capability negotiation (source → target)
11
+ * 2. MVC transfer (<10KB payload)
12
+ * 3. Embodiment adaptation (Avatar3D ↔ VoiceHUD ↔ UI2D etc.)
13
+ * 4. Lazy context loading (background)
14
+ *
15
+ * Geospatial coordinates (WGS84) are the universal spatial anchor.
16
+ *
17
+ * @version 1.0.0
18
+ */
19
+
20
+ export type PlatformTarget = string;
21
+ export type PlatformCapabilities = {
22
+ spatialTracking?: boolean;
23
+ handTracking?: boolean;
24
+ eyeTracking?: boolean;
25
+ haptics?: boolean;
26
+ spatialAudio?: boolean;
27
+ gpu3D?: boolean;
28
+ arCamera?: boolean;
29
+ gps?: boolean;
30
+ npu?: boolean;
31
+ webxrSupport?: boolean;
32
+ [key: string]: boolean | undefined;
33
+ };
34
+ export type EmbodimentType = 'Avatar3D' | 'VoiceHUD' | 'UI2D' | 'DataStream' | string;
35
+
36
+ export const PLATFORM_CAPABILITIES: Record<string, PlatformCapabilities> = {};
37
+ export const embodimentFor = (platform: PlatformTarget): EmbodimentType => {
38
+ if (platform === 'quest3' || platform === 'pcvr') return 'Avatar3D';
39
+ if (platform === 'android-auto') return 'VoiceHUD';
40
+ return 'UI2D';
41
+ };
42
+
43
+ export const platformCategory = (platform: PlatformTarget): string => {
44
+ if (platform.includes('android-auto')) return 'automotive';
45
+ if (platform.includes('android') || platform.includes('ios')) return 'mobile';
46
+ if (platform.includes('quest') || platform.includes('pcvr')) return 'vr';
47
+ return 'desktop';
48
+ };
49
+
50
+ // =============================================================================
51
+ // MVC PAYLOAD — The 5 Typed Objects
52
+ // =============================================================================
53
+
54
+ /** A decision the agent has made */
55
+ export interface DecisionEntry {
56
+ id: string;
57
+ /** What was decided */
58
+ action: string;
59
+ /** Why (reasoning trace) */
60
+ reasoning: string;
61
+ /** When (ISO timestamp) */
62
+ timestamp: string;
63
+ /** Confidence (0-1) */
64
+ confidence: number;
65
+ /** Outcome if known */
66
+ outcome?: 'success' | 'failure' | 'pending';
67
+ }
68
+
69
+ /** Active task state */
70
+ export interface TaskState {
71
+ /** Current task ID */
72
+ taskId: string;
73
+ /** Task description */
74
+ description: string;
75
+ /** Progress (0-1) */
76
+ progress: number;
77
+ /** Sub-tasks remaining */
78
+ subtasks: { id: string; label: string; done: boolean }[];
79
+ /** Blocked on */
80
+ blockedOn?: string;
81
+ /** Priority */
82
+ priority: 'critical' | 'high' | 'medium' | 'low';
83
+ }
84
+
85
+ /** User preferences */
86
+ export interface UserPreferences {
87
+ /** Agent personality setting */
88
+ personality: 'professional' | 'casual' | 'minimal' | 'verbose';
89
+ /** Preferred interaction modality */
90
+ modality: 'voice' | 'text' | 'gesture' | 'gaze' | 'auto';
91
+ /** Language */
92
+ language: string;
93
+ /** Accessibility needs */
94
+ accessibility: { highContrast?: boolean; screenReader?: boolean; reducedMotion?: boolean };
95
+ /** Custom key-value preferences */
96
+ custom: Record<string, string>;
97
+ }
98
+
99
+ /** Spatial context summary (WGS84 universal anchor) */
100
+ export interface SpatialContext {
101
+ /** WGS84 latitude */
102
+ latitude: number;
103
+ /** WGS84 longitude */
104
+ longitude: number;
105
+ /** Altitude in meters (WGS84 ellipsoid height) */
106
+ altitude: number;
107
+ /** Heading (degrees, 0=north) */
108
+ heading: number;
109
+ /** Indoor location hint (if available) */
110
+ indoor?: { buildingId: string; floor: number; roomId?: string };
111
+ /** Spatial anchor IDs (platform-specific, for lazy resolution) */
112
+ anchorIds?: string[];
113
+ /** Timestamp of last spatial fix */
114
+ fixTimestamp: string;
115
+ /** Accuracy in meters */
116
+ accuracy: number;
117
+ }
118
+
119
+ /** Evidence trail entry */
120
+ export interface EvidenceEntry {
121
+ /** What was observed/received */
122
+ type: 'observation' | 'user_input' | 'api_response' | 'sensor_data' | 'agent_message';
123
+ /** Summary (keep brief for <10KB budget) */
124
+ summary: string;
125
+ /** Timestamp */
126
+ timestamp: string;
127
+ /** Source */
128
+ source: string;
129
+ /** Relevance score (0-1) */
130
+ relevance: number;
131
+ }
132
+
133
+ // =============================================================================
134
+ // MVC PAYLOAD
135
+ // =============================================================================
136
+
137
+ /**
138
+ * Minimum Viable Continuity payload — the 5 typed objects.
139
+ * Total serialized size MUST be <10KB.
140
+ */
141
+ export interface MVCPayload {
142
+ /** Schema version */
143
+ version: '1.0';
144
+ /** Agent identity (DID) */
145
+ agentDID: string;
146
+ /** Session ID for continuity tracking */
147
+ sessionId: string;
148
+ /** 1. Decision history (last N decisions) */
149
+ decisions: DecisionEntry[];
150
+ /** 2. Active task state */
151
+ task: TaskState;
152
+ /** 3. User preferences */
153
+ preferences: UserPreferences;
154
+ /** 4. Spatial context (WGS84) */
155
+ spatial: SpatialContext;
156
+ /** 5. Evidence trail (most relevant entries) */
157
+ evidence: EvidenceEntry[];
158
+ /** Handoff metadata */
159
+ handoff: {
160
+ sourceDevice: string;
161
+ sourcePlatform: PlatformTarget;
162
+ sourceEmbodiment: EmbodimentType;
163
+ timestamp: string;
164
+ };
165
+ }
166
+
167
+ // =============================================================================
168
+ // HANDOFF PROTOCOL
169
+ // =============================================================================
170
+
171
+ /** Device capabilities for handoff negotiation */
172
+ export interface DeviceCapabilities {
173
+ deviceId: string;
174
+ platform: PlatformTarget;
175
+ capabilities: PlatformCapabilities;
176
+ embodiment: EmbodimentType;
177
+ available: boolean;
178
+ }
179
+
180
+ /** Handoff negotiation result */
181
+ export interface HandoffNegotiation {
182
+ sourceDevice: DeviceCapabilities;
183
+ targetDevice: DeviceCapabilities;
184
+ /** Capabilities gained in transition */
185
+ gained: string[];
186
+ /** Capabilities lost in transition */
187
+ lost: string[];
188
+ /** Embodiment transition pair */
189
+ transition: { from: EmbodimentType; to: EmbodimentType };
190
+ /** Estimated transition latency (ms) */
191
+ estimatedLatencyMs: number;
192
+ /** Whether the handoff is feasible */
193
+ feasible: boolean;
194
+ /** Reason if not feasible */
195
+ reason?: string;
196
+ }
197
+
198
+ /**
199
+ * Negotiate a handoff between two devices.
200
+ */
201
+ export function negotiateHandoff(
202
+ source: DeviceCapabilities,
203
+ target: DeviceCapabilities
204
+ ): HandoffNegotiation {
205
+ const gained: string[] = [];
206
+ const lost: string[] = [];
207
+
208
+ // Compare capabilities
209
+ const boolCaps: (keyof PlatformCapabilities)[] = [
210
+ 'spatialTracking',
211
+ 'handTracking',
212
+ 'eyeTracking',
213
+ 'haptics',
214
+ 'spatialAudio',
215
+ 'gpu3D',
216
+ 'arCamera',
217
+ 'gps',
218
+ 'npu',
219
+ 'webxrSupport',
220
+ ];
221
+
222
+ for (const cap of boolCaps) {
223
+ const srcHas = !!source.capabilities[cap];
224
+ const tgtHas = !!target.capabilities[cap];
225
+ if (!srcHas && tgtHas) gained.push(cap as string);
226
+ if (srcHas && !tgtHas) lost.push(cap as string);
227
+ }
228
+
229
+ // Estimate latency (simple heuristic)
230
+ const srcCat = platformCategory(source.platform);
231
+ const tgtCat = platformCategory(target.platform);
232
+ let latency = 200; // base
233
+ if (srcCat === tgtCat) latency = 100; // same form factor
234
+ if (tgtCat === 'automotive') latency = 500; // safety-critical
235
+
236
+ const feasible = target.available;
237
+
238
+ return {
239
+ sourceDevice: source,
240
+ targetDevice: target,
241
+ gained,
242
+ lost,
243
+ transition: { from: source.embodiment, to: target.embodiment },
244
+ estimatedLatencyMs: latency,
245
+ feasible,
246
+ reason: feasible ? undefined : 'Target device not available',
247
+ };
248
+ }
249
+
250
+ /**
251
+ * Create an MVC payload for handoff.
252
+ */
253
+ export function createMVCPayload(
254
+ agentDID: string,
255
+ sessionId: string,
256
+ source: { deviceId: string; platform: PlatformTarget },
257
+ data: {
258
+ decisions: DecisionEntry[];
259
+ task: TaskState;
260
+ preferences: UserPreferences;
261
+ spatial: SpatialContext;
262
+ evidence: EvidenceEntry[];
263
+ }
264
+ ): MVCPayload {
265
+ // Trim to stay within budget
266
+ const trimmedDecisions = data.decisions.slice(-10); // Last 10
267
+ const trimmedEvidence = data.evidence.sort((a, b) => b.relevance - a.relevance).slice(0, 15); // Top 15 by relevance
268
+
269
+ return {
270
+ version: '1.0',
271
+ agentDID,
272
+ sessionId,
273
+ decisions: trimmedDecisions,
274
+ task: data.task,
275
+ preferences: data.preferences,
276
+ spatial: data.spatial,
277
+ evidence: trimmedEvidence,
278
+ handoff: {
279
+ sourceDevice: source.deviceId,
280
+ sourcePlatform: source.platform,
281
+ sourceEmbodiment: embodimentFor(source.platform),
282
+ timestamp: new Date().toISOString(),
283
+ },
284
+ };
285
+ }
286
+
287
+ /**
288
+ * Estimate the serialized size of an MVC payload in bytes.
289
+ */
290
+ export function estimatePayloadSize(payload: MVCPayload): number {
291
+ return new TextEncoder().encode(JSON.stringify(payload)).length;
292
+ }
293
+
294
+ /**
295
+ * Validate that an MVC payload is within the 10KB budget.
296
+ */
297
+ export function validatePayloadBudget(payload: MVCPayload): {
298
+ valid: boolean;
299
+ sizeBytes: number;
300
+ budgetBytes: number;
301
+ } {
302
+ const BUDGET = 10 * 1024; // 10KB
303
+ const size = estimatePayloadSize(payload);
304
+ return { valid: size <= BUDGET, sizeBytes: size, budgetBytes: BUDGET };
305
+ }