@hypit/hypit 0.1.4 → 0.1.5

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 (449) hide show
  1. package/README.md +4 -2
  2. package/dist/public/caption.d.ts +206 -183
  3. package/dist/public/composition.d.ts +25 -3
  4. package/dist/public/endpoint-kit.d.ts +24 -2
  5. package/dist/public/generation.d.ts +5 -1
  6. package/dist/public/hyperframes.d.ts +19 -1
  7. package/dist/public/narrative.d.ts +17 -3
  8. package/dist/public/performance.d.ts +1590 -0
  9. package/dist/public/program-space.d.ts +179 -32
  10. package/dist/public/runtime-kit.d.ts +21 -8
  11. package/dist/public/sound.d.ts +822 -0
  12. package/dist/public/speech.d.ts +41 -0
  13. package/dist/public/studio-adapter.d.ts +77 -15
  14. package/dist/public/temporal-markup.d.ts +9 -44
  15. package/dist/public/temporal.d.ts +37 -28
  16. package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
  17. package/examples/README.md +18 -10
  18. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
  19. package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
  20. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
  21. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
  22. package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
  23. package/examples/provider-package/README.md +78 -0
  24. package/examples/provider-package/hypit.runtime.json +12 -0
  25. package/examples/provider-package/packages/provider-images/package.json +11 -0
  26. package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
  27. package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
  28. package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
  29. package/examples/semantic-composition/README.md +6 -0
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  32. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  33. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  34. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  35. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  36. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  39. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  40. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  41. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  42. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  43. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  44. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  45. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  47. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  48. package/package.json +32 -15
  49. package/packages/audio-track/README.md +20 -13
  50. package/packages/audio-track/package.json +1 -1
  51. package/packages/audio-track/src/component.ts +4 -4
  52. package/packages/audio-track/src/fragment.ts +6 -5
  53. package/packages/audio-track/src/index.ts +1 -1
  54. package/packages/audio-track/src/manifest.ts +17 -16
  55. package/packages/audio-track/src/program.ts +21 -25
  56. package/packages/audio-track/src/surface.ts +19 -18
  57. package/packages/audio-track-studio/README.md +23 -0
  58. package/packages/audio-track-studio/src/index.ts +28 -17
  59. package/packages/author-kit/README.md +1 -1
  60. package/packages/background-removal/README.md +4 -7
  61. package/packages/browser-capture/package.json +1 -1
  62. package/packages/build-result/README.md +11 -0
  63. package/packages/build-result/src/decode.ts +2 -0
  64. package/packages/build-result/src/execution-log.ts +17 -0
  65. package/packages/build-result/src/index.ts +1 -0
  66. package/packages/build-result/src/store.ts +14 -1
  67. package/packages/build-result/src/types.ts +3 -0
  68. package/packages/build-result-s3/src/repository.ts +4 -0
  69. package/packages/caption/README.md +61 -73
  70. package/packages/caption/package.json +3 -2
  71. package/packages/caption/src/activation.ts +2 -2
  72. package/packages/caption/src/component.ts +20 -5
  73. package/packages/caption/src/display.ts +3 -18
  74. package/packages/caption/src/fragment.ts +3 -7
  75. package/packages/caption/src/index.ts +6 -5
  76. package/packages/caption/src/manifest.ts +29 -46
  77. package/packages/caption/src/style.ts +24 -135
  78. package/packages/caption/src/surface.ts +12 -92
  79. package/packages/caption/src/temporalize.ts +18 -53
  80. package/packages/caption/src/types.ts +8 -35
  81. package/packages/caption/src/visibility.ts +23 -0
  82. package/packages/caption-fine/README.md +14 -9
  83. package/packages/caption-fine/package.json +4 -2
  84. package/packages/caption-fine/src/component.ts +3 -3
  85. package/packages/caption-fine/src/fragment.ts +7 -19
  86. package/packages/caption-fine/src/index.ts +2 -0
  87. package/packages/caption-fine/src/manifest.ts +26 -17
  88. package/packages/caption-fine/src/recipe.ts +7 -0
  89. package/packages/caption-fine/src/render.ts +14 -13
  90. package/packages/caption-fine/src/schedule.ts +39 -35
  91. package/packages/caption-fine/src/style.ts +10 -9
  92. package/packages/caption-fine/src/surface.ts +62 -35
  93. package/packages/caption-fine/src/types.ts +2 -0
  94. package/packages/caption-fine-studio/README.md +24 -2
  95. package/packages/caption-fine-studio/package.json +3 -1
  96. package/packages/caption-fine-studio/src/activation.ts +3 -3
  97. package/packages/caption-fine-studio/src/index.ts +54 -42
  98. package/packages/cli/README.md +57 -4
  99. package/packages/cli/package.json +1 -0
  100. package/packages/cli/src/arguments.ts +25 -6
  101. package/packages/cli/src/build-planning.ts +3 -2
  102. package/packages/cli/src/command.ts +6 -0
  103. package/packages/cli/src/commands/environment.ts +28 -18
  104. package/packages/cli/src/commands/execution.ts +81 -26
  105. package/packages/cli/src/commands/results.ts +7 -11
  106. package/packages/cli/src/index.ts +2 -2
  107. package/packages/cli/src/machine-view.ts +3 -2
  108. package/packages/cli/src/main.ts +34 -42
  109. package/packages/cli/src/observation.ts +7 -1
  110. package/packages/cli/src/output.ts +65 -23
  111. package/packages/cli/src/view.ts +64 -18
  112. package/packages/comment-sticker/README.md +3 -3
  113. package/packages/comment-sticker/package.json +1 -1
  114. package/packages/comment-sticker/src/component.ts +4 -4
  115. package/packages/comment-sticker/src/fragment.ts +5 -4
  116. package/packages/comment-sticker/src/manifest.ts +7 -6
  117. package/packages/comment-sticker/src/program.ts +9 -9
  118. package/packages/comment-sticker/src/surface.ts +6 -7
  119. package/packages/composition/README.md +21 -0
  120. package/packages/composition/src/audio-presentation.ts +44 -0
  121. package/packages/composition/src/index.ts +3 -0
  122. package/packages/composition/src/schema.ts +8 -3
  123. package/packages/composition/src/track.ts +15 -1
  124. package/packages/credential-store-env/README.md +1 -1
  125. package/packages/deck-track/README.md +3 -3
  126. package/packages/deck-track/package.json +1 -1
  127. package/packages/deck-track/src/component.ts +5 -5
  128. package/packages/deck-track/src/fragment.ts +6 -5
  129. package/packages/deck-track/src/lower.ts +12 -12
  130. package/packages/deck-track/src/manifest.ts +8 -7
  131. package/packages/deck-track/src/program.ts +13 -16
  132. package/packages/deck-track/src/surface.ts +9 -10
  133. package/packages/driver-node/src/driver.ts +41 -3
  134. package/packages/elevenlabs-speech/README.md +27 -0
  135. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  136. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  137. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  138. package/packages/elevenlabs-speech/src/index.ts +111 -0
  139. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  140. package/packages/endpoint-kit/README.md +24 -0
  141. package/packages/endpoint-kit/src/index.ts +7 -1
  142. package/packages/film/README.md +12 -7
  143. package/packages/film/package.json +1 -1
  144. package/packages/film/src/component.ts +4 -4
  145. package/packages/film/src/fragment.ts +6 -5
  146. package/packages/film/src/manifest.ts +11 -10
  147. package/packages/film/src/program.ts +5 -5
  148. package/packages/film/src/recipe.ts +2 -1
  149. package/packages/film/src/surface.ts +6 -6
  150. package/packages/film-studio/package.json +1 -1
  151. package/packages/film-studio/src/index.ts +2 -2
  152. package/packages/fishaudio-speech/README.md +33 -0
  153. package/packages/fishaudio-speech/package.json +21 -0
  154. package/packages/fishaudio-speech/src/activation.ts +32 -0
  155. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  156. package/packages/fishaudio-speech/src/index.ts +156 -0
  157. package/packages/fishaudio-speech/src/surface.ts +192 -0
  158. package/packages/generation/README.md +11 -1
  159. package/packages/generation/src/mapping.ts +28 -30
  160. package/packages/gpt-image/README.md +1 -2
  161. package/packages/grok-imagine/README.md +1 -2
  162. package/packages/hyperframes/README.md +7 -3
  163. package/packages/hyperframes/src/browser-program.ts +11 -2
  164. package/packages/hyperframes/src/document.ts +15 -2
  165. package/packages/interview-emoji-reveal/README.md +4 -4
  166. package/packages/interview-emoji-reveal/package.json +1 -1
  167. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  168. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  169. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  170. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  171. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  172. package/packages/media-execution/README.md +7 -3
  173. package/packages/media-execution/src/audio-presentation.ts +23 -0
  174. package/packages/media-execution/src/execute.ts +2 -0
  175. package/packages/media-pipeline/README.md +7 -3
  176. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  177. package/packages/media-pipeline/src/component.ts +16 -2
  178. package/packages/media-pipeline/src/manifest.ts +3 -1
  179. package/packages/media-pipeline/src/types.ts +2 -1
  180. package/packages/media-track/README.md +14 -47
  181. package/packages/media-track/package.json +1 -1
  182. package/packages/media-track/preview/preview.svml +5 -5
  183. package/packages/media-track/src/author.ts +12 -6
  184. package/packages/media-track/src/component.ts +10 -16
  185. package/packages/media-track/src/fragment.ts +8 -7
  186. package/packages/media-track/src/index.ts +3 -1
  187. package/packages/media-track/src/lower.ts +7 -7
  188. package/packages/media-track/src/manifest.ts +16 -38
  189. package/packages/media-track/src/program.ts +62 -67
  190. package/packages/media-track/src/sampling.ts +6 -6
  191. package/packages/media-track/src/sequence.ts +8 -8
  192. package/packages/media-track/src/surface.ts +25 -43
  193. package/packages/media-track-studio/README.md +9 -0
  194. package/packages/media-track-studio/src/index.ts +16 -11
  195. package/packages/mimo-speech/README.md +1 -1
  196. package/packages/minimax-h3/README.md +1 -1
  197. package/packages/nano-banana/README.md +1 -1
  198. package/packages/narrative/README.md +23 -1
  199. package/packages/narrative/src/identity.ts +11 -0
  200. package/packages/narrative/src/index.ts +3 -0
  201. package/packages/narrative/src/schema.ts +28 -27
  202. package/packages/narrative/src/selection.ts +52 -0
  203. package/packages/narrative/src/types.ts +2 -0
  204. package/packages/package-loader-node/README.md +30 -0
  205. package/packages/package-loader-node/package.json +5 -2
  206. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  207. package/packages/package-loader-node/src/index.ts +1 -0
  208. package/packages/package-loader-node/src/loader.ts +12 -15
  209. package/packages/package-loader-node/src/location.ts +27 -1
  210. package/packages/package-loader-node/src/module-scope.ts +183 -0
  211. package/packages/package-loader-node/src/types.ts +4 -0
  212. package/packages/performance/README.md +83 -0
  213. package/packages/performance/package.json +30 -0
  214. package/packages/performance/src/activation.ts +11 -0
  215. package/packages/performance/src/component.ts +46 -0
  216. package/packages/performance/src/index.ts +6 -0
  217. package/packages/performance/src/manifest.ts +53 -0
  218. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  219. package/packages/performance/src/program.ts +51 -0
  220. package/packages/performance/src/style.ts +35 -0
  221. package/packages/performance/src/surface.ts +99 -0
  222. package/packages/performance-studio/README.md +25 -0
  223. package/packages/performance-studio/package.json +21 -0
  224. package/packages/performance-studio/src/activation.ts +6 -0
  225. package/packages/performance-studio/src/index.ts +84 -0
  226. package/packages/program-space/README.md +9 -18
  227. package/packages/program-space/src/activation.ts +1 -5
  228. package/packages/program-space/src/index.ts +2 -11
  229. package/packages/program-space/src/surface.ts +1 -20
  230. package/packages/project-context-node/README.md +20 -0
  231. package/packages/project-context-node/package.json +10 -0
  232. package/packages/project-context-node/src/index.ts +3 -0
  233. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  234. package/packages/provider-hyperframes-local/README.md +43 -15
  235. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  236. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  237. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  238. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  239. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  240. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  241. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  242. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  243. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  244. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  245. package/packages/provider-hypihub/README.md +48 -17
  246. package/packages/provider-hypihub/package.json +2 -0
  247. package/packages/provider-hypihub/src/mapping.ts +31 -7
  248. package/packages/provider-hypihub/src/oauth.ts +6 -0
  249. package/packages/provider-hypihub/src/provider.ts +25 -13
  250. package/packages/provider-hypihub/src/routes.ts +1 -2
  251. package/packages/provider-hypihub/src/upload.ts +2 -0
  252. package/packages/provider-media-local/README.md +3 -4
  253. package/packages/provider-whisperx-local/src/program.ts +1 -0
  254. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  255. package/packages/ranking/README.md +8 -6
  256. package/packages/ranking/package.json +1 -1
  257. package/packages/ranking/src/component.ts +6 -6
  258. package/packages/ranking/src/fragment.ts +11 -7
  259. package/packages/ranking/src/manifest.ts +21 -14
  260. package/packages/ranking/src/render.ts +22 -26
  261. package/packages/ranking/src/schedule.ts +16 -19
  262. package/packages/ranking/src/surface.ts +12 -13
  263. package/packages/ranking-studio/README.md +18 -0
  264. package/packages/ranking-studio/src/index.ts +61 -9
  265. package/packages/render-hyperframes/README.md +7 -7
  266. package/packages/render-hyperframes/package.json +1 -1
  267. package/packages/render-hyperframes/src/component.ts +11 -1
  268. package/packages/render-hyperframes/src/fragment.ts +7 -4
  269. package/packages/render-hyperframes/src/manifest.ts +4 -4
  270. package/packages/render-hyperframes/src/surface.ts +6 -6
  271. package/packages/runtime/README.md +8 -1
  272. package/packages/runtime/src/execution.ts +15 -4
  273. package/packages/runtime/src/index.ts +2 -1
  274. package/packages/runtime/src/log.ts +51 -0
  275. package/packages/runtime/src/types.ts +5 -8
  276. package/packages/runtime-host-node/README.md +30 -0
  277. package/packages/runtime-host-node/package.json +1 -0
  278. package/packages/runtime-host-node/src/index.ts +24 -9
  279. package/packages/runtime-host-node/src/packages.ts +47 -50
  280. package/packages/runtime-kit/README.md +5 -0
  281. package/packages/runtime-kit/src/index.ts +3 -1
  282. package/packages/runtime-local/README.md +92 -4
  283. package/packages/runtime-local/src/config.ts +202 -56
  284. package/packages/runtime-local/src/control.ts +9 -1
  285. package/packages/runtime-local/src/executor.ts +66 -0
  286. package/packages/runtime-local/src/host.ts +37 -17
  287. package/packages/runtime-local/src/log.ts +48 -0
  288. package/packages/runtime-local/src/programs.ts +2 -1
  289. package/packages/runtime-local/src/result-writer.ts +2 -0
  290. package/packages/runtime-local/src/runtime.ts +8 -6
  291. package/packages/runtime-local/src/supervisor.ts +142 -0
  292. package/packages/runtime-local/src/types.ts +9 -2
  293. package/packages/runtime-local/src/worker-process.ts +7 -24
  294. package/packages/runtime-local/src/worker.ts +55 -83
  295. package/packages/screen-overlay/README.md +3 -3
  296. package/packages/screen-overlay/package.json +1 -1
  297. package/packages/screen-overlay/src/component.ts +3 -3
  298. package/packages/screen-overlay/src/fragment.ts +5 -4
  299. package/packages/screen-overlay/src/manifest.ts +7 -6
  300. package/packages/screen-overlay/src/program.ts +9 -9
  301. package/packages/screen-overlay/src/surface.ts +6 -7
  302. package/packages/script/README.md +15 -2
  303. package/packages/script/src/manifest.ts +2 -2
  304. package/packages/script/src/narrative.ts +1 -0
  305. package/packages/script/src/surface.ts +4 -3
  306. package/packages/script/src/types.ts +1 -1
  307. package/packages/script-studio/package.json +9 -3
  308. package/packages/script-studio/src/index.ts +2 -0
  309. package/packages/script-studio/src/projection.ts +105 -0
  310. package/packages/seedance/README.md +30 -1
  311. package/packages/seedance/src/index.ts +18 -7
  312. package/packages/seedance/src/surface.ts +17 -4
  313. package/packages/seedance-kits/README.md +7 -1
  314. package/packages/seedream/README.md +1 -1
  315. package/packages/sound/README.md +81 -0
  316. package/packages/sound/package.json +25 -0
  317. package/packages/sound/src/activation.ts +11 -0
  318. package/packages/sound/src/component.ts +28 -0
  319. package/packages/sound/src/index.ts +5 -0
  320. package/packages/sound/src/manifest.ts +47 -0
  321. package/packages/sound/src/program.ts +84 -0
  322. package/packages/sound/src/style.ts +34 -0
  323. package/packages/sound/src/surface.ts +90 -0
  324. package/packages/sound-studio/README.md +22 -0
  325. package/packages/sound-studio/package.json +20 -0
  326. package/packages/sound-studio/src/activation.ts +6 -0
  327. package/packages/sound-studio/src/index.ts +74 -0
  328. package/packages/speech/README.md +2 -2
  329. package/packages/speech-alignment/src/local.ts +8 -0
  330. package/packages/speech-alignment/src/locate.ts +1 -1
  331. package/packages/store-sqlite/README.md +7 -0
  332. package/packages/store-sqlite/src/store.ts +84 -83
  333. package/packages/studio/INSPECTOR.md +15 -2
  334. package/packages/studio/README.md +88 -14
  335. package/packages/studio/package.json +8 -7
  336. package/packages/studio/src/companion-assembly.ts +1 -0
  337. package/packages/studio/src/domain.ts +1 -1
  338. package/packages/studio/src/fallback-companions.ts +3 -3
  339. package/packages/studio/src/feedback-server.ts +51 -0
  340. package/packages/studio/src/feedback-store.ts +66 -0
  341. package/packages/studio/src/feedback.ts +60 -0
  342. package/packages/studio/src/parameter-values.ts +43 -1
  343. package/packages/studio/src/parameters.ts +114 -24
  344. package/packages/studio/src/preview/render.ts +5 -1
  345. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  346. package/packages/studio/src/programme.ts +14 -30
  347. package/packages/studio/src/server.ts +10 -6
  348. package/packages/studio/src/shared.ts +4 -2
  349. package/packages/studio/src/snapshot.ts +21 -132
  350. package/packages/studio/src/studio-preflight.ts +3 -3
  351. package/packages/studio/src/studio-registry.ts +50 -6
  352. package/packages/studio/src/style.css +209 -48
  353. package/packages/studio/src/ui/comments.ts +233 -0
  354. package/packages/studio/src/ui/icons.ts +5 -0
  355. package/packages/studio/src/ui/main.ts +145 -86
  356. package/packages/studio/src/ui/overlay.ts +12 -8
  357. package/packages/studio/src/ui/scrub-preview.ts +108 -0
  358. package/packages/studio/src/ui/stage.ts +67 -4
  359. package/packages/studio/src/ui/timeline.ts +177 -108
  360. package/packages/studio/start.ts +4 -2
  361. package/packages/studio-adapter/README.md +130 -11
  362. package/packages/studio-adapter/src/index.ts +100 -13
  363. package/packages/temporal/README.md +6 -6
  364. package/packages/temporal/package.json +1 -1
  365. package/packages/temporal/src/component.ts +5 -6
  366. package/packages/temporal/src/index.ts +8 -6
  367. package/packages/temporal/src/location.ts +11 -11
  368. package/packages/temporal/src/projection.ts +19 -19
  369. package/packages/temporal/src/rational.ts +4 -4
  370. package/packages/temporal-markup/EDITING.md +2 -2
  371. package/packages/temporal-markup/README.md +27 -11
  372. package/packages/temporal-markup/package.json +1 -1
  373. package/packages/temporal-markup/src/index.ts +20 -25
  374. package/packages/temporal-markup/src/space.ts +10 -41
  375. package/packages/timeline/README.md +31 -0
  376. package/packages/{semantic-track → timeline}/package.json +1 -1
  377. package/packages/timeline/src/activation.ts +8 -0
  378. package/packages/timeline/src/component.ts +24 -0
  379. package/packages/timeline/src/identity.ts +60 -0
  380. package/packages/timeline/src/index.ts +6 -0
  381. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  382. package/packages/timeline/src/manifest.ts +39 -0
  383. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  384. package/packages/timeline/src/types.ts +24 -0
  385. package/packages/timeline-author/README.md +68 -0
  386. package/packages/{speech-track → timeline-author}/package.json +6 -4
  387. package/packages/timeline-author/src/activation.ts +22 -0
  388. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  389. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  390. package/packages/timeline-author/src/index.ts +7 -0
  391. package/packages/timeline-author/src/manifest.ts +78 -0
  392. package/packages/timeline-author/src/program.ts +107 -0
  393. package/packages/timeline-author/src/surface.ts +46 -0
  394. package/packages/timeline-author/src/types.ts +6 -0
  395. package/packages/typography-track/README.md +4 -4
  396. package/packages/typography-track/package.json +1 -1
  397. package/packages/typography-track/src/component.ts +4 -4
  398. package/packages/typography-track/src/fragment.ts +4 -3
  399. package/packages/typography-track/src/manifest.ts +11 -9
  400. package/packages/typography-track/src/program.ts +15 -15
  401. package/packages/typography-track/src/surface.ts +17 -18
  402. package/packages/video-cli/README.md +4 -1
  403. package/packages/video-cli/package.json +2 -1
  404. package/packages/video-cli/src/creation.ts +14 -4
  405. package/packages/video-cli/src/index.ts +1 -1
  406. package/packages/video-cli/src/studio-distribution.ts +2 -1
  407. package/packages/volcengine-matting/README.md +3 -3
  408. package/packages/whisperx/README.md +1 -1
  409. package/services/whisperx/README.md +14 -0
  410. package/services/whisperx/pyproject.toml +2 -0
  411. package/services/whisperx/uv.lock +20 -20
  412. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  413. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  414. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  415. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  416. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  417. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  418. package/packages/provider-kie/README.md +0 -134
  419. package/packages/provider-kie/package.json +0 -43
  420. package/packages/provider-kie/src/activation.ts +0 -71
  421. package/packages/provider-kie/src/index.ts +0 -10
  422. package/packages/provider-kie/src/mapping.ts +0 -182
  423. package/packages/provider-kie/src/provider.ts +0 -657
  424. package/packages/provider-kie/src/routes.ts +0 -150
  425. package/packages/provider-xiaomi-mimo/README.md +0 -32
  426. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  427. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  428. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  429. package/packages/runtime/src/environment.ts +0 -6
  430. package/packages/semantic-track/README.md +0 -21
  431. package/packages/semantic-track/src/activation.ts +0 -8
  432. package/packages/semantic-track/src/component.ts +0 -24
  433. package/packages/semantic-track/src/identity.ts +0 -58
  434. package/packages/semantic-track/src/index.ts +0 -6
  435. package/packages/semantic-track/src/manifest.ts +0 -38
  436. package/packages/semantic-track/src/types.ts +0 -26
  437. package/packages/speech-track/README.md +0 -51
  438. package/packages/speech-track/src/activation.ts +0 -19
  439. package/packages/speech-track/src/index.ts +0 -7
  440. package/packages/speech-track/src/manifest.ts +0 -73
  441. package/packages/speech-track/src/program.ts +0 -64
  442. package/packages/speech-track/src/surface.ts +0 -35
  443. package/packages/speech-track/src/types.ts +0 -6
  444. package/packages/speech-track-studio/README.md +0 -3
  445. package/packages/speech-track-studio/package.json +0 -14
  446. package/packages/speech-track-studio/src/activation.ts +0 -7
  447. package/packages/speech-track-studio/src/index.ts +0 -40
  448. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  449. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -1,150 +0,0 @@
1
- import { artifactTypes } from "@hypit/artifact";
2
- import {
3
- assertBackgroundRemovalRequest,
4
- backgroundRemovalCapabilities,
5
- } from "@hypit/background-removal";
6
- import type { BackgroundRemovalRequest } from "@hypit/background-removal";
7
- import {
8
- compileWireRequest,
9
- generationTypes,
10
- selectWireModelForRequest,
11
- sealGeneratedImageSet,
12
- sealGeneratedVideoSet,
13
- } from "@hypit/generation";
14
- import type { GenerationArtifactUrlResolver, GenerationRequest, GenerationWireMapping } from "@hypit/generation";
15
- import { canonicalize } from "@hypit/protocol";
16
- import type { BlobRef, CanonicalValue, CapabilityRef, StoredValue, TypeRef } from "@hypit/protocol";
17
- import type { EndpointRequest, EndpointSupport } from "@hypit/endpoint-kit";
18
-
19
- import { kieModelCatalog, verifyKieModelCatalog } from "./mapping.js";
20
-
21
- export type KieTaskRequest = {
22
- readonly model: string;
23
- readonly input: CanonicalValue;
24
- };
25
-
26
- export type KieRoute = {
27
- readonly key: string;
28
- readonly capability: CapabilityRef;
29
- readonly returns: TypeRef;
30
- readonly media: "image" | "video";
31
- readonly maxResults: number;
32
- readonly supports?: (request: EndpointRequest) => EndpointSupport;
33
- /** Select the same service model before or during execution, without resolving Resource bytes. */
34
- readonly selectModel: (request: EndpointRequest) => string;
35
- readonly compile: (
36
- constraints: CanonicalValue,
37
- resolve: GenerationArtifactUrlResolver,
38
- ) => Promise<KieTaskRequest>;
39
- readonly packageResult: (artifacts: readonly BlobRef[]) => StoredValue;
40
- };
41
-
42
- function capabilityKey(ref: CapabilityRef): string {
43
- return `${ref.module.name}@${ref.module.version}#${ref.name}`;
44
- }
45
-
46
- function scalar(request: GenerationRequest, port: string): string | number | boolean | undefined {
47
- const value = request.ports[port]?.[0];
48
- return typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? value : undefined;
49
- }
50
-
51
- /** Returns the KIE-wire limitation that rejects an otherwise valid model request. */
52
- function kieGenerationRejection(mapping: GenerationWireMapping, request: GenerationRequest): string | undefined {
53
- if (mapping.capability.module.name === "@hypit/gpt-image" && mapping.capability.name === "gpt-image-2") {
54
- const ratio = scalar(request, "aspectRatio");
55
- const resolution = scalar(request, "resolution");
56
- const background = scalar(request, "background");
57
- const unsupportedRatios = resolution === "2K"
58
- ? ["5:4", "4:5", "3:1", "1:3", "9:21"]
59
- : resolution === "4K" ? ["3:1", "1:3", "9:21"] : [];
60
- if (unsupportedRatios.includes(String(ratio))) {
61
- return `KIE GPT Image 2 does not accept ${String(ratio)} at ${String(resolution)}`;
62
- }
63
- if (background !== undefined && resolution !== "1K") {
64
- return `KIE GPT Image 2 accepts the background option only at 1K; omit it at ${String(resolution)}`;
65
- }
66
- }
67
- if (mapping.capability.module.name === "@hypit/grok-imagine"
68
- && (mapping.capability.name === "grok-imagine-video"
69
- || mapping.capability.name === "grok-imagine-video-1.5-preview")
70
- && scalar(request, "resolution") === "1080p"
71
- && (request.ports.images?.length ?? 0) > 1) {
72
- return `KIE ${mapping.capability.name} accepts at most one reference image at 1080p`;
73
- }
74
- return undefined;
75
- }
76
-
77
- const kieGenerationMappings: readonly (GenerationWireMapping & { readonly result: "image" | "video" })[] = kieModelCatalog.map((mapping) => {
78
- if (mapping.result === "audio") {
79
- throw new Error(`KIE route ${mapping.capability.name} declares unsupported audio output`);
80
- }
81
- return mapping as GenerationWireMapping & { readonly result: "image" | "video" };
82
- });
83
-
84
- const generationRoutes: readonly KieRoute[] = kieGenerationMappings.map((mapping) => ({
85
- key: capabilityKey(mapping.capability),
86
- capability: mapping.capability,
87
- returns: mapping.result === "image" ? generationTypes.imageSet : generationTypes.videoSet,
88
- media: mapping.result,
89
- maxResults: mapping.result === "image" ? 16 : 8,
90
- supports: (need: EndpointRequest) => {
91
- const reason = kieGenerationRejection(mapping, need.constraints as unknown as GenerationRequest);
92
- return reason === undefined ? { status: "supported" } : { status: "unsupported", reason };
93
- },
94
- selectModel: (need) => selectWireModelForRequest(
95
- mapping,
96
- need.constraints as unknown as GenerationRequest,
97
- need.pendingInputs?.map((input) => input.input),
98
- ),
99
- compile: async (constraints, resolve) => {
100
- const request = constraints as unknown as GenerationRequest;
101
- const rejection = kieGenerationRejection(mapping, request);
102
- if (rejection !== undefined) throw new Error(rejection);
103
- return await compileWireRequest(mapping, request, resolve);
104
- },
105
- packageResult: (artifacts) => ({
106
- kind: "inline",
107
- value: canonicalize(mapping.result === "image"
108
- ? sealGeneratedImageSet({ images: artifacts })
109
- : sealGeneratedVideoSet({ videos: artifacts })),
110
- }),
111
- }));
112
-
113
- const backgroundRemovalRoute: KieRoute = {
114
- key: capabilityKey(backgroundRemovalCapabilities.remove),
115
- capability: backgroundRemovalCapabilities.remove,
116
- returns: artifactTypes.blob,
117
- media: "image",
118
- maxResults: 1,
119
- selectModel: () => "recraft/remove-background",
120
- compile: async (constraints, resolve) => {
121
- const request = constraints as unknown as BackgroundRemovalRequest;
122
- assertBackgroundRemovalRequest(request);
123
- return {
124
- model: "recraft/remove-background",
125
- input: canonicalize({ image: await resolve(request.source) }),
126
- };
127
- },
128
- packageResult: (artifacts) => {
129
- if (artifacts.length !== 1 || artifacts[0] === undefined) {
130
- throw new Error("KIE Background Removal requires exactly one image result");
131
- }
132
- return artifacts[0];
133
- },
134
- };
135
-
136
- export const kieRoutes: readonly KieRoute[] = [...generationRoutes, backgroundRemovalRoute];
137
- const routeByCapability = new Map(kieRoutes.map((route) => [route.key, route]));
138
-
139
- export function kieRouteForCapability(capability: CapabilityRef): KieRoute | undefined {
140
- return routeByCapability.get(capabilityKey(capability));
141
- }
142
-
143
- export function verifyKieRoutes(): void {
144
- verifyKieModelCatalog();
145
- if (routeByCapability.size !== kieRoutes.length) throw new Error("KIE routes repeat a capability");
146
- kieRoutes.forEach((route) => {
147
- if (route.key !== capabilityKey(route.capability)) throw new Error("KIE route key differs from its capability");
148
- if (!Number.isSafeInteger(route.maxResults) || route.maxResults <= 0) throw new Error("KIE route result limit is invalid");
149
- });
150
- }
@@ -1,32 +0,0 @@
1
- # `@hypit/provider-xiaomi-mimo`
2
-
3
- Immediate Runtime Endpoint for Xiaomi's official MiMo V2.5 Voice Design and Voice Clone APIs.
4
-
5
- This package owns the `chat/completions` wire shape, `api-key` credential, timeout, response bounds,
6
- voice-reference encoding and ResourceStore ingestion. It names `@hypit/mimo-speech@1` capabilities
7
- as versioned data and does not import the model package at runtime.
8
-
9
- Runtime Profile example:
10
-
11
- ```json
12
- {
13
- "endpoints": {
14
- "mimo.official": {
15
- "use": "@hypit/provider-xiaomi-mimo",
16
- "pool": "mimo.official",
17
- "config": {
18
- "apiKey": { "store": "os", "key": "xiaomi-mimo.api-key" },
19
- "defaultConcurrency": 2
20
- }
21
- }
22
- }
23
- }
24
- ```
25
-
26
- Voice Design sends the authored voice description. Voice Clone reads the selected audio Resource,
27
- checks Xiaomi's accepted MP3/WAV formats and sends it as the vendor's data-URL voice reference.
28
- The Provider always requests final WAV bytes.
29
-
30
- Selecting this Provider in the Runtime Profile is independent from author syntax. Its pool and
31
- capability claims participate in the shared Runtime capacity model; the package has no private
32
- scheduler.
@@ -1,57 +0,0 @@
1
- import {
2
- createRuntimeEndpointAdapterFacet,
3
- runtimeConfigCredentialRef,
4
- runtimeConfigExact,
5
- runtimeConfigObject,
6
- runtimeConfigPositiveInteger,
7
- runtimeConfigString,
8
- } from "@hypit/runtime-kit";
9
-
10
- import { createXiaomiMimoProvider } from "./provider.js";
11
-
12
- const adapter = createRuntimeEndpointAdapterFacet({
13
- use: "@hypit/provider-xiaomi-mimo",
14
- activate(context) {
15
- if (context.pool === undefined) throw new Error("Xiaomi MiMo Provider Pool is required");
16
- const config = runtimeConfigObject(context.config, "Xiaomi MiMo");
17
- runtimeConfigExact(config, [
18
- "apiBaseUrl", "apiKey", "defaultConcurrency", "requestTimeoutMs",
19
- "maxResponseBytes", "maxVoiceReferenceBase64Bytes",
20
- ], "Xiaomi MiMo");
21
- const apiBaseUrl = runtimeConfigString(config.apiBaseUrl, "Xiaomi MiMo apiBaseUrl");
22
- if (apiBaseUrl !== undefined) {
23
- const url = new URL(apiBaseUrl);
24
- if (url.protocol !== "https:" && url.hostname !== "localhost" && url.hostname !== "127.0.0.1") {
25
- throw new Error("Xiaomi MiMo apiBaseUrl must use HTTPS or loopback");
26
- }
27
- }
28
- const apiKey = runtimeConfigCredentialRef(config.apiKey, "Xiaomi MiMo apiKey");
29
- if (apiKey === undefined) throw new Error("Xiaomi MiMo apiKey CredentialRef is required");
30
- const defaultConcurrency = runtimeConfigPositiveInteger(config.defaultConcurrency, "Xiaomi MiMo defaultConcurrency");
31
- const requestTimeoutMs = runtimeConfigPositiveInteger(config.requestTimeoutMs, "Xiaomi MiMo requestTimeoutMs");
32
- const maxResponseBytes = runtimeConfigPositiveInteger(config.maxResponseBytes, "Xiaomi MiMo maxResponseBytes");
33
- const maxVoiceReferenceBase64Bytes = runtimeConfigPositiveInteger(
34
- config.maxVoiceReferenceBase64Bytes,
35
- "Xiaomi MiMo maxVoiceReferenceBase64Bytes",
36
- );
37
- return {
38
- endpoint: createXiaomiMimoProvider({
39
- instance: context.instance,
40
- pool: context.pool,
41
- ...(apiBaseUrl === undefined ? {} : { apiBaseUrl }),
42
- apiKey,
43
- ...(defaultConcurrency === undefined ? {} : { defaultConcurrency }),
44
- ...(requestTimeoutMs === undefined ? {} : { requestTimeoutMs }),
45
- ...(maxResponseBytes === undefined ? {} : { maxResponseBytes }),
46
- ...(maxVoiceReferenceBase64Bytes === undefined ? {} : { maxVoiceReferenceBase64Bytes }),
47
- }),
48
- };
49
- },
50
- });
51
-
52
- export const hypitPackage = {
53
- format: "hypit.node-package@1" as const,
54
- hostFacets: [adapter],
55
- };
56
-
57
- export default hypitPackage;
@@ -1,5 +0,0 @@
1
- export {
2
- createXiaomiMimoProvider,
3
- xiaomiMimoProviderModuleRef,
4
- } from "./provider.js";
5
- export type { CreateXiaomiMimoProviderOptions } from "./provider.js";
@@ -1,214 +0,0 @@
1
- import { defineEndpointPackage } from "@hypit/endpoint-kit";
2
- import type { EndpointInvocationContext } from "@hypit/endpoint-kit";
3
- import {
4
- generationTypes,
5
- sealGeneratedAudioSet,
6
- } from "@hypit/generation";
7
- import type { GenerationMediaValue, GenerationRequest } from "@hypit/generation";
8
- import type { CanonicalValue, CapabilityRef } from "@hypit/protocol";
9
- import { credentialRef } from "@hypit/runtime";
10
- import type { CredentialRef } from "@hypit/runtime";
11
-
12
- export const xiaomiMimoProviderModuleRef = { name: "@hypit/provider-xiaomi-mimo", version: "1" } as const;
13
- const mimoModelModule = { name: "@hypit/mimo-speech", version: "1" } as const;
14
- const modelNames = ["mimo-v2.5-tts-voicedesign", "mimo-v2.5-tts-voiceclone"] as const;
15
- type Model = typeof modelNames[number];
16
-
17
- const capabilities = Object.fromEntries(modelNames.map((name) => [name, {
18
- module: mimoModelModule,
19
- name,
20
- }])) as Readonly<Record<Model, CapabilityRef>>;
21
-
22
- type Fetch = typeof globalThis.fetch;
23
-
24
- export type CreateXiaomiMimoProviderOptions = {
25
- readonly instance?: string;
26
- readonly pool?: string;
27
- readonly apiBaseUrl?: string;
28
- readonly apiKey?: CredentialRef;
29
- readonly defaultConcurrency?: number;
30
- readonly requestTimeoutMs?: number;
31
- readonly maxResponseBytes?: number;
32
- readonly maxVoiceReferenceBase64Bytes?: number;
33
- readonly fetch?: Fetch;
34
- };
35
-
36
- function assert(condition: unknown, message: string): asserts condition {
37
- if (!condition) throw new Error(message);
38
- }
39
-
40
- function positiveInteger(value: number, subject: string): number {
41
- assert(Number.isSafeInteger(value) && value > 0, `${subject} must be a positive integer`);
42
- return value;
43
- }
44
-
45
- function normalizeBaseUrl(value: string): string {
46
- const url = new URL(value);
47
- assert(url.protocol === "https:" || url.hostname === "localhost" || url.hostname === "127.0.0.1",
48
- "Xiaomi MiMo apiBaseUrl must use HTTPS or loopback");
49
- return url.href.replace(/\/$/u, "");
50
- }
51
-
52
- function request(value: CanonicalValue, model: Model): GenerationRequest {
53
- const result = value as unknown as GenerationRequest;
54
- assert(result.ports !== null && typeof result.ports === "object", "Xiaomi MiMo request has no ports");
55
- const allowed = model === "mimo-v2.5-tts-voicedesign"
56
- ? new Set(["text", "voiceDescription"])
57
- : new Set(["text", "instruction", "voiceReference"]);
58
- assert(Object.keys(result.ports).every((name) => allowed.has(name)),
59
- `${model} request contains an unsupported port`);
60
- return result;
61
- }
62
-
63
- function scalar(req: GenerationRequest, model: Model, name: string, required = true): string | undefined {
64
- const values = req.ports[name];
65
- if (values === undefined) {
66
- if (required) throw new Error(`${model} requires ${name}`);
67
- return undefined;
68
- }
69
- assert(values.length === 1 && typeof values[0] === "string", `${model} ${name} must contain one string`);
70
- return values[0];
71
- }
72
-
73
- function credential(context: EndpointInvocationContext): string {
74
- const value = context.credentials.apiKey?.secret;
75
- assert(value !== undefined && value.length > 0, "Xiaomi MiMo API key is unavailable");
76
- return value;
77
- }
78
-
79
- async function readVoiceReference(
80
- context: EndpointInvocationContext,
81
- req: GenerationRequest,
82
- maxBase64Bytes: number,
83
- ): Promise<string> {
84
- const values = req.ports.voiceReference;
85
- assert(values?.length === 1, "MiMo Voice Clone requires exactly one voiceReference");
86
- const value = values[0] as GenerationMediaValue;
87
- assert(value.role === "audio", "MiMo Voice Clone voiceReference must be audio");
88
- const supported = new Set(["audio/mpeg", "audio/mp3", "audio/wav", "audio/x-wav"]);
89
- assert(supported.has(value.artifact.mediaType), "Xiaomi MiMo accepts only MP3 or WAV voice references");
90
- const encodedSize = 4 * Math.ceil(value.artifact.size / 3);
91
- assert(encodedSize <= maxBase64Bytes,
92
- `MiMo voice reference exceeds the configured ${maxBase64Bytes}-byte Base64 limit`);
93
- const bytes = await context.resources.get(value.artifact.resource);
94
- assert(bytes !== undefined, `MiMo voice reference ${value.artifact.resource} is unavailable`);
95
- assert(bytes.byteLength === value.artifact.size, "MiMo voice reference size differs from its BlobRef");
96
- const mediaType = value.artifact.mediaType === "audio/x-wav"
97
- ? "audio/wav"
98
- : value.artifact.mediaType === "audio/mp3" ? "audio/mpeg" : value.artifact.mediaType;
99
- const encoded = Buffer.from(bytes).toString("base64");
100
- assert(Buffer.byteLength(encoded, "utf8") <= maxBase64Bytes,
101
- `MiMo voice reference exceeds the configured ${maxBase64Bytes}-byte Base64 limit`);
102
- return `data:${mediaType};base64,${encoded}`;
103
- }
104
-
105
- function parseAudio(text: string, maxAudioBytes: number): Uint8Array {
106
- let raw: unknown;
107
- try {
108
- raw = JSON.parse(text);
109
- } catch {
110
- throw new Error("Xiaomi MiMo returned invalid JSON");
111
- }
112
- const root = raw as { choices?: Array<{ message?: { audio?: { data?: unknown } } }> };
113
- const data = root.choices?.[0]?.message?.audio?.data;
114
- assert(typeof data === "string" && data.length > 0, "Xiaomi MiMo returned no audio data");
115
- assert(data.length % 4 === 0 && /^[A-Za-z0-9+/]*={0,2}$/u.test(data),
116
- "Xiaomi MiMo returned malformed Base64 audio");
117
- const bytes = Uint8Array.from(Buffer.from(data, "base64"));
118
- assert(bytes.byteLength > 0, "Xiaomi MiMo returned empty audio");
119
- assert(bytes.byteLength <= maxAudioBytes, "Xiaomi MiMo audio exceeds the configured limit");
120
- return bytes;
121
- }
122
-
123
- async function limitedResponseText(response: Response, maxBytes: number): Promise<string> {
124
- const announced = response.headers.get("content-length");
125
- if (announced !== null) {
126
- const size = Number(announced);
127
- assert(Number.isSafeInteger(size) && size >= 0, "Xiaomi MiMo returned invalid Content-Length");
128
- assert(size <= maxBytes, "Xiaomi MiMo response exceeds the configured limit");
129
- }
130
- const reader = response.body?.getReader();
131
- if (reader === undefined) {
132
- const bytes = new Uint8Array(await response.arrayBuffer());
133
- assert(bytes.byteLength <= maxBytes, "Xiaomi MiMo response exceeds the configured limit");
134
- return Buffer.from(bytes).toString("utf8");
135
- }
136
- const chunks: Uint8Array[] = [];
137
- let size = 0;
138
- while (true) {
139
- const item = await reader.read();
140
- if (item.done) break;
141
- size += item.value.byteLength;
142
- if (size > maxBytes) {
143
- await reader.cancel();
144
- throw new Error("Xiaomi MiMo response exceeds the configured limit");
145
- }
146
- chunks.push(item.value);
147
- }
148
- const bytes = new Uint8Array(size);
149
- let offset = 0;
150
- chunks.forEach((chunk) => { bytes.set(chunk, offset); offset += chunk.byteLength; });
151
- return Buffer.from(bytes).toString("utf8");
152
- }
153
-
154
- export function createXiaomiMimoProvider(options: CreateXiaomiMimoProviderOptions) {
155
- const apiBaseUrl = normalizeBaseUrl(options.apiBaseUrl ?? "https://api.xiaomimimo.com/v1");
156
- const requestTimeoutMs = positiveInteger(options.requestTimeoutMs ?? 180_000, "requestTimeoutMs");
157
- const maxResponseBytes = positiveInteger(options.maxResponseBytes ?? 64 * 1024 * 1024, "maxResponseBytes");
158
- const maxVoiceReferenceBase64Bytes = positiveInteger(
159
- options.maxVoiceReferenceBase64Bytes ?? 10_000_000,
160
- "maxVoiceReferenceBase64Bytes",
161
- );
162
- const fetcher = options.fetch ?? globalThis.fetch;
163
- const endpointCapabilities = modelNames.map((model) => ({
164
- capability: capabilities[model],
165
- returns: generationTypes.audioSet,
166
- lifecycle: "immediate" as const,
167
- handler: async (context: EndpointInvocationContext) => {
168
- const req = request(context.need.constraints, model);
169
- const text = scalar(req, model, "text")!;
170
- const messages: Array<{ role: "user" | "assistant"; content: string }> = [];
171
- const audio: Record<string, CanonicalValue> = { format: "wav" };
172
- if (model === "mimo-v2.5-tts-voicedesign") {
173
- messages.push({ role: "user", content: scalar(req, model, "voiceDescription")! });
174
- } else {
175
- const instruction = scalar(req, model, "instruction", false);
176
- if (instruction !== undefined) messages.push({ role: "user", content: instruction });
177
- audio.voice = await readVoiceReference(context, req, maxVoiceReferenceBase64Bytes);
178
- }
179
- messages.push({ role: "assistant", content: text });
180
- const controller = new AbortController();
181
- const timer = setTimeout(() => controller.abort(new Error("Xiaomi MiMo request timed out")), requestTimeoutMs);
182
- let response: Response;
183
- let responseText: string;
184
- try {
185
- response = await fetcher(`${apiBaseUrl}/chat/completions`, {
186
- method: "POST",
187
- headers: { "content-type": "application/json", "api-key": credential(context) },
188
- body: JSON.stringify({ model, messages, audio }),
189
- signal: controller.signal,
190
- });
191
- responseText = await limitedResponseText(response, maxResponseBytes);
192
- } finally {
193
- clearTimeout(timer);
194
- }
195
- if (!response.ok) throw new Error(`Xiaomi MiMo returned HTTP ${response.status}: ${responseText.slice(0, 300)}`);
196
- const bytes = parseAudio(responseText, maxResponseBytes);
197
- const artifact = await context.resources.put(bytes, "audio/wav");
198
- const result = sealGeneratedAudioSet({ audios: [artifact] });
199
- return { value: { kind: "inline" as const, value: result as unknown as CanonicalValue } };
200
- },
201
- }));
202
-
203
- return defineEndpointPackage({
204
- module: xiaomiMimoProviderModuleRef,
205
- facet: "speech",
206
- instance: options.instance ?? "xiaomi-mimo.default",
207
- pool: options.pool ?? options.instance ?? "xiaomi-mimo.default",
208
- pricing: { kind: "page", url: "https://mimo.mi.com/docs/en-US/pricing" },
209
- credentials: { apiKey: options.apiKey ?? credentialRef("env", "MIMO_API_KEY") },
210
- credentialInputs: { apiKey: { label: "Xiaomi MiMo API key" } },
211
- defaultConcurrency: options.defaultConcurrency ?? 2,
212
- capabilities: endpointCapabilities,
213
- });
214
- }
@@ -1,6 +0,0 @@
1
- export type RuntimeEnvironmentStore = {
2
- /** Select this literal normalized configuration, changing it only when no Runtime work is active. */
3
- use(config: string): Promise<void>;
4
- /** Refuse work when this Runtime instance was assembled from a different active configuration. */
5
- assert(config: string): Promise<void>;
6
- };
@@ -1,21 +0,0 @@
1
- # @hypit/semantic-track
2
-
3
- `SemanticTrack` is the single global semantic-timeline fact. It is the continuous program skeleton:
4
- every item is a real segment-local `SemanticTake`, and global frame positions are the prefix sum of
5
- their normalized local frame counts. There are no gap items or empty items. A Take may carry only
6
- audio or only visual media; its word array may be empty. An empty Script Segment such as
7
- `<empty></empty>` can therefore retain a real media span and both Segment anchors without speech.
8
- An empty word array is not an empty Track item. Visual placement is deliberately not
9
- part of this semantic truth.
10
-
11
- The package exposes pure projections to `ProgramSpace` and `AudioTrack`, plus the
12
- selection/segment/moment lookup functions used by semantic components. It performs no media I/O,
13
- mixing, transcription or rendering.
14
-
15
- ## Prepared material in a semantic window
16
-
17
- `projectSemanticMedia(track, window?)` returns each intersecting Take's `media`, `segmentId`, global
18
- `span` and local `source` frame span. The default window is the whole performance. An interval
19
- beginning inside a Take preserves its source offset. Audio-only Takes remain represented so the
20
- consumer can choose the streams it displays. This projection makes no layout or layering decisions;
21
- Media and custom visual components can consume the same prepared performance.
@@ -1,8 +0,0 @@
1
- import { semanticTrackComponent, semanticTrackManifest } from "./index.js";
2
-
3
- export const hypitPackage = {
4
- format: "hypit.node-package@1" as const,
5
- modules: [{ manifest: semanticTrackManifest }],
6
- components: [semanticTrackComponent],
7
- };
8
- export default hypitPackage;
@@ -1,24 +0,0 @@
1
- import type { ComponentPackage } from "@hypit/component-kit";
2
- import type { StoredValue } from "@hypit/protocol";
3
- import { canonicalize } from "@hypit/protocol";
4
-
5
- import { semanticTrackProducers, semanticTrackTypes } from "./manifest.js";
6
- import { assertSemanticTrackIdentity } from "./identity.js";
7
- import { projectSemanticAudioTrack, projectSemanticProgramSpace } from "./projection.js";
8
- import type { SemanticTrack } from "./types.js";
9
-
10
- function track(value: StoredValue | undefined): SemanticTrack {
11
- if (value?.kind !== "inline") throw new Error("SemanticTrack must be inline.");
12
- return value.value as unknown as SemanticTrack;
13
- }
14
-
15
- export const semanticTrackComponent = {
16
- producers: [
17
- { producer: semanticTrackProducers.projectProgramSpace, handler: ({ inputs }) => ({ outputs: { space: { kind: "inline", value: canonicalize(projectSemanticProgramSpace(track(inputs.track?.value))) } }, needs: {} }) },
18
- { producer: semanticTrackProducers.projectAudio, handler: ({ inputs }) => ({ outputs: { audio: { kind: "inline", value: canonicalize(projectSemanticAudioTrack(track(inputs.track?.value))) } }, needs: {} }) },
19
- ],
20
- validators: [{
21
- type: semanticTrackTypes.track,
22
- handler: ({ value }) => assertSemanticTrackIdentity(track(value)),
23
- }],
24
- } satisfies ComponentPackage;
@@ -1,58 +0,0 @@
1
- import { assertSemanticTakeIdentity } from "@hypit/speech";
2
-
3
- import type { SemanticTrack, SemanticTrackSpan } from "./types.js";
4
-
5
- export function sealSemanticTrack(value: SemanticTrack): SemanticTrack {
6
- const track = structuredClone(value);
7
- assertSemanticTrackIdentity(track);
8
- return track;
9
- }
10
-
11
- export function assertSemanticTrackIdentity(track: SemanticTrack): void {
12
- if (!track.id.trim() || !track.narrativeId.trim() || track.items.length === 0) {
13
- throw new Error("SemanticTrack must have identities and contain at least one item.");
14
- }
15
- const segmentIds = new Set<string>();
16
- const tokenIds = new Set<string>();
17
- const anchorIds = new Set<string>();
18
- let frameRate: SemanticTrack["items"][number]["take"]["media"]["timeline"]["frameRate"] | undefined;
19
- for (const item of track.items) {
20
- assertSemanticTakeIdentity(item.take);
21
- if (item.take.narrativeId !== track.narrativeId) {
22
- throw new Error(`SemanticTrack ${track.id} mixes Narrative ${item.take.narrativeId} into ${track.narrativeId}.`);
23
- }
24
- const rate = item.take.media.timeline.frameRate;
25
- if (frameRate === undefined) frameRate = rate;
26
- else if (frameRate.numerator !== rate.numerator || frameRate.denominator !== rate.denominator) {
27
- throw new Error("SemanticTrack items must use one frame rate.");
28
- }
29
- const segmentId = item.take.segment.segmentId;
30
- if (segmentIds.has(segmentId)) throw new Error(`SemanticTrack repeats Segment ${segmentId}.`);
31
- segmentIds.add(segmentId);
32
- for (const token of item.take.tokens) {
33
- if (tokenIds.has(token.tokenId)) throw new Error(`SemanticTrack repeats Token ${token.tokenId}.`);
34
- tokenIds.add(token.tokenId);
35
- }
36
- for (const anchor of item.take.anchors) {
37
- if (anchor.identity === "program:start" || anchor.identity === "program:end") {
38
- throw new Error(`SemanticTake cannot declare reserved Program Anchor ${anchor.identity}.`);
39
- }
40
- if (anchorIds.has(anchor.identity)) throw new Error(`SemanticTrack repeats Anchor ${anchor.identity}.`);
41
- anchorIds.add(anchor.identity);
42
- }
43
- }
44
- }
45
-
46
- export function semanticTrackSpans(track: SemanticTrack): readonly SemanticTrackSpan[] {
47
- assertSemanticTrackIdentity(track);
48
- let frame = 0;
49
- return track.items.map((item) => {
50
- const startFrame = frame;
51
- frame += item.take.media.timeline.frameCount;
52
- return { item, startFrame, endFrameExclusive: frame };
53
- });
54
- }
55
-
56
- export function semanticTrackFrameCount(track: SemanticTrack): number {
57
- return semanticTrackSpans(track).at(-1)!.endFrameExclusive;
58
- }
@@ -1,6 +0,0 @@
1
- export { semanticTrackComponent } from "./component.js";
2
- export { assertSemanticTrackIdentity, sealSemanticTrack, semanticTrackFrameCount, semanticTrackSpans } from "./identity.js";
3
- export { assertNarrativeMomentIdentity, assertNarrativeSelectionIdentity, momentFrame, segmentFrameSpan, selectionFrameSpan, semanticAnchorFrames, tokenFrameSpan } from "./location.js";
4
- export { semanticTrackDependency, semanticTrackManifest, semanticTrackModuleRef, semanticTrackProducers, semanticTrackSchema, semanticTrackTypes } from "./manifest.js";
5
- export { projectSemanticAudioTrack, projectSemanticProgramSpace, projectSemanticMedia } from "./projection.js";
6
- export type * from "./types.js";
@@ -1,38 +0,0 @@
1
- import { compositionDependency, compositionTypes } from "@hypit/composition";
2
- import { narrativeDependency } from "@hypit/narrative";
3
- import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
4
- import type { ModuleManifest, ProducerRef, TypeRef, ValueSchema } from "@hypit/protocol";
5
- import { semanticTakeSchema, speechDependency } from "@hypit/speech";
6
-
7
- export const semanticTrackModuleRef = { name: "@hypit/semantic-track", version: "1" } as const;
8
- export const semanticTrackTypes = {
9
- track: { module: semanticTrackModuleRef, name: "SemanticTrack" },
10
- } satisfies Record<string, TypeRef>;
11
- export const semanticTrackProducers = {
12
- projectProgramSpace: { module: semanticTrackModuleRef, name: "project-program-space" },
13
- projectAudio: { module: semanticTrackModuleRef, name: "project-audio-track" },
14
- } satisfies Record<string, ProducerRef>;
15
-
16
- const string = { kind: "string", minLength: 1 } as const;
17
- const object = (fields: Readonly<Record<string, { readonly schema: ValueSchema; readonly optional?: boolean }>>): ValueSchema => ({ kind: "object", fields });
18
- export const semanticTrackSchema: ValueSchema = object({
19
- id: { schema: string },
20
- narrativeId: { schema: string },
21
- items: { schema: { kind: "array", minItems: 1, items: object({
22
- take: { schema: semanticTakeSchema },
23
- }) } },
24
- });
25
-
26
- export const semanticTrackManifest: ModuleManifest = {
27
- format: "hypit.module@1",
28
- name: semanticTrackModuleRef.name,
29
- version: semanticTrackModuleRef.version,
30
- dependencies: [speechDependency, narrativeDependency, programSpaceDependency, compositionDependency],
31
- types: [{ name: semanticTrackTypes.track.name }],
32
- capabilities: [],
33
- producers: [
34
- { name: semanticTrackProducers.projectProgramSpace.name, inputs: [{ name: "track", type: semanticTrackTypes.track }], outputs: [{ name: "space", type: programSpaceTypes.programSpace }], needs: [] },
35
- { name: semanticTrackProducers.projectAudio.name, inputs: [{ name: "track", type: semanticTrackTypes.track }], outputs: [{ name: "audio", type: compositionTypes.audioTrack }], needs: [] },
36
- ],
37
- };
38
- export const semanticTrackDependency = { module: semanticTrackModuleRef } as const;
@@ -1,26 +0,0 @@
1
- import type { SemanticTake } from "@hypit/speech";
2
-
3
- export type SemanticTrackItem = {
4
- readonly take: SemanticTake;
5
- };
6
-
7
- /**
8
- * The continuous program skeleton. Every item is a real SemanticTake and the
9
- * global frame domain is exactly their prefix sum: no gap or empty item exists.
10
- */
11
- export type SemanticTrack = {
12
- readonly id: string;
13
- readonly narrativeId: string;
14
- readonly items: readonly SemanticTrackItem[];
15
- };
16
-
17
- export type SemanticTrackSpan = {
18
- readonly item: SemanticTrackItem;
19
- readonly startFrame: number;
20
- readonly endFrameExclusive: number;
21
- };
22
-
23
- export type LocatedFrameSpan = {
24
- readonly startFrame: number;
25
- readonly endFrameExclusive: number;
26
- };