@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 @@
1
+ {"numTotalTestSuites":133,"numPassedTestSuites":126,"numFailedTestSuites":7,"numPendingTestSuites":0,"numTotalTests":424,"numPassedTests":421,"numFailedTests":3,"numPendingTests":0,"numTodoTests":0,"snapshot":{"added":0,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0,"didUpdate":false},"startTime":1775362883656,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":["defineAgent"],"fullName":"defineAgent returns a valid agent config","status":"passed","title":"returns a valid agent config","duration":3.6702000000000226,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineAgent"],"fullName":"defineAgent throws on empty name","status":"passed","title":"throws on empty name","duration":1.7533000000000811,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineAgent"],"fullName":"defineAgent throws on invalid role","status":"passed","title":"throws on invalid role","duration":0.4864000000000033,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineAgent"],"fullName":"defineAgent throws on missing model","status":"passed","title":"throws on missing model","duration":0.39220000000000255,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineAgent"],"fullName":"defineAgent throws on empty capabilities","status":"passed","title":"throws on empty capabilities","duration":0.4741999999998825,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineTeam"],"fullName":"defineTeam creates a team with agents","status":"passed","title":"creates a team with agents","duration":1.8582000000001244,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineTeam"],"fullName":"defineTeam throws on empty name","status":"passed","title":"throws on empty name","duration":0.42830000000003565,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineTeam"],"fullName":"defineTeam throws on no agents","status":"passed","title":"throws on no agents","duration":0.44290000000000873,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineTeam"],"fullName":"defineTeam throws on duplicate agent names","status":"passed","title":"throws on duplicate agent names","duration":0.7028000000000247,"failureMessages":[],"meta":{}},{"ancestorTitles":["defineTeam"],"fullName":"defineTeam throws when agents exceed max slots","status":"passed","title":"throws when agents exceed max slots","duration":0.48469999999997526,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team.addTasks"],"fullName":"Team.addTasks adds tasks and deduplicates","status":"passed","title":"adds tasks and deduplicates","duration":2.427599999999984,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team.addTasks"],"fullName":"Team.addTasks sorts open tasks by priority","status":"passed","title":"sorts open tasks by priority","duration":0.5066000000001623,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team.scoutFromTodos"],"fullName":"Team.scoutFromTodos parses grep output into tasks","status":"passed","title":"parses grep output into tasks","duration":1.802500000000009,"failureMessages":[],"meta":{}},{"ancestorTitles":["KnowledgeStore"],"fullName":"KnowledgeStore publishes and searches entries","status":"passed","title":"publishes and searches entries","duration":1.4676999999999225,"failureMessages":[],"meta":{}},{"ancestorTitles":["KnowledgeStore"],"fullName":"KnowledgeStore deduplicates identical content","status":"passed","title":"deduplicates identical content","duration":0.2999999999999545,"failureMessages":[],"meta":{}},{"ancestorTitles":["KnowledgeStore"],"fullName":"KnowledgeStore compounds cross-domain insights","status":"passed","title":"compounds cross-domain insights","duration":0.4756999999999607,"failureMessages":[],"meta":{}},{"ancestorTitles":["Behavior Tree"],"fullName":"Behavior Tree Sequence succeeds when all children succeed","status":"passed","title":"Sequence succeeds when all children succeed","duration":0.44869999999991705,"failureMessages":[],"meta":{}},{"ancestorTitles":["Behavior Tree"],"fullName":"Behavior Tree Sequence fails on first failure","status":"passed","title":"Sequence fails on first failure","duration":0.2512000000001535,"failureMessages":[],"meta":{}},{"ancestorTitles":["Behavior Tree"],"fullName":"Behavior Tree Selector succeeds on first success","status":"passed","title":"Selector succeeds on first success","duration":0.2928999999999178,"failureMessages":[],"meta":{}},{"ancestorTitles":["Behavior Tree"],"fullName":"Behavior Tree Condition + Action composes","status":"passed","title":"Condition + Action composes","duration":0.33590000000003783,"failureMessages":[],"meta":{}},{"ancestorTitles":["Behavior Tree"],"fullName":"Behavior Tree convenience builders produce core node types","status":"passed","title":"convenience builders produce core node types","duration":0.23200000000019827,"failureMessages":[],"meta":{}},{"ancestorTitles":["Goal Synthesis (empty board)"],"fullName":"Goal Synthesis (empty board) synthesizes a goal when board is empty instead of skipping","status":"passed","title":"synthesizes a goal when board is empty instead of skipping","duration":2.2951000000000477,"failureMessages":[],"meta":{}},{"ancestorTitles":["Goal Synthesis (empty board)"],"fullName":"Goal Synthesis (empty board) claims existing tasks normally when board has tasks","status":"passed","title":"claims existing tasks normally when board has tasks","duration":1.1674000000000433,"failureMessages":[],"meta":{}},{"ancestorTitles":["Goal Synthesis (empty board)"],"fullName":"Goal Synthesis (empty board) synthesized task has source prefix synthesizer:","status":"passed","title":"synthesized task has source prefix synthesizer:","duration":0.5649000000000797,"failureMessages":[],"meta":{}},{"ancestorTitles":["Goal Synthesis (empty board)"],"fullName":"Goal Synthesis (empty board) publishes knowledge from synthesized task execution","status":"passed","title":"publishes knowledge from synthesized task execution","duration":0.6115999999999531,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","suggest()"],"fullName":"Team remote facade methods suggest() throws on local-only team","status":"passed","title":"throws on local-only team","duration":1.8321000000000822,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","suggest()"],"fullName":"Team remote facade methods suggest() calls POST /suggestions with correct body","status":"passed","title":"calls POST /suggestions with correct body","duration":2.0272999999999683,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","suggest()"],"fullName":"Team remote facade methods suggest() throws on error response","status":"passed","title":"throws on error response","duration":0.7936999999999443,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","vote()"],"fullName":"Team remote facade methods vote() throws on local-only team","status":"passed","title":"throws on local-only team","duration":0.5004999999998745,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","vote()"],"fullName":"Team remote facade methods vote() calls PATCH /suggestions/:id with vote action","status":"passed","title":"calls PATCH /suggestions/:id with vote action","duration":0.6818000000000666,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","suggestions()"],"fullName":"Team remote facade methods suggestions() throws on local-only team","status":"passed","title":"throws on local-only team","duration":0.6192999999998392,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","suggestions()"],"fullName":"Team remote facade methods suggestions() calls GET /suggestions without filter","status":"passed","title":"calls GET /suggestions without filter","duration":0.7177999999998974,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","suggestions()"],"fullName":"Team remote facade methods suggestions() calls GET /suggestions?status=open with filter","status":"passed","title":"calls GET /suggestions?status=open with filter","duration":0.507799999999861,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","setMode()"],"fullName":"Team remote facade methods setMode() throws on local-only team","status":"passed","title":"throws on local-only team","duration":0.5061000000000604,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","setMode()"],"fullName":"Team remote facade methods setMode() calls POST /mode with mode body","status":"passed","title":"calls POST /mode with mode body","duration":0.6295000000000073,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","derive()"],"fullName":"Team remote facade methods derive() throws on local-only team","status":"passed","title":"throws on local-only team","duration":0.46280000000001564,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","derive()"],"fullName":"Team remote facade methods derive() calls POST /board/derive with source and content","status":"passed","title":"calls POST /board/derive with source and content","duration":0.7809999999999491,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","presence()"],"fullName":"Team remote facade methods presence() throws on local-only team","status":"passed","title":"throws on local-only team","duration":0.4362999999998465,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","presence()"],"fullName":"Team remote facade methods presence() calls GET /slots","status":"passed","title":"calls GET /slots","duration":0.9502999999999702,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","heartbeat()"],"fullName":"Team remote facade methods heartbeat() throws on local-only team","status":"passed","title":"throws on local-only team","duration":0.4376999999999498,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","heartbeat()"],"fullName":"Team remote facade methods heartbeat() calls POST /presence with ide_type and status","status":"passed","title":"calls POST /presence with ide_type and status","duration":0.8363999999999123,"failureMessages":[],"meta":{}},{"ancestorTitles":["Team remote facade methods","heartbeat()"],"fullName":"Team remote facade methods heartbeat() defaults ide_type to unknown","status":"passed","title":"defaults ide_type to unknown","duration":0.5322000000001026,"failureMessages":[],"meta":{}}],"startTime":1775362885098,"endTime":1775362885137.5322,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/__tests__/framework.test.ts"},{"assertionResults":[{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent has correct identity from agent config","status":"passed","title":"has correct identity from agent config","duration":6.276399999999967,"failureMessages":[],"meta":{}},{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent intake phase gathers context without LLM call","status":"passed","title":"intake phase gathers context without LLM call","duration":1.9897999999999456,"failureMessages":[],"meta":{}},{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent reflect phase calls LLM with light model","status":"passed","title":"reflect phase calls LLM with light model","duration":1.9995000000000118,"failureMessages":[],"meta":{}},{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent execute phase calls LLM with full model","status":"passed","title":"execute phase calls LLM with full model","duration":1.0078000000000884,"failureMessages":[],"meta":{}},{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent compress phase extracts knowledge items","status":"passed","title":"compress phase extracts knowledge items","duration":1.7776000000000067,"failureMessages":[],"meta":{}},{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent reintake phase skips LLM when no insights","status":"passed","title":"reintake phase skips LLM when no insights","duration":0.6019999999999754,"failureMessages":[],"meta":{}},{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent grow phase skips LLM when no validated insights","status":"passed","title":"grow phase skips LLM when no validated insights","duration":0.4840000000000373,"failureMessages":[],"meta":{}},{"ancestorTitles":["ProtocolAgent"],"fullName":"ProtocolAgent evolve phase skips LLM when no validated insights","status":"passed","title":"evolve phase skips LLM when no validated insights","duration":0.3765999999999394,"failureMessages":[],"meta":{}},{"ancestorTitles":["runProtocolCycle"],"fullName":"runProtocolCycle executes all 7 phases and returns structured result","status":"passed","title":"executes all 7 phases and returns structured result","duration":2.3856000000000677,"failureMessages":[],"meta":{}},{"ancestorTitles":["runProtocolCycle"],"fullName":"runProtocolCycle returns summary from execute phase even when compress finds nothing","status":"passed","title":"returns summary from execute phase even when compress finds nothing","duration":1.2361000000000786,"failureMessages":[],"meta":{}},{"ancestorTitles":["runProtocolCycle"],"fullName":"runProtocolCycle works with OpenAI provider","status":"passed","title":"works with OpenAI provider","duration":1.701599999999985,"failureMessages":[],"meta":{}},{"ancestorTitles":["runProtocolCycle"],"fullName":"runProtocolCycle handles LLM errors gracefully via BaseAgent.runCycle","status":"passed","title":"handles LLM errors gracefully via BaseAgent.runCycle","duration":1.1847000000000207,"failureMessages":[],"meta":{}}],"startTime":1775362884841,"endTime":1775362884862.1848,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/__tests__/protocol-agent.test.ts"},{"assertionResults":[{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production builds a valid manifest with required fields","status":"passed","title":"builds a valid manifest with required fields","duration":1.945100000000025,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production fluent chaining sets all optional fields","status":"passed","title":"fluent chaining sets all optional fields","duration":1.4969999999999573,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production addCapability adds multiple capabilities","status":"passed","title":"addCapability adds multiple capabilities","duration":0.21390000000008058,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production addEndpoint adds endpoint with port","status":"passed","title":"addEndpoint adds endpoint with port","duration":0.20630000000005566,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production spatial sets spatial scope","status":"passed","title":"spatial sets spatial scope","duration":0.16669999999999163,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production build throws without identity","status":"passed","title":"build throws without identity","duration":1.0070000000000618,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production build throws without capability","status":"passed","title":"build throws without capability","duration":0.3812000000000353,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder — Production"],"fullName":"AgentManifestBuilder — Production build throws without endpoint","status":"passed","title":"build throws without endpoint","duration":0.3383000000000038,"failureMessages":[],"meta":{}},{"ancestorTitles":["createManifest — Production"],"fullName":"createManifest — Production returns a builder instance","status":"passed","title":"returns a builder instance","duration":0.6903999999999542,"failureMessages":[],"meta":{}},{"ancestorTitles":["createManifest — Production"],"fullName":"createManifest — Production can chain and build","status":"passed","title":"can chain and build","duration":0.3040000000000873,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest — Production"],"fullName":"validateManifest — Production valid manifest passes","status":"passed","title":"valid manifest passes","duration":0.4298000000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest — Production"],"fullName":"validateManifest — Production missing id fails validation","status":"passed","title":"missing id fails validation","duration":0.314200000000028,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest — Production"],"fullName":"validateManifest — Production missing name fails validation","status":"passed","title":"missing name fails validation","duration":0.17280000000005202,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest — Production"],"fullName":"validateManifest — Production missing version fails validation","status":"passed","title":"missing version fails validation","duration":0.16050000000007003,"failureMessages":[],"meta":{}}],"startTime":1775362885397,"endTime":1775362885406.3142,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AgentManifest.prod.test.ts"},{"assertionResults":[{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder builds valid manifest","status":"passed","title":"builds valid manifest","duration":2.670400000000086,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder throws without id","status":"passed","title":"throws without id","duration":1.3115999999999985,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder throws without capabilities","status":"passed","title":"throws without capabilities","duration":0.32330000000001746,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder throws without endpoints","status":"passed","title":"throws without endpoints","duration":0.22859999999991487,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder description sets description","status":"passed","title":"description sets description","duration":0.2677999999999656,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder classify sets categories/position/section","status":"passed","title":"classify sets categories/position/section","duration":1.0634000000000015,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder addCapabilities adds multiple","status":"passed","title":"addCapabilities adds multiple","duration":0.2134000000000924,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder spatial sets scope","status":"passed","title":"spatial sets scope","duration":0.17849999999998545,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder trust sets level and verification","status":"passed","title":"trust sets level and verification","duration":0.5618999999999232,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder healthCheck sets interval","status":"passed","title":"healthCheck sets interval","duration":0.23299999999994725,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder tags accumulates","status":"passed","title":"tags accumulates","duration":0.8671999999999116,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifestBuilder"],"fullName":"AgentManifestBuilder metadata merges","status":"passed","title":"metadata merges","duration":0.2316000000000713,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest valid manifest has no errors","status":"passed","title":"valid manifest has no errors","duration":1.126700000000028,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest reports missing id","status":"passed","title":"reports missing id","duration":0.2998999999999796,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest reports missing capabilities","status":"passed","title":"reports missing capabilities","duration":0.17610000000001946,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest reports missing endpoints","status":"passed","title":"reports missing endpoints","duration":0.16230000000007294,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest reports bad capability","status":"passed","title":"reports bad capability","duration":0.21500000000003183,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest reports bad endpoint","status":"passed","title":"reports bad endpoint","duration":0.18640000000004875,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest warns on missing description","status":"passed","title":"warns on missing description","duration":0.18830000000002656,"failureMessages":[],"meta":{}},{"ancestorTitles":["validateManifest"],"fullName":"validateManifest warns on untrusted level","status":"passed","title":"warns on untrusted level","duration":0.18620000000009895,"failureMessages":[],"meta":{}}],"startTime":1775362885315,"endTime":1775362885326.215,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AgentManifest.test.ts"},{"assertionResults":[{"ancestorTitles":["AgentTypes","PHASE_ORDER"],"fullName":"AgentTypes PHASE_ORDER should have 7 phases","status":"passed","title":"should have 7 phases","duration":2.770699999999806,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes","PHASE_ORDER"],"fullName":"AgentTypes PHASE_ORDER should start with INTAKE","status":"passed","title":"should start with INTAKE","duration":0.34760000000005675,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes","PHASE_ORDER"],"fullName":"AgentTypes PHASE_ORDER should end with EVOLVE","status":"passed","title":"should end with EVOLVE","duration":0.13169999999990978,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes","PHASE_ORDER"],"fullName":"AgentTypes PHASE_ORDER should have correct phase sequence","status":"passed","title":"should have correct phase sequence","duration":1.2396000000001095,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes","DEFAULT_PHASE_TIMINGS"],"fullName":"AgentTypes DEFAULT_PHASE_TIMINGS should have timings for all phases","status":"passed","title":"should have timings for all phases","duration":0.8311000000001059,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes","DEFAULT_PHASE_TIMINGS"],"fullName":"AgentTypes DEFAULT_PHASE_TIMINGS should have reasonable timing values","status":"passed","title":"should have reasonable timing values","duration":0.4217999999998483,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","AgentManifestBuilder"],"fullName":"AgentManifest AgentManifestBuilder should create a builder","status":"passed","title":"should create a builder","duration":0.46109999999998763,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","AgentManifestBuilder"],"fullName":"AgentManifest AgentManifestBuilder should build a valid manifest with fluent API","status":"passed","title":"should build a valid manifest with fluent API","duration":0.9093000000000302,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","AgentManifestBuilder"],"fullName":"AgentManifest AgentManifestBuilder should throw when building without id","status":"passed","title":"should throw when building without id","duration":1.4764999999999873,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","AgentManifestBuilder"],"fullName":"AgentManifest AgentManifestBuilder should throw when building without capabilities","status":"passed","title":"should throw when building without capabilities","duration":0.4718000000000302,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","AgentManifestBuilder"],"fullName":"AgentManifest AgentManifestBuilder should throw when building without endpoints","status":"passed","title":"should throw when building without endpoints","duration":0.3454999999999018,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","AgentManifestBuilder"],"fullName":"AgentManifest AgentManifestBuilder should add multiple capabilities","status":"passed","title":"should add multiple capabilities","duration":0.3652999999999338,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","AgentManifestBuilder"],"fullName":"AgentManifest AgentManifestBuilder should add tags","status":"passed","title":"should add tags","duration":1.0798999999999523,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","validateManifest"],"fullName":"AgentManifest validateManifest should validate valid manifest","status":"passed","title":"should validate valid manifest","duration":0.7256999999999607,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","validateManifest"],"fullName":"AgentManifest validateManifest should reject manifest without id","status":"passed","title":"should reject manifest without id","duration":0.2963999999999487,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","validateManifest"],"fullName":"AgentManifest validateManifest should reject manifest without capabilities","status":"passed","title":"should reject manifest without capabilities","duration":0.19359999999983302,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","validateManifest"],"fullName":"AgentManifest validateManifest should reject manifest without endpoints","status":"passed","title":"should reject manifest without endpoints","duration":0.19139999999993051,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","validateManifest"],"fullName":"AgentManifest validateManifest should validate capabilities have type and domain","status":"passed","title":"should validate capabilities have type and domain","duration":0.1769000000001597,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","validateManifest"],"fullName":"AgentManifest validateManifest should validate endpoints have protocol and address","status":"passed","title":"should validate endpoints have protocol and address","duration":0.19050000000015643,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentManifest","validateManifest"],"fullName":"AgentManifest validateManifest should generate warnings for missing description","status":"passed","title":"should generate warnings for missing description","duration":0.2626000000000204,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Capability Matching"],"fullName":"CapabilityMatcher Capability Matching should match capability by type","status":"passed","title":"should match capability by type","duration":0.9093000000000302,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Capability Matching"],"fullName":"CapabilityMatcher Capability Matching should match capability by domain","status":"passed","title":"should match capability by domain","duration":0.3023000000000593,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Capability Matching"],"fullName":"CapabilityMatcher Capability Matching should return null for non-matching type","status":"passed","title":"should return null for non-matching type","duration":0.14810000000011314,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Capability Matching"],"fullName":"CapabilityMatcher Capability Matching should return null for unavailable capability","status":"passed","title":"should return null for unavailable capability","duration":0.1370999999999185,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Agent Matching"],"fullName":"CapabilityMatcher Agent Matching should match agent by capability type","status":"passed","title":"should match agent by capability type","duration":0.6839999999999691,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Agent Matching"],"fullName":"CapabilityMatcher Agent Matching should return null for offline agents","status":"passed","title":"should return null for offline agents","duration":0.2524999999998272,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Agent Matching"],"fullName":"CapabilityMatcher Agent Matching should include offline agents with includeOffline","status":"passed","title":"should include offline agents with includeOffline","duration":0.23559999999997672,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Agent Matching"],"fullName":"CapabilityMatcher Agent Matching should filter by min trust level","status":"passed","title":"should filter by min trust level","duration":0.21840000000020154,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","Agent Matching"],"fullName":"CapabilityMatcher Agent Matching should match with tags filter","status":"passed","title":"should match with tags filter","duration":0.23480000000017753,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","findMatches"],"fullName":"CapabilityMatcher findMatches should find all matching agents","status":"passed","title":"should find all matching agents","duration":0.730600000000095,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","findMatches"],"fullName":"CapabilityMatcher findMatches should return empty array when no matches","status":"passed","title":"should return empty array when no matches","duration":0.35940000000005057,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","findMatches"],"fullName":"CapabilityMatcher findMatches should return matches with scores","status":"passed","title":"should return matches with scores","duration":0.43659999999999854,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","findBest"],"fullName":"CapabilityMatcher findBest should return a matching agent","status":"passed","title":"should return a matching agent","duration":0.571100000000115,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","findBest"],"fullName":"CapabilityMatcher findBest should respect limit of 1","status":"passed","title":"should respect limit of 1","duration":0.3630000000000564,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","findBest"],"fullName":"CapabilityMatcher findBest should return null when no matches","status":"passed","title":"should return null when no matches","duration":0.20489999999995234,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher","findBest"],"fullName":"CapabilityMatcher findBest should sort by name when specified","status":"passed","title":"should sort by name when specified","duration":21.935500000000047,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Configuration"],"fullName":"AgentRegistry Configuration should use default config","status":"passed","title":"should use default config","duration":0.6534999999998945,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Configuration"],"fullName":"AgentRegistry Configuration should accept custom config","status":"passed","title":"should accept custom config","duration":0.25040000000012697,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Configuration"],"fullName":"AgentRegistry Configuration should have default registry config values","status":"passed","title":"should have default registry config values","duration":0.33379999999988286,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Registration"],"fullName":"AgentRegistry Registration should register an agent","status":"passed","title":"should register an agent","duration":0.5139999999998963,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Registration"],"fullName":"AgentRegistry Registration should emit agent:registered event","status":"passed","title":"should emit agent:registered event","duration":2.183100000000195,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Registration"],"fullName":"AgentRegistry Registration should throw for invalid manifest","status":"passed","title":"should throw for invalid manifest","duration":1.4631999999999152,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Registration"],"fullName":"AgentRegistry Registration should update existing agent on re-register","status":"passed","title":"should update existing agent on re-register","duration":0.5567000000000917,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Registration"],"fullName":"AgentRegistry Registration should enforce max agents limit","status":"passed","title":"should enforce max agents limit","duration":0.7039000000002034,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Deregistration"],"fullName":"AgentRegistry Deregistration should deregister an agent","status":"passed","title":"should deregister an agent","duration":0.2787999999998192,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Deregistration"],"fullName":"AgentRegistry Deregistration should emit agent:deregistered event","status":"passed","title":"should emit agent:deregistered event","duration":0.4380999999998494,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Discovery"],"fullName":"AgentRegistry Discovery should get agent by id","status":"passed","title":"should get agent by id","duration":0.33940000000006876,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Discovery"],"fullName":"AgentRegistry Discovery should return undefined for non-existent agent","status":"passed","title":"should return undefined for non-existent agent","duration":0.20039999999994507,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Discovery"],"fullName":"AgentRegistry Discovery should list all agents","status":"passed","title":"should list all agents","duration":0.47509999999988395,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Discovery"],"fullName":"AgentRegistry Discovery should discover agents by capability type","status":"passed","title":"should discover agents by capability type","duration":0.330600000000004,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Discovery"],"fullName":"AgentRegistry Discovery should find best agent for query","status":"passed","title":"should find best agent for query","duration":0.2763999999999669,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Heartbeat"],"fullName":"AgentRegistry Heartbeat should accept heartbeat from registered agent","status":"passed","title":"should accept heartbeat from registered agent","duration":0.6682999999998174,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Heartbeat"],"fullName":"AgentRegistry Heartbeat should throw for heartbeat from unknown agent","status":"passed","title":"should throw for heartbeat from unknown agent","duration":0.33600000000001273,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Heartbeat"],"fullName":"AgentRegistry Heartbeat should update agent status to online","status":"passed","title":"should update agent status to online","duration":0.21959999999990032,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Stats & Status"],"fullName":"AgentRegistry Stats & Status should get agent count","status":"passed","title":"should get agent count","duration":0.2235000000000582,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Stats & Status"],"fullName":"AgentRegistry Stats & Status should get status counts","status":"passed","title":"should get status counts","duration":0.4375,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Lifecycle"],"fullName":"AgentRegistry Lifecycle should start and stop","status":"passed","title":"should start and stop","duration":0.3809999999998581,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry","Lifecycle"],"fullName":"AgentRegistry Lifecycle should clear all agents","status":"passed","title":"should clear all agents","duration":0.33969999999999345,"failureMessages":[],"meta":{}},{"ancestorTitles":["Agent Module Integration"],"fullName":"Agent Module Integration should support full agent lifecycle","status":"passed","title":"should support full agent lifecycle","duration":0.8837000000000899,"failureMessages":[],"meta":{}},{"ancestorTitles":["Agent Module Integration"],"fullName":"Agent Module Integration should match agents for complex queries","status":"passed","title":"should match agents for complex queries","duration":0.5727999999999156,"failureMessages":[],"meta":{}},{"ancestorTitles":["Agent Module Integration"],"fullName":"Agent Module Integration should work with manifest builder","status":"passed","title":"should work with manifest builder","duration":0.5561999999999898,"failureMessages":[],"meta":{}},{"ancestorTitles":["Agent Module Integration"],"fullName":"Agent Module Integration should validate and reject invalid manifests","status":"passed","title":"should validate and reject invalid manifests","duration":0.5424000000000433,"failureMessages":[],"meta":{}}],"startTime":1775362884821,"endTime":1775362884878.5425,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AgentModule.test.ts"},{"assertionResults":[{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production register adds an agent","status":"passed","title":"register adds an agent","duration":2.68730000000005,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production register updates existing agent (no reject)","status":"passed","title":"register updates existing agent (no reject)","duration":0.7385999999999058,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production deregister removes an agent","status":"passed","title":"deregister removes an agent","duration":0.6078999999999724,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production heartbeat updates agent entry","status":"passed","title":"heartbeat updates agent entry","duration":0.41590000000007876,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production heartbeat on unknown agent throws","status":"passed","title":"heartbeat on unknown agent throws","duration":2.280899999999974,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production discover returns matching agents","status":"passed","title":"discover returns matching agents","duration":1.1246999999999616,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production findBest returns best matching agent","status":"passed","title":"findBest returns best matching agent","duration":0.5883000000000038,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production get returns manifest by ID","status":"passed","title":"get returns manifest by ID","duration":0.5027999999999793,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production getAllManifests returns all","status":"passed","title":"getAllManifests returns all","duration":0.5459999999999354,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production getStatusCounts counts agents by status","status":"passed","title":"getStatusCounts counts agents by status","duration":0.3349000000000615,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production clear removes all agents","status":"passed","title":"clear removes all agents","duration":0.1491999999999507,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry — Production"],"fullName":"AgentRegistry — Production export and import round-trip","status":"passed","title":"export and import round-trip","duration":0.2582999999999629,"failureMessages":[],"meta":{}}],"startTime":1775362885378,"endTime":1775362885389.2583,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AgentRegistry.prod.test.ts"},{"assertionResults":[{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry register adds an agent","status":"passed","title":"register adds an agent","duration":4.854900000000043,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry has returns true for registered agent","status":"passed","title":"has returns true for registered agent","duration":0.8686999999999898,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry get returns manifest","status":"passed","title":"get returns manifest","duration":0.8365999999999758,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry register allows updating same ID","status":"passed","title":"register allows updating same ID","duration":0.356200000000058,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry deregister removes an agent","status":"passed","title":"deregister removes an agent","duration":0.5029999999999291,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry heartbeat updates agent entry","status":"passed","title":"heartbeat updates agent entry","duration":0.4227000000000771,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry discover finds matching agents","status":"passed","title":"discover finds matching agents","duration":1.2415000000000873,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry findBest returns the best match","status":"passed","title":"findBest returns the best match","duration":0.7360999999999649,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry findBest returns null when no match","status":"passed","title":"findBest returns null when no match","duration":0.5072000000000116,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry getAllManifests returns all agents","status":"passed","title":"getAllManifests returns all agents","duration":1.522199999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry getStatusCounts reports by status","status":"passed","title":"getStatusCounts reports by status","duration":0.3966000000000349,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry clear removes all agents","status":"passed","title":"clear removes all agents","duration":0.3067999999999529,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentRegistry"],"fullName":"AgentRegistry export returns registry snapshot","status":"passed","title":"export returns registry snapshot","duration":0.5069999999999482,"failureMessages":[],"meta":{}}],"startTime":1775362885308,"endTime":1775362885321.507,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AgentRegistry.test.ts"},{"assertionResults":[{"ancestorTitles":["AgentTypes — Phase Definitions"],"fullName":"AgentTypes — Phase Definitions PHASE_ORDER has exactly 7 phases","status":"passed","title":"PHASE_ORDER has exactly 7 phases","duration":4.309200000000033,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Phase Definitions"],"fullName":"AgentTypes — Phase Definitions PHASE_ORDER follows correct protocol sequence","status":"passed","title":"PHASE_ORDER follows correct protocol sequence","duration":1.5295999999999594,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Phase Definitions"],"fullName":"AgentTypes — Phase Definitions PHASE_ORDER is readonly","status":"passed","title":"PHASE_ORDER is readonly","duration":0.4171000000000049,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Phase Definitions"],"fullName":"AgentTypes — Phase Definitions DEFAULT_PHASE_TIMINGS covers all phases","status":"passed","title":"DEFAULT_PHASE_TIMINGS covers all phases","duration":1.3129000000000133,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Phase Definitions"],"fullName":"AgentTypes — Phase Definitions DEFAULT_PHASE_TIMINGS has expected values","status":"passed","title":"DEFAULT_PHASE_TIMINGS has expected values","duration":0.5680999999999585,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Phase Definitions"],"fullName":"AgentTypes — Phase Definitions EXECUTE has the longest default timing","status":"passed","title":"EXECUTE has the longest default timing","duration":0.2574000000000751,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Default Export"],"fullName":"AgentTypes — Default Export exports PHASE_ORDER and DEFAULT_PHASE_TIMINGS","status":"passed","title":"exports PHASE_ORDER and DEFAULT_PHASE_TIMINGS","duration":0.24329999999997654,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — PhaseResult shapes"],"fullName":"AgentTypes — PhaseResult shapes IntakeResult conforms to expected shape","status":"passed","title":"IntakeResult conforms to expected shape","duration":0.4275000000000091,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — PhaseResult shapes"],"fullName":"AgentTypes — PhaseResult shapes ReflectResult conforms to expected shape","status":"passed","title":"ReflectResult conforms to expected shape","duration":0.407799999999952,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — PhaseResult shapes"],"fullName":"AgentTypes — PhaseResult shapes ExecuteResult conforms to expected shape","status":"passed","title":"ExecuteResult conforms to expected shape","duration":0.27700000000004366,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — PhaseResult shapes"],"fullName":"AgentTypes — PhaseResult shapes CompressResult conforms to expected shape","status":"passed","title":"CompressResult conforms to expected shape","duration":0.13999999999998636,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — PhaseResult shapes"],"fullName":"AgentTypes — PhaseResult shapes ReintakeResult conforms to expected shape","status":"passed","title":"ReintakeResult conforms to expected shape","duration":0.21629999999993288,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — PhaseResult shapes"],"fullName":"AgentTypes — PhaseResult shapes GrowResult conforms to expected shape","status":"passed","title":"GrowResult conforms to expected shape","duration":0.30719999999996617,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — PhaseResult shapes"],"fullName":"AgentTypes — PhaseResult shapes EvolveResult conforms to expected shape","status":"passed","title":"EvolveResult conforms to expected shape","duration":0.6440999999999804,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — CycleResult"],"fullName":"AgentTypes — CycleResult can represent a complete cycle","status":"passed","title":"can represent a complete cycle","duration":0.714800000000082,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentConfig"],"fullName":"AgentTypes — AgentConfig can build a minimal agent config","status":"passed","title":"can build a minimal agent config","duration":0.22910000000001673,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentConfig"],"fullName":"AgentTypes — AgentConfig supports all 13 agent categories","status":"passed","title":"supports all 13 agent categories","duration":0.16279999999994743,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentConfig"],"fullName":"AgentTypes — AgentConfig supports architecture awareness with music patterns","status":"passed","title":"supports architecture awareness with music patterns","duration":0.12980000000004566,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentConfig"],"fullName":"AgentTypes — AgentConfig can configure phases individually","status":"passed","title":"can configure phases individually","duration":0.22550000000001091,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentConfig"],"fullName":"AgentTypes — AgentConfig supports budget configuration","status":"passed","title":"supports budget configuration","duration":0.10099999999999909,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentConfig"],"fullName":"AgentTypes — AgentConfig supports curiosity configuration","status":"passed","title":"supports curiosity configuration","duration":0.13619999999991705,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentState"],"fullName":"AgentTypes — AgentState can construct a valid agent state","status":"passed","title":"can construct a valid agent state","duration":0.28750000000002274,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentState"],"fullName":"AgentTypes — AgentState supports lifespan context","status":"passed","title":"supports lifespan context","duration":0.2159000000000333,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentState"],"fullName":"AgentTypes — AgentState supports cycle metrics","status":"passed","title":"supports cycle metrics","duration":0.12459999999998672,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Inter-Agent Communication"],"fullName":"AgentTypes — Inter-Agent Communication AgentMessage supports all priority levels","status":"passed","title":"AgentMessage supports all priority levels","duration":0.4288999999999987,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Inter-Agent Communication"],"fullName":"AgentTypes — Inter-Agent Communication AgentMessage supports broadcast targeting","status":"passed","title":"AgentMessage supports broadcast targeting","duration":0.17020000000002256,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Inter-Agent Communication"],"fullName":"AgentTypes — Inter-Agent Communication AgentMessage supports correlation and TTL","status":"passed","title":"AgentMessage supports correlation and TTL","duration":0.20400000000006457,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Knowledge Types"],"fullName":"AgentTypes — Knowledge Types PatternEntry has all required fields","status":"passed","title":"PatternEntry has all required fields","duration":0.26870000000008076,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Knowledge Types"],"fullName":"AgentTypes — Knowledge Types WisdomEntry has all required fields","status":"passed","title":"WisdomEntry has all required fields","duration":0.1592000000000553,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — Knowledge Types"],"fullName":"AgentTypes — Knowledge Types GotchaEntry has all required fields and severity levels","status":"passed","title":"GotchaEntry has all required fields and severity levels","duration":0.336400000000026,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentTraitContext"],"fullName":"AgentTypes — AgentTraitContext supports wallet extension","status":"passed","title":"supports wallet extension","duration":0.21040000000004966,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentTypes — AgentTraitContext"],"fullName":"AgentTypes — AgentTraitContext supports story_weaver extension","status":"passed","title":"supports story_weaver extension","duration":0.16440000000000055,"failureMessages":[],"meta":{}}],"startTime":1775362884722,"endTime":1775362884739.2104,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AgentTypes.test.ts"},{"assertionResults":[{"ancestorTitles":["AgentWalletRegistry","singleton pattern"],"fullName":"AgentWalletRegistry singleton pattern getInstance returns the same instance","status":"passed","title":"getInstance returns the same instance","duration":2.8939000000000306,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","singleton pattern"],"fullName":"AgentWalletRegistry singleton pattern getAgentWalletRegistry returns the singleton","status":"passed","title":"getAgentWalletRegistry returns the singleton","duration":0.4117999999999711,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","registerWallet"],"fullName":"AgentWalletRegistry registerWallet registers a wallet with default networkId (Base L2 = 8453)","status":"passed","title":"registers a wallet with default networkId (Base L2 = 8453)","duration":0.5810000000000173,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","registerWallet"],"fullName":"AgentWalletRegistry registerWallet registers a wallet with custom networkId","status":"passed","title":"registers a wallet with custom networkId","duration":0.22349999999994452,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","registerWallet"],"fullName":"AgentWalletRegistry registerWallet overwrites an existing wallet for the same agent","status":"passed","title":"overwrites an existing wallet for the same agent","duration":0.36820000000000164,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","getWallet"],"fullName":"AgentWalletRegistry getWallet returns the registered wallet","status":"passed","title":"returns the registered wallet","duration":0.4473000000000411,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","getWallet"],"fullName":"AgentWalletRegistry getWallet returns undefined for unknown agents","status":"passed","title":"returns undefined for unknown agents","duration":0.26340000000004693,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","unregisterWallet"],"fullName":"AgentWalletRegistry unregisterWallet removes a registered wallet and returns true","status":"passed","title":"removes a registered wallet and returns true","duration":0.24220000000002528,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","unregisterWallet"],"fullName":"AgentWalletRegistry unregisterWallet returns false when unregistering a non-existent wallet","status":"passed","title":"returns false when unregistering a non-existent wallet","duration":0.4338999999999942,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","authorizeTransaction"],"fullName":"AgentWalletRegistry authorizeTransaction returns a hex signature for a registered agent","status":"passed","title":"returns a hex signature for a registered agent","duration":0.6480999999999995,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","authorizeTransaction"],"fullName":"AgentWalletRegistry authorizeTransaction throws for an unregistered agent","status":"passed","title":"throws for an unregistered agent","duration":2.4763999999998987,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","authorizeTransaction"],"fullName":"AgentWalletRegistry authorizeTransaction produces different signatures for different payloads","status":"passed","title":"produces different signatures for different payloads","duration":1.140800000000013,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","authorizeTransaction"],"fullName":"AgentWalletRegistry authorizeTransaction signature is deterministic for the same payload","status":"passed","title":"signature is deterministic for the same payload","duration":0.20309999999994943,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","authorizeTransaction"],"fullName":"AgentWalletRegistry authorizeTransaction signature length is capped at 64 hex chars after 0x prefix","status":"passed","title":"signature length is capped at 64 hex chars after 0x prefix","duration":0.2963999999999487,"failureMessages":[],"meta":{}},{"ancestorTitles":["AgentWalletRegistry","lifecycle"],"fullName":"AgentWalletRegistry lifecycle register → authorize → unregister → authorize fails","status":"passed","title":"register → authorize → unregister → authorize fails","duration":0.7080000000000837,"failureMessages":[],"meta":{}}],"startTime":1775362884723,"endTime":1775362884735.708,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AgentWalletRegistry.test.ts"},{"assertionResults":[{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation creates a signed operation with all fields","status":"passed","title":"creates a signed operation with all fields","duration":2.0627999999999247,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation verifies a valid signed operation","status":"passed","title":"verifies a valid signed operation","duration":0.46280000000001564,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation rejects a revoked signer","status":"passed","title":"rejects a revoked signer","duration":0.2518000000000029,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation rejects out-of-scope operations","status":"passed","title":"rejects out-of-scope operations","duration":0.43430000000000746,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation wildcard scope (*) allows any scope tag","status":"passed","title":"wildcard scope (*) allows any scope tag","duration":0.18200000000001637,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation rejects tampered signatures","status":"passed","title":"rejects tampered signatures","duration":0.20929999999998472,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation signature is deterministic","status":"passed","title":"signature is deterministic","duration":0.13239999999996144,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — signOperation / verifyOperation"],"fullName":"AuthenticatedCRDT — signOperation / verifyOperation different payloads produce different signatures","status":"passed","title":"different payloads produce different signatures","duration":0.8187000000000353,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister starts with initial value","status":"passed","title":"starts with initial value","duration":0.4677000000000362,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister accepts a valid set operation","status":"passed","title":"accepts a valid set operation","duration":0.31780000000003383,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister rejects stale timestamps","status":"passed","title":"rejects stale timestamps","duration":0.22860000000002856,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister rejects equal timestamps (not strictly greater)","status":"passed","title":"rejects equal timestamps (not strictly greater)","duration":0.29930000000001655,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister rejects revoked signers","status":"passed","title":"rejects revoked signers","duration":0.14629999999999654,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister tracks operation history","status":"passed","title":"tracks operation history","duration":1.036799999999971,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister merge takes the higher-timestamp value","status":"passed","title":"merge takes the higher-timestamp value","duration":0.1997000000000071,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — LWWRegister"],"fullName":"AuthenticatedCRDT — LWWRegister merge does not downgrade","status":"passed","title":"merge does not downgrade","duration":0.13269999999999982,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter starts at zero","status":"passed","title":"starts at zero","duration":0.20320000000003802,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter increments by 1 by default","status":"passed","title":"increments by 1 by default","duration":0.23599999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter increments by custom amount","status":"passed","title":"increments by custom amount","duration":0.09659999999996671,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter tracks per-node counts independently","status":"passed","title":"tracks per-node counts independently","duration":0.13900000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter returns 0 for unknown nodes","status":"passed","title":"returns 0 for unknown nodes","duration":0.08959999999990487,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter merge takes max per node","status":"passed","title":"merge takes max per node","duration":0.241800000000012,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter merge is idempotent","status":"passed","title":"merge is idempotent","duration":0.13289999999994961,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — GCounter"],"fullName":"AuthenticatedCRDT — GCounter toJSON / fromJSON round-trips","status":"passed","title":"toJSON / fromJSON round-trips","duration":0.5779999999999745,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet starts empty","status":"passed","title":"starts empty","duration":0.3824000000000751,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet add inserts an element","status":"passed","title":"add inserts an element","duration":0.4561999999999671,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet add from revoked signer is rejected","status":"passed","title":"add from revoked signer is rejected","duration":0.21230000000002747,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet remove removes all copies of a value","status":"passed","title":"remove removes all copies of a value","duration":0.42859999999996035,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet remove returns 0 for non-existent values","status":"passed","title":"remove returns 0 for non-existent values","duration":0.2239999999999327,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet values are deduplicated","status":"passed","title":"values are deduplicated","duration":0.43279999999992924,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet works with object values","status":"passed","title":"works with object values","duration":0.5730000000000928,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet merge: adds from other win over concurrent state","status":"passed","title":"merge: adds from other win over concurrent state","duration":0.4676000000000613,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet merge: tombstones from other are applied when tags collide","status":"passed","title":"merge: tombstones from other are applied when tags collide","duration":0.290300000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet merge: concurrent adds with different signers survive removes","status":"passed","title":"merge: concurrent adds with different signers survive removes","duration":0.13429999999993925,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — ORSet"],"fullName":"AuthenticatedCRDT — ORSet merge: revoked signers are filtered out","status":"passed","title":"merge: revoked signers are filtered out","duration":0.1428000000000793,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers createAgentState initializes empty state","status":"passed","title":"createAgentState initializes empty state","duration":0.25670000000002346,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers setRegister / getRegister round-trip","status":"passed","title":"setRegister / getRegister round-trip","duration":0.33149999999989177,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers setRegister creates register on first use","status":"passed","title":"setRegister creates register on first use","duration":0.26269999999999527,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers setRegister rejects stale updates","status":"passed","title":"setRegister rejects stale updates","duration":0.2318000000000211,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers getRegister returns undefined for missing keys","status":"passed","title":"getRegister returns undefined for missing keys","duration":0.14780000000007476,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers incrementCounter / getCounter","status":"passed","title":"incrementCounter / getCounter","duration":0.2725000000000364,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers getCounter returns 0 for missing counters","status":"passed","title":"getCounter returns 0 for missing counters","duration":0.14030000000002474,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — Agent State helpers"],"fullName":"AuthenticatedCRDT — Agent State helpers incrementCounter creates counter on first use","status":"passed","title":"incrementCounter creates counter on first use","duration":0.1652000000000271,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — mergeStates"],"fullName":"AuthenticatedCRDT — mergeStates merges registers from remote into local","status":"passed","title":"merges registers from remote into local","duration":0.34580000000005384,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — mergeStates"],"fullName":"AuthenticatedCRDT — mergeStates local register wins when it has higher timestamp","status":"passed","title":"local register wins when it has higher timestamp","duration":0.12790000000006785,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — mergeStates"],"fullName":"AuthenticatedCRDT — mergeStates merges counters from remote into local","status":"passed","title":"merges counters from remote into local","duration":0.10910000000001219,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — mergeStates"],"fullName":"AuthenticatedCRDT — mergeStates merges sets from remote into local","status":"passed","title":"merges sets from remote into local","duration":0.141399999999976,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — mergeStates"],"fullName":"AuthenticatedCRDT — mergeStates updates lastSync to the max of both","status":"passed","title":"updates lastSync to the max of both","duration":0.08780000000001564,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT — mergeStates"],"fullName":"AuthenticatedCRDT — mergeStates merge is commutative for counters","status":"passed","title":"merge is commutative for counters","duration":0.2676000000000158,"failureMessages":[],"meta":{}}],"startTime":1775362884652,"endTime":1775362884669.3457,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/AuthenticatedCRDT.test.ts"},{"assertionResults":[{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production matches capability by type","status":"passed","title":"matches capability by type","duration":2.407799999999952,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production returns null for non-matching type","status":"passed","title":"returns null for non-matching type","duration":0.4107000000000198,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production matches capability by domain","status":"passed","title":"matches capability by domain","duration":0.2805000000000746,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production matchAgent returns match for matching agent","status":"passed","title":"matchAgent returns match for matching agent","duration":0.926900000000046,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production matchAgent returns null for non-matching agent","status":"passed","title":"matchAgent returns null for non-matching agent","duration":0.23119999999994434,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production findMatches filters and scores agents","status":"passed","title":"findMatches filters and scores agents","duration":0.6315999999999349,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production findMatches respects limit","status":"passed","title":"findMatches respects limit","duration":0.3949999999999818,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production findBest returns top match","status":"passed","title":"findBest returns top match","duration":0.29550000000006094,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production findBest returns null for no matches","status":"passed","title":"findBest returns null for no matches","duration":0.29300000000000637,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production sortMatches by score desc","status":"passed","title":"sortMatches by score desc","duration":0.3251000000000204,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher — Production"],"fullName":"CapabilityMatcher — Production sortMatches by name asc","status":"passed","title":"sortMatches by name asc","duration":18.9461,"failureMessages":[],"meta":{}}],"startTime":1775362884696,"endTime":1775362884720.946,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/CapabilityMatcher.prod.test.ts"},{"assertionResults":[{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher matches capability by type","status":"passed","title":"matches capability by type","duration":3.977200000000039,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects wrong type","status":"passed","title":"rejects wrong type","duration":0.4311999999999898,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher matches by domain","status":"passed","title":"matches by domain","duration":0.4095999999999549,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects wrong domain","status":"passed","title":"rejects wrong domain","duration":0.21649999999999636,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher matches by maxLatency","status":"passed","title":"matches by maxLatency","duration":0.23340000000007421,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects exceeding maxLatency","status":"passed","title":"rejects exceeding maxLatency","duration":0.19650000000001455,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects unavailable capability","status":"passed","title":"rejects unavailable capability","duration":0.14400000000000546,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher returns score with priority bonus","status":"passed","title":"returns score with priority bonus","duration":0.1976999999999407,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher score is capped at 1","status":"passed","title":"score is capped at 1","duration":0.379099999999994,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher matches agent with matching capabilities","status":"passed","title":"matches agent with matching capabilities","duration":0.4703999999999269,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects offline agent by default","status":"passed","title":"rejects offline agent by default","duration":0.1471000000000231,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher includes offline agent when includeOffline","status":"passed","title":"includes offline agent when includeOffline","duration":0.1409999999999627,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects by trust level","status":"passed","title":"rejects by trust level","duration":0.13269999999999982,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects by missing tags","status":"passed","title":"rejects by missing tags","duration":0.11560000000008586,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher passes with all tags present","status":"passed","title":"passes with all tags present","duration":0.13469999999995252,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher findMatches returns results ordered by score","status":"passed","title":"findMatches returns results ordered by score","duration":0.5603000000000975,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher findMatches respects limit","status":"passed","title":"findMatches respects limit","duration":0.2577999999999747,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher findBest returns top match","status":"passed","title":"findBest returns top match","duration":0.16610000000002856,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher findBest returns null for no matches","status":"passed","title":"findBest returns null for no matches","duration":0.0805000000000291,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher findAgents convenience works","status":"passed","title":"findAgents convenience works","duration":0.1391999999999598,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher findBestAgent convenience works","status":"passed","title":"findBestAgent convenience works","duration":0.11199999999996635,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher matches agent with global scope","status":"passed","title":"matches agent with global scope","duration":0.2076000000000704,"failureMessages":[],"meta":{}},{"ancestorTitles":["CapabilityMatcher"],"fullName":"CapabilityMatcher rejects agent outside spatial bounds","status":"passed","title":"rejects agent outside spatial bounds","duration":0.13540000000000418,"failureMessages":[],"meta":{}}],"startTime":1775362885392,"endTime":1775362885401.2075,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/CapabilityMatcher.test.ts"},{"assertionResults":[{"ancestorTitles":["CrossRealityHandoff","negotiateHandoff"],"fullName":"CrossRealityHandoff negotiateHandoff VR→Phone loses spatial tracking, gains GPS","status":"passed","title":"VR→Phone loses spatial tracking, gains GPS","duration":3.1605999999999312,"failureMessages":[],"meta":{}},{"ancestorTitles":["CrossRealityHandoff","negotiateHandoff"],"fullName":"CrossRealityHandoff negotiateHandoff Phone→Car gains spatial audio","status":"failed","title":"Phone→Car gains spatial audio","duration":12.513100000000009,"failureMessages":["AssertionError: expected [] to include 'gpu3D'\n at Proxy.<anonymous> (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+expect@3.2.4/node_modules/@vitest/expect/dist/index.js:1191:15)\n at Proxy.<anonymous> (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+expect@3.2.4/node_modules/@vitest/expect/dist/index.js:1029:14)\n at Proxy.methodWrapper (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/chai@5.3.3/node_modules/chai/index.js:1686:25)\n at C:\\Users\\josep\\Documents\\GitHub\\HoloScript\\packages\\framework\\src\\agents\\__tests__\\CrossRealityHandoff.test.ts:131:27\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:155:11\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:752:26\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1897:20\n at new Promise (<anonymous>)\n at runWithTimeout (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1863:10)\n at runTest (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1574:12)"],"meta":{}},{"ancestorTitles":["CrossRealityHandoff","negotiateHandoff"],"fullName":"CrossRealityHandoff negotiateHandoff unavailable target is not feasible","status":"passed","title":"unavailable target is not feasible","duration":0.7520999999999276,"failureMessages":[],"meta":{}},{"ancestorTitles":["CrossRealityHandoff","negotiateHandoff"],"fullName":"CrossRealityHandoff negotiateHandoff same-category handoff is faster","status":"failed","title":"same-category handoff is faster","duration":1.5793999999999642,"failureMessages":["AssertionError: expected 100 to be less than 100\n at C:\\Users\\josep\\Documents\\GitHub\\HoloScript\\packages\\framework\\src\\agents\\__tests__\\CrossRealityHandoff.test.ts:151:39\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:155:11\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:752:26\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1897:20\n at new Promise (<anonymous>)\n at runWithTimeout (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1863:10)\n at runTest (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1574:12)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at runSuite (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1729:8)\n at runSuite (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1729:8)"],"meta":{}},{"ancestorTitles":["CrossRealityHandoff","MVC Payload"],"fullName":"CrossRealityHandoff MVC Payload creates valid payload with 5 typed objects","status":"passed","title":"creates valid payload with 5 typed objects","duration":2.0697999999999865,"failureMessages":[],"meta":{}},{"ancestorTitles":["CrossRealityHandoff","MVC Payload"],"fullName":"CrossRealityHandoff MVC Payload stays within 10KB budget","status":"passed","title":"stays within 10KB budget","duration":0.9358999999999469,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","signOperation + verify"],"fullName":"AuthenticatedCRDT signOperation + verify valid signed operation verifies","status":"passed","title":"valid signed operation verifies","duration":0.7730999999999995,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","signOperation + verify"],"fullName":"AuthenticatedCRDT signOperation + verify revoked DID fails verification","status":"passed","title":"revoked DID fails verification","duration":0.2685999999999922,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","signOperation + verify"],"fullName":"AuthenticatedCRDT signOperation + verify out-of-scope DID fails verification","status":"passed","title":"out-of-scope DID fails verification","duration":0.49919999999997344,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","signOperation + verify"],"fullName":"AuthenticatedCRDT signOperation + verify scoped DID passes for in-scope operations","status":"passed","title":"scoped DID passes for in-scope operations","duration":0.26499999999998636,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","LWWRegister"],"fullName":"AuthenticatedCRDT LWWRegister sets and gets value","status":"passed","title":"sets and gets value","duration":0.36609999999996035,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","LWWRegister"],"fullName":"AuthenticatedCRDT LWWRegister rejects stale timestamps","status":"passed","title":"rejects stale timestamps","duration":0.2781000000001086,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","LWWRegister"],"fullName":"AuthenticatedCRDT LWWRegister rejects revoked signer","status":"passed","title":"rejects revoked signer","duration":0.18380000000001928,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","LWWRegister"],"fullName":"AuthenticatedCRDT LWWRegister merges by picking latest timestamp","status":"passed","title":"merges by picking latest timestamp","duration":0.3468000000000302,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","GCounter"],"fullName":"AuthenticatedCRDT GCounter increments per node","status":"passed","title":"increments per node","duration":0.28530000000000655,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","GCounter"],"fullName":"AuthenticatedCRDT GCounter merges by taking max per node","status":"passed","title":"merges by taking max per node","duration":0.3485999999999194,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","GCounter"],"fullName":"AuthenticatedCRDT GCounter serializes to/from JSON","status":"passed","title":"serializes to/from JSON","duration":0.29340000000001965,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","ORSet"],"fullName":"AuthenticatedCRDT ORSet adds and checks membership","status":"passed","title":"adds and checks membership","duration":0.38400000000001455,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","ORSet"],"fullName":"AuthenticatedCRDT ORSet removes elements","status":"passed","title":"removes elements","duration":0.19229999999993197,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","ORSet"],"fullName":"AuthenticatedCRDT ORSet concurrent adds win over removes on merge","status":"passed","title":"concurrent adds win over removes on merge","duration":0.16589999999996508,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","ORSet"],"fullName":"AuthenticatedCRDT ORSet rejects adds from revoked DID","status":"passed","title":"rejects adds from revoked DID","duration":0.08719999999993888,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","ORSet"],"fullName":"AuthenticatedCRDT ORSet deduplicates values","status":"passed","title":"deduplicates values","duration":1.0615000000000236,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","AuthenticatedAgentState"],"fullName":"AuthenticatedCRDT AuthenticatedAgentState creates empty state","status":"passed","title":"creates empty state","duration":0.15489999999999782,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","AuthenticatedAgentState"],"fullName":"AuthenticatedCRDT AuthenticatedAgentState sets and gets registers","status":"passed","title":"sets and gets registers","duration":0.22050000000001546,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","AuthenticatedAgentState"],"fullName":"AuthenticatedCRDT AuthenticatedAgentState rejects unauthorized register writes","status":"passed","title":"rejects unauthorized register writes","duration":0.11839999999995143,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","AuthenticatedAgentState"],"fullName":"AuthenticatedCRDT AuthenticatedAgentState increments and gets counters","status":"passed","title":"increments and gets counters","duration":0.21810000000004948,"failureMessages":[],"meta":{}},{"ancestorTitles":["AuthenticatedCRDT","AuthenticatedAgentState"],"fullName":"AuthenticatedCRDT AuthenticatedAgentState merges two states","status":"passed","title":"merges two states","duration":0.40269999999998163,"failureMessages":[],"meta":{}}],"startTime":1775362884651,"endTime":1775362884680.4026,"status":"failed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/CrossRealityHandoff.test.ts"},{"assertionResults":[{"ancestorTitles":["CulturalMemory","Episodic Memory"],"fullName":"CulturalMemory Episodic Memory records and recalls memories","status":"passed","title":"records and recalls memories","duration":4.095100000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Episodic Memory"],"fullName":"CulturalMemory Episodic Memory filters by normId","status":"passed","title":"filters by normId","duration":0.6585999999999785,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Episodic Memory"],"fullName":"CulturalMemory Episodic Memory filters by tags","status":"passed","title":"filters by tags","duration":0.5203000000000202,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Episodic Memory"],"fullName":"CulturalMemory Episodic Memory evicts oldest when over capacity","status":"passed","title":"evicts oldest when over capacity","duration":0.6354999999999791,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Episodic Memory"],"fullName":"CulturalMemory Episodic Memory decays memory strength over ticks","status":"passed","title":"decays memory strength over ticks","duration":0.6994000000000824,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Episodic Memory"],"fullName":"CulturalMemory Episodic Memory prunes memories below threshold","status":"passed","title":"prunes memories below threshold","duration":0.6091000000000122,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Stigmergic Traces"],"fullName":"CulturalMemory Stigmergic Traces leaves and perceives traces","status":"passed","title":"leaves and perceives traces","duration":0.7468999999999824,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Stigmergic Traces"],"fullName":"CulturalMemory Stigmergic Traces does not perceive out-of-range traces","status":"passed","title":"does not perceive out-of-range traces","duration":0.5852000000000999,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Stigmergic Traces"],"fullName":"CulturalMemory Stigmergic Traces reinforces traces","status":"passed","title":"reinforces traces","duration":0.8843000000000529,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Stigmergic Traces"],"fullName":"CulturalMemory Stigmergic Traces traces decay over ticks","status":"passed","title":"traces decay over ticks","duration":0.30520000000001346,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Stigmergic Traces"],"fullName":"CulturalMemory Stigmergic Traces evaporated traces are pruned","status":"passed","title":"evaporated traces are pruned","duration":0.3063999999999396,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","SOP Consolidation"],"fullName":"CulturalMemory SOP Consolidation forms SOP when threshold reached","status":"passed","title":"forms SOP when threshold reached","duration":1.3188000000000102,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","SOP Consolidation"],"fullName":"CulturalMemory SOP Consolidation does not form SOP below threshold","status":"passed","title":"does not form SOP below threshold","duration":0.4673999999999978,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","SOP Consolidation"],"fullName":"CulturalMemory SOP Consolidation forms avoidance SOP for negative experiences","status":"passed","title":"forms avoidance SOP for negative experiences","duration":0.46240000000000236,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","SOP Consolidation"],"fullName":"CulturalMemory SOP Consolidation retrieves SOPs by agent","status":"passed","title":"retrieves SOPs by agent","duration":0.8311000000001059,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","State Persistence"],"fullName":"CulturalMemory State Persistence exports and imports state","status":"passed","title":"exports and imports state","duration":0.9783000000001039,"failureMessages":[],"meta":{}},{"ancestorTitles":["CulturalMemory","Stats"],"fullName":"CulturalMemory Stats reports correct stats","status":"passed","title":"reports correct stats","duration":0.3550999999999931,"failureMessages":[],"meta":{}}],"startTime":1775362884720,"endTime":1775362884735.355,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/CulturalMemory.test.ts"},{"assertionResults":[{"ancestorTitles":["FederatedRegistryAdapter","a2aCardToManifest"],"fullName":"FederatedRegistryAdapter a2aCardToManifest converts an A2A AgentCard to an AgentManifest","status":"passed","title":"converts an A2A AgentCard to an AgentManifest","duration":6.006199999999922,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","a2aCardToManifest"],"fullName":"FederatedRegistryAdapter a2aCardToManifest extracts capability type from skill tags","status":"passed","title":"extracts capability type from skill tags","duration":0.4733999999999696,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","a2aCardToManifest"],"fullName":"FederatedRegistryAdapter a2aCardToManifest deduplicates capabilities by type+domain","status":"passed","title":"deduplicates capabilities by type+domain","duration":0.4836999999999989,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","a2aCardToManifest"],"fullName":"FederatedRegistryAdapter a2aCardToManifest handles cards with no skills","status":"passed","title":"handles cards with no skills","duration":0.560100000000034,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","a2aCardToManifest"],"fullName":"FederatedRegistryAdapter a2aCardToManifest respects custom trustRemoteAs config","status":"passed","title":"respects custom trustRemoteAs config","duration":0.4330999999999676,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","fetchAndRegister"],"fullName":"FederatedRegistryAdapter fetchAndRegister fetches a remote agent card and registers into registry","status":"passed","title":"fetches a remote agent card and registers into registry","duration":2.001100000000065,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","fetchAndRegister"],"fullName":"FederatedRegistryAdapter fetchAndRegister returns null for failed HTTP requests","status":"passed","title":"returns null for failed HTTP requests","duration":0.4147000000000389,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","fetchAndRegister"],"fullName":"FederatedRegistryAdapter fetchAndRegister returns null when card is missing required fields","status":"passed","title":"returns null when card is missing required fields","duration":0.3605999999999767,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","fetchAndRegister"],"fullName":"FederatedRegistryAdapter fetchAndRegister enforces maxRemoteAgents capacity","status":"passed","title":"enforces maxRemoteAgents capacity","duration":0.8359000000000378,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","fetchAndRegister"],"fullName":"FederatedRegistryAdapter fetchAndRegister allows re-registering an existing remote agent (update)","status":"passed","title":"allows re-registering an existing remote agent (update)","duration":0.7276999999999134,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","pollAll"],"fullName":"FederatedRegistryAdapter pollAll polls all seed URLs and returns summary","status":"passed","title":"polls all seed URLs and returns summary","duration":0.9732999999999947,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","pollAll"],"fullName":"FederatedRegistryAdapter pollAll reports updated on subsequent polls","status":"passed","title":"reports updated on subsequent polls","duration":0.6076000000000477,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","polling lifecycle"],"fullName":"FederatedRegistryAdapter polling lifecycle starts and stops polling","status":"passed","title":"starts and stops polling","duration":0.3988999999999123,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","polling lifecycle"],"fullName":"FederatedRegistryAdapter polling lifecycle does not start duplicate polling timers","status":"passed","title":"does not start duplicate polling timers","duration":0.24089999999989686,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","discoverFederated"],"fullName":"FederatedRegistryAdapter discoverFederated discovers agents across local and remote registries","status":"passed","title":"discovers agents across local and remote registries","duration":1.5049999999999955,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","seed URL management"],"fullName":"FederatedRegistryAdapter seed URL management addSeedUrl adds a new URL","status":"passed","title":"addSeedUrl adds a new URL","duration":0.3446999999999889,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","seed URL management"],"fullName":"FederatedRegistryAdapter seed URL management removeSeedUrl deregisters the associated agent","status":"passed","title":"removeSeedUrl deregisters the associated agent","duration":0.5029000000000678,"failureMessages":[],"meta":{}},{"ancestorTitles":["FederatedRegistryAdapter","getPollResult"],"fullName":"FederatedRegistryAdapter getPollResult tracks poll results per URL","status":"passed","title":"tracks poll results per URL","duration":0.35579999999993106,"failureMessages":[],"meta":{}}],"startTime":1775362884816,"endTime":1775362884835.3557,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/FederatedRegistryAdapter.test.ts"},{"assertionResults":[],"startTime":1775362883656,"endTime":1775362883656,"status":"failed","message":"Cannot find package '@holoscript/core' imported from 'C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/NormEngine.ts'","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/NormEngine.test.ts"},{"assertionResults":[{"ancestorTitles":["OrchestratorAgent","identity"],"fullName":"OrchestratorAgent identity has correct identity fields","status":"passed","title":"has correct identity fields","duration":5.459599999999909,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","runCycle"],"fullName":"OrchestratorAgent runCycle executes a complete 7-phase cycle","status":"passed","title":"executes a complete 7-phase cycle","duration":4.757099999999809,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","runCycle"],"fullName":"OrchestratorAgent runCycle all phases succeed with no agents registered","status":"passed","title":"all phases succeed with no agents registered","duration":1.0951000000000022,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","runCycle"],"fullName":"OrchestratorAgent runCycle INTAKE phase discovers registered agents","status":"passed","title":"INTAKE phase discovers registered agents","duration":2.958099999999831,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","delegateTask"],"fullName":"OrchestratorAgent delegateTask delegates to a registered agent","status":"passed","title":"delegates to a registered agent","duration":0.8751999999999498,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","delegateTask"],"fullName":"OrchestratorAgent delegateTask returns rejected when no agents available","status":"passed","title":"returns rejected when no agents available","duration":0.5339999999998781,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","runWorkflow"],"fullName":"OrchestratorAgent runWorkflow runs a workflow using localExecutor","status":"passed","title":"runs a workflow using localExecutor","duration":1.6220999999998185,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","getDiscoveredAgents"],"fullName":"OrchestratorAgent getDiscoveredAgents returns all agents from registry","status":"passed","title":"returns all agents from registry","duration":0.6945000000000618,"failureMessages":[],"meta":{}},{"ancestorTitles":["OrchestratorAgent","shutdown"],"fullName":"OrchestratorAgent shutdown stops polling without error","status":"passed","title":"stops polling without error","duration":1.6376999999999953,"failureMessages":[],"meta":{}}],"startTime":1775362884899,"endTime":1775362884920.6377,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/OrchestratorAgent.test.ts"},{"assertionResults":[{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate validates a valid linear workflow","status":"passed","title":"validates a valid linear workflow","duration":5.197099999999978,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate validates a parallel workflow","status":"passed","title":"validates a parallel workflow","duration":2.0400999999999385,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate detects cycles","status":"passed","title":"detects cycles","duration":0.550200000000018,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate detects missing dependencies","status":"passed","title":"detects missing dependencies","duration":0.4175999999999931,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate detects missing skills","status":"passed","title":"detects missing skills","duration":0.2961999999999989,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate detects invalid ref inputs","status":"passed","title":"detects invalid ref inputs","duration":0.3831000000000131,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate rejects empty workflow","status":"passed","title":"rejects empty workflow","duration":0.2477999999999838,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","validate"],"fullName":"SkillWorkflowEngine validate warns about ref without explicit dependsOn","status":"passed","title":"warns about ref without explicit dependsOn","duration":0.4517999999999347,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute executes a linear workflow end-to-end","status":"passed","title":"executes a linear workflow end-to-end","duration":1.8437999999999874,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute executes a parallel fan-out workflow","status":"passed","title":"executes a parallel fan-out workflow","duration":0.6657000000000153,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute resolves context inputs","status":"passed","title":"resolves context inputs","duration":0.3709999999999809,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute resolves ref inputs from previous step outputs","status":"passed","title":"resolves ref inputs from previous step outputs","duration":0.26269999999999527,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute calls progress callback","status":"passed","title":"calls progress callback","duration":4.095000000000027,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute handles step failure with status=failed","status":"passed","title":"handles step failure with status=failed","duration":0.6206999999999425,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute skips step on error when onError=skip","status":"passed","title":"skips step on error when onError=skip","duration":0.4659000000000333,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute uses fallback skill when onError=fallback","status":"passed","title":"uses fallback skill when onError=fallback","duration":0.5872000000000526,"failureMessages":[],"meta":{}},{"ancestorTitles":["SkillWorkflowEngine","execute"],"fullName":"SkillWorkflowEngine execute handles per-step timeout","status":"passed","title":"handles per-step timeout","duration":65.60300000000007,"failureMessages":[],"meta":{}}],"startTime":1775362884705,"endTime":1775362884789.603,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/SkillWorkflowEngine.test.ts"},{"assertionResults":[{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo delegates to a local agent using localExecutor","status":"passed","title":"delegates to a local agent using localExecutor","duration":3.149499999999989,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo returns rejected for unknown agent ID","status":"passed","title":"returns rejected for unknown agent ID","duration":0.5600999999999203,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo delegates to a remote agent via A2A JSON-RPC","status":"passed","title":"delegates to a remote agent via A2A JSON-RPC","duration":1.1706000000001495,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo handles remote agent HTTP errors","status":"passed","title":"handles remote agent HTTP errors","duration":0.6942999999998847,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo handles remote agent JSON-RPC errors","status":"passed","title":"handles remote agent JSON-RPC errors","duration":0.49480000000016844,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo times out on slow execution","status":"passed","title":"times out on slow execution","duration":60.06269999999995,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo retries on failure with exponential backoff","status":"passed","title":"retries on failure with exponential backoff","duration":3241.0060999999996,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","delegateTo"],"fullName":"TaskDelegationService delegateTo fails after exhausting retries","status":"passed","title":"fails after exhausting retries","duration":1059.9070000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","autoDelegate"],"fullName":"TaskDelegationService autoDelegate auto-selects the best agent and delegates","status":"passed","title":"auto-selects the best agent and delegates","duration":0.869499999999789,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","autoDelegate"],"fullName":"TaskDelegationService autoDelegate returns rejected when no matching agent found","status":"passed","title":"returns rejected when no matching agent found","duration":0.2536000000000058,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","history tracking"],"fullName":"TaskDelegationService history tracking tracks delegation results","status":"passed","title":"tracks delegation results","duration":0.9143000000003667,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","history tracking"],"fullName":"TaskDelegationService history tracking getStatus retrieves result by taskId","status":"passed","title":"getStatus retrieves result by taskId","duration":0.22159999999985303,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","history tracking"],"fullName":"TaskDelegationService history tracking enforces maxHistory with LRU eviction","status":"passed","title":"enforces maxHistory with LRU eviction","duration":0.23449999999957072,"failureMessages":[],"meta":{}},{"ancestorTitles":["TaskDelegationService","history tracking"],"fullName":"TaskDelegationService history tracking getStats returns correct counts","status":"passed","title":"getStats returns correct counts","duration":0.2977000000000771,"failureMessages":[],"meta":{}}],"startTime":1775362884816,"endTime":1775362889186.2976,"status":"passed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/__tests__/TaskDelegationService.test.ts"},{"assertionResults":[{"ancestorTitles":["Performance Benchmarks","Layer 1: Real-Time Performance"],"fullName":"Performance Benchmarks Layer 1: Real-Time Performance should encode position sync in <0.5ms","status":"passed","title":"should encode position sync in <0.5ms","duration":11.927999999999884,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Layer 1: Real-Time Performance"],"fullName":"Performance Benchmarks Layer 1: Real-Time Performance should decode position sync in <0.5ms","status":"passed","title":"should decode position sync in <0.5ms","duration":6.120599999999968,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Layer 1: Real-Time Performance"],"fullName":"Performance Benchmarks Layer 1: Real-Time Performance should maintain message rate of 90 msg/s","status":"passed","title":"should maintain message rate of 90 msg/s","duration":1041.0973999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Layer 1: Real-Time Performance"],"fullName":"Performance Benchmarks Layer 1: Real-Time Performance should keep binary message size under 512 bytes","status":"passed","title":"should keep binary message size under 512 bytes","duration":0.5021999999999025,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Frame Budget Tracker"],"fullName":"Performance Benchmarks Frame Budget Tracker should maintain 90fps with 11.1ms frame times","status":"passed","title":"should maintain 90fps with 11.1ms frame times","duration":0.7932999999998174,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Frame Budget Tracker"],"fullName":"Performance Benchmarks Frame Budget Tracker should degrade to medium quality at 12.5ms","status":"passed","title":"should degrade to medium quality at 12.5ms","duration":0.25779999999986103,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Frame Budget Tracker"],"fullName":"Performance Benchmarks Frame Budget Tracker should degrade to low quality at 14ms","status":"passed","title":"should degrade to low quality at 14ms","duration":0.22990000000027067,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Frame Budget Tracker"],"fullName":"Performance Benchmarks Frame Budget Tracker should degrade to minimal quality at 16ms","status":"passed","title":"should degrade to minimal quality at 16ms","duration":0.21680000000014843,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Frame Budget Tracker"],"fullName":"Performance Benchmarks Frame Budget Tracker should recover quality when frame times improve","status":"passed","title":"should recover quality when frame times improve","duration":0.33579999999983556,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Frame Budget Tracker"],"fullName":"Performance Benchmarks Frame Budget Tracker should track budget remaining accurately","status":"passed","title":"should track budget remaining accurately","duration":0.18079999999963547,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Multi-Agent Performance"],"fullName":"Performance Benchmarks Multi-Agent Performance should maintain 90fps with 5 agents","status":"passed","title":"should maintain 90fps with 5 agents","duration":0.9317999999998392,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Multi-Agent Performance"],"fullName":"Performance Benchmarks Multi-Agent Performance should maintain 90fps with 10 agents","status":"passed","title":"should maintain 90fps with 10 agents","duration":0.7233999999998559,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Bandwidth Usage"],"fullName":"Performance Benchmarks Bandwidth Usage should use <10 KB/s per agent at 90fps","status":"passed","title":"should use <10 KB/s per agent at 90fps","duration":0.3020000000001346,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Bandwidth Usage"],"fullName":"Performance Benchmarks Bandwidth Usage should use <50 KB/s total with 5 agents","status":"passed","title":"should use <50 KB/s total with 5 agents","duration":0.35150000000021464,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Latency Tests"],"fullName":"Performance Benchmarks Latency Tests should complete round-trip in <2ms","status":"passed","title":"should complete round-trip in <2ms","duration":1568.2959999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["Performance Benchmarks","Memory Usage"],"fullName":"Performance Benchmarks Memory Usage should not leak memory over time","status":"failed","title":"should not leak memory over time","duration":5017.471300000001,"failureMessages":["Error: STACK_TRACE_ERROR\n at task (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:638:27)\n at Object.<anonymous> (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:662:16)\n at Object.<anonymous> (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:458:28)\n at chain (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:369:14)\n at C:\\Users\\josep\\Documents\\GitHub\\HoloScript\\packages\\framework\\src\\agents\\spatial-comms\\__tests__\\performance-benchmark.test.ts:394:5\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:734:40\n at runWithSuite (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1849:8)\n at Object.collect (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:734:10)\n at Object.collect (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:738:54)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at Object.collect (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:738:46)\n at collectTests (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1179:25)\n at startTests (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/chunk-hooks.js:1817:17)\n at file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/vitest@3.2.4_@types+node@24.10.13/node_modules/vitest/dist/chunks/runBaseTests.9Ij9_de-.js:117:26\n at withEnv (file:///C:/Users/josep/Documents/GitHub/HoloScript/node_modules/.pnpm/vitest@3.2.4_@types+node@24.10.13/node_modules/vitest/dist/chunks/runBaseTests.9Ij9_de-.js:84:3)"],"meta":{}},{"ancestorTitles":["Performance Summary"],"fullName":"Performance Summary should print performance summary","status":"passed","title":"should print performance summary","duration":0.561200000000099,"failureMessages":[],"meta":{}}],"startTime":1775362885101,"endTime":1775362892752.5613,"status":"failed","message":"","name":"C:/Users/josep/Documents/GitHub/HoloScript/packages/framework/src/agents/spatial-comms/__tests__/performance-benchmark.test.ts"}]}
package/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # @holoscript/framework
2
+
3
+ ## 6.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @holoscript/core@6.0.3
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-2026 HoloScript Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/ROADMAP.md ADDED
@@ -0,0 +1,175 @@
1
+ # @holoscript/framework Roadmap
2
+
3
+ > The framework where agents remember, learn, and earn.
4
+
5
+ ## Architecture
6
+
7
+ The framework is the **canonical home** for all agent logic. Other packages get lighter as framework gets heavier.
8
+
9
+ ```
10
+ @holoscript/framework = types, logic, BT, consensus, knowledge, agents, mesh, economy
11
+ @holoscript/mcp-server = thin HTTP layer that imports from framework (routes only, no logic)
12
+ @holoscript/core = compilers, traits, parser, physics (NOT agent logic)
13
+ agent-protocol = absorbed into framework, eventually deprecated
14
+ agent-sdk = absorbed into framework, eventually deprecated
15
+ ```
16
+
17
+ Every phase below has two parts: **absorb** (move logic into framework) and **shed** (delete from source package, replace with import).
18
+
19
+ ---
20
+
21
+ ## Current State (v0.1.0 + v0.2 partial)
22
+
23
+ **Absorbed:**
24
+ - `defineAgent()` / `defineTeam()` — fluent builders
25
+ - `Team.runCycle()` with 7-phase `ProtocolAgent` (INTAKE through EVOLVE)
26
+ - `GoalSynthesizer` — agents synthesize goals when board is empty
27
+ - `Team.addTasks()` / `scoutFromTodos()` — board population with dedup
28
+ - `Team.propose()` — consensus voting via LLM
29
+ - `Team.suggest()` / `vote()` / `suggestions()` — team improvement proposals
30
+ - `Team.setMode()` / `derive()` / `presence()` / `heartbeat()` — board features
31
+ - `Team.leaderboard()` — reputation (newcomer -> contributor -> expert -> authority)
32
+ - `KnowledgeStore` — W/P/G with search, compounding, persistence, remote sync
33
+ - `callLLM()` — provider-agnostic (Anthropic, OpenAI, xAI, OpenRouter)
34
+ - `BehaviorTree` — full node classes (Sequence, Selector, Action, Condition, etc.)
35
+ - `ProtocolAgent` / `runProtocolCycle()` — 7-phase BaseAgent backed by LLM
36
+ - Re-exports: BaseAgent, GoalSynthesizer, MicroPhaseDecomposer, PWG types
37
+
38
+ **Shed so far:**
39
+ - `board-tools.ts` handleBoardAdd + handleScout -> framework
40
+ - `team-coordinator.ts` runAgentCycle -> framework Team.runCycle
41
+
42
+ **Tests:** 54 framework + 1265 mcp-server
43
+
44
+ ---
45
+
46
+ ## Phase 1: Absorb agent-protocol (v0.2.0)
47
+
48
+ Move all agent-protocol logic into framework. agent-protocol becomes a re-export shim.
49
+
50
+ | Absorb into framework | Delete from agent-protocol | Effort |
51
+ |-----------------------|---------------------------|--------|
52
+ | Move `BaseAgent` class + 7-phase `runCycle` | Replace with `export { BaseAgent } from '@holoscript/framework'` | M |
53
+ | Move `GoalSynthesizer` class | Replace with re-export | S |
54
+ | Move `MicroPhaseDecomposer` class (topo sort, parallel exec) | Replace with re-export | S |
55
+ | Move `BaseService` + `ServiceLifecycle` + `ServiceError` | Replace with re-export | S |
56
+ | Move PWG types (Pattern, Wisdom, Gotcha, PWGSeverity) | Replace with re-export | S |
57
+ | Move `PhaseResult`, `CycleResult`, `AgentIdentity` types | Replace with re-export | S |
58
+ | Wire `MicroPhaseDecomposer` into Team for complex task decomposition | N/A (new wiring) | M |
59
+ | **agent-protocol/src/index.ts becomes:** `export * from '@holoscript/framework'` | Full package hollowed | S |
60
+
61
+ ---
62
+
63
+ ## Phase 2: Absorb board logic from mcp-server (v0.3.0)
64
+
65
+ Move board state management into framework. mcp-server routes become thin HTTP handlers.
66
+
67
+ | Absorb into framework | Delete from mcp-server | Effort |
68
+ |-----------------------|------------------------|--------|
69
+ | Move `TeamTask`, `DoneLogEntry`, `TeamSuggestion` types + logic | http-routes.ts drops inline types, imports from framework | M |
70
+ | Move board CRUD logic (add, claim, done, block, reopen, dedup) | http-routes.ts handlers become `team.X()` calls | M |
71
+ | Move suggestion logic (create, vote, auto-promote, auto-dismiss) | http-routes.ts suggestion handlers become `team.X()` calls | M |
72
+ | Move task derivation parser (checkboxes, headers, grep TODO/FIXME) | http-routes.ts derive handler becomes `team.derive()` call | S |
73
+ | Move scout endpoint logic into framework `Team.scout()` | http-routes.ts scout handler becomes `team.scout()` call | S |
74
+ | Move `ROOM_PRESETS` (audit/research/build/review) into framework | http-routes.ts mode handler imports presets from framework | S |
75
+ | Move `TeamAgentProfile` definitions (Brittney, Daemon, Absorb, Oracle) | team-agents.ts becomes re-export shim | S |
76
+ | Move `team-coordinator.ts` remaining functions (assign, compound, query) | Delete file, import from framework | M |
77
+ | Move done-log audit logic (commit verification, duplicate detection) | http-routes.ts audit handler imports from framework | S |
78
+ | **board-tools.ts becomes:** all handlers call `team.X()`, zero logic | Full file is thin wrappers | S |
79
+
80
+ ---
81
+
82
+ ## Phase 3: Absorb mesh + networking from agent-sdk (v0.4.0)
83
+
84
+ Move P2P and discovery logic into framework. agent-sdk becomes a re-export shim.
85
+
86
+ | Absorb into framework | Delete from agent-sdk | Effort |
87
+ |-----------------------|----------------------|--------|
88
+ | Move `MeshDiscovery` (peer detection, stale pruning, heartbeat) | Replace with re-export | M |
89
+ | Move `SignalService` (capability broadcast) | Replace with re-export | M |
90
+ | Move `GossipProtocol` (anti-entropy, dedup hashing, delta sync) | Replace with re-export | M |
91
+ | Move `AgentCard` (A2A interop metadata) | Replace with re-export | S |
92
+ | Move `MCP_TOOL_SCHEMAS` for knowledge ops | Replace with re-export | S |
93
+ | Add `team.peers()` — list discovered peers with reputation | N/A (new API) | S |
94
+ | Add agent-to-agent direct messaging on Team | N/A (new API) | M |
95
+ | **agent-sdk/src/index.ts becomes:** `export * from '@holoscript/framework'` | Full package hollowed | S |
96
+
97
+ ---
98
+
99
+ ## Phase 4: Absorb knowledge brain from mcp-server (v0.5.0)
100
+
101
+ Move the CRDT consolidation engine and knowledge intelligence into framework.
102
+
103
+ | Absorb into framework | Delete from mcp-server | Effort |
104
+ |-----------------------|------------------------|--------|
105
+ | Move `DOMAIN_HALF_LIVES` + `DomainConsolidationConfig` | holomesh/types.ts drops these, imports from framework | S |
106
+ | Move `ExcitabilityMetadata` + scoring formula | holomesh/types.ts drops, imports from framework | S |
107
+ | Move consolidation cycles (sleep/wake, promote/evict/merge) | crdt-sync.ts consolidation engine moves to framework | L |
108
+ | Move `HotBufferEntry` + hot buffer management | crdt-sync.ts buffer logic moves to framework | M |
109
+ | Add vector embedding pipeline (delegate to orchestrator pgvector) | N/A (new integration) | M |
110
+ | Add cross-domain pattern surfacing in KnowledgeStore | N/A (new logic) | M |
111
+ | Add contradiction detection + resolution | N/A (new logic) | M |
112
+ | Add provenance chain (author -> task -> cycle -> verification) | Wire existing `provenanceHash` into StoredEntry | S |
113
+
114
+ ---
115
+
116
+ ## Phase 5: Absorb economy from core (v0.6.0)
117
+
118
+ Move payment, bounty, and marketplace logic into framework. Core keeps only compilers/traits/parser.
119
+
120
+ | Absorb into framework | Delete from core | Effort |
121
+ |-----------------------|------------------|--------|
122
+ | Move `PaymentGateway` (x402, USDC settlement) | core/economy drops, imports from framework | L |
123
+ | Move `RevenueSplitter` (bigint exact, sum=total invariant) | core/economy drops, imports from framework | M |
124
+ | Move `InvisibleWallet` (env/keystore/AgentKit) | core/economy drops, imports from framework | M |
125
+ | Add distributed task claiming with conflict resolution | N/A (new logic on top of existing board API) | M |
126
+ | Add skill-based routing (match task to best agent by capabilities) | Wire existing ClaimFilter + capabilities | M |
127
+ | Add cross-team delegation (`team.delegate(otherTeam, taskId)`) | N/A (new API) | M |
128
+ | Add bounty system (tasks with USDC rewards, payout on completion) | Wire existing bounty team architecture | L |
129
+
130
+ ---
131
+
132
+ ## Phase 6: Self-Improvement (v1.0.0)
133
+
134
+ The framework can improve itself.
135
+
136
+ | Task | Source | Effort |
137
+ |------|--------|--------|
138
+ | Wire absorb — scan framework's own codebase, find improvements | absorb.holoscript.net service | M |
139
+ | Auto-test generation via absorb pipeline | absorb.holoscript.net `absorb_run_pipeline` | M |
140
+ | Prompt optimization — A/B test system prompts, converge on best | LLM adapter + KnowledgeStore | M |
141
+ | Framework evolution — agents propose + vote + ship API changes | suggest() + propose() already in framework | S |
142
+
143
+ **v1.0 Sprint:** The framework's own agents can propose, vote on, and ship improvements to themselves.
144
+
145
+ ---
146
+
147
+ ## Post-v1.0: Package Cleanup
148
+
149
+ Once framework is the canonical home, deprecated packages become shims:
150
+
151
+ | Package | Becomes | Action |
152
+ |---------|---------|--------|
153
+ | `@holoscript/agent-protocol` | `export * from '@holoscript/framework'` | Keep for backward compat, mark deprecated |
154
+ | `@holoscript/agent-sdk` | `export * from '@holoscript/framework'` | Keep for backward compat, mark deprecated |
155
+ | `@holoscript/core` | Compilers + traits + parser only | Delete agent/BT/consensus/economy modules |
156
+ | `@holoscript/mcp-server` | HTTP routes only, zero logic | All handlers call `team.X()` |
157
+
158
+ ---
159
+
160
+ ## Sizing
161
+
162
+ | Size | Meaning |
163
+ |------|---------|
164
+ | **S** | Move + delete + re-export. Hours. |
165
+ | **M** | Move + refactor + tests. 1-2 days. |
166
+ | **L** | Architecture change + integration tests. 3-5 days. |
167
+
168
+ ## Principles
169
+
170
+ 1. **Absorb, then shed.** Move logic into framework, delete from source, replace with import.
171
+ 2. **Framework is the canonical home.** If it's agent logic, it lives here. Period.
172
+ 3. **Other packages get lighter.** Every phase should reduce LOC in mcp-server/core/agent-protocol/agent-sdk.
173
+ 4. **Local-first, server-optional.** Everything works in-process. Remote is an upgrade.
174
+ 5. **Knowledge is the product.** Output is the side effect. Every operation compounds knowledge.
175
+ 6. **The team gets smarter over time.** This is the north star. If a feature doesn't compound, it doesn't ship.