@hypit/hypit 0.0.1 → 0.1.1

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 (961) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +142 -0
  3. package/bin/hypit.mjs +46 -0
  4. package/dist/public/artifact.d.ts +75 -0
  5. package/dist/public/author-kit.d.ts +559 -0
  6. package/dist/public/browser-capture.d.ts +56 -0
  7. package/dist/public/caption.d.ts +751 -0
  8. package/dist/public/composition.d.ts +672 -0
  9. package/dist/public/endpoint-kit.d.ts +366 -0
  10. package/dist/public/generation.d.ts +591 -0
  11. package/dist/public/hyperframes.d.ts +774 -0
  12. package/dist/public/media.d.ts +708 -0
  13. package/dist/public/model-kit.d.ts +523 -0
  14. package/dist/public/narrative.d.ts +315 -0
  15. package/dist/public/program-space.d.ts +193 -0
  16. package/dist/public/runtime-kit.d.ts +427 -0
  17. package/dist/public/semantic-track.d.ts +418 -0
  18. package/dist/public/spatial.d.ts +1193 -0
  19. package/dist/public/speech.d.ts +391 -0
  20. package/dist/public/studio-adapter.d.ts +686 -0
  21. package/dist/public/svs.d.ts +311 -0
  22. package/dist/public/temporal-markup.d.ts +343 -0
  23. package/dist/public/temporal.d.ts +497 -0
  24. package/dist/public/text.d.ts +817 -0
  25. package/dist/public/visual-ir.d.ts +98 -0
  26. package/docs/public/hypit-logo-dark.svg +36 -0
  27. package/docs/public/hypit-logo-light.svg +38 -0
  28. package/examples/README.md +24 -0
  29. package/examples/minimal-author-package/README.md +18 -0
  30. package/examples/minimal-author-package/packages/example-component/README.md +44 -0
  31. package/examples/minimal-author-package/packages/example-component/package.json +27 -0
  32. package/examples/minimal-author-package/packages/example-component/preview/Box.png +0 -0
  33. package/examples/minimal-author-package/packages/example-component/preview/build.svrun +6 -0
  34. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +47 -0
  35. package/examples/minimal-author-package/packages/example-component/preview/recipes.svs +8 -0
  36. package/examples/minimal-author-package/packages/example-component/src/activation.ts +10 -0
  37. package/examples/minimal-author-package/packages/example-component/src/component.ts +44 -0
  38. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +32 -0
  39. package/examples/minimal-author-package/packages/example-component/src/index.ts +6 -0
  40. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +82 -0
  41. package/examples/minimal-author-package/packages/example-component/src/style.ts +13 -0
  42. package/examples/minimal-author-package/packages/example-component/src/surface.ts +41 -0
  43. package/examples/minimal-author-package/packages/example-component/src/temporal.ts +6 -0
  44. package/examples/minimal-author-package/packages/example-component/tsconfig.json +18 -0
  45. package/examples/semantic-composition/README.md +35 -0
  46. package/examples/semantic-composition/chat.svml +25 -0
  47. package/examples/semantic-composition/chat.svrun +6 -0
  48. package/examples/semantic-composition/chat.svs +4 -0
  49. package/examples/semantic-composition/hypit.runtime.json +8 -0
  50. package/examples/semantic-composition/packages/chat-scene/README.md +29 -0
  51. package/examples/semantic-composition/packages/chat-scene/package.json +11 -0
  52. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +112 -0
  53. package/examples/semantic-composition/packages/chat-scene/src/render.ts +64 -0
  54. package/examples/semantic-composition/packages/chat-scene/tsconfig.json +18 -0
  55. package/examples/semantic-composition/packages/responsive-explainer/README.md +45 -0
  56. package/examples/semantic-composition/packages/responsive-explainer/package.json +11 -0
  57. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +90 -0
  58. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +68 -0
  59. package/examples/semantic-composition/packages/responsive-explainer/tsconfig.json +18 -0
  60. package/package.json +263 -5
  61. package/packages/artifact/README.md +10 -0
  62. package/packages/artifact/package.json +16 -0
  63. package/packages/artifact/src/activation.ts +8 -0
  64. package/packages/artifact/src/index.ts +24 -0
  65. package/packages/audio-track/README.md +43 -0
  66. package/packages/audio-track/package.json +36 -0
  67. package/packages/audio-track/src/activation.ts +20 -0
  68. package/packages/audio-track/src/component.ts +40 -0
  69. package/packages/audio-track/src/fragment.ts +63 -0
  70. package/packages/audio-track/src/index.ts +7 -0
  71. package/packages/audio-track/src/manifest.ts +151 -0
  72. package/packages/audio-track/src/program.ts +254 -0
  73. package/packages/audio-track/src/surface.ts +187 -0
  74. package/packages/audio-track/src/types.ts +62 -0
  75. package/packages/audio-track-studio/README.md +3 -0
  76. package/packages/audio-track-studio/package.json +14 -0
  77. package/packages/audio-track-studio/src/activation.ts +7 -0
  78. package/packages/audio-track-studio/src/index.ts +72 -0
  79. package/packages/author-kit/README.md +31 -0
  80. package/packages/author-kit/package.json +16 -0
  81. package/packages/author-kit/src/index.ts +59 -0
  82. package/packages/background-removal/README.md +29 -0
  83. package/packages/background-removal/package.json +16 -0
  84. package/packages/background-removal/src/activation.ts +18 -0
  85. package/packages/background-removal/src/component.ts +32 -0
  86. package/packages/background-removal/src/fragment.ts +18 -0
  87. package/packages/background-removal/src/index.ts +6 -0
  88. package/packages/background-removal/src/manifest.ts +45 -0
  89. package/packages/background-removal/src/program.ts +19 -0
  90. package/packages/background-removal/src/surface.ts +27 -0
  91. package/packages/background-removal/src/types.ts +5 -0
  92. package/packages/browser-capture/README.md +82 -0
  93. package/packages/browser-capture/package.json +15 -0
  94. package/packages/browser-capture/src/browser.ts +19 -0
  95. package/packages/browser-capture/src/index.ts +198 -0
  96. package/packages/build-result/package.json +13 -0
  97. package/packages/build-result/src/decode.ts +286 -0
  98. package/packages/build-result/src/index.ts +25 -0
  99. package/packages/build-result/src/store.ts +505 -0
  100. package/packages/build-result/src/types.ts +354 -0
  101. package/packages/build-result/src/writer.ts +184 -0
  102. package/packages/build-result-fs/README.md +29 -0
  103. package/packages/build-result-fs/package.json +17 -0
  104. package/packages/build-result-fs/src/activation.ts +62 -0
  105. package/packages/build-result-fs/src/index.ts +1 -0
  106. package/packages/build-result-kit/README.md +10 -0
  107. package/packages/build-result-kit/package.json +15 -0
  108. package/packages/build-result-kit/src/index.ts +144 -0
  109. package/packages/build-result-s3/README.md +49 -0
  110. package/packages/build-result-s3/package.json +19 -0
  111. package/packages/build-result-s3/src/activation.ts +71 -0
  112. package/packages/build-result-s3/src/client.ts +254 -0
  113. package/packages/build-result-s3/src/index.ts +4 -0
  114. package/packages/build-result-s3/src/repository.ts +361 -0
  115. package/packages/caption/README.md +77 -0
  116. package/packages/caption/package.json +28 -0
  117. package/packages/caption/src/activation.ts +17 -0
  118. package/packages/caption/src/component.ts +38 -0
  119. package/packages/caption/src/display.ts +111 -0
  120. package/packages/caption/src/error.ts +9 -0
  121. package/packages/caption/src/fragment.ts +26 -0
  122. package/packages/caption/src/index.ts +33 -0
  123. package/packages/caption/src/manifest.ts +97 -0
  124. package/packages/caption/src/style.ts +170 -0
  125. package/packages/caption/src/surface.ts +96 -0
  126. package/packages/caption/src/temporalize.ts +124 -0
  127. package/packages/caption/src/types.ts +71 -0
  128. package/packages/caption-fine/README.md +108 -0
  129. package/packages/caption-fine/package.json +30 -0
  130. package/packages/caption-fine/preview/Track.png +0 -0
  131. package/packages/caption-fine/src/activation.ts +32 -0
  132. package/packages/caption-fine/src/component.ts +58 -0
  133. package/packages/caption-fine/src/fragment.ts +112 -0
  134. package/packages/caption-fine/src/index.ts +19 -0
  135. package/packages/caption-fine/src/manifest.ts +383 -0
  136. package/packages/caption-fine/src/recipe.ts +120 -0
  137. package/packages/caption-fine/src/render.ts +1133 -0
  138. package/packages/caption-fine/src/schedule.ts +126 -0
  139. package/packages/caption-fine/src/spacing.ts +69 -0
  140. package/packages/caption-fine/src/style.ts +370 -0
  141. package/packages/caption-fine/src/surface.ts +152 -0
  142. package/packages/caption-fine/src/types.ts +191 -0
  143. package/packages/caption-fine-studio/README.md +3 -0
  144. package/packages/caption-fine-studio/package.json +15 -0
  145. package/packages/caption-fine-studio/src/activation.ts +7 -0
  146. package/packages/caption-fine-studio/src/index.ts +163 -0
  147. package/packages/cli/README.md +51 -0
  148. package/packages/cli/package.json +33 -0
  149. package/packages/cli/src/arguments.ts +605 -0
  150. package/packages/cli/src/build-planning.ts +460 -0
  151. package/packages/cli/src/command.ts +202 -0
  152. package/packages/cli/src/commands/environment.ts +391 -0
  153. package/packages/cli/src/commands/execution.ts +321 -0
  154. package/packages/cli/src/commands/results.ts +187 -0
  155. package/packages/cli/src/commands/types.ts +9 -0
  156. package/packages/cli/src/distribution.ts +74 -0
  157. package/packages/cli/src/index.ts +30 -0
  158. package/packages/cli/src/machine-view.ts +28 -0
  159. package/packages/cli/src/main.ts +654 -0
  160. package/packages/cli/src/oauth.ts +228 -0
  161. package/packages/cli/src/observation.ts +203 -0
  162. package/packages/cli/src/output.ts +1007 -0
  163. package/packages/cli/src/paths.ts +7 -0
  164. package/packages/cli/src/project-context.ts +38 -0
  165. package/packages/cli/src/reachability.ts +91 -0
  166. package/packages/cli/src/result-export.ts +148 -0
  167. package/packages/cli/src/result-query.ts +46 -0
  168. package/packages/cli/src/run-file.ts +186 -0
  169. package/packages/cli/src/runtime-port.ts +13 -0
  170. package/packages/cli/src/runtime-selection.ts +94 -0
  171. package/packages/cli/src/runtime-view.ts +15 -0
  172. package/packages/cli/src/source-discovery.ts +150 -0
  173. package/packages/cli/src/source-packages.ts +91 -0
  174. package/packages/cli/src/view.ts +228 -0
  175. package/packages/comment-sticker/README.md +41 -0
  176. package/packages/comment-sticker/package.json +29 -0
  177. package/packages/comment-sticker/preview/Track.png +0 -0
  178. package/packages/comment-sticker/src/activation.ts +32 -0
  179. package/packages/comment-sticker/src/author.ts +148 -0
  180. package/packages/comment-sticker/src/component.ts +97 -0
  181. package/packages/comment-sticker/src/fragment.ts +124 -0
  182. package/packages/comment-sticker/src/index.ts +8 -0
  183. package/packages/comment-sticker/src/manifest.ts +373 -0
  184. package/packages/comment-sticker/src/program.ts +610 -0
  185. package/packages/comment-sticker/src/surface.ts +172 -0
  186. package/packages/comment-sticker/src/types.ts +109 -0
  187. package/packages/comment-sticker-studio/README.md +3 -0
  188. package/packages/comment-sticker-studio/package.json +14 -0
  189. package/packages/comment-sticker-studio/src/activation.ts +7 -0
  190. package/packages/comment-sticker-studio/src/index.ts +132 -0
  191. package/packages/compiler-markup-node/README.md +12 -0
  192. package/packages/compiler-markup-node/package.json +22 -0
  193. package/packages/compiler-markup-node/src/index.ts +59 -0
  194. package/packages/compiler-node/README.md +60 -0
  195. package/packages/compiler-node/package.json +25 -0
  196. package/packages/compiler-node/src/compiler.ts +207 -0
  197. package/packages/compiler-node/src/error.ts +11 -0
  198. package/packages/compiler-node/src/graph-query.ts +51 -0
  199. package/packages/compiler-node/src/index.ts +27 -0
  200. package/packages/compiler-node/src/modules.ts +107 -0
  201. package/packages/compiler-node/src/run.ts +355 -0
  202. package/packages/component-kit/README.md +97 -0
  203. package/packages/component-kit/package.json +13 -0
  204. package/packages/component-kit/src/index.ts +155 -0
  205. package/packages/composition/README.md +53 -0
  206. package/packages/composition/package.json +29 -0
  207. package/packages/composition/src/activation.ts +3 -0
  208. package/packages/composition/src/component.ts +10 -0
  209. package/packages/composition/src/index.ts +18 -0
  210. package/packages/composition/src/manifest.ts +13 -0
  211. package/packages/composition/src/schema.ts +194 -0
  212. package/packages/composition/src/track.ts +1403 -0
  213. package/packages/core/README.md +22 -0
  214. package/packages/core/package.json +13 -0
  215. package/packages/core/src/error.ts +12 -0
  216. package/packages/core/src/graph.ts +341 -0
  217. package/packages/core/src/index.ts +32 -0
  218. package/packages/core/src/link.ts +240 -0
  219. package/packages/core/src/machine.ts +60 -0
  220. package/packages/core/src/plan.ts +504 -0
  221. package/packages/core/src/reducer.ts +428 -0
  222. package/packages/core/src/reference.ts +25 -0
  223. package/packages/core/src/slice.ts +108 -0
  224. package/packages/credential-store-env/README.md +11 -0
  225. package/packages/credential-store-env/package.json +17 -0
  226. package/packages/credential-store-env/src/activation.ts +25 -0
  227. package/packages/credential-store-env/src/index.ts +23 -0
  228. package/packages/credential-store-os/README.md +13 -0
  229. package/packages/credential-store-os/package.json +22 -0
  230. package/packages/credential-store-os/runtime/windows-credential.ps1 +59 -0
  231. package/packages/credential-store-os/src/activation.ts +32 -0
  232. package/packages/credential-store-os/src/index.ts +2 -0
  233. package/packages/credential-store-os/src/store.ts +196 -0
  234. package/packages/deck-track/README.md +52 -0
  235. package/packages/deck-track/package.json +35 -0
  236. package/packages/deck-track/preview/DepthStack.png +0 -0
  237. package/packages/deck-track/src/activation.ts +32 -0
  238. package/packages/deck-track/src/author.ts +217 -0
  239. package/packages/deck-track/src/component.ts +86 -0
  240. package/packages/deck-track/src/fragment.ts +148 -0
  241. package/packages/deck-track/src/index.ts +16 -0
  242. package/packages/deck-track/src/lower.ts +370 -0
  243. package/packages/deck-track/src/manifest.ts +438 -0
  244. package/packages/deck-track/src/program.ts +367 -0
  245. package/packages/deck-track/src/surface.ts +286 -0
  246. package/packages/deck-track/src/types.ts +119 -0
  247. package/packages/deck-track-studio/README.md +3 -0
  248. package/packages/deck-track-studio/package.json +14 -0
  249. package/packages/deck-track-studio/src/activation.ts +7 -0
  250. package/packages/deck-track-studio/src/index.ts +134 -0
  251. package/packages/driver-node/README.md +23 -0
  252. package/packages/driver-node/package.json +18 -0
  253. package/packages/driver-node/src/driver.ts +616 -0
  254. package/packages/driver-node/src/index.ts +10 -0
  255. package/packages/driver-node/src/planning.ts +67 -0
  256. package/packages/driver-node/src/registry.ts +234 -0
  257. package/packages/driver-node/src/resources.ts +36 -0
  258. package/packages/driver-node/src/types.ts +69 -0
  259. package/packages/elaborator/README.md +74 -0
  260. package/packages/elaborator/package.json +16 -0
  261. package/packages/elaborator/src/author.ts +308 -0
  262. package/packages/elaborator/src/fragment.ts +505 -0
  263. package/packages/elaborator/src/frontend-facet.ts +30 -0
  264. package/packages/elaborator/src/index.ts +78 -0
  265. package/packages/elaborator/src/source.ts +608 -0
  266. package/packages/endpoint-kit/README.md +111 -0
  267. package/packages/endpoint-kit/package.json +14 -0
  268. package/packages/endpoint-kit/src/index.ts +488 -0
  269. package/packages/estimate/README.md +32 -0
  270. package/packages/estimate/package.json +20 -0
  271. package/packages/estimate/src/activation.ts +11 -0
  272. package/packages/estimate/src/index.ts +16 -0
  273. package/packages/estimate/src/manifest.ts +34 -0
  274. package/packages/estimate/src/policy.ts +70 -0
  275. package/packages/estimate/src/program.ts +196 -0
  276. package/packages/estimate/src/types.ts +15 -0
  277. package/packages/film/README.md +49 -0
  278. package/packages/film/package.json +34 -0
  279. package/packages/film/src/activation.ts +16 -0
  280. package/packages/film/src/component.ts +61 -0
  281. package/packages/film/src/fragment.ts +83 -0
  282. package/packages/film/src/index.ts +11 -0
  283. package/packages/film/src/manifest.ts +152 -0
  284. package/packages/film/src/program.ts +110 -0
  285. package/packages/film/src/recipe.ts +24 -0
  286. package/packages/film/src/surface.ts +146 -0
  287. package/packages/film/src/types.ts +26 -0
  288. package/packages/film-studio/package.json +16 -0
  289. package/packages/film-studio/src/activation.ts +8 -0
  290. package/packages/film-studio/src/index.ts +17 -0
  291. package/packages/fonts-open/README.md +77 -0
  292. package/packages/fonts-open/package.json +130 -0
  293. package/packages/fonts-open/src/activation.ts +30 -0
  294. package/packages/fonts-open/src/catalog.ts +317 -0
  295. package/packages/fonts-open/src/index.ts +13 -0
  296. package/packages/fonts-open/src/manifest.ts +83 -0
  297. package/packages/fonts-open/src/surface.ts +239 -0
  298. package/packages/generation/README.md +19 -0
  299. package/packages/generation/package.json +23 -0
  300. package/packages/generation/src/activation.ts +9 -0
  301. package/packages/generation/src/component.ts +77 -0
  302. package/packages/generation/src/identity.ts +80 -0
  303. package/packages/generation/src/index.ts +79 -0
  304. package/packages/generation/src/manifest.ts +65 -0
  305. package/packages/generation/src/mapping.ts +231 -0
  306. package/packages/generation/src/ports.ts +222 -0
  307. package/packages/generation/src/request.ts +427 -0
  308. package/packages/generation/src/schema.ts +62 -0
  309. package/packages/generation/src/types.ts +17 -0
  310. package/packages/gpt-image/README.md +54 -0
  311. package/packages/gpt-image/package.json +34 -0
  312. package/packages/gpt-image/src/activation.ts +39 -0
  313. package/packages/gpt-image/src/fragment.ts +101 -0
  314. package/packages/gpt-image/src/index.ts +203 -0
  315. package/packages/gpt-image/src/surface.ts +194 -0
  316. package/packages/gpt-image-kits/README.md +44 -0
  317. package/packages/gpt-image-kits/kits/phone-ugc-v1.svs +34 -0
  318. package/packages/gpt-image-kits/package.json +15 -0
  319. package/packages/grok-imagine/README.md +21 -0
  320. package/packages/grok-imagine/package.json +21 -0
  321. package/packages/grok-imagine/src/activation.ts +29 -0
  322. package/packages/grok-imagine/src/index.ts +174 -0
  323. package/packages/grok-imagine/src/surface.ts +149 -0
  324. package/packages/host/README.md +5 -0
  325. package/packages/host/package.json +10 -0
  326. package/packages/host/src/facet.ts +6 -0
  327. package/packages/host/src/frontend.ts +56 -0
  328. package/packages/host/src/index.ts +9 -0
  329. package/packages/hyperframes/README.md +69 -0
  330. package/packages/hyperframes/package.json +36 -0
  331. package/packages/hyperframes/src/activation.ts +8 -0
  332. package/packages/hyperframes/src/browser-program.ts +79 -0
  333. package/packages/hyperframes/src/component.ts +32 -0
  334. package/packages/hyperframes/src/document.ts +827 -0
  335. package/packages/hyperframes/src/fragment.ts +32 -0
  336. package/packages/hyperframes/src/index.ts +13 -0
  337. package/packages/hyperframes/src/manifest.ts +67 -0
  338. package/packages/hyperframes/src/project.ts +118 -0
  339. package/packages/hyperframes/src/text.ts +1179 -0
  340. package/packages/hyperframes/src/types.ts +38 -0
  341. package/packages/image-compose/README.md +25 -0
  342. package/packages/image-compose/package.json +18 -0
  343. package/packages/image-compose/src/activation.ts +21 -0
  344. package/packages/image-compose/src/component.ts +100 -0
  345. package/packages/image-compose/src/fragment.ts +54 -0
  346. package/packages/image-compose/src/index.ts +10 -0
  347. package/packages/image-compose/src/manifest.ts +119 -0
  348. package/packages/image-compose/src/program.ts +75 -0
  349. package/packages/image-compose/src/surface.ts +83 -0
  350. package/packages/image-compose/src/types.ts +22 -0
  351. package/packages/image-transform/README.md +29 -0
  352. package/packages/image-transform/package.json +21 -0
  353. package/packages/image-transform/src/activation.ts +33 -0
  354. package/packages/image-transform/src/component.ts +67 -0
  355. package/packages/image-transform/src/fragment.ts +25 -0
  356. package/packages/image-transform/src/index.ts +13 -0
  357. package/packages/image-transform/src/manifest.ts +209 -0
  358. package/packages/image-transform/src/program.ts +23 -0
  359. package/packages/image-transform/src/surface.ts +216 -0
  360. package/packages/image-transform/src/types.ts +20 -0
  361. package/packages/interview-emoji-reveal/README.md +39 -0
  362. package/packages/interview-emoji-reveal/package.json +23 -0
  363. package/packages/interview-emoji-reveal/preview/Track.png +0 -0
  364. package/packages/interview-emoji-reveal/src/activation.ts +14 -0
  365. package/packages/interview-emoji-reveal/src/component.ts +45 -0
  366. package/packages/interview-emoji-reveal/src/fragment.ts +62 -0
  367. package/packages/interview-emoji-reveal/src/index.ts +16 -0
  368. package/packages/interview-emoji-reveal/src/manifest.ts +174 -0
  369. package/packages/interview-emoji-reveal/src/program.ts +242 -0
  370. package/packages/interview-emoji-reveal/src/style.ts +47 -0
  371. package/packages/interview-emoji-reveal/src/surface.ts +110 -0
  372. package/packages/interview-emoji-reveal/src/types.ts +52 -0
  373. package/packages/markup/README.md +81 -0
  374. package/packages/markup/package.json +16 -0
  375. package/packages/markup/src/element.ts +39 -0
  376. package/packages/markup/src/error.ts +20 -0
  377. package/packages/markup/src/frontend.ts +518 -0
  378. package/packages/markup/src/host-facet.ts +115 -0
  379. package/packages/markup/src/index.ts +25 -0
  380. package/packages/markup/src/registry.ts +83 -0
  381. package/packages/markup/src/syntax.ts +271 -0
  382. package/packages/markup/src/types.ts +246 -0
  383. package/packages/media/README.md +37 -0
  384. package/packages/media/package.json +19 -0
  385. package/packages/media/src/activation.ts +38 -0
  386. package/packages/media/src/component.ts +16 -0
  387. package/packages/media/src/frame-range.ts +33 -0
  388. package/packages/media/src/identity.ts +227 -0
  389. package/packages/media/src/index.ts +15 -0
  390. package/packages/media/src/manifest.ts +122 -0
  391. package/packages/media/src/render.ts +140 -0
  392. package/packages/media/src/schema.ts +69 -0
  393. package/packages/media/src/surface.ts +150 -0
  394. package/packages/media/src/types.ts +121 -0
  395. package/packages/media-execution/README.md +28 -0
  396. package/packages/media-execution/package.json +17 -0
  397. package/packages/media-execution/src/execute.ts +1322 -0
  398. package/packages/media-execution/src/index.ts +16 -0
  399. package/packages/media-execution/src/probe.ts +315 -0
  400. package/packages/media-execution/src/surface.ts +286 -0
  401. package/packages/media-execution/src/toolchain.ts +81 -0
  402. package/packages/media-execution/src/webp.ts +200 -0
  403. package/packages/media-pipeline/README.md +113 -0
  404. package/packages/media-pipeline/package.json +27 -0
  405. package/packages/media-pipeline/src/activation.ts +47 -0
  406. package/packages/media-pipeline/src/audio-plan.ts +113 -0
  407. package/packages/media-pipeline/src/component.ts +373 -0
  408. package/packages/media-pipeline/src/fragment.ts +167 -0
  409. package/packages/media-pipeline/src/index.ts +46 -0
  410. package/packages/media-pipeline/src/manifest.ts +653 -0
  411. package/packages/media-pipeline/src/operations.ts +248 -0
  412. package/packages/media-pipeline/src/selection.ts +110 -0
  413. package/packages/media-pipeline/src/surface.ts +389 -0
  414. package/packages/media-pipeline/src/types.ts +175 -0
  415. package/packages/media-track/README.md +197 -0
  416. package/packages/media-track/package.json +29 -0
  417. package/packages/media-track/preview/Track.png +0 -0
  418. package/packages/media-track/preview/build.svrun +5 -0
  419. package/packages/media-track/preview/flush.png +0 -0
  420. package/packages/media-track/preview/preview.svml +47 -0
  421. package/packages/media-track/preview/recipes.svs +23 -0
  422. package/packages/media-track/preview/rounded.png +0 -0
  423. package/packages/media-track/src/activation.ts +20 -0
  424. package/packages/media-track/src/author.ts +317 -0
  425. package/packages/media-track/src/component.ts +162 -0
  426. package/packages/media-track/src/fragment.ts +57 -0
  427. package/packages/media-track/src/index.ts +65 -0
  428. package/packages/media-track/src/layers.ts +308 -0
  429. package/packages/media-track/src/lower.ts +335 -0
  430. package/packages/media-track/src/manifest.ts +624 -0
  431. package/packages/media-track/src/motion.ts +387 -0
  432. package/packages/media-track/src/performance.ts +37 -0
  433. package/packages/media-track/src/presentation.ts +35 -0
  434. package/packages/media-track/src/program.ts +565 -0
  435. package/packages/media-track/src/sampling.ts +118 -0
  436. package/packages/media-track/src/sequence.ts +403 -0
  437. package/packages/media-track/src/sounds.ts +71 -0
  438. package/packages/media-track/src/surface.ts +668 -0
  439. package/packages/media-track/src/types.ts +311 -0
  440. package/packages/media-track-studio/README.md +3 -0
  441. package/packages/media-track-studio/package.json +15 -0
  442. package/packages/media-track-studio/src/activation.ts +7 -0
  443. package/packages/media-track-studio/src/index.ts +235 -0
  444. package/packages/mimo-speech/README.md +33 -0
  445. package/packages/mimo-speech/package.json +21 -0
  446. package/packages/mimo-speech/src/activation.ts +32 -0
  447. package/packages/mimo-speech/src/fragment.ts +11 -0
  448. package/packages/mimo-speech/src/index.ts +160 -0
  449. package/packages/mimo-speech/src/surface.ts +193 -0
  450. package/packages/minimax-h3/README.md +21 -0
  451. package/packages/minimax-h3/package.json +21 -0
  452. package/packages/minimax-h3/src/activation.ts +14 -0
  453. package/packages/minimax-h3/src/index.ts +188 -0
  454. package/packages/minimax-h3/src/surface.ts +87 -0
  455. package/packages/model-kit/README.md +52 -0
  456. package/packages/model-kit/package.json +19 -0
  457. package/packages/model-kit/src/index.ts +728 -0
  458. package/packages/nano-banana/README.md +23 -0
  459. package/packages/nano-banana/package.json +21 -0
  460. package/packages/nano-banana/src/activation.ts +14 -0
  461. package/packages/nano-banana/src/index.ts +172 -0
  462. package/packages/nano-banana/src/surface.ts +120 -0
  463. package/packages/narrative/README.md +7 -0
  464. package/packages/narrative/package.json +17 -0
  465. package/packages/narrative/src/activation.ts +7 -0
  466. package/packages/narrative/src/component.ts +33 -0
  467. package/packages/narrative/src/identity.ts +131 -0
  468. package/packages/narrative/src/index.ts +11 -0
  469. package/packages/narrative/src/manifest.ts +30 -0
  470. package/packages/narrative/src/schema.ts +89 -0
  471. package/packages/narrative/src/types.ts +141 -0
  472. package/packages/package-loader-node/README.md +23 -0
  473. package/packages/package-loader-node/package.json +15 -0
  474. package/packages/package-loader-node/src/contribution.ts +97 -0
  475. package/packages/package-loader-node/src/distribution-resolution.ts +146 -0
  476. package/packages/package-loader-node/src/index.ts +27 -0
  477. package/packages/package-loader-node/src/loader.ts +301 -0
  478. package/packages/package-loader-node/src/location.ts +279 -0
  479. package/packages/package-loader-node/src/types.ts +60 -0
  480. package/packages/program-space/README.md +20 -0
  481. package/packages/program-space/package.json +17 -0
  482. package/packages/program-space/src/activation.ts +19 -0
  483. package/packages/program-space/src/index.ts +107 -0
  484. package/packages/program-space/src/surface.ts +55 -0
  485. package/packages/protocol/README.md +11 -0
  486. package/packages/protocol/package.json +10 -0
  487. package/packages/protocol/src/build-id.ts +52 -0
  488. package/packages/protocol/src/build.ts +265 -0
  489. package/packages/protocol/src/canonical.ts +37 -0
  490. package/packages/protocol/src/error.ts +11 -0
  491. package/packages/protocol/src/identity.ts +59 -0
  492. package/packages/protocol/src/index.ts +9 -0
  493. package/packages/protocol/src/module.ts +67 -0
  494. package/packages/protocol/src/value.ts +88 -0
  495. package/packages/provider-hyperframes-aws-lambda/README.md +30 -0
  496. package/packages/provider-hyperframes-aws-lambda/package.json +30 -0
  497. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +97 -0
  498. package/packages/provider-hyperframes-aws-lambda/src/client.ts +114 -0
  499. package/packages/provider-hyperframes-aws-lambda/src/index.ts +21 -0
  500. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +522 -0
  501. package/packages/provider-hyperframes-local/README.md +129 -0
  502. package/packages/provider-hyperframes-local/package.json +34 -0
  503. package/packages/provider-hyperframes-local/src/activation.ts +107 -0
  504. package/packages/provider-hyperframes-local/src/capture-process.ts +110 -0
  505. package/packages/provider-hyperframes-local/src/capture-worker.ts +17 -0
  506. package/packages/provider-hyperframes-local/src/capture.ts +184 -0
  507. package/packages/provider-hyperframes-local/src/index.ts +10 -0
  508. package/packages/provider-hyperframes-local/src/options.ts +19 -0
  509. package/packages/provider-hyperframes-local/src/output.ts +73 -0
  510. package/packages/provider-hyperframes-local/src/process.ts +83 -0
  511. package/packages/provider-hyperframes-local/src/program.ts +58 -0
  512. package/packages/provider-hyperframes-local/src/provider.ts +62 -0
  513. package/packages/provider-hyperframes-local/src/render.ts +114 -0
  514. package/packages/provider-hyperframes-local/src/sampling.ts +89 -0
  515. package/packages/provider-hypihub/README.md +143 -0
  516. package/packages/provider-hypihub/package.json +26 -0
  517. package/packages/provider-hypihub/src/activation.ts +91 -0
  518. package/packages/provider-hypihub/src/index.ts +2 -0
  519. package/packages/provider-hypihub/src/mapping.ts +145 -0
  520. package/packages/provider-hypihub/src/oauth.ts +113 -0
  521. package/packages/provider-hypihub/src/provider.ts +566 -0
  522. package/packages/provider-hypihub/src/routes.ts +134 -0
  523. package/packages/provider-hypihub/src/upload.ts +402 -0
  524. package/packages/provider-image-opencv-local/README.md +16 -0
  525. package/packages/provider-image-opencv-local/package.json +27 -0
  526. package/packages/provider-image-opencv-local/runtime/raster_execute.py +299 -0
  527. package/packages/provider-image-opencv-local/src/activation.ts +61 -0
  528. package/packages/provider-image-opencv-local/src/deployment.ts +68 -0
  529. package/packages/provider-image-opencv-local/src/index.ts +2 -0
  530. package/packages/provider-image-opencv-local/src/program.ts +60 -0
  531. package/packages/provider-image-opencv-local/src/provider.ts +155 -0
  532. package/packages/provider-kie/README.md +134 -0
  533. package/packages/provider-kie/package.json +43 -0
  534. package/packages/provider-kie/src/activation.ts +71 -0
  535. package/packages/provider-kie/src/index.ts +10 -0
  536. package/packages/provider-kie/src/mapping.ts +182 -0
  537. package/packages/provider-kie/src/provider.ts +657 -0
  538. package/packages/provider-kie/src/routes.ts +150 -0
  539. package/packages/provider-media-local/README.md +58 -0
  540. package/packages/provider-media-local/package.json +28 -0
  541. package/packages/provider-media-local/src/activation.ts +65 -0
  542. package/packages/provider-media-local/src/index.ts +2 -0
  543. package/packages/provider-media-local/src/program.ts +19 -0
  544. package/packages/provider-media-local/src/provider.ts +150 -0
  545. package/packages/provider-whisperx-local/README.md +44 -0
  546. package/packages/provider-whisperx-local/package.json +27 -0
  547. package/packages/provider-whisperx-local/src/activation.ts +93 -0
  548. package/packages/provider-whisperx-local/src/index.ts +5 -0
  549. package/packages/provider-whisperx-local/src/program.ts +157 -0
  550. package/packages/provider-whisperx-local/src/provider.ts +191 -0
  551. package/packages/provider-xiaomi-mimo/README.md +32 -0
  552. package/packages/provider-xiaomi-mimo/package.json +24 -0
  553. package/packages/provider-xiaomi-mimo/src/activation.ts +57 -0
  554. package/packages/provider-xiaomi-mimo/src/index.ts +5 -0
  555. package/packages/provider-xiaomi-mimo/src/provider.ts +214 -0
  556. package/packages/ranking/README.md +67 -0
  557. package/packages/ranking/package.json +33 -0
  558. package/packages/ranking/preview/Column.svg +29 -0
  559. package/packages/ranking/preview/TierBoard.png +0 -0
  560. package/packages/ranking/preview/TierBoard.svg +36 -0
  561. package/packages/ranking/preview/TopThree.png +0 -0
  562. package/packages/ranking/src/activation.ts +38 -0
  563. package/packages/ranking/src/component.ts +271 -0
  564. package/packages/ranking/src/fragment.ts +206 -0
  565. package/packages/ranking/src/index.ts +26 -0
  566. package/packages/ranking/src/manifest.ts +807 -0
  567. package/packages/ranking/src/render.ts +698 -0
  568. package/packages/ranking/src/schedule.ts +895 -0
  569. package/packages/ranking/src/style.ts +272 -0
  570. package/packages/ranking/src/surface.ts +322 -0
  571. package/packages/ranking/src/tier.ts +176 -0
  572. package/packages/ranking/src/types.ts +277 -0
  573. package/packages/ranking-studio/README.md +3 -0
  574. package/packages/ranking-studio/package.json +14 -0
  575. package/packages/ranking-studio/src/activation.ts +7 -0
  576. package/packages/ranking-studio/src/index.ts +255 -0
  577. package/packages/raster/README.md +7 -0
  578. package/packages/raster/package.json +14 -0
  579. package/packages/raster/src/activation.ts +7 -0
  580. package/packages/raster/src/index.ts +7 -0
  581. package/packages/raster/src/manifest.ts +14 -0
  582. package/packages/raster/src/program.ts +128 -0
  583. package/packages/raster/src/schema.ts +53 -0
  584. package/packages/raster/src/types.ts +61 -0
  585. package/packages/render-hyperframes/README.md +58 -0
  586. package/packages/render-hyperframes/package.json +33 -0
  587. package/packages/render-hyperframes/src/activation.ts +18 -0
  588. package/packages/render-hyperframes/src/component.ts +37 -0
  589. package/packages/render-hyperframes/src/fragment.ts +73 -0
  590. package/packages/render-hyperframes/src/index.ts +6 -0
  591. package/packages/render-hyperframes/src/manifest.ts +100 -0
  592. package/packages/render-hyperframes/src/product.ts +29 -0
  593. package/packages/render-hyperframes/src/surface.ts +65 -0
  594. package/packages/resource-store-fs/README.md +13 -0
  595. package/packages/resource-store-fs/package.json +14 -0
  596. package/packages/resource-store-fs/src/index.ts +2 -0
  597. package/packages/resource-store-fs/src/store.ts +154 -0
  598. package/packages/resource-store-s3/README.md +15 -0
  599. package/packages/resource-store-s3/package.json +15 -0
  600. package/packages/resource-store-s3/src/client.ts +138 -0
  601. package/packages/resource-store-s3/src/index.ts +10 -0
  602. package/packages/resource-store-s3/src/store.ts +258 -0
  603. package/packages/run/README.md +23 -0
  604. package/packages/run/package.json +16 -0
  605. package/packages/run/src/candidate.ts +33 -0
  606. package/packages/run/src/facet.ts +59 -0
  607. package/packages/run/src/frontend-facet.ts +23 -0
  608. package/packages/run/src/frontend.ts +62 -0
  609. package/packages/run/src/graph.ts +65 -0
  610. package/packages/run/src/index.ts +33 -0
  611. package/packages/run/src/registry.ts +24 -0
  612. package/packages/run/src/resolve.ts +213 -0
  613. package/packages/run/src/types.ts +147 -0
  614. package/packages/run-markup/README.md +60 -0
  615. package/packages/run-markup/package.json +22 -0
  616. package/packages/run-markup/src/activation.ts +10 -0
  617. package/packages/run-markup/src/frontend.ts +16 -0
  618. package/packages/run-markup/src/index.ts +5 -0
  619. package/packages/run-markup/src/syntax.ts +304 -0
  620. package/packages/runtime/README.md +39 -0
  621. package/packages/runtime/package.json +15 -0
  622. package/packages/runtime/src/capacity.ts +51 -0
  623. package/packages/runtime/src/catalog.ts +30 -0
  624. package/packages/runtime/src/credentials.ts +124 -0
  625. package/packages/runtime/src/environment.ts +6 -0
  626. package/packages/runtime/src/execution.ts +125 -0
  627. package/packages/runtime/src/index.ts +24 -0
  628. package/packages/runtime/src/operations.ts +99 -0
  629. package/packages/runtime/src/scheduler.ts +281 -0
  630. package/packages/runtime/src/submission.ts +24 -0
  631. package/packages/runtime/src/types.ts +157 -0
  632. package/packages/runtime-host-node/README.md +25 -0
  633. package/packages/runtime-host-node/package.json +19 -0
  634. package/packages/runtime-host-node/src/index.ts +421 -0
  635. package/packages/runtime-host-node/src/packages.ts +158 -0
  636. package/packages/runtime-kit/README.md +42 -0
  637. package/packages/runtime-kit/package.json +16 -0
  638. package/packages/runtime-kit/src/index.ts +307 -0
  639. package/packages/runtime-kit/src/request-deadline.ts +17 -0
  640. package/packages/runtime-local/README.md +119 -0
  641. package/packages/runtime-local/package.json +33 -0
  642. package/packages/runtime-local/src/actions.ts +20 -0
  643. package/packages/runtime-local/src/config.ts +1229 -0
  644. package/packages/runtime-local/src/control.ts +120 -0
  645. package/packages/runtime-local/src/credentials.ts +61 -0
  646. package/packages/runtime-local/src/host.ts +174 -0
  647. package/packages/runtime-local/src/index.ts +36 -0
  648. package/packages/runtime-local/src/process-control.ts +59 -0
  649. package/packages/runtime-local/src/process-logs.ts +33 -0
  650. package/packages/runtime-local/src/programs.ts +441 -0
  651. package/packages/runtime-local/src/result-writer.ts +246 -0
  652. package/packages/runtime-local/src/runtime.ts +342 -0
  653. package/packages/runtime-local/src/types.ts +100 -0
  654. package/packages/runtime-local/src/worker-process.ts +343 -0
  655. package/packages/runtime-local/src/worker.ts +449 -0
  656. package/packages/screen-overlay/README.md +17 -0
  657. package/packages/screen-overlay/package.json +31 -0
  658. package/packages/screen-overlay/preview/Track.png +0 -0
  659. package/packages/screen-overlay/src/activation.ts +15 -0
  660. package/packages/screen-overlay/src/component.ts +20 -0
  661. package/packages/screen-overlay/src/fragment.ts +40 -0
  662. package/packages/screen-overlay/src/index.ts +7 -0
  663. package/packages/screen-overlay/src/manifest.ts +305 -0
  664. package/packages/screen-overlay/src/program.ts +321 -0
  665. package/packages/screen-overlay/src/surface.ts +90 -0
  666. package/packages/screen-overlay/src/types.ts +69 -0
  667. package/packages/screen-overlay-studio/README.md +3 -0
  668. package/packages/screen-overlay-studio/package.json +14 -0
  669. package/packages/screen-overlay-studio/src/activation.ts +7 -0
  670. package/packages/screen-overlay-studio/src/index.ts +80 -0
  671. package/packages/script/README.md +137 -0
  672. package/packages/script/package.json +22 -0
  673. package/packages/script/src/activation.ts +20 -0
  674. package/packages/script/src/edit.ts +174 -0
  675. package/packages/script/src/error.ts +13 -0
  676. package/packages/script/src/format.ts +83 -0
  677. package/packages/script/src/index.ts +20 -0
  678. package/packages/script/src/lexical.ts +133 -0
  679. package/packages/script/src/manifest.ts +95 -0
  680. package/packages/script/src/narrative.ts +232 -0
  681. package/packages/script/src/parser.ts +850 -0
  682. package/packages/script/src/surface.ts +132 -0
  683. package/packages/script/src/types.ts +125 -0
  684. package/packages/script-studio/package.json +13 -0
  685. package/packages/script-studio/src/activation.ts +8 -0
  686. package/packages/script-studio/src/index.ts +61 -0
  687. package/packages/seedance/README.md +19 -0
  688. package/packages/seedance/package.json +22 -0
  689. package/packages/seedance/src/activation.ts +38 -0
  690. package/packages/seedance/src/fragment.ts +46 -0
  691. package/packages/seedance/src/index.ts +329 -0
  692. package/packages/seedance/src/surface.ts +355 -0
  693. package/packages/seedance-kits/README.md +153 -0
  694. package/packages/seedance-kits/kits/broll-v1.svs +52 -0
  695. package/packages/seedance-kits/kits/call-v1.svs +55 -0
  696. package/packages/seedance-kits/kits/camera-reference-v1.svs +9 -0
  697. package/packages/seedance-kits/kits/motion-reference-v1.svs +9 -0
  698. package/packages/seedance-kits/kits/podcast-v1.svs +55 -0
  699. package/packages/seedance-kits/kits/speaker-v1.svs +136 -0
  700. package/packages/seedance-kits/kits/street-interview-v1.svs +49 -0
  701. package/packages/seedance-kits/package.json +24 -0
  702. package/packages/seedream/README.md +21 -0
  703. package/packages/seedream/package.json +21 -0
  704. package/packages/seedream/src/activation.ts +12 -0
  705. package/packages/seedream/src/index.ts +162 -0
  706. package/packages/seedream/src/surface.ts +84 -0
  707. package/packages/semantic-take-adjust/package.json +21 -0
  708. package/packages/semantic-take-adjust/src/activation.ts +22 -0
  709. package/packages/semantic-take-adjust/src/component.ts +31 -0
  710. package/packages/semantic-take-adjust/src/fragment.ts +24 -0
  711. package/packages/semantic-take-adjust/src/index.ts +12 -0
  712. package/packages/semantic-take-adjust/src/manifest.ts +57 -0
  713. package/packages/semantic-take-adjust/src/program.ts +49 -0
  714. package/packages/semantic-take-adjust/src/surface.ts +96 -0
  715. package/packages/semantic-take-adjust/src/types.ts +9 -0
  716. package/packages/semantic-track/README.md +21 -0
  717. package/packages/semantic-track/package.json +22 -0
  718. package/packages/semantic-track/src/activation.ts +8 -0
  719. package/packages/semantic-track/src/component.ts +24 -0
  720. package/packages/semantic-track/src/identity.ts +58 -0
  721. package/packages/semantic-track/src/index.ts +6 -0
  722. package/packages/semantic-track/src/location.ts +81 -0
  723. package/packages/semantic-track/src/manifest.ts +38 -0
  724. package/packages/semantic-track/src/projection.ts +71 -0
  725. package/packages/semantic-track/src/types.ts +26 -0
  726. package/packages/source/README.md +13 -0
  727. package/packages/source/package.json +13 -0
  728. package/packages/source/src/header.ts +80 -0
  729. package/packages/source/src/index.ts +17 -0
  730. package/packages/source/src/unit.ts +38 -0
  731. package/packages/spatial/README.md +77 -0
  732. package/packages/spatial/package.json +24 -0
  733. package/packages/spatial/src/activation.ts +43 -0
  734. package/packages/spatial/src/author.ts +59 -0
  735. package/packages/spatial/src/component.ts +45 -0
  736. package/packages/spatial/src/fragment.ts +36 -0
  737. package/packages/spatial/src/geometry.ts +238 -0
  738. package/packages/spatial/src/index.ts +37 -0
  739. package/packages/spatial/src/manifest.ts +341 -0
  740. package/packages/spatial/src/region-timeline.ts +69 -0
  741. package/packages/spatial/src/schema.ts +47 -0
  742. package/packages/spatial/src/surface.ts +319 -0
  743. package/packages/spatial/src/types.ts +101 -0
  744. package/packages/speech/README.md +16 -0
  745. package/packages/speech/package.json +19 -0
  746. package/packages/speech/src/activation.ts +7 -0
  747. package/packages/speech/src/component.ts +43 -0
  748. package/packages/speech/src/identity.ts +73 -0
  749. package/packages/speech/src/index.ts +6 -0
  750. package/packages/speech/src/manifest.ts +30 -0
  751. package/packages/speech/src/materialize.ts +103 -0
  752. package/packages/speech/src/schema.ts +42 -0
  753. package/packages/speech/src/types.ts +54 -0
  754. package/packages/speech-alignment/README.md +29 -0
  755. package/packages/speech-alignment/package.json +25 -0
  756. package/packages/speech-alignment/src/activation.ts +8 -0
  757. package/packages/speech-alignment/src/align.ts +235 -0
  758. package/packages/speech-alignment/src/component.ts +37 -0
  759. package/packages/speech-alignment/src/error.ts +9 -0
  760. package/packages/speech-alignment/src/index.ts +7 -0
  761. package/packages/speech-alignment/src/local.ts +64 -0
  762. package/packages/speech-alignment/src/locate.ts +473 -0
  763. package/packages/speech-alignment/src/manifest.ts +37 -0
  764. package/packages/speech-alignment/src/normalize.ts +79 -0
  765. package/packages/speech-alignment/src/types.ts +30 -0
  766. package/packages/speech-evidence/README.md +3 -0
  767. package/packages/speech-evidence/package.json +16 -0
  768. package/packages/speech-evidence/src/activation.ts +3 -0
  769. package/packages/speech-evidence/src/index.ts +102 -0
  770. package/packages/speech-track/README.md +51 -0
  771. package/packages/speech-track/package.json +28 -0
  772. package/packages/speech-track/preview/Track.png +0 -0
  773. package/packages/speech-track/src/activation.ts +19 -0
  774. package/packages/speech-track/src/component.ts +45 -0
  775. package/packages/speech-track/src/fragment.ts +74 -0
  776. package/packages/speech-track/src/index.ts +7 -0
  777. package/packages/speech-track/src/manifest.ts +73 -0
  778. package/packages/speech-track/src/program.ts +64 -0
  779. package/packages/speech-track/src/surface.ts +35 -0
  780. package/packages/speech-track/src/types.ts +6 -0
  781. package/packages/speech-track-studio/README.md +3 -0
  782. package/packages/speech-track-studio/package.json +14 -0
  783. package/packages/speech-track-studio/src/activation.ts +7 -0
  784. package/packages/speech-track-studio/src/index.ts +40 -0
  785. package/packages/store-sqlite/README.md +14 -0
  786. package/packages/store-sqlite/package.json +18 -0
  787. package/packages/store-sqlite/src/index.ts +2 -0
  788. package/packages/store-sqlite/src/store.ts +1101 -0
  789. package/packages/studio/README.md +125 -0
  790. package/packages/studio/index.html +10 -0
  791. package/packages/studio/package.json +50 -0
  792. package/packages/studio/src/build-library.ts +281 -0
  793. package/packages/studio/src/companion-assembly.ts +39 -0
  794. package/packages/studio/src/compile.ts +166 -0
  795. package/packages/studio/src/domain.ts +139 -0
  796. package/packages/studio/src/execute.ts +57 -0
  797. package/packages/studio/src/fallback-companions.ts +98 -0
  798. package/packages/studio/src/observe.ts +202 -0
  799. package/packages/studio/src/parameter-values.ts +81 -0
  800. package/packages/studio/src/parameters.ts +550 -0
  801. package/packages/studio/src/preview/render.ts +51 -0
  802. package/packages/studio/src/preview/runtime-shim.ts +184 -0
  803. package/packages/studio/src/programme.ts +276 -0
  804. package/packages/studio/src/run.ts +85 -0
  805. package/packages/studio/src/server.ts +725 -0
  806. package/packages/studio/src/session.ts +111 -0
  807. package/packages/studio/src/shared.ts +315 -0
  808. package/packages/studio/src/snapshot.ts +454 -0
  809. package/packages/studio/src/source-transaction.ts +57 -0
  810. package/packages/studio/src/storyboard.ts +133 -0
  811. package/packages/studio/src/studio-preflight.ts +198 -0
  812. package/packages/studio/src/studio-registry.ts +406 -0
  813. package/packages/studio/src/studio-trace.ts +136 -0
  814. package/packages/studio/src/style.css +1525 -0
  815. package/packages/studio/src/surface-preview.ts +35 -0
  816. package/packages/studio/src/temporal-graph.ts +227 -0
  817. package/packages/studio/src/ui/code.ts +450 -0
  818. package/packages/studio/src/ui/icons.ts +51 -0
  819. package/packages/studio/src/ui/library.ts +378 -0
  820. package/packages/studio/src/ui/main.ts +1001 -0
  821. package/packages/studio/src/ui/markers.ts +152 -0
  822. package/packages/studio/src/ui/material-preview.ts +176 -0
  823. package/packages/studio/src/ui/overlay.ts +144 -0
  824. package/packages/studio/src/ui/resize.ts +74 -0
  825. package/packages/studio/src/ui/selection.ts +178 -0
  826. package/packages/studio/src/ui/stage.ts +231 -0
  827. package/packages/studio/src/ui/syntax.ts +195 -0
  828. package/packages/studio/src/ui/timeline.ts +1041 -0
  829. package/packages/studio/src/ui/writeback.ts +10 -0
  830. package/packages/studio/src/ui/zoom.ts +129 -0
  831. package/packages/studio/start.ts +143 -0
  832. package/packages/studio-adapter/README.md +186 -0
  833. package/packages/studio-adapter/package.json +14 -0
  834. package/packages/studio-adapter/src/index.ts +850 -0
  835. package/packages/svs/README.md +37 -0
  836. package/packages/svs/package.json +21 -0
  837. package/packages/svs/src/activation.ts +11 -0
  838. package/packages/svs/src/format.ts +16 -0
  839. package/packages/svs/src/frontend.ts +33 -0
  840. package/packages/svs/src/index.ts +5 -0
  841. package/packages/svs/src/manifest.ts +17 -0
  842. package/packages/svs/src/parser.ts +279 -0
  843. package/packages/svs/src/types.ts +26 -0
  844. package/packages/temporal/README.md +31 -0
  845. package/packages/temporal/package.json +20 -0
  846. package/packages/temporal/src/activation.ts +9 -0
  847. package/packages/temporal/src/component.ts +68 -0
  848. package/packages/temporal/src/index.ts +110 -0
  849. package/packages/temporal/src/location.ts +67 -0
  850. package/packages/temporal/src/projection.ts +280 -0
  851. package/packages/temporal/src/rational.ts +80 -0
  852. package/packages/temporal/src/sample.ts +43 -0
  853. package/packages/temporal/src/schedule.ts +52 -0
  854. package/packages/temporal/src/types.ts +124 -0
  855. package/packages/temporal-markup/README.md +75 -0
  856. package/packages/temporal-markup/package.json +18 -0
  857. package/packages/temporal-markup/src/index.ts +537 -0
  858. package/packages/temporal-markup/src/space.ts +59 -0
  859. package/packages/text/README.md +59 -0
  860. package/packages/text/package.json +21 -0
  861. package/packages/text/src/activation.ts +33 -0
  862. package/packages/text/src/component.ts +72 -0
  863. package/packages/text/src/fragment.ts +57 -0
  864. package/packages/text/src/frontend.ts +39 -0
  865. package/packages/text/src/index.ts +27 -0
  866. package/packages/text/src/manifest.ts +170 -0
  867. package/packages/text/src/program.ts +418 -0
  868. package/packages/text/src/surface.ts +212 -0
  869. package/packages/text/src/svs.ts +189 -0
  870. package/packages/text/src/types.ts +82 -0
  871. package/packages/transport-aws-lambda/README.md +20 -0
  872. package/packages/transport-aws-lambda/package.json +14 -0
  873. package/packages/transport-aws-lambda/src/index.ts +131 -0
  874. package/packages/typography-track/README.md +50 -0
  875. package/packages/typography-track/package.json +34 -0
  876. package/packages/typography-track/preview/Mask.png +0 -0
  877. package/packages/typography-track/preview/Track.png +0 -0
  878. package/packages/typography-track/src/activation.ts +36 -0
  879. package/packages/typography-track/src/component.ts +93 -0
  880. package/packages/typography-track/src/fragment.ts +30 -0
  881. package/packages/typography-track/src/index.ts +11 -0
  882. package/packages/typography-track/src/manifest.ts +556 -0
  883. package/packages/typography-track/src/program.ts +622 -0
  884. package/packages/typography-track/src/surface.ts +842 -0
  885. package/packages/typography-track/src/types.ts +109 -0
  886. package/packages/typography-track-studio/README.md +3 -0
  887. package/packages/typography-track-studio/package.json +14 -0
  888. package/packages/typography-track-studio/src/activation.ts +7 -0
  889. package/packages/typography-track-studio/src/index.ts +116 -0
  890. package/packages/validation/README.md +11 -0
  891. package/packages/validation/package.json +15 -0
  892. package/packages/validation/src/index.ts +100 -0
  893. package/packages/video-cli/README.md +181 -0
  894. package/packages/video-cli/package.json +37 -0
  895. package/packages/video-cli/src/capture.ts +174 -0
  896. package/packages/video-cli/src/cli.ts +109 -0
  897. package/packages/video-cli/src/compiler.ts +32 -0
  898. package/packages/video-cli/src/creation.ts +449 -0
  899. package/packages/video-cli/src/distribution.ts +88 -0
  900. package/packages/video-cli/src/index.ts +50 -0
  901. package/packages/video-cli/src/media.ts +701 -0
  902. package/packages/video-cli/src/package-selection.ts +34 -0
  903. package/packages/video-cli/src/process.ts +71 -0
  904. package/packages/video-cli/src/studio-distribution.ts +19 -0
  905. package/packages/video-cli/src/transcript.ts +71 -0
  906. package/packages/video-cli/src/vocabulary.ts +386 -0
  907. package/packages/visual-ir/README.md +36 -0
  908. package/packages/visual-ir/package.json +16 -0
  909. package/packages/visual-ir/src/activation.ts +3 -0
  910. package/packages/visual-ir/src/index.ts +7 -0
  911. package/packages/visual-ir/src/style.ts +222 -0
  912. package/packages/volcengine-matting/README.md +89 -0
  913. package/packages/volcengine-matting/package.json +16 -0
  914. package/packages/volcengine-matting/src/activation.ts +13 -0
  915. package/packages/volcengine-matting/src/index.ts +45 -0
  916. package/packages/volcengine-matting/src/surface.ts +48 -0
  917. package/packages/whisperx/README.md +34 -0
  918. package/packages/whisperx/package.json +28 -0
  919. package/packages/whisperx/src/activation.ts +18 -0
  920. package/packages/whisperx/src/component.ts +64 -0
  921. package/packages/whisperx/src/evidence.ts +69 -0
  922. package/packages/whisperx/src/fragment.ts +76 -0
  923. package/packages/whisperx/src/index.ts +14 -0
  924. package/packages/whisperx/src/manifest.ts +92 -0
  925. package/packages/whisperx/src/surface.ts +90 -0
  926. package/packages/whisperx/src/transcript.ts +97 -0
  927. package/packages/whisperx/src/types.ts +9 -0
  928. package/packages/workspace/README.md +4 -0
  929. package/packages/workspace/package.json +14 -0
  930. package/packages/workspace/src/index.ts +38 -0
  931. package/packages/workspace-fs-node/README.md +13 -0
  932. package/packages/workspace-fs-node/package.json +15 -0
  933. package/packages/workspace-fs-node/src/index.ts +6 -0
  934. package/packages/workspace-fs-node/src/workspace.ts +226 -0
  935. package/packages/yt-dlp/README.md +31 -0
  936. package/packages/yt-dlp/package.json +10 -0
  937. package/packages/yt-dlp/src/download.ts +104 -0
  938. package/packages/yt-dlp/src/index.ts +1 -0
  939. package/services/image-opencv/README.md +33 -0
  940. package/services/image-opencv/package.json +14 -0
  941. package/services/image-opencv/pyproject.toml +13 -0
  942. package/services/image-opencv/uv.lock +56 -0
  943. package/services/whisperx/README.md +82 -0
  944. package/services/whisperx/package.json +15 -0
  945. package/services/whisperx/pyproject.toml +26 -0
  946. package/services/whisperx/src/hypit_whisperx_service/__init__.py +6 -0
  947. package/services/whisperx/src/hypit_whisperx_service/__main__.py +29 -0
  948. package/services/whisperx/src/hypit_whisperx_service/application.py +88 -0
  949. package/services/whisperx/src/hypit_whisperx_service/audio.py +66 -0
  950. package/services/whisperx/src/hypit_whisperx_service/check.py +35 -0
  951. package/services/whisperx/src/hypit_whisperx_service/config.py +81 -0
  952. package/services/whisperx/src/hypit_whisperx_service/engine.py +173 -0
  953. package/services/whisperx/src/hypit_whisperx_service/prepare.py +19 -0
  954. package/services/whisperx/src/hypit_whisperx_service/resources.py +41 -0
  955. package/services/whisperx/src/hypit_whisperx_service/server.py +101 -0
  956. package/services/whisperx/uv.lock +3381 -0
  957. package/services/yt-dlp/README.md +19 -0
  958. package/services/yt-dlp/package.json +14 -0
  959. package/services/yt-dlp/pyproject.toml +13 -0
  960. package/services/yt-dlp/uv.lock +23 -0
  961. package/index.js +0 -1
@@ -0,0 +1,1229 @@
1
+ import { readFile, rm, stat } from "node:fs/promises";
2
+ import { dirname, relative, resolve, sep } from "node:path";
3
+
4
+ import {
5
+ collectLoadedNodePackageComponents,
6
+ distributionExternalPackageRequirements,
7
+ loadNodePackageSelection,
8
+ } from "@hypit/package-loader-node";
9
+ import type { NodePackageSelectionRequest } from "@hypit/package-loader-node";
10
+ import { EndpointRegistry, NodeDriver } from "@hypit/driver-node";
11
+ import type { EndpointCredential, EndpointFulfillment, EndpointPackage, EndpointRegistrar, EndpointScheduling } from "@hypit/endpoint-kit";
12
+ import { endpointResourceClaims, verifyEndpointPricingDocument } from "@hypit/endpoint-kit";
13
+ import { assertBuildId, canonicalize, canonicalStringify } from "@hypit/protocol";
14
+ import type { CanonicalValue, CapabilityRef, Need } from "@hypit/protocol";
15
+ import {
16
+ CompositeCredentialStore,
17
+ capacityUnits,
18
+ writableCredentialStore,
19
+ } from "@hypit/runtime";
20
+ import type { CredentialStore, CredentialValue, ResourceStore } from "@hypit/runtime";
21
+ import { FileResourceStore } from "@hypit/resource-store-fs";
22
+ import {
23
+ buildResultRepositoryHostAbi,
24
+ BuildResultRepositoryRegistry,
25
+ isBuildResultRepositoryHostFacet,
26
+ } from "@hypit/build-result-kit";
27
+ import type {
28
+ BuildResultRepositoryDiagnostic,
29
+ BuildResultRepositoryLocation,
30
+ BuildResultRepositoryOpened,
31
+ BuildResultRepositorySelection,
32
+ } from "@hypit/build-result-kit";
33
+ import {
34
+ isRuntimeAdapterHostFacet,
35
+ runtimeCredentialStoreAdapterHostAbi,
36
+ runtimeEndpointAdapterHostAbi,
37
+ RuntimeAdapterRegistry,
38
+ } from "@hypit/runtime-kit";
39
+ import type {
40
+ ManagedProgram,
41
+ ManagedProgramState,
42
+ RuntimeAdapterFactoryContext,
43
+ RuntimeDoctorDiagnostic,
44
+ RuntimeEndpointActivation,
45
+ RuntimeOpened,
46
+ } from "@hypit/runtime-kit";
47
+ import {
48
+ hypitHostPackageRoot,
49
+ hypitHostStateRoot,
50
+ prepareHostPackages,
51
+ } from "@hypit/runtime-host-node";
52
+ import type {
53
+ HostPackageProgress,
54
+ HostPackageReport,
55
+ RuntimeHostCapabilityPricing,
56
+ RuntimeHostCapabilityProvider,
57
+ RuntimeHostProviderQuery,
58
+ RuntimeHostTransientExecution,
59
+ } from "@hypit/runtime-host-node";
60
+ import { SqliteRuntimeState } from "@hypit/store-sqlite";
61
+
62
+ import { applyEndpointBindings, createLocalRuntime, parseCapabilityKey } from "./runtime.js";
63
+ import {
64
+ createLocalRuntimeControl,
65
+ } from "./control.js";
66
+ import { createLocalCredentialControl } from "./credentials.js";
67
+ import { createLocalResultWriter } from "./result-writer.js";
68
+ import type {
69
+ LocalCredentialControl,
70
+ LocalResultWriter,
71
+ LocalRuntime,
72
+ LocalRuntimeControl,
73
+ } from "./types.js";
74
+
75
+ export type LocalRuntimeAdapterSelection = {
76
+ readonly use: string;
77
+ readonly instance: string;
78
+ readonly pool?: string;
79
+ readonly config?: CanonicalValue;
80
+ };
81
+
82
+ export type LocalRuntimeProfile = {
83
+ readonly format: "hypit.runtime-local@1";
84
+ readonly dataRoot: string;
85
+ readonly credentials: readonly LocalRuntimeAdapterSelection[];
86
+ readonly endpoints: readonly LocalRuntimeAdapterSelection[];
87
+ /**
88
+ * Capability key (`name@version#capability`) to Endpoint instance, for capabilities that several
89
+ * selected Endpoints offer. Providers declare everything they can do; this is where the deployment
90
+ * says who does it.
91
+ */
92
+ readonly bindings: Readonly<Record<string, string>>;
93
+ };
94
+
95
+ export type ProjectBuildResultConfig = {
96
+ readonly format: "hypit.build-results@1";
97
+ readonly use: string;
98
+ readonly config?: CanonicalValue;
99
+ };
100
+
101
+ export type ProjectBuildResultDoctorResult = {
102
+ readonly location?: BuildResultRepositoryLocation;
103
+ readonly diagnostics: readonly BuildResultRepositoryDiagnostic[];
104
+ };
105
+
106
+ export type LoadRuntimeConfigOptions = {
107
+ readonly registry?: RuntimeAdapterRegistry;
108
+ readonly resultRegistry?: BuildResultRepositoryRegistry;
109
+ readonly packageRoot?: string;
110
+ readonly distributionPackageRoot?: string;
111
+ /** Persistent machine/user state. Defaults to the platform Hypit state root. */
112
+ readonly hostStateRoot?: string;
113
+ };
114
+
115
+ export type RuntimeConfigDoctorResult = {
116
+ readonly dataRoot: string;
117
+ readonly diagnostics: readonly RuntimeDoctorDiagnostic[];
118
+ };
119
+
120
+ type RuntimeInspectionOptions = LoadRuntimeConfigOptions & {
121
+ readonly capabilities?: readonly CapabilityRef[];
122
+ readonly active: boolean;
123
+ };
124
+
125
+ export type ResolvedRuntimeConfigPaths = {
126
+ readonly packageRoot: string;
127
+ readonly dataRoot: string;
128
+ };
129
+
130
+ type OpenedRuntimeConfig = {
131
+ readonly absolute: string;
132
+ readonly document: LocalRuntimeProfile;
133
+ readonly root: string;
134
+ readonly profileRoot: string;
135
+ readonly packageRoot: string;
136
+ };
137
+
138
+ type DeclaredManagedProgram = {
139
+ readonly instance: string;
140
+ readonly program: ManagedProgram;
141
+ };
142
+
143
+ function object(value: unknown, subject: string): Record<string, unknown> {
144
+ if (value === null || typeof value !== "object" || Array.isArray(value)) throw new Error(`${subject} must be an object`);
145
+ return value as Record<string, unknown>;
146
+ }
147
+
148
+ function exactKeys(value: Record<string, unknown>, allowed: readonly string[], subject: string): void {
149
+ const unknown = Object.keys(value).filter((key) => !allowed.includes(key));
150
+ if (unknown.length > 0) {
151
+ throw new Error(`${subject} does not accept ${unknown.join(", ")}; it accepts ${allowed.join(", ")}`);
152
+ }
153
+ }
154
+
155
+ function requiredString(value: unknown, subject: string): string {
156
+ if (typeof value !== "string" || value.trim().length === 0) throw new Error(`${subject} must be a non-empty string`);
157
+ return value;
158
+ }
159
+
160
+ function entry(value: unknown, instance: string, subject: string, poolAllowed = false): LocalRuntimeAdapterSelection {
161
+ const item = object(value, subject);
162
+ exactKeys(item, poolAllowed ? ["use", "pool", "config"] : ["use", "config"], subject);
163
+ const pool = item.pool === undefined ? undefined : requiredString(item.pool, `${subject}.pool`);
164
+ return {
165
+ use: requiredString(item.use, `${subject}.use`),
166
+ instance,
167
+ ...(pool === undefined ? {} : { pool }),
168
+ ...(item.config === undefined ? {} : { config: canonicalize(item.config) }),
169
+ };
170
+ }
171
+
172
+ function entries(value: unknown, subject: string, poolAllowed = false): readonly LocalRuntimeAdapterSelection[] {
173
+ const values = object(value ?? {}, subject);
174
+ return Object.entries(values).sort(([left], [right]) => left.localeCompare(right)).map(([instance, item]) => {
175
+ requiredString(instance, `${subject} instance`);
176
+ return entry(item, instance, `${subject}.${instance}`, poolAllowed);
177
+ });
178
+ }
179
+
180
+ function bindings(value: unknown, endpoints: readonly LocalRuntimeAdapterSelection[]): Readonly<Record<string, string>> {
181
+ const values = object(value ?? {}, "$runtime.bindings");
182
+ const instances = new Set(endpoints.map((item) => item.instance));
183
+ const result: Record<string, string> = {};
184
+ for (const [key, target] of Object.entries(values).sort(([left], [right]) => left.localeCompare(right))) {
185
+ parseCapabilityKey(key);
186
+ const instance = requiredString(target, `$runtime.bindings.${key}`);
187
+ if (!instances.has(instance)) {
188
+ throw new Error(`$runtime.bindings.${key} names ${instance}, which is not an Endpoint instance of this Profile (${[...instances].sort().join(", ")})`);
189
+ }
190
+ result[key] = instance;
191
+ }
192
+ return result;
193
+ }
194
+
195
+ export function parseLocalRuntimeProfile(value: unknown): LocalRuntimeProfile {
196
+ const item = object(value, "$runtime");
197
+ exactKeys(item, ["format", "dataRoot", "credentials", "endpoints", "bindings"], "$runtime");
198
+ if (item.format !== "hypit.runtime-local@1") {
199
+ throw new Error("$runtime.format must be hypit.runtime-local@1");
200
+ }
201
+ const credentials = entries(item.credentials, "$runtime.credentials");
202
+ const endpoints = entries(item.endpoints, "$runtime.endpoints", true);
203
+ const ids = [...credentials, ...endpoints].map((value) => value.instance);
204
+ if (new Set(ids).size !== ids.length) throw new Error("$runtime repeats a Runtime instance id");
205
+ return {
206
+ format: "hypit.runtime-local@1",
207
+ dataRoot: requiredString(item.dataRoot, "$runtime.dataRoot"),
208
+ credentials,
209
+ endpoints,
210
+ bindings: bindings(item.bindings, endpoints),
211
+ };
212
+ }
213
+
214
+ async function openRuntimeConfig(path: string, packageRootHint?: string): Promise<OpenedRuntimeConfig> {
215
+ const absolute = resolve(path);
216
+ const document = parseLocalRuntimeProfile(JSON.parse(await readFile(absolute, "utf8")));
217
+ const profileRoot = dirname(absolute);
218
+ return {
219
+ absolute,
220
+ document,
221
+ root: resolve(profileRoot, document.dataRoot),
222
+ profileRoot,
223
+ packageRoot: resolve(packageRootHint ?? profileRoot),
224
+ };
225
+ }
226
+
227
+ function runtimePackageSelection(document: LocalRuntimeProfile): NodePackageSelectionRequest {
228
+ return {
229
+ selected: [],
230
+ logical: [
231
+ ...document.credentials.map((item) => ({ abi: runtimeCredentialStoreAdapterHostAbi, name: item.use })),
232
+ ...document.endpoints.map((item) => ({ abi: runtimeEndpointAdapterHostAbi, name: item.use })),
233
+ ],
234
+ };
235
+ }
236
+
237
+ function resultPackageSelection(use: string): NodePackageSelectionRequest {
238
+ return {
239
+ selected: [],
240
+ logical: [{ abi: buildResultRepositoryHostAbi, name: use }],
241
+ };
242
+ }
243
+
244
+ function endpointPackageSelection(document: LocalRuntimeProfile): NodePackageSelectionRequest {
245
+ return {
246
+ selected: [],
247
+ logical: document.endpoints.map((item) => ({ abi: runtimeEndpointAdapterHostAbi, name: item.use })),
248
+ };
249
+ }
250
+
251
+ async function installRuntimeAdapters(
252
+ registry: RuntimeAdapterRegistry,
253
+ packageRoot: string,
254
+ selection: NodePackageSelectionRequest,
255
+ distributionPackageRoot?: string,
256
+ ): Promise<void> {
257
+ const logical = selection.logical?.filter((address) => {
258
+ if (address.abi === runtimeEndpointAdapterHostAbi) return !registry.has(address.name, "endpoint");
259
+ if (address.abi === runtimeCredentialStoreAdapterHostAbi) return !registry.has(address.name, "credential-store");
260
+ return true;
261
+ }) ?? [];
262
+ if (selection.selected.length === 0 && logical.length === 0) return;
263
+ const loaded = await loadNodePackageSelection({ selected: selection.selected, logical }, packageRoot, {
264
+ ...(distributionPackageRoot === undefined ? {} : { fallbackRoots: [distributionPackageRoot] }),
265
+ });
266
+ for (const item of loaded) {
267
+ for (const facet of item.contribution.hostFacets ?? []) {
268
+ if (isRuntimeAdapterHostFacet(facet)) registry.registerFacet(facet);
269
+ }
270
+ }
271
+ }
272
+
273
+ async function installBuildResultAdapter(
274
+ registry: BuildResultRepositoryRegistry,
275
+ packageRoot: string,
276
+ use: string,
277
+ distributionPackageRoot?: string,
278
+ ): Promise<void> {
279
+ if (registry.has(use)) return;
280
+ const loaded = await loadNodePackageSelection(resultPackageSelection(use), packageRoot, {
281
+ ...(distributionPackageRoot === undefined ? {} : { fallbackRoots: [distributionPackageRoot] }),
282
+ });
283
+ for (const item of loaded) {
284
+ for (const facet of item.contribution.hostFacets ?? []) {
285
+ if (isBuildResultRepositoryHostFacet(facet)) registry.registerFacet(facet);
286
+ }
287
+ }
288
+ if (!registry.has(use)) throw new Error(`Package selection did not provide Build Result Repository ${use}`);
289
+ }
290
+
291
+ async function openBuildResultLocation(
292
+ location: BuildResultRepositoryLocation,
293
+ options: LoadRuntimeConfigOptions,
294
+ packageRoot: string,
295
+ registry: BuildResultRepositoryRegistry,
296
+ ): Promise<BuildResultRepositoryOpened> {
297
+ await installBuildResultAdapter(registry, packageRoot, location.selection.use, options.distributionPackageRoot);
298
+ return await registry.open(location.selection, location.root);
299
+ }
300
+
301
+ export async function openBuildResultRepositoryLocation(
302
+ location: BuildResultRepositoryLocation,
303
+ options: LoadRuntimeConfigOptions = {},
304
+ ): Promise<BuildResultRepositoryOpened> {
305
+ const root = resolve(location.root);
306
+ const registry = options.resultRegistry ?? new BuildResultRepositoryRegistry();
307
+ return await openBuildResultLocation(location, options, resolve(options.packageRoot ?? root), registry);
308
+ }
309
+
310
+ export async function openProjectBuildResultRepository(
311
+ projectRoot: string,
312
+ options: LoadRuntimeConfigOptions & {
313
+ readonly defaultSelection: BuildResultRepositorySelection;
314
+ },
315
+ ): Promise<BuildResultRepositoryOpened & { readonly location: BuildResultRepositoryLocation }> {
316
+ const root = resolve(projectRoot);
317
+ const location = await projectBuildResultLocation(root, options.defaultSelection);
318
+ const registry = options.resultRegistry ?? new BuildResultRepositoryRegistry();
319
+ const result = await openBuildResultLocation(location, options, resolve(options.packageRoot ?? root), registry);
320
+ return { ...result, location };
321
+ }
322
+
323
+ async function projectBuildResultLocation(
324
+ root: string,
325
+ defaultSelection: BuildResultRepositorySelection,
326
+ ): Promise<BuildResultRepositoryLocation> {
327
+ const configPath = resolve(root, "hypit.results.json");
328
+ const text = await readFile(configPath, "utf8").catch((error: unknown) => {
329
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") return undefined;
330
+ throw error;
331
+ });
332
+ let selection: BuildResultRepositoryLocation["selection"];
333
+ if (text === undefined) {
334
+ selection = defaultSelection;
335
+ } else {
336
+ const item = object(JSON.parse(text), "$results");
337
+ exactKeys(item, ["format", "use", "config"], "$results");
338
+ if (item.format !== "hypit.build-results@1") {
339
+ throw new Error("$results.format must be hypit.build-results@1");
340
+ }
341
+ selection = {
342
+ use: requiredString(item.use, "$results.use"),
343
+ ...(item.config === undefined ? {} : { config: canonicalize(item.config) }),
344
+ };
345
+ }
346
+ return { root, selection };
347
+ }
348
+
349
+ /** Diagnose the project-owned Result Store without reading Result history or mutating storage. */
350
+ export async function doctorProjectBuildResultRepository(
351
+ projectRoot: string,
352
+ options: LoadRuntimeConfigOptions & {
353
+ readonly defaultSelection: BuildResultRepositorySelection;
354
+ },
355
+ ): Promise<ProjectBuildResultDoctorResult> {
356
+ const root = resolve(projectRoot);
357
+ let location: BuildResultRepositoryLocation | undefined;
358
+ try {
359
+ location = await projectBuildResultLocation(root, options.defaultSelection);
360
+ const registry = options.resultRegistry ?? new BuildResultRepositoryRegistry();
361
+ await installBuildResultAdapter(
362
+ registry,
363
+ resolve(options.packageRoot ?? root),
364
+ location.selection.use,
365
+ options.distributionPackageRoot,
366
+ );
367
+ return {
368
+ location,
369
+ diagnostics: await registry.doctor(location.selection, location.root),
370
+ };
371
+ } catch (error) {
372
+ return {
373
+ ...(location === undefined ? {} : { location }),
374
+ diagnostics: [{
375
+ severity: "error",
376
+ code: "RESULT_REPOSITORY_INVALID",
377
+ message: error instanceof Error ? error.message : String(error),
378
+ subject: resolve(root, "hypit.results.json"),
379
+ }],
380
+ };
381
+ }
382
+ }
383
+
384
+ export async function resolveRuntimeConfigPaths(
385
+ path: string,
386
+ options: LoadRuntimeConfigOptions = {},
387
+ ): Promise<ResolvedRuntimeConfigPaths> {
388
+ const opened = await openRuntimeConfig(path, options.packageRoot);
389
+ return { packageRoot: opened.packageRoot, dataRoot: opened.root };
390
+ }
391
+
392
+ /** Explicit provisioning step used by runtime/programs up, never by plan or build. */
393
+ export async function prepareRuntimeConfigPackages(
394
+ path: string,
395
+ options: LoadRuntimeConfigOptions & {
396
+ readonly onProgress?: (event: HostPackageProgress) => void;
397
+ } = {},
398
+ ): Promise<readonly HostPackageReport[]> {
399
+ if (options.distributionPackageRoot === undefined) return [];
400
+ const { document } = await openRuntimeConfig(path, options.packageRoot);
401
+ const requirements = await distributionExternalPackageRequirements([
402
+ ...document.credentials.map((item) => item.use),
403
+ ...document.endpoints.map((item) => item.use),
404
+ ], options.distributionPackageRoot);
405
+ return await prepareHostPackages(requirements.map((item) => item.specifier), {
406
+ root: hypitHostPackageRoot(options.hostStateRoot),
407
+ ...(options.onProgress === undefined ? {} : { onProgress: options.onProgress }),
408
+ });
409
+ }
410
+
411
+ function capabilityKey(capability: CapabilityRef): string {
412
+ return `${capability.module.name}@${capability.module.version}#${capability.name}`;
413
+ }
414
+
415
+ function sameRef(
416
+ left: { readonly module: { readonly name: string; readonly version: string }; readonly name: string },
417
+ right: { readonly module: { readonly name: string; readonly version: string }; readonly name: string },
418
+ ): boolean {
419
+ return left.module.name === right.module.name
420
+ && left.module.version === right.module.version
421
+ && left.name === right.name;
422
+ }
423
+
424
+ function adapterContext(
425
+ root: string,
426
+ hostStateRoot: string,
427
+ item: LocalRuntimeAdapterSelection,
428
+ ): RuntimeAdapterFactoryContext {
429
+ return {
430
+ hostStateRoot,
431
+ dataRoot: root,
432
+ instance: item.instance,
433
+ ...(item.pool === undefined ? {} : { pool: item.pool }),
434
+ config: item.config ?? {},
435
+ };
436
+ }
437
+
438
+ async function activatedEndpoints(
439
+ document: LocalRuntimeProfile,
440
+ root: string,
441
+ hostStateRoot: string,
442
+ registry: RuntimeAdapterRegistry,
443
+ ): Promise<readonly { readonly entry: LocalRuntimeAdapterSelection; readonly activation: RuntimeEndpointActivation }[]> {
444
+ return await Promise.all(document.endpoints.map(async (item) => ({
445
+ entry: item,
446
+ activation: await registry.activateEndpoint(item.use, adapterContext(root, hostStateRoot, {
447
+ ...item,
448
+ pool: item.pool ?? item.instance,
449
+ })),
450
+ })));
451
+ }
452
+
453
+ export async function declaredManagedPrograms(
454
+ path: string,
455
+ options: LoadRuntimeConfigOptions & { readonly capabilities?: readonly CapabilityRef[] } = {},
456
+ ): Promise<{ readonly dataRoot: string; readonly programs: readonly DeclaredManagedProgram[] }> {
457
+ const { document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
458
+ if (options.capabilities?.length === 0) return { dataRoot: root, programs: [] };
459
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
460
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
461
+ await installRuntimeAdapters(registry, packageRoot, endpointPackageSelection(document), options.distributionPackageRoot);
462
+ const requested = options.capabilities === undefined
463
+ ? undefined
464
+ : new Set(options.capabilities.map(capabilityKey));
465
+ const programs: DeclaredManagedProgram[] = [];
466
+ for (const { entry, activation } of await activatedEndpoints(document, root, hostStateRoot, registry)) {
467
+ if (requested !== undefined && !activation.endpoint.offers.some((offer) => requested.has(capabilityKey(offer.capability)))) continue;
468
+ if (activation.program !== undefined) programs.push({ instance: entry.instance, program: activation.program });
469
+ }
470
+ return { dataRoot: root, programs };
471
+ }
472
+
473
+ /**
474
+ * A registry of every selected Endpoint with the Profile's bindings applied: the one resolver that
475
+ * `plan`, creation-time `invoke` and a Build share, so all three see the same Endpoint for a Need.
476
+ */
477
+ async function installedEndpointRegistry(
478
+ document: LocalRuntimeProfile,
479
+ activations: readonly { readonly entry: LocalRuntimeAdapterSelection; readonly activation: RuntimeEndpointActivation }[],
480
+ ): Promise<EndpointRegistry> {
481
+ const endpoints = new EndpointRegistry();
482
+ for (const { activation } of activations) await activation.endpoint.install(endpoints);
483
+ applyEndpointBindings(endpoints, document.bindings);
484
+ return endpoints;
485
+ }
486
+
487
+ type TransientResourceClaim = EndpointScheduling["resources"][number];
488
+
489
+ /** In-memory concurrency shared only by evaluations inside one disposable authoring session. */
490
+ class TransientSessionCapacity {
491
+ readonly #limits = new Map<string, number>();
492
+ readonly #active = new Map<string, number>();
493
+ readonly #waiters = new Set<() => void>();
494
+
495
+ declare(resources: readonly TransientResourceClaim[]): void {
496
+ for (const resource of resources) {
497
+ capacityUnits(resource);
498
+ const previous = this.#limits.get(resource.id);
499
+ if (previous !== undefined && previous !== resource.limit) {
500
+ throw new Error(`Transient Runtime resource ${resource.id} has conflicting limits ${previous} and ${resource.limit}`);
501
+ }
502
+ this.#limits.set(resource.id, resource.limit);
503
+ }
504
+ }
505
+
506
+ async run<T>(resources: readonly TransientResourceClaim[], task: () => Promise<T>): Promise<T> {
507
+ const ordered = [...resources].sort((left, right) => left.id.localeCompare(right.id));
508
+ for (const resource of ordered) capacityUnits(resource);
509
+ while (ordered.some((resource) => (this.#active.get(resource.id) ?? 0) + capacityUnits(resource) > resource.limit)) {
510
+ await new Promise<void>((resolveWait) => this.#waiters.add(resolveWait));
511
+ }
512
+ for (const resource of ordered) this.#active.set(resource.id, (this.#active.get(resource.id) ?? 0) + capacityUnits(resource));
513
+ try {
514
+ return await task();
515
+ } finally {
516
+ for (const resource of ordered) {
517
+ const next = (this.#active.get(resource.id) ?? capacityUnits(resource)) - capacityUnits(resource);
518
+ if (next === 0) this.#active.delete(resource.id);
519
+ else this.#active.set(resource.id, next);
520
+ }
521
+ const waiters = [...this.#waiters];
522
+ this.#waiters.clear();
523
+ for (const wake of waiters) wake();
524
+ }
525
+ }
526
+ }
527
+
528
+ /**
529
+ * Open the Profile's disposable authoring execution. Endpoint Providers opt individual immediate
530
+ * capabilities into this boundary; price and process location are deliberately irrelevant.
531
+ */
532
+ export async function openTransientRuntimeConfigExecution(
533
+ path: string,
534
+ options: LoadRuntimeConfigOptions = {},
535
+ ): Promise<RuntimeHostTransientExecution> {
536
+ const { document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
537
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
538
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
539
+ await installRuntimeAdapters(registry, packageRoot, runtimePackageSelection(document), options.distributionPackageRoot);
540
+ const endpoints = new EndpointRegistry();
541
+ const capacity = new TransientSessionCapacity();
542
+ const activations = await activatedEndpoints(document, root, hostStateRoot, registry);
543
+ for (const { activation } of activations) {
544
+ let readiness: Promise<void> | undefined;
545
+ const assertReady = async (): Promise<void> => {
546
+ const program = activation.program;
547
+ if (program === undefined) return;
548
+ readiness ??= program.probe().then((state) => {
549
+ if (state.state !== "ready") {
550
+ throw new Error(`Runtime program ${program.id} is ${state.state}: ${state.detail}`);
551
+ }
552
+ });
553
+ try {
554
+ await readiness;
555
+ } catch (error) {
556
+ readiness = undefined;
557
+ throw error;
558
+ }
559
+ };
560
+ const transientOnly: EndpointRegistrar = {
561
+ registerImmediateEndpoint(id, capability, returns, handler, registrationOptions) {
562
+ if (registrationOptions?.transient !== true) return;
563
+ const resources = registrationOptions.scheduling?.resources ?? [{ id: `endpoint:${id}`, limit: 1 }];
564
+ capacity.declare(resources);
565
+ endpoints.registerImmediateEndpoint(id, capability, returns, async (context) => {
566
+ const claims = registrationOptions.scheduling === undefined ? resources
567
+ : endpointResourceClaims(registrationOptions.scheduling, context.need);
568
+ return await capacity.run(claims, async () => {
569
+ await assertReady();
570
+ return await handler(context);
571
+ });
572
+ }, registrationOptions);
573
+ },
574
+ registerAsyncEndpoint(id, capability, _returns, _endpoint, registrationOptions) {
575
+ if (registrationOptions?.transient === true) {
576
+ throw new Error(`Endpoint ${id} declares asynchronous capability ${capabilityKey(capability)} as transient`);
577
+ }
578
+ },
579
+ };
580
+ await activation.endpoint.install(transientOnly);
581
+ }
582
+ applyEndpointBindings(endpoints, document.bindings);
583
+ const stores = await openCredentialStores(document, root, hostStateRoot, registry);
584
+ let closed = false;
585
+ let activeEvaluations = 0;
586
+ let closing: Promise<void> | undefined;
587
+ const idleWaiters = new Set<() => void>();
588
+ return {
589
+ async evaluate(input) {
590
+ if (closed) throw new Error("transient Runtime execution is closed");
591
+ activeEvaluations += 1;
592
+ try {
593
+ return await new NodeDriver({
594
+ producers: input.producers,
595
+ validators: input.validators,
596
+ endpoints,
597
+ resources: input.resources,
598
+ credentials: stores.store,
599
+ }).run(input.state);
600
+ } finally {
601
+ activeEvaluations -= 1;
602
+ if (activeEvaluations === 0) {
603
+ const waiters = [...idleWaiters];
604
+ idleWaiters.clear();
605
+ for (const wake of waiters) wake();
606
+ }
607
+ }
608
+ },
609
+ async close() {
610
+ if (closing !== undefined) return await closing;
611
+ closed = true;
612
+ closing = (async () => {
613
+ if (activeEvaluations > 0) {
614
+ await new Promise<void>((resolveWait) => idleWaiters.add(resolveWait));
615
+ }
616
+ await stores.close();
617
+ })();
618
+ await closing;
619
+ },
620
+ };
621
+ }
622
+
623
+ /** Static Endpoint selection per capability. Reads the Profile and activations only; never a credential or a service. */
624
+ export async function describeRuntimeConfigProviders(
625
+ path: string,
626
+ requests: readonly RuntimeHostProviderQuery[],
627
+ options: LoadRuntimeConfigOptions = {},
628
+ ): Promise<readonly RuntimeHostCapabilityProvider[]> {
629
+ if (requests.length === 0) return [];
630
+ const { document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
631
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
632
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
633
+ await installRuntimeAdapters(registry, packageRoot, endpointPackageSelection(document), options.distributionPackageRoot);
634
+ const activations = await activatedEndpoints(document, root, hostStateRoot, registry);
635
+ const endpoints = await installedEndpointRegistry(document, activations);
636
+ return requests.map((request): RuntimeHostCapabilityProvider => {
637
+ const base = {
638
+ request: request.request,
639
+ capability: structuredClone(request.capability),
640
+ };
641
+ const binding = document.bindings[capabilityKey(request.capability)];
642
+ const bound = binding === undefined ? {} : { binding };
643
+ const resolution = endpoints.resolve({
644
+ capability: request.capability,
645
+ returns: request.returns,
646
+ constraints: request.constraints,
647
+ ...(request.pendingInputs === undefined ? {} : { pendingInputs: request.pendingInputs }),
648
+ });
649
+ if (resolution.status === "missing") return { ...base, status: "unresolved", ...bound };
650
+ if (resolution.status === "unsupported") {
651
+ const endpoint = resolution.rejections.length === 1 ? resolution.rejections[0]!.endpointId : undefined;
652
+ const match = endpoint === undefined ? undefined
653
+ : activations.find(({ activation }) => activation.endpoint.instance.id === endpoint);
654
+ const pricing = match?.activation.endpoint.pricing;
655
+ return {
656
+ ...base,
657
+ status: "unsupported",
658
+ ...(endpoint === undefined ? {} : { endpoint }),
659
+ ...(match === undefined ? {} : { use: match.entry.use }),
660
+ ...(pricing === undefined ? {} : { pricing: structuredClone(pricing) }),
661
+ rejections: resolution.rejections.map((item) => ({ endpoint: item.endpointId, message: item.reason })),
662
+ ...bound,
663
+ };
664
+ }
665
+ if (resolution.status === "ambiguous") return { ...base, status: "ambiguous", endpoints: resolution.endpointIds, ...bound };
666
+ const match = activations.find(({ activation }) => activation.endpoint.instance.id === resolution.registration.id);
667
+ const pricing = match?.activation.endpoint.pricing;
668
+ return {
669
+ ...base,
670
+ status: "resolved",
671
+ endpoint: resolution.registration.id,
672
+ ...(match === undefined ? {} : { use: match.entry.use }),
673
+ ...(pricing === undefined ? {} : { pricing: structuredClone(pricing) }),
674
+ ...bound,
675
+ };
676
+ });
677
+ }
678
+
679
+ async function resolveEndpointCredentials(
680
+ endpoint: EndpointPackage,
681
+ store: CredentialStore,
682
+ profile: string,
683
+ ): Promise<Readonly<Record<string, EndpointCredential>>> {
684
+ const credentials: Record<string, EndpointCredential> = {};
685
+ for (const slot of endpoint.credentials) {
686
+ const value = await store.resolve(slot.ref);
687
+ if (value === undefined) {
688
+ throw new Error(`${slot.label} for Endpoint ${slot.endpoint} is not configured. ${
689
+ slot.ref.store === "env"
690
+ ? `Set ${slot.ref.key} in this process environment.`
691
+ : `Configure it with: hypit auth login ${slot.endpoint} --runtime ${profile}`}`);
692
+ }
693
+ const writable = await writableCredentialStore(store, slot.ref);
694
+ credentials[slot.slot] = {
695
+ ...value,
696
+ ...(writable === undefined ? {} : {
697
+ replace: async (replacement: CredentialValue) => await writable.put(slot.ref, replacement),
698
+ }),
699
+ };
700
+ }
701
+ return credentials;
702
+ }
703
+
704
+ /** Read current Provider-owned pricing material; no Build, generation or durable pricing cache is created. */
705
+ export async function readRuntimeConfigPricing(
706
+ path: string,
707
+ requests: readonly RuntimeHostProviderQuery[],
708
+ options: LoadRuntimeConfigOptions = {},
709
+ ): Promise<readonly RuntimeHostCapabilityPricing[]> {
710
+ if (requests.length === 0) return [];
711
+ const { absolute, document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
712
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
713
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
714
+ await installRuntimeAdapters(registry, packageRoot, runtimePackageSelection(document), options.distributionPackageRoot);
715
+ const activations = await activatedEndpoints(document, root, hostStateRoot, registry);
716
+ const endpoints = await installedEndpointRegistry(document, activations);
717
+ let stores: Awaited<ReturnType<typeof openCredentialStores>> | undefined;
718
+ const openedStores = async () => stores ??= await openCredentialStores(document, root, hostStateRoot, registry);
719
+ const result: RuntimeHostCapabilityPricing[] = [];
720
+ try {
721
+ for (const request of requests) {
722
+ const base = {
723
+ request: request.request,
724
+ capability: structuredClone(request.capability),
725
+ };
726
+ const binding = document.bindings[capabilityKey(request.capability)];
727
+ const bound = binding === undefined ? {} : { binding };
728
+ const endpointRequest = {
729
+ capability: request.capability,
730
+ returns: request.returns,
731
+ constraints: request.constraints,
732
+ ...(request.pendingInputs === undefined ? {} : { pendingInputs: request.pendingInputs }),
733
+ };
734
+ const resolution = endpoints.resolve(endpointRequest);
735
+ if (resolution.status === "missing") {
736
+ result.push({
737
+ ...base,
738
+ status: "unresolved",
739
+ ...bound,
740
+ });
741
+ continue;
742
+ }
743
+ if (resolution.status === "unsupported") {
744
+ const endpoint = resolution.rejections.length === 1 ? resolution.rejections[0]!.endpointId : undefined;
745
+ const match = endpoint === undefined ? undefined
746
+ : activations.find(({ activation }) => activation.endpoint.instance.id === endpoint);
747
+ const pricing = match?.activation.endpoint.pricing;
748
+ result.push({
749
+ ...base,
750
+ status: "unsupported",
751
+ ...(endpoint === undefined ? {} : { endpoint }),
752
+ ...(match === undefined ? {} : { use: match.entry.use }),
753
+ ...(pricing === undefined ? {} : { pricing: structuredClone(pricing) }),
754
+ rejections: resolution.rejections.map((item) => ({ endpoint: item.endpointId, message: item.reason })),
755
+ ...bound,
756
+ });
757
+ continue;
758
+ }
759
+ if (resolution.status === "ambiguous") {
760
+ result.push({
761
+ ...base,
762
+ status: "ambiguous",
763
+ endpoints: resolution.endpointIds,
764
+ ...bound,
765
+ });
766
+ continue;
767
+ }
768
+ const match = activations.find(({ activation }) =>
769
+ activation.endpoint.instance.id === resolution.registration.id);
770
+ const pricing = match?.activation.endpoint.pricing;
771
+ const selected = {
772
+ ...base,
773
+ status: "resolved" as const,
774
+ endpoint: resolution.registration.id,
775
+ ...(match === undefined ? {} : { use: match.entry.use }),
776
+ ...(pricing === undefined ? {} : { pricing: structuredClone(pricing) }),
777
+ ...bound,
778
+ };
779
+ if (pricing?.kind === "local" || match?.activation.endpoint.readPricing === undefined) {
780
+ result.push(selected);
781
+ continue;
782
+ }
783
+ try {
784
+ const pricingDocuments = await match.activation.endpoint.readPricing({
785
+ request: endpointRequest,
786
+ credentials: async () => {
787
+ const opened = await openedStores();
788
+ return await resolveEndpointCredentials(match.activation.endpoint, opened.store, absolute);
789
+ },
790
+ });
791
+ pricingDocuments.forEach(verifyEndpointPricingDocument);
792
+ result.push({
793
+ ...selected,
794
+ ...(pricingDocuments.length === 0 ? {} : {
795
+ pricingDocuments: structuredClone(pricingDocuments),
796
+ }),
797
+ });
798
+ } catch (error) {
799
+ result.push({
800
+ ...selected,
801
+ pricingError: error instanceof Error ? error.message : String(error),
802
+ });
803
+ }
804
+ }
805
+ return result;
806
+ } finally {
807
+ await stores?.close();
808
+ }
809
+ }
810
+
811
+ /**
812
+ * Execute one immediate Need through the selected Profile, outside any Build.
813
+ *
814
+ * This is the creation-time boundary: the same Endpoint activation, capability resolution and
815
+ * credential resolution a Build uses, with no Build id, Worker, Result or stored state. The caller
816
+ * owns the ResourceStore, so whatever the Endpoint reads or returns stays in the caller's hands.
817
+ * Asynchronous capabilities are refused: slow paid generation goes through a Build.
818
+ */
819
+ export async function invokeRuntimeConfigNeed(
820
+ path: string,
821
+ need: Need,
822
+ resources: ResourceStore,
823
+ options: LoadRuntimeConfigOptions = {},
824
+ ): Promise<EndpointFulfillment> {
825
+ const { absolute, document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
826
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
827
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
828
+ await installRuntimeAdapters(registry, packageRoot, runtimePackageSelection(document), options.distributionPackageRoot);
829
+ const activations = await activatedEndpoints(document, root, hostStateRoot, registry);
830
+ const endpoints = await installedEndpointRegistry(document, activations);
831
+ const subject = capabilityKey(need.capability);
832
+ const resolution = endpoints.resolve(need);
833
+ if (resolution.status === "missing") {
834
+ throw new Error(resolution.endpointId === undefined
835
+ ? `No Endpoint in ${absolute} serves ${subject}; hypit plan --runtime ${absolute} shows which Endpoint each capability needs`
836
+ : `${absolute} binds ${subject} to ${resolution.endpointId}, which does not serve this request; change that binding`);
837
+ }
838
+ if (resolution.status === "unsupported") {
839
+ throw new Error(resolution.rejections
840
+ .map((rejection) => `${rejection.endpointId} rejected ${subject}: ${rejection.reason}`)
841
+ .join("; "));
842
+ }
843
+ if (resolution.status === "ambiguous") {
844
+ throw new Error(`Several Endpoints in ${absolute} serve ${subject}: ${resolution.endpointIds.join(", ")}. `
845
+ + `Say which one does it: add "bindings": { "${subject}": "<instance>" } to the Profile`);
846
+ }
847
+ const registration = resolution.registration;
848
+ if (registration.kind !== "immediate") {
849
+ throw new Error(`${subject} is an asynchronous capability; creation-time calls only use immediate capabilities, submit a Build for it`);
850
+ }
851
+ const activation = activations.find(({ activation: item }) => item.endpoint.instance.id === registration.id)?.activation;
852
+ if (activation === undefined) throw new Error(`Endpoint ${registration.id} is not declared by ${absolute}`);
853
+ const stores = await openCredentialStores(document, root, hostStateRoot, registry);
854
+ try {
855
+ const credentials = await resolveEndpointCredentials(activation.endpoint, stores.store, absolute);
856
+ return await registration.handler({
857
+ command: { kind: "fulfill-need", id: `command:${need.id}`, need },
858
+ need,
859
+ resources,
860
+ credentials,
861
+ });
862
+ } finally {
863
+ await stores.close();
864
+ }
865
+ }
866
+
867
+ function diagnostic(error: unknown, code: string, subject?: string): RuntimeDoctorDiagnostic {
868
+ return {
869
+ severity: "error",
870
+ code,
871
+ message: error instanceof Error ? error.message : String(error),
872
+ ...(subject === undefined ? {} : { subject }),
873
+ };
874
+ }
875
+
876
+ async function openCredentialStores(
877
+ document: LocalRuntimeProfile,
878
+ root: string,
879
+ hostStateRoot: string,
880
+ registry: RuntimeAdapterRegistry,
881
+ ): Promise<{ readonly store: CredentialStore; close(): Promise<void> }> {
882
+ const opened: RuntimeOpened<CredentialStore>[] = [];
883
+ try {
884
+ for (const item of document.credentials) {
885
+ opened.push(await registry.openCredentialStore(item.use, adapterContext(root, hostStateRoot, item)));
886
+ }
887
+ return {
888
+ store: new CompositeCredentialStore(opened.map((item) => item.value)),
889
+ close: async () => {
890
+ for (const item of [...opened].reverse()) await item.close?.();
891
+ },
892
+ };
893
+ } catch (error) {
894
+ for (const item of [...opened].reverse()) await item.close?.();
895
+ throw error;
896
+ }
897
+ }
898
+
899
+ function statePath(root: string): string {
900
+ return resolve(root, "runtime.sqlite");
901
+ }
902
+
903
+ function buildWorkPath(root: string, build: string): string {
904
+ assertBuildId(build);
905
+ const work = resolve(root, "work");
906
+ const target = resolve(work, build);
907
+ const relation = relative(work, target);
908
+ if (relation.length === 0 || relation === ".." || relation.startsWith(`..${sep}`)) {
909
+ throw new Error(`Build ${build} leaves Runtime work root ${work}`);
910
+ }
911
+ return target;
912
+ }
913
+
914
+ async function inspectRuntimeConfig(
915
+ path: string,
916
+ options: RuntimeInspectionOptions,
917
+ ): Promise<RuntimeConfigDoctorResult> {
918
+ const { absolute, document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
919
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
920
+ const diagnostics: RuntimeDoctorDiagnostic[] = [];
921
+ try {
922
+ if (!(await stat(root)).isDirectory()) throw new Error(`Runtime root ${root} is not a directory`);
923
+ } catch (error) {
924
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
925
+ return { dataRoot: root, diagnostics: [diagnostic(error, "RUNTIME_DATA_ROOT_INVALID", root)] };
926
+ }
927
+ }
928
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
929
+ try {
930
+ await installRuntimeAdapters(registry, packageRoot, runtimePackageSelection(document), options.distributionPackageRoot);
931
+ } catch (error) {
932
+ return { dataRoot: root, diagnostics: [diagnostic(error, "RUNTIME_PACKAGE_SELECTION_INVALID")] };
933
+ }
934
+ const storeSelections = [
935
+ ...document.credentials.map((item) => ({ item, kind: "credential-store" as const })),
936
+ ];
937
+ for (const selection of storeSelections) {
938
+ const context = adapterContext(root, hostStateRoot, selection.item);
939
+ try {
940
+ diagnostics.push(...registry.validate(selection.item.use, selection.kind, context));
941
+ if (options.active) {
942
+ diagnostics.push(...await registry.doctor(selection.item.use, selection.kind, context));
943
+ }
944
+ } catch (error) {
945
+ diagnostics.push(diagnostic(error, "RUNTIME_COMPONENT_CONFIG_INVALID", selection.item.instance));
946
+ }
947
+ }
948
+ const requested = options.capabilities === undefined
949
+ ? undefined
950
+ : new Set(options.capabilities.map(capabilityKey));
951
+ const covered = new Set<string>();
952
+ const activated: Array<{ readonly item: LocalRuntimeAdapterSelection; readonly activation: RuntimeEndpointActivation }> = [];
953
+ const selectedEndpoints: Array<{ readonly item: LocalRuntimeAdapterSelection; readonly activation: RuntimeEndpointActivation }> = [];
954
+ for (const item of document.endpoints) {
955
+ let activation: RuntimeEndpointActivation;
956
+ try {
957
+ activation = await registry.activateEndpoint(item.use, adapterContext(root, hostStateRoot, {
958
+ ...item,
959
+ pool: item.pool ?? item.instance,
960
+ }));
961
+ } catch (error) {
962
+ diagnostics.push(diagnostic(error, "RUNTIME_ENDPOINT_CONFIG_INVALID", item.instance));
963
+ continue;
964
+ }
965
+ activated.push({ item, activation });
966
+ if (requested !== undefined && !activation.endpoint.offers.some((offer) => requested.has(capabilityKey(offer.capability)))) continue;
967
+ for (const offer of activation.endpoint.offers) covered.add(capabilityKey(offer.capability));
968
+ selectedEndpoints.push({ item, activation });
969
+ const program = activation.program;
970
+ if (program === undefined) continue;
971
+ let state: ManagedProgramState;
972
+ try {
973
+ state = await program.probe();
974
+ } catch (error) {
975
+ diagnostics.push(diagnostic(error, "MANAGED_PROGRAM_PROBE_FAILED", program.id));
976
+ continue;
977
+ }
978
+ if (state.state !== "ready") {
979
+ diagnostics.push({
980
+ severity: "error",
981
+ code: state.state === "down" ? "MANAGED_PROGRAM_DOWN" : "MANAGED_PROGRAM_MISMATCH",
982
+ message: `${program.id} is not usable: ${state.detail}`,
983
+ subject: program.id,
984
+ });
985
+ }
986
+ }
987
+ for (const capability of options.capabilities ?? []) {
988
+ if (!covered.has(capabilityKey(capability))) diagnostics.push({
989
+ severity: "error",
990
+ code: "RUNTIME_CAPABILITY_UNBOUND",
991
+ message: `No usable Endpoint in this Runtime Profile fulfills ${capabilityKey(capability)}`,
992
+ subject: capabilityKey(capability),
993
+ });
994
+ }
995
+ // Who serves a capability that several selected Endpoints offer is the Profile's decision. An
996
+ // unbound contest is an error for a demanded capability and a warning otherwise; a binding to an
997
+ // Endpoint that does not offer the capability is always an error.
998
+ try {
999
+ const endpoints = await installedEndpointRegistry(document, activated.map(({ item, activation }) => ({ entry: item, activation })));
1000
+ for (const [key, instance] of Object.entries(document.bindings)) {
1001
+ const offered = activated.some(({ item, activation }) =>
1002
+ item.instance === instance && activation.endpoint.offers.some((offer) => capabilityKey(offer.capability) === key));
1003
+ if (!offered && activated.some(({ item }) => item.instance === instance)) diagnostics.push({
1004
+ severity: "error",
1005
+ code: "RUNTIME_BINDING_INVALID",
1006
+ message: `bindings names ${instance} for ${key}, but that Endpoint does not offer it`,
1007
+ subject: key,
1008
+ });
1009
+ }
1010
+ for (const conflict of endpoints.capacityConflicts()) {
1011
+ diagnostics.push({
1012
+ severity: "error",
1013
+ code: "RUNTIME_POOL_CONFLICT",
1014
+ message: `${conflict.endpointIds.join(", ")} share ${conflict.resource} but size it ${conflict.settings.join(" and ")}; use the same limit and period for this shared resource or different pools`,
1015
+ subject: conflict.resource,
1016
+ });
1017
+ }
1018
+ for (const contest of endpoints.contested()) {
1019
+ if (contest.bound !== undefined) continue;
1020
+ const key = capabilityKey(contest.capability);
1021
+ diagnostics.push({
1022
+ severity: requested !== undefined && requested.has(key) ? "error" : "warning",
1023
+ code: "RUNTIME_CAPABILITY_AMBIGUOUS",
1024
+ message: `${contest.endpointIds.join(", ")} all offer ${key}. Say which one does it: add "bindings": { "${key}": "<instance>" } to the Profile`,
1025
+ subject: key,
1026
+ });
1027
+ }
1028
+ } catch (error) {
1029
+ diagnostics.push(diagnostic(error, "RUNTIME_ENDPOINT_INSTALL_FAILED"));
1030
+ }
1031
+ if (selectedEndpoints.length > 0) {
1032
+ let stores: Awaited<ReturnType<typeof openCredentialStores>> | undefined;
1033
+ try {
1034
+ stores = await openCredentialStores(document, root, hostStateRoot, registry);
1035
+ for (const { item, activation } of selectedEndpoints) {
1036
+ const credentials: Record<string, CredentialValue> = {};
1037
+ let missing = false;
1038
+ for (const slot of activation.endpoint.credentials) {
1039
+ const value = await stores.store.resolve(slot.ref);
1040
+ if (value !== undefined) {
1041
+ credentials[slot.slot] = value;
1042
+ continue;
1043
+ }
1044
+ missing = true;
1045
+ diagnostics.push({
1046
+ severity: "error",
1047
+ code: "RUNTIME_CREDENTIAL_MISSING",
1048
+ message: `${slot.label} for Endpoint ${slot.endpoint} is not configured. ${
1049
+ slot.ref.store === "env"
1050
+ ? `Set ${slot.ref.key} in this process environment.`
1051
+ : `Configure it with: hypit auth login ${slot.endpoint} --runtime ${absolute}`}`,
1052
+ subject: `${slot.endpoint}.${slot.slot}`,
1053
+ });
1054
+ }
1055
+ if (!options.active || missing || activation.diagnose === undefined) continue;
1056
+ try {
1057
+ const capabilities = (options.capabilities ?? activation.endpoint.offers.map((offer) => offer.capability))
1058
+ .filter((capability) => activation.endpoint.offers
1059
+ .some((offer) => capabilityKey(offer.capability) === capabilityKey(capability)));
1060
+ diagnostics.push(...await activation.diagnose({
1061
+ credentials,
1062
+ capabilities,
1063
+ }));
1064
+ } catch (error) {
1065
+ diagnostics.push(diagnostic(error, "RUNTIME_ADAPTER_DOCTOR_FAILED", item.instance));
1066
+ }
1067
+ }
1068
+ } catch (error) {
1069
+ diagnostics.push(diagnostic(error, "RUNTIME_CREDENTIAL_CHECK_FAILED"));
1070
+ } finally {
1071
+ await stores?.close();
1072
+ }
1073
+ }
1074
+ return { dataRoot: root, diagnostics };
1075
+ }
1076
+
1077
+ /**
1078
+ * Cheap Build preflight. This intentionally stops at local configuration,
1079
+ * package, credential, executable and Managed Program readiness. Remote
1080
+ * connectivity belongs to doctor, and installation belongs to runtime up.
1081
+ */
1082
+ export async function preflightRuntimeConfig(
1083
+ path: string,
1084
+ options: LoadRuntimeConfigOptions & { readonly capabilities?: readonly CapabilityRef[] } = {},
1085
+ ): Promise<RuntimeConfigDoctorResult> {
1086
+ return await inspectRuntimeConfig(path, { ...options, active: false });
1087
+ }
1088
+
1089
+ /** Active diagnosis may ask selected credentials and Endpoints to verify their configured services. */
1090
+ export async function doctorRuntimeConfig(
1091
+ path: string,
1092
+ options: LoadRuntimeConfigOptions & { readonly capabilities?: readonly CapabilityRef[] } = {},
1093
+ ): Promise<RuntimeConfigDoctorResult> {
1094
+ return await inspectRuntimeConfig(path, { ...options, active: true });
1095
+ }
1096
+
1097
+ export async function createRuntimeFromConfig(
1098
+ path: string,
1099
+ options: LoadRuntimeConfigOptions = {},
1100
+ ): Promise<LocalRuntime> {
1101
+ const { document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
1102
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
1103
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
1104
+ const resultRegistry = options.resultRegistry ?? new BuildResultRepositoryRegistry();
1105
+ await installRuntimeAdapters(registry, packageRoot, runtimePackageSelection(document), options.distributionPackageRoot);
1106
+ const state = new SqliteRuntimeState(statePath(root));
1107
+ // Only selections that can change Command execution or an Operation handle are pinned until
1108
+ // every Build using them has left active Runtime state.
1109
+ const environmentConfig = canonicalStringify({
1110
+ credentials: document.credentials,
1111
+ endpoints: document.endpoints,
1112
+ bindings: document.bindings,
1113
+ });
1114
+ let credentials: Awaited<ReturnType<typeof openCredentialStores>> | undefined;
1115
+ try {
1116
+ await state.environment.use(environmentConfig);
1117
+ credentials = await openCredentialStores(document, root, hostStateRoot, registry);
1118
+ const endpoints = await Promise.all(document.endpoints.map(async (item) => await registry.createEndpoint(
1119
+ item.use,
1120
+ adapterContext(root, hostStateRoot, { ...item, pool: item.pool ?? item.instance }),
1121
+ )));
1122
+ return await createLocalRuntime({
1123
+ buildStore: state.builds,
1124
+ buildCatalog: state.catalog,
1125
+ operationStore: state.operations,
1126
+ commandExecutionStore: state.commandExecutions,
1127
+ assertEnvironment: async () => {
1128
+ await state.environment.assert(environmentConfig);
1129
+ },
1130
+ executionStore: state.execution,
1131
+ removeActiveBuild: async (build) => await state.removeActiveBuild(build),
1132
+ submissionStore: state.submissions,
1133
+ resourceStore: new FileResourceStore(resolve(root, "resources")),
1134
+ resourceStoreForBuild: (build) => new FileResourceStore(buildWorkPath(root, build)),
1135
+ clearBuildResources: async (build) => {
1136
+ await rm(buildWorkPath(root, build), { recursive: true, force: true });
1137
+ },
1138
+ openBuildResultRepository: async (location) => await openBuildResultLocation(location, options, packageRoot, resultRegistry),
1139
+ credentialStore: credentials.store,
1140
+ loadComponentPackages: async (specifiers) => {
1141
+ const loaded = await loadNodePackageSelection(specifiers, packageRoot, {
1142
+ ...(options.distributionPackageRoot === undefined
1143
+ ? {}
1144
+ : { fallbackRoots: [options.distributionPackageRoot] }),
1145
+ });
1146
+ return collectLoadedNodePackageComponents(loaded);
1147
+ },
1148
+ endpoints,
1149
+ bindings: document.bindings,
1150
+ close: async () => {
1151
+ await credentials?.close();
1152
+ state.close();
1153
+ },
1154
+ });
1155
+ } catch (error) {
1156
+ await credentials?.close();
1157
+ state.close();
1158
+ throw error;
1159
+ }
1160
+ }
1161
+
1162
+ export async function createRuntimeControlFromConfig(
1163
+ path: string,
1164
+ options: LoadRuntimeConfigOptions & { readonly readOnly?: boolean } = {},
1165
+ ): Promise<LocalRuntimeControl> {
1166
+ const { root } = await openRuntimeConfig(path, options.packageRoot);
1167
+ const state = new SqliteRuntimeState(statePath(root), { readOnly: options.readOnly === true });
1168
+ return createLocalRuntimeControl({
1169
+ buildStore: state.builds,
1170
+ buildCatalog: state.catalog,
1171
+ operationStore: state.operations,
1172
+ executionStore: state.execution,
1173
+ submissionStore: state.submissions,
1174
+ close: () => state.close(),
1175
+ });
1176
+ }
1177
+
1178
+ export async function createRuntimeResultControlFromConfig(
1179
+ path: string,
1180
+ options: LoadRuntimeConfigOptions = {},
1181
+ ): Promise<LocalResultWriter> {
1182
+ const { root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
1183
+ const state = new SqliteRuntimeState(statePath(root));
1184
+ const resultRegistry = options.resultRegistry ?? new BuildResultRepositoryRegistry();
1185
+ return createLocalResultWriter({
1186
+ buildStore: state.builds,
1187
+ operationStore: state.operations,
1188
+ commandExecutionStore: state.commandExecutions,
1189
+ executionStore: state.execution,
1190
+ removeActiveBuild: async (build) => await state.removeActiveBuild(build),
1191
+ submissionStore: state.submissions,
1192
+ resourceStore: new FileResourceStore(resolve(root, "resources")),
1193
+ resourceStoreForBuild: (build) => new FileResourceStore(buildWorkPath(root, build)),
1194
+ clearBuildResources: async (build) => {
1195
+ await rm(buildWorkPath(root, build), { recursive: true, force: true });
1196
+ },
1197
+ openBuildResultRepository: async (location) =>
1198
+ await openBuildResultLocation(location, options, packageRoot, resultRegistry),
1199
+ close: () => state.close(),
1200
+ });
1201
+ }
1202
+
1203
+ export async function createRuntimeCredentialsFromConfig(
1204
+ path: string,
1205
+ endpointInstance: string,
1206
+ options: LoadRuntimeConfigOptions = {},
1207
+ ): Promise<LocalCredentialControl> {
1208
+ const { document, root, packageRoot } = await openRuntimeConfig(path, options.packageRoot);
1209
+ const hostStateRoot = resolve(options.hostStateRoot ?? hypitHostStateRoot());
1210
+ const endpoint = document.endpoints.find((item) => item.instance === endpointInstance);
1211
+ if (endpoint === undefined) throw new Error(`Runtime Profile has no Endpoint instance ${endpointInstance}`);
1212
+ const registry = options.registry ?? new RuntimeAdapterRegistry();
1213
+ await installRuntimeAdapters(registry, packageRoot, runtimePackageSelection(document), options.distributionPackageRoot);
1214
+ const credentials = await openCredentialStores(document, root, hostStateRoot, registry);
1215
+ try {
1216
+ const endpointPackage = await registry.createEndpoint(endpoint.use, adapterContext(root, hostStateRoot, {
1217
+ ...endpoint,
1218
+ pool: endpoint.pool ?? endpoint.instance,
1219
+ }));
1220
+ return createLocalCredentialControl({
1221
+ credentialStore: credentials.store,
1222
+ endpoints: [endpointPackage],
1223
+ close: credentials.close,
1224
+ });
1225
+ } catch (error) {
1226
+ await credentials.close();
1227
+ throw error;
1228
+ }
1229
+ }