@aura3d/engine 1.0.9 → 1.1.0

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 (434) hide show
  1. package/README.md +46 -15
  2. package/dist/animation/AnimationClipRegistry.d.ts +16 -0
  3. package/dist/animation/AnimationClipRegistry.d.ts.map +1 -1
  4. package/dist/animation/AnimationClipRegistry.js +42 -0
  5. package/dist/animation/AnimationClipRegistry.js.map +1 -1
  6. package/dist/animation/AnimationController.d.ts +15 -0
  7. package/dist/animation/AnimationController.d.ts.map +1 -1
  8. package/dist/animation/AnimationController.js +28 -0
  9. package/dist/animation/AnimationController.js.map +1 -1
  10. package/dist/animation/AnimationStateGraph.d.ts +11 -1
  11. package/dist/animation/AnimationStateGraph.d.ts.map +1 -1
  12. package/dist/animation/AnimationStateGraph.js +50 -1
  13. package/dist/animation/AnimationStateGraph.js.map +1 -1
  14. package/dist/animation/HumanoidRetargeting.d.ts +13 -0
  15. package/dist/animation/HumanoidRetargeting.d.ts.map +1 -1
  16. package/dist/animation/HumanoidRetargeting.js +43 -0
  17. package/dist/animation/HumanoidRetargeting.js.map +1 -1
  18. package/dist/animation/MotionQuality.d.ts +6 -0
  19. package/dist/animation/MotionQuality.d.ts.map +1 -1
  20. package/dist/animation/MotionQuality.js +16 -0
  21. package/dist/animation/MotionQuality.js.map +1 -1
  22. package/dist/animation/browser-index.d.ts +2 -2
  23. package/dist/animation/browser-index.d.ts.map +1 -1
  24. package/dist/animation/browser-index.js +1 -1
  25. package/dist/animation/browser-index.js.map +1 -1
  26. package/dist/animation/index.d.ts +2 -2
  27. package/dist/animation/index.d.ts.map +1 -1
  28. package/dist/animation/index.js +1 -1
  29. package/dist/animation/index.js.map +1 -1
  30. package/dist/audio/AudioBus.d.ts +2 -0
  31. package/dist/audio/AudioBus.d.ts.map +1 -1
  32. package/dist/audio/AudioBus.js +6 -0
  33. package/dist/audio/AudioBus.js.map +1 -1
  34. package/dist/audio/AudioFileManager.d.ts +77 -0
  35. package/dist/audio/AudioFileManager.d.ts.map +1 -0
  36. package/dist/audio/AudioFileManager.js +168 -0
  37. package/dist/audio/AudioFileManager.js.map +1 -0
  38. package/dist/audio/AudioMixer.d.ts +43 -0
  39. package/dist/audio/AudioMixer.d.ts.map +1 -1
  40. package/dist/audio/AudioMixer.js +43 -0
  41. package/dist/audio/AudioMixer.js.map +1 -1
  42. package/dist/audio/AudioTimelineTrack.d.ts +135 -0
  43. package/dist/audio/AudioTimelineTrack.d.ts.map +1 -0
  44. package/dist/audio/AudioTimelineTrack.js +356 -0
  45. package/dist/audio/AudioTimelineTrack.js.map +1 -0
  46. package/dist/audio/AudioWaveform.d.ts +64 -0
  47. package/dist/audio/AudioWaveform.d.ts.map +1 -0
  48. package/dist/audio/AudioWaveform.js +146 -0
  49. package/dist/audio/AudioWaveform.js.map +1 -0
  50. package/dist/audio/index.d.ts +8 -1
  51. package/dist/audio/index.d.ts.map +1 -1
  52. package/dist/audio/index.js +4 -1
  53. package/dist/audio/index.js.map +1 -1
  54. package/dist/aura3d-cli/cartoon-asset-profiles.d.ts +15 -0
  55. package/dist/aura3d-cli/cartoon-asset-profiles.d.ts.map +1 -0
  56. package/dist/aura3d-cli/cartoon-asset-profiles.js +46 -0
  57. package/dist/aura3d-cli/cartoon-asset-profiles.js.map +1 -0
  58. package/dist/aura3d-cli/cli.js +63 -7
  59. package/dist/aura3d-cli/cli.js.map +1 -1
  60. package/dist/aura3d-cli/game-asset-profiles.d.ts +13 -0
  61. package/dist/aura3d-cli/game-asset-profiles.d.ts.map +1 -0
  62. package/dist/aura3d-cli/game-asset-profiles.js +36 -0
  63. package/dist/aura3d-cli/game-asset-profiles.js.map +1 -0
  64. package/dist/aura3d-cli/game-asset-validator.d.ts +9 -0
  65. package/dist/aura3d-cli/game-asset-validator.d.ts.map +1 -0
  66. package/dist/aura3d-cli/game-asset-validator.js +5 -0
  67. package/dist/aura3d-cli/game-asset-validator.js.map +1 -0
  68. package/dist/aura3d-cli/index.d.ts +50 -0
  69. package/dist/aura3d-cli/index.d.ts.map +1 -1
  70. package/dist/aura3d-cli/index.js +212 -0
  71. package/dist/aura3d-cli/index.js.map +1 -1
  72. package/dist/aura3d-cli/pull-bridge.d.ts +3 -3
  73. package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -1
  74. package/dist/aura3d-cli/pull-bridge.js +52 -21
  75. package/dist/aura3d-cli/pull-bridge.js.map +1 -1
  76. package/dist/create-aura3d/index.d.ts +1 -1
  77. package/dist/create-aura3d/index.d.ts.map +1 -1
  78. package/dist/create-aura3d/index.js +4 -2
  79. package/dist/create-aura3d/index.js.map +1 -1
  80. package/dist/editor-runtime/AssetDropZone.d.ts +52 -0
  81. package/dist/editor-runtime/AssetDropZone.d.ts.map +1 -0
  82. package/dist/editor-runtime/AssetDropZone.js +115 -0
  83. package/dist/editor-runtime/AssetDropZone.js.map +1 -0
  84. package/dist/editor-runtime/CameraPathEditor.d.ts +48 -0
  85. package/dist/editor-runtime/CameraPathEditor.d.ts.map +1 -0
  86. package/dist/editor-runtime/CameraPathEditor.js +181 -0
  87. package/dist/editor-runtime/CameraPathEditor.js.map +1 -0
  88. package/dist/editor-runtime/CartoonSceneEditor.d.ts +111 -0
  89. package/dist/editor-runtime/CartoonSceneEditor.d.ts.map +1 -0
  90. package/dist/editor-runtime/CartoonSceneEditor.js +285 -0
  91. package/dist/editor-runtime/CartoonSceneEditor.js.map +1 -0
  92. package/dist/editor-runtime/CurveEditor.d.ts +38 -0
  93. package/dist/editor-runtime/CurveEditor.d.ts.map +1 -0
  94. package/dist/editor-runtime/CurveEditor.js +112 -0
  95. package/dist/editor-runtime/CurveEditor.js.map +1 -0
  96. package/dist/editor-runtime/EpisodeReviewPanel.d.ts +67 -0
  97. package/dist/editor-runtime/EpisodeReviewPanel.d.ts.map +1 -0
  98. package/dist/editor-runtime/EpisodeReviewPanel.js +162 -0
  99. package/dist/editor-runtime/EpisodeReviewPanel.js.map +1 -0
  100. package/dist/editor-runtime/KeyframeEditor.d.ts +49 -0
  101. package/dist/editor-runtime/KeyframeEditor.d.ts.map +1 -0
  102. package/dist/editor-runtime/KeyframeEditor.js +161 -0
  103. package/dist/editor-runtime/KeyframeEditor.js.map +1 -0
  104. package/dist/editor-runtime/MultiUserReviewWorkflow.d.ts +77 -0
  105. package/dist/editor-runtime/MultiUserReviewWorkflow.d.ts.map +1 -0
  106. package/dist/editor-runtime/MultiUserReviewWorkflow.js +162 -0
  107. package/dist/editor-runtime/MultiUserReviewWorkflow.js.map +1 -0
  108. package/dist/editor-runtime/NonlinearAnimationEditor.d.ts +81 -0
  109. package/dist/editor-runtime/NonlinearAnimationEditor.d.ts.map +1 -0
  110. package/dist/editor-runtime/NonlinearAnimationEditor.js +180 -0
  111. package/dist/editor-runtime/NonlinearAnimationEditor.js.map +1 -0
  112. package/dist/editor-runtime/PropertyPanel.d.ts +21 -0
  113. package/dist/editor-runtime/PropertyPanel.d.ts.map +1 -0
  114. package/dist/editor-runtime/PropertyPanel.js +72 -0
  115. package/dist/editor-runtime/PropertyPanel.js.map +1 -0
  116. package/dist/editor-runtime/RenderQueuePanel.d.ts +38 -0
  117. package/dist/editor-runtime/RenderQueuePanel.d.ts.map +1 -0
  118. package/dist/editor-runtime/RenderQueuePanel.js +72 -0
  119. package/dist/editor-runtime/RenderQueuePanel.js.map +1 -0
  120. package/dist/editor-runtime/SceneOutliner.d.ts +19 -0
  121. package/dist/editor-runtime/SceneOutliner.d.ts.map +1 -0
  122. package/dist/editor-runtime/SceneOutliner.js +64 -0
  123. package/dist/editor-runtime/SceneOutliner.js.map +1 -0
  124. package/dist/editor-runtime/TimelineEditorController.d.ts +102 -0
  125. package/dist/editor-runtime/TimelineEditorController.d.ts.map +1 -0
  126. package/dist/editor-runtime/TimelineEditorController.js +449 -0
  127. package/dist/editor-runtime/TimelineEditorController.js.map +1 -0
  128. package/dist/editor-runtime/TimelineTrackTypes.d.ts +25 -0
  129. package/dist/editor-runtime/TimelineTrackTypes.d.ts.map +1 -0
  130. package/dist/editor-runtime/TimelineTrackTypes.js +48 -0
  131. package/dist/editor-runtime/TimelineTrackTypes.js.map +1 -0
  132. package/dist/editor-runtime/TimelineUI.d.ts +27 -0
  133. package/dist/editor-runtime/TimelineUI.d.ts.map +1 -0
  134. package/dist/editor-runtime/TimelineUI.js +123 -0
  135. package/dist/editor-runtime/TimelineUI.js.map +1 -0
  136. package/dist/editor-runtime/VisualReviewDashboard.d.ts +43 -0
  137. package/dist/editor-runtime/VisualReviewDashboard.d.ts.map +1 -0
  138. package/dist/editor-runtime/VisualReviewDashboard.js +47 -0
  139. package/dist/editor-runtime/VisualReviewDashboard.js.map +1 -0
  140. package/dist/editor-runtime/index.d.ts +30 -0
  141. package/dist/editor-runtime/index.d.ts.map +1 -1
  142. package/dist/editor-runtime/index.js +15 -0
  143. package/dist/editor-runtime/index.js.map +1 -1
  144. package/dist/engine/advanced-runtime/A3DRenderer.d.ts +24 -2
  145. package/dist/engine/advanced-runtime/A3DRenderer.d.ts.map +1 -1
  146. package/dist/engine/advanced-runtime/A3DRenderer.js +70 -9
  147. package/dist/engine/advanced-runtime/A3DRenderer.js.map +1 -1
  148. package/dist/engine/agent-api/AssetLibraryBrowser.d.ts +77 -0
  149. package/dist/engine/agent-api/AssetLibraryBrowser.d.ts.map +1 -0
  150. package/dist/engine/agent-api/AssetLibraryBrowser.js +112 -0
  151. package/dist/engine/agent-api/AssetLibraryBrowser.js.map +1 -0
  152. package/dist/engine/agent-api/AudioMuxer.d.ts +72 -0
  153. package/dist/engine/agent-api/AudioMuxer.d.ts.map +1 -0
  154. package/dist/engine/agent-api/AudioMuxer.js +80 -0
  155. package/dist/engine/agent-api/AudioMuxer.js.map +1 -0
  156. package/dist/engine/agent-api/AudioVisemeAnalyzer.d.ts +47 -0
  157. package/dist/engine/agent-api/AudioVisemeAnalyzer.d.ts.map +1 -0
  158. package/dist/engine/agent-api/AudioVisemeAnalyzer.js +113 -0
  159. package/dist/engine/agent-api/AudioVisemeAnalyzer.js.map +1 -0
  160. package/dist/engine/agent-api/BatchEpisodeRenderer.d.ts +31 -0
  161. package/dist/engine/agent-api/BatchEpisodeRenderer.d.ts.map +1 -0
  162. package/dist/engine/agent-api/BatchEpisodeRenderer.js +20 -0
  163. package/dist/engine/agent-api/BatchEpisodeRenderer.js.map +1 -0
  164. package/dist/engine/agent-api/BodyLanguageLibrary.d.ts +4 -0
  165. package/dist/engine/agent-api/BodyLanguageLibrary.d.ts.map +1 -0
  166. package/dist/engine/agent-api/BodyLanguageLibrary.js +10 -0
  167. package/dist/engine/agent-api/BodyLanguageLibrary.js.map +1 -0
  168. package/dist/engine/agent-api/BrowserFrameCaptureAdapter.d.ts +65 -0
  169. package/dist/engine/agent-api/BrowserFrameCaptureAdapter.d.ts.map +1 -0
  170. package/dist/engine/agent-api/BrowserFrameCaptureAdapter.js +42 -0
  171. package/dist/engine/agent-api/BrowserFrameCaptureAdapter.js.map +1 -0
  172. package/dist/engine/agent-api/CameraChoreographer.d.ts +69 -0
  173. package/dist/engine/agent-api/CameraChoreographer.d.ts.map +1 -0
  174. package/dist/engine/agent-api/CameraChoreographer.js +165 -0
  175. package/dist/engine/agent-api/CameraChoreographer.js.map +1 -0
  176. package/dist/engine/agent-api/CameraPathEditor.d.ts +20 -0
  177. package/dist/engine/agent-api/CameraPathEditor.d.ts.map +1 -0
  178. package/dist/engine/agent-api/CameraPathEditor.js +47 -0
  179. package/dist/engine/agent-api/CameraPathEditor.js.map +1 -0
  180. package/dist/engine/agent-api/CameraPresetLibrary.d.ts +22 -0
  181. package/dist/engine/agent-api/CameraPresetLibrary.d.ts.map +1 -0
  182. package/dist/engine/agent-api/CameraPresetLibrary.js +109 -0
  183. package/dist/engine/agent-api/CameraPresetLibrary.js.map +1 -0
  184. package/dist/engine/agent-api/CaptionExporter.d.ts +23 -0
  185. package/dist/engine/agent-api/CaptionExporter.d.ts.map +1 -0
  186. package/dist/engine/agent-api/CaptionExporter.js +69 -0
  187. package/dist/engine/agent-api/CaptionExporter.js.map +1 -0
  188. package/dist/engine/agent-api/CartoonAssetManifest.d.ts +50 -0
  189. package/dist/engine/agent-api/CartoonAssetManifest.d.ts.map +1 -0
  190. package/dist/engine/agent-api/CartoonAssetManifest.js +65 -0
  191. package/dist/engine/agent-api/CartoonAssetManifest.js.map +1 -0
  192. package/dist/engine/agent-api/CartoonDirector.d.ts +26 -1
  193. package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -1
  194. package/dist/engine/agent-api/CartoonDirector.js +92 -2
  195. package/dist/engine/agent-api/CartoonDirector.js.map +1 -1
  196. package/dist/engine/agent-api/CartoonEpisodePackage.d.ts +51 -0
  197. package/dist/engine/agent-api/CartoonEpisodePackage.d.ts.map +1 -0
  198. package/dist/engine/agent-api/CartoonEpisodePackage.js +79 -0
  199. package/dist/engine/agent-api/CartoonEpisodePackage.js.map +1 -0
  200. package/dist/engine/agent-api/CartoonMotionQuality.d.ts +83 -0
  201. package/dist/engine/agent-api/CartoonMotionQuality.d.ts.map +1 -0
  202. package/dist/engine/agent-api/CartoonMotionQuality.js +128 -0
  203. package/dist/engine/agent-api/CartoonMotionQuality.js.map +1 -0
  204. package/dist/engine/agent-api/CartoonPerformance.d.ts +1 -0
  205. package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -1
  206. package/dist/engine/agent-api/CartoonPerformance.js +28 -0
  207. package/dist/engine/agent-api/CartoonPerformance.js.map +1 -1
  208. package/dist/engine/agent-api/CartoonRenderQueue.d.ts +11 -0
  209. package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -1
  210. package/dist/engine/agent-api/CartoonRenderQueue.js +25 -0
  211. package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -1
  212. package/dist/engine/agent-api/CartoonRouteProof.d.ts +112 -0
  213. package/dist/engine/agent-api/CartoonRouteProof.d.ts.map +1 -0
  214. package/dist/engine/agent-api/CartoonRouteProof.js +127 -0
  215. package/dist/engine/agent-api/CartoonRouteProof.js.map +1 -0
  216. package/dist/engine/agent-api/CloudRenderAdapter.d.ts +55 -0
  217. package/dist/engine/agent-api/CloudRenderAdapter.d.ts.map +1 -0
  218. package/dist/engine/agent-api/CloudRenderAdapter.js +75 -0
  219. package/dist/engine/agent-api/CloudRenderAdapter.js.map +1 -0
  220. package/dist/engine/agent-api/DialogueAlignment.d.ts +18 -0
  221. package/dist/engine/agent-api/DialogueAlignment.d.ts.map +1 -0
  222. package/dist/engine/agent-api/DialogueAlignment.js +23 -0
  223. package/dist/engine/agent-api/DialogueAlignment.js.map +1 -0
  224. package/dist/engine/agent-api/EpisodeStructure.d.ts +77 -0
  225. package/dist/engine/agent-api/EpisodeStructure.d.ts.map +1 -0
  226. package/dist/engine/agent-api/EpisodeStructure.js +123 -0
  227. package/dist/engine/agent-api/EpisodeStructure.js.map +1 -0
  228. package/dist/engine/agent-api/EpisodeTemplates.d.ts +13 -0
  229. package/dist/engine/agent-api/EpisodeTemplates.d.ts.map +1 -0
  230. package/dist/engine/agent-api/EpisodeTemplates.js +14 -0
  231. package/dist/engine/agent-api/EpisodeTemplates.js.map +1 -0
  232. package/dist/engine/agent-api/ExternalPhonemeAnalyzer.d.ts +54 -0
  233. package/dist/engine/agent-api/ExternalPhonemeAnalyzer.d.ts.map +1 -0
  234. package/dist/engine/agent-api/ExternalPhonemeAnalyzer.js +107 -0
  235. package/dist/engine/agent-api/ExternalPhonemeAnalyzer.js.map +1 -0
  236. package/dist/engine/agent-api/FrameEncoder.d.ts +79 -0
  237. package/dist/engine/agent-api/FrameEncoder.d.ts.map +1 -0
  238. package/dist/engine/agent-api/FrameEncoder.js +131 -0
  239. package/dist/engine/agent-api/FrameEncoder.js.map +1 -0
  240. package/dist/engine/agent-api/GameEvidence.d.ts +43 -0
  241. package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -1
  242. package/dist/engine/agent-api/GameEvidence.js +30 -1
  243. package/dist/engine/agent-api/GameEvidence.js.map +1 -1
  244. package/dist/engine/agent-api/GameInspector.d.ts +65 -0
  245. package/dist/engine/agent-api/GameInspector.d.ts.map +1 -0
  246. package/dist/engine/agent-api/GameInspector.js +53 -0
  247. package/dist/engine/agent-api/GameInspector.js.map +1 -0
  248. package/dist/engine/agent-api/GameRuntime.d.ts +67 -1
  249. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -1
  250. package/dist/engine/agent-api/GameRuntime.js +191 -7
  251. package/dist/engine/agent-api/GameRuntime.js.map +1 -1
  252. package/dist/engine/agent-api/MediaRecorderFrameEncoder.d.ts +19 -0
  253. package/dist/engine/agent-api/MediaRecorderFrameEncoder.d.ts.map +1 -0
  254. package/dist/engine/agent-api/MediaRecorderFrameEncoder.js +74 -0
  255. package/dist/engine/agent-api/MediaRecorderFrameEncoder.js.map +1 -0
  256. package/dist/engine/agent-api/PerformanceBlender.d.ts +30 -0
  257. package/dist/engine/agent-api/PerformanceBlender.d.ts.map +1 -0
  258. package/dist/engine/agent-api/PerformanceBlender.js +62 -0
  259. package/dist/engine/agent-api/PerformanceBlender.js.map +1 -0
  260. package/dist/engine/agent-api/PerformanceCaptureSession.d.ts +65 -0
  261. package/dist/engine/agent-api/PerformanceCaptureSession.d.ts.map +1 -0
  262. package/dist/engine/agent-api/PerformanceCaptureSession.js +131 -0
  263. package/dist/engine/agent-api/PerformanceCaptureSession.js.map +1 -0
  264. package/dist/engine/agent-api/PerformancePoseEditor.d.ts +21 -0
  265. package/dist/engine/agent-api/PerformancePoseEditor.d.ts.map +1 -0
  266. package/dist/engine/agent-api/PerformancePoseEditor.js +23 -0
  267. package/dist/engine/agent-api/PerformancePoseEditor.js.map +1 -0
  268. package/dist/engine/agent-api/PerformanceScriptParser.d.ts +9 -0
  269. package/dist/engine/agent-api/PerformanceScriptParser.d.ts.map +1 -0
  270. package/dist/engine/agent-api/PerformanceScriptParser.js +16 -0
  271. package/dist/engine/agent-api/PerformanceScriptParser.js.map +1 -0
  272. package/dist/engine/agent-api/PngSequenceEncoder.d.ts +34 -0
  273. package/dist/engine/agent-api/PngSequenceEncoder.d.ts.map +1 -0
  274. package/dist/engine/agent-api/PngSequenceEncoder.js +75 -0
  275. package/dist/engine/agent-api/PngSequenceEncoder.js.map +1 -0
  276. package/dist/engine/agent-api/PromptAnimationContract.d.ts +25 -0
  277. package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -1
  278. package/dist/engine/agent-api/PromptAnimationContract.js +60 -1
  279. package/dist/engine/agent-api/PromptAnimationContract.js.map +1 -1
  280. package/dist/engine/agent-api/PublishingPipeline.d.ts +62 -0
  281. package/dist/engine/agent-api/PublishingPipeline.d.ts.map +1 -0
  282. package/dist/engine/agent-api/PublishingPipeline.js +81 -0
  283. package/dist/engine/agent-api/PublishingPipeline.js.map +1 -0
  284. package/dist/engine/agent-api/RenderProgressTracker.d.ts +49 -0
  285. package/dist/engine/agent-api/RenderProgressTracker.d.ts.map +1 -0
  286. package/dist/engine/agent-api/RenderProgressTracker.js +106 -0
  287. package/dist/engine/agent-api/RenderProgressTracker.js.map +1 -0
  288. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +50 -0
  289. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -1
  290. package/dist/engine/agent-api/RuntimeNodeHandle.js +48 -0
  291. package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -1
  292. package/dist/engine/agent-api/SceneSequencer.d.ts +67 -0
  293. package/dist/engine/agent-api/SceneSequencer.d.ts.map +1 -0
  294. package/dist/engine/agent-api/SceneSequencer.js +104 -0
  295. package/dist/engine/agent-api/SceneSequencer.js.map +1 -0
  296. package/dist/engine/agent-api/ShotCompositionRules.d.ts +45 -0
  297. package/dist/engine/agent-api/ShotCompositionRules.d.ts.map +1 -0
  298. package/dist/engine/agent-api/ShotCompositionRules.js +54 -0
  299. package/dist/engine/agent-api/ShotCompositionRules.js.map +1 -0
  300. package/dist/engine/agent-api/ShotTransitionEngine.d.ts +46 -0
  301. package/dist/engine/agent-api/ShotTransitionEngine.d.ts.map +1 -0
  302. package/dist/engine/agent-api/ShotTransitionEngine.js +98 -0
  303. package/dist/engine/agent-api/ShotTransitionEngine.js.map +1 -0
  304. package/dist/engine/agent-api/ThumbnailGenerator.d.ts +44 -0
  305. package/dist/engine/agent-api/ThumbnailGenerator.d.ts.map +1 -0
  306. package/dist/engine/agent-api/ThumbnailGenerator.js +82 -0
  307. package/dist/engine/agent-api/ThumbnailGenerator.js.map +1 -0
  308. package/dist/engine/agent-api/VideoExportPipeline.d.ts +80 -0
  309. package/dist/engine/agent-api/VideoExportPipeline.d.ts.map +1 -0
  310. package/dist/engine/agent-api/VideoExportPipeline.js +139 -0
  311. package/dist/engine/agent-api/VideoExportPipeline.js.map +1 -0
  312. package/dist/engine/agent-api/VisemeTimelineTrack.d.ts +29 -0
  313. package/dist/engine/agent-api/VisemeTimelineTrack.d.ts.map +1 -0
  314. package/dist/engine/agent-api/VisemeTimelineTrack.js +34 -0
  315. package/dist/engine/agent-api/VisemeTimelineTrack.js.map +1 -0
  316. package/dist/engine/agent-api/WaveformVisualizer.d.ts +61 -0
  317. package/dist/engine/agent-api/WaveformVisualizer.d.ts.map +1 -0
  318. package/dist/engine/agent-api/WaveformVisualizer.js +108 -0
  319. package/dist/engine/agent-api/WaveformVisualizer.js.map +1 -0
  320. package/dist/engine/agent-api/WebCodecsFrameEncoder.d.ts +21 -0
  321. package/dist/engine/agent-api/WebCodecsFrameEncoder.d.ts.map +1 -0
  322. package/dist/engine/agent-api/WebCodecsFrameEncoder.js +94 -0
  323. package/dist/engine/agent-api/WebCodecsFrameEncoder.js.map +1 -0
  324. package/dist/engine/agent-api/YouTubeMetadataGenerator.d.ts +21 -0
  325. package/dist/engine/agent-api/YouTubeMetadataGenerator.d.ts.map +1 -0
  326. package/dist/engine/agent-api/YouTubeMetadataGenerator.js +51 -0
  327. package/dist/engine/agent-api/YouTubeMetadataGenerator.js.map +1 -0
  328. package/dist/engine/agent-api/YouTubeUploadAdapter.d.ts +48 -0
  329. package/dist/engine/agent-api/YouTubeUploadAdapter.d.ts.map +1 -0
  330. package/dist/engine/agent-api/YouTubeUploadAdapter.js +114 -0
  331. package/dist/engine/agent-api/YouTubeUploadAdapter.js.map +1 -0
  332. package/dist/engine/agent-api/game-kits/fighting.d.ts +20 -0
  333. package/dist/engine/agent-api/game-kits/fighting.d.ts.map +1 -1
  334. package/dist/engine/agent-api/game-kits/fighting.js +20 -0
  335. package/dist/engine/agent-api/game-kits/fighting.js.map +1 -1
  336. package/dist/engine/agent-api/index.d.ts +121 -3
  337. package/dist/engine/agent-api/index.d.ts.map +1 -1
  338. package/dist/engine/agent-api/index.js +138 -2
  339. package/dist/engine/agent-api/index.js.map +1 -1
  340. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  341. package/dist/engine/game/GameAudio.d.ts +65 -0
  342. package/dist/engine/game/GameAudio.d.ts.map +1 -0
  343. package/dist/engine/game/GameAudio.js +155 -0
  344. package/dist/engine/game/GameAudio.js.map +1 -0
  345. package/dist/engine/game/index.d.ts +3 -0
  346. package/dist/engine/game/index.d.ts.map +1 -0
  347. package/dist/engine/game/index.js +2 -0
  348. package/dist/engine/game/index.js.map +1 -0
  349. package/dist/engine/index.d.ts +4 -1
  350. package/dist/engine/index.d.ts.map +1 -1
  351. package/dist/engine/index.js +3 -1
  352. package/dist/engine/index.js.map +1 -1
  353. package/dist/engine/production-runtime/GameAppRuntime.d.ts +3 -0
  354. package/dist/engine/production-runtime/GameAppRuntime.d.ts.map +1 -0
  355. package/dist/engine/production-runtime/GameAppRuntime.js +2 -0
  356. package/dist/engine/production-runtime/GameAppRuntime.js.map +1 -0
  357. package/dist/engine/production-runtime/GameRenderPreset.d.ts +55 -0
  358. package/dist/engine/production-runtime/GameRenderPreset.d.ts.map +1 -0
  359. package/dist/engine/production-runtime/GameRenderPreset.js +90 -0
  360. package/dist/engine/production-runtime/GameRenderPreset.js.map +1 -0
  361. package/dist/engine/production-runtime/index.d.ts +18 -1
  362. package/dist/engine/production-runtime/index.d.ts.map +1 -1
  363. package/dist/engine/production-runtime/index.js +35 -1
  364. package/dist/engine/production-runtime/index.js.map +1 -1
  365. package/dist/engine/runtime/AssetPreloader.d.ts +14 -0
  366. package/dist/engine/runtime/AssetPreloader.d.ts.map +1 -0
  367. package/dist/engine/runtime/AssetPreloader.js +22 -0
  368. package/dist/engine/runtime/AssetPreloader.js.map +1 -0
  369. package/dist/engine/runtime/ResourceManager.d.ts +48 -0
  370. package/dist/engine/runtime/ResourceManager.d.ts.map +1 -0
  371. package/dist/engine/runtime/ResourceManager.js +156 -0
  372. package/dist/engine/runtime/ResourceManager.js.map +1 -0
  373. package/dist/engine/runtime/index.d.ts +5 -0
  374. package/dist/engine/runtime/index.d.ts.map +1 -0
  375. package/dist/engine/runtime/index.js +3 -0
  376. package/dist/engine/runtime/index.js.map +1 -0
  377. package/dist/physics/CharacterController.d.ts +31 -0
  378. package/dist/physics/CharacterController.d.ts.map +1 -1
  379. package/dist/physics/CharacterController.js +90 -0
  380. package/dist/physics/CharacterController.js.map +1 -1
  381. package/dist/physics/CollisionVolumes.d.ts +29 -0
  382. package/dist/physics/CollisionVolumes.d.ts.map +1 -1
  383. package/dist/physics/CollisionVolumes.js +43 -0
  384. package/dist/physics/CollisionVolumes.js.map +1 -1
  385. package/dist/physics/KinematicBody.d.ts +15 -0
  386. package/dist/physics/KinematicBody.d.ts.map +1 -1
  387. package/dist/physics/KinematicBody.js +28 -0
  388. package/dist/physics/KinematicBody.js.map +1 -1
  389. package/dist/physics/KinematicWorld.js +6 -0
  390. package/dist/physics/KinematicWorld.js.map +1 -1
  391. package/dist/rendering/FrameVisualMetrics.d.ts +19 -0
  392. package/dist/rendering/FrameVisualMetrics.d.ts.map +1 -1
  393. package/dist/rendering/FrameVisualMetrics.js +57 -0
  394. package/dist/rendering/FrameVisualMetrics.js.map +1 -1
  395. package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts +19 -0
  396. package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts.map +1 -0
  397. package/dist/rendering/cartoon/CartoonMaterialStyle.js +13 -0
  398. package/dist/rendering/cartoon/CartoonMaterialStyle.js.map +1 -0
  399. package/dist/rendering/cartoon/CartoonRenderPreset.d.ts +36 -0
  400. package/dist/rendering/cartoon/CartoonRenderPreset.d.ts.map +1 -0
  401. package/dist/rendering/cartoon/CartoonRenderPreset.js +23 -0
  402. package/dist/rendering/cartoon/CartoonRenderPreset.js.map +1 -0
  403. package/dist/rendering/cartoon/CartoonVisualQuality.d.ts +28 -0
  404. package/dist/rendering/cartoon/CartoonVisualQuality.d.ts.map +1 -0
  405. package/dist/rendering/cartoon/CartoonVisualQuality.js +39 -0
  406. package/dist/rendering/cartoon/CartoonVisualQuality.js.map +1 -0
  407. package/dist/rendering/cartoon/index.d.ts +4 -0
  408. package/dist/rendering/cartoon/index.d.ts.map +1 -0
  409. package/dist/rendering/cartoon/index.js +4 -0
  410. package/dist/rendering/cartoon/index.js.map +1 -0
  411. package/dist/rendering/index.d.ts +3 -2
  412. package/dist/rendering/index.d.ts.map +1 -1
  413. package/dist/rendering/index.js +2 -1
  414. package/dist/rendering/index.js.map +1 -1
  415. package/dist/scripting/CartoonNodeCategories.d.ts +3 -0
  416. package/dist/scripting/CartoonNodeCategories.d.ts.map +1 -0
  417. package/dist/scripting/CartoonNodeCategories.js +9 -0
  418. package/dist/scripting/CartoonNodeCategories.js.map +1 -0
  419. package/dist/scripting/CartoonVisualNodes.d.ts +3 -0
  420. package/dist/scripting/CartoonVisualNodes.d.ts.map +1 -0
  421. package/dist/scripting/CartoonVisualNodes.js +41 -0
  422. package/dist/scripting/CartoonVisualNodes.js.map +1 -0
  423. package/dist/scripting/VisualGraphExecutor.js +46 -0
  424. package/dist/scripting/VisualGraphExecutor.js.map +1 -1
  425. package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
  426. package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
  427. package/dist/scripting/VisualNodeCatalog.js +3 -1
  428. package/dist/scripting/VisualNodeCatalog.js.map +1 -1
  429. package/dist/scripting/index.d.ts +3 -0
  430. package/dist/scripting/index.d.ts.map +1 -1
  431. package/dist/scripting/index.js +2 -0
  432. package/dist/scripting/index.js.map +1 -1
  433. package/package.json +138 -120
  434. package/templates/product-viewer/tests/screenshot.spec.ts +8 -16
@@ -0,0 +1,80 @@
1
+ import type { CartoonRenderOutputPackageMetadata, CartoonRenderQueueArtifact, CartoonRenderQueueItem } from "./CartoonRenderQueue.js";
2
+ import { type EncodedVideoArtifact, type FrameEncoder, type FrameEncoderAdapter, type FrameEncoderCodec } from "./FrameEncoder.js";
3
+ import { type AudioMuxer, type AudioMuxerInputStem, type MuxedVideoArtifact } from "./AudioMuxer.js";
4
+ import { type RenderProgressSnapshot, type RenderProgressTracker } from "./RenderProgressTracker.js";
5
+ import type { AudioStemManifestArtifact } from "./DialoguePerformance.js";
6
+ import { type PromptAnimationSeconds } from "./PromptAnimationContract.js";
7
+ export interface VideoExportFrameCapture {
8
+ readonly item: CartoonRenderQueueItem;
9
+ readonly image?: ImageBitmap | HTMLCanvasElement | OffscreenCanvas | Blob | Uint8Array | string | undefined;
10
+ }
11
+ export interface VideoExportRuntime {
12
+ seek?(time: PromptAnimationSeconds, item: CartoonRenderQueueItem): Promise<void> | void;
13
+ step?(dt: PromptAnimationSeconds, item: CartoonRenderQueueItem): Promise<void> | void;
14
+ captureFrame(item: CartoonRenderQueueItem): Promise<VideoExportFrameCapture> | VideoExportFrameCapture;
15
+ }
16
+ export interface VideoExportPlan {
17
+ readonly kind: "video-export-plan";
18
+ readonly episodeId: string;
19
+ readonly route: string;
20
+ readonly frameRate: number;
21
+ readonly duration: PromptAnimationSeconds;
22
+ readonly frameCount: number;
23
+ readonly outputPath: string;
24
+ readonly outputMimeType: string;
25
+ readonly codec: FrameEncoderCodec;
26
+ readonly audioStemCount: number;
27
+ readonly captionOutputCount: number;
28
+ readonly thumbnailOutputPath?: string | undefined;
29
+ readonly evidenceOutputPath?: string | undefined;
30
+ }
31
+ export interface VideoExportResult {
32
+ readonly kind: "video-export-result";
33
+ readonly plan: VideoExportPlan;
34
+ readonly output: VideoExportOutputSummary;
35
+ readonly encodedVideo: EncodedVideoArtifact;
36
+ readonly muxedVideo: MuxedVideoArtifact;
37
+ readonly progress: RenderProgressSnapshot;
38
+ readonly checksum: string;
39
+ readonly renderTimeMs: number;
40
+ }
41
+ export interface VideoExportOutputSummary {
42
+ readonly path: string;
43
+ readonly mimeType: string;
44
+ readonly byteLength: number;
45
+ readonly frameCount: number;
46
+ readonly duration: PromptAnimationSeconds;
47
+ readonly hasEncodedOutput: boolean;
48
+ readonly hasMuxedOutput: boolean;
49
+ readonly encodedOutputMode: NonNullable<EncodedVideoArtifact["outputMode"]>;
50
+ readonly playableEncodedOutput: boolean;
51
+ }
52
+ export type VideoExportReadinessMode = "proof" | "publish";
53
+ export interface CreateVideoExportPipelineOptions {
54
+ readonly renderQueue: CartoonRenderQueueArtifact;
55
+ readonly outputPackage: CartoonRenderOutputPackageMetadata;
56
+ readonly runtime: VideoExportRuntime;
57
+ readonly audioStems?: readonly AudioMuxerInputStem[] | AudioStemManifestArtifact | undefined;
58
+ readonly codec?: FrameEncoderCodec | undefined;
59
+ readonly encoder?: FrameEncoder | undefined;
60
+ readonly encoderAdapter?: FrameEncoderAdapter | undefined;
61
+ readonly muxer?: AudioMuxer | undefined;
62
+ readonly progress?: RenderProgressTracker | undefined;
63
+ readonly now?: (() => number) | undefined;
64
+ readonly readinessMode?: VideoExportReadinessMode | undefined;
65
+ }
66
+ export interface VideoExportPipeline {
67
+ readonly plan: VideoExportPlan;
68
+ readonly progress: RenderProgressTracker;
69
+ render(): Promise<VideoExportResult>;
70
+ cancel(message?: string): RenderProgressSnapshot;
71
+ }
72
+ export declare function createVideoExportPlan(input: {
73
+ readonly renderQueue: CartoonRenderQueueArtifact;
74
+ readonly outputPackage: CartoonRenderOutputPackageMetadata;
75
+ readonly audioStems?: readonly AudioMuxerInputStem[] | AudioStemManifestArtifact | undefined;
76
+ readonly codec?: FrameEncoderCodec | undefined;
77
+ }): VideoExportPlan;
78
+ export declare function createVideoExportPipeline(options: CreateVideoExportPipelineOptions): VideoExportPipeline;
79
+ export declare function normalizeAudioStemInput(input?: readonly AudioMuxerInputStem[] | AudioStemManifestArtifact | undefined): readonly AudioMuxerInputStem[];
80
+ //# sourceMappingURL=VideoExportPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoExportPipeline.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VideoExportPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { createFrameEncoder } from "./FrameEncoder.js";
2
+ import { audioStemsFromManifest, createAudioMuxer } from "./AudioMuxer.js";
3
+ import { createRenderProgressTracker } from "./RenderProgressTracker.js";
4
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
5
+ export function createVideoExportPlan(input) {
6
+ const videoOutput = selectVideoOutput(input.outputPackage, input.codec);
7
+ const codec = input.codec ?? videoOutput?.codec ?? (videoOutput?.kind === "mp4" ? "h264" : "vp9");
8
+ const audioStems = normalizeAudioStemInput(input.audioStems);
9
+ return {
10
+ kind: "video-export-plan",
11
+ episodeId: input.renderQueue.episodeId,
12
+ route: input.renderQueue.route,
13
+ frameRate: input.renderQueue.frameRate,
14
+ duration: input.outputPackage.duration,
15
+ frameCount: input.renderQueue.items.length,
16
+ outputPath: videoOutput?.path ?? "dist/render/episode.webm",
17
+ outputMimeType: videoOutput?.mimeType ?? (codec === "h264" ? "video/mp4" : "video/webm"),
18
+ codec,
19
+ audioStemCount: audioStems.length,
20
+ captionOutputCount: input.outputPackage.outputs.captions.length,
21
+ ...(input.outputPackage.outputs.thumbnail?.path ? { thumbnailOutputPath: input.outputPackage.outputs.thumbnail.path } : {}),
22
+ ...(input.outputPackage.outputs.evidenceJson?.path ? { evidenceOutputPath: input.outputPackage.outputs.evidenceJson.path } : {})
23
+ };
24
+ }
25
+ function selectVideoOutput(outputPackage, codec) {
26
+ if (codec === "h264")
27
+ return outputPackage.outputs.mp4 ?? outputPackage.outputs.webm;
28
+ if (codec === "png-sequence")
29
+ return outputPackage.outputs.webm ?? outputPackage.outputs.mp4;
30
+ return outputPackage.outputs.webm ?? outputPackage.outputs.mp4;
31
+ }
32
+ export function createVideoExportPipeline(options) {
33
+ const now = options.now ?? defaultNow;
34
+ const plan = createVideoExportPlan(options);
35
+ const encoder = options.encoder ?? createFrameEncoder({
36
+ codec: plan.codec,
37
+ frameRate: options.renderQueue.frameRate,
38
+ viewport: options.renderQueue.viewport,
39
+ adapter: options.encoderAdapter
40
+ });
41
+ const muxer = options.muxer ?? createAudioMuxer({ container: plan.codec === "h264" ? "mp4" : "webm" });
42
+ const progress = options.progress ?? createRenderProgressTracker({ totalFrames: options.renderQueue.items.length, now });
43
+ const audioStems = normalizeAudioStemInput(options.audioStems);
44
+ const readinessMode = options.readinessMode ?? "proof";
45
+ let cancelled = false;
46
+ return {
47
+ plan,
48
+ progress,
49
+ async render() {
50
+ if (readinessMode === "publish" && options.encoderAdapter?.proofOnly) {
51
+ throw new Error(`Publish video export requires a real encoder adapter; ${options.encoderAdapter.kind ?? "adapter"} is proof-only.`);
52
+ }
53
+ const startedAt = now();
54
+ progress.start(`Rendering ${plan.frameCount} frames.`);
55
+ for (const item of options.renderQueue.items) {
56
+ if (cancelled || progress.snapshot().cancelled)
57
+ break;
58
+ await options.runtime.seek?.(item.time, item);
59
+ await options.runtime.step?.(1 / options.renderQueue.frameRate, item);
60
+ const capture = await options.runtime.captureFrame(item);
61
+ await encoder.encodeFrame({
62
+ frame: item.frame,
63
+ time: item.time,
64
+ viewport: item.viewport,
65
+ image: capture.image,
66
+ durationMs: 1000 / options.renderQueue.frameRate
67
+ });
68
+ progress.advance({ frame: item.frame, time: item.time });
69
+ }
70
+ if (cancelled || progress.snapshot().cancelled) {
71
+ const encodedVideo = encoder.snapshot();
72
+ const muxedVideo = await muxer.mux(encodedVideo, audioStems, options.renderQueue.frameRate);
73
+ return createVideoExportResult(plan, encodedVideo, muxedVideo, progress.snapshot(), startedAt, now());
74
+ }
75
+ const encodedVideo = await encoder.finalize();
76
+ if (readinessMode === "publish" && encodedVideo.output === undefined) {
77
+ throw new Error("Publish video export requires a real encoded output artifact.");
78
+ }
79
+ if (readinessMode === "publish" && encodedVideo.playable !== true) {
80
+ throw new Error(`Publish video export requires a playable encoded output artifact; ${encodedVideo.outputMode ?? "unknown"} output is not publish-ready.`);
81
+ }
82
+ const muxedVideo = await muxer.mux(encodedVideo, audioStems, options.renderQueue.frameRate);
83
+ if (readinessMode === "publish" && audioStems.length > 0 && muxedVideo.output === undefined) {
84
+ throw new Error("Publish video export with audio stems requires a real muxed output artifact.");
85
+ }
86
+ progress.complete("Render export complete.");
87
+ return createVideoExportResult(plan, encodedVideo, muxedVideo, progress.snapshot(), startedAt, now());
88
+ },
89
+ cancel(message) {
90
+ cancelled = true;
91
+ return progress.cancel(message);
92
+ }
93
+ };
94
+ }
95
+ export function normalizeAudioStemInput(input) {
96
+ if (!input)
97
+ return [];
98
+ if (isAudioStemManifestArtifact(input))
99
+ return audioStemsFromManifest(input);
100
+ return input;
101
+ }
102
+ function isAudioStemManifestArtifact(input) {
103
+ return !Array.isArray(input) && Array.isArray(input.stems);
104
+ }
105
+ function createVideoExportResult(plan, encodedVideo, muxedVideo, progress, startedAt, endedAt) {
106
+ const checksumSource = `${plan.episodeId}:${encodedVideo.frameCount}:${muxedVideo.byteLength}:${normalizePromptAnimationTime(muxedVideo.duration)}`;
107
+ return {
108
+ kind: "video-export-result",
109
+ plan,
110
+ output: {
111
+ path: plan.outputPath,
112
+ mimeType: muxedVideo.mimeType,
113
+ byteLength: muxedVideo.byteLength,
114
+ frameCount: encodedVideo.frameCount,
115
+ duration: normalizePromptAnimationTime(muxedVideo.duration),
116
+ hasEncodedOutput: encodedVideo.output !== undefined,
117
+ hasMuxedOutput: muxedVideo.output !== undefined,
118
+ encodedOutputMode: encodedVideo.outputMode ?? "memory-summary",
119
+ playableEncodedOutput: encodedVideo.playable === true
120
+ },
121
+ encodedVideo,
122
+ muxedVideo,
123
+ progress,
124
+ checksum: deterministicChecksum(checksumSource),
125
+ renderTimeMs: Math.max(0, endedAt - startedAt)
126
+ };
127
+ }
128
+ function deterministicChecksum(value) {
129
+ let hash = 2166136261;
130
+ for (let index = 0; index < value.length; index += 1) {
131
+ hash ^= value.charCodeAt(index);
132
+ hash = Math.imul(hash, 16777619);
133
+ }
134
+ return `fnv1a-${(hash >>> 0).toString(16).padStart(8, "0")}`;
135
+ }
136
+ function defaultNow() {
137
+ return typeof globalThis.performance === "undefined" ? Date.now() : globalThis.performance.now();
138
+ }
139
+ //# sourceMappingURL=VideoExportPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoExportPipeline.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VideoExportPipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAkG,MAAM,mBAAmB,CAAC;AACvJ,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAsE,MAAM,iBAAiB,CAAC;AAC/I,OAAO,EAAE,2BAA2B,EAA2D,MAAM,4BAA4B,CAAC;AAElI,OAAO,EAAE,4BAA4B,EAA+B,MAAM,8BAA8B,CAAC;AA2EzG,MAAM,UAAU,qBAAqB,CAAC,KAKrC;IACC,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAK,WAAW,EAAE,KAAuC,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrI,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS;QACtC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK;QAC9B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS;QACtC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ;QACtC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;QAC1C,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI,0BAA0B;QAC3D,cAAc,EAAE,WAAW,EAAE,QAAQ,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QACxF,KAAK;QACL,cAAc,EAAE,UAAU,CAAC,MAAM;QACjC,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;QAC/D,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3H,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjI,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,aAAiD,EACjD,KAAqC;IAErC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;IACrF,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;IAC7F,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAyC;IACjF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC;IACtC,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,kBAAkB,CAAC;QACpD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS;QACxC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ;QACtC,OAAO,EAAE,OAAO,CAAC,cAAc;KAChC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,2BAA2B,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACzH,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC;IACvD,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,KAAK,CAAC,MAAM;YACV,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CAAC,yDAAyD,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,SAAS,iBAAiB,CAAC,CAAC;YACtI,CAAC;YACD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;YACxB,QAAQ,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,UAAU,UAAU,CAAC,CAAC;YACvD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAC7C,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS;oBAAE,MAAM;gBACtD,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9C,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM,OAAO,CAAC,WAAW,CAAC;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS;iBACjD,CAAC,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC5F,OAAO,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YACxG,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9C,IAAI,aAAa,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,aAAa,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,qEAAqE,YAAY,CAAC,UAAU,IAAI,SAAS,+BAA+B,CAAC,CAAC;YAC5J,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5F,IAAI,aAAa,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5F,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;YAClG,CAAC;YACD,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YAC7C,OAAO,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,CAAC,OAAO;YACZ,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA8E;IACpH,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,2BAA2B,CAAC,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAiE;IACpG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAE,KAAmC,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAqB,EACrB,YAAkC,EAClC,UAA8B,EAC9B,QAAgC,EAChC,SAAiB,EACjB,OAAe;IAEf,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,IAAI,4BAA4B,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpJ,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,IAAI;QACJ,MAAM,EAAE;YACN,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,QAAQ,EAAE,4BAA4B,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC3D,gBAAgB,EAAE,YAAY,CAAC,MAAM,KAAK,SAAS;YACnD,cAAc,EAAE,UAAU,CAAC,MAAM,KAAK,SAAS;YAC/C,iBAAiB,EAAE,YAAY,CAAC,UAAU,IAAI,gBAAgB;YAC9D,qBAAqB,EAAE,YAAY,CAAC,QAAQ,KAAK,IAAI;SACtD;QACD,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,QAAQ,EAAE,qBAAqB,CAAC,cAAc,CAAC;QAC/C,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,UAAU,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;AACnG,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type AuraVoiceVisemeCue, type AuraVoiceVisemeTrack, type VisemeSample } from "./VisemeController.js";
2
+ import { type PromptAnimationFrameRate, type PromptAnimationId, type PromptAnimationLanguageCode, type PromptAnimationSeconds } from "./PromptAnimationContract.js";
3
+ export interface VisemeTimelineManualEdit {
4
+ readonly id: PromptAnimationId;
5
+ readonly cue: AuraVoiceVisemeCue;
6
+ readonly reason?: string | undefined;
7
+ }
8
+ export interface VisemeTimelineTrackArtifact {
9
+ readonly artifact: "viseme-timeline-track";
10
+ readonly contractId: string;
11
+ readonly episodeId: PromptAnimationId;
12
+ readonly language: PromptAnimationLanguageCode;
13
+ readonly frameRate: PromptAnimationFrameRate;
14
+ readonly sourceTrack: AuraVoiceVisemeTrack;
15
+ readonly manualEdits: readonly VisemeTimelineManualEdit[];
16
+ readonly cues: readonly AuraVoiceVisemeCue[];
17
+ readonly generatedAt?: string | undefined;
18
+ }
19
+ export declare function createVisemeTimelineTrack(input: {
20
+ readonly episodeId: PromptAnimationId;
21
+ readonly language: PromptAnimationLanguageCode;
22
+ readonly frameRate: PromptAnimationFrameRate;
23
+ readonly sourceTrack: AuraVoiceVisemeTrack;
24
+ readonly manualEdits?: readonly VisemeTimelineManualEdit[] | undefined;
25
+ readonly generatedAt?: string | undefined;
26
+ }): VisemeTimelineTrackArtifact;
27
+ export declare function applyManualVisemeEdits(sourceCues: readonly AuraVoiceVisemeCue[], manualEdits: readonly VisemeTimelineManualEdit[]): readonly AuraVoiceVisemeCue[];
28
+ export declare function sampleVisemeTimelineTrack(track: VisemeTimelineTrackArtifact, time: PromptAnimationSeconds, characterId?: PromptAnimationId): VisemeSample;
29
+ //# sourceMappingURL=VisemeTimelineTrack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisemeTimelineTrack.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VisemeTimelineTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAgE,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,KAAK,2BAA2B,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAElO,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,wBAAwB,EAAE,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C,GAAG,2BAA2B,CAa9B;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,SAAS,kBAAkB,EAAE,EACzC,WAAW,EAAE,SAAS,wBAAwB,EAAE,GAC/C,SAAS,kBAAkB,EAAE,CAI/B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,2BAA2B,EAClC,IAAI,EAAE,sBAAsB,EAC5B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,YAAY,CAWd"}
@@ -0,0 +1,34 @@
1
+ import { createAuraVoiceVisemeTrack, sampleVisemeTrack } from "./VisemeController.js";
2
+ import { normalizePromptAnimationTime, promptAnimationContractVersion } from "./PromptAnimationContract.js";
3
+ export function createVisemeTimelineTrack(input) {
4
+ const manualEdits = input.manualEdits ?? [];
5
+ return {
6
+ artifact: "viseme-timeline-track",
7
+ contractId: promptAnimationContractVersion,
8
+ episodeId: input.episodeId,
9
+ language: input.language,
10
+ frameRate: input.frameRate,
11
+ sourceTrack: input.sourceTrack,
12
+ manualEdits,
13
+ cues: applyManualVisemeEdits(input.sourceTrack.cues, manualEdits),
14
+ ...(input.generatedAt ? { generatedAt: input.generatedAt } : {})
15
+ };
16
+ }
17
+ export function applyManualVisemeEdits(sourceCues, manualEdits) {
18
+ const manualCues = manualEdits.map((edit) => edit.cue);
19
+ const retained = sourceCues.filter((cue) => !manualCues.some((manual) => cue.characterId === manual.characterId && rangesOverlap(cue, manual)));
20
+ return [...retained, ...manualCues].sort((a, b) => a.startTime - b.startTime || a.id.localeCompare(b.id));
21
+ }
22
+ export function sampleVisemeTimelineTrack(track, time, characterId) {
23
+ return sampleVisemeTrack(createAuraVoiceVisemeTrack({
24
+ episodeId: track.episodeId,
25
+ language: track.language,
26
+ frameRate: track.frameRate,
27
+ cues: track.cues
28
+ }), normalizePromptAnimationTime(time), characterId);
29
+ }
30
+ function rangesOverlap(a, b) {
31
+ return normalizePromptAnimationTime(a.startTime) < normalizePromptAnimationTime(b.endTime) &&
32
+ normalizePromptAnimationTime(b.startTime) < normalizePromptAnimationTime(a.endTime);
33
+ }
34
+ //# sourceMappingURL=VisemeTimelineTrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisemeTimelineTrack.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VisemeTimelineTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EAIlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,4BAA4B,EAAE,8BAA8B,EAAwH,MAAM,8BAA8B,CAAC;AAoBlO,MAAM,UAAU,yBAAyB,CAAC,KAOzC;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;IAC5C,OAAO;QACL,QAAQ,EAAE,uBAAuB;QACjC,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW;QACX,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAAyC,EACzC,WAAgD;IAEhD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,IAAI,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChJ,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAkC,EAClC,IAA4B,EAC5B,WAA+B;IAE/B,OAAO,iBAAiB,CACtB,0BAA0B,CAAC;QACzB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC,EACF,4BAA4B,CAAC,IAAI,CAAC,EAClC,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,CAAqB,EAAE,CAAqB;IACjE,OAAO,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC;QACxF,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACxF,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { type PromptAnimationSeconds } from "./PromptAnimationContract.js";
2
+ export interface AudioWaveformPeak {
3
+ readonly index: number;
4
+ readonly startTime: PromptAnimationSeconds;
5
+ readonly endTime: PromptAnimationSeconds;
6
+ readonly min: number;
7
+ readonly max: number;
8
+ readonly rms: number;
9
+ }
10
+ export interface AudioWaveformData {
11
+ readonly kind: "audio-waveform";
12
+ readonly sampleRate: number;
13
+ readonly channelCount: number;
14
+ readonly duration: PromptAnimationSeconds;
15
+ readonly peaks: readonly AudioWaveformPeak[];
16
+ }
17
+ export interface CreateAudioWaveformDataOptions {
18
+ readonly samples: Float32Array | readonly number[];
19
+ readonly sampleRate: number;
20
+ readonly channelCount?: number | undefined;
21
+ readonly bins?: number | undefined;
22
+ }
23
+ export interface WaveformVisualizerPeak {
24
+ readonly min: number;
25
+ readonly max: number;
26
+ readonly rms?: number | undefined;
27
+ }
28
+ export interface WaveformVisualizerOptions {
29
+ readonly width: number;
30
+ readonly height: number;
31
+ readonly padding?: number | undefined;
32
+ readonly color?: string | undefined;
33
+ }
34
+ export interface WaveformVisualizerPoint {
35
+ readonly x: number;
36
+ readonly yMin: number;
37
+ readonly yMax: number;
38
+ readonly rmsHeight: number;
39
+ }
40
+ export interface WaveformVisualization {
41
+ readonly kind: "waveform-visualization";
42
+ readonly width: number;
43
+ readonly height: number;
44
+ readonly pointCount: number;
45
+ readonly color: string;
46
+ readonly points: readonly WaveformVisualizerPoint[];
47
+ }
48
+ export interface WaveformDrawOptions {
49
+ readonly width: number;
50
+ readonly height: number;
51
+ readonly foreground?: string | undefined;
52
+ readonly background?: string | undefined;
53
+ readonly playheadTime?: PromptAnimationSeconds | undefined;
54
+ readonly selectionStartTime?: PromptAnimationSeconds | undefined;
55
+ readonly selectionEndTime?: PromptAnimationSeconds | undefined;
56
+ }
57
+ export declare function createAudioWaveformData(options: CreateAudioWaveformDataOptions): AudioWaveformData;
58
+ export declare function createWaveformVisualization(peaks: readonly WaveformVisualizerPeak[], options: WaveformVisualizerOptions): WaveformVisualization;
59
+ export declare function waveformPeakAtTime(waveform: AudioWaveformData, time: PromptAnimationSeconds): AudioWaveformPeak | undefined;
60
+ export declare function drawWaveformToCanvas(context: Pick<CanvasRenderingContext2D, "fillStyle" | "strokeStyle" | "lineWidth" | "fillRect" | "beginPath" | "moveTo" | "lineTo" | "stroke">, waveform: AudioWaveformData, options: WaveformDrawOptions): void;
61
+ //# sourceMappingURL=WaveformVisualizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaveformVisualizer.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/WaveformVisualizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
2
+ export function createAudioWaveformData(options) {
3
+ const channelCount = Math.max(1, Math.floor(options.channelCount ?? 1));
4
+ const sampleCount = Math.floor(options.samples.length / channelCount);
5
+ const duration = sampleCount / options.sampleRate;
6
+ const binCount = Math.max(1, Math.min(options.bins ?? 512, sampleCount || 1));
7
+ const samplesPerBin = Math.max(1, Math.ceil(sampleCount / binCount));
8
+ const peaks = [];
9
+ for (let bin = 0; bin < binCount; bin += 1) {
10
+ const startSample = bin * samplesPerBin;
11
+ const endSample = Math.min(sampleCount, startSample + samplesPerBin);
12
+ let min = 1;
13
+ let max = -1;
14
+ let sumSquares = 0;
15
+ let count = 0;
16
+ for (let sample = startSample; sample < endSample; sample += 1) {
17
+ for (let channel = 0; channel < channelCount; channel += 1) {
18
+ const value = options.samples[sample * channelCount + channel] ?? 0;
19
+ min = Math.min(min, value);
20
+ max = Math.max(max, value);
21
+ sumSquares += value * value;
22
+ count += 1;
23
+ }
24
+ }
25
+ peaks.push({
26
+ index: bin,
27
+ startTime: normalizePromptAnimationTime(startSample / options.sampleRate),
28
+ endTime: normalizePromptAnimationTime(endSample / options.sampleRate),
29
+ min: count === 0 ? 0 : min,
30
+ max: count === 0 ? 0 : max,
31
+ rms: count === 0 ? 0 : Math.sqrt(sumSquares / count)
32
+ });
33
+ }
34
+ return {
35
+ kind: "audio-waveform",
36
+ sampleRate: options.sampleRate,
37
+ channelCount,
38
+ duration: normalizePromptAnimationTime(duration),
39
+ peaks
40
+ };
41
+ }
42
+ export function createWaveformVisualization(peaks, options) {
43
+ const width = positive(options.width, "width");
44
+ const height = positive(options.height, "height");
45
+ const padding = Math.max(0, options.padding ?? 0);
46
+ const center = height / 2;
47
+ const halfHeight = Math.max(1, height / 2 - padding);
48
+ const denominator = Math.max(1, peaks.length - 1);
49
+ return {
50
+ kind: "waveform-visualization",
51
+ width,
52
+ height,
53
+ pointCount: peaks.length,
54
+ color: options.color ?? "#38bdf8",
55
+ points: peaks.map((peak, index) => ({
56
+ x: peaks.length === 1 ? width / 2 : index / denominator * width,
57
+ yMin: center - clamp(peak.max, -1, 1) * halfHeight,
58
+ yMax: center - clamp(peak.min, -1, 1) * halfHeight,
59
+ rmsHeight: clamp(peak.rms ?? 0, 0, 1) * halfHeight
60
+ }))
61
+ };
62
+ }
63
+ export function waveformPeakAtTime(waveform, time) {
64
+ const normalized = normalizePromptAnimationTime(time);
65
+ return waveform.peaks.find((peak) => normalized >= peak.startTime && normalized < peak.endTime) ?? waveform.peaks[waveform.peaks.length - 1];
66
+ }
67
+ export function drawWaveformToCanvas(context, waveform, options) {
68
+ context.fillStyle = options.background ?? "#08111f";
69
+ context.fillRect(0, 0, options.width, options.height);
70
+ if (options.selectionStartTime !== undefined && options.selectionEndTime !== undefined) {
71
+ const startX = timeToX(waveform, options.selectionStartTime, options.width);
72
+ const endX = timeToX(waveform, options.selectionEndTime, options.width);
73
+ context.fillStyle = "rgba(125, 211, 252, 0.18)";
74
+ context.fillRect(startX, 0, Math.max(1, endX - startX), options.height);
75
+ }
76
+ const centerY = options.height / 2;
77
+ context.strokeStyle = options.foreground ?? "#38bdf8";
78
+ context.lineWidth = 1;
79
+ context.beginPath();
80
+ for (const peak of waveform.peaks) {
81
+ const x = timeToX(waveform, peak.startTime, options.width);
82
+ context.moveTo(x, centerY + peak.min * centerY);
83
+ context.lineTo(x, centerY + peak.max * centerY);
84
+ }
85
+ context.stroke();
86
+ if (options.playheadTime !== undefined) {
87
+ const x = timeToX(waveform, options.playheadTime, options.width);
88
+ context.strokeStyle = "#f8fafc";
89
+ context.beginPath();
90
+ context.moveTo(x, 0);
91
+ context.lineTo(x, options.height);
92
+ context.stroke();
93
+ }
94
+ }
95
+ function timeToX(waveform, time, width) {
96
+ if (waveform.duration <= 0)
97
+ return 0;
98
+ return Math.max(0, Math.min(width, time / waveform.duration * width));
99
+ }
100
+ function positive(value, label) {
101
+ if (!Number.isFinite(value) || value <= 0)
102
+ throw new Error(`Waveform ${label} must be a positive finite number.`);
103
+ return value;
104
+ }
105
+ function clamp(value, min, max) {
106
+ return Math.min(max, Math.max(min, value));
107
+ }
108
+ //# sourceMappingURL=WaveformVisualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaveformVisualizer.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/WaveformVisualizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type EncodedVideoArtifact, type EncodedVideoChunk, type FrameEncoderAdapter, type FrameEncoderCodec, type FrameEncoderOutputMode } from "./FrameEncoder.js";
2
+ export interface WebCodecsFrameEncoderCapability {
3
+ readonly kind: "webcodecs-frame-encoder-capability";
4
+ readonly supported: boolean;
5
+ readonly codec: FrameEncoderCodec;
6
+ readonly supportedCodecs: readonly FrameEncoderCodec[];
7
+ readonly supportedContainers: readonly ("mp4" | "webm")[];
8
+ readonly canProducePlayableFile: boolean;
9
+ readonly requiresExternalMuxer: boolean;
10
+ readonly reason?: string | undefined;
11
+ }
12
+ export interface CreateWebCodecsFrameEncoderAdapterOptions {
13
+ readonly codec?: FrameEncoderCodec | undefined;
14
+ readonly supported?: boolean | undefined;
15
+ readonly outputMode?: Extract<FrameEncoderOutputMode, "encoded-video" | "encoded-chunks"> | undefined;
16
+ readonly playableOutput?: boolean | undefined;
17
+ readonly outputFactory?: ((summary: Omit<EncodedVideoArtifact, "kind" | "output" | "outputMode" | "proofOnly" | "playable" | "unsupportedReason">, chunks: readonly EncodedVideoChunk[]) => Blob | Uint8Array | string | undefined) | undefined;
18
+ }
19
+ export declare function probeWebCodecsFrameEncoder(codec?: FrameEncoderCodec): WebCodecsFrameEncoderCapability;
20
+ export declare function createWebCodecsFrameEncoderAdapter(options?: CreateWebCodecsFrameEncoderAdapterOptions): FrameEncoderAdapter;
21
+ //# sourceMappingURL=WebCodecsFrameEncoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebCodecsFrameEncoder.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/WebCodecsFrameEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAEtB,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,EAAE,oCAAoC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvD,QAAQ,CAAC,mBAAmB,EAAE,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1D,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,yCAAyC;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,sBAAsB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GAAG,SAAS,CAAC;IACtG,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,iBAAiB,EAAE,KAAK,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CACjP;AAED,wBAAgB,0BAA0B,CAAC,KAAK,GAAE,iBAA0B,GAAG,+BAA+B,CAqC7G;AAED,wBAAgB,kCAAkC,CAAC,OAAO,GAAE,yCAA8C,GAAG,mBAAmB,CAyC/H"}
@@ -0,0 +1,94 @@
1
+ import {} from "./FrameEncoder.js";
2
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
3
+ export function probeWebCodecsFrameEncoder(codec = "h264") {
4
+ const hasVideoEncoder = Boolean(globalThis.VideoEncoder);
5
+ const supportedCodecs = ["h264", "vp9"];
6
+ if (!hasVideoEncoder) {
7
+ return {
8
+ kind: "webcodecs-frame-encoder-capability",
9
+ supported: false,
10
+ codec,
11
+ supportedCodecs: [],
12
+ supportedContainers: [],
13
+ canProducePlayableFile: false,
14
+ requiresExternalMuxer: true,
15
+ reason: "VideoEncoder is unavailable in this runtime."
16
+ };
17
+ }
18
+ if (!supportedCodecs.includes(codec)) {
19
+ return {
20
+ kind: "webcodecs-frame-encoder-capability",
21
+ supported: false,
22
+ codec,
23
+ supportedCodecs,
24
+ supportedContainers: ["mp4", "webm"],
25
+ canProducePlayableFile: false,
26
+ requiresExternalMuxer: true,
27
+ reason: `WebCodecs adapter does not declare support for codec "${codec}".`
28
+ };
29
+ }
30
+ return {
31
+ kind: "webcodecs-frame-encoder-capability",
32
+ supported: true,
33
+ codec,
34
+ supportedCodecs,
35
+ supportedContainers: codec === "h264" ? ["mp4"] : ["webm"],
36
+ canProducePlayableFile: false,
37
+ requiresExternalMuxer: true,
38
+ reason: "WebCodecs encodes video chunks; a real MP4/WebM container writer is required for playable file output."
39
+ };
40
+ }
41
+ export function createWebCodecsFrameEncoderAdapter(options = {}) {
42
+ const codec = options.codec ?? "h264";
43
+ const outputMode = options.outputMode ?? (options.playableOutput ? "encoded-video" : "encoded-chunks");
44
+ const capability = {
45
+ ...probeWebCodecsFrameEncoder(codec),
46
+ ...(options.supported !== undefined ? {
47
+ supported: options.supported,
48
+ supportedCodecs: options.supported ? ["h264", "vp9"] : [],
49
+ supportedContainers: options.supported ? (codec === "h264" ? ["mp4"] : ["webm"]) : []
50
+ } : {}),
51
+ ...(options.playableOutput !== undefined ? {
52
+ canProducePlayableFile: options.playableOutput,
53
+ requiresExternalMuxer: !options.playableOutput
54
+ } : {})
55
+ };
56
+ const chunks = [];
57
+ return {
58
+ kind: "webcodecs-frame-encoder",
59
+ proofOnly: false,
60
+ outputMode: capability.supported ? outputMode : "unsupported",
61
+ capability,
62
+ encode(frame) {
63
+ if (!capability.supported)
64
+ throw new Error(capability.reason ?? "WebCodecs frame encoder is unsupported.");
65
+ const chunk = {
66
+ frame: frame.frame,
67
+ time: normalizePromptAnimationTime(frame.time),
68
+ byteLength: webCodecsFrameByteLength(frame),
69
+ keyFrame: frame.frame === 0 || frame.frame % 60 === 0,
70
+ durationMs: frame.durationMs ?? 1000 / 30
71
+ };
72
+ chunks.push(chunk);
73
+ return chunk;
74
+ },
75
+ finalize(summary) {
76
+ if (!capability.supported)
77
+ throw new Error(capability.reason ?? "WebCodecs frame encoder is unsupported.");
78
+ return options.outputFactory?.(summary, chunks);
79
+ },
80
+ reset() {
81
+ chunks.length = 0;
82
+ }
83
+ };
84
+ }
85
+ function webCodecsFrameByteLength(frame) {
86
+ if (frame.image instanceof Uint8Array)
87
+ return frame.image.byteLength;
88
+ if (typeof Blob !== "undefined" && frame.image instanceof Blob)
89
+ return frame.image.size;
90
+ if (typeof frame.image === "string")
91
+ return frame.image.length;
92
+ return Math.max(1, Math.round(frame.viewport.width * frame.viewport.height * 0.075));
93
+ }
94
+ //# sourceMappingURL=WebCodecsFrameEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebCodecsFrameEncoder.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/WebCodecsFrameEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAON,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAqB5E,MAAM,UAAU,0BAA0B,CAAC,QAA2B,MAAM;IAC1E,MAAM,eAAe,GAAG,OAAO,CAAE,UAAoD,CAAC,YAAY,CAAC,CAAC;IACpG,MAAM,eAAe,GAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,oCAAoC;YAC1C,SAAS,EAAE,KAAK;YAChB,KAAK;YACL,eAAe,EAAE,EAAE;YACnB,mBAAmB,EAAE,EAAE;YACvB,sBAAsB,EAAE,KAAK;YAC7B,qBAAqB,EAAE,IAAI;YAC3B,MAAM,EAAE,8CAA8C;SACvD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,oCAAoC;YAC1C,SAAS,EAAE,KAAK;YAChB,KAAK;YACL,eAAe;YACf,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;YACpC,sBAAsB,EAAE,KAAK;YAC7B,qBAAqB,EAAE,IAAI;YAC3B,MAAM,EAAE,yDAAyD,KAAK,IAAI;SAC3E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,oCAAoC;QAC1C,SAAS,EAAE,IAAI;QACf,KAAK;QACL,eAAe;QACf,mBAAmB,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,sBAAsB,EAAE,KAAK;QAC7B,qBAAqB,EAAE,IAAI;QAC3B,MAAM,EAAE,wGAAwG;KACjH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,UAAqD,EAAE;IACxG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG;QACjB,GAAG,0BAA0B,CAAC,KAAK,CAAC;QACpC,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC,EAAW;YAC3E,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAU,CAAC,CAAC,CAAC,CAAC,EAAW;SACjH,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC;YACzC,sBAAsB,EAAE,OAAO,CAAC,cAAc;YAC9C,qBAAqB,EAAE,CAAC,OAAO,CAAC,cAAc;SAC/C,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;QAC7D,UAAU;QACV,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,UAAU,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,yCAAyC,CAAC,CAAC;YAC3G,MAAM,KAAK,GAAG;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9C,UAAU,EAAE,wBAAwB,CAAC,KAAK,CAAC;gBAC3C,QAAQ,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,CAAC;gBACrD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,GAAG,EAAE;aAC1C,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,QAAQ,CAAC,OAAO;YACd,IAAI,CAAC,UAAU,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,yCAAyC,CAAC,CAAC;YAC3G,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QACD,KAAK;YACH,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAwB;IACxD,IAAI,KAAK,CAAC,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;IACrE,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IACxF,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACvF,CAAC"}