@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
@@ -2,6 +2,10 @@
2
2
 
3
3
  Hypit Studio Companion for the Ranking module's Column, Tier and Top Three surfaces.
4
4
 
5
+ Each surface has separate visual and audio Companion declarations in this one
6
+ package. Film chooses `.visual` and `.audio` independently; selecting the visual
7
+ output does not connect its sound.
8
+
5
9
  The root lane represents the board; `attachments` expose reveal or activation
6
10
  events on a detail lane. Both use Studio's ordinary item selection and overlap
7
11
  behavior. Their time ranges remain the authored event ranges.
@@ -12,3 +16,17 @@ entering or settled icon selects the same detail entity. The board and preset
12
16
  items without a detail event remain associated with the root. Studio measures
13
17
  the visible parts at the current frame; the Companion does not duplicate motion
14
18
  geometry or infer identities from rendered ID strings.
19
+
20
+ The audio Companion presents a `Ranking Sounds` lane. Each emitted clip shows
21
+ its item and phase (`Appear` or `Move`) with a waveform. It joins the board's
22
+ exported `.events` to the rendered audio clips by exact event identity, so a
23
+ phase without a supplied sound contributes no audio item. `Move` is the motion
24
+ into the board, not an exit sound.
25
+
26
+ Selecting a sound exposes the event trigger as a read-only fact and the shared
27
+ Ranking Style's sound gains and fade-in length as editable fields. Gain is
28
+ displayed as a percentage; edits write the original linear gain to the Style's
29
+ recipe. These fields affect every matching event using that recipe. Event
30
+ timing comes from the Ranking animation; changing the visual event timing
31
+ updates its sound too. The visual Companion owns layout and motion controls,
32
+ while the audio Companion owns the sound controls.
@@ -1,7 +1,8 @@
1
1
  import { openFontStudioFields } from "@hypit/fonts-open/studio";
2
2
  import { rankingMarkupSurfaces, rankingModuleRef, rankingTypes } from "@hypit/ranking";
3
- import type { RankingProgram, RankingSchedule } from "@hypit/ranking";
3
+ import type { RankingProgram, RankingSchedule, RankingSoundEventPlan } from "@hypit/ranking";
4
4
  import { compositionTypes } from "@hypit/composition";
5
+ import type { AudioTrack } from "@hypit/composition";
5
6
  import type { StudioTrackCompanion, StudioTrackCompanionContext, StudioEntityDraft, StudioInspectorFieldDeclaration, StudioSourceBindingDeclaration } from "@hypit/studio-adapter";
6
7
  import { artifactPreview, authoredChildFor, previewLayer, requiredSurfaceValue, temporalLineageFor, temporalSemanticSource } from "@hypit/studio-adapter";
7
8
 
@@ -13,9 +14,12 @@ const frameParameters: readonly StudioSourceBindingDeclaration[] = [
13
14
  ...["left", "top", "right", "bottom", "x", "y", "width", "height"].map((name) => ({ name, writable: true })),
14
15
  ];
15
16
 
16
- function rankingProperties(surface: "column-style" | "tier-style" | "top-three-style") {
17
- return rankingMarkupSurfaces.find((candidate) => candidate.name === surface)
18
- ?.vocabulary.attributes.find((attribute) => attribute.name === "recipe")?.recipe ?? [];
17
+ const soundProperties = new Set(["appear-gain", "move-gain", "sound-fade-frames"]);
18
+
19
+ function rankingProperties(surface: "column-style" | "tier-style" | "top-three-style", audio = false) {
20
+ return (rankingMarkupSurfaces.find((candidate) => candidate.name === surface)
21
+ ?.vocabulary.attributes.find((attribute) => attribute.name === "recipe")?.recipe ?? [])
22
+ .filter((property) => soundProperties.has(property.name) === audio);
19
23
  }
20
24
 
21
25
  function title(name: string): string {
@@ -92,11 +96,11 @@ function rankingInspector(surface: "column-style" | "tier-style" | "top-three-st
92
96
  })];
93
97
  }
94
98
 
95
- function rankingStyle(surface: "column-style" | "tier-style" | "top-three-style"): StudioSourceBindingDeclaration {
99
+ function rankingStyle(surface: "column-style" | "tier-style" | "top-three-style", audio = false): StudioSourceBindingDeclaration {
96
100
  return {
97
101
  name: "style",
98
- referenced: [fontInspector.binding],
99
- recipe: { through: ["recipe"], bindings: rankingProperties(surface).map(({ name, schema, fallback }) => ({
102
+ ...(audio ? {} : { referenced: [fontInspector.binding] }),
103
+ recipe: { through: ["recipe"], bindings: rankingProperties(surface, audio).map(({ name, schema, fallback }) => ({
100
104
  name,
101
105
  schema,
102
106
  ...(fallback === undefined ? {} : { fallback }),
@@ -159,10 +163,57 @@ function projectRanking(context: StudioTrackCompanionContext): readonly StudioEn
159
163
 
160
164
  const commonBindings: readonly StudioSourceBindingDeclaration[] = [
161
165
  { name: "frame", referenced: frameParameters },
162
- { name: "appear-sound" },
163
- { name: "move-sound" },
164
166
  ];
165
167
 
168
+ function projectRankingAudio(context: StudioTrackCompanionContext): readonly StudioEntityDraft[] {
169
+ const events = requiredSurfaceValue(context, "events") as RankingSoundEventPlan;
170
+ const byId = new Map(events.events.map((event) => [event.id, event]));
171
+ const clips = new Map((context.track.value as AudioTrack).clips.map((clip) => [clip.id, clip]));
172
+ const boardId = context.placement?.id ?? context.track.outputRef;
173
+ return context.spans.map((span): StudioEntityDraft => {
174
+ const event = byId.get(span.id);
175
+ const clip = clips.get(span.id);
176
+ if (event === undefined || clip === undefined) throw new Error(`Ranking sound ${span.id} has no event or audio clip.`);
177
+ const child = authoredChildFor(context, event.itemId, [rankingTypes.itemSpec, rankingTypes.textItemShell]);
178
+ const label = child?.attributes.label ?? event.itemId;
179
+ const phase = event.kind === "appear" ? "Appear" : "Move";
180
+ return {
181
+ id: `${context.track.outputRef}:entity:${event.id}`,
182
+ authoredId: boardId,
183
+ display: { title: `${label} · ${phase}`, layers: [previewLayer(artifactPreview("audio", clip.artifact.resource), "waveform")] },
184
+ startFrame: span.startFrame, endFrameExclusive: span.endFrameExclusive, stackOrder: span.stackOrder,
185
+ ...(context.placement === undefined ? {} : { elementRange: context.placement.range }),
186
+ presentation: { entity: "ranking-sound", chrome: "standard" },
187
+ inspector: [{
188
+ id: "trigger", label: "Trigger", domain: "when", page: { id: "sound", label: "Sound" }, section: { id: "event", label: "Event" },
189
+ value: `${label} · ${phase} · ${event.frame}f`,
190
+ summary: "Follows the Ranking item's animation event. Adjust its visual timing to move the sound with it.",
191
+ }],
192
+ };
193
+ });
194
+ }
195
+
196
+ function rankingAudioCompanion(surface: "column" | "tier" | "top-three"): StudioTrackCompanion {
197
+ const style = `${surface}-style` as const;
198
+ return {
199
+ id: `${surface}-audio`, role: "track",
200
+ output: { type: compositionTypes.audioTrack, surface, modules: [rankingModuleRef] },
201
+ family: "audio", tone: "green", label: "Ranking Sounds", icon: "waveform",
202
+ lane: { heightPx: 48 }, requiredValues: ["events"],
203
+ bindings: [{ name: "appear-sound" }, ...(surface === "top-three" ? [] : [{ name: "move-sound" }]), rankingStyle(style, true)],
204
+ inspector: rankingProperties(style, true).map((property) => ({
205
+ binding: `style.${property.name}`, label: property.name === "sound-fade-frames" ? "Fade In" : title(property.name),
206
+ ...rankingInspectorPlacement[property.name as keyof typeof rankingInspectorPlacement],
207
+ control: "number",
208
+ ...(property.name === "sound-fade-frames"
209
+ ? { unit: "f", number: { minimum: 0, step: 1 } }
210
+ : { unit: "%", number: { scale: 100, minimum: 0, step: 1 } }),
211
+ summary: "Shared by every matching sound event using this Ranking style.",
212
+ })),
213
+ project: projectRankingAudio,
214
+ };
215
+ }
216
+
166
217
  const frameInspector: readonly StudioInspectorFieldDeclaration[] = frameParameters
167
218
  .filter(({ writable }) => writable === true)
168
219
  .map(({ name }) => ({
@@ -171,6 +222,7 @@ const frameInspector: readonly StudioInspectorFieldDeclaration[] = frameParamete
171
222
  }));
172
223
 
173
224
  export const rankingStudioTrackCompanions: readonly StudioTrackCompanion[] = [
225
+ ...(["column", "tier", "top-three"] as const).map(rankingAudioCompanion),
174
226
  {
175
227
  id: "column", role: "track",
176
228
  output: { type: compositionTypes.visualTrack, surface: "column", modules: [rankingModuleRef] },
@@ -1,14 +1,14 @@
1
1
  # `@hypit/render-hyperframes`
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 accepts `timeline={program.timeline}` and projects its complete ProgramSpace.
4
+ Its Fragment receives that range as `space`; rendering works with partial, overlapping or absent
5
+ semantic coverage through the same frame and audio pipeline.
6
6
 
7
7
  Explicit author and capability boundary for final HyperFrames video rendering.
8
8
 
9
9
  The package owns `<render:Video composition={...}/>` and lowers it to ordinary Operations that:
10
10
 
11
- 1. obtain the `ProgramSpace` from the semantic input and compile the referenced `Composition` into a `HyperframesDocument`;
11
+ 1. obtain the `ProgramSpace` from the Timeline input and compile the referenced `Composition` into a `HyperframesDocument`;
12
12
  2. request a silent, frame-exact `RenderedVisual`;
13
13
  3. compile every peer `AudioTrack` into one `AudioProgramPlan`;
14
14
  4. request an exact 48 kHz `TimelineAudio`;
@@ -29,7 +29,7 @@ Core therefore sees three real byte-operation Needs, not one opaque mega-render.
29
29
  contiguous or interleaved chunks, retries and image-sequence assembly remain inside the selected
30
30
  visual Endpoint; clip decoding/mixing remains inside the audio Endpoint; container encoding remains
31
31
  inside the mux Endpoint. A single Provider package may implement all three locally, or a Runtime may
32
- bind them to separate Lambda-backed Endpoints. The author still sees one `<render:Video>` result.
32
+ bind them to separate compatible Endpoints. The author still sees one `<render:Video>` result.
33
33
 
34
34
  Film is not a dependency of this author meaning. Any package that produces the common Composition
35
35
  contract can feed the render Surface. Conversely, targeting Composition never demands this package;
@@ -43,7 +43,7 @@ stream with the declared canvas, rational frame rate and frame count.
43
43
  Select a contiguous interval using zero-based, half-open frame bounds:
44
44
 
45
45
  ```xml
46
- <render:Video id="preview" composition={main.composition} semantic={speech.semantic}
46
+ <render:Video id="preview" composition={main.composition} timeline={speech.timeline}
47
47
  start-frame="240" end-frame-exclusive="360"/>
48
48
  ```
49
49
 
@@ -54,5 +54,5 @@ Provider's Runtime configuration.
54
54
 
55
55
  In TypeScript, `hyperframesVisualRequest(document, { range })` constructs the visual request;
56
56
  `createRenderHyperframesFragment(true)` accepts a `MediaFrameRange` input and connects it to visual
57
- and audio requests. The AWS Lambda Provider currently declines range requests. Selection limits
57
+ and audio requests. Provider support checks establish range support for other deployments. Selection limits
58
58
  final rendering work; it does not prune upstream generation dependencies.
@@ -20,7 +20,7 @@
20
20
  "@hypit/media-pipeline": "workspace:*",
21
21
  "@hypit/program-space": "workspace:*",
22
22
  "@hypit/protocol": "workspace:*",
23
- "@hypit/semantic-track": "workspace:*",
23
+ "@hypit/timeline": "workspace:*",
24
24
  "@hypit/markup": "workspace:*",
25
25
  "@hypit/temporal-markup": "workspace:*"
26
26
  },
@@ -4,6 +4,7 @@ import type { ComponentPackage } from "@hypit/component-kit";
4
4
  import type { StoredValue } from "@hypit/protocol";
5
5
 
6
6
  import { hyperframesVisualRequest } from "./product.js";
7
+ import type { HyperframesVisualRequest } from "./product.js";
7
8
  import { renderHyperframesCapabilities, renderHyperframesProducers } from "./manifest.js";
8
9
 
9
10
  /** Declares the visual Need. It contains no renderer, queue, credentials or deployment choice. */
@@ -26,7 +27,16 @@ export const renderHyperframesComponent = {
26
27
  return { constraints: {}, pendingInputs: plannedNeedInputs(state, step) };
27
28
  },
28
29
  present(specification) {
29
- return { fields: {}, references: {} };
30
+ const request = specification.constraints as Partial<HyperframesVisualRequest>;
31
+ if (request.document === undefined) return { fields: {}, references: {} };
32
+ const { document, range } = request;
33
+ const startFrame = range?.startFrame ?? 0;
34
+ const endFrameExclusive = range?.endFrameExclusive ?? document.frameCount;
35
+ return { fields: {
36
+ width: [document.canvas.width], height: [document.canvas.height],
37
+ startFrame: [startFrame], endFrameExclusive: [endFrameExclusive],
38
+ frameRate: [`${document.frameRate.numerator}/${document.frameRate.denominator}`],
39
+ }, references: {} };
30
40
  },
31
41
  })),
32
42
  } satisfies ComponentPackage;
@@ -1,6 +1,7 @@
1
+ import { timelineProducers, timelineTypes } from "@hypit/timeline";
1
2
  import { mediaTypes } from "@hypit/media";
2
3
  import { artifactTypes } from "@hypit/artifact";
3
- import { programSpaceTypes } from "@hypit/program-space";
4
+
4
5
  import { compositionTypes } from "@hypit/composition";
5
6
  import { sealGraphFragment } from "@hypit/elaborator";
6
7
  import { hyperframesProducers } from "@hypit/hyperframes";
@@ -17,14 +18,16 @@ export function createRenderHyperframesFragment(selectedRange = false) {
17
18
  return sealGraphFragment({
18
19
  inputs: [
19
20
  { name: "composition", type: compositionTypes.composition },
20
- { name: "space", type: programSpaceTypes.programSpace },
21
+ { name: "timeline", type: timelineTypes.track },
21
22
  ...(selectedRange ? [{ name: "range", type: mediaTypes.frameRange }] : []),
22
23
  ],
23
24
  operations: [
25
+ { id: "render-range", producer: timelineProducers.projectProgramSpace,
26
+ inputs: { track: input("timeline") }, result: { kind: "output", name: "space" } },
24
27
  {
25
28
  id: "compile-document",
26
29
  producer: hyperframesProducers.compile,
27
- inputs: { composition: input("composition"), space: input("space") },
30
+ inputs: { composition: input("composition"), space: operation("render-range") },
28
31
  result: { kind: "output", name: "document" },
29
32
  },
30
33
  {
@@ -36,7 +39,7 @@ export function createRenderHyperframesFragment(selectedRange = false) {
36
39
  {
37
40
  id: "compile-audio-program",
38
41
  producer: mediaPipelineProducers.planAudio,
39
- inputs: { composition: input("composition"), space: input("space") },
42
+ inputs: { composition: input("composition"), space: operation("render-range") },
40
43
  result: { kind: "output", name: "plan" },
41
44
  },
42
45
  {
@@ -2,7 +2,7 @@ import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
2
2
  import { artifactDependency, artifactTypes } from "@hypit/artifact";
3
3
  import { mediaDependency, mediaTypes } from "@hypit/media";
4
4
  import { compositionDependency, compositionTypes } from "@hypit/composition";
5
- import { semanticTrackDependency } from "@hypit/semantic-track";
5
+ import { timelineDependency } from "@hypit/timeline";
6
6
  import {
7
7
  hyperframesManifest,
8
8
  hyperframesModuleRef,
@@ -48,9 +48,9 @@ export const renderHyperframesMarkupSurfaces = [{
48
48
  { name: "video", type: artifactTypes.blob,
49
49
  summary: "The final muxed video Artifact, addressed as `<id>.video`." },
50
50
  ],
51
- example: '<render:Video id="final" composition={main.composition} semantic={speech.semantic}/>',
51
+ example: '<render:Video id="final" composition={main.composition} timeline={speech.timeline}/>',
52
52
  notes: [
53
- "Supply id, composition and one time source: semantic or space. Write both frame bounds to select a range. The element is empty.",
53
+ "Supply id, composition and timeline. Write both frame bounds to select a range. The element is empty.",
54
54
  "The visual render, the audio render and the mux are three separate Needs, each realized by a Provider this package does not choose.",
55
55
  "The published Artifact carries no duration or lineage metadata, so a consumer that needs stream facts requests explicit media inspection.",
56
56
  ],
@@ -66,7 +66,7 @@ export const renderHyperframesManifest: ModuleManifest = {
66
66
  artifactDependency,
67
67
  mediaDependency,
68
68
  compositionDependency,
69
- semanticTrackDependency,
69
+ timelineDependency,
70
70
  { module: hyperframesModuleRef },
71
71
  { module: mediaPipelineModuleRef },
72
72
  ],
@@ -1,4 +1,4 @@
1
- import { createTemporalSpace, resolveTemporalContext } from "@hypit/temporal-markup";
1
+ import { resolveTemporalContext } from "@hypit/temporal-markup";
2
2
  import { compositionTypes } from "@hypit/composition";
3
3
  import { mediaTypes, verifyMediaFrameRange } from "@hypit/media";
4
4
  import type {
@@ -25,7 +25,7 @@ function referenceAttribute(element: StructuredElement, name: string): string {
25
25
 
26
26
  export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
27
27
  const names = Object.keys(element.attributes).sort();
28
- if (names.some((name) => !["composition", "id", "semantic", "space", "start-frame", "end-frame-exclusive"].includes(name))) {
28
+ if (names.some((name) => !["composition", "id", "timeline", "start-frame", "end-frame-exclusive"].includes(name))) {
29
29
  throw new Error(`${element.name} contains unsupported attributes`);
30
30
  }
31
31
  if (element.children.some((child) => child.kind === "element" || child.value.trim().length > 0)) {
@@ -40,7 +40,7 @@ export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ eleme
40
40
  || composition.type.name !== compositionTypes.composition.name) {
41
41
  throw new Error(`${element.name}.composition must reference Composition`);
42
42
  }
43
- const time = createTemporalSpace({ id, element, ...resolveTemporalContext({ element, resolveReference }) });
43
+ const context = resolveTemporalContext({ element, resolveReference });
44
44
  const selected = element.attributes["start-frame"] !== undefined || element.attributes["end-frame-exclusive"] !== undefined;
45
45
  const frame = (name: string): number => {
46
46
  const text = stringAttribute(element, name);
@@ -53,13 +53,13 @@ export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ eleme
53
53
  const rangeId = `${id}.frame-range`;
54
54
  return {
55
55
  records: range === undefined ? [] : [{ id: rangeId, type: mediaTypes.frameRange, value: { kind: "inline", value: range }, range: element.range }],
56
- components: [...time.components, {
56
+ components: [{
57
57
  id,
58
58
  fragment: fragment.id,
59
- inputs: { composition: composition.ref, space: time.space.ref, ...(selected ? { range: { kind: "record" as const, id: rangeId } } : {}) },
59
+ inputs: { composition: composition.ref, timeline: context.timeline.ref, ...(selected ? { range: { kind: "record" as const, id: rangeId } } : {}) },
60
60
  outputs: { video: `${id}.video` },
61
61
  range: element.range,
62
62
  }],
63
- fragments: [...time.fragments, fragment],
63
+ fragments: [fragment],
64
64
  };
65
65
  };
@@ -7,7 +7,7 @@ The package defines the small ports used by a runtime:
7
7
  * `BuildStore` keeps one active Build definition and its accepted facts until the Result is saved and active state is removed.
8
8
  * `OperationStore` keeps asynchronous external work only while the owning Build is active.
9
9
  * `PendingBuildStore` owns the short submission transaction before the Build becomes active.
10
- * `BuildExecutionStore` owns active scheduling facts, a stop request, the immutable decision, attention and shared capacity reservations.
10
+ * `BuildExecutionStore` owns active scheduling facts, opaque Host execution choices, a stop request, the immutable decision, attention and shared capacity reservations.
11
11
  * `ResourceStore` is the transient byte gateway used during Provider execution.
12
12
  * `CredentialStore` resolves secrets outside source and build state.
13
13
  * `RuntimeCommandExecutor` turns the commands regenerated by Core into component or endpoint calls.
@@ -37,3 +37,10 @@ Capacity claims describe occupancy; action rate budgets describe admissions over
37
37
  Operation holds its declared occupancy while Runtime manages the remote task. Its submit, poll and
38
38
  collect actions can have separate concurrency and rate limits. Waiting claims park until a resource
39
39
  release or their next eligible time; polling does not require rematerializing the whole Build.
40
+
41
+ The local Host uses one code context per Build. `claim(owner, now, build)` limits an executor to its
42
+ own work; `start` records launch, and `interrupt` concludes a lost executor after its owner confirms
43
+ exit. These stores do not prescribe processes or module loading. They retain one active execution
44
+ record, while components and Providers remain ordinary replaceable implementations.
45
+ There is no turn-reclaim operation that makes a lost attempt runnable again. Result-writer ownership
46
+ can be cleared independently so an already decided outcome can still be saved.
@@ -10,7 +10,9 @@ export type BuildOutcome = "complete" | "failed" | "cancelled";
10
10
 
11
11
  export type BuildExecutionRequest = {
12
12
  readonly build: string;
13
- /** Installed component packages loaded when a Worker takes an execution turn. */
13
+ /** Host-owned execution choices. Opaque to the graph and Core. */
14
+ readonly context?: import("@hypit/protocol").CanonicalValue;
15
+ /** Installed component packages loaded when this execution context starts. */
14
16
  readonly componentPackages: readonly string[];
15
17
  /** Exact project Result Repository selected at submission. */
16
18
  readonly result: BuildResultRepositoryLocation;
@@ -48,6 +50,8 @@ export type BuildResultWriteLease = BuildExecutionTurn;
48
50
  */
49
51
  export type BuildExecutionSnapshot = BuildExecutionRequest & {
50
52
  readonly createdAt: number;
53
+ /** An execution context has been assigned; losing it ends this attempt. */
54
+ readonly startedAt?: number;
51
55
  /** Absent when waiting for a resource release. */
52
56
  readonly wakeAt?: number;
53
57
  /** Only these Operations can advance the Build until their next outcome. */
@@ -79,10 +83,14 @@ export type BuildExecutionStore = {
79
83
  create(request: BuildExecutionRequest, options?: { readonly now?: number }): Promise<BuildExecutionSnapshot>;
80
84
  read(build: string): Promise<BuildExecutionSnapshot | undefined>;
81
85
  list(): Promise<readonly BuildExecutionSnapshot[]>;
86
+ /** Lightweight scheduling views; no Definition, Profile or Operation payloads are loaded. */
87
+ listUnstarted(): Promise<readonly string[]>;
88
+ listReady(now?: number): Promise<readonly string[]>;
82
89
  /** Atomically take one ready, undecided execution turn for this Worker owner. */
83
- claim(owner: string, now?: number): Promise<BuildExecutionSnapshot | undefined>;
84
- /** A new owning Worker clears turns left by the previous process; no external action is repeated here. */
85
- reclaimTurns(now?: number): Promise<readonly string[]>;
90
+ claim(owner: string, now?: number, build?: string): Promise<BuildExecutionSnapshot | undefined>;
91
+ start(build: string, now?: number): Promise<BuildExecutionSnapshot>;
92
+ /** Conclude after the owner confirms this execution context has ended. Never repeats external work. */
93
+ interrupt(build: string, reason: string): Promise<BuildExecutionSnapshot>;
86
94
  /** An unobserved stop wakes the next turn immediately to finish the attempt. */
87
95
  releaseTurn(build: string, owner: string, wakeAt: number | undefined, operationWait?: readonly string[]): Promise<BuildExecutionSnapshot>;
88
96
  /** Freeze the one conclusion. An execution with a decision can never be claimed again. */
@@ -106,6 +114,8 @@ export type CommandExecutionReceipt = {
106
114
  readonly command: string;
107
115
  readonly status: "started" | "completed";
108
116
  readonly event?: CommandResult;
117
+ /** Current Provider-reported activity; discarded when this call completes. */
118
+ readonly activity?: { readonly endpoint: string; readonly progress: import("./operations.js").OperationProgress };
109
119
  };
110
120
 
111
121
  export type CommandExecutionBegin = {
@@ -119,6 +129,7 @@ export type CommandExecutionBegin = {
119
129
  */
120
130
  export type CommandExecutionStore = {
121
131
  begin(build: string, command: string): Promise<CommandExecutionBegin>;
132
+ reportProgress(build: string, command: string, activity: NonNullable<CommandExecutionReceipt["activity"]>): Promise<void>;
122
133
  complete(build: string, command: string, event: CommandResult): Promise<CommandExecutionReceipt>;
123
134
  list(build: string): Promise<readonly CommandExecutionReceipt[]>;
124
135
  removeBuild(build: string): Promise<void>;
@@ -14,7 +14,6 @@ export type * from "./capacity.js";
14
14
  export { capacityUnits } from "./capacity.js";
15
15
  export { buildExecutionActivity } from "./execution.js";
16
16
  export type * from "./execution.js";
17
- export type * from "./environment.js";
18
17
  export type * from "./operations.js";
19
18
  export { LocalBuildScheduler } from "./scheduler.js";
20
19
  export type * from "./submission.js";
@@ -22,3 +21,5 @@ export {
22
21
  isStreamingResourceStore,
23
22
  } from "./types.js";
24
23
  export type * from "./types.js";
24
+ export type * from "./log.js";
25
+ export { readExecutionLog } from "./log.js";
@@ -0,0 +1,51 @@
1
+ /** Provider-authored diagnostic text suitable for users; never credentials or request bodies. */
2
+ export type ExecutionDiagnostic = {
3
+ readonly level: "info" | "warning" | "error";
4
+ readonly message: string;
5
+ readonly stream?: "stdout" | "stderr";
6
+ };
7
+
8
+ export type ExecutionLogEvent = { readonly endpoint: string } & (
9
+ | { readonly kind: "started" | "completed" }
10
+ | { readonly kind: "failed"; readonly message: string }
11
+ | { readonly kind: "phase"; readonly phase: string }
12
+ | ({ readonly kind: "diagnostic" } & ExecutionDiagnostic)
13
+ );
14
+
15
+ export type ExecutionLogRecord = ExecutionLogEvent & {
16
+ readonly format: "hypit.execution-log@1";
17
+ readonly time: number;
18
+ readonly command: string;
19
+ };
20
+
21
+ export type ExecutionLogView = {
22
+ readonly records: readonly ExecutionLogRecord[];
23
+ readonly total: number;
24
+ };
25
+
26
+ /** Read a bounded tail without loading the whole log. Storage and transport remain caller-owned. */
27
+ export async function readExecutionLog(chunks: AsyncIterable<Uint8Array>, limit: number): Promise<ExecutionLogView> {
28
+ if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("Log line count must be a positive integer");
29
+ const decoder = new TextDecoder();
30
+ const records: ExecutionLogRecord[] = [];
31
+ let pending = "";
32
+ let total = 0;
33
+ const consume = (line: string) => {
34
+ if (!line.trim()) return;
35
+ const record = JSON.parse(line) as ExecutionLogRecord;
36
+ if (record.format !== "hypit.execution-log@1") throw new Error("Unsupported execution log format");
37
+ records[total % limit] = record;
38
+ total++;
39
+ };
40
+ for await (const chunk of chunks) {
41
+ pending += decoder.decode(chunk, { stream: true });
42
+ let newline: number;
43
+ while ((newline = pending.indexOf("\n")) >= 0) {
44
+ consume(pending.slice(0, newline));
45
+ pending = pending.slice(newline + 1);
46
+ }
47
+ }
48
+ // A running writer may still be appending its last record; only complete lines are visible.
49
+ const offset = total > limit ? total % limit : 0;
50
+ return { records: [...records.slice(offset), ...records.slice(0, offset)], total };
51
+ }
@@ -25,13 +25,6 @@ export type RuntimeRunnableCommand = {
25
25
 
26
26
  export type RuntimeResourceClaim = import("./capacity.js").CapacityResourceClaim;
27
27
 
28
- export type RuntimeWorkerRunOptions = {
29
- readonly idlePollMs: number;
30
- readonly signal?: AbortSignal;
31
- /** Called after abandoned work is claimable and immediately before the claim loop starts. */
32
- readonly ready?: () => void | Promise<void>;
33
- };
34
-
35
28
  export type RuntimePreparation = {
36
29
  readonly state: BuildState;
37
30
  readonly runnable: readonly RuntimeRunnableCommand[];
@@ -41,6 +34,10 @@ export type RuntimePreparation = {
41
34
  export type RuntimeExecutionContext = {
42
35
  /** Stable Run-local identity; two identical BuildRequests may still be distinct Builds. */
43
36
  readonly build: string;
37
+ /** Observational activity of this call; it never changes scheduling or Core facts. */
38
+ readonly reportProgress?: (activity: NonNullable<import("./execution.js").CommandExecutionReceipt["activity"]>) => Promise<void>;
39
+ /** Execution evidence; the Runtime owns persistence. Implementations keep logging failures out of Provider outcomes. */
40
+ readonly recordExecution?: (event: import("./log.js").ExecutionLogEvent) => Promise<void>;
44
41
  /** Release only the asynchronous Operation's occupancy after its remote end is confirmed. */
45
42
  readonly releaseOperationCapacity?: () => Promise<void>;
46
43
  };
@@ -72,7 +69,7 @@ export type RuntimeCommandExecutor = {
72
69
  state: BuildState,
73
70
  operation: OperationSnapshot,
74
71
  ): Promise<OperationSnapshot>;
75
- advanceOperation?(operation: OperationSnapshot): Promise<OperationSnapshot>;
72
+ advanceOperation?(operation: OperationSnapshot, context?: RuntimeExecutionContext): Promise<OperationSnapshot>;
76
73
  /** Validate an already received result without invoking a Producer or contacting an Endpoint. */
77
74
  acceptOperation?(state: BuildState, operation: OperationSnapshot): Promise<CommandResult | undefined>;
78
75
  };
@@ -23,3 +23,33 @@ over a graph state, deterministic Producers, validators and temporary Resources;
23
23
  Endpoint selection, handlers and concurrency for that disposable session private and returns the evaluated
24
24
  state. This is an execution boundary, not a second Runtime Profile, Build type, cross-Build scheduler or
25
25
  preview registry.
26
+
27
+ `RuntimeHostControl.logs(build, lines)` optionally exposes a bounded tail of active Build evidence.
28
+ Finished logs belong to `BuildResultManifest.executionLog` and are read through the project's Repository;
29
+ reading a finished log needs no Runtime or execution Provider. Runtime process logs keep their separate
30
+ process-control operation.
31
+
32
+ `prepare`, `preflight`, `doctor` and Program lifecycle operations accept explicit Endpoint instance
33
+ names. Build preflight uses resolved Endpoints, not every Provider offering the capability. Omitting
34
+ a scope retains whole-Profile inspection or preparation.
35
+
36
+ `prepareHostPackages` keeps exact releases in separate ordinary npm installations below the Host
37
+ package home. `HostPackageProgress.logPath` identifies live and retained npm output; failures include
38
+ that path. npm owns each installation's dependency tree and lockfile. No parallel package inventory is
39
+ maintained. `RuntimeInvocationObservation` passes direct-call progress and diagnostics through the
40
+ same Provider callbacks used in Builds, without giving immediate calls durable Operation semantics.
41
+
42
+ ## Execution choices and lifetime
43
+
44
+ `createRuntime({ endpoints })` scopes a submission to the selected Endpoint instances. The local Host
45
+ records those choices and its project package root with the active execution request. Its long-lived
46
+ Worker supervises carriers with independent per-Build module and registry contexts. Managed
47
+ Programs remain independently warm. `runWorker` accepts an internal carrier entry point; execution
48
+ readiness and Endpoint capacity are independent of the number of unfinished Builds. Other Hosts own
49
+ their choice of code-loading and physical execution mechanisms.
50
+
51
+ Submission clients use `const controller = await host.controller(); await controller.worker.up()`
52
+ to start execution, then `const runtime = await host.createRuntime(); await runtime.build(request)`
53
+ to submit work. `RuntimeHostExecution` does not run a second embedded Worker loop. A local carrier
54
+ may stop accepting new Builds and drain; its assigned Builds stay in place and all carriers continue
55
+ using the same resource accounting. Process policy belongs to the local Runtime, not this Host ABI.
@@ -11,6 +11,7 @@
11
11
  "@hypit/build-result": "workspace:*",
12
12
  "@hypit/build-result-kit": "workspace:*",
13
13
  "@hypit/driver-node": "workspace:*",
14
+ "@hypit/package-loader-node": "workspace:*",
14
15
  "@hypit/protocol": "workspace:*",
15
16
  "@hypit/runtime": "workspace:*",
16
17
  "@hypit/runtime-kit": "workspace:*",