@hypit/hypit 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/README.md +4 -2
  2. package/dist/public/caption.d.ts +206 -183
  3. package/dist/public/composition.d.ts +25 -3
  4. package/dist/public/endpoint-kit.d.ts +24 -2
  5. package/dist/public/generation.d.ts +5 -1
  6. package/dist/public/hyperframes.d.ts +19 -1
  7. package/dist/public/narrative.d.ts +17 -3
  8. package/dist/public/performance.d.ts +1590 -0
  9. package/dist/public/program-space.d.ts +179 -32
  10. package/dist/public/runtime-kit.d.ts +21 -8
  11. package/dist/public/sound.d.ts +822 -0
  12. package/dist/public/speech.d.ts +41 -0
  13. package/dist/public/studio-adapter.d.ts +77 -15
  14. package/dist/public/temporal-markup.d.ts +9 -44
  15. package/dist/public/temporal.d.ts +37 -28
  16. package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
  17. package/examples/README.md +18 -10
  18. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
  19. package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
  20. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
  21. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
  22. package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
  23. package/examples/provider-package/README.md +78 -0
  24. package/examples/provider-package/hypit.runtime.json +12 -0
  25. package/examples/provider-package/packages/provider-images/package.json +11 -0
  26. package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
  27. package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
  28. package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
  29. package/examples/semantic-composition/README.md +6 -0
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  32. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  33. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  34. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  35. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  36. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  39. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  40. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  41. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  42. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  43. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  44. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  45. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  47. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  48. package/package.json +32 -15
  49. package/packages/audio-track/README.md +20 -13
  50. package/packages/audio-track/package.json +1 -1
  51. package/packages/audio-track/src/component.ts +4 -4
  52. package/packages/audio-track/src/fragment.ts +6 -5
  53. package/packages/audio-track/src/index.ts +1 -1
  54. package/packages/audio-track/src/manifest.ts +17 -16
  55. package/packages/audio-track/src/program.ts +21 -25
  56. package/packages/audio-track/src/surface.ts +19 -18
  57. package/packages/audio-track-studio/README.md +23 -0
  58. package/packages/audio-track-studio/src/index.ts +28 -17
  59. package/packages/author-kit/README.md +1 -1
  60. package/packages/background-removal/README.md +4 -7
  61. package/packages/browser-capture/package.json +1 -1
  62. package/packages/build-result/README.md +11 -0
  63. package/packages/build-result/src/decode.ts +2 -0
  64. package/packages/build-result/src/execution-log.ts +17 -0
  65. package/packages/build-result/src/index.ts +1 -0
  66. package/packages/build-result/src/store.ts +14 -1
  67. package/packages/build-result/src/types.ts +3 -0
  68. package/packages/build-result-s3/src/repository.ts +4 -0
  69. package/packages/caption/README.md +61 -73
  70. package/packages/caption/package.json +3 -2
  71. package/packages/caption/src/activation.ts +2 -2
  72. package/packages/caption/src/component.ts +20 -5
  73. package/packages/caption/src/display.ts +3 -18
  74. package/packages/caption/src/fragment.ts +3 -7
  75. package/packages/caption/src/index.ts +6 -5
  76. package/packages/caption/src/manifest.ts +29 -46
  77. package/packages/caption/src/style.ts +24 -135
  78. package/packages/caption/src/surface.ts +12 -92
  79. package/packages/caption/src/temporalize.ts +18 -53
  80. package/packages/caption/src/types.ts +8 -35
  81. package/packages/caption/src/visibility.ts +23 -0
  82. package/packages/caption-fine/README.md +14 -9
  83. package/packages/caption-fine/package.json +4 -2
  84. package/packages/caption-fine/src/component.ts +3 -3
  85. package/packages/caption-fine/src/fragment.ts +7 -19
  86. package/packages/caption-fine/src/index.ts +2 -0
  87. package/packages/caption-fine/src/manifest.ts +26 -17
  88. package/packages/caption-fine/src/recipe.ts +7 -0
  89. package/packages/caption-fine/src/render.ts +14 -13
  90. package/packages/caption-fine/src/schedule.ts +39 -35
  91. package/packages/caption-fine/src/style.ts +10 -9
  92. package/packages/caption-fine/src/surface.ts +62 -35
  93. package/packages/caption-fine/src/types.ts +2 -0
  94. package/packages/caption-fine-studio/README.md +24 -2
  95. package/packages/caption-fine-studio/package.json +3 -1
  96. package/packages/caption-fine-studio/src/activation.ts +3 -3
  97. package/packages/caption-fine-studio/src/index.ts +54 -42
  98. package/packages/cli/README.md +57 -4
  99. package/packages/cli/package.json +1 -0
  100. package/packages/cli/src/arguments.ts +25 -6
  101. package/packages/cli/src/build-planning.ts +3 -2
  102. package/packages/cli/src/command.ts +6 -0
  103. package/packages/cli/src/commands/environment.ts +28 -18
  104. package/packages/cli/src/commands/execution.ts +81 -26
  105. package/packages/cli/src/commands/results.ts +7 -11
  106. package/packages/cli/src/index.ts +2 -2
  107. package/packages/cli/src/machine-view.ts +3 -2
  108. package/packages/cli/src/main.ts +34 -42
  109. package/packages/cli/src/observation.ts +7 -1
  110. package/packages/cli/src/output.ts +65 -23
  111. package/packages/cli/src/view.ts +64 -18
  112. package/packages/comment-sticker/README.md +3 -3
  113. package/packages/comment-sticker/package.json +1 -1
  114. package/packages/comment-sticker/src/component.ts +4 -4
  115. package/packages/comment-sticker/src/fragment.ts +5 -4
  116. package/packages/comment-sticker/src/manifest.ts +7 -6
  117. package/packages/comment-sticker/src/program.ts +9 -9
  118. package/packages/comment-sticker/src/surface.ts +6 -7
  119. package/packages/composition/README.md +21 -0
  120. package/packages/composition/src/audio-presentation.ts +44 -0
  121. package/packages/composition/src/index.ts +3 -0
  122. package/packages/composition/src/schema.ts +8 -3
  123. package/packages/composition/src/track.ts +15 -1
  124. package/packages/credential-store-env/README.md +1 -1
  125. package/packages/deck-track/README.md +3 -3
  126. package/packages/deck-track/package.json +1 -1
  127. package/packages/deck-track/src/component.ts +5 -5
  128. package/packages/deck-track/src/fragment.ts +6 -5
  129. package/packages/deck-track/src/lower.ts +12 -12
  130. package/packages/deck-track/src/manifest.ts +8 -7
  131. package/packages/deck-track/src/program.ts +13 -16
  132. package/packages/deck-track/src/surface.ts +9 -10
  133. package/packages/driver-node/src/driver.ts +41 -3
  134. package/packages/elevenlabs-speech/README.md +27 -0
  135. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  136. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  137. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  138. package/packages/elevenlabs-speech/src/index.ts +111 -0
  139. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  140. package/packages/endpoint-kit/README.md +24 -0
  141. package/packages/endpoint-kit/src/index.ts +7 -1
  142. package/packages/film/README.md +12 -7
  143. package/packages/film/package.json +1 -1
  144. package/packages/film/src/component.ts +4 -4
  145. package/packages/film/src/fragment.ts +6 -5
  146. package/packages/film/src/manifest.ts +11 -10
  147. package/packages/film/src/program.ts +5 -5
  148. package/packages/film/src/recipe.ts +2 -1
  149. package/packages/film/src/surface.ts +6 -6
  150. package/packages/film-studio/package.json +1 -1
  151. package/packages/film-studio/src/index.ts +2 -2
  152. package/packages/fishaudio-speech/README.md +33 -0
  153. package/packages/fishaudio-speech/package.json +21 -0
  154. package/packages/fishaudio-speech/src/activation.ts +32 -0
  155. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  156. package/packages/fishaudio-speech/src/index.ts +156 -0
  157. package/packages/fishaudio-speech/src/surface.ts +192 -0
  158. package/packages/generation/README.md +11 -1
  159. package/packages/generation/src/mapping.ts +28 -30
  160. package/packages/gpt-image/README.md +1 -2
  161. package/packages/grok-imagine/README.md +1 -2
  162. package/packages/hyperframes/README.md +7 -3
  163. package/packages/hyperframes/src/browser-program.ts +11 -2
  164. package/packages/hyperframes/src/document.ts +15 -2
  165. package/packages/interview-emoji-reveal/README.md +4 -4
  166. package/packages/interview-emoji-reveal/package.json +1 -1
  167. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  168. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  169. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  170. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  171. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  172. package/packages/media-execution/README.md +7 -3
  173. package/packages/media-execution/src/audio-presentation.ts +23 -0
  174. package/packages/media-execution/src/execute.ts +2 -0
  175. package/packages/media-pipeline/README.md +7 -3
  176. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  177. package/packages/media-pipeline/src/component.ts +16 -2
  178. package/packages/media-pipeline/src/manifest.ts +3 -1
  179. package/packages/media-pipeline/src/types.ts +2 -1
  180. package/packages/media-track/README.md +14 -47
  181. package/packages/media-track/package.json +1 -1
  182. package/packages/media-track/preview/preview.svml +5 -5
  183. package/packages/media-track/src/author.ts +12 -6
  184. package/packages/media-track/src/component.ts +10 -16
  185. package/packages/media-track/src/fragment.ts +8 -7
  186. package/packages/media-track/src/index.ts +3 -1
  187. package/packages/media-track/src/lower.ts +7 -7
  188. package/packages/media-track/src/manifest.ts +16 -38
  189. package/packages/media-track/src/program.ts +62 -67
  190. package/packages/media-track/src/sampling.ts +6 -6
  191. package/packages/media-track/src/sequence.ts +8 -8
  192. package/packages/media-track/src/surface.ts +25 -43
  193. package/packages/media-track-studio/README.md +9 -0
  194. package/packages/media-track-studio/src/index.ts +16 -11
  195. package/packages/mimo-speech/README.md +1 -1
  196. package/packages/minimax-h3/README.md +1 -1
  197. package/packages/nano-banana/README.md +1 -1
  198. package/packages/narrative/README.md +23 -1
  199. package/packages/narrative/src/identity.ts +11 -0
  200. package/packages/narrative/src/index.ts +3 -0
  201. package/packages/narrative/src/schema.ts +28 -27
  202. package/packages/narrative/src/selection.ts +52 -0
  203. package/packages/narrative/src/types.ts +2 -0
  204. package/packages/package-loader-node/README.md +30 -0
  205. package/packages/package-loader-node/package.json +5 -2
  206. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  207. package/packages/package-loader-node/src/index.ts +1 -0
  208. package/packages/package-loader-node/src/loader.ts +12 -15
  209. package/packages/package-loader-node/src/location.ts +27 -1
  210. package/packages/package-loader-node/src/module-scope.ts +183 -0
  211. package/packages/package-loader-node/src/types.ts +4 -0
  212. package/packages/performance/README.md +83 -0
  213. package/packages/performance/package.json +30 -0
  214. package/packages/performance/src/activation.ts +11 -0
  215. package/packages/performance/src/component.ts +46 -0
  216. package/packages/performance/src/index.ts +6 -0
  217. package/packages/performance/src/manifest.ts +53 -0
  218. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  219. package/packages/performance/src/program.ts +51 -0
  220. package/packages/performance/src/style.ts +35 -0
  221. package/packages/performance/src/surface.ts +99 -0
  222. package/packages/performance-studio/README.md +25 -0
  223. package/packages/performance-studio/package.json +21 -0
  224. package/packages/performance-studio/src/activation.ts +6 -0
  225. package/packages/performance-studio/src/index.ts +84 -0
  226. package/packages/program-space/README.md +9 -18
  227. package/packages/program-space/src/activation.ts +1 -5
  228. package/packages/program-space/src/index.ts +2 -11
  229. package/packages/program-space/src/surface.ts +1 -20
  230. package/packages/project-context-node/README.md +20 -0
  231. package/packages/project-context-node/package.json +10 -0
  232. package/packages/project-context-node/src/index.ts +3 -0
  233. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  234. package/packages/provider-hyperframes-local/README.md +43 -15
  235. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  236. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  237. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  238. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  239. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  240. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  241. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  242. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  243. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  244. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  245. package/packages/provider-hypihub/README.md +48 -17
  246. package/packages/provider-hypihub/package.json +2 -0
  247. package/packages/provider-hypihub/src/mapping.ts +31 -7
  248. package/packages/provider-hypihub/src/oauth.ts +6 -0
  249. package/packages/provider-hypihub/src/provider.ts +25 -13
  250. package/packages/provider-hypihub/src/routes.ts +1 -2
  251. package/packages/provider-hypihub/src/upload.ts +2 -0
  252. package/packages/provider-media-local/README.md +3 -4
  253. package/packages/provider-whisperx-local/src/program.ts +1 -0
  254. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  255. package/packages/ranking/README.md +8 -6
  256. package/packages/ranking/package.json +1 -1
  257. package/packages/ranking/src/component.ts +6 -6
  258. package/packages/ranking/src/fragment.ts +11 -7
  259. package/packages/ranking/src/manifest.ts +21 -14
  260. package/packages/ranking/src/render.ts +22 -26
  261. package/packages/ranking/src/schedule.ts +16 -19
  262. package/packages/ranking/src/surface.ts +12 -13
  263. package/packages/ranking-studio/README.md +18 -0
  264. package/packages/ranking-studio/src/index.ts +61 -9
  265. package/packages/render-hyperframes/README.md +7 -7
  266. package/packages/render-hyperframes/package.json +1 -1
  267. package/packages/render-hyperframes/src/component.ts +11 -1
  268. package/packages/render-hyperframes/src/fragment.ts +7 -4
  269. package/packages/render-hyperframes/src/manifest.ts +4 -4
  270. package/packages/render-hyperframes/src/surface.ts +6 -6
  271. package/packages/runtime/README.md +8 -1
  272. package/packages/runtime/src/execution.ts +15 -4
  273. package/packages/runtime/src/index.ts +2 -1
  274. package/packages/runtime/src/log.ts +51 -0
  275. package/packages/runtime/src/types.ts +5 -8
  276. package/packages/runtime-host-node/README.md +30 -0
  277. package/packages/runtime-host-node/package.json +1 -0
  278. package/packages/runtime-host-node/src/index.ts +24 -9
  279. package/packages/runtime-host-node/src/packages.ts +47 -50
  280. package/packages/runtime-kit/README.md +5 -0
  281. package/packages/runtime-kit/src/index.ts +3 -1
  282. package/packages/runtime-local/README.md +92 -4
  283. package/packages/runtime-local/src/config.ts +202 -56
  284. package/packages/runtime-local/src/control.ts +9 -1
  285. package/packages/runtime-local/src/executor.ts +66 -0
  286. package/packages/runtime-local/src/host.ts +37 -17
  287. package/packages/runtime-local/src/log.ts +48 -0
  288. package/packages/runtime-local/src/programs.ts +2 -1
  289. package/packages/runtime-local/src/result-writer.ts +2 -0
  290. package/packages/runtime-local/src/runtime.ts +8 -6
  291. package/packages/runtime-local/src/supervisor.ts +142 -0
  292. package/packages/runtime-local/src/types.ts +9 -2
  293. package/packages/runtime-local/src/worker-process.ts +7 -24
  294. package/packages/runtime-local/src/worker.ts +55 -83
  295. package/packages/screen-overlay/README.md +3 -3
  296. package/packages/screen-overlay/package.json +1 -1
  297. package/packages/screen-overlay/src/component.ts +3 -3
  298. package/packages/screen-overlay/src/fragment.ts +5 -4
  299. package/packages/screen-overlay/src/manifest.ts +7 -6
  300. package/packages/screen-overlay/src/program.ts +9 -9
  301. package/packages/screen-overlay/src/surface.ts +6 -7
  302. package/packages/script/README.md +15 -2
  303. package/packages/script/src/manifest.ts +2 -2
  304. package/packages/script/src/narrative.ts +1 -0
  305. package/packages/script/src/surface.ts +4 -3
  306. package/packages/script/src/types.ts +1 -1
  307. package/packages/script-studio/package.json +9 -3
  308. package/packages/script-studio/src/index.ts +2 -0
  309. package/packages/script-studio/src/projection.ts +105 -0
  310. package/packages/seedance/README.md +30 -1
  311. package/packages/seedance/src/index.ts +18 -7
  312. package/packages/seedance/src/surface.ts +17 -4
  313. package/packages/seedance-kits/README.md +7 -1
  314. package/packages/seedream/README.md +1 -1
  315. package/packages/sound/README.md +81 -0
  316. package/packages/sound/package.json +25 -0
  317. package/packages/sound/src/activation.ts +11 -0
  318. package/packages/sound/src/component.ts +28 -0
  319. package/packages/sound/src/index.ts +5 -0
  320. package/packages/sound/src/manifest.ts +47 -0
  321. package/packages/sound/src/program.ts +84 -0
  322. package/packages/sound/src/style.ts +34 -0
  323. package/packages/sound/src/surface.ts +90 -0
  324. package/packages/sound-studio/README.md +22 -0
  325. package/packages/sound-studio/package.json +20 -0
  326. package/packages/sound-studio/src/activation.ts +6 -0
  327. package/packages/sound-studio/src/index.ts +74 -0
  328. package/packages/speech/README.md +2 -2
  329. package/packages/speech-alignment/src/local.ts +8 -0
  330. package/packages/speech-alignment/src/locate.ts +1 -1
  331. package/packages/store-sqlite/README.md +7 -0
  332. package/packages/store-sqlite/src/store.ts +84 -83
  333. package/packages/studio/INSPECTOR.md +15 -2
  334. package/packages/studio/README.md +88 -14
  335. package/packages/studio/package.json +8 -7
  336. package/packages/studio/src/companion-assembly.ts +1 -0
  337. package/packages/studio/src/domain.ts +1 -1
  338. package/packages/studio/src/fallback-companions.ts +3 -3
  339. package/packages/studio/src/feedback-server.ts +51 -0
  340. package/packages/studio/src/feedback-store.ts +66 -0
  341. package/packages/studio/src/feedback.ts +60 -0
  342. package/packages/studio/src/parameter-values.ts +43 -1
  343. package/packages/studio/src/parameters.ts +114 -24
  344. package/packages/studio/src/preview/render.ts +5 -1
  345. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  346. package/packages/studio/src/programme.ts +14 -30
  347. package/packages/studio/src/server.ts +10 -6
  348. package/packages/studio/src/shared.ts +4 -2
  349. package/packages/studio/src/snapshot.ts +21 -132
  350. package/packages/studio/src/studio-preflight.ts +3 -3
  351. package/packages/studio/src/studio-registry.ts +50 -6
  352. package/packages/studio/src/style.css +209 -48
  353. package/packages/studio/src/ui/comments.ts +233 -0
  354. package/packages/studio/src/ui/icons.ts +5 -0
  355. package/packages/studio/src/ui/main.ts +145 -86
  356. package/packages/studio/src/ui/overlay.ts +12 -8
  357. package/packages/studio/src/ui/scrub-preview.ts +108 -0
  358. package/packages/studio/src/ui/stage.ts +67 -4
  359. package/packages/studio/src/ui/timeline.ts +177 -108
  360. package/packages/studio/start.ts +4 -2
  361. package/packages/studio-adapter/README.md +130 -11
  362. package/packages/studio-adapter/src/index.ts +100 -13
  363. package/packages/temporal/README.md +6 -6
  364. package/packages/temporal/package.json +1 -1
  365. package/packages/temporal/src/component.ts +5 -6
  366. package/packages/temporal/src/index.ts +8 -6
  367. package/packages/temporal/src/location.ts +11 -11
  368. package/packages/temporal/src/projection.ts +19 -19
  369. package/packages/temporal/src/rational.ts +4 -4
  370. package/packages/temporal-markup/EDITING.md +2 -2
  371. package/packages/temporal-markup/README.md +27 -11
  372. package/packages/temporal-markup/package.json +1 -1
  373. package/packages/temporal-markup/src/index.ts +20 -25
  374. package/packages/temporal-markup/src/space.ts +10 -41
  375. package/packages/timeline/README.md +31 -0
  376. package/packages/{semantic-track → timeline}/package.json +1 -1
  377. package/packages/timeline/src/activation.ts +8 -0
  378. package/packages/timeline/src/component.ts +24 -0
  379. package/packages/timeline/src/identity.ts +60 -0
  380. package/packages/timeline/src/index.ts +6 -0
  381. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  382. package/packages/timeline/src/manifest.ts +39 -0
  383. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  384. package/packages/timeline/src/types.ts +24 -0
  385. package/packages/timeline-author/README.md +68 -0
  386. package/packages/{speech-track → timeline-author}/package.json +6 -4
  387. package/packages/timeline-author/src/activation.ts +22 -0
  388. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  389. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  390. package/packages/timeline-author/src/index.ts +7 -0
  391. package/packages/timeline-author/src/manifest.ts +78 -0
  392. package/packages/timeline-author/src/program.ts +107 -0
  393. package/packages/timeline-author/src/surface.ts +46 -0
  394. package/packages/timeline-author/src/types.ts +6 -0
  395. package/packages/typography-track/README.md +4 -4
  396. package/packages/typography-track/package.json +1 -1
  397. package/packages/typography-track/src/component.ts +4 -4
  398. package/packages/typography-track/src/fragment.ts +4 -3
  399. package/packages/typography-track/src/manifest.ts +11 -9
  400. package/packages/typography-track/src/program.ts +15 -15
  401. package/packages/typography-track/src/surface.ts +17 -18
  402. package/packages/video-cli/README.md +4 -1
  403. package/packages/video-cli/package.json +2 -1
  404. package/packages/video-cli/src/creation.ts +14 -4
  405. package/packages/video-cli/src/index.ts +1 -1
  406. package/packages/video-cli/src/studio-distribution.ts +2 -1
  407. package/packages/volcengine-matting/README.md +3 -3
  408. package/packages/whisperx/README.md +1 -1
  409. package/services/whisperx/README.md +14 -0
  410. package/services/whisperx/pyproject.toml +2 -0
  411. package/services/whisperx/uv.lock +20 -20
  412. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  413. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  414. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  415. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  416. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  417. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  418. package/packages/provider-kie/README.md +0 -134
  419. package/packages/provider-kie/package.json +0 -43
  420. package/packages/provider-kie/src/activation.ts +0 -71
  421. package/packages/provider-kie/src/index.ts +0 -10
  422. package/packages/provider-kie/src/mapping.ts +0 -182
  423. package/packages/provider-kie/src/provider.ts +0 -657
  424. package/packages/provider-kie/src/routes.ts +0 -150
  425. package/packages/provider-xiaomi-mimo/README.md +0 -32
  426. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  427. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  428. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  429. package/packages/runtime/src/environment.ts +0 -6
  430. package/packages/semantic-track/README.md +0 -21
  431. package/packages/semantic-track/src/activation.ts +0 -8
  432. package/packages/semantic-track/src/component.ts +0 -24
  433. package/packages/semantic-track/src/identity.ts +0 -58
  434. package/packages/semantic-track/src/index.ts +0 -6
  435. package/packages/semantic-track/src/manifest.ts +0 -38
  436. package/packages/semantic-track/src/types.ts +0 -26
  437. package/packages/speech-track/README.md +0 -51
  438. package/packages/speech-track/src/activation.ts +0 -19
  439. package/packages/speech-track/src/index.ts +0 -7
  440. package/packages/speech-track/src/manifest.ts +0 -73
  441. package/packages/speech-track/src/program.ts +0 -64
  442. package/packages/speech-track/src/surface.ts +0 -35
  443. package/packages/speech-track/src/types.ts +0 -6
  444. package/packages/speech-track-studio/README.md +0 -3
  445. package/packages/speech-track-studio/package.json +0 -14
  446. package/packages/speech-track-studio/src/activation.ts +0 -7
  447. package/packages/speech-track-studio/src/index.ts +0 -40
  448. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  449. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -1,5 +1,4 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { setImmediate } from "node:timers/promises";
3
2
  import type { BuildState } from "@hypit/protocol";
4
3
  import type {
5
4
  ResourceStore,
@@ -10,12 +9,13 @@ import type {
10
9
  RuntimePreparation,
11
10
  RuntimeRunnableCommand,
12
11
  ScheduledBuildResult,
13
- RuntimeWorkerRunOptions,
14
12
  } from "@hypit/runtime";
15
13
  import { LocalBuildScheduler } from "@hypit/runtime";
16
14
  import { BuildMachine } from "@hypit/core";
17
15
 
18
16
  type LocalWorkerOptions = {
17
+ readonly executionBuild?: string;
18
+ readonly executionLogs?: import("./log.js").LocalExecutionLogs;
19
19
  readonly stores: {
20
20
  readonly builds: import("@hypit/runtime").BuildStore;
21
21
  readonly operations: import("@hypit/runtime").OperationStore;
@@ -25,7 +25,6 @@ type LocalWorkerOptions = {
25
25
  readonly resourceStore: ResourceStore;
26
26
  readonly resourceStoreForBuild?: (build: string) => ResourceStore;
27
27
  readonly openBuildResultRepository: NonNullable<import("./types.js").CreateLocalRuntimeOptions["openBuildResultRepository"]>;
28
- readonly assertEnvironment?: () => Promise<void> | void;
29
28
  readonly installComponentPackages: (specifiers: readonly string[]) => Promise<void>;
30
29
  readonly resultWriter: import("./types.js").LocalResultWriter;
31
30
  };
@@ -36,28 +35,6 @@ function assert(condition: unknown, message: string): asserts condition {
36
35
  if (!condition) throw new Error(message);
37
36
  }
38
37
 
39
- function positive(value: number, subject: string): number {
40
- assert(Number.isSafeInteger(value) && value > 0, `${subject} must be a positive safe integer`);
41
- return value;
42
- }
43
-
44
- async function pause(ms: number, signal?: AbortSignal): Promise<void> {
45
- if (signal?.aborted === true) throw signal.reason ?? new Error("Worker stopped");
46
- await new Promise<void>((resolve, reject) => {
47
- const done = (): void => {
48
- signal?.removeEventListener("abort", abort);
49
- resolve();
50
- };
51
- const timer = setTimeout(done, ms);
52
- const abort = (): void => {
53
- clearTimeout(timer);
54
- signal?.removeEventListener("abort", abort);
55
- reject(signal?.reason ?? new Error("Worker stopped"));
56
- };
57
- signal?.addEventListener("abort", abort, { once: true });
58
- });
59
- }
60
-
61
38
  /** Shares declared capacity across independently advancing Builds. */
62
39
  class CapacityExecutor implements RuntimeCommandExecutor {
63
40
  readonly #delegate: RuntimeCommandExecutor;
@@ -87,9 +64,13 @@ class CapacityExecutor implements RuntimeCommandExecutor {
87
64
  context: { readonly build: string },
88
65
  ): Promise<RuntimeExecutionResult> {
89
66
  const store = this.#options.stores.executions;
67
+ const recordExecution = this.#options.executionLogs === undefined ? {} : {
68
+ recordExecution: (event: import("@hypit/runtime").ExecutionLogEvent) =>
69
+ this.#options.executionLogs!.record(context.build, descriptor.command.id, event),
70
+ };
90
71
  if (descriptor.capacityMode === "asynchronous") {
91
72
  return await this.#delegate.executeCommand(state, descriptor, {
92
- ...context, releaseOperationCapacity: () => this.#options.stores.execution.releaseCapacity(context.build, descriptor.command.id),
73
+ ...context, ...recordExecution, releaseOperationCapacity: () => this.#options.stores.execution.releaseCapacity(context.build, descriptor.command.id),
93
74
  });
94
75
  }
95
76
  const begun = await store.begin(context.build, descriptor.command.id);
@@ -107,7 +88,10 @@ class CapacityExecutor implements RuntimeCommandExecutor {
107
88
  return { status: "completed", event };
108
89
  }
109
90
  try {
110
- const result = await this.#delegate.executeCommand(state, descriptor, context);
91
+ const result = await this.#delegate.executeCommand(state, descriptor, {
92
+ ...context, ...recordExecution,
93
+ reportProgress: (activity) => store.reportProgress(context.build, descriptor.command.id, activity),
94
+ });
111
95
  assert(result.status === "completed",
112
96
  `Immediate Command ${descriptor.command.id} returned ${result.status}`);
113
97
  await store.complete(context.build, descriptor.command.id, result.event);
@@ -190,11 +174,13 @@ class DurableLocalWorker {
190
174
  readonly #options: LocalWorkerOptions;
191
175
  readonly #executorWithCapacity: CapacityExecutor;
192
176
  readonly #owner = randomUUID();
177
+ readonly #ownedBuilds = new Set<string>();
193
178
  #buildRead = Promise.resolve();
194
179
 
195
180
  constructor(executor: RuntimeCommandExecutor, options: LocalWorkerOptions) {
196
181
  this.#executor = executor;
197
182
  this.#options = options;
183
+ if (options.executionBuild !== undefined) this.#ownedBuilds.add(options.executionBuild);
198
184
  this.#executorWithCapacity = new CapacityExecutor(executor, options, this.#owner);
199
185
  }
200
186
 
@@ -247,7 +233,14 @@ class DurableLocalWorker {
247
233
  }
248
234
  if (execution.stop.cause === "user-cancelled") {
249
235
  for (const operation of await this.#options.stores.operations.list({ build: execution.build })) {
250
- if (operation.status === "pending") await this.#executor.cancelOperation?.(machine.view(), operation);
236
+ if (operation.status === "pending") {
237
+ const cancelled = await this.#executor.cancelOperation?.(machine.view(), operation);
238
+ if (cancelled !== undefined) await this.#options.executionLogs?.record(operation.build, operation.command, {
239
+ endpoint: operation.endpoint, kind: "diagnostic", level: "info",
240
+ message: `Cancellation: ${cancelled.cancellation?.outcome ?? "unsupported"}${
241
+ cancelled.cancellation?.message === undefined ? "" : `; ${cancelled.cancellation.message}`}`,
242
+ });
243
+ }
251
244
  }
252
245
  }
253
246
  }
@@ -322,7 +315,13 @@ class DurableLocalWorker {
322
315
  hydrated?.();
323
316
  const actions = await Promise.allSettled(pending.map(async (operation) => {
324
317
  if (operation === undefined) throw new Error(`Build ${execution.build} lost a waiting Operation`);
325
- const result = await this.#executor.advanceOperation!(operation);
318
+ const result = await this.#executor.advanceOperation!(operation, {
319
+ build: operation.build,
320
+ ...(this.#options.executionLogs === undefined ? {} : {
321
+ recordExecution: (event: import("@hypit/runtime").ExecutionLogEvent) =>
322
+ this.#options.executionLogs!.record(operation.build, operation.command, event),
323
+ }),
324
+ });
326
325
  if (result.remoteEnded || result.status !== "pending") {
327
326
  await this.#options.stores.execution.releaseCapacity(execution.build, result.command);
328
327
  }
@@ -380,65 +379,38 @@ class DurableLocalWorker {
380
379
  return finished;
381
380
  }
382
381
 
383
- async runOnce(): Promise<WorkerTurnResult | undefined> {
384
- await this.#options.assertEnvironment?.();
385
- const execution = await this.#options.stores.execution.claim(this.#owner, Date.now());
386
- if (execution === undefined) return undefined;
387
- const [result] = await this.#runClaimed([execution]);
388
- return result;
389
- }
390
-
391
- async run(options: RuntimeWorkerRunOptions): Promise<void> {
392
- positive(options.idlePollMs, "Worker idlePollMs");
393
- const active = new Set<Promise<void>>();
394
- // The Runtime Host admits one Worker process. Any stored turn owner therefore belongs to the
395
- // previous process; clearing it changes no external fact and performs no Result action.
396
- await this.#options.assertEnvironment?.();
397
- await this.#options.stores.execution.reclaimActionCapacity();
398
- await this.#options.stores.execution.reclaimTurns(Date.now());
399
- await this.#options.stores.execution.reclaimResultWrites();
400
- for (const execution of await this.#options.stores.execution.list()) {
401
- if (execution.decision !== undefined && execution.attention === undefined) {
402
- await this.#options.stores.execution.setAttention(execution.build, {
403
- step: "result",
404
- error: "Result writing was interrupted; run `hypit result finish <build-id>`",
405
- });
406
- }
382
+ async runOnce(options: { readonly build?: string; readonly hydrated?: () => void } = {}): Promise<WorkerTurnResult | undefined> {
383
+ const store = this.#options.stores.execution;
384
+ const assigned = this.#options.executionBuild;
385
+ if (assigned !== undefined && options.build !== undefined && options.build !== assigned) {
386
+ throw new Error(`This execution context belongs to Build ${assigned}, not ${options.build}`);
407
387
  }
408
- await options.ready?.();
409
- try {
410
- while (options.signal?.aborted !== true) {
411
- await this.#options.assertEnvironment?.();
412
- while (!Boolean(options.signal?.aborted)) {
413
- const execution = await this.#options.stores.execution.claim(this.#owner, Date.now());
414
- if (execution === undefined) break;
415
- let markHydrated!: () => void;
416
- const hydration = new Promise<void>((resolve) => { markHydrated = resolve; });
417
- let task: Promise<void>;
418
- task = this.#runClaimed([execution], markHydrated)
419
- .then(() => undefined)
420
- .finally(() => active.delete(task));
421
- active.add(task);
422
- // The next Build may execute concurrently, but its persisted snapshot is
423
- // not hydrated until this one has left the single-threaded JSON boundary.
424
- await Promise.race([hydration, task]);
425
- // Awaiting synchronous stores only drains microtasks. Let sockets, timers and
426
- // stop signals run before claiming another piece of ready work.
427
- await setImmediate();
388
+ const selected = options.build ?? assigned;
389
+ for (const build of selected === undefined ? await store.listReady() : [selected]) {
390
+ const current = await store.read(build);
391
+ if (current === undefined || current.decision !== undefined) continue;
392
+ if (current.startedAt !== undefined && !this.#ownedBuilds.has(build)) {
393
+ if (selected === undefined) continue;
394
+ throw new Error(`Build ${build} already belongs to another execution context; create a new Build to continue`);
395
+ }
396
+ const execution = await store.claim(this.#owner, Date.now(), build);
397
+ if (execution === undefined) continue;
398
+ if (!this.#ownedBuilds.has(build)) {
399
+ if (execution.startedAt !== undefined) {
400
+ await store.releaseTurn(build, this.#owner, execution.wakeAt, execution.operationWait);
401
+ throw new Error(`Build ${build} was assigned to another execution context`);
428
402
  }
429
- const idle = new AbortController();
430
- const signal = options.signal === undefined ? idle.signal : AbortSignal.any([idle.signal, options.signal]);
431
- try {
432
- await Promise.race([...active, pause(options.idlePollMs, signal)]);
433
- } catch (error) {
434
- if (!Boolean(options.signal?.aborted)) throw error;
435
- } finally { idle.abort(); }
436
-
403
+ await store.start(build);
404
+ this.#ownedBuilds.add(build);
437
405
  }
438
- } finally {
439
- await Promise.allSettled(active);
406
+ const [result] = await this.#runClaimed([execution], options.hydrated);
407
+ if (result !== undefined && ("outcome" in result || result.decision !== undefined)) this.#ownedBuilds.delete(build);
408
+ return result;
440
409
  }
410
+ return undefined;
441
411
  }
412
+
413
+
442
414
  }
443
415
 
444
416
  export function createDurableLocalWorker(
@@ -1,12 +1,12 @@
1
1
  # `@hypit/screen-overlay`
2
2
 
3
- The Track Surface accepts `semantic={speech.semantic}` or `space={animation}`. Semantic context
4
- resolves Script Selections and Moments; authored space supports clock-based animation. Shared `at`
3
+ The Track Surface accepts `timeline={program.timeline}`. The same Timeline supports authored
4
+ positions and, where prepared Takes supply evidence, Script Selections and Moments. Shared `at`
5
5
  inputs accept a Moment or a time such as `2s`; `at` with `for` produces a Window where required.
6
6
 
7
7
  Official provider-free self-contained screen-paint package.
8
8
 
9
- Every item consumes its typed parameters, explicit Temporal source, CanvasSpace, ProgramSpace,
9
+ Every item consumes its typed parameters, explicit Temporal source, CanvasSpace, Timeline,
10
10
  seed and local frame. Flash, ColorWash, Vignette, ScanLines, DirectionalMatte, WhipVeil,
11
11
  GlitchVeil, Grain, LightLeak, Bokeh and TVStatic lower to ordinary absolute-stack `VisualTrack`
12
12
  Presents. These effects generate their own pixels over the selected interval.
@@ -13,7 +13,7 @@
13
13
  "@hypit/narrative": "workspace:*",
14
14
  "@hypit/protocol": "workspace:*",
15
15
  "@hypit/program-space": "workspace:*",
16
- "@hypit/semantic-track": "workspace:*",
16
+ "@hypit/timeline": "workspace:*",
17
17
  "@hypit/spatial": "workspace:*",
18
18
  "@hypit/temporal": "workspace:*",
19
19
  "@hypit/temporal-markup": "workspace:*",
@@ -1,7 +1,7 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import type { ComponentPackage } from "@hypit/component-kit";
2
3
  import { canonicalize } from "@hypit/protocol";
3
4
  import type { StoredValue } from "@hypit/protocol";
4
- import type { ProgramSpace } from "@hypit/program-space";
5
5
  import type { CanvasSpace } from "@hypit/spatial";
6
6
  import { screenOverlayProducers, screenOverlayTypes } from "./manifest.js";
7
7
  import { appendProjectedScreenOverlay, assertScreenOverlayProgram, createScreenOverlaySet, finalizeScreenOverlay, renderScreenOverlay } from "./program.js";
@@ -12,9 +12,9 @@ const output = (value: unknown) => ({ kind: "inline" as const, value: canonicali
12
12
  export const screenOverlayComponent = {
13
13
  producers: [
14
14
  { producer: screenOverlayProducers.createSet, handler: () => ({ outputs: { set: output(createScreenOverlaySet()) }, needs: {} }) },
15
- { producer: screenOverlayProducers.appendItem, handler: ({ inputs }) => ({ outputs: { set: output(appendProjectedScreenOverlay(inline<ScreenOverlaySet>(inputs.set?.value, "ScreenOverlaySet"), inline<ScreenOverlayHeader>(inputs.header?.value, "ScreenOverlayHeader"), inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"), inline<ScreenOverlayItemSpec>(inputs.spec?.value, "ScreenOverlayItemSpec"), inline<TemporalWindow>(inputs.window?.value, "TemporalWindow"))) }, needs: {} }) },
15
+ { producer: screenOverlayProducers.appendItem, handler: ({ inputs }) => ({ outputs: { set: output(appendProjectedScreenOverlay(inline<ScreenOverlaySet>(inputs.set?.value, "ScreenOverlaySet"), inline<ScreenOverlayHeader>(inputs.header?.value, "ScreenOverlayHeader"), inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<ScreenOverlayItemSpec>(inputs.spec?.value, "ScreenOverlayItemSpec"), inline<TemporalWindow>(inputs.window?.value, "TemporalWindow"))) }, needs: {} }) },
16
16
  { producer: screenOverlayProducers.finalize, handler: ({ inputs }) => ({ outputs: { program: output(finalizeScreenOverlay(inline<ScreenOverlaySet>(inputs.set?.value, "ScreenOverlaySet"), inline<ScreenOverlayHeader>(inputs.header?.value, "ScreenOverlayHeader"))) }, needs: {} }) },
17
- { producer: screenOverlayProducers.render, handler: ({ inputs }) => ({ outputs: { track: output(renderScreenOverlay(inline<CanvasSpace>(inputs.canvas?.value, "CanvasSpace"), inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"), inline<ScreenOverlayProgram>(inputs.program?.value, "ScreenOverlayProgram"))) }, needs: {} }) },
17
+ { producer: screenOverlayProducers.render, handler: ({ inputs }) => ({ outputs: { track: output(renderScreenOverlay(inline<CanvasSpace>(inputs.canvas?.value, "CanvasSpace"), inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<ScreenOverlayProgram>(inputs.program?.value, "ScreenOverlayProgram"))) }, needs: {} }) },
18
18
  ],
19
19
  validators: [{ type: screenOverlayTypes.program, handler: ({ value }) => assertScreenOverlayProgram(inline<ScreenOverlayProgram>(value, "ScreenOverlayProgram")) }],
20
20
  } satisfies ComponentPackage;
@@ -1,4 +1,5 @@
1
- import { programSpaceTypes } from "@hypit/program-space";
1
+ import { timelineTypes } from "@hypit/timeline";
2
+
2
3
  import { compositionTypes } from "@hypit/composition";
3
4
  import { sealGraphFragment } from "@hypit/elaborator";
4
5
  import type { FragmentOperation } from "@hypit/elaborator";
@@ -22,16 +23,16 @@ export function createScreenOverlayFragment(items: readonly ScreenOverlayFragmen
22
23
  const id = `overlay:set:append:${String(index + 1).padStart(4, "0")}`;
23
24
  operations.push({ id, producer: screenOverlayProducers.appendItem,
24
25
  inputs: { set: operation(current), header: input("header"), spec: input(item.specName),
25
- space: input("space"), window: input(item.windowName) }, result: { kind: "output", name: "set" } });
26
+ timeline: input("timeline"), window: input(item.windowName) }, result: { kind: "output", name: "set" } });
26
27
  current = id;
27
28
  });
28
29
  operations.push(
29
30
  { id: "overlay:program", producer: screenOverlayProducers.finalize, inputs: { set: operation(current), header: input("header") }, result: { kind: "output", name: "program" } },
30
- { id: "overlay:track", producer: screenOverlayProducers.render, inputs: { canvas: input("canvas"), space: input("space"), program: operation("overlay:program") }, result: { kind: "output", name: "track" } },
31
+ { id: "overlay:track", producer: screenOverlayProducers.render, inputs: { canvas: input("canvas"), timeline: input("timeline"), program: operation("overlay:program") }, result: { kind: "output", name: "track" } },
31
32
  );
32
33
  return sealGraphFragment({ inputs: [
33
34
  { name: "canvas", type: spatialTypes.canvas }, { name: "header", type: screenOverlayTypes.header },
34
- { name: "space", type: programSpaceTypes.programSpace }, ...[...types].map(([inputName, type]) => ({ name: inputName, type })),
35
+ { name: "timeline", type: timelineTypes.track }, ...[...types].map(([inputName, type]) => ({ name: inputName, type })),
35
36
  ], operations, exports: [
36
37
  { name: "program", type: screenOverlayTypes.program, root: operation("overlay:program") },
37
38
  { name: "track", type: compositionTypes.visualTrack, root: operation("overlay:track") },
@@ -1,11 +1,12 @@
1
+ import { timelineTypes } from "@hypit/timeline";
1
2
  import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
2
3
  import { readFile } from "node:fs/promises";
3
4
 
4
5
  import { compositionDependency, compositionTypes } from "@hypit/composition";
5
6
  import { narrativeDependency } from "@hypit/narrative";
6
- import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
7
+
7
8
  import type { ModuleManifest, ProducerRef, TypeRef, ValueSchema } from "@hypit/protocol";
8
- import { semanticTrackDependency } from "@hypit/semantic-track";
9
+ import { timelineDependency } from "@hypit/timeline";
9
10
  import { spatialDependency, spatialTypes } from "@hypit/spatial";
10
11
  import { temporalDependency, temporalTypes } from "@hypit/temporal";
11
12
  import { temporalWindowAttributeVocabulary } from "@hypit/temporal-markup";
@@ -65,7 +66,7 @@ export const screenOverlayHeaderSchema: ValueSchema = object({ id: { schema: str
65
66
  export const screenOverlayItemSpecSchema: ValueSchema = itemSpec;
66
67
  export const screenOverlaySetSchema: ValueSchema = object({ items: { schema: { kind: "array", items: item } } });
67
68
  export const screenOverlayProgramSchema: ValueSchema = object({ id: { schema: string }, items: { schema: { kind: "array", minItems: 1, items: item } } });
68
- const appendInputs = [{ name: "set", type: screenOverlayTypes.set }, { name: "header", type: screenOverlayTypes.header }, { name: "space", type: programSpaceTypes.programSpace }, { name: "spec", type: screenOverlayTypes.itemSpec }, { name: "window", type: temporalTypes.window }] as const;
69
+ const appendInputs = [{ name: "set", type: screenOverlayTypes.set }, { name: "header", type: screenOverlayTypes.header }, { name: "timeline", type: timelineTypes.track }, { name: "spec", type: screenOverlayTypes.itemSpec }, { name: "window", type: temporalTypes.window }] as const;
69
70
 
70
71
  const itemAttributes = [
71
72
  { name: "id", kind: "identifier", required: false,
@@ -269,7 +270,7 @@ export const screenOverlayMarkupSurfaces = [
269
270
  { name: "track", type: compositionTypes.visualTrack,
270
271
  summary: "The rendered overlay, an ordinary peer VisualTrack." },
271
272
  ],
272
- example: `<screen:Track id="effects" semantic={speech.semantic} canvas={vertical}>
273
+ example: `<screen:Track id="effects" timeline={speech.timeline} canvas={vertical}>
273
274
  <screen:Flash during={story.selection.overlay} z="80"
274
275
  color="#ffffff" intensity="0.6" attack="2" hold="2" decay="6"/>
275
276
  </screen:Track>`,
@@ -288,7 +289,7 @@ export const screenOverlayMarkupSurfaces = [
288
289
 
289
290
  export const screenOverlayManifest: ModuleManifest = {
290
291
  format: "hypit.module@1", name: screenOverlayModuleRef.name, version: screenOverlayModuleRef.version,
291
- dependencies: [narrativeDependency, programSpaceDependency, semanticTrackDependency, spatialDependency, temporalDependency, compositionDependency],
292
+ dependencies: [narrativeDependency, timelineDependency, spatialDependency, temporalDependency, compositionDependency],
292
293
  types: [
293
294
  { name: screenOverlayTypes.header.name },
294
295
  { name: screenOverlayTypes.itemSpec.name },
@@ -299,7 +300,7 @@ export const screenOverlayManifest: ModuleManifest = {
299
300
  { name: screenOverlayProducers.createSet.name, inputs: [], outputs: [{ name: "set", type: screenOverlayTypes.set }], needs: [] },
300
301
  { name: screenOverlayProducers.appendItem.name, inputs: [...appendInputs], outputs: [{ name: "set", type: screenOverlayTypes.set }], needs: [] },
301
302
  { name: screenOverlayProducers.finalize.name, inputs: [{ name: "set", type: screenOverlayTypes.set }, { name: "header", type: screenOverlayTypes.header }], outputs: [{ name: "program", type: screenOverlayTypes.program }], needs: [] },
302
- { name: screenOverlayProducers.render.name, inputs: [{ name: "canvas", type: spatialTypes.canvas }, { name: "space", type: programSpaceTypes.programSpace }, { name: "program", type: screenOverlayTypes.program }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
303
+ { name: screenOverlayProducers.render.name, inputs: [{ name: "canvas", type: spatialTypes.canvas }, { name: "timeline", type: timelineTypes.track }, { name: "program", type: screenOverlayTypes.program }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
303
304
  ],
304
305
  };
305
306
  export const screenOverlayDependency = { module: screenOverlayModuleRef } as const;
@@ -1,7 +1,7 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import { assertVisualTrackIdentity, sealVisualTrack } from "@hypit/composition";
2
3
  import type { VisualAnimation, VisualElement, VisualStyleDeclaration, VisualTrack } from "@hypit/composition";
3
4
  import { assertProgramSpaceIdentity } from "@hypit/program-space";
4
- import type { ProgramSpace } from "@hypit/program-space";
5
5
  import { canonicalize } from "@hypit/protocol";
6
6
  import { assertCanvasSpace } from "@hypit/spatial";
7
7
  import type { CanvasSpace } from "@hypit/spatial";
@@ -107,11 +107,11 @@ export function assertScreenOverlaySet(value: ScreenOverlaySet): void {
107
107
  }
108
108
 
109
109
  function realized(
110
- set: ScreenOverlaySet, header: ScreenOverlayHeader, space: ProgramSpace, spec: ScreenOverlayItemSpec,
110
+ set: ScreenOverlaySet, header: ScreenOverlayHeader, timeline: Timeline, spec: ScreenOverlayItemSpec,
111
111
  window: ProjectedWindow,
112
112
  ): ScreenOverlaySet {
113
113
  assertScreenOverlaySet(set); assertScreenOverlayHeader(header); assertScreenOverlayItemSpec(spec);
114
- assertTemporalWindowFor(window, { subjectId: spec.id, space });
114
+ assertTemporalWindowFor(window, { subjectId: spec.id, space: timeline });
115
115
  const addition = {
116
116
  id: window.id,
117
117
  subjectId: spec.id,
@@ -128,11 +128,11 @@ function realized(
128
128
  export function appendProjectedScreenOverlay(
129
129
  set: ScreenOverlaySet,
130
130
  header: ScreenOverlayHeader,
131
- space: ProgramSpace,
131
+ timeline: Timeline,
132
132
  spec: ScreenOverlayItemSpec,
133
133
  window: ProjectedWindow,
134
134
  ): ScreenOverlaySet {
135
- return realized(set, header, space, spec, window);
135
+ return realized(set, header, timeline, spec, window);
136
136
  }
137
137
  export function sealScreenOverlayProgram(value: ScreenOverlayProgram): ScreenOverlayProgram {
138
138
  const normalized = { id: value.id,
@@ -307,15 +307,15 @@ function overlayElements(content: ScreenOverlayComponent, canvas: CanvasSpace, d
307
307
  }
308
308
  }
309
309
 
310
- export function renderScreenOverlay(canvas: CanvasSpace, space: ProgramSpace, program: ScreenOverlayProgram): VisualTrack {
311
- assertCanvasSpace(canvas); assertProgramSpaceIdentity(space); assertScreenOverlayProgram(program);
310
+ export function renderScreenOverlay(canvas: CanvasSpace, timeline: Timeline, program: ScreenOverlayProgram): VisualTrack {
311
+ assertCanvasSpace(canvas); assertProgramSpaceIdentity(timeline); assertScreenOverlayProgram(program);
312
312
  const track = sealVisualTrack({
313
- programSpaceId: space.id, visualIr: "hypit.visual-ir@1", id: program.id,
313
+ programSpaceId: timeline.id, visualIr: "hypit.visual-ir@1", id: program.id,
314
314
  presents: program.items.map((item) => ({
315
315
  id: item.id, subjectId: item.subjectId, span: { ...item.span }, stacking: { ...item.stacking },
316
316
  elements: overlayElements(item.content, canvas, item.span.endFrameExclusive - item.span.startFrame),
317
317
  })),
318
318
  });
319
- assertVisualTrackIdentity(track, space);
319
+ assertVisualTrackIdentity(track, timeline);
320
320
  return track;
321
321
  }
@@ -1,4 +1,4 @@
1
- import { createTemporalSpace, resolveTemporalContext } from "@hypit/temporal-markup";
1
+ import { resolveTemporalContext } from "@hypit/temporal-markup";
2
2
  import { spatialTypes } from "@hypit/spatial";
3
3
  import type { StructuredElement, StructuredSurfaceHandler, SurfaceComponentDraft, SurfaceRecordDraft, SurfaceResolvedReference, MarkupAttributeValue } from "@hypit/markup";
4
4
  import { createTemporalWindowProjection, temporalWindowAttributeNames } from "@hypit/temporal-markup";
@@ -57,16 +57,15 @@ function content(element: StructuredElement): { readonly value: ScreenOverlayCom
57
57
  }
58
58
 
59
59
  export const decodeScreenOverlaySurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
60
- allowed(element, ["id", "canvas", "semantic"]); const id = text(element, "id");
60
+ allowed(element, ["id", "canvas", "timeline"]); const id = text(element, "id");
61
61
  const canvas = ref(element.attributes.canvas, `${element.name}.canvas`, spatialTypes.canvas, resolveReference);
62
62
  const context = resolveTemporalContext({ element, resolveReference });
63
- const time = createTemporalSpace({ id: id, element, ...context });
64
63
  const headerId = `${id}.header`; const records: SurfaceRecordDraft[] = [{ id: headerId, type: screenOverlayTypes.header,
65
64
  value: { kind: "inline", value: sealScreenOverlayHeader({ id }) }, range: element.range }];
66
- const temporalComponents: SurfaceComponentDraft[] = [...time.components];
67
- const temporalFragments: ReturnType<typeof createTemporalWindowProjection>["fragments"][number][] = [...time.fragments];
65
+ const temporalComponents: SurfaceComponentDraft[] = [];
66
+ const temporalFragments: ReturnType<typeof createTemporalWindowProjection>["fragments"][number][] = [];
68
67
  const fragmentItems: Parameters<typeof createScreenOverlayFragment>[0][number][] = [];
69
- const inputs: Record<string, typeof canvas.ref> = { canvas: canvas.ref, header: { kind: "record", id: headerId }, space: time.space.ref };
68
+ const inputs: Record<string, typeof canvas.ref> = { canvas: canvas.ref, header: { kind: "record", id: headerId }, timeline: context.timeline.ref };
70
69
  let index = 0;
71
70
  for (const child of element.children) {
72
71
  if (child.kind === "text") { if (child.value.trim()) throw new Error(`${element.name} accepts only component children.`); continue; }
@@ -76,7 +75,7 @@ export const decodeScreenOverlaySurface: StructuredSurfaceHandler = ({ element,
76
75
  const itemSpec = sealScreenOverlayItemSpec({
77
76
  id: optionalText(child, "id") ?? `${id}.${decoded.value.kind}.${suffix}`, content: decoded.value,
78
77
  stackingOrder: integer(child, "z") });
79
- const temporal = createTemporalWindowProjection({ id: itemSpec.id, element: child, ...context, space: time.space, resolveReference });
78
+ const temporal = createTemporalWindowProjection({ id: itemSpec.id, element: child, ...context, resolveReference });
80
79
  records.push(...temporal.records); temporalComponents.push(...temporal.components); temporalFragments.push(...temporal.fragments);
81
80
  const specId = `${id}.item.${suffix}.spec`; const specName = `item-${suffix}-spec`;
82
81
  records.push({ id: specId, type: screenOverlayTypes.itemSpec, value: { kind: "inline", value: itemSpec }, range: child.range });
@@ -53,8 +53,8 @@ The Surface exports one full Narrative plus narrow, immutable views:
53
53
  - `script.moment.<id>` is a reusable explicit Moment.
54
54
 
55
55
  `@hypit/caption` projects `script.selection.<id>` or a Role onto complete Caption Alignment Units;
56
- it then joins those units to a SemanticTrack for frame timing. Seedance consumes dialogue `Text`,
57
- Estimate and TTS consume speech `Text`, and Speech Track consumes the Segment excerpt. None imports
56
+ it then joins those units to a Timeline for frame timing. Seedance consumes dialogue `Text`,
57
+ Estimate and TTS consume speech `Text`, and semantic preparation consumes the Segment excerpt. None imports
58
58
  Script's parser AST. Another authoring package may produce the same ordinary Text, Narrative and
59
59
  CaptionDocument contracts.
60
60
 
@@ -157,3 +157,16 @@ distinct boundaries writable.
157
157
  Writeback reparses the result to retain the intended identities and unchanged narrative/caption
158
158
  content. These checks concern authored order, not frame order. A consumer's temporal projection
159
159
  determines whether the resulting Instant or Window is usable.
160
+
161
+ ## Complete authored content and narrow exports
162
+
163
+ The root `story` Record contains the complete Narrative: speech structure, semantic references and
164
+ its CaptionDocument. `story.caption`, `story.selection.<id>`, Segment excerpts and dialogue/speech
165
+ Text outputs remain explicit narrow exports derived from that content. Caption rendering can read
166
+ the document and Timeline. Timed Uses change its presentation; their semantic references are
167
+ projected through the same Timeline as other components. Word attributes remain in the document
168
+ for families that give those words structural visual roles.
169
+
170
+ For content lookup, use the Narrative package's `narrativeTokensForSelection` or
171
+ `narrativeSelectionTokenRange`. These query authored order; Timeline separately locates the same
172
+ anchors in the assembled video. No timestamps or display Styles enter the Script value.
@@ -32,7 +32,7 @@ export const scriptMarkupSurfaces = [
32
32
  text: "The element's own content is the Script body: named Segments holding prose, Role Cues, Dual Text, flat token attributes, and zero-width Selection and Moment markers. It carries no timecode, no media reference and no generation parameter.",
33
33
  ports: [
34
34
  { name: "", type: narrativeType,
35
- summary: "The whole authored Narrative, addressed by the element's own id." },
35
+ summary: "The complete authored Narrative, including speech structure, semantic anchors and its CaptionDocument, addressed by the element's own id." },
36
36
  { name: "segment.<id>", type: narrativeExcerptType,
37
37
  summary: "One Segment as a narrow Excerpt, used to associate a generated Take with that Segment." },
38
38
  { name: "segment.<id>.dialogue", type: textTypes.text,
@@ -40,7 +40,7 @@ export const scriptMarkupSurfaces = [
40
40
  { name: "segment.<id>.speech", type: textTypes.text,
41
41
  summary: "One Segment as pronunciation only, with Role Cue labels dropped." },
42
42
  { name: "caption", type: captionDocumentType,
43
- summary: "The complete Script-owned CaptionDocument: display Words, N:M Alignment Units, Cue breaks and speech correspondence." },
43
+ summary: "The Narrative's CaptionDocument exported as a narrow view: display Words, N:M Alignment Units, Cue breaks and speech correspondence." },
44
44
  { name: "selection.<id>", type: narrativeSelectionType,
45
45
  summary: "One named range over the Narrative, reusable wherever a Selection is read." },
46
46
  { name: "moment.<id>", type: narrativeMomentType,
@@ -180,6 +180,7 @@ export function narrativeMomentValue(moment: ParsedNarrative["moments"][number],
180
180
  export function narrativeValue(parsed: ParsedNarrative, id: string): CanonicalValue {
181
181
  return canonicalize({
182
182
  id,
183
+ caption: captionDocument(parsed, `${id}.caption`, id),
183
184
  segments: parsed.segments.map((segment) => ({
184
185
  id: segment.id,
185
186
  startAnchorId: segment.startAnchorId,
@@ -1,6 +1,5 @@
1
1
  import { ScriptSyntaxError } from "./error.js";
2
2
  import {
3
- captionDocumentValue,
4
3
  narrativeDialogueTextValue,
5
4
  narrativeSegmentExcerptValue,
6
5
  narrativeMomentValue,
@@ -73,6 +72,8 @@ export function decodeScriptSurface(input: ScriptSurfaceInput): ScriptSurfaceOut
73
72
  input.source.slice(input.contentStart, close.start),
74
73
  input.contentStart,
75
74
  );
75
+ const narrative = narrativeValue(parsed, rawId);
76
+ const caption = (narrative as { readonly caption: import("@hypit/protocol").CanonicalValue }).caption;
76
77
  const captionId = `${rawId}.caption`;
77
78
  return {
78
79
  nextOffset: close.end,
@@ -80,7 +81,7 @@ export function decodeScriptSurface(input: ScriptSurfaceInput): ScriptSurfaceOut
80
81
  {
81
82
  id: rawId,
82
83
  type: narrativeType,
83
- value: { kind: "inline", value: narrativeValue(parsed, rawId) },
84
+ value: { kind: "inline", value: narrative },
84
85
  range: { start: input.openingStart, end: close.end },
85
86
  },
86
87
  ...parsed.segments.map((segment) => ({
@@ -106,7 +107,7 @@ export function decodeScriptSurface(input: ScriptSurfaceInput): ScriptSurfaceOut
106
107
  {
107
108
  id: captionId,
108
109
  type: captionDocumentType,
109
- value: { kind: "inline" as const, value: captionDocumentValue(parsed, captionId, rawId) },
110
+ value: { kind: "inline" as const, value: caption },
110
111
  range: { start: input.openingStart, end: close.end },
111
112
  },
112
113
  ...parsed.selections.map((selection) => ({
@@ -77,7 +77,7 @@ export type ParsedCaptionRegion = {
77
77
 
78
78
  export type ParsedNarrative = Omit<
79
79
  Narrative,
80
- "id" | "segments" | "tokens" | "turns" | "selections" | "moments"
80
+ "id" | "segments" | "tokens" | "turns" | "selections" | "moments" | "caption"
81
81
  > & {
82
82
  /** Exact Script body range, used only for source-preserving Program-boundary edits. */
83
83
  readonly sourceRange: SourceRange;
@@ -4,10 +4,16 @@
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "private": true,
6
6
  "type": "module",
7
- "exports": { ".": "./src/index.ts" },
8
- "hypit": { "activation": "./src/activation.ts" },
7
+ "exports": {
8
+ ".": "./src/index.ts"
9
+ },
10
+ "hypit": {
11
+ "activation": "./src/activation.ts"
12
+ },
9
13
  "dependencies": {
10
14
  "@hypit/script": "workspace:*",
11
- "@hypit/studio-adapter": "workspace:*"
15
+ "@hypit/studio-adapter": "workspace:*",
16
+ "@hypit/narrative": "workspace:*",
17
+ "@hypit/protocol": "workspace:*"
12
18
  }
13
19
  }
@@ -1,9 +1,11 @@
1
+ import { projectScriptTimeline } from "./projection.js";
1
2
  import { adjustScriptMoment, adjustScriptSelection, parseScript, scriptModuleRef } from "@hypit/script";
2
3
  import type { StudioScriptCompanion } from "@hypit/studio-adapter";
3
4
 
4
5
  export const scriptStudioCompanions: readonly StudioScriptCompanion[] = [{
5
6
  id: "script",
6
7
  match: { module: scriptModuleRef, surface: "script" },
8
+ project: projectScriptTimeline,
7
9
  observe(input) {
8
10
  const narrativeId = input.attributes.id ?? "script";
9
11
  if (typeof narrativeId !== "string" || narrativeId.length === 0) return undefined;