@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,580 @@
1
+ /**
2
+ * AI-Guided HoloScript Generation
3
+ *
4
+ * High-level API for generating validated HoloScript from natural language.
5
+ * Combines AI adapters with the parser to:
6
+ * - Generate code from prompts
7
+ * - Validate generated code
8
+ * - Fix errors automatically
9
+ * - Optimize for target platforms
10
+ * - Maintain generation history
11
+ */
12
+
13
+ import type { AIAdapter } from './AIAdapter';
14
+ class HoloScriptPlusParser {
15
+ constructor(opts?: { strict?: boolean }) {}
16
+ parse(code: string): any {
17
+ return { success: true, errors: [], ast: {} };
18
+ }
19
+ }
20
+
21
+ import type { HSPlusCompileResult } from '@holoscript/core';
22
+ import { GenerationCache } from './GenerationCache';
23
+ import { GenerationAnalytics } from './GenerationAnalytics';
24
+
25
+ // =============================================================================
26
+ // TYPES
27
+ // =============================================================================
28
+
29
+ export interface GenerationConfig {
30
+ /** Maximum attempts to generate valid code */
31
+ maxAttempts: number;
32
+ /** Target platform for optimization */
33
+ targetPlatform: 'mobile' | 'desktop' | 'vr' | 'ar';
34
+ /** Auto-fix errors if generation is invalid */
35
+ autoFix: boolean;
36
+ /** Minimum confidence threshold (0-1) */
37
+ minConfidence: number;
38
+ }
39
+
40
+ export interface GeneratedCode {
41
+ /** The generated HoloScript code */
42
+ holoScript: string;
43
+ /** Confidence score from AI (0-1) */
44
+ aiConfidence: number;
45
+ /** Parse result */
46
+ parseResult: HSPlusCompileResult;
47
+ /** Was auto-fixed */
48
+ wasFixed: boolean;
49
+ /** Number of attempts before success */
50
+ attempts: number;
51
+ /** Explanation of generated code */
52
+ explanation?: string;
53
+ }
54
+
55
+ export interface GenerationHistory {
56
+ /** Prompt that was used */
57
+ prompt: string;
58
+ /** Generated code */
59
+ generated: GeneratedCode;
60
+ /** Timestamp */
61
+ timestamp: Date;
62
+ /** Attempt number in session */
63
+ sessionAttempt: number;
64
+ }
65
+
66
+ export interface GenerationSession {
67
+ /** Unique session ID */
68
+ sessionId: string;
69
+ /** All generations in this session */
70
+ history: GenerationHistory[];
71
+ /** AI adapter used */
72
+ adapter: AIAdapter;
73
+ /** Configuration */
74
+ config: GenerationConfig;
75
+ }
76
+
77
+ // =============================================================================
78
+ // AI-GUIDED GENERATOR
79
+ // =============================================================================
80
+
81
+ export class HoloScriptGenerator {
82
+ private parser: HoloScriptPlusParser;
83
+ private currentSession?: GenerationSession;
84
+ private sessionCounter = 0;
85
+ private cache: GenerationCache;
86
+ private analytics: GenerationAnalytics;
87
+ private cacheEnabled: boolean = true;
88
+
89
+ constructor(enableCache: boolean = true) {
90
+ this.parser = new HoloScriptPlusParser({ strict: false });
91
+ this.cache = new GenerationCache();
92
+ this.analytics = new GenerationAnalytics();
93
+ this.cacheEnabled = enableCache;
94
+ }
95
+
96
+ /**
97
+ * Create a new generation session
98
+ */
99
+ createSession(adapter: AIAdapter, config: Partial<GenerationConfig> = {}): GenerationSession {
100
+ const defaultConfig: GenerationConfig = {
101
+ maxAttempts: 3,
102
+ targetPlatform: 'vr',
103
+ autoFix: true,
104
+ minConfidence: 0.7,
105
+ ...config,
106
+ };
107
+
108
+ const session: GenerationSession = {
109
+ sessionId: `session-${Date.now()}-${++this.sessionCounter}`,
110
+ history: [],
111
+ adapter,
112
+ config: defaultConfig,
113
+ };
114
+
115
+ this.currentSession = session;
116
+ return session;
117
+ }
118
+
119
+ /**
120
+ * Generate HoloScript from a natural language prompt
121
+ */
122
+ async generate(prompt: string, session?: GenerationSession): Promise<GeneratedCode> {
123
+ const s = session || this.currentSession;
124
+ if (!s) {
125
+ throw new Error('No generation session created. Call createSession first.');
126
+ }
127
+
128
+ // Try cache first
129
+ if (this.cacheEnabled) {
130
+ const cachedEntry = this.cache.get(prompt, s.adapter.name);
131
+ if (cachedEntry) {
132
+ // Record cache hit in analytics
133
+ this.analytics.recordMetric({
134
+ promptLength: prompt.length,
135
+ codeLength: cachedEntry.code.length,
136
+ confidence: 1.0, // Cached results are highly confident
137
+ parseSuccess: true,
138
+ errorCount: 0,
139
+ wasFixed: false,
140
+ responseTimeMs: 0,
141
+ attemptsNeeded: 1,
142
+ adapterName: s.adapter.name,
143
+ timestamp: new Date(),
144
+ });
145
+
146
+ const parseResult = this.parser.parse(cachedEntry.code);
147
+ const generated: GeneratedCode = {
148
+ holoScript: cachedEntry.code,
149
+ aiConfidence: 1.0,
150
+ parseResult,
151
+ wasFixed: false,
152
+ attempts: 1,
153
+ };
154
+
155
+ // Get explanation
156
+ try {
157
+ if (s.adapter.explainHoloScript) {
158
+ const explanation = await s.adapter.explainHoloScript(generated.holoScript);
159
+ generated.explanation = explanation.explanation;
160
+ }
161
+ } catch {
162
+ // Explanation is optional
163
+ }
164
+
165
+ // Record in history
166
+ s.history.push({
167
+ prompt,
168
+ generated,
169
+ timestamp: new Date(),
170
+ sessionAttempt: s.history.length + 1,
171
+ });
172
+
173
+ return generated;
174
+ }
175
+ }
176
+
177
+ let attempts = 0;
178
+ let lastError: Error | null = null;
179
+ let generated: GeneratedCode | null = null;
180
+ const startTime = performance.now();
181
+
182
+ while (attempts < s.config.maxAttempts) {
183
+ attempts++;
184
+
185
+ try {
186
+ // Generate code via AI
187
+ if (!s.adapter.generateHoloScript) {
188
+ throw new Error(`Adapter "${s.adapter.name}" does not support generateHoloScript`);
189
+ }
190
+ const result = await s.adapter.generateHoloScript(prompt);
191
+ const responseTimeMs = performance.now() - startTime;
192
+
193
+ // Check confidence threshold
194
+ if ((result.confidence ?? 0) < s.config.minConfidence) {
195
+ console.warn(`Generated code has low confidence (${result.confidence}). Retrying...`);
196
+
197
+ this.analytics.recordMetric({
198
+ promptLength: prompt.length,
199
+ codeLength: result.holoScript.length,
200
+ confidence: result.confidence ?? 0,
201
+ parseSuccess: false,
202
+ errorCount: 1,
203
+ wasFixed: false,
204
+ responseTimeMs,
205
+ attemptsNeeded: attempts,
206
+ adapterName: s.adapter.name,
207
+ timestamp: new Date(),
208
+ });
209
+
210
+ continue;
211
+ }
212
+
213
+ // Parse the generated code
214
+ const parseResult = this.parser.parse(result.holoScript);
215
+
216
+ let holoScript = result.holoScript;
217
+ let wasFixed = false;
218
+
219
+ // Auto-fix if enabled and parsing failed
220
+ if (!parseResult.success && s.config.autoFix && attempts < s.config.maxAttempts) {
221
+ if (!s.adapter.fixHoloScript) {
222
+ throw new Error(`Adapter "${s.adapter.name}" does not support fixHoloScript`);
223
+ }
224
+ const fixResult = await s.adapter.fixHoloScript(
225
+ result.holoScript,
226
+ parseResult.errors.map((e: any) => e.message)
227
+ );
228
+
229
+ const fixedParseResult = this.parser.parse(fixResult.holoScript);
230
+
231
+ // If fixed version is better, use it
232
+ if (
233
+ fixedParseResult.success ||
234
+ fixedParseResult.errors.length < parseResult.errors.length
235
+ ) {
236
+ holoScript = fixResult.holoScript;
237
+ wasFixed = true;
238
+ // Re-parse with fixed code
239
+ const reparseResult = this.parser.parse(holoScript);
240
+ generated = {
241
+ holoScript,
242
+ aiConfidence: result.confidence ?? 0,
243
+ parseResult: reparseResult,
244
+ wasFixed,
245
+ attempts,
246
+ };
247
+
248
+ // Cache successful result
249
+ if (this.cacheEnabled && reparseResult.success) {
250
+ this.cache.set(prompt, holoScript, result.confidence ?? 0, s.adapter.name);
251
+ }
252
+
253
+ break;
254
+ }
255
+ }
256
+
257
+ // If we got here, use the generated code (even if not fully valid)
258
+ generated = {
259
+ holoScript,
260
+ aiConfidence: result.confidence ?? 0,
261
+ parseResult,
262
+ wasFixed,
263
+ attempts,
264
+ };
265
+
266
+ // Record metrics
267
+ this.analytics.recordMetric({
268
+ promptLength: prompt.length,
269
+ codeLength: holoScript.length,
270
+ confidence: result.confidence ?? 0,
271
+ parseSuccess: parseResult.success,
272
+ errorCount: parseResult.errors.length,
273
+ wasFixed,
274
+ responseTimeMs,
275
+ attemptsNeeded: attempts,
276
+ adapterName: s.adapter.name,
277
+ timestamp: new Date(),
278
+ });
279
+
280
+ // Cache successful results
281
+ if (this.cacheEnabled && parseResult.success) {
282
+ this.cache.set(prompt, holoScript, result.confidence ?? 0, s.adapter.name);
283
+ }
284
+
285
+ if (parseResult.success) {
286
+ break; // Success!
287
+ }
288
+
289
+ // If parsing failed and we can't auto-fix, log error and continue
290
+ lastError = new Error(`Parse failed: ${parseResult.errors[0]?.message || 'Unknown error'}`);
291
+ } catch (e) {
292
+ lastError = e instanceof Error ? e : new Error(String(e));
293
+
294
+ this.analytics.recordMetric({
295
+ promptLength: prompt.length,
296
+ codeLength: 0,
297
+ confidence: 0,
298
+ parseSuccess: false,
299
+ errorCount: 1,
300
+ wasFixed: false,
301
+ responseTimeMs: performance.now() - startTime,
302
+ attemptsNeeded: attempts,
303
+ adapterName: s.adapter.name,
304
+ timestamp: new Date(),
305
+ });
306
+ }
307
+ }
308
+
309
+ if (!generated) {
310
+ throw (
311
+ lastError || new Error(`Failed to generate valid HoloScript after ${attempts} attempts`)
312
+ );
313
+ }
314
+
315
+ // Get explanation
316
+ try {
317
+ if (s.adapter.explainHoloScript) {
318
+ const explanation = await s.adapter.explainHoloScript(generated.holoScript);
319
+ generated.explanation = explanation.explanation;
320
+ }
321
+ } catch {
322
+ // Explanation is optional
323
+ }
324
+
325
+ // Record in history
326
+ s.history.push({
327
+ prompt,
328
+ generated,
329
+ timestamp: new Date(),
330
+ sessionAttempt: s.history.length + 1,
331
+ });
332
+
333
+ return generated;
334
+ }
335
+
336
+ /**
337
+ * Optimize generated code for a target platform
338
+ */
339
+ async optimize(
340
+ code: string,
341
+ targetPlatform: 'mobile' | 'desktop' | 'vr' | 'ar',
342
+ session?: GenerationSession
343
+ ): Promise<GeneratedCode> {
344
+ const s = session || this.currentSession;
345
+ if (!s) {
346
+ throw new Error('No generation session created. Call createSession first.');
347
+ }
348
+
349
+ // Optimize via AI
350
+ if (!s.adapter.optimizeHoloScript) {
351
+ throw new Error(`Adapter "${s.adapter.name}" does not support optimizeHoloScript`);
352
+ }
353
+ const optimized = await s.adapter.optimizeHoloScript(code, targetPlatform);
354
+
355
+ // Parse optimized code
356
+ const parseResult = this.parser.parse(optimized.holoScript);
357
+
358
+ return {
359
+ holoScript: optimized.holoScript,
360
+ aiConfidence: 0.9, // Optimization is usually reliable
361
+ parseResult,
362
+ wasFixed: false,
363
+ attempts: 1,
364
+ };
365
+ }
366
+
367
+ /**
368
+ * Fix invalid HoloScript code
369
+ */
370
+ async fix(code: string, session?: GenerationSession): Promise<GeneratedCode> {
371
+ const s = session || this.currentSession;
372
+ if (!s) {
373
+ throw new Error('No generation session created. Call createSession first.');
374
+ }
375
+
376
+ // Parse current code to find errors
377
+ const parseResult = this.parser.parse(code);
378
+ const errors = parseResult.errors.map((e: any) => e.message);
379
+
380
+ if (errors.length === 0) {
381
+ return {
382
+ holoScript: code,
383
+ aiConfidence: 1.0,
384
+ parseResult,
385
+ wasFixed: false,
386
+ attempts: 1,
387
+ };
388
+ }
389
+
390
+ // Fix via AI
391
+ if (!s.adapter.fixHoloScript) {
392
+ throw new Error(`Adapter "${s.adapter.name}" does not support fixHoloScript`);
393
+ }
394
+ const fixed = await s.adapter.fixHoloScript(code, errors);
395
+
396
+ // Parse fixed code
397
+ const fixedParseResult = this.parser.parse(fixed.holoScript);
398
+
399
+ return {
400
+ holoScript: fixed.holoScript,
401
+ aiConfidence: 0.85,
402
+ parseResult: fixedParseResult,
403
+ wasFixed: true,
404
+ attempts: 1,
405
+ };
406
+ }
407
+
408
+ /**
409
+ * Explain generated code
410
+ */
411
+ async explain(code: string, session?: GenerationSession): Promise<string> {
412
+ const s = session || this.currentSession;
413
+ if (!s) {
414
+ throw new Error('No generation session created. Call createSession first.');
415
+ }
416
+
417
+ if (!s.adapter.explainHoloScript) {
418
+ throw new Error(`Adapter "${s.adapter.name}" does not support explainHoloScript`);
419
+ }
420
+ const result = await s.adapter.explainHoloScript(code);
421
+ return result.explanation;
422
+ }
423
+
424
+ /**
425
+ * Multi-turn conversation for iterative code generation
426
+ */
427
+ async chat(
428
+ message: string,
429
+ session?: GenerationSession,
430
+ history?: Array<{ role: 'user' | 'assistant'; content: string }>
431
+ ): Promise<string> {
432
+ const s = session || this.currentSession;
433
+ if (!s) {
434
+ throw new Error('No generation session created. Call createSession first.');
435
+ }
436
+
437
+ if (!s.adapter.chat) {
438
+ throw new Error(`Adapter "${s.adapter.name}" does not support chat`);
439
+ }
440
+ return s.adapter.chat(message, '', history);
441
+ }
442
+
443
+ /**
444
+ * Get current generation session
445
+ */
446
+ getCurrentSession(): GenerationSession | undefined {
447
+ return this.currentSession;
448
+ }
449
+
450
+ /**
451
+ * Get generation history
452
+ */
453
+ getHistory(session?: GenerationSession): GenerationHistory[] {
454
+ const s = session || this.currentSession;
455
+ return s?.history || [];
456
+ }
457
+
458
+ /**
459
+ * Clear history
460
+ */
461
+ clearHistory(session?: GenerationSession): void {
462
+ const s = session || this.currentSession;
463
+ if (s) {
464
+ s.history = [];
465
+ }
466
+ }
467
+
468
+ /**
469
+ * Get statistics for a session
470
+ */
471
+ getStats(session?: GenerationSession) {
472
+ const s = session || this.currentSession;
473
+ if (!s) {
474
+ return null;
475
+ }
476
+
477
+ const history = s.history;
478
+ const successCount = history.filter((h) => h.generated.parseResult.success).length;
479
+ const fixedCount = history.filter((h) => h.generated.wasFixed).length;
480
+ const avgAttempts =
481
+ history.length > 0
482
+ ? history.reduce((sum, h) => sum + h.generated.attempts, 0) / history.length
483
+ : 0;
484
+ const avgConfidence =
485
+ history.length > 0
486
+ ? history.reduce((sum, h) => sum + h.generated.aiConfidence, 0) / history.length
487
+ : 0;
488
+
489
+ return {
490
+ totalGenerations: history.length,
491
+ successCount,
492
+ fixedCount,
493
+ avgAttempts,
494
+ avgConfidence,
495
+ successRate: history.length > 0 ? successCount / history.length : 0,
496
+ };
497
+ }
498
+
499
+ /**
500
+ * Get cache statistics
501
+ */
502
+ getCacheStats() {
503
+ return this.cache.getStats();
504
+ }
505
+
506
+ /**
507
+ * Get analytics metrics
508
+ */
509
+ getAnalytics() {
510
+ return {
511
+ aggregateMetrics: this.analytics.getAggregateMetrics(),
512
+ adapterMetrics: this.analytics.getAllAdapterMetrics(),
513
+ confidenceDistribution: this.analytics.getConfidenceDistribution(),
514
+ responseTimeDistribution: this.analytics.getResponseTimeDistribution(),
515
+ errorPatterns: this.analytics.getErrorPatterns(),
516
+ recommendations: this.analytics.getRecommendations(),
517
+ };
518
+ }
519
+
520
+ /**
521
+ * Generate analytics report
522
+ */
523
+ generateReport() {
524
+ return this.analytics.generateReport();
525
+ }
526
+ }
527
+
528
+ // =============================================================================
529
+ // HELPER FUNCTIONS
530
+ // =============================================================================
531
+
532
+ /**
533
+ * Quick generation helper
534
+ */
535
+ export async function generateHoloScript(
536
+ prompt: string,
537
+ adapter: AIAdapter,
538
+ config?: Partial<GenerationConfig>
539
+ ): Promise<GeneratedCode> {
540
+ const generator = new HoloScriptGenerator();
541
+ const session = generator.createSession(adapter, config);
542
+ return generator.generate(prompt, session);
543
+ }
544
+
545
+ /**
546
+ * Batch generation helper
547
+ */
548
+ export async function generateBatch(
549
+ prompts: string[],
550
+ adapter: AIAdapter,
551
+ config?: Partial<GenerationConfig>
552
+ ): Promise<GeneratedCode[]> {
553
+ const generator = new HoloScriptGenerator();
554
+ const session = generator.createSession(adapter, config);
555
+
556
+ const results: GeneratedCode[] = [];
557
+ for (const prompt of prompts) {
558
+ results.push(await generator.generate(prompt, session));
559
+ }
560
+
561
+ return results;
562
+ }
563
+
564
+ /**
565
+ * Validate batch of generated code
566
+ */
567
+ export function validateBatch(
568
+ codes: string[]
569
+ ): Array<{ code: string; valid: boolean; errors: number }> {
570
+ const parser = new HoloScriptPlusParser({ strict: false });
571
+
572
+ return codes.map((code) => {
573
+ const result = parser.parse(code);
574
+ return {
575
+ code,
576
+ valid: result.success,
577
+ errors: result.errors.length,
578
+ };
579
+ });
580
+ }