@hypit/hypit 0.1.4 → 0.1.6

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 (462) 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 +8 -1
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/hypit.runtime.json +1 -1
  32. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  33. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  34. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  35. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  36. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  39. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  40. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  41. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  42. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  43. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  44. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  45. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  47. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  48. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  49. package/package.json +35 -15
  50. package/packages/audio-track/README.md +20 -13
  51. package/packages/audio-track/package.json +1 -1
  52. package/packages/audio-track/src/component.ts +4 -4
  53. package/packages/audio-track/src/fragment.ts +6 -5
  54. package/packages/audio-track/src/index.ts +1 -1
  55. package/packages/audio-track/src/manifest.ts +17 -16
  56. package/packages/audio-track/src/program.ts +21 -25
  57. package/packages/audio-track/src/surface.ts +19 -18
  58. package/packages/audio-track-studio/README.md +23 -0
  59. package/packages/audio-track-studio/src/index.ts +28 -17
  60. package/packages/author-kit/README.md +1 -1
  61. package/packages/background-removal/README.md +4 -7
  62. package/packages/browser-capture/package.json +1 -1
  63. package/packages/build-result/README.md +11 -0
  64. package/packages/build-result/src/decode.ts +2 -0
  65. package/packages/build-result/src/execution-log.ts +17 -0
  66. package/packages/build-result/src/index.ts +1 -0
  67. package/packages/build-result/src/store.ts +14 -1
  68. package/packages/build-result/src/types.ts +3 -0
  69. package/packages/build-result-s3/src/repository.ts +4 -0
  70. package/packages/caption/README.md +61 -73
  71. package/packages/caption/package.json +3 -2
  72. package/packages/caption/src/activation.ts +2 -2
  73. package/packages/caption/src/component.ts +20 -5
  74. package/packages/caption/src/display.ts +3 -18
  75. package/packages/caption/src/fragment.ts +3 -7
  76. package/packages/caption/src/index.ts +6 -5
  77. package/packages/caption/src/manifest.ts +29 -46
  78. package/packages/caption/src/style.ts +24 -135
  79. package/packages/caption/src/surface.ts +12 -92
  80. package/packages/caption/src/temporalize.ts +18 -53
  81. package/packages/caption/src/types.ts +8 -35
  82. package/packages/caption/src/visibility.ts +23 -0
  83. package/packages/caption-fine/README.md +21 -9
  84. package/packages/caption-fine/package.json +4 -2
  85. package/packages/caption-fine/src/component.ts +3 -3
  86. package/packages/caption-fine/src/fragment.ts +7 -19
  87. package/packages/caption-fine/src/index.ts +2 -0
  88. package/packages/caption-fine/src/manifest.ts +26 -17
  89. package/packages/caption-fine/src/recipe.ts +7 -0
  90. package/packages/caption-fine/src/render.ts +14 -13
  91. package/packages/caption-fine/src/schedule.ts +39 -35
  92. package/packages/caption-fine/src/style.ts +10 -9
  93. package/packages/caption-fine/src/surface.ts +62 -35
  94. package/packages/caption-fine/src/types.ts +2 -0
  95. package/packages/caption-fine-studio/README.md +24 -2
  96. package/packages/caption-fine-studio/package.json +3 -1
  97. package/packages/caption-fine-studio/src/activation.ts +3 -3
  98. package/packages/caption-fine-studio/src/index.ts +54 -42
  99. package/packages/cli/README.md +57 -4
  100. package/packages/cli/package.json +1 -0
  101. package/packages/cli/src/arguments.ts +25 -6
  102. package/packages/cli/src/build-planning.ts +3 -2
  103. package/packages/cli/src/command.ts +6 -0
  104. package/packages/cli/src/commands/environment.ts +28 -18
  105. package/packages/cli/src/commands/execution.ts +81 -26
  106. package/packages/cli/src/commands/results.ts +7 -11
  107. package/packages/cli/src/index.ts +2 -2
  108. package/packages/cli/src/machine-view.ts +3 -2
  109. package/packages/cli/src/main.ts +34 -42
  110. package/packages/cli/src/observation.ts +7 -1
  111. package/packages/cli/src/output.ts +65 -23
  112. package/packages/cli/src/view.ts +66 -19
  113. package/packages/comment-sticker/README.md +3 -3
  114. package/packages/comment-sticker/package.json +1 -1
  115. package/packages/comment-sticker/src/component.ts +4 -4
  116. package/packages/comment-sticker/src/fragment.ts +5 -4
  117. package/packages/comment-sticker/src/manifest.ts +7 -6
  118. package/packages/comment-sticker/src/program.ts +9 -9
  119. package/packages/comment-sticker/src/surface.ts +6 -7
  120. package/packages/composition/README.md +21 -0
  121. package/packages/composition/src/audio-presentation.ts +44 -0
  122. package/packages/composition/src/index.ts +3 -0
  123. package/packages/composition/src/schema.ts +8 -3
  124. package/packages/composition/src/track.ts +15 -1
  125. package/packages/credential-store-env/README.md +1 -1
  126. package/packages/deck-track/README.md +3 -3
  127. package/packages/deck-track/package.json +1 -1
  128. package/packages/deck-track/src/component.ts +5 -5
  129. package/packages/deck-track/src/fragment.ts +6 -5
  130. package/packages/deck-track/src/lower.ts +12 -12
  131. package/packages/deck-track/src/manifest.ts +8 -7
  132. package/packages/deck-track/src/program.ts +13 -16
  133. package/packages/deck-track/src/surface.ts +9 -10
  134. package/packages/driver-node/src/driver.ts +41 -3
  135. package/packages/elevenlabs-speech/README.md +27 -0
  136. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  137. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  138. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  139. package/packages/elevenlabs-speech/src/index.ts +111 -0
  140. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  141. package/packages/endpoint-kit/README.md +24 -0
  142. package/packages/endpoint-kit/src/index.ts +7 -1
  143. package/packages/film/README.md +12 -7
  144. package/packages/film/package.json +1 -1
  145. package/packages/film/src/component.ts +4 -4
  146. package/packages/film/src/fragment.ts +6 -5
  147. package/packages/film/src/manifest.ts +11 -10
  148. package/packages/film/src/program.ts +5 -5
  149. package/packages/film/src/recipe.ts +2 -1
  150. package/packages/film/src/surface.ts +10 -7
  151. package/packages/film-studio/package.json +1 -1
  152. package/packages/film-studio/src/index.ts +2 -2
  153. package/packages/fishaudio-speech/README.md +33 -0
  154. package/packages/fishaudio-speech/package.json +21 -0
  155. package/packages/fishaudio-speech/src/activation.ts +32 -0
  156. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  157. package/packages/fishaudio-speech/src/index.ts +156 -0
  158. package/packages/fishaudio-speech/src/surface.ts +192 -0
  159. package/packages/generation/README.md +11 -1
  160. package/packages/generation/src/mapping.ts +28 -30
  161. package/packages/gpt-image/README.md +1 -2
  162. package/packages/grok-imagine/README.md +1 -2
  163. package/packages/hyperframes/README.md +7 -3
  164. package/packages/hyperframes/src/browser-program.ts +11 -2
  165. package/packages/hyperframes/src/document.ts +15 -2
  166. package/packages/interview-emoji-reveal/README.md +4 -4
  167. package/packages/interview-emoji-reveal/package.json +1 -1
  168. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  169. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  170. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  171. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  172. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  173. package/packages/media-execution/README.md +7 -3
  174. package/packages/media-execution/src/audio-presentation.ts +23 -0
  175. package/packages/media-execution/src/execute.ts +2 -0
  176. package/packages/media-pipeline/README.md +7 -3
  177. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  178. package/packages/media-pipeline/src/component.ts +16 -2
  179. package/packages/media-pipeline/src/manifest.ts +3 -1
  180. package/packages/media-pipeline/src/types.ts +2 -1
  181. package/packages/media-track/README.md +14 -47
  182. package/packages/media-track/package.json +1 -1
  183. package/packages/media-track/preview/preview.svml +5 -5
  184. package/packages/media-track/src/author.ts +12 -6
  185. package/packages/media-track/src/component.ts +10 -16
  186. package/packages/media-track/src/fragment.ts +8 -7
  187. package/packages/media-track/src/index.ts +3 -1
  188. package/packages/media-track/src/lower.ts +7 -7
  189. package/packages/media-track/src/manifest.ts +16 -38
  190. package/packages/media-track/src/program.ts +62 -67
  191. package/packages/media-track/src/sampling.ts +6 -6
  192. package/packages/media-track/src/sequence.ts +8 -8
  193. package/packages/media-track/src/surface.ts +25 -43
  194. package/packages/media-track-studio/README.md +9 -0
  195. package/packages/media-track-studio/src/index.ts +16 -11
  196. package/packages/mimo-speech/README.md +1 -1
  197. package/packages/minimax-h3/README.md +1 -1
  198. package/packages/nano-banana/README.md +1 -1
  199. package/packages/narrative/README.md +23 -1
  200. package/packages/narrative/src/identity.ts +11 -0
  201. package/packages/narrative/src/index.ts +3 -0
  202. package/packages/narrative/src/schema.ts +28 -27
  203. package/packages/narrative/src/selection.ts +52 -0
  204. package/packages/narrative/src/types.ts +2 -0
  205. package/packages/package-loader-node/README.md +30 -0
  206. package/packages/package-loader-node/package.json +5 -2
  207. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  208. package/packages/package-loader-node/src/index.ts +1 -0
  209. package/packages/package-loader-node/src/loader.ts +12 -15
  210. package/packages/package-loader-node/src/location.ts +27 -1
  211. package/packages/package-loader-node/src/module-scope.ts +183 -0
  212. package/packages/package-loader-node/src/types.ts +4 -0
  213. package/packages/performance/README.md +83 -0
  214. package/packages/performance/package.json +30 -0
  215. package/packages/performance/src/activation.ts +11 -0
  216. package/packages/performance/src/component.ts +46 -0
  217. package/packages/performance/src/index.ts +6 -0
  218. package/packages/performance/src/manifest.ts +53 -0
  219. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  220. package/packages/performance/src/program.ts +51 -0
  221. package/packages/performance/src/style.ts +35 -0
  222. package/packages/performance/src/surface.ts +99 -0
  223. package/packages/performance-studio/README.md +25 -0
  224. package/packages/performance-studio/package.json +21 -0
  225. package/packages/performance-studio/src/activation.ts +6 -0
  226. package/packages/performance-studio/src/index.ts +84 -0
  227. package/packages/program-space/README.md +9 -18
  228. package/packages/program-space/src/activation.ts +1 -5
  229. package/packages/program-space/src/index.ts +2 -11
  230. package/packages/program-space/src/surface.ts +1 -20
  231. package/packages/project-context-node/README.md +20 -0
  232. package/packages/project-context-node/package.json +10 -0
  233. package/packages/project-context-node/src/index.ts +3 -0
  234. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  235. package/packages/provider-hyperframes-local/README.md +43 -15
  236. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  237. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  238. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  239. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  240. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  241. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  242. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  243. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  244. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  245. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  246. package/packages/provider-hypihub/README.md +48 -17
  247. package/packages/provider-hypihub/package.json +2 -0
  248. package/packages/provider-hypihub/src/mapping.ts +31 -7
  249. package/packages/provider-hypihub/src/oauth.ts +6 -0
  250. package/packages/provider-hypihub/src/provider.ts +25 -13
  251. package/packages/provider-hypihub/src/routes.ts +1 -2
  252. package/packages/provider-hypihub/src/upload.ts +2 -0
  253. package/packages/provider-media-local/README.md +3 -4
  254. package/packages/provider-whisperx-local/src/program.ts +1 -0
  255. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  256. package/packages/ranking/README.md +8 -6
  257. package/packages/ranking/package.json +1 -1
  258. package/packages/ranking/src/component.ts +6 -6
  259. package/packages/ranking/src/fragment.ts +11 -7
  260. package/packages/ranking/src/manifest.ts +21 -14
  261. package/packages/ranking/src/render.ts +22 -26
  262. package/packages/ranking/src/schedule.ts +16 -19
  263. package/packages/ranking/src/surface.ts +12 -13
  264. package/packages/ranking-studio/README.md +18 -0
  265. package/packages/ranking-studio/src/index.ts +61 -9
  266. package/packages/render-hyperframes/README.md +7 -7
  267. package/packages/render-hyperframes/package.json +1 -1
  268. package/packages/render-hyperframes/src/component.ts +11 -1
  269. package/packages/render-hyperframes/src/fragment.ts +7 -4
  270. package/packages/render-hyperframes/src/manifest.ts +4 -4
  271. package/packages/render-hyperframes/src/surface.ts +6 -6
  272. package/packages/runtime/README.md +8 -1
  273. package/packages/runtime/src/execution.ts +15 -4
  274. package/packages/runtime/src/index.ts +2 -1
  275. package/packages/runtime/src/log.ts +51 -0
  276. package/packages/runtime/src/types.ts +5 -8
  277. package/packages/runtime-host-node/README.md +30 -0
  278. package/packages/runtime-host-node/package.json +1 -0
  279. package/packages/runtime-host-node/src/index.ts +24 -9
  280. package/packages/runtime-host-node/src/packages.ts +47 -50
  281. package/packages/runtime-kit/README.md +5 -0
  282. package/packages/runtime-kit/src/index.ts +3 -1
  283. package/packages/runtime-local/README.md +109 -4
  284. package/packages/runtime-local/src/config.ts +202 -56
  285. package/packages/runtime-local/src/control.ts +9 -1
  286. package/packages/runtime-local/src/executor.ts +66 -0
  287. package/packages/runtime-local/src/host.ts +37 -17
  288. package/packages/runtime-local/src/log.ts +48 -0
  289. package/packages/runtime-local/src/programs.ts +2 -1
  290. package/packages/runtime-local/src/result-writer.ts +2 -0
  291. package/packages/runtime-local/src/runtime.ts +8 -6
  292. package/packages/runtime-local/src/supervisor.ts +142 -0
  293. package/packages/runtime-local/src/types.ts +9 -2
  294. package/packages/runtime-local/src/worker-process.ts +7 -24
  295. package/packages/runtime-local/src/worker.ts +55 -83
  296. package/packages/screen-overlay/README.md +3 -3
  297. package/packages/screen-overlay/package.json +1 -1
  298. package/packages/screen-overlay/src/component.ts +3 -3
  299. package/packages/screen-overlay/src/fragment.ts +5 -4
  300. package/packages/screen-overlay/src/manifest.ts +7 -6
  301. package/packages/screen-overlay/src/program.ts +9 -9
  302. package/packages/screen-overlay/src/surface.ts +6 -7
  303. package/packages/script/README.md +30 -5
  304. package/packages/script/src/manifest.ts +4 -3
  305. package/packages/script/src/narrative.ts +1 -0
  306. package/packages/script/src/parser.ts +45 -6
  307. package/packages/script/src/surface.ts +4 -3
  308. package/packages/script/src/types.ts +1 -1
  309. package/packages/script-studio/package.json +9 -3
  310. package/packages/script-studio/src/index.ts +2 -0
  311. package/packages/script-studio/src/projection.ts +105 -0
  312. package/packages/seedance/README.md +30 -1
  313. package/packages/seedance/src/index.ts +18 -7
  314. package/packages/seedance/src/surface.ts +17 -4
  315. package/packages/seedance-kits/README.md +7 -1
  316. package/packages/seedream/README.md +1 -1
  317. package/packages/sound/README.md +81 -0
  318. package/packages/sound/package.json +25 -0
  319. package/packages/sound/src/activation.ts +11 -0
  320. package/packages/sound/src/component.ts +28 -0
  321. package/packages/sound/src/index.ts +5 -0
  322. package/packages/sound/src/manifest.ts +47 -0
  323. package/packages/sound/src/program.ts +84 -0
  324. package/packages/sound/src/style.ts +34 -0
  325. package/packages/sound/src/surface.ts +90 -0
  326. package/packages/sound-studio/README.md +22 -0
  327. package/packages/sound-studio/package.json +20 -0
  328. package/packages/sound-studio/src/activation.ts +6 -0
  329. package/packages/sound-studio/src/index.ts +74 -0
  330. package/packages/speech/README.md +2 -2
  331. package/packages/speech-alignment/src/local.ts +8 -0
  332. package/packages/speech-alignment/src/locate.ts +1 -1
  333. package/packages/store-sqlite/README.md +7 -0
  334. package/packages/store-sqlite/src/store.ts +84 -83
  335. package/packages/studio/INSPECTOR.md +15 -2
  336. package/packages/studio/LOCALIZATION.md +98 -0
  337. package/packages/studio/README.md +101 -14
  338. package/packages/studio/locales/en.json +197 -0
  339. package/packages/studio/locales/zh-CN.json +191 -0
  340. package/packages/studio/package.json +8 -7
  341. package/packages/studio/src/companion-assembly.ts +1 -0
  342. package/packages/studio/src/domain.ts +1 -1
  343. package/packages/studio/src/fallback-companions.ts +3 -3
  344. package/packages/studio/src/feedback-server.ts +51 -0
  345. package/packages/studio/src/feedback-store.ts +66 -0
  346. package/packages/studio/src/feedback.ts +60 -0
  347. package/packages/studio/src/localization-node.ts +46 -0
  348. package/packages/studio/src/localization.ts +85 -0
  349. package/packages/studio/src/parameter-values.ts +43 -1
  350. package/packages/studio/src/parameters.ts +114 -24
  351. package/packages/studio/src/preview/render.ts +5 -1
  352. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  353. package/packages/studio/src/programme.ts +14 -30
  354. package/packages/studio/src/server.ts +10 -6
  355. package/packages/studio/src/shared.ts +4 -2
  356. package/packages/studio/src/snapshot.ts +21 -132
  357. package/packages/studio/src/studio-preflight.ts +3 -3
  358. package/packages/studio/src/studio-registry.ts +50 -6
  359. package/packages/studio/src/style.css +223 -50
  360. package/packages/studio/src/ui/artifact-name.ts +8 -6
  361. package/packages/studio/src/ui/artifact-preview.ts +5 -4
  362. package/packages/studio/src/ui/code.ts +17 -16
  363. package/packages/studio/src/ui/comments.ts +234 -0
  364. package/packages/studio/src/ui/dropdown.ts +68 -0
  365. package/packages/studio/src/ui/i18n.ts +109 -0
  366. package/packages/studio/src/ui/icons.ts +6 -0
  367. package/packages/studio/src/ui/library.ts +76 -65
  368. package/packages/studio/src/ui/main.ts +223 -211
  369. package/packages/studio/src/ui/overlay.ts +12 -8
  370. package/packages/studio/src/ui/scrub-preview.ts +110 -0
  371. package/packages/studio/src/ui/stage.ts +93 -29
  372. package/packages/studio/src/ui/timeline.ts +190 -118
  373. package/packages/studio/start.ts +41 -22
  374. package/packages/studio-adapter/README.md +130 -11
  375. package/packages/studio-adapter/src/index.ts +100 -13
  376. package/packages/temporal/README.md +6 -6
  377. package/packages/temporal/package.json +1 -1
  378. package/packages/temporal/src/component.ts +5 -6
  379. package/packages/temporal/src/index.ts +8 -6
  380. package/packages/temporal/src/location.ts +11 -11
  381. package/packages/temporal/src/projection.ts +19 -19
  382. package/packages/temporal/src/rational.ts +4 -4
  383. package/packages/temporal-markup/EDITING.md +2 -2
  384. package/packages/temporal-markup/README.md +27 -11
  385. package/packages/temporal-markup/package.json +1 -1
  386. package/packages/temporal-markup/src/index.ts +20 -25
  387. package/packages/temporal-markup/src/space.ts +10 -41
  388. package/packages/timeline/README.md +31 -0
  389. package/packages/{semantic-track → timeline}/package.json +1 -1
  390. package/packages/timeline/src/activation.ts +8 -0
  391. package/packages/timeline/src/component.ts +24 -0
  392. package/packages/timeline/src/identity.ts +60 -0
  393. package/packages/timeline/src/index.ts +6 -0
  394. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  395. package/packages/timeline/src/manifest.ts +39 -0
  396. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  397. package/packages/timeline/src/types.ts +24 -0
  398. package/packages/timeline-author/README.md +68 -0
  399. package/packages/{speech-track → timeline-author}/package.json +6 -4
  400. package/packages/timeline-author/src/activation.ts +22 -0
  401. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  402. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  403. package/packages/timeline-author/src/index.ts +7 -0
  404. package/packages/timeline-author/src/manifest.ts +78 -0
  405. package/packages/timeline-author/src/program.ts +107 -0
  406. package/packages/timeline-author/src/surface.ts +46 -0
  407. package/packages/timeline-author/src/types.ts +6 -0
  408. package/packages/typography-track/README.md +4 -4
  409. package/packages/typography-track/package.json +1 -1
  410. package/packages/typography-track/src/component.ts +4 -4
  411. package/packages/typography-track/src/fragment.ts +4 -3
  412. package/packages/typography-track/src/manifest.ts +11 -9
  413. package/packages/typography-track/src/program.ts +15 -15
  414. package/packages/typography-track/src/surface.ts +17 -18
  415. package/packages/video-cli/README.md +4 -1
  416. package/packages/video-cli/package.json +2 -1
  417. package/packages/video-cli/src/creation.ts +14 -4
  418. package/packages/video-cli/src/index.ts +1 -1
  419. package/packages/video-cli/src/studio-distribution.ts +2 -1
  420. package/packages/volcengine-matting/README.md +3 -3
  421. package/packages/whisperx/README.md +1 -1
  422. package/services/whisperx/README.md +14 -0
  423. package/services/whisperx/pyproject.toml +2 -0
  424. package/services/whisperx/uv.lock +20 -20
  425. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  426. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  427. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  428. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  429. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  430. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  431. package/packages/provider-kie/README.md +0 -134
  432. package/packages/provider-kie/package.json +0 -43
  433. package/packages/provider-kie/src/activation.ts +0 -71
  434. package/packages/provider-kie/src/index.ts +0 -10
  435. package/packages/provider-kie/src/mapping.ts +0 -182
  436. package/packages/provider-kie/src/provider.ts +0 -657
  437. package/packages/provider-kie/src/routes.ts +0 -150
  438. package/packages/provider-xiaomi-mimo/README.md +0 -32
  439. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  440. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  441. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  442. package/packages/runtime/src/environment.ts +0 -6
  443. package/packages/semantic-track/README.md +0 -21
  444. package/packages/semantic-track/src/activation.ts +0 -8
  445. package/packages/semantic-track/src/component.ts +0 -24
  446. package/packages/semantic-track/src/identity.ts +0 -58
  447. package/packages/semantic-track/src/index.ts +0 -6
  448. package/packages/semantic-track/src/manifest.ts +0 -38
  449. package/packages/semantic-track/src/types.ts +0 -26
  450. package/packages/speech-track/README.md +0 -51
  451. package/packages/speech-track/src/activation.ts +0 -19
  452. package/packages/speech-track/src/index.ts +0 -7
  453. package/packages/speech-track/src/manifest.ts +0 -73
  454. package/packages/speech-track/src/program.ts +0 -64
  455. package/packages/speech-track/src/surface.ts +0 -35
  456. package/packages/speech-track/src/types.ts +0 -6
  457. package/packages/speech-track-studio/README.md +0 -3
  458. package/packages/speech-track-studio/package.json +0 -14
  459. package/packages/speech-track-studio/src/activation.ts +0 -7
  460. package/packages/speech-track-studio/src/index.ts +0 -40
  461. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  462. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -337,6 +337,22 @@ export class NodeDriver {
337
337
  operation: OperationSnapshot,
338
338
  registration: EndpointRegistration,
339
339
  runtimeContext: RuntimeExecutionContext,
340
+ ): Promise<OperationSnapshot> {
341
+ const result = await this.#advanceOperationStep(operation, registration, runtimeContext);
342
+ if (result.status === "failed" && operation.status !== "failed") {
343
+ await runtimeContext.recordExecution?.({ endpoint: operation.endpoint, kind: "failed", message: result.failure!.message });
344
+ } else if (result.completion !== undefined && operation.completion === undefined) {
345
+ await runtimeContext.recordExecution?.({ endpoint: operation.endpoint, kind: "completed" });
346
+ } else if (result.progress?.phase !== undefined && result.progress.phase !== operation.progress?.phase) {
347
+ await runtimeContext.recordExecution?.({ endpoint: operation.endpoint, kind: "phase", phase: result.progress.phase });
348
+ }
349
+ return result;
350
+ }
351
+
352
+ async #advanceOperationStep(
353
+ operation: OperationSnapshot,
354
+ registration: EndpointRegistration,
355
+ runtimeContext: RuntimeExecutionContext,
340
356
  ): Promise<OperationSnapshot> {
341
357
  const operations = this.operations!;
342
358
  if (registration.kind !== "asynchronous") throw new Error("Operation Endpoint is not asynchronous");
@@ -358,6 +374,10 @@ export class NodeDriver {
358
374
  command: structuredClone(command), need: structuredClone(command.need),
359
375
  resources: this.#resourceStore(operation.build), operation: operation.id,
360
376
  credentials: await this.#endpointCredentials({ ...registration, credentials: operation.credentials ?? registration.credentials ?? {} }),
377
+ ...(runtimeContext.recordExecution === undefined ? {} : {
378
+ reportDiagnostic: (diagnostic: import("@hypit/runtime").ExecutionDiagnostic) =>
379
+ runtimeContext.recordExecution!({ endpoint: operation.endpoint, kind: "diagnostic", ...diagnostic }),
380
+ }),
361
381
  checkpoint: async (checkpoint: import("@hypit/endpoint-kit").EndpointCheckpoint) => {
362
382
  await operations.update(operation.id, { status: "pending", ...checkpoint,
363
383
  submission: "accepted", acknowledgedAt: operation.acknowledgedAt ?? Date.now(), wakeAt: Date.now(), progress: { phase: checkpoint.remoteEnded ? "collecting" : "submitted" } });
@@ -366,10 +386,12 @@ export class NodeDriver {
366
386
  };
367
387
  if (action === "submit") {
368
388
  await operations.update(operation.id, { status: "pending", submission: "started", progress: { phase: "submitting" } });
389
+ await runtimeContext.recordExecution?.({ endpoint: operation.endpoint, kind: "started" });
369
390
  return await endpoint.start(context);
370
391
  }
371
392
  const pollContext = { ...context, handle: structuredClone(operation.handle!) };
372
393
  if (action === "collect") {
394
+ await runtimeContext.recordExecution?.({ endpoint: operation.endpoint, kind: "phase", phase: "collecting" });
373
395
  if (endpoint.collect === undefined) throw new Error(`Endpoint ${registration.id} declared artifacts ready but has no collect action`);
374
396
  return await endpoint.collect(pollContext);
375
397
  }
@@ -418,13 +440,13 @@ export class NodeDriver {
418
440
  });
419
441
  }
420
442
 
421
- async advanceOperation(operation: OperationSnapshot): Promise<OperationSnapshot> {
443
+ async advanceOperation(operation: OperationSnapshot, context?: RuntimeExecutionContext): Promise<OperationSnapshot> {
422
444
  if (operation.request === undefined) throw new Error(`Operation ${operation.id} has no stored request`);
423
445
  const selected = this.endpoints.resolve(operation.request.need);
424
446
  if (selected.status !== "resolved" || selected.registration.id !== operation.endpoint) {
425
447
  throw new Error(`Operation ${operation.id} cannot change its selected Endpoint ${operation.endpoint}`);
426
448
  }
427
- return await this.#advanceOperation(operation, selected.registration, { build: operation.build });
449
+ return await this.#advanceOperation(operation, selected.registration, context ?? { build: operation.build });
428
450
  }
429
451
 
430
452
  async #execute(
@@ -464,21 +486,37 @@ export class NodeDriver {
464
486
  try {
465
487
  return await this.#executeEndpoint(state, executable, context);
466
488
  } catch (error) {
489
+ await context.recordExecution?.({ endpoint: executable.endpointId, kind: "failed", message: failureMessage(error) });
467
490
  throw new Error(
468
491
  `Endpoint ${executable.endpointId} failed ${executable.command.need.capability.name}: ${failureMessage(error)}`,
469
492
  { cause: error },
470
493
  );
471
494
  }
472
495
  }
496
+ let phase: string | undefined;
497
+ await context?.recordExecution?.({ endpoint: executable.endpointId, kind: "started" });
473
498
  try {
474
499
  const result = await executable.registration.handler({
475
500
  command: structuredClone(executable.command),
476
501
  need: structuredClone(executable.command.need),
477
502
  resources: this.#resourceStore(context?.build),
478
503
  credentials: await this.#endpointCredentials(executable.registration),
504
+ reportProgress: async (progress) => {
505
+ await context?.reportProgress?.({ endpoint: executable.endpointId, progress });
506
+ if (progress.phase !== phase) {
507
+ phase = progress.phase;
508
+ await context?.recordExecution?.({ endpoint: executable.endpointId, kind: "phase", phase });
509
+ }
510
+ },
511
+ ...(context?.recordExecution === undefined ? {} : {
512
+ reportDiagnostic: (diagnostic) => context.recordExecution!({ endpoint: executable.endpointId, kind: "diagnostic", ...diagnostic }),
513
+ }),
479
514
  });
480
- return { status: "completed", event: await this.#endpointEvent(state, executable, result) };
515
+ const event = await this.#endpointEvent(state, executable, result);
516
+ await context?.recordExecution?.({ endpoint: executable.endpointId, kind: "completed" });
517
+ return { status: "completed", event };
481
518
  } catch (error) {
519
+ await context?.recordExecution?.({ endpoint: executable.endpointId, kind: "failed", message: failureMessage(error) });
482
520
  throw new Error(
483
521
  `Endpoint ${executable.endpointId} failed ${executable.command.need.capability.name}: ${failureMessage(error)}`,
484
522
  { cause: error },
@@ -0,0 +1,27 @@
1
+ # `@hypit/elevenlabs-speech`
2
+
3
+ Exact model contract and author Surface for ElevenLabs Voice Design.
4
+
5
+ `eleven_ttv_v3` creates an ordinary audio voice reference from a natural-language description of
6
+ 20 to 1000 characters and an authored speech sample of 100 to 1000 characters. The service returns
7
+ several candidate previews; the Surface exposes the primary member of the shared `GeneratedAudioSet`
8
+ as `<id>.reference`.
9
+
10
+ It contains no API URL, credential, retry, queue or ElevenLabs wire encoding. Those belong to a
11
+ Runtime Endpoint such as `@hypit/provider-hypihub`.
12
+
13
+ ```xml
14
+ <import as="eleven" from="@hypit/elevenlabs-speech@1"/>
15
+
16
+ <eleven:VoiceDesign id="host" speech={story.segment.voiceSample.speech}>
17
+ A clear young woman with a grounded, confident conversational delivery.
18
+ </eleven:VoiceDesign>
19
+ ```
20
+
21
+ `host.reference` is not a special identity record. It is a normal audio Resource, so the same
22
+ accepted reference can be supplied anywhere an audio reference is accepted.
23
+
24
+ Official API reference: <https://elevenlabs.io/docs/api-reference/text-to-voice/design>
25
+
26
+ The Source import selects author syntax and exact model semantics only. The Runtime Profile
27
+ independently selects the Provider that fulfils the capability.
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@hypit/provider-xiaomi-mimo",
2
+ "name": "@hypit/elevenlabs-speech",
3
3
  "version": "0.0.0-dev",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "private": true,
@@ -11,14 +11,11 @@
11
11
  "activation": "./src/activation.ts"
12
12
  },
13
13
  "dependencies": {
14
- "@hypit/endpoint-kit": "workspace:*",
14
+ "@hypit/artifact": "workspace:*",
15
15
  "@hypit/generation": "workspace:*",
16
+ "@hypit/model-kit": "workspace:*",
16
17
  "@hypit/protocol": "workspace:*",
17
- "@hypit/runtime": "workspace:*",
18
- "@hypit/runtime-kit": "workspace:*"
19
- },
20
- "devDependencies": {
21
- "@hypit/driver-node": "workspace:*",
22
- "@hypit/mimo-speech": "workspace:*"
18
+ "@hypit/text": "workspace:*",
19
+ "@hypit/markup": "workspace:*"
23
20
  }
24
21
  }
@@ -0,0 +1,26 @@
1
+ import { createMarkupSurfaceHostFacet } from "@hypit/markup";
2
+
3
+ import {
4
+ decodeElevenLabsVoiceDesignSurface,
5
+ elevenLabsSpeechComponent,
6
+ elevenLabsSpeechDefinition,
7
+ elevenLabsSpeechManifest,
8
+ elevenLabsSpeechMarkupSurfaces,
9
+ elevenLabsSpeechModuleRef,
10
+ } from "./index.js";
11
+
12
+ export const hypitPackage = {
13
+ format: "hypit.node-package@1" as const,
14
+ modules: [{ manifest: elevenLabsSpeechManifest }],
15
+ components: [elevenLabsSpeechComponent],
16
+ hostFacets: [
17
+ elevenLabsSpeechDefinition.hostFacet,
18
+ createMarkupSurfaceHostFacet({
19
+ module: elevenLabsSpeechModuleRef,
20
+ declaration: elevenLabsSpeechMarkupSurfaces.find((item) => item.name === "voiceDesign")!,
21
+ handler: decodeElevenLabsVoiceDesignSurface,
22
+ }),
23
+ ],
24
+ };
25
+
26
+ export default hypitPackage;
@@ -0,0 +1,11 @@
1
+ import { createExactModelPrimaryGenerationFragment } from "@hypit/model-kit";
2
+ import type { ExactModelEndpoint, ExactModelMediaInput, ExactModelTextInput } from "@hypit/model-kit";
3
+
4
+ /** Model result projection over the same graph-native request assembly as every exact model. */
5
+ export function createElevenLabsSpeechAudioFragment(
6
+ endpoint: ExactModelEndpoint,
7
+ mediaInputs: readonly ExactModelMediaInput[] = [],
8
+ textInputs: readonly ExactModelTextInput[] = [],
9
+ ) {
10
+ return createExactModelPrimaryGenerationFragment(endpoint, mediaInputs, textInputs);
11
+ }
@@ -0,0 +1,111 @@
1
+ import { artifactTypes } from "@hypit/artifact";
2
+ import { sealGenerationPortRequest, sealGenerationRequestDraft, sealGenerationPortTable } from "@hypit/generation";
3
+ import type { GenerationPortTable, GenerationPortValue, GenerationRequest } from "@hypit/generation";
4
+ import type { SurfaceAttributeVocabulary, SurfacePortVocabulary } from "@hypit/markup";
5
+ import { defineExactModelModule } from "@hypit/model-kit";
6
+ import { textTypes } from "@hypit/text";
7
+
8
+ export const elevenLabsSpeechModuleRef = { name: "@hypit/elevenlabs-speech", version: "1" } as const;
9
+ export const elevenLabsSpeechModels = ["eleven_ttv_v3"] as const;
10
+ export type ElevenLabsSpeechModel = typeof elevenLabsSpeechModels[number];
11
+
12
+ // ElevenLabs documents a 100 to 1000 character preview text. The port vocabulary
13
+ // carries the ceiling; the floor is stated to authors and enforced by the service.
14
+ const spokenText = { kind: "text", maxChars: 1000 } as const;
15
+ // Voice descriptions have their own documented 20 to 1000 character bounds.
16
+ const instruction = { kind: "text", maxChars: 1000 } as const;
17
+
18
+ function table(model: ElevenLabsSpeechModel): GenerationPortTable {
19
+ return sealGenerationPortTable({
20
+ model,
21
+ result: "audio",
22
+ ports: [
23
+ { name: "text", value: spokenText, minItems: 1, maxItems: 1 },
24
+ { name: "voiceDescription", value: instruction, minItems: 1, maxItems: 1 },
25
+ ],
26
+ requires: [],
27
+ });
28
+ }
29
+
30
+ export const elevenLabsSpeechPorts: Readonly<Record<ElevenLabsSpeechModel, GenerationPortTable>> = {
31
+ "eleven_ttv_v3": table("eleven_ttv_v3"),
32
+ };
33
+
34
+ export function sealElevenLabsSpeechRequest(
35
+ model: ElevenLabsSpeechModel,
36
+ ports: Readonly<Record<string, readonly GenerationPortValue[]>>,
37
+ ): GenerationRequest {
38
+ return sealGenerationPortRequest(elevenLabsSpeechPorts[model], ports);
39
+ }
40
+
41
+ export function sealElevenLabsSpeechRequestDraft(
42
+ model: ElevenLabsSpeechModel,
43
+ ports: Readonly<Record<string, readonly GenerationPortValue[]>>,
44
+ ) {
45
+ return sealGenerationRequestDraft(elevenLabsSpeechPorts[model], ports);
46
+ }
47
+
48
+ const base = defineExactModelModule({
49
+ module: elevenLabsSpeechModuleRef,
50
+ endpoints: ([
51
+ ["voiceDesign", "eleven_ttv_v3", "ElevenLabsVoiceDesignRequest"],
52
+ ] as const).map(([key, model, requestTypeName]) => ({
53
+ key,
54
+ requestTypeName,
55
+ producerName: `request-${model}`,
56
+ ports: elevenLabsSpeechPorts[model],
57
+ })),
58
+ });
59
+
60
+ export const elevenLabsSpeechEndpoints = base.endpoints;
61
+
62
+ const spokenAttributes: readonly SurfaceAttributeVocabulary[] = [
63
+ {
64
+ name: "id",
65
+ kind: "identifier",
66
+ required: true,
67
+ summary: "Names this speech request and prefixes the binding it publishes.",
68
+ },
69
+ {
70
+ name: "speech",
71
+ kind: "reference",
72
+ required: true,
73
+ summary: "The Text edge whose exact words are spoken.",
74
+ accepts: [textTypes.text],
75
+ },
76
+ ];
77
+
78
+ const referencePort: readonly SurfacePortVocabulary[] = [{
79
+ name: "reference",
80
+ type: artifactTypes.blob,
81
+ summary: "The designed voice reference, addressed as `<id>.reference`.",
82
+ }];
83
+
84
+ export const elevenLabsSpeechMarkupSurfaces = [
85
+ {
86
+ name: "voiceDesign", tag: "VoiceDesign", mode: "structured",
87
+ outputs: [elevenLabsSpeechEndpoints.voiceDesign.draftType],
88
+ vocabulary: {
89
+ summary: "Creates a reusable voice reference from a natural-language voice description.",
90
+ attributes: spokenAttributes,
91
+ ports: referencePort,
92
+ text: "The element's own text is the voice description and is required.",
93
+ example: `<eleven:VoiceDesign id="host" speech={story.segment.voiceSample.speech}>
94
+ A clear young woman with a grounded, confident conversational delivery.
95
+ </eleven:VoiceDesign>`,
96
+ notes: [
97
+ "The element accepts no child elements; only its text is read.",
98
+ "The spoken sample must be between 100 and 1000 characters.",
99
+ "The voice description must be between 20 and 1000 characters.",
100
+ "The result is an ordinary audio Resource that can be supplied anywhere an audio reference is accepted.",
101
+ ],
102
+ },
103
+ },
104
+ ] as const;
105
+
106
+ export const elevenLabsSpeechManifest = { ...base.manifest } as const;
107
+ export const elevenLabsSpeechComponent = base.component;
108
+ export const elevenLabsSpeechDefinition = { ...base, manifest: elevenLabsSpeechManifest };
109
+
110
+ export { createElevenLabsSpeechAudioFragment } from "./fragment.js";
111
+ export { decodeElevenLabsVoiceDesignSurface } from "./surface.js";
@@ -0,0 +1,167 @@
1
+ import { artifactTypes } from "@hypit/artifact";
2
+ import { generationPort, sealGenerationMediaBinding } from "@hypit/generation";
3
+ import type { GenerationMediaPort } from "@hypit/generation";
4
+ import { exactModelMediaInputNames, exactModelTextInputName } from "@hypit/model-kit";
5
+ import type { ExactModelEndpoint, ExactModelMediaInput, ExactModelTextInput } from "@hypit/model-kit";
6
+ import type { CanonicalValue } from "@hypit/protocol";
7
+ import { textTypes, verifyText } from "@hypit/text";
8
+ import type {
9
+ MarkupAttributeValue,
10
+ StructuredElement,
11
+ StructuredSurfaceHandler,
12
+ SurfaceResolvedReference,
13
+ } from "@hypit/markup";
14
+
15
+ import { createElevenLabsSpeechAudioFragment } from "./fragment.js";
16
+ import { elevenLabsSpeechEndpoints, sealElevenLabsSpeechRequestDraft } from "./index.js";
17
+
18
+ function sameType(left: SurfaceResolvedReference["type"], right: SurfaceResolvedReference["type"]): boolean {
19
+ return left.module.name === right.module.name && left.module.version === right.module.version && left.name === right.name;
20
+ }
21
+
22
+ function attributes(element: StructuredElement, required: readonly string[]): void {
23
+ const allowed = new Set(required);
24
+ const unknown = Object.keys(element.attributes).filter((name) => !allowed.has(name));
25
+ if (unknown.length > 0 || required.some((name) => element.attributes[name] === undefined)) {
26
+ throw new Error(`${element.name} requires ${required.join(", ")}`);
27
+ }
28
+ }
29
+
30
+ function stringAttribute(element: StructuredElement, name: string): string {
31
+ const value = element.attributes[name];
32
+ if (typeof value !== "string" || value.trim().length === 0) {
33
+ throw new Error(`${element.name}.${name} must be a non-empty string`);
34
+ }
35
+ return value.trim();
36
+ }
37
+
38
+ function referencePath(element: StructuredElement, name: string): string {
39
+ const value: MarkupAttributeValue | undefined = element.attributes[name];
40
+ if (typeof value !== "object" || value.kind !== "reference" || value.path.length === 0) {
41
+ throw new Error(`${element.name}.${name} must be a whole-value reference`);
42
+ }
43
+ return value.path;
44
+ }
45
+
46
+ function resolved(
47
+ element: StructuredElement,
48
+ name: string,
49
+ resolveReference: (path: string) => SurfaceResolvedReference | undefined,
50
+ ): SurfaceResolvedReference {
51
+ const path = referencePath(element, name);
52
+ const value = resolveReference(path);
53
+ if (value === undefined) throw new Error(`${element.name}.${name} cannot resolve ${path}`);
54
+ return value;
55
+ }
56
+
57
+ function speechText(reference: SurfaceResolvedReference, subject: string): SurfaceResolvedReference {
58
+ if (!sameType(reference.type, textTypes.text)) throw new Error(`${subject} must reference Text`);
59
+ const value = reference.record?.value;
60
+ if (value !== undefined) {
61
+ if (value.kind !== "inline") throw new Error(`${subject} has an invalid authored Text value`);
62
+ verifyText(value.value);
63
+ }
64
+ return reference;
65
+ }
66
+
67
+
68
+ function body(element: StructuredElement, required: boolean): string | undefined {
69
+ if (element.children.some((child) => child.kind === "element")) {
70
+ throw new Error(`${element.name} accepts instruction text only`);
71
+ }
72
+ const lines = element.children.map((child) => child.kind === "text" ? child.value : "").join("")
73
+ .replaceAll("\r\n", "\n").split("\n");
74
+ while (lines[0]?.trim() === "") lines.shift();
75
+ while (lines.at(-1)?.trim() === "") lines.pop();
76
+ const indents = lines.filter((line) => line.trim()).map((line) => /^\s*/u.exec(line)?.[0].length ?? 0);
77
+ const indent = indents.length === 0 ? 0 : Math.min(...indents);
78
+ const value = lines.map((line) => line.slice(indent).trimEnd()).join("\n").trim();
79
+ if (value.length === 0) {
80
+ if (required) throw new Error(`${element.name} requires a voice description in its body`);
81
+ return undefined;
82
+ }
83
+ return value;
84
+ }
85
+
86
+ function output(
87
+ element: StructuredElement,
88
+ endpoint: ExactModelEndpoint,
89
+ draft: ReturnType<typeof sealElevenLabsSpeechRequestDraft>,
90
+ outputName: "reference" | "audio",
91
+ text: readonly { readonly input: ExactModelTextInput; readonly source: SurfaceResolvedReference }[],
92
+ media: readonly { readonly input: ExactModelMediaInput; readonly source: SurfaceResolvedReference }[] = [],
93
+ ) {
94
+ const id = stringAttribute(element, "id");
95
+ const draftId = `${id}.draft`;
96
+ const records: Array<{
97
+ readonly id: string;
98
+ readonly type: SurfaceResolvedReference["type"];
99
+ readonly value: { readonly kind: "inline"; readonly value: CanonicalValue };
100
+ readonly range: StructuredElement["range"];
101
+ }> = [{
102
+ id: draftId,
103
+ type: endpoint.draftType,
104
+ value: { kind: "inline", value: draft as unknown as CanonicalValue },
105
+ range: element.range,
106
+ }];
107
+ const inputs: Record<string, SurfaceResolvedReference["ref"] | { readonly kind: "record"; readonly id: string }> = {
108
+ draft: { kind: "record", id: draftId },
109
+ };
110
+ for (const item of text) inputs[exactModelTextInputName(item.input.name)] = item.source.ref;
111
+ for (const item of media) {
112
+ const binding = endpoint.mediaBindings[item.input.port];
113
+ if (binding === undefined) throw new Error(`${endpoint.ports.model} has no media port ${item.input.port}`);
114
+ const port = generationPort(endpoint.ports, item.input.port);
115
+ if (port.value.kind !== "media") throw new Error(`${endpoint.ports.model} port ${item.input.port} is not media`);
116
+ const names = exactModelMediaInputNames(item.input.name);
117
+ const bindingId = `${id}.${item.input.name}.binding`;
118
+ records.push({
119
+ id: bindingId,
120
+ type: binding.type,
121
+ value: {
122
+ kind: "inline",
123
+ value: sealGenerationMediaBinding(port as GenerationMediaPort, { role: "audio" }) as unknown as CanonicalValue,
124
+ },
125
+ range: element.range,
126
+ });
127
+ inputs[names.binding] = { kind: "record", id: bindingId };
128
+ inputs[names.artifact] = item.source.ref;
129
+ }
130
+ const fragment = createElevenLabsSpeechAudioFragment(
131
+ endpoint,
132
+ media.map((item) => item.input),
133
+ text.map((item) => item.input),
134
+ );
135
+ return {
136
+ records,
137
+ components: [{
138
+ id,
139
+ fragment: fragment.id,
140
+ inputs,
141
+ outputs: { audio: `${id}.${outputName}` },
142
+ range: element.range,
143
+ }],
144
+ fragments: [fragment],
145
+ };
146
+ }
147
+
148
+ function speechInput(
149
+ element: StructuredElement,
150
+ resolveReference: (path: string) => SurfaceResolvedReference | undefined,
151
+ ) {
152
+ return {
153
+ input: { name: "speech", port: "text" },
154
+ source: speechText(resolved(element, "speech", resolveReference), `${element.name}.speech`),
155
+ } as const;
156
+ }
157
+
158
+ export const decodeElevenLabsVoiceDesignSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
159
+ attributes(element, ["id", "speech"]);
160
+ return output(
161
+ element,
162
+ elevenLabsSpeechEndpoints.voiceDesign,
163
+ sealElevenLabsSpeechRequestDraft("eleven_ttv_v3", { voiceDescription: [body(element, true)!] }),
164
+ "reference",
165
+ [speechInput(element, resolveReference)],
166
+ );
167
+ };
@@ -13,6 +13,12 @@ import type { AsyncEndpoint, CredentialRef, EndpointRequest } from "@hypit/hypit
13
13
  import { generationTypes, compileWireRequest, sealGeneratedImageSet } from "@hypit/hypit/generation";
14
14
  ```
15
15
 
16
+ The shipped [project Provider example](../../examples/provider-package/README.md) follows an image
17
+ request through configuration, support, upload, submission, receipt, polling, collection and pricing.
18
+ It uses an explicitly illustrative service protocol and imports only public SDK subpaths.
19
+ This SDK also exports `canonicalize`, `BlobRef`, `ResourceId`, `credentialRef` and
20
+ `isStreamingResourceStore` for Providers that construct stored results or use streaming resource IO.
21
+
16
22
  For an existing model, name its exact versioned Capability and expected result Type. Map its request
17
23
  ports into the service's wire format; the Provider need not import the model's implementation.
18
24
  `@hypit/hypit/generation` supplies the common generated-media values and optional wire-mapping helpers.
@@ -29,6 +35,13 @@ without changing Core demand. Each resource declares a `limit` and optional `uni
29
35
  A capability may add `resources` and a pure `unitsForRequest(request)` resolver for quantities of
30
36
  already declared resources. Runtime admits all claims atomically for one `fulfill-need` Command.
31
37
 
38
+ A long immediate call can report its current activity with
39
+ `await context.reportProgress?.({ phase: "processing", completed: 12, total: 40, unit: "items" })`.
40
+ The Provider chooses meaningful phases and quantities and reports non-secret, human-readable facts.
41
+ The Runtime attaches them to the currently executing Command; they do not change its outcome,
42
+ scheduling or Core facts. Completion clears the live activity. Direct callers may omit the callback.
43
+ For asynchronous work, return `progress` in the existing pending outcome instead.
44
+
32
45
  Asynchronous execution moves forward through `start`, `poll`, and optional `collect`. `start` returns
33
46
  a task handle; `pending` means an acknowledged task is still running. `ready` records remote completion
34
47
  and hands its artifacts to `collect`, allowing download capacity to differ from task capacity.
@@ -109,3 +122,14 @@ represented by a semantic `pendingInputs` slot instead. A Provider may use the s
109
122
  media role to enforce support limits, but it never receives graph traversal rules or future bytes.
110
123
  It returns either `supported`, or `unsupported` with the Provider's reason. Selection infrastructure
111
124
  preserves that reason without interpreting request fields or maintaining a central limitation table.
125
+
126
+ An Endpoint can additionally emit explicit, non-secret diagnostics:
127
+
128
+ ```ts
129
+ await context.reportDiagnostic?.({ level: "info", message: "Encoder initialized" });
130
+ ```
131
+
132
+ The Runtime binds each message to this call's Build, Command and Endpoint and owns persistence.
133
+ The Provider does not select a log path or Result repository. Messages describe operational evidence;
134
+ credentials, request bodies and opaque vendor payloads remain private. `reportProgress` continues to
135
+ report current activity; repeated counters are not an append-only log. Phase names belong to the Provider.
@@ -20,7 +20,9 @@ import type {
20
20
  } from "@hypit/runtime";
21
21
  import { capacityUnits, verifyCredentialRef } from "@hypit/runtime";
22
22
 
23
- export type { CanonicalValue, CapabilityRef, ModuleRef, StoredValue, TypeRef } from "@hypit/protocol";
23
+ export { canonicalize } from "@hypit/protocol";
24
+ export type { BlobRef, CanonicalValue, CapabilityRef, ModuleRef, ResourceId, StoredValue, TypeRef } from "@hypit/protocol";
25
+ export { credentialRef, isStreamingResourceStore } from "@hypit/runtime";
24
26
  export type {
25
27
  CapacityResourceClaim,
26
28
  CredentialAcquisition,
@@ -97,6 +99,10 @@ export type EndpointInvocationContext = {
97
99
  readonly resources: ResourceStore;
98
100
  /** Only slots explicitly declared by this configured Endpoint instance are present. */
99
101
  readonly credentials: Readonly<Record<string, EndpointCredential>>;
102
+ /** Explicit non-secret diagnostic output. The Provider owns its content, never its storage. */
103
+ readonly reportDiagnostic?: (diagnostic: import("@hypit/runtime").ExecutionDiagnostic) => Promise<void>;
104
+ /** Report non-secret activity of a long local call without creating a remote Operation. */
105
+ readonly reportProgress?: (progress: OperationProgress) => Promise<void>;
100
106
  };
101
107
 
102
108
  export type ImmediateEndpointHandler = (
@@ -1,8 +1,7 @@
1
1
  # `@hypit/film`
2
2
 
3
- The Surface accepts `semantic={speech.semantic}` for performance time or `space={animation}` for an
4
- authored ProgramSpace. Its Fragment receives `space` directly; rendering does not require Script
5
- or prepared performance media. Both time sources use the same frame and audio pipeline.
3
+ The Surface, Fragment and assembly Producers receive the same Timeline through a `timeline` input.
4
+ Partial, overlapping or absent semantic coverage all use that complete range.
6
5
 
7
6
  Official package-owned assembly layer between peer Tracks and the generic Composition waist.
8
7
  Film is an ordinary author component and an optional Target, not a Core root or a privileged video
@@ -21,9 +20,9 @@ belongs to each Present's absolute stacking key.
21
20
 
22
21
  The official Structured Surface validates an imported generic SVS Recipe into a nominal
23
22
  `FilmProgram`, receives CanvasSpace and the selected time source through separate explicit edges,
24
- projects ProgramSpace when that source is a SemanticTrack, type-checks
23
+ passes the Timeline directly, type-checks
25
24
  each `<film:Track source={...}/>` reference and generates the finite fold. CanvasSpace is the only
26
- dimension truth, ProgramSpace is the only frame-rate truth, and FilmProgram owns only assembly
25
+ dimension truth, Timeline is the only time-range truth, and FilmProgram owns only assembly
27
26
  identity and clear color.
28
27
  Child order is organizational: Track and Present identity, timing and absolute stacking remain in
29
28
  their own typed values. Final rendering is a separate author package and capability.
@@ -31,10 +30,16 @@ their own typed values. Final rendering is a separate author package and capabil
31
30
  For example, after the named inputs are declared:
32
31
 
33
32
  ```svml
34
- <film:Film id="main" canvas={vertical} semantic={speech.semantic}
33
+ <import as="sound" from="@hypit/sound@1"/>
34
+ <sound:Style id="voice-style"/>
35
+ <sound:Track id="voice" timeline={speech.timeline}>
36
+ <sound:Use style={voice-style}/>
37
+ </sound:Track>
38
+
39
+ <film:Film id="main" canvas={vertical} timeline={speech.timeline}
35
40
  appearance={recipes.film.vertical}>
36
41
  <film:Track source={performance.visual}/>
37
- <film:Track source={speech.audio}/>
42
+ <film:Track source={voice.audio}/>
38
43
  <film:Track source={coverage.visual}/>
39
44
  <film:Track source={captions.track}/>
40
45
  <film:Track source={music.track}/>
@@ -16,7 +16,7 @@
16
16
  "@hypit/elaborator": "workspace:*",
17
17
  "@hypit/program-space": "workspace:*",
18
18
  "@hypit/protocol": "workspace:*",
19
- "@hypit/semantic-track": "workspace:*",
19
+ "@hypit/timeline": "workspace:*",
20
20
  "@hypit/spatial": "workspace:*",
21
21
  "@hypit/svs": "workspace:*",
22
22
  "@hypit/markup": "workspace:*",
@@ -1,5 +1,5 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import type { ComponentPackage } from "@hypit/component-kit";
2
- import type { ProgramSpace } from "@hypit/program-space";
3
3
  import type { CanvasSpace } from "@hypit/spatial";
4
4
  import type { AudioTrack, VisualTrack } from "@hypit/composition";
5
5
  import type { StoredValue } from "@hypit/protocol";
@@ -28,7 +28,7 @@ export const filmComponent = {
28
28
  handler: ({ inputs }) => ({
29
29
  outputs: { set: { kind: "inline", value: canonicalize(appendFilmVisualTrack(
30
30
  inline<FilmTrackSet>(inputs.set?.value, "FilmTrackSet"),
31
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
31
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
32
32
  inline<VisualTrack>(inputs.track?.value, "VisualTrack"),
33
33
  )) } },
34
34
  needs: {},
@@ -39,7 +39,7 @@ export const filmComponent = {
39
39
  handler: ({ inputs }) => ({
40
40
  outputs: { set: { kind: "inline", value: canonicalize(appendFilmAudioTrack(
41
41
  inline<FilmTrackSet>(inputs.set?.value, "FilmTrackSet"),
42
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
42
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
43
43
  inline<AudioTrack>(inputs.track?.value, "AudioTrack"),
44
44
  )) } },
45
45
  needs: {},
@@ -51,7 +51,7 @@ export const filmComponent = {
51
51
  outputs: { composition: { kind: "inline", value: canonicalize(compileFilmComposition(
52
52
  inline<FilmProgram>(inputs.program?.value, "FilmProgram"),
53
53
  inline<CanvasSpace>(inputs.canvas?.value, "CanvasSpace"),
54
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
54
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
55
55
  inline<FilmTrackSet>(inputs.set?.value, "FilmTrackSet"),
56
56
  )) } },
57
57
  needs: {},