@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,261 @@
1
+ /**
2
+ * Ant Colony Optimization Engine
3
+ *
4
+ * Implements ACO algorithm for path-finding and task sequencing.
5
+ * Uses pheromone trails to find optimal ordering of choreography steps.
6
+ */
7
+
8
+ export interface ACOConfig {
9
+ antCount: number;
10
+ maxIterations: number;
11
+ convergenceThreshold: number;
12
+ alpha: number; // Pheromone importance
13
+ beta: number; // Heuristic importance
14
+ evaporationRate: number;
15
+ q: number; // Pheromone deposit factor
16
+ elitistWeight: number;
17
+ }
18
+
19
+ export interface ACOResult {
20
+ bestPath: number[];
21
+ bestCost: number;
22
+ converged: boolean;
23
+ iterations: number;
24
+ costHistory: number[];
25
+ }
26
+
27
+ const DEFAULT_CONFIG: ACOConfig = {
28
+ antCount: 20,
29
+ maxIterations: 100,
30
+ convergenceThreshold: 0.001,
31
+ alpha: 1.0,
32
+ beta: 2.0,
33
+ evaporationRate: 0.1,
34
+ q: 100,
35
+ elitistWeight: 2.0,
36
+ };
37
+
38
+ /**
39
+ * Ant Colony Optimization engine for path/sequence optimization
40
+ */
41
+ export class ACOEngine {
42
+ private config: ACOConfig;
43
+
44
+ constructor(config: Partial<ACOConfig> = {}) {
45
+ this.config = { ...DEFAULT_CONFIG, ...config };
46
+ }
47
+
48
+ /**
49
+ * Find optimal path through nodes (e.g., task execution order)
50
+ *
51
+ * @param nodes Number of nodes to visit
52
+ * @param distanceMatrix Distance/cost between nodes [i][j]
53
+ * @returns Optimization result with best path
54
+ */
55
+ async optimize(nodes: number, distanceMatrix: number[][]): Promise<ACOResult> {
56
+ const { antCount, maxIterations, convergenceThreshold } = this.config;
57
+
58
+ // Initialize pheromone trails
59
+ const pheromones = this.initializePheromones(nodes);
60
+ const heuristics = this.computeHeuristics(distanceMatrix);
61
+
62
+ let bestPath: number[] = [];
63
+ let bestCost = Infinity;
64
+ const costHistory: number[] = [];
65
+ let converged = false;
66
+ let iteration = 0;
67
+
68
+ // Main optimization loop
69
+ for (iteration = 0; iteration < maxIterations; iteration++) {
70
+ const paths: number[][] = [];
71
+ const costs: number[] = [];
72
+
73
+ // Each ant constructs a solution
74
+ for (let ant = 0; ant < antCount; ant++) {
75
+ const path = this.constructSolution(nodes, pheromones, heuristics);
76
+ const cost = this.calculatePathCost(path, distanceMatrix);
77
+
78
+ paths.push(path);
79
+ costs.push(cost);
80
+
81
+ if (cost < bestCost) {
82
+ bestCost = cost;
83
+ bestPath = [...path];
84
+ }
85
+ }
86
+
87
+ costHistory.push(bestCost);
88
+
89
+ // Evaporate pheromones
90
+ this.evaporatePheromones(pheromones);
91
+
92
+ // Deposit pheromones based on path quality
93
+ this.depositPheromones(pheromones, paths, costs);
94
+
95
+ // Elitist reinforcement: extra pheromone on best path
96
+ this.reinforceBestPath(pheromones, bestPath, bestCost);
97
+
98
+ // Check convergence
99
+ if (iteration > 10) {
100
+ const recentImprovement = costHistory[iteration - 10] - bestCost;
101
+ if (Math.abs(recentImprovement) < convergenceThreshold * bestCost) {
102
+ converged = true;
103
+ break;
104
+ }
105
+ }
106
+ }
107
+
108
+ return {
109
+ bestPath,
110
+ bestCost,
111
+ converged,
112
+ iterations: iteration + 1,
113
+ costHistory,
114
+ };
115
+ }
116
+
117
+ /**
118
+ * Initialize pheromone matrix with uniform values
119
+ */
120
+ private initializePheromones(nodes: number): number[][] {
121
+ const initial = 1.0 / nodes;
122
+ return Array.from({ length: nodes }, () => Array.from({ length: nodes }, () => initial));
123
+ }
124
+
125
+ /**
126
+ * Compute heuristic values (inverse distance)
127
+ */
128
+ private computeHeuristics(distanceMatrix: number[][]): number[][] {
129
+ const nodes = distanceMatrix.length;
130
+ return Array.from({ length: nodes }, (_, i) =>
131
+ Array.from({ length: nodes }, (_, j) => {
132
+ const dist = distanceMatrix[i][j];
133
+ return dist > 0 ? 1.0 / dist : 0;
134
+ })
135
+ );
136
+ }
137
+
138
+ /**
139
+ * Construct a solution path for one ant
140
+ */
141
+ private constructSolution(
142
+ nodes: number,
143
+ pheromones: number[][],
144
+ heuristics: number[][]
145
+ ): number[] {
146
+ const { alpha, beta } = this.config;
147
+ const path: number[] = [];
148
+ const visited = new Set<number>();
149
+
150
+ // Start from random node
151
+ let current = Math.floor(Math.random() * nodes);
152
+ path.push(current);
153
+ visited.add(current);
154
+
155
+ // Visit all remaining nodes
156
+ while (path.length < nodes) {
157
+ const probabilities: number[] = [];
158
+ let sum = 0;
159
+
160
+ // Calculate selection probabilities
161
+ for (let next = 0; next < nodes; next++) {
162
+ if (visited.has(next)) {
163
+ probabilities.push(0);
164
+ } else {
165
+ const phero = Math.pow(pheromones[current][next], alpha);
166
+ const heur = Math.pow(heuristics[current][next], beta);
167
+ const prob = phero * heur;
168
+ probabilities.push(prob);
169
+ sum += prob;
170
+ }
171
+ }
172
+
173
+ // Normalize and select next node
174
+ if (sum === 0) {
175
+ // Fallback: choose random unvisited
176
+ const unvisited = Array.from({ length: nodes }, (_, i) => i).filter((n) => !visited.has(n));
177
+ current = unvisited[Math.floor(Math.random() * unvisited.length)];
178
+ } else {
179
+ // Roulette wheel selection
180
+ const r = Math.random() * sum;
181
+ let cumulative = 0;
182
+ for (let next = 0; next < nodes; next++) {
183
+ cumulative += probabilities[next];
184
+ if (cumulative >= r) {
185
+ current = next;
186
+ break;
187
+ }
188
+ }
189
+ }
190
+
191
+ path.push(current);
192
+ visited.add(current);
193
+ }
194
+
195
+ return path;
196
+ }
197
+
198
+ /**
199
+ * Calculate total path cost
200
+ */
201
+ private calculatePathCost(path: number[], distanceMatrix: number[][]): number {
202
+ let cost = 0;
203
+ for (let i = 0; i < path.length - 1; i++) {
204
+ cost += distanceMatrix[path[i]][path[i + 1]];
205
+ }
206
+ return cost;
207
+ }
208
+
209
+ /**
210
+ * Evaporate pheromones
211
+ */
212
+ private evaporatePheromones(pheromones: number[][]): void {
213
+ const { evaporationRate } = this.config;
214
+ const minPheromone = 0.001;
215
+
216
+ for (let i = 0; i < pheromones.length; i++) {
217
+ for (let j = 0; j < pheromones[i].length; j++) {
218
+ pheromones[i][j] *= 1 - evaporationRate;
219
+ pheromones[i][j] = Math.max(minPheromone, pheromones[i][j]);
220
+ }
221
+ }
222
+ }
223
+
224
+ /**
225
+ * Deposit pheromones based on solution quality
226
+ */
227
+ private depositPheromones(pheromones: number[][], paths: number[][], costs: number[]): void {
228
+ const { q } = this.config;
229
+
230
+ for (let ant = 0; ant < paths.length; ant++) {
231
+ const path = paths[ant];
232
+ const deposit = q / costs[ant];
233
+
234
+ for (let i = 0; i < path.length - 1; i++) {
235
+ pheromones[path[i]][path[i + 1]] += deposit;
236
+ pheromones[path[i + 1]][path[i]] += deposit; // Symmetric
237
+ }
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Elitist reinforcement of best path
243
+ */
244
+ private reinforceBestPath(pheromones: number[][], bestPath: number[], bestCost: number): void {
245
+ const { q, elitistWeight } = this.config;
246
+ const deposit = (q / bestCost) * elitistWeight;
247
+
248
+ for (let i = 0; i < bestPath.length - 1; i++) {
249
+ pheromones[bestPath[i]][bestPath[i + 1]] += deposit;
250
+ pheromones[bestPath[i + 1]][bestPath[i]] += deposit;
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Get recommended ant count for problem
256
+ */
257
+ getRecommendedAntCount(nodes: number): number {
258
+ // Heuristic: roughly equal to node count, min 10, max 50
259
+ return Math.min(50, Math.max(10, nodes));
260
+ }
261
+ }
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Collective Intelligence Service
3
+ *
4
+ * Implements ICollectiveIntelligenceService for collaborative
5
+ * problem-solving through hive sessions.
6
+ */
7
+
8
+ import type {
9
+ ICollectiveIntelligenceService,
10
+ IHiveContribution,
11
+ IHiveSession,
12
+ } from '@holoscript/core';
13
+ import { VotingRound, type VotingResult } from './VotingRound';
14
+ import { ContributionSynthesizer, type SynthesisResult } from './ContributionSynthesizer';
15
+
16
+ export interface CollectiveIntelligenceConfig {
17
+ maxParticipants: number;
18
+ votingThreshold: number;
19
+ synthesisMinContributions: number;
20
+ autoCloseOnResolution: boolean;
21
+ contributionTimeoutMs: number;
22
+ }
23
+
24
+ const DEFAULT_CONFIG: CollectiveIntelligenceConfig = {
25
+ maxParticipants: 100,
26
+ votingThreshold: 0.5,
27
+ synthesisMinContributions: 3,
28
+ autoCloseOnResolution: true,
29
+ contributionTimeoutMs: 300000, // 5 minutes
30
+ };
31
+
32
+ /**
33
+ * Collective Intelligence Service
34
+ *
35
+ * Enables groups of agents to collaborate on complex problems through
36
+ * structured sessions with contributions, voting, and synthesis.
37
+ */
38
+ export class CollectiveIntelligence implements ICollectiveIntelligenceService {
39
+ private config: CollectiveIntelligenceConfig;
40
+ private sessions: Map<string, IHiveSession> = new Map();
41
+ private votingRounds: Map<string, VotingRound> = new Map();
42
+ private synthesizer: ContributionSynthesizer;
43
+ private contributionIdCounter = 0;
44
+
45
+ constructor(config: Partial<CollectiveIntelligenceConfig> = {}) {
46
+ this.config = { ...DEFAULT_CONFIG, ...config };
47
+ this.synthesizer = new ContributionSynthesizer();
48
+ }
49
+
50
+ /**
51
+ * Create a new hive session
52
+ */
53
+ createSession(topic: string, goal: string, initiator: string): IHiveSession {
54
+ const id = this.generateSessionId();
55
+
56
+ const session: IHiveSession = {
57
+ id,
58
+ topic,
59
+ goal,
60
+ initiator,
61
+ status: 'active',
62
+ participants: [initiator],
63
+ contributions: [],
64
+ };
65
+
66
+ this.sessions.set(id, session);
67
+ this.votingRounds.set(
68
+ id,
69
+ new VotingRound({
70
+ superMajorityThreshold: this.config.votingThreshold,
71
+ })
72
+ );
73
+
74
+ return session;
75
+ }
76
+
77
+ /**
78
+ * Join an existing session
79
+ */
80
+ join(sessionId: string, agentId: string): void {
81
+ const session = this.sessions.get(sessionId);
82
+ if (!session) {
83
+ throw new Error(`Session ${sessionId} not found`);
84
+ }
85
+
86
+ if (session.status !== 'active') {
87
+ throw new Error(`Session ${sessionId} is ${session.status}`);
88
+ }
89
+
90
+ if (session.participants.length >= this.config.maxParticipants) {
91
+ throw new Error(`Session ${sessionId} is full`);
92
+ }
93
+
94
+ if (!session.participants.includes(agentId)) {
95
+ session.participants.push(agentId);
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Leave a session
101
+ */
102
+ leave(sessionId: string, agentId: string): void {
103
+ const session = this.sessions.get(sessionId);
104
+ if (!session) {
105
+ throw new Error(`Session ${sessionId} not found`);
106
+ }
107
+
108
+ const index = session.participants.indexOf(agentId);
109
+ if (index !== -1) {
110
+ session.participants.splice(index, 1);
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Contribute to a session
116
+ */
117
+ contribute(
118
+ sessionId: string,
119
+ contribution: Omit<IHiveContribution, 'id' | 'timestamp'>
120
+ ): IHiveContribution {
121
+ const session = this.sessions.get(sessionId);
122
+ if (!session) {
123
+ throw new Error(`Session ${sessionId} not found`);
124
+ }
125
+
126
+ if (session.status !== 'active') {
127
+ throw new Error(`Session ${sessionId} is ${session.status}`);
128
+ }
129
+
130
+ // Verify contributor is a participant
131
+ if (!session.participants.includes(contribution.agentId)) {
132
+ throw new Error(`Agent ${contribution.agentId} is not a participant`);
133
+ }
134
+
135
+ // Create full contribution
136
+ const fullContribution: IHiveContribution = {
137
+ ...contribution,
138
+ id: this.generateContributionId(),
139
+ timestamp: Date.now(),
140
+ };
141
+
142
+ session.contributions.push(fullContribution);
143
+
144
+ // Register for voting
145
+ const votingRound = this.votingRounds.get(sessionId);
146
+ votingRound?.registerContribution(fullContribution);
147
+
148
+ return fullContribution;
149
+ }
150
+
151
+ /**
152
+ * Vote on a contribution
153
+ */
154
+ vote(
155
+ sessionId: string,
156
+ contributionId: string,
157
+ voterId: string,
158
+ vote: 'support' | 'oppose'
159
+ ): void {
160
+ const session = this.sessions.get(sessionId);
161
+ if (!session) {
162
+ throw new Error(`Session ${sessionId} not found`);
163
+ }
164
+
165
+ if (session.status !== 'active') {
166
+ throw new Error(`Session ${sessionId} is ${session.status}`);
167
+ }
168
+
169
+ if (!session.participants.includes(voterId)) {
170
+ throw new Error(`Agent ${voterId} is not a participant`);
171
+ }
172
+
173
+ const votingRound = this.votingRounds.get(sessionId);
174
+ if (!votingRound) {
175
+ throw new Error(`No voting round for session ${sessionId}`);
176
+ }
177
+
178
+ // Get voter's contribution confidence for weighting
179
+ const voterContribution = session.contributions.find((c: any) => c.agentId === voterId);
180
+ const voterConfidence = voterContribution?.confidence ?? 0.5;
181
+
182
+ votingRound.castVote(contributionId, voterId, vote, voterConfidence);
183
+ }
184
+
185
+ /**
186
+ * Synthesize all contributions
187
+ */
188
+ synthesize(sessionId: string): SynthesisResult {
189
+ const session = this.sessions.get(sessionId);
190
+ if (!session) {
191
+ throw new Error(`Session ${sessionId} not found`);
192
+ }
193
+
194
+ if (session.contributions.length < this.config.synthesisMinContributions) {
195
+ return {
196
+ synthesizedContent: '',
197
+ sourceContributions: [],
198
+ synthesisMethod: 'merge',
199
+ confidence: 0,
200
+ metadata: {
201
+ totalContributions: session.contributions.length,
202
+ ideaCount: 0,
203
+ critiqueCount: 0,
204
+ consensusCount: 0,
205
+ solutionCount: 0,
206
+ averageConfidence: 0,
207
+ keyThemes: [],
208
+ },
209
+ };
210
+ }
211
+
212
+ return this.synthesizer.synthesize(session);
213
+ }
214
+
215
+ /**
216
+ * Resolve a session with a final decision
217
+ */
218
+ resolve(sessionId: string, resolution: string): void {
219
+ const session = this.sessions.get(sessionId);
220
+ if (!session) {
221
+ throw new Error(`Session ${sessionId} not found`);
222
+ }
223
+
224
+ session.resolution = resolution;
225
+ session.status = 'resolved';
226
+
227
+ const votingRound = this.votingRounds.get(sessionId);
228
+ votingRound?.close();
229
+ }
230
+
231
+ /**
232
+ * Get a session by ID
233
+ */
234
+ getSession(sessionId: string): IHiveSession | undefined {
235
+ return this.sessions.get(sessionId);
236
+ }
237
+
238
+ /**
239
+ * Get all active sessions
240
+ */
241
+ getActiveSessions(): IHiveSession[] {
242
+ return [...this.sessions.values()].filter((s) => s.status === 'active');
243
+ }
244
+
245
+ /**
246
+ * Close a session without resolution
247
+ */
248
+ closeSession(sessionId: string): void {
249
+ const session = this.sessions.get(sessionId);
250
+ if (!session) {
251
+ throw new Error(`Session ${sessionId} not found`);
252
+ }
253
+
254
+ session.status = 'closed';
255
+
256
+ const votingRound = this.votingRounds.get(sessionId);
257
+ votingRound?.close();
258
+ }
259
+
260
+ /**
261
+ * Get voting results for a session
262
+ */
263
+ getVotingResults(sessionId: string): VotingResult[] {
264
+ const votingRound = this.votingRounds.get(sessionId);
265
+ if (!votingRound) {
266
+ return [];
267
+ }
268
+ return votingRound.getAllResults();
269
+ }
270
+
271
+ /**
272
+ * Get the top-voted contribution
273
+ */
274
+ getTopContribution(sessionId: string): IHiveContribution | undefined {
275
+ const votingRound = this.votingRounds.get(sessionId);
276
+ return votingRound?.getWinner();
277
+ }
278
+
279
+ /**
280
+ * Get session statistics
281
+ */
282
+ getSessionStats(sessionId: string):
283
+ | {
284
+ participantCount: number;
285
+ contributionCount: number;
286
+ votingStats: ReturnType<VotingRound['getStatistics']>;
287
+ contributionsByType: Record<IHiveContribution['type'], number>;
288
+ averageConfidence: number;
289
+ }
290
+ | undefined {
291
+ const session = this.sessions.get(sessionId);
292
+ if (!session) {
293
+ return undefined;
294
+ }
295
+
296
+ const votingRound = this.votingRounds.get(sessionId);
297
+
298
+ const byType: Record<IHiveContribution['type'], number> = {
299
+ idea: 0,
300
+ critique: 0,
301
+ consensus: 0,
302
+ solution: 0,
303
+ };
304
+
305
+ let totalConfidence = 0;
306
+ for (const c of session.contributions) {
307
+ byType[c.type]++;
308
+ totalConfidence += c.confidence;
309
+ }
310
+
311
+ return {
312
+ participantCount: session.participants.length,
313
+ contributionCount: session.contributions.length,
314
+ votingStats: votingRound?.getStatistics() ?? {
315
+ totalContributions: 0,
316
+ totalVotes: 0,
317
+ participationRate: 0,
318
+ hasConsensus: false,
319
+ },
320
+ contributionsByType: byType,
321
+ averageConfidence:
322
+ session.contributions.length > 0 ? totalConfidence / session.contributions.length : 0,
323
+ };
324
+ }
325
+
326
+ /**
327
+ * Auto-resolve if consensus reached
328
+ */
329
+ checkForConsensus(sessionId: string): boolean {
330
+ const votingRound = this.votingRounds.get(sessionId);
331
+ if (!votingRound) {
332
+ return false;
333
+ }
334
+
335
+ const stats = votingRound.getStatistics();
336
+ if (stats.hasConsensus && this.config.autoCloseOnResolution) {
337
+ const winner = votingRound.getWinner();
338
+ if (winner) {
339
+ this.resolve(sessionId, `Consensus reached: ${winner.content}`);
340
+ return true;
341
+ }
342
+ }
343
+
344
+ return false;
345
+ }
346
+
347
+ /**
348
+ * Get contributions by a specific agent
349
+ */
350
+ getAgentContributions(sessionId: string, agentId: string): IHiveContribution[] {
351
+ const session = this.sessions.get(sessionId);
352
+ if (!session) {
353
+ return [];
354
+ }
355
+ return session.contributions.filter((c: any) => c.agentId === agentId);
356
+ }
357
+
358
+ /**
359
+ * Find similar contributions in a session
360
+ */
361
+ findSimilarContributions(sessionId: string, contributionId: string): IHiveContribution[] {
362
+ const session = this.sessions.get(sessionId);
363
+ if (!session) {
364
+ return [];
365
+ }
366
+
367
+ const target = session.contributions.find((c: any) => c.id === contributionId);
368
+ if (!target) {
369
+ return [];
370
+ }
371
+
372
+ return this.synthesizer.findSimilar(target, session.contributions);
373
+ }
374
+
375
+ private generateSessionId(): string {
376
+ return `hive-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
377
+ }
378
+
379
+ private generateContributionId(): string {
380
+ this.contributionIdCounter++;
381
+ return `contrib-${this.contributionIdCounter}-${Date.now()}`;
382
+ }
383
+ }