@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,313 @@
1
+ /**
2
+ * @holoscript/core AI Adapter Interface
3
+ *
4
+ * Provider-agnostic AI integration for HoloScript.
5
+ * Users can implement this interface to integrate any AI service.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { AIAdapter, registerAIAdapter } from '@holoscript/core';
10
+ *
11
+ * // Implement your own adapter
12
+ * class MyOpenAIAdapter implements AIAdapter {
13
+ * async generateHoloScript(prompt: string) {
14
+ * const response = await openai.chat.completions.create({...});
15
+ * return { holoScript: response.choices[0].message.content };
16
+ * }
17
+ * }
18
+ *
19
+ * // Register it
20
+ * registerAIAdapter(new MyOpenAIAdapter());
21
+ * ```
22
+ */
23
+
24
+ // ============================================================================
25
+ // Core AI Adapter Interface
26
+ // ============================================================================
27
+
28
+ /**
29
+ * Result of HoloScript generation from natural language
30
+ */
31
+ export interface GenerateResult {
32
+ /** Generated HoloScript code */
33
+ holoScript: string;
34
+ /** Confidence score (0-1) */
35
+ confidence?: number;
36
+ /** Estimated object count */
37
+ objectCount?: number;
38
+ /** Any warnings or suggestions */
39
+ warnings?: string[];
40
+ /** Provider-specific metadata */
41
+ metadata?: Record<string, unknown>;
42
+ }
43
+
44
+ /**
45
+ * Result of HoloScript explanation
46
+ */
47
+ export interface ExplainResult {
48
+ /** Human-readable explanation */
49
+ explanation: string;
50
+ /** Line-by-line breakdown */
51
+ breakdown?: Array<{
52
+ line: number;
53
+ code: string;
54
+ description: string;
55
+ }>;
56
+ }
57
+
58
+ /**
59
+ * Result of HoloScript optimization
60
+ */
61
+ export interface OptimizeResult {
62
+ /** Optimized HoloScript code */
63
+ holoScript: string;
64
+ /** What was improved */
65
+ improvements: string[];
66
+ /** Performance metrics comparison */
67
+ metrics?: {
68
+ before: { polygons?: number; nodes?: number };
69
+ after: { polygons?: number; nodes?: number };
70
+ };
71
+ }
72
+
73
+ /**
74
+ * Result of HoloScript validation/fixing
75
+ */
76
+ export interface FixResult {
77
+ /** Fixed HoloScript code */
78
+ holoScript: string;
79
+ /** Issues that were fixed */
80
+ fixes: Array<{
81
+ line: number;
82
+ issue: string;
83
+ fix: string;
84
+ }>;
85
+ /** Issues that couldn't be fixed automatically */
86
+ remaining?: string[];
87
+ }
88
+
89
+ /**
90
+ * Generation options
91
+ */
92
+ export interface GenerateOptions {
93
+ /** Style hint: modern, classic, minimal, realistic */
94
+ style?: 'modern' | 'classic' | 'minimal' | 'realistic';
95
+ /** Complexity level */
96
+ complexity?: 'low' | 'medium' | 'high';
97
+ /** Include physics simulation */
98
+ includePhysics?: boolean;
99
+ /** Target platform for optimization */
100
+ targetPlatform?: 'mobile' | 'desktop' | 'vr' | 'ar';
101
+ /** Maximum tokens/length */
102
+ maxTokens?: number;
103
+ /** Temperature for generation (0-1) */
104
+ temperature?: number;
105
+ /** Additional context about the world */
106
+ context?: string;
107
+ }
108
+
109
+ /**
110
+ * AI Adapter Interface
111
+ *
112
+ * Implement this interface to integrate any AI provider with HoloScript.
113
+ * All methods are optional - implement only what your provider supports.
114
+ */
115
+ export interface AIAdapter {
116
+ /** Unique identifier for this adapter */
117
+ readonly id: string;
118
+
119
+ /** Human-readable name */
120
+ readonly name: string;
121
+
122
+ /** Whether the adapter is ready to use */
123
+ isReady(): boolean | Promise<boolean>;
124
+
125
+ /**
126
+ * Generate HoloScript from natural language
127
+ * @param prompt User's natural language description
128
+ * @param options Generation options
129
+ */
130
+ generateHoloScript?(prompt: string, options?: GenerateOptions): Promise<GenerateResult>;
131
+
132
+ /**
133
+ * Explain what HoloScript code does
134
+ * @param holoScript The code to explain
135
+ */
136
+ explainHoloScript?(holoScript: string): Promise<ExplainResult>;
137
+
138
+ /**
139
+ * Optimize HoloScript for a target platform
140
+ * @param holoScript The code to optimize
141
+ * @param target Target platform
142
+ */
143
+ optimizeHoloScript?(
144
+ holoScript: string,
145
+ target: 'mobile' | 'desktop' | 'vr' | 'ar'
146
+ ): Promise<OptimizeResult>;
147
+
148
+ /**
149
+ * Fix errors in HoloScript code
150
+ * @param holoScript The code to fix
151
+ * @param errors Error messages from parser/validator
152
+ */
153
+ fixHoloScript?(holoScript: string, errors: string[]): Promise<FixResult>;
154
+
155
+ /**
156
+ * Complete HoloScript code (autocomplete)
157
+ * @param holoScript Partial code
158
+ * @param cursorPosition Position of cursor
159
+ */
160
+ completeHoloScript?(holoScript: string, cursorPosition: number): Promise<string[]>;
161
+
162
+ /**
163
+ * Chat with AI about HoloScript code
164
+ * @param message User message
165
+ * @param holoScript Current code context
166
+ * @param history Previous messages
167
+ */
168
+ chat?(
169
+ message: string,
170
+ holoScript?: string,
171
+ history?: Array<{ role: 'user' | 'assistant'; content: string }>
172
+ ): Promise<string>;
173
+
174
+ /**
175
+ * Get vector embeddings for text
176
+ * @param text Text to embed
177
+ */
178
+ getEmbeddings?(text: string | string[]): Promise<number[][]>;
179
+ }
180
+
181
+ // ============================================================================
182
+ // Adapter Registry
183
+ // ============================================================================
184
+
185
+ let _defaultAdapter: AIAdapter | null = null;
186
+ const _adapters = new Map<string, AIAdapter>();
187
+
188
+ /**
189
+ * Register an AI adapter
190
+ * @param adapter The adapter to register
191
+ * @param setAsDefault Whether to set as the default adapter
192
+ */
193
+ export function registerAIAdapter(adapter: AIAdapter, setAsDefault = false): void {
194
+ _adapters.set(adapter.id, adapter);
195
+ if (setAsDefault || _defaultAdapter === null) {
196
+ _defaultAdapter = adapter;
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Get an AI adapter by ID
202
+ * @param id Adapter ID
203
+ */
204
+ export function getAIAdapter(id: string): AIAdapter | undefined {
205
+ return _adapters.get(id);
206
+ }
207
+
208
+ /**
209
+ * Get the default AI adapter
210
+ */
211
+ export function getDefaultAIAdapter(): AIAdapter | null {
212
+ return _defaultAdapter;
213
+ }
214
+
215
+ /**
216
+ * Set the default AI adapter
217
+ * @param id Adapter ID
218
+ */
219
+ export function setDefaultAIAdapter(id: string): boolean {
220
+ const adapter = _adapters.get(id);
221
+ if (adapter) {
222
+ _defaultAdapter = adapter;
223
+ return true;
224
+ }
225
+ return false;
226
+ }
227
+
228
+ /**
229
+ * List all registered adapters
230
+ */
231
+ export function listAIAdapters(): Array<{ id: string; name: string }> {
232
+ return Array.from(_adapters.values()).map((a) => ({
233
+ id: a.id,
234
+ name: a.name,
235
+ }));
236
+ }
237
+
238
+ /**
239
+ * Unregister an AI adapter
240
+ * @param id Adapter ID
241
+ */
242
+ export function unregisterAIAdapter(id: string): boolean {
243
+ const deleted = _adapters.delete(id);
244
+ if (deleted && _defaultAdapter?.id === id) {
245
+ const firstAdapter = _adapters.values().next().value;
246
+ _defaultAdapter = firstAdapter ?? null;
247
+ }
248
+ return deleted;
249
+ }
250
+
251
+ // ============================================================================
252
+ // Convenience Functions (use default adapter)
253
+ // ============================================================================
254
+
255
+ /**
256
+ * Generate HoloScript from natural language using the default adapter
257
+ */
258
+ export async function generateHoloScript(
259
+ prompt: string,
260
+ options?: GenerateOptions
261
+ ): Promise<GenerateResult> {
262
+ if (!_defaultAdapter) {
263
+ throw new Error(
264
+ 'No AI adapter registered. Call registerAIAdapter() first or use @holoscript/infinityassistant for Infinity Assistant integration.'
265
+ );
266
+ }
267
+ if (!_defaultAdapter.generateHoloScript) {
268
+ throw new Error(`AI adapter "${_defaultAdapter.name}" does not support generateHoloScript`);
269
+ }
270
+ return _defaultAdapter.generateHoloScript(prompt, options);
271
+ }
272
+
273
+ /**
274
+ * Explain HoloScript code using the default adapter
275
+ */
276
+ export async function explainHoloScript(holoScript: string): Promise<ExplainResult> {
277
+ if (!_defaultAdapter) {
278
+ throw new Error('No AI adapter registered.');
279
+ }
280
+ if (!_defaultAdapter.explainHoloScript) {
281
+ throw new Error(`AI adapter "${_defaultAdapter.name}" does not support explainHoloScript`);
282
+ }
283
+ return _defaultAdapter.explainHoloScript(holoScript);
284
+ }
285
+
286
+ /**
287
+ * Optimize HoloScript using the default adapter
288
+ */
289
+ export async function optimizeHoloScript(
290
+ holoScript: string,
291
+ target: 'mobile' | 'desktop' | 'vr' | 'ar'
292
+ ): Promise<OptimizeResult> {
293
+ if (!_defaultAdapter) {
294
+ throw new Error('No AI adapter registered.');
295
+ }
296
+ if (!_defaultAdapter.optimizeHoloScript) {
297
+ throw new Error(`AI adapter "${_defaultAdapter.name}" does not support optimizeHoloScript`);
298
+ }
299
+ return _defaultAdapter.optimizeHoloScript(holoScript, target);
300
+ }
301
+
302
+ /**
303
+ * Fix HoloScript errors using the default adapter
304
+ */
305
+ export async function fixHoloScript(holoScript: string, errors: string[]): Promise<FixResult> {
306
+ if (!_defaultAdapter) {
307
+ throw new Error('No AI adapter registered.');
308
+ }
309
+ if (!_defaultAdapter.fixHoloScript) {
310
+ throw new Error(`AI adapter "${_defaultAdapter.name}" does not support fixHoloScript`);
311
+ }
312
+ return _defaultAdapter.fixHoloScript(holoScript, errors);
313
+ }
@@ -0,0 +1,331 @@
1
+ /**
2
+ * AICopilot.ts
3
+ *
4
+ * Editor-aware AI assistant that bridges the existing AIAdapter/HoloScriptGenerator
5
+ * infrastructure with the runtime and editor for real-time AI assistance.
6
+ *
7
+ * @module ai
8
+ */
9
+
10
+ import { AIAdapter, GenerateOptions, GenerateResult } from './AIAdapter';
11
+ import { HoloScriptGenerator, GeneratedCode } from './HoloScriptGenerator';
12
+
13
+ // =============================================================================
14
+ // TYPES
15
+ // =============================================================================
16
+
17
+ export interface CopilotContext {
18
+ /** Currently selected entity type/id */
19
+ selectedEntity?: { id: string; type: string; properties?: Record<string, unknown> };
20
+ /** Current scene node types */
21
+ sceneNodeTypes?: string[];
22
+ /** Active state keys */
23
+ stateKeys?: string[];
24
+ /** Recent user actions */
25
+ recentActions?: string[];
26
+ }
27
+
28
+ export interface CopilotSuggestion {
29
+ type: 'modify' | 'create' | 'explain' | 'fix';
30
+ description: string;
31
+ holoScript?: string;
32
+ confidence: number;
33
+ }
34
+
35
+ export interface CopilotResponse {
36
+ text: string;
37
+ suggestions: CopilotSuggestion[];
38
+ generatedCode?: GeneratedCode;
39
+ error?: string;
40
+ }
41
+
42
+ export interface CopilotMessage {
43
+ role: 'user' | 'assistant';
44
+ content: string;
45
+ timestamp: number;
46
+ }
47
+
48
+ // =============================================================================
49
+ // AI COPILOT
50
+ // =============================================================================
51
+
52
+ export class AICopilot {
53
+ private adapter: AIAdapter | null = null;
54
+ private generator: HoloScriptGenerator;
55
+ private history: CopilotMessage[] = [];
56
+ private context: CopilotContext = {};
57
+
58
+ constructor(adapter?: AIAdapter) {
59
+ this.generator = new HoloScriptGenerator();
60
+ if (adapter) {
61
+ this.setAdapter(adapter);
62
+ }
63
+ }
64
+
65
+ // ---------------------------------------------------------------------------
66
+ // Adapter Management
67
+ // ---------------------------------------------------------------------------
68
+
69
+ setAdapter(adapter: AIAdapter): void {
70
+ this.adapter = adapter;
71
+ this.generator.createSession(adapter);
72
+ }
73
+
74
+ getAdapter(): AIAdapter | null {
75
+ return this.adapter;
76
+ }
77
+
78
+ isReady(): boolean {
79
+ return this.adapter !== null;
80
+ }
81
+
82
+ // ---------------------------------------------------------------------------
83
+ // Context Management
84
+ // ---------------------------------------------------------------------------
85
+
86
+ updateContext(context: Partial<CopilotContext>): void {
87
+ this.context = { ...this.context, ...context };
88
+ }
89
+
90
+ getContext(): CopilotContext {
91
+ return { ...this.context };
92
+ }
93
+
94
+ // ---------------------------------------------------------------------------
95
+ // Core Operations
96
+ // ---------------------------------------------------------------------------
97
+
98
+ /**
99
+ * Generate HoloScript from a natural language prompt.
100
+ * Uses the full HoloScriptGenerator pipeline (generate → validate → auto-fix).
101
+ */
102
+ async generateFromPrompt(
103
+ prompt: string,
104
+ options?: Partial<GenerateOptions>
105
+ ): Promise<CopilotResponse> {
106
+ const adapter = this.adapter;
107
+ if (!adapter) {
108
+ return {
109
+ text: 'No AI adapter configured. Please set an adapter first.',
110
+ suggestions: [],
111
+ error: 'NO_ADAPTER',
112
+ };
113
+ }
114
+ if (!adapter.generateHoloScript) {
115
+ return {
116
+ text: 'Adapter does not support generateHoloScript.',
117
+ suggestions: [],
118
+ error: 'UNSUPPORTED',
119
+ };
120
+ }
121
+
122
+ this.addMessage('user', prompt);
123
+
124
+ try {
125
+ const result = await adapter.generateHoloScript(prompt, {
126
+ targetPlatform: 'vr',
127
+ includePhysics: true,
128
+ ...options,
129
+ });
130
+
131
+ const response: CopilotResponse = {
132
+ text: `Generated HoloScript with ${result.objectCount || 'unknown'} objects (confidence: ${((result.confidence || 0) * 100).toFixed(0)}%).`,
133
+ suggestions: [
134
+ {
135
+ type: 'create',
136
+ description: `Create scene from: "${prompt}"`,
137
+ holoScript: result.holoScript,
138
+ confidence: result.confidence || 0,
139
+ },
140
+ ],
141
+ };
142
+
143
+ if (result.warnings?.length) {
144
+ response.text += ` Warnings: ${result.warnings.join(', ')}`;
145
+ }
146
+
147
+ this.addMessage('assistant', response.text);
148
+ return response;
149
+ } catch (error) {
150
+ const errorMsg = error instanceof Error ? error.message : String(error);
151
+ this.addMessage('assistant', `Error: ${errorMsg}`);
152
+ return {
153
+ text: `Generation failed: ${errorMsg}`,
154
+ suggestions: [],
155
+ error: errorMsg,
156
+ };
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Suggest modifications for the currently selected entity.
162
+ */
163
+ async suggestFromSelection(): Promise<CopilotResponse> {
164
+ const adapter = this.adapter;
165
+ if (!adapter) {
166
+ return { text: 'No adapter configured.', suggestions: [], error: 'NO_ADAPTER' };
167
+ }
168
+ if (!adapter.generateHoloScript) {
169
+ return {
170
+ text: 'Adapter does not support generateHoloScript.',
171
+ suggestions: [],
172
+ error: 'UNSUPPORTED',
173
+ };
174
+ }
175
+
176
+ const entity = this.context.selectedEntity;
177
+ if (!entity) {
178
+ return {
179
+ text: 'No entity selected. Select an entity in the editor first.',
180
+ suggestions: [],
181
+ };
182
+ }
183
+
184
+ const prompt = `Suggest improvements for a ${entity.type} entity with properties: ${JSON.stringify(entity.properties || {})}`;
185
+
186
+ try {
187
+ const result = await adapter.generateHoloScript(prompt, {
188
+ style: 'modern',
189
+ complexity: 'medium',
190
+ });
191
+
192
+ return {
193
+ text: `Suggestions for ${entity.type} (${entity.id}):`,
194
+ suggestions: [
195
+ {
196
+ type: 'modify',
197
+ description: `Enhance ${entity.type} with AI suggestions`,
198
+ holoScript: result.holoScript,
199
+ confidence: result.confidence || 0,
200
+ },
201
+ ],
202
+ };
203
+ } catch (error) {
204
+ return {
205
+ text: `Suggestion failed: ${error instanceof Error ? error.message : String(error)}`,
206
+ suggestions: [],
207
+ error: String(error),
208
+ };
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Explain the current scene in natural language.
214
+ */
215
+ async explainScene(sceneCode: string): Promise<CopilotResponse> {
216
+ const adapter = this.adapter;
217
+ if (!adapter) {
218
+ return { text: 'No adapter configured.', suggestions: [], error: 'NO_ADAPTER' };
219
+ }
220
+ if (!adapter.explainHoloScript) {
221
+ return {
222
+ text: 'Adapter does not support explainHoloScript.',
223
+ suggestions: [],
224
+ error: 'UNSUPPORTED',
225
+ };
226
+ }
227
+
228
+ try {
229
+ const result = await adapter.explainHoloScript(sceneCode);
230
+ return {
231
+ text: result.explanation,
232
+ suggestions: [],
233
+ };
234
+ } catch (error) {
235
+ return {
236
+ text: `Explanation failed: ${error instanceof Error ? error.message : String(error)}`,
237
+ suggestions: [],
238
+ error: String(error),
239
+ };
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Auto-fix runtime errors using the AI adapter.
245
+ */
246
+ async autoFix(code: string, errors: string[]): Promise<CopilotResponse> {
247
+ const adapter = this.adapter;
248
+ if (!adapter) {
249
+ return { text: 'No adapter configured.', suggestions: [], error: 'NO_ADAPTER' };
250
+ }
251
+ if (!adapter.fixHoloScript) {
252
+ return {
253
+ text: 'Adapter does not support fixHoloScript.',
254
+ suggestions: [],
255
+ error: 'UNSUPPORTED',
256
+ };
257
+ }
258
+
259
+ try {
260
+ const result = await adapter.fixHoloScript(code, errors);
261
+ return {
262
+ text: `Fixed ${result.fixes.length} issue(s).`,
263
+ suggestions: result.fixes.map((fix) => ({
264
+ type: 'fix' as const,
265
+ description: `Line ${fix.line}: ${fix.issue} → ${fix.fix}`,
266
+ holoScript: result.holoScript,
267
+ confidence: 0.8,
268
+ })),
269
+ };
270
+ } catch (error) {
271
+ return {
272
+ text: `Auto-fix failed: ${error instanceof Error ? error.message : String(error)}`,
273
+ suggestions: [],
274
+ error: String(error),
275
+ };
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Chat with the AI about HoloScript code (multi-turn conversation).
281
+ */
282
+ async chat(message: string): Promise<CopilotResponse> {
283
+ const adapter = this.adapter;
284
+ if (!adapter) {
285
+ return { text: 'No adapter configured.', suggestions: [], error: 'NO_ADAPTER' };
286
+ }
287
+ if (!adapter.chat) {
288
+ return { text: 'Adapter does not support chat.', suggestions: [], error: 'UNSUPPORTED' };
289
+ }
290
+
291
+ this.addMessage('user', message);
292
+
293
+ try {
294
+ const chatHistory = this.history.map((m) => ({
295
+ role: m.role,
296
+ content: m.content,
297
+ }));
298
+
299
+ const response = await adapter.chat(message, undefined, chatHistory);
300
+ this.addMessage('assistant', response);
301
+
302
+ return {
303
+ text: response,
304
+ suggestions: [],
305
+ };
306
+ } catch (error) {
307
+ const errorMsg = error instanceof Error ? error.message : String(error);
308
+ return {
309
+ text: `Chat failed: ${errorMsg}`,
310
+ suggestions: [],
311
+ error: errorMsg,
312
+ };
313
+ }
314
+ }
315
+
316
+ // ---------------------------------------------------------------------------
317
+ // History Management
318
+ // ---------------------------------------------------------------------------
319
+
320
+ getHistory(): CopilotMessage[] {
321
+ return [...this.history];
322
+ }
323
+
324
+ clearHistory(): void {
325
+ this.history = [];
326
+ }
327
+
328
+ private addMessage(role: 'user' | 'assistant', content: string): void {
329
+ this.history.push({ role, content, timestamp: Date.now() });
330
+ }
331
+ }