@hypit/hypit 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/README.md +4 -2
  2. package/dist/public/caption.d.ts +206 -183
  3. package/dist/public/composition.d.ts +25 -3
  4. package/dist/public/endpoint-kit.d.ts +24 -2
  5. package/dist/public/generation.d.ts +5 -1
  6. package/dist/public/hyperframes.d.ts +19 -1
  7. package/dist/public/narrative.d.ts +17 -3
  8. package/dist/public/performance.d.ts +1590 -0
  9. package/dist/public/program-space.d.ts +179 -32
  10. package/dist/public/runtime-kit.d.ts +21 -8
  11. package/dist/public/sound.d.ts +822 -0
  12. package/dist/public/speech.d.ts +41 -0
  13. package/dist/public/studio-adapter.d.ts +77 -15
  14. package/dist/public/temporal-markup.d.ts +9 -44
  15. package/dist/public/temporal.d.ts +37 -28
  16. package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
  17. package/examples/README.md +18 -10
  18. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
  19. package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
  20. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
  21. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
  22. package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
  23. package/examples/provider-package/README.md +78 -0
  24. package/examples/provider-package/hypit.runtime.json +12 -0
  25. package/examples/provider-package/packages/provider-images/package.json +11 -0
  26. package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
  27. package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
  28. package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
  29. package/examples/semantic-composition/README.md +8 -1
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/hypit.runtime.json +1 -1
  32. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  33. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  34. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  35. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  36. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  39. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  40. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  41. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  42. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  43. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  44. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  45. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  47. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  48. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  49. package/package.json +35 -15
  50. package/packages/audio-track/README.md +20 -13
  51. package/packages/audio-track/package.json +1 -1
  52. package/packages/audio-track/src/component.ts +4 -4
  53. package/packages/audio-track/src/fragment.ts +6 -5
  54. package/packages/audio-track/src/index.ts +1 -1
  55. package/packages/audio-track/src/manifest.ts +17 -16
  56. package/packages/audio-track/src/program.ts +21 -25
  57. package/packages/audio-track/src/surface.ts +19 -18
  58. package/packages/audio-track-studio/README.md +23 -0
  59. package/packages/audio-track-studio/src/index.ts +28 -17
  60. package/packages/author-kit/README.md +1 -1
  61. package/packages/background-removal/README.md +4 -7
  62. package/packages/browser-capture/package.json +1 -1
  63. package/packages/build-result/README.md +11 -0
  64. package/packages/build-result/src/decode.ts +2 -0
  65. package/packages/build-result/src/execution-log.ts +17 -0
  66. package/packages/build-result/src/index.ts +1 -0
  67. package/packages/build-result/src/store.ts +14 -1
  68. package/packages/build-result/src/types.ts +3 -0
  69. package/packages/build-result-s3/src/repository.ts +4 -0
  70. package/packages/caption/README.md +61 -73
  71. package/packages/caption/package.json +3 -2
  72. package/packages/caption/src/activation.ts +2 -2
  73. package/packages/caption/src/component.ts +20 -5
  74. package/packages/caption/src/display.ts +3 -18
  75. package/packages/caption/src/fragment.ts +3 -7
  76. package/packages/caption/src/index.ts +6 -5
  77. package/packages/caption/src/manifest.ts +29 -46
  78. package/packages/caption/src/style.ts +24 -135
  79. package/packages/caption/src/surface.ts +12 -92
  80. package/packages/caption/src/temporalize.ts +18 -53
  81. package/packages/caption/src/types.ts +8 -35
  82. package/packages/caption/src/visibility.ts +23 -0
  83. package/packages/caption-fine/README.md +21 -9
  84. package/packages/caption-fine/package.json +4 -2
  85. package/packages/caption-fine/src/component.ts +3 -3
  86. package/packages/caption-fine/src/fragment.ts +7 -19
  87. package/packages/caption-fine/src/index.ts +2 -0
  88. package/packages/caption-fine/src/manifest.ts +26 -17
  89. package/packages/caption-fine/src/recipe.ts +7 -0
  90. package/packages/caption-fine/src/render.ts +14 -13
  91. package/packages/caption-fine/src/schedule.ts +39 -35
  92. package/packages/caption-fine/src/style.ts +10 -9
  93. package/packages/caption-fine/src/surface.ts +62 -35
  94. package/packages/caption-fine/src/types.ts +2 -0
  95. package/packages/caption-fine-studio/README.md +24 -2
  96. package/packages/caption-fine-studio/package.json +3 -1
  97. package/packages/caption-fine-studio/src/activation.ts +3 -3
  98. package/packages/caption-fine-studio/src/index.ts +54 -42
  99. package/packages/cli/README.md +57 -4
  100. package/packages/cli/package.json +1 -0
  101. package/packages/cli/src/arguments.ts +25 -6
  102. package/packages/cli/src/build-planning.ts +3 -2
  103. package/packages/cli/src/command.ts +6 -0
  104. package/packages/cli/src/commands/environment.ts +28 -18
  105. package/packages/cli/src/commands/execution.ts +81 -26
  106. package/packages/cli/src/commands/results.ts +7 -11
  107. package/packages/cli/src/index.ts +2 -2
  108. package/packages/cli/src/machine-view.ts +3 -2
  109. package/packages/cli/src/main.ts +34 -42
  110. package/packages/cli/src/observation.ts +7 -1
  111. package/packages/cli/src/output.ts +65 -23
  112. package/packages/cli/src/view.ts +66 -19
  113. package/packages/comment-sticker/README.md +3 -3
  114. package/packages/comment-sticker/package.json +1 -1
  115. package/packages/comment-sticker/src/component.ts +4 -4
  116. package/packages/comment-sticker/src/fragment.ts +5 -4
  117. package/packages/comment-sticker/src/manifest.ts +7 -6
  118. package/packages/comment-sticker/src/program.ts +9 -9
  119. package/packages/comment-sticker/src/surface.ts +6 -7
  120. package/packages/composition/README.md +21 -0
  121. package/packages/composition/src/audio-presentation.ts +44 -0
  122. package/packages/composition/src/index.ts +3 -0
  123. package/packages/composition/src/schema.ts +8 -3
  124. package/packages/composition/src/track.ts +15 -1
  125. package/packages/credential-store-env/README.md +1 -1
  126. package/packages/deck-track/README.md +3 -3
  127. package/packages/deck-track/package.json +1 -1
  128. package/packages/deck-track/src/component.ts +5 -5
  129. package/packages/deck-track/src/fragment.ts +6 -5
  130. package/packages/deck-track/src/lower.ts +12 -12
  131. package/packages/deck-track/src/manifest.ts +8 -7
  132. package/packages/deck-track/src/program.ts +13 -16
  133. package/packages/deck-track/src/surface.ts +9 -10
  134. package/packages/driver-node/src/driver.ts +41 -3
  135. package/packages/elevenlabs-speech/README.md +27 -0
  136. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  137. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  138. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  139. package/packages/elevenlabs-speech/src/index.ts +111 -0
  140. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  141. package/packages/endpoint-kit/README.md +24 -0
  142. package/packages/endpoint-kit/src/index.ts +7 -1
  143. package/packages/film/README.md +12 -7
  144. package/packages/film/package.json +1 -1
  145. package/packages/film/src/component.ts +4 -4
  146. package/packages/film/src/fragment.ts +6 -5
  147. package/packages/film/src/manifest.ts +11 -10
  148. package/packages/film/src/program.ts +5 -5
  149. package/packages/film/src/recipe.ts +2 -1
  150. package/packages/film/src/surface.ts +10 -7
  151. package/packages/film-studio/package.json +1 -1
  152. package/packages/film-studio/src/index.ts +2 -2
  153. package/packages/fishaudio-speech/README.md +33 -0
  154. package/packages/fishaudio-speech/package.json +21 -0
  155. package/packages/fishaudio-speech/src/activation.ts +32 -0
  156. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  157. package/packages/fishaudio-speech/src/index.ts +156 -0
  158. package/packages/fishaudio-speech/src/surface.ts +192 -0
  159. package/packages/generation/README.md +11 -1
  160. package/packages/generation/src/mapping.ts +28 -30
  161. package/packages/gpt-image/README.md +1 -2
  162. package/packages/grok-imagine/README.md +1 -2
  163. package/packages/hyperframes/README.md +7 -3
  164. package/packages/hyperframes/src/browser-program.ts +11 -2
  165. package/packages/hyperframes/src/document.ts +15 -2
  166. package/packages/interview-emoji-reveal/README.md +4 -4
  167. package/packages/interview-emoji-reveal/package.json +1 -1
  168. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  169. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  170. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  171. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  172. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  173. package/packages/media-execution/README.md +7 -3
  174. package/packages/media-execution/src/audio-presentation.ts +23 -0
  175. package/packages/media-execution/src/execute.ts +2 -0
  176. package/packages/media-pipeline/README.md +7 -3
  177. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  178. package/packages/media-pipeline/src/component.ts +16 -2
  179. package/packages/media-pipeline/src/manifest.ts +3 -1
  180. package/packages/media-pipeline/src/types.ts +2 -1
  181. package/packages/media-track/README.md +14 -47
  182. package/packages/media-track/package.json +1 -1
  183. package/packages/media-track/preview/preview.svml +5 -5
  184. package/packages/media-track/src/author.ts +12 -6
  185. package/packages/media-track/src/component.ts +10 -16
  186. package/packages/media-track/src/fragment.ts +8 -7
  187. package/packages/media-track/src/index.ts +3 -1
  188. package/packages/media-track/src/lower.ts +7 -7
  189. package/packages/media-track/src/manifest.ts +16 -38
  190. package/packages/media-track/src/program.ts +62 -67
  191. package/packages/media-track/src/sampling.ts +6 -6
  192. package/packages/media-track/src/sequence.ts +8 -8
  193. package/packages/media-track/src/surface.ts +25 -43
  194. package/packages/media-track-studio/README.md +9 -0
  195. package/packages/media-track-studio/src/index.ts +16 -11
  196. package/packages/mimo-speech/README.md +1 -1
  197. package/packages/minimax-h3/README.md +1 -1
  198. package/packages/nano-banana/README.md +1 -1
  199. package/packages/narrative/README.md +23 -1
  200. package/packages/narrative/src/identity.ts +11 -0
  201. package/packages/narrative/src/index.ts +3 -0
  202. package/packages/narrative/src/schema.ts +28 -27
  203. package/packages/narrative/src/selection.ts +52 -0
  204. package/packages/narrative/src/types.ts +2 -0
  205. package/packages/package-loader-node/README.md +30 -0
  206. package/packages/package-loader-node/package.json +5 -2
  207. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  208. package/packages/package-loader-node/src/index.ts +1 -0
  209. package/packages/package-loader-node/src/loader.ts +12 -15
  210. package/packages/package-loader-node/src/location.ts +27 -1
  211. package/packages/package-loader-node/src/module-scope.ts +183 -0
  212. package/packages/package-loader-node/src/types.ts +4 -0
  213. package/packages/performance/README.md +83 -0
  214. package/packages/performance/package.json +30 -0
  215. package/packages/performance/src/activation.ts +11 -0
  216. package/packages/performance/src/component.ts +46 -0
  217. package/packages/performance/src/index.ts +6 -0
  218. package/packages/performance/src/manifest.ts +53 -0
  219. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  220. package/packages/performance/src/program.ts +51 -0
  221. package/packages/performance/src/style.ts +35 -0
  222. package/packages/performance/src/surface.ts +99 -0
  223. package/packages/performance-studio/README.md +25 -0
  224. package/packages/performance-studio/package.json +21 -0
  225. package/packages/performance-studio/src/activation.ts +6 -0
  226. package/packages/performance-studio/src/index.ts +84 -0
  227. package/packages/program-space/README.md +9 -18
  228. package/packages/program-space/src/activation.ts +1 -5
  229. package/packages/program-space/src/index.ts +2 -11
  230. package/packages/program-space/src/surface.ts +1 -20
  231. package/packages/project-context-node/README.md +20 -0
  232. package/packages/project-context-node/package.json +10 -0
  233. package/packages/project-context-node/src/index.ts +3 -0
  234. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  235. package/packages/provider-hyperframes-local/README.md +43 -15
  236. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  237. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  238. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  239. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  240. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  241. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  242. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  243. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  244. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  245. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  246. package/packages/provider-hypihub/README.md +48 -17
  247. package/packages/provider-hypihub/package.json +2 -0
  248. package/packages/provider-hypihub/src/mapping.ts +31 -7
  249. package/packages/provider-hypihub/src/oauth.ts +6 -0
  250. package/packages/provider-hypihub/src/provider.ts +25 -13
  251. package/packages/provider-hypihub/src/routes.ts +1 -2
  252. package/packages/provider-hypihub/src/upload.ts +2 -0
  253. package/packages/provider-media-local/README.md +3 -4
  254. package/packages/provider-whisperx-local/src/program.ts +1 -0
  255. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  256. package/packages/ranking/README.md +8 -6
  257. package/packages/ranking/package.json +1 -1
  258. package/packages/ranking/src/component.ts +6 -6
  259. package/packages/ranking/src/fragment.ts +11 -7
  260. package/packages/ranking/src/manifest.ts +21 -14
  261. package/packages/ranking/src/render.ts +22 -26
  262. package/packages/ranking/src/schedule.ts +16 -19
  263. package/packages/ranking/src/surface.ts +12 -13
  264. package/packages/ranking-studio/README.md +18 -0
  265. package/packages/ranking-studio/src/index.ts +61 -9
  266. package/packages/render-hyperframes/README.md +7 -7
  267. package/packages/render-hyperframes/package.json +1 -1
  268. package/packages/render-hyperframes/src/component.ts +11 -1
  269. package/packages/render-hyperframes/src/fragment.ts +7 -4
  270. package/packages/render-hyperframes/src/manifest.ts +4 -4
  271. package/packages/render-hyperframes/src/surface.ts +6 -6
  272. package/packages/runtime/README.md +8 -1
  273. package/packages/runtime/src/execution.ts +15 -4
  274. package/packages/runtime/src/index.ts +2 -1
  275. package/packages/runtime/src/log.ts +51 -0
  276. package/packages/runtime/src/types.ts +5 -8
  277. package/packages/runtime-host-node/README.md +30 -0
  278. package/packages/runtime-host-node/package.json +1 -0
  279. package/packages/runtime-host-node/src/index.ts +24 -9
  280. package/packages/runtime-host-node/src/packages.ts +47 -50
  281. package/packages/runtime-kit/README.md +5 -0
  282. package/packages/runtime-kit/src/index.ts +3 -1
  283. package/packages/runtime-local/README.md +109 -4
  284. package/packages/runtime-local/src/config.ts +202 -56
  285. package/packages/runtime-local/src/control.ts +9 -1
  286. package/packages/runtime-local/src/executor.ts +66 -0
  287. package/packages/runtime-local/src/host.ts +37 -17
  288. package/packages/runtime-local/src/log.ts +48 -0
  289. package/packages/runtime-local/src/programs.ts +2 -1
  290. package/packages/runtime-local/src/result-writer.ts +2 -0
  291. package/packages/runtime-local/src/runtime.ts +8 -6
  292. package/packages/runtime-local/src/supervisor.ts +142 -0
  293. package/packages/runtime-local/src/types.ts +9 -2
  294. package/packages/runtime-local/src/worker-process.ts +7 -24
  295. package/packages/runtime-local/src/worker.ts +55 -83
  296. package/packages/screen-overlay/README.md +3 -3
  297. package/packages/screen-overlay/package.json +1 -1
  298. package/packages/screen-overlay/src/component.ts +3 -3
  299. package/packages/screen-overlay/src/fragment.ts +5 -4
  300. package/packages/screen-overlay/src/manifest.ts +7 -6
  301. package/packages/screen-overlay/src/program.ts +9 -9
  302. package/packages/screen-overlay/src/surface.ts +6 -7
  303. package/packages/script/README.md +30 -5
  304. package/packages/script/src/manifest.ts +4 -3
  305. package/packages/script/src/narrative.ts +1 -0
  306. package/packages/script/src/parser.ts +45 -6
  307. package/packages/script/src/surface.ts +4 -3
  308. package/packages/script/src/types.ts +1 -1
  309. package/packages/script-studio/package.json +9 -3
  310. package/packages/script-studio/src/index.ts +2 -0
  311. package/packages/script-studio/src/projection.ts +105 -0
  312. package/packages/seedance/README.md +30 -1
  313. package/packages/seedance/src/index.ts +18 -7
  314. package/packages/seedance/src/surface.ts +17 -4
  315. package/packages/seedance-kits/README.md +7 -1
  316. package/packages/seedream/README.md +1 -1
  317. package/packages/sound/README.md +81 -0
  318. package/packages/sound/package.json +25 -0
  319. package/packages/sound/src/activation.ts +11 -0
  320. package/packages/sound/src/component.ts +28 -0
  321. package/packages/sound/src/index.ts +5 -0
  322. package/packages/sound/src/manifest.ts +47 -0
  323. package/packages/sound/src/program.ts +84 -0
  324. package/packages/sound/src/style.ts +34 -0
  325. package/packages/sound/src/surface.ts +90 -0
  326. package/packages/sound-studio/README.md +22 -0
  327. package/packages/sound-studio/package.json +20 -0
  328. package/packages/sound-studio/src/activation.ts +6 -0
  329. package/packages/sound-studio/src/index.ts +74 -0
  330. package/packages/speech/README.md +2 -2
  331. package/packages/speech-alignment/src/local.ts +8 -0
  332. package/packages/speech-alignment/src/locate.ts +1 -1
  333. package/packages/store-sqlite/README.md +7 -0
  334. package/packages/store-sqlite/src/store.ts +84 -83
  335. package/packages/studio/INSPECTOR.md +15 -2
  336. package/packages/studio/LOCALIZATION.md +98 -0
  337. package/packages/studio/README.md +101 -14
  338. package/packages/studio/locales/en.json +197 -0
  339. package/packages/studio/locales/zh-CN.json +191 -0
  340. package/packages/studio/package.json +8 -7
  341. package/packages/studio/src/companion-assembly.ts +1 -0
  342. package/packages/studio/src/domain.ts +1 -1
  343. package/packages/studio/src/fallback-companions.ts +3 -3
  344. package/packages/studio/src/feedback-server.ts +51 -0
  345. package/packages/studio/src/feedback-store.ts +66 -0
  346. package/packages/studio/src/feedback.ts +60 -0
  347. package/packages/studio/src/localization-node.ts +46 -0
  348. package/packages/studio/src/localization.ts +85 -0
  349. package/packages/studio/src/parameter-values.ts +43 -1
  350. package/packages/studio/src/parameters.ts +114 -24
  351. package/packages/studio/src/preview/render.ts +5 -1
  352. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  353. package/packages/studio/src/programme.ts +14 -30
  354. package/packages/studio/src/server.ts +10 -6
  355. package/packages/studio/src/shared.ts +4 -2
  356. package/packages/studio/src/snapshot.ts +21 -132
  357. package/packages/studio/src/studio-preflight.ts +3 -3
  358. package/packages/studio/src/studio-registry.ts +50 -6
  359. package/packages/studio/src/style.css +223 -50
  360. package/packages/studio/src/ui/artifact-name.ts +8 -6
  361. package/packages/studio/src/ui/artifact-preview.ts +5 -4
  362. package/packages/studio/src/ui/code.ts +17 -16
  363. package/packages/studio/src/ui/comments.ts +234 -0
  364. package/packages/studio/src/ui/dropdown.ts +68 -0
  365. package/packages/studio/src/ui/i18n.ts +109 -0
  366. package/packages/studio/src/ui/icons.ts +6 -0
  367. package/packages/studio/src/ui/library.ts +76 -65
  368. package/packages/studio/src/ui/main.ts +223 -211
  369. package/packages/studio/src/ui/overlay.ts +12 -8
  370. package/packages/studio/src/ui/scrub-preview.ts +110 -0
  371. package/packages/studio/src/ui/stage.ts +93 -29
  372. package/packages/studio/src/ui/timeline.ts +190 -118
  373. package/packages/studio/start.ts +41 -22
  374. package/packages/studio-adapter/README.md +130 -11
  375. package/packages/studio-adapter/src/index.ts +100 -13
  376. package/packages/temporal/README.md +6 -6
  377. package/packages/temporal/package.json +1 -1
  378. package/packages/temporal/src/component.ts +5 -6
  379. package/packages/temporal/src/index.ts +8 -6
  380. package/packages/temporal/src/location.ts +11 -11
  381. package/packages/temporal/src/projection.ts +19 -19
  382. package/packages/temporal/src/rational.ts +4 -4
  383. package/packages/temporal-markup/EDITING.md +2 -2
  384. package/packages/temporal-markup/README.md +27 -11
  385. package/packages/temporal-markup/package.json +1 -1
  386. package/packages/temporal-markup/src/index.ts +20 -25
  387. package/packages/temporal-markup/src/space.ts +10 -41
  388. package/packages/timeline/README.md +31 -0
  389. package/packages/{semantic-track → timeline}/package.json +1 -1
  390. package/packages/timeline/src/activation.ts +8 -0
  391. package/packages/timeline/src/component.ts +24 -0
  392. package/packages/timeline/src/identity.ts +60 -0
  393. package/packages/timeline/src/index.ts +6 -0
  394. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  395. package/packages/timeline/src/manifest.ts +39 -0
  396. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  397. package/packages/timeline/src/types.ts +24 -0
  398. package/packages/timeline-author/README.md +68 -0
  399. package/packages/{speech-track → timeline-author}/package.json +6 -4
  400. package/packages/timeline-author/src/activation.ts +22 -0
  401. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  402. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  403. package/packages/timeline-author/src/index.ts +7 -0
  404. package/packages/timeline-author/src/manifest.ts +78 -0
  405. package/packages/timeline-author/src/program.ts +107 -0
  406. package/packages/timeline-author/src/surface.ts +46 -0
  407. package/packages/timeline-author/src/types.ts +6 -0
  408. package/packages/typography-track/README.md +4 -4
  409. package/packages/typography-track/package.json +1 -1
  410. package/packages/typography-track/src/component.ts +4 -4
  411. package/packages/typography-track/src/fragment.ts +4 -3
  412. package/packages/typography-track/src/manifest.ts +11 -9
  413. package/packages/typography-track/src/program.ts +15 -15
  414. package/packages/typography-track/src/surface.ts +17 -18
  415. package/packages/video-cli/README.md +4 -1
  416. package/packages/video-cli/package.json +2 -1
  417. package/packages/video-cli/src/creation.ts +14 -4
  418. package/packages/video-cli/src/index.ts +1 -1
  419. package/packages/video-cli/src/studio-distribution.ts +2 -1
  420. package/packages/volcengine-matting/README.md +3 -3
  421. package/packages/whisperx/README.md +1 -1
  422. package/services/whisperx/README.md +14 -0
  423. package/services/whisperx/pyproject.toml +2 -0
  424. package/services/whisperx/uv.lock +20 -20
  425. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  426. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  427. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  428. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  429. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  430. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  431. package/packages/provider-kie/README.md +0 -134
  432. package/packages/provider-kie/package.json +0 -43
  433. package/packages/provider-kie/src/activation.ts +0 -71
  434. package/packages/provider-kie/src/index.ts +0 -10
  435. package/packages/provider-kie/src/mapping.ts +0 -182
  436. package/packages/provider-kie/src/provider.ts +0 -657
  437. package/packages/provider-kie/src/routes.ts +0 -150
  438. package/packages/provider-xiaomi-mimo/README.md +0 -32
  439. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  440. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  441. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  442. package/packages/runtime/src/environment.ts +0 -6
  443. package/packages/semantic-track/README.md +0 -21
  444. package/packages/semantic-track/src/activation.ts +0 -8
  445. package/packages/semantic-track/src/component.ts +0 -24
  446. package/packages/semantic-track/src/identity.ts +0 -58
  447. package/packages/semantic-track/src/index.ts +0 -6
  448. package/packages/semantic-track/src/manifest.ts +0 -38
  449. package/packages/semantic-track/src/types.ts +0 -26
  450. package/packages/speech-track/README.md +0 -51
  451. package/packages/speech-track/src/activation.ts +0 -19
  452. package/packages/speech-track/src/index.ts +0 -7
  453. package/packages/speech-track/src/manifest.ts +0 -73
  454. package/packages/speech-track/src/program.ts +0 -64
  455. package/packages/speech-track/src/surface.ts +0 -35
  456. package/packages/speech-track/src/types.ts +0 -6
  457. package/packages/speech-track-studio/README.md +0 -3
  458. package/packages/speech-track-studio/package.json +0 -14
  459. package/packages/speech-track-studio/src/activation.ts +0 -7
  460. package/packages/speech-track-studio/src/index.ts +0 -40
  461. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  462. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -15,6 +15,8 @@
15
15
  "@hypit/composition": "workspace:*",
16
16
  "@hypit/narrative": "workspace:*",
17
17
  "@hypit/studio-adapter": "workspace:*",
18
- "@hypit/fonts-open": "workspace:*"
18
+ "@hypit/fonts-open": "workspace:*",
19
+ "@hypit/caption": "workspace:*",
20
+ "@hypit/timeline": "workspace:*"
19
21
  }
20
22
  }
@@ -1,7 +1,7 @@
1
- import { createStudioTrackCompanionHostFacet } from "@hypit/studio-adapter";
2
- import { captionFineStudioTrackCompanions } from "./index.js";
1
+ import { createStudioCompanionHostFacet } from "@hypit/studio-adapter";
2
+ import { captionFineStudioTrackCompanions, captionFineStudioParameterCompanions } from "./index.js";
3
3
 
4
4
  export default {
5
5
  format: "hypit.node-package@1" as const,
6
- hostFacets: [createStudioTrackCompanionHostFacet(captionFineStudioTrackCompanions)],
6
+ hostFacets: [createStudioCompanionHostFacet({ tracks: captionFineStudioTrackCompanions, parameters: captionFineStudioParameterCompanions })],
7
7
  };
@@ -1,5 +1,7 @@
1
+ import { temporalTypes } from "@hypit/temporal";
2
+ import type { CaptionProgram, TimedCaptionProjection } from "@hypit/caption";
1
3
  import { openFontStudioFields } from "@hypit/fonts-open/studio";
2
- import { captionFineMarkupSurfaces, captionFineModuleRef } from "@hypit/caption-fine";
4
+ import { fineCaptionEditableDefaults, captionFineMarkupSurfaces, captionFineModuleRef } from "@hypit/caption-fine";
3
5
  import type { FineCaptionSchedule } from "@hypit/caption-fine";
4
6
  import { compositionTypes } from "@hypit/composition";
5
7
  import { narrativeTypes } from "@hypit/narrative";
@@ -10,11 +12,11 @@ import type {
10
12
  StudioEntityDraft,
11
13
  StudioInspectorFieldDeclaration,
12
14
  } from "@hypit/studio-adapter";
13
- import { requiredReferencedValue, requiredSurfaceValue, textLayer } from "@hypit/studio-adapter";
15
+ import { authoredChildFor, temporalLineageFor, temporalSemanticSource, requiredReferencedValue, requiredSurfaceValue } from "@hypit/studio-adapter";
14
16
 
15
17
  const styleSurface = captionFineMarkupSurfaces.find((surface) => surface.name === "style");
16
18
 
17
- const fontInspector = openFontStudioFields("program");
19
+ const fontInspector = openFontStudioFields("style");
18
20
 
19
21
  const recipeVocabulary = styleSurface?.vocabulary.attributes
20
22
  .find((attribute) => attribute.name === "recipe")?.recipe ?? [];
@@ -95,7 +97,7 @@ export const captionFineInspectorFields: readonly StudioInspectorFieldDeclaratio
95
97
  if (placement === undefined) throw new Error(`Caption Studio has no explicit Inspector declaration for ${property.name}.`);
96
98
  const options = valuesFor(property);
97
99
  return {
98
- binding: `program.${property.name}`,
100
+ binding: `style.${property.name}`,
99
101
  label: title(property.name),
100
102
  ...placement,
101
103
  summary: property.summary,
@@ -118,39 +120,40 @@ function cueText(document: CaptionDocument | undefined, unitIds: readonly string
118
120
  .trim();
119
121
  }
120
122
 
121
- function projectCaption(context: StudioTrackCompanionContext): readonly StudioEntityDraft[] {
123
+ export function projectCaptionContents(context: StudioTrackCompanionContext): readonly StudioEntityDraft[] {
124
+ const content = requiredSurfaceValue(context, "content") as TimedCaptionProjection;
122
125
  const schedule = requiredSurfaceValue(context, "schedule") as FineCaptionSchedule;
123
126
  const document = requiredReferencedValue(context, "document", narrativeTypes.captionDocument) as CaptionDocument;
124
- if (document.id !== schedule.documentId) throw new Error("Caption Studio Schedule belongs to another CaptionDocument.");
125
- const rendered = new Map(context.generic().flatMap((entity) =>
126
- entity.presentId === undefined ? [] : [[entity.presentId, entity] as const]));
127
- return schedule.cues.map((cue): StudioEntityDraft => {
128
- const base = rendered.get(cue.id);
129
- const label = cueText(document, cue.units.map((unit) => unit.unitId));
130
- const authoredId = context.placement?.id ?? cue.id;
127
+ if (document.id !== content.documentId) throw new Error("Caption content belongs to another CaptionDocument.");
128
+ return content.cues.map((cue, index): StudioEntityDraft => ({
129
+ id: `${context.track.outputRef}:cue:${cue.id}`, authoredId: cue.id,
130
+ display: { title: `#${index + 1}`, layers: [{ kind: "text", role: "content", text: cueText(document, cue.units.map(unit => unit.unitId)) }] },
131
+ startFrame: cue.startFrame, endFrameExclusive: cue.endFrameExclusive, stackOrder: 0,
132
+ renderIds: schedule.cues.filter(item => item.cueId === cue.id).map(item => item.id),
133
+ presentation: { entity: "caption-cue", chrome: "standard" },
134
+ inspector: [{ id: "range", label: "Range", domain: "when", section: { id: "cue", label: "Cue" }, value: `${cue.startFrame}–${cue.endFrameExclusive}`, unit: "f" }],
135
+ }));
136
+ }
137
+
138
+ export function projectCaption(context: StudioTrackCompanionContext): readonly StudioEntityDraft[] {
139
+ const program = requiredSurfaceValue(context, "program") as CaptionProgram;
140
+ const uses: StudioEntityDraft[] = program.uses.map((use, index) => {
141
+ const authoredId = use.window.subjectId;
142
+ const child = authoredChildFor(context, authoredId, [temporalTypes.windowSpec]);
143
+ if (child === undefined) throw new Error(`Caption Use ${authoredId} has no author provenance.`);
144
+ const temporal = temporalLineageFor(context, authoredId, "window");
145
+ const semantic = temporalSemanticSource(temporal);
131
146
  return {
132
- ...(base ?? {
133
- id: `${context.track.outputRef}:entity:${cue.id}`,
134
- authoredId: cue.id,
135
- display: { title: "Caption", layers: [] },
136
- startFrame: cue.visibleStartFrame,
137
- endFrameExclusive: cue.visibleEndFrameExclusive,
138
- stackOrder: 0,
139
- presentId: cue.id,
140
- renderIds: [cue.id],
141
- }),
142
- authoredId,
143
- ...(context.placement === undefined ? {} : { elementRange: context.placement.range }),
144
- display: {
145
- title: "Caption",
146
- layers: label.length === 0 ? [] : [textLayer(label)],
147
- },
148
- startFrame: cue.visibleStartFrame,
149
- endFrameExclusive: cue.visibleEndFrameExclusive,
150
- presentation: { entity: "caption-cue", chrome: "standard" },
151
- parameterReferences: { program: cue.styleId },
147
+ id: `${context.track.outputRef}:use:${authoredId}`, authoredId,
148
+ display: { title: use.styleId, layers: [] },
149
+ ...use.window.span, stackOrder: index, elementRange: child.range,
150
+ ...(temporal === undefined ? {} : { temporal }),
151
+ ...(semantic === undefined ? {} : { markerId: semantic.id }),
152
+ presentation: { entity: "caption-use", chrome: "standard" }, band: "uses",
153
+ inspector: [{ id: "range", label: "Range", domain: "when", section: { id: "placement", label: "Placement" }, value: `${use.window.span.startFrame}–${use.window.span.endFrameExclusive}`, unit: "f" }],
152
154
  };
153
155
  });
156
+ return [...projectCaptionContents(context), ...uses];
154
157
  }
155
158
 
156
159
  export const captionFineStudioTrackCompanions: readonly StudioTrackCompanion[] = [
@@ -158,15 +161,24 @@ export const captionFineStudioTrackCompanions: readonly StudioTrackCompanion[] =
158
161
  id: "track", role: "track",
159
162
  output: { type: compositionTypes.visualTrack, surface: "track", modules: [captionFineModuleRef] },
160
163
  family: "caption", tone: "magenta", icon: "captions",
161
- bindings: [
162
- {
163
- name: "program",
164
- referenced: [fontInspector.binding],
165
- recipe: { through: ["recipe"], bindings: recipeVocabulary.map(({ name }) => ({ name })) },
166
- },
167
- ],
168
- inspector: [...fontInspector.fields, ...captionFineInspectorFields],
169
- requiredValues: ["schedule"], project: projectCaption,
170
- lane: { heightPx: 48 },
164
+ lane: { heightPx: 36 },
165
+ bands: [{
166
+ id: "uses", placement: "after", heightPx: 15, display: "label",
167
+ bindings: [{ name: "style", companion: true }],
168
+ inspector: [{ binding: "style", label: "Style", domain: "how", section: { id: "style", label: "Style" }, control: "text" }],
169
+ }],
170
+ requiredValues: ["content", "schedule", "program"], project: projectCaption,
171
+
171
172
  },
172
173
  ];
174
+
175
+ export const captionFineStudioParameterCompanions: readonly import("@hypit/studio-adapter").StudioParameterCompanion[] = [{
176
+ id: "style", match: { module: captionFineModuleRef, surface: "style" },
177
+ bindings: [fontInspector.binding, { name: "recipe", recipe: { bindings: recipeVocabulary.map(({ name }) => ({ name,
178
+ ...(Object.hasOwn(fineCaptionEditableDefaults, name) ? { fallback: fineCaptionEditableDefaults[name as keyof typeof fineCaptionEditableDefaults] } : {}),
179
+ })) } }],
180
+ inspector: [
181
+ ...fontInspector.fields.map(field => ({ ...field, binding: field.binding.replace(/^style\./u, "") })),
182
+ ...captionFineInspectorFields.map(field => ({ ...field, binding: field.binding.replace(/^style\./u, "recipe.") })),
183
+ ],
184
+ }];
@@ -11,9 +11,37 @@ Source imports decide which language and component packages give the source mean
11
11
  Profile separately selects Credential Stores and Endpoints allowed to execute work. The CLI does not
12
12
  invent targets, candidates or Provider choices.
13
13
 
14
- Human output is compact by default. `--json` emits a command-specific view rather than raw compiler,
15
- Runtime or Repository objects. `--verbose` adds operational detail; it never turns the command into
16
- an internal state dump.
14
+ Human and JSON output answer the same command-specific question. `--json` changes encoding;
15
+ `--verbose` expands scope. Compiler, Runtime and Repository objects are not default reports.
16
+
17
+ | Command | Default scope | Explicit detail |
18
+ | --- | --- | --- |
19
+ | `check` | Validation, targets and counts | `--verbose`: exported names/types and historical references |
20
+ | `plan` | Targets, demanded requests, Endpoint selection and diagnostics | `--verbose`: Run choices, graph step count and unreached declarations |
21
+ | `pricing` | Requests that may incur a Provider charge and their rate material | `--verbose`: declared no-charge requests and original documents |
22
+ | `status`, `activity` | Current work, Provider-reported phases and failures | `--verbose`: individual operations; activity also includes capacity reservations |
23
+ | `inspect` | Targets and explicitly highlighted Outputs, outcome and failure evidence | `--output <name>` selects one Output; `--verbose` browses all available Outputs and receipts |
24
+ | `doctor`, `programs` | Complete diagnostics; program discovery or the unmet result of an explicit lifecycle action | `--verbose`: successful lifecycle details; `--limit` bounds the healthy program list |
25
+
26
+ Run choices count explicit Candidate selections, which can supply existing work or execute an
27
+ alternative producer. They are not a count of reused files. Result output counts describe all
28
+ available named Outputs, including forwarded ones; they are not a count of newly generated assets.
29
+ `history <output>` lists Builds containing that name, including reuse, rather than deduplicating
30
+ generation events or guessing whether mutable external files still contain the same bytes.
31
+ `inspect` chooses names before resolving references, so an unrelated Output cannot delay or break
32
+ inspection of a target. It reports the number of other Outputs without reading their descriptions.
33
+
34
+ `plan` retains every target, demanded request and preflight diagnostic in both encodings. `--limit`
35
+ bounds expanded detail, not the work inventory before grouping. `inspect` likewise keeps its default
36
+ target/highlight selection intact; `--limit` bounds the broader `--verbose` list, with an omitted count.
37
+ No-charge classification continues to belong to the selected Endpoint's pricing declaration.
38
+
39
+ Build follow and status include Provider-reported local Command activity as well as asynchronous
40
+ Operations. Follow coalesces counters into readable updates and continues to distinguish execution
41
+ from Result saving. Status groups identical active Operations and retains failures by default;
42
+ completed receipts are detail. Activity reports the phases that trigger its updates and ignores
43
+ changes confined to Builds outside the displayed page. Providers own the phase vocabulary; the CLI
44
+ does not interpret model or renderer names.
17
45
 
18
46
  ## Project and Runtime context
19
47
 
@@ -24,7 +52,8 @@ directory, including when `--workspace` is supplied.
24
52
 
25
53
  Runtime-aware commands use an explicit `--runtime` for that invocation, or read exactly the resolved
26
54
  project's `.hypit/runtime` pointer. `runtime use` writes the pointer; a Profile filename by itself does
27
- not select it. Project selection is also available on `paths`, `doctor`, execution status/control,
55
+ not select it. The pointer is a file, separate from the Profile's `dataRoot`; a directory at that
56
+ path is reported explicitly and preserved. Project selection is also available on `paths`, `doctor`, execution status/control,
28
57
  Runtime operations, `programs` and `auth`. Machine-wide `packages` operations have no project selector.
29
58
 
30
59
  `paths` shows the effective locations and whether the Profile came from a command argument, a project
@@ -46,6 +75,9 @@ settings without searching arbitrary records for a request-shaped object. When a
46
75
  made by an earlier Build step, that direct graph edge stays symbolic until the file exists; the rest
47
76
  of the request is still shown. A complete request is resolved through the same Endpoint Registry as
48
77
  the Build, including the Endpoint's `supports` check.
78
+ Each component's planned-Need presentation owns its useful request fields. An empty presentation
79
+ means the summary is unavailable, not that the request has no parameters. Structured render inputs
80
+ are summarized by their owning packages; the CLI does not traverse upstream graphs to invent them.
49
81
 
50
82
  `pricing <run>` uses that selected Runtime to read Provider-owned rate material. The default report
51
83
  summarizes requests whose resolved Endpoint explicitly declares `pricing.kind: "local"` as having no
@@ -74,3 +106,24 @@ machine-view union. `main.ts` resolves project and selected Runtime context sepa
74
106
  syntax, then routes these command groups. Result commands do not consult or construct a Runtime,
75
107
  and the generic CLI cannot silently choose a Result Repository or a Provider-specific login
76
108
  flow.
109
+
110
+ ## Execution logs
111
+
112
+ `hypit logs <build-id> [--workspace <project>] [--runtime <profile>] [--lines <count>]` reads Build
113
+ execution phases and Provider diagnostics. It reads a finished Result directly, without opening the
114
+ Runtime; an active Build is read through Runtime control. The selected Repository handles file access.
115
+ `--lines` limits the tail and the report states the omitted count; JSON carries records plus that count.
116
+ `inspect` exposes an available log separately from authored Outputs. `hypit runtime logs` reads the
117
+ Worker process log instead, for Runtime startup or process-level failures.
118
+
119
+ Project context resolution is owned by [`@hypit/project-context-node`](../project-context-node/README.md).
120
+ CLI, Studio and creation tools call that same package; the CLI is not another environment owner.
121
+
122
+ `doctor`, `programs up|status|down`, and `runtime up` accept repeated `--endpoint <instance>` values.
123
+ The same Endpoint scope reaches package preparation and Program operations. Omission means the whole
124
+ Profile. Build preflight instead uses the Endpoints resolved for that Build's concrete requests.
125
+ An unrelated offered capability does not add another credential or Program requirement.
126
+
127
+ Upstream package installation reports an `install.log` path at preparation time. Exact package
128
+ releases coexist below the machine home, each with npm's own package.json and lockfile. `paths` shows
129
+ the home; `packages status <name@version>` checks the requested release rather than a mutable latest copy.
@@ -16,6 +16,7 @@
16
16
  "@hypit/driver-node": "workspace:*",
17
17
  "@hypit/elaborator": "workspace:*",
18
18
  "@hypit/package-loader-node": "workspace:*",
19
+ "@hypit/project-context-node": "workspace:*",
19
20
  "@hypit/protocol": "workspace:*",
20
21
  "@hypit/run": "workspace:*",
21
22
  "@hypit/runtime": "workspace:*",
@@ -18,6 +18,7 @@ type RawOptions = {
18
18
  readonly presentation: CliOutputOptions;
19
19
  readonly workspaceRoot?: string;
20
20
  readonly assetRoots: readonly string[];
21
+ readonly endpoints: readonly string[];
21
22
  readonly packageRoot?: string;
22
23
  readonly runtimeProfile?: string;
23
24
  readonly follow: boolean;
@@ -36,6 +37,7 @@ type RawOptions = {
36
37
  readonly watch: boolean;
37
38
  readonly readyFile?: string;
38
39
  readonly workerOwner?: string;
40
+ readonly executionRoot?: string;
39
41
  readonly reason?: string;
40
42
  readonly slot?: string;
41
43
  readonly credentialFile?: string;
@@ -155,6 +157,12 @@ export function parseCommand(argv: readonly string[]): CliCommand {
155
157
  ...optionalProject(options),
156
158
  };
157
159
  }
160
+ case "logs": {
161
+ const [build, rest] = requiredPositional(tail, "logs requires one Build id");
162
+ const options = commandOptions(command, rest, "--runtime", "--workspace", "--lines");
163
+ return { command, build, lines: options.lines, presentation: options.presentation,
164
+ ...optionalProject(options), ...optionalRuntime(options) };
165
+ }
158
166
  case "status": {
159
167
  const [build, rest] = requiredPositional(tail, "status requires one Build id");
160
168
  const options = commandOptions(command, rest, "--runtime", "--workspace", "--watch", "--max-wait-ms", "--limit");
@@ -205,12 +213,13 @@ export function parseCommand(argv: readonly string[]): CliCommand {
205
213
  case "auth": return parseAuthCommand(tail);
206
214
  case "doctor": {
207
215
  const [profile, rest] = optionalPositional(tail);
208
- const options = commandOptions(command, rest, "--workspace", "--runtime", "--limit");
216
+ const options = commandOptions(command, rest, "--workspace", "--runtime", "--limit", "--endpoint");
209
217
  if (profile !== undefined && options.runtimeProfile !== undefined) {
210
218
  throw new Error("doctor accepts the Runtime Profile either positionally or with --runtime, not both");
211
219
  }
212
220
  return {
213
221
  command,
222
+ ...(options.endpoints.length === 0 ? {} : { endpoints: options.endpoints }),
214
223
  presentation: options.presentation,
215
224
  limit: options.limit,
216
225
  ...optionalProject(options),
@@ -223,7 +232,7 @@ export function parseCommand(argv: readonly string[]): CliCommand {
223
232
  }
224
233
  case "_worker": {
225
234
  const [profile, rest] = requiredPositional(tail, "internal Worker launch is incomplete");
226
- const options = commandOptions(command, rest, "--ready-file", "--worker-owner", "--package-root");
235
+ const options = commandOptions(command, rest, "--ready-file", "--worker-owner", "--package-root", "--execution-root");
227
236
  if (options.readyFile === undefined || options.workerOwner === undefined) {
228
237
  throw new Error("internal Worker launch is incomplete");
229
238
  }
@@ -232,6 +241,7 @@ export function parseCommand(argv: readonly string[]): CliCommand {
232
241
  profile,
233
242
  readyFile: options.readyFile,
234
243
  workerOwner: options.workerOwner,
244
+ ...(options.executionRoot === undefined ? {} : { executionRoot: options.executionRoot }),
235
245
  presentation: options.presentation,
236
246
  ...optionalPackageRoot(options),
237
247
  };
@@ -305,7 +315,7 @@ function parseRuntimeCommand(tail: readonly string[]): RuntimeSelectionCommand |
305
315
  }
306
316
  const [profile, rest] = optionalPositional(values);
307
317
  const allowed = action === "up" || action === "down"
308
- ? ["--runtime", "--max-wait-ms"] as const
318
+ ? action === "up" ? ["--runtime", "--max-wait-ms", "--endpoint"] as const : ["--runtime", "--max-wait-ms"] as const
309
319
  : action === "status"
310
320
  ? ["--runtime", "--limit"] as const
311
321
  : ["--runtime", "--lines"] as const;
@@ -320,7 +330,7 @@ function parseRuntimeCommand(tail: readonly string[]): RuntimeSelectionCommand |
320
330
  ...optionalProject(options),
321
331
  };
322
332
  if (action === "up" || action === "down") {
323
- return { ...common, action, ...(options.maxWaitMs === undefined ? {} : { maxWaitMs: options.maxWaitMs }) };
333
+ return { ...common, action, ...(action === "up" && options.endpoints.length > 0 ? { endpoints: options.endpoints } : {}), ...(options.maxWaitMs === undefined ? {} : { maxWaitMs: options.maxWaitMs }) };
324
334
  }
325
335
  if (action === "status") return { ...common, action, limit: options.limit };
326
336
  return { ...common, action, lines: options.lines };
@@ -333,7 +343,7 @@ function parseProgramsCommand(tail: readonly string[]): ProgramsCommand {
333
343
  }
334
344
  const [profile, rest] = optionalPositional(values);
335
345
  const options = commandOptions(`programs ${action}`, rest,
336
- "--runtime", "--workspace", "--limit", "--max-wait-ms");
346
+ "--runtime", "--workspace", "--limit", "--max-wait-ms", "--endpoint");
337
347
  if (action !== "up" && options.maxWaitMs !== undefined) {
338
348
  throw new Error("--max-wait-ms applies to programs up");
339
349
  }
@@ -341,6 +351,7 @@ function parseProgramsCommand(tail: readonly string[]): ProgramsCommand {
341
351
  const runtime = runtimeOption(profile ?? options.runtimeProfile);
342
352
  const common = {
343
353
  command: "programs" as const,
354
+ ...(options.endpoints.length === 0 ? {} : { endpoints: options.endpoints }),
344
355
  action,
345
356
  presentation: options.presentation,
346
357
  limit: options.limit,
@@ -403,6 +414,7 @@ function parseOptions(values: readonly string[]): RawOptions {
403
414
  let runtimeProfile: string | undefined;
404
415
  let follow = false;
405
416
  let maxWaitMs: number | undefined;
417
+ const endpoints: string[] = [];
406
418
  let outputName: string | undefined;
407
419
  let title: string | undefined;
408
420
  let note: string | undefined;
@@ -421,6 +433,7 @@ function parseOptions(values: readonly string[]): RawOptions {
421
433
  let watch = false;
422
434
  let readyFile: string | undefined;
423
435
  let workerOwner: string | undefined;
436
+ let executionRoot: string | undefined;
424
437
  let reason: string | undefined;
425
438
  let slot: string | undefined;
426
439
  let credentialFile: string | undefined;
@@ -429,7 +442,7 @@ function parseOptions(values: readonly string[]): RawOptions {
429
442
  for (let index = 0; index < values.length; index += 1) {
430
443
  const item = values[index]!;
431
444
  if (!item.startsWith("--")) throw new Error(`unexpected positional argument ${item}`);
432
- const repeatable = [
445
+ const repeatable = item === "--endpoint" || [
433
446
  "--json", "--jsonl", "--watch", "--verbose", "--debug",
434
447
  "--no-color", "--follow", "--asset-root", "--highlight",
435
448
  ].includes(item);
@@ -450,6 +463,7 @@ function parseOptions(values: readonly string[]): RawOptions {
450
463
  index += 1;
451
464
  continue;
452
465
  }
466
+ if (item === "--endpoint") { endpoints.push(optionValue(values, index, "--endpoint requires an Endpoint name")); index += 1; continue; }
453
467
  if (item === "--workspace") {
454
468
  workspaceRoot = resolve(optionValue(values, index, "--workspace requires a directory")); index += 1; continue;
455
469
  }
@@ -506,6 +520,9 @@ function parseOptions(values: readonly string[]): RawOptions {
506
520
  if (item === "--worker-owner") {
507
521
  workerOwner = optionValue(values, index, "--worker-owner requires an identity"); index += 1; continue;
508
522
  }
523
+ if (item === "--execution-root") {
524
+ executionRoot = resolve(optionValue(values, index, "--execution-root requires a path")); index += 1; continue;
525
+ }
509
526
  if (item === "--reason") {
510
527
  reason = optionValue(values, index, "--reason requires text"); index += 1; continue;
511
528
  }
@@ -527,6 +544,7 @@ function parseOptions(values: readonly string[]): RawOptions {
527
544
  presentation: { json: json || jsonl, ...(jsonl ? { jsonl: true } : {}), color, verbose },
528
545
  assetRoots,
529
546
  follow,
547
+ endpoints,
530
548
  highlightedOutputs,
531
549
  clearTitle,
532
550
  clearNote,
@@ -546,6 +564,7 @@ function parseOptions(values: readonly string[]): RawOptions {
546
564
  ...(destination === undefined ? {} : { destination }),
547
565
  ...(readyFile === undefined ? {} : { readyFile }),
548
566
  ...(workerOwner === undefined ? {} : { workerOwner }),
567
+ ...(executionRoot === undefined ? {} : { executionRoot }),
549
568
  ...(reason === undefined ? {} : { reason }),
550
569
  ...(slot === undefined ? {} : { slot }),
551
570
  ...(credentialFile === undefined ? {} : { credentialFile }),
@@ -421,9 +421,10 @@ export function assertPlannedRequests(
421
421
  }
422
422
  }
423
423
 
424
- export async function preflightPlan(host: NodeRuntimeHost, state: BuildState) {
424
+ export async function preflightPlan(host: NodeRuntimeHost, state: BuildState, providers: readonly PlanProviderView[]) {
425
425
  const capabilities = demandedCapabilities(state);
426
- const result = await host.preflight({ capabilities });
426
+ const endpoints = [...new Set(providers.flatMap((item) => item.status === "resolved" && item.endpoint !== undefined ? [item.endpoint] : []))];
427
+ const result = await host.preflight({ endpoints });
427
428
  return {
428
429
  ok: !result.diagnostics.some((item) => item.severity === "error"),
429
430
  capabilities: capabilities.map(capabilityName),
@@ -72,6 +72,7 @@ export type ProjectResultCommand =
72
72
  });
73
73
 
74
74
  export type ExecutionCommand =
75
+ | (CommandBase & RuntimeOption & { readonly command: "logs"; readonly build: string; readonly lines: number })
75
76
  | (CommandBase & RuntimeOption & {
76
77
  readonly command: "status";
77
78
  readonly build: string;
@@ -115,6 +116,7 @@ export type RuntimeOperationCommand =
115
116
  | (CommandBase & RuntimeOption & {
116
117
  readonly command: "runtime";
117
118
  readonly action: "up";
119
+ readonly endpoints?: readonly string[];
118
120
  readonly maxWaitMs?: number;
119
121
  })
120
122
  | (CommandBase & RuntimeOption & {
@@ -136,12 +138,14 @@ export type RuntimeOperationCommand =
136
138
  export type ProgramsCommand =
137
139
  | (CommandBase & RuntimeOption & {
138
140
  readonly command: "programs";
141
+ readonly endpoints?: readonly string[];
139
142
  readonly action: "up";
140
143
  readonly maxWaitMs?: number;
141
144
  readonly limit: number;
142
145
  })
143
146
  | (CommandBase & RuntimeOption & {
144
147
  readonly command: "programs";
148
+ readonly endpoints?: readonly string[];
145
149
  readonly action: "down" | "status";
146
150
  readonly limit: number;
147
151
  });
@@ -182,6 +186,7 @@ export type EnvironmentCommand =
182
186
  })
183
187
  | (CommandBase & ProjectOption & RuntimeOption & {
184
188
  readonly command: "doctor";
189
+ readonly endpoints?: readonly string[];
185
190
  readonly limit: number;
186
191
  });
187
192
 
@@ -190,6 +195,7 @@ export type WorkerCommand = CommandBase & {
190
195
  readonly profile: string;
191
196
  readonly readyFile: string;
192
197
  readonly workerOwner: string;
198
+ readonly executionRoot?: string;
193
199
  readonly packageRoot?: string;
194
200
  };
195
201
 
@@ -73,8 +73,8 @@ export async function runEnvironmentCommand(input: {
73
73
  };
74
74
  const reportPackageProgress = args.presentation.json
75
75
  ? undefined
76
- : (event: { readonly specifier: string; readonly phase: "checking" | "installing" | "ready" }): void => {
77
- if (event.phase === "installing") io.write(` · Installing ${event.specifier}\n`);
76
+ : (event: { readonly specifier: string; readonly phase: "checking" | "installing" | "ready"; readonly logPath?: string }): void => {
77
+ if (event.phase === "installing") io.write(` · Installing ${event.specifier}${event.logPath === undefined ? "" : ` · log ${event.logPath}`}\n`);
78
78
  };
79
79
  const reportCredentialProgress = args.presentation.json
80
80
  ? io.writeProgress
@@ -126,10 +126,13 @@ export async function runEnvironmentCommand(input: {
126
126
  action: args.action,
127
127
  package: args.package,
128
128
  ready,
129
+ ...(reports[0] === undefined ? {} : { installation: reports[0].root }),
130
+ ...(reports[0]?.logPath === undefined ? {} : { logPath: reports[0].logPath }),
129
131
  }, args.action === "install" ? "Machine package is ready" : "Machine package status",
130
132
  ready ? "success" : "warning", [
131
133
  ["Package", args.package],
132
134
  ["Ready", String(ready)],
135
+ ...(args.presentation.verbose && reports[0] !== undefined ? [["Installation", reports[0].root] as const] : []),
133
136
  ]);
134
137
  if (!ready) io.setExitCode?.(1);
135
138
  return;
@@ -138,7 +141,7 @@ export async function runEnvironmentCommand(input: {
138
141
  if (args.command === "doctor") {
139
142
  const profile = runtimeProfile === undefined ? undefined : resolve(runtimeProfile);
140
143
  const [runtimeResult, projectResult] = await Promise.all([
141
- profile === undefined ? undefined : (await runtimeHost(profile)).doctor(),
144
+ profile === undefined ? undefined : (await runtimeHost(profile)).doctor(args.endpoints === undefined ? {} : { endpoints: args.endpoints }),
142
145
  distribution.diagnoseProjectResults(projectRoot, {
143
146
  packageRoot: await packageRootForProject(),
144
147
  ...(distribution.packageRoot === undefined
@@ -155,8 +158,7 @@ export async function runEnvironmentCommand(input: {
155
158
  ...(runtimeSelectionFile === undefined ? {} : { selectionFile: runtimeSelectionFile }),
156
159
  ...(profile === undefined ? {} : { profile }),
157
160
  diagnosticCount: diagnostics.length,
158
- diagnostics: diagnostics.slice(0, args.limit),
159
- ...(diagnostics.length <= args.limit ? {} : { omittedDiagnostics: diagnostics.length - args.limit }),
161
+ diagnostics,
160
162
  };
161
163
  writeCliOutput(io, args.presentation, { kind: "doctor", machine });
162
164
  if (!machine.ok) io.setExitCode?.(1);
@@ -168,21 +170,27 @@ export async function runEnvironmentCommand(input: {
168
170
  const profile = resolve(runtimeProfile);
169
171
  const host = await runtimeHost(profile);
170
172
  if (args.action === "up") {
171
- await host.prepare(reportPackageProgress === undefined ? {} : { onProgress: reportPackageProgress });
173
+ await host.prepare({ ...(args.endpoints === undefined ? {} : { endpoints: args.endpoints }), ...(reportPackageProgress === undefined ? {} : { onProgress: reportPackageProgress }) });
172
174
  }
173
175
  const controller = await runtimeController(profile);
174
176
  const result = args.action === "up"
175
177
  ? await controller.programs.up({
178
+ ...(args.endpoints === undefined ? {} : { endpoints: args.endpoints }),
176
179
  ...(args.maxWaitMs === undefined ? {} : { maxWaitMs: args.maxWaitMs }),
177
180
  ...(reportProgramProgress === undefined ? {} : { onProgress: reportProgramProgress }),
178
181
  })
179
182
  : args.action === "down"
180
- ? await controller.programs.down()
181
- : await controller.programs.report();
183
+ ? await controller.programs.down(args.endpoints === undefined ? {} : { endpoints: args.endpoints })
184
+ : await controller.programs.report(args.endpoints === undefined ? {} : { endpoints: args.endpoints });
182
185
  const ready = result.programs.every((item) => item.state.state === "ready");
183
186
  const desiredState = args.action === "down" ? !result.programs.some((item) => item.state.state === "ready") : ready;
184
187
  const lifecycleOk = args.action === "status" || desiredState;
185
- const shownPrograms = result.programs.filter((item) => args.presentation.verbose || item.state.state !== "ready").slice(0, args.limit);
188
+ const needsAttention = (item: typeof result.programs[number]) => args.action === "down"
189
+ ? item.state.state === "ready" : item.state.state !== "ready";
190
+ const relevant = result.programs.filter((item) => args.presentation.verbose || args.action === "status" || needsAttention(item));
191
+ const urgent = relevant.filter(needsAttention);
192
+ const shownPrograms = [...urgent, ...relevant.filter((item) => !needsAttention(item)).slice(0, Math.max(0, args.limit - urgent.length))];
193
+ const omittedPrograms = relevant.length - shownPrograms.length;
186
194
  const title = args.action === "up"
187
195
  ? desiredState ? "External programs ready" : "External programs need attention"
188
196
  : args.action === "down"
@@ -192,15 +200,17 @@ export async function runEnvironmentCommand(input: {
192
200
  format: "hypit.cli-programs@1",
193
201
  action: args.action,
194
202
  ready,
195
- programs: result.programs.slice(0, args.limit).map(programRecord),
196
- ...(result.programs.length <= args.limit ? {} : { omittedPrograms: result.programs.length - args.limit }),
203
+ programCount: result.programs.length,
204
+ readyCount: result.programs.filter((item) => item.state.state === "ready").length,
205
+ programs: shownPrograms.map(programRecord),
206
+ ...(omittedPrograms === 0 ? {} : { omittedPrograms }),
197
207
  }, title,
198
208
  args.action === "status" ? ready ? "success" : "info" : lifecycleOk ? "success" : "warning", [
199
209
  ...(!args.presentation.verbose && lifecycleOk && args.action !== "status" ? [] : [
200
210
  ["Programs", String(result.programs.length)] as const,
201
211
  ["Ready", String(result.programs.filter((item) => item.state.state === "ready").length)] as const,
202
212
  ]),
203
- ], shownPrograms.map(programDescription));
213
+ ], shownPrograms.map(programDescription).concat(omittedPrograms === 0 ? [] : [`${omittedPrograms} more programs · use --limit <count>`]));
204
214
  if (!lifecycleOk) io.setExitCode?.(1);
205
215
  return;
206
216
  }
@@ -213,11 +223,12 @@ export async function runEnvironmentCommand(input: {
213
223
  const packageRoot = await packageRootForProject();
214
224
  const host = await runtimeHost(profile, packageRoot);
215
225
  const prepared = await host.prepare(
216
- reportPackageProgress === undefined ? {} : { onProgress: reportPackageProgress },
226
+ { ...(args.endpoints === undefined ? {} : { endpoints: args.endpoints }), ...(reportPackageProgress === undefined ? {} : { onProgress: reportPackageProgress }) },
217
227
  );
218
- const validated = await host.createRuntime();
228
+ const validated = await host.createRuntime(args.endpoints === undefined ? {} : { endpoints: args.endpoints });
219
229
  await validated.close();
220
230
  const external = await controller.programs.up({
231
+ ...(args.endpoints === undefined ? {} : { endpoints: args.endpoints }),
221
232
  ...(args.maxWaitMs === undefined ? {} : { maxWaitMs: args.maxWaitMs }),
222
233
  ...(reportProgramProgress === undefined ? {} : { onProgress: reportProgramProgress }),
223
234
  });
@@ -234,7 +245,7 @@ export async function runEnvironmentCommand(input: {
234
245
  programs: {
235
246
  total: external.programs.length,
236
247
  ready: external.programs.filter((item) => item.state.state === "ready").length,
237
- items: external.programs.map(programRecord),
248
+ items: external.programs.filter((item) => args.presentation.verbose || item.state.state !== "ready").map(programRecord),
238
249
  },
239
250
  }, ok ? "Local Runtime ready" : "Local Runtime needs attention", ok ? "success" : "warning", [
240
251
  ...(!args.presentation.verbose && ok ? [] : [
@@ -300,13 +311,12 @@ export async function runEnvironmentCommand(input: {
300
311
  attention,
301
312
  worker: {
302
313
  state: worker.state,
303
- ...(worker.configuration === undefined ? {} : { configuration: worker.configuration }),
304
314
  },
305
315
  builds: counts,
306
316
  programs: {
307
317
  total: external.programs.length,
308
318
  ready: external.programs.length - unavailable.length,
309
- unavailable: unavailable.slice(0, args.limit).map((item) => ({ id: item.id, state: item.state.state })),
319
+ unavailable: unavailable.map(programRecord),
310
320
  },
311
321
  capacity: {
312
322
  active: activity.capacity.length,
@@ -326,7 +336,7 @@ export async function runEnvironmentCommand(input: {
326
336
  ["Capacity in use", String(activity.capacity.length)] as const,
327
337
  ] : []),
328
338
  ], [
329
- ...unavailable.slice(0, args.limit).map((item) => `${item.id}: ${item.state.state}`),
339
+ ...unavailable.map(programDescription),
330
340
  ]);
331
341
  } finally {
332
342
  if (runtime !== undefined) await runtime.close();