allyhub 0.2.0 → 0.4.0

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 (653) hide show
  1. package/dist/cli-version.js +2 -0
  2. package/dist/commands/add.js +5 -5
  3. package/dist/commands/auth.js +4 -4
  4. package/dist/commands/cloud-tools.js +9 -10
  5. package/dist/commands/dev.js +2 -2
  6. package/dist/commands/doctor.js +4 -4
  7. package/dist/commands/frames/piece.js +1 -1
  8. package/dist/commands/frames.js +6 -6
  9. package/dist/commands/index.js +1 -1
  10. package/dist/commands/inspect/contrast.js +1 -1
  11. package/dist/commands/inspect/layout.js +1 -1
  12. package/dist/commands/model.js +1 -1
  13. package/dist/commands/orgs.js +2 -2
  14. package/dist/commands/render.js +2 -2
  15. package/dist/commands/sheet.js +2 -2
  16. package/dist/commands/skills.js +3 -3
  17. package/dist/commands/slides.js +3 -0
  18. package/dist/main.js +7 -7
  19. package/dist/text/facts-text.js +5 -5
  20. package/dist/text/format.js +2 -2
  21. package/dist/works.js +1 -1
  22. package/editor-web/assets/browser-B31cR_c2.js +105 -0
  23. package/editor-web/assets/dist-6TNEuNMX.js +4 -0
  24. package/editor-web/assets/dist-Cm2TIjW5.js +2 -0
  25. package/editor-web/assets/dist-Cpt0p8bX.js +6 -0
  26. package/editor-web/assets/dist-D2GccKEJ.js +1 -0
  27. package/editor-web/assets/dist-Z0zvYXmu.js +233 -0
  28. package/editor-web/assets/dist-fs4ONrUV.js +32 -0
  29. package/editor-web/assets/index-CAcsAZ9u.js +70 -0
  30. package/editor-web/assets/index-DlcJckhO.css +2 -0
  31. package/editor-web/assets/list-D2v7U8K8.js +1 -0
  32. package/editor-web/assets/react-D0RmGe2w.js +101 -0
  33. package/editor-web/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  34. package/editor-web/assets/text-align-start-B3k2cx5f.js +1 -0
  35. package/editor-web/assets/undo-2-Ecr7-Obc.js +1 -0
  36. package/editor-web/index.html +4 -4
  37. package/node_modules/@allyhub-next/audio/package.json +1 -1
  38. package/node_modules/@allyhub-next/browser/package.json +1 -1
  39. package/node_modules/@allyhub-next/build/dist/data.js +1 -1
  40. package/node_modules/@allyhub-next/build/dist/meta-worker.d.ts +10 -0
  41. package/node_modules/@allyhub-next/build/dist/meta-worker.js +2 -2
  42. package/node_modules/@allyhub-next/build/dist/model-info.js +2 -1
  43. package/node_modules/@allyhub-next/build/dist/plugin.d.ts +2 -0
  44. package/node_modules/@allyhub-next/build/dist/plugin.js +9 -8
  45. package/node_modules/@allyhub-next/build/dist/prepare.d.ts +13 -1
  46. package/node_modules/@allyhub-next/build/dist/prepare.js +2 -2
  47. package/node_modules/@allyhub-next/build/dist/scan.d.ts +1 -1
  48. package/node_modules/@allyhub-next/build/dist/scan.js +1 -1
  49. package/node_modules/@allyhub-next/build/dist/types.js +3 -3
  50. package/node_modules/@allyhub-next/build/package.json +1 -1
  51. package/node_modules/@allyhub-next/check/dist/check.js +3 -3
  52. package/node_modules/@allyhub-next/check/dist/generated.d.ts +1 -1
  53. package/node_modules/@allyhub-next/check/package.json +1 -1
  54. package/node_modules/@allyhub-next/cloud/dist/index.js +1 -1
  55. package/node_modules/@allyhub-next/cloud/dist/signin.js +2 -2
  56. package/node_modules/@allyhub-next/cloud/dist/token.js +1 -1
  57. package/node_modules/@allyhub-next/cloud/package.json +1 -1
  58. package/node_modules/@allyhub-next/components/package.json +1 -1
  59. package/node_modules/@allyhub-next/dev-server/dist/card.d.ts +2 -11
  60. package/node_modules/@allyhub-next/dev-server/dist/card.js +1 -1
  61. package/node_modules/@allyhub-next/dev-server/dist/exports.d.ts +2 -2
  62. package/node_modules/@allyhub-next/dev-server/dist/exports.js +1 -1
  63. package/node_modules/@allyhub-next/dev-server/dist/index.d.ts +1 -1
  64. package/node_modules/@allyhub-next/dev-server/dist/index.js +1 -1
  65. package/node_modules/@allyhub-next/dev-server/dist/live.d.ts +3 -0
  66. package/node_modules/@allyhub-next/dev-server/dist/live.js +1 -1
  67. package/node_modules/@allyhub-next/dev-server/dist/project.d.ts +3 -0
  68. package/node_modules/@allyhub-next/dev-server/dist/project.js +1 -1
  69. package/node_modules/@allyhub-next/dev-server/dist/reveal.d.ts +6 -0
  70. package/node_modules/@allyhub-next/dev-server/dist/reveal.js +2 -0
  71. package/node_modules/@allyhub-next/dev-server/dist/server.js +1 -1
  72. package/node_modules/@allyhub-next/dev-server/dist/stage.d.ts +2 -0
  73. package/node_modules/@allyhub-next/dev-server/dist/stage.js +22 -2
  74. package/node_modules/@allyhub-next/dev-server/dist/tools.d.ts +2 -0
  75. package/node_modules/@allyhub-next/dev-server/dist/tools.js +1 -1
  76. package/node_modules/@allyhub-next/dev-server/package.json +1 -1
  77. package/node_modules/@allyhub-next/doc/dist/docx.d.ts +28 -0
  78. package/node_modules/@allyhub-next/doc/dist/docx.js +4 -0
  79. package/node_modules/@allyhub-next/doc/dist/html.d.ts +3 -0
  80. package/node_modules/@allyhub-next/doc/dist/html.js +1 -1
  81. package/node_modules/@allyhub-next/doc/package.json +5 -1
  82. package/node_modules/@allyhub-next/export/dist/deck-fonts.d.ts +24 -0
  83. package/node_modules/@allyhub-next/export/dist/deck-fonts.js +2 -0
  84. package/node_modules/@allyhub-next/export/dist/deck-pptx.d.ts +12 -0
  85. package/node_modules/@allyhub-next/export/dist/deck-pptx.js +2 -0
  86. package/node_modules/@allyhub-next/export/dist/export.d.ts +17 -5
  87. package/node_modules/@allyhub-next/export/dist/export.js +2 -2
  88. package/node_modules/@allyhub-next/export/dist/index.d.ts +1 -0
  89. package/node_modules/@allyhub-next/export/dist/index.js +1 -1
  90. package/node_modules/@allyhub-next/export/dist/names.d.ts +11 -6
  91. package/node_modules/@allyhub-next/export/dist/names.js +1 -1
  92. package/node_modules/@allyhub-next/export/package.json +1 -1
  93. package/node_modules/@allyhub-next/formats/dist/data/script.d.ts +22 -0
  94. package/node_modules/@allyhub-next/formats/dist/data/script.js +1 -1
  95. package/node_modules/@allyhub-next/formats/dist/data/slides.d.ts +1494 -0
  96. package/node_modules/@allyhub-next/formats/dist/data/slides.js +2 -0
  97. package/node_modules/@allyhub-next/formats/dist/index.d.ts +2 -0
  98. package/node_modules/@allyhub-next/formats/dist/index.js +1 -1
  99. package/node_modules/@allyhub-next/formats/dist/items.d.ts +26 -0
  100. package/node_modules/@allyhub-next/formats/dist/items.js +1 -1
  101. package/node_modules/@allyhub-next/formats/dist/layout.d.ts +2 -0
  102. package/node_modules/@allyhub-next/formats/dist/layout.js +1 -1
  103. package/node_modules/@allyhub-next/formats/dist/note-shape.d.ts +39 -0
  104. package/node_modules/@allyhub-next/formats/dist/note-shape.js +2 -0
  105. package/node_modules/@allyhub-next/formats/dist/schemas.d.ts +418 -0
  106. package/node_modules/@allyhub-next/formats/dist/schemas.js +1 -1
  107. package/node_modules/@allyhub-next/formats/package.json +1 -1
  108. package/node_modules/@allyhub-next/measure/dist/index.d.ts +1 -1
  109. package/node_modules/@allyhub-next/measure/dist/index.js +1 -1
  110. package/node_modules/@allyhub-next/measure/dist/overlay.d.ts +14 -1
  111. package/node_modules/@allyhub-next/measure/dist/overlay.js +1 -1
  112. package/node_modules/@allyhub-next/measure/package.json +1 -1
  113. package/node_modules/@allyhub-next/media/dist/asr/parakeet.d.ts +1 -4
  114. package/node_modules/@allyhub-next/media/dist/asr/parakeet.js +4 -4
  115. package/node_modules/@allyhub-next/media/dist/asr/transcribe.d.ts +1 -1
  116. package/node_modules/@allyhub-next/media/dist/asr/transcribe.js +1 -1
  117. package/node_modules/@allyhub-next/media/dist/grid.d.ts +3 -3
  118. package/node_modules/@allyhub-next/media/dist/grid.js +5 -5
  119. package/node_modules/@allyhub-next/media/dist/local.d.ts +3 -0
  120. package/node_modules/@allyhub-next/media/dist/local.js +1 -1
  121. package/node_modules/@allyhub-next/media/dist/ocr/tesseract.d.ts +8 -2
  122. package/node_modules/@allyhub-next/media/dist/ocr/tesseract.js +1 -1
  123. package/node_modules/@allyhub-next/media/dist/ocr/text.js +3 -3
  124. package/node_modules/@allyhub-next/media/dist/ocr/worker.js +1 -1
  125. package/node_modules/@allyhub-next/media/dist/sheet.js +3 -3
  126. package/node_modules/@allyhub-next/media/dist/tools.d.ts +11 -1
  127. package/node_modules/@allyhub-next/media/dist/tools.js +1 -1
  128. package/node_modules/@allyhub-next/media/dist/vision/faces.js +1 -1
  129. package/node_modules/@allyhub-next/media/dist/vision/matte.js +1 -1
  130. package/node_modules/@allyhub-next/media/dist/vision/runtime.d.ts +1 -1
  131. package/node_modules/@allyhub-next/media/dist/vision/runtime.js +2 -2
  132. package/node_modules/@allyhub-next/media/dist/worker-process.d.ts +1 -1
  133. package/node_modules/@allyhub-next/media/dist/worker-process.js +1 -1
  134. package/node_modules/@allyhub-next/media/package.json +1 -1
  135. package/node_modules/@allyhub-next/model/dist/build-job.d.ts +2 -0
  136. package/node_modules/@allyhub-next/model/dist/build-worker.js +1 -1
  137. package/node_modules/@allyhub-next/model/dist/build.d.ts +10 -0
  138. package/node_modules/@allyhub-next/model/dist/build.js +2 -1
  139. package/node_modules/@allyhub-next/model/dist/report.d.ts +1 -1
  140. package/node_modules/@allyhub-next/model/package.json +1 -1
  141. package/node_modules/@allyhub-next/project/dist/digest.d.ts +1 -3
  142. package/node_modules/@allyhub-next/project/dist/digest.js +1 -1
  143. package/node_modules/@allyhub-next/project/dist/page.d.ts +0 -5
  144. package/node_modules/@allyhub-next/project/dist/page.js +2 -2
  145. package/node_modules/@allyhub-next/project/dist/session.js +1 -1
  146. package/node_modules/@allyhub-next/project/package.json +1 -1
  147. package/node_modules/@allyhub-next/protocol/dist/app.d.ts +1 -62
  148. package/node_modules/@allyhub-next/protocol/dist/app.js +1 -1
  149. package/node_modules/@allyhub-next/protocol/dist/auth.d.ts +17 -17
  150. package/node_modules/@allyhub-next/protocol/dist/auth.js +1 -1
  151. package/node_modules/@allyhub-next/protocol/dist/cli.d.ts +1 -5
  152. package/node_modules/@allyhub-next/protocol/dist/cli.js +1 -1
  153. package/node_modules/@allyhub-next/protocol/dist/editor.d.ts +13 -26
  154. package/node_modules/@allyhub-next/protocol/dist/editor.js +1 -1
  155. package/node_modules/@allyhub-next/protocol/dist/index.d.ts +1 -0
  156. package/node_modules/@allyhub-next/protocol/dist/index.js +1 -1
  157. package/node_modules/@allyhub-next/protocol/dist/notes.d.ts +163 -0
  158. package/node_modules/@allyhub-next/protocol/dist/notes.js +2 -0
  159. package/node_modules/@allyhub-next/protocol/dist/registry.d.ts +4 -2
  160. package/node_modules/@allyhub-next/protocol/dist/registry.js +1 -1
  161. package/node_modules/@allyhub-next/protocol/dist/routes.js +1 -1
  162. package/node_modules/@allyhub-next/protocol/dist/runtimes.d.ts +3 -0
  163. package/node_modules/@allyhub-next/protocol/dist/runtimes.js +1 -1
  164. package/node_modules/@allyhub-next/protocol/dist/tools.d.ts +38 -0
  165. package/node_modules/@allyhub-next/protocol/dist/tools.js +1 -1
  166. package/node_modules/@allyhub-next/protocol/package.json +1 -1
  167. package/node_modules/@allyhub-next/registry/dist/registry.js +1 -1
  168. package/node_modules/@allyhub-next/registry/package.json +1 -1
  169. package/node_modules/@allyhub-next/render/dist/doc/index.d.ts +1 -1
  170. package/node_modules/@allyhub-next/render/dist/doc/index.js +1 -1
  171. package/node_modules/@allyhub-next/render/dist/doc/print.d.ts +11 -0
  172. package/node_modules/@allyhub-next/render/dist/doc/print.js +17 -1
  173. package/node_modules/@allyhub-next/render/dist/exports.d.ts +29 -4
  174. package/node_modules/@allyhub-next/render/dist/exports.js +2 -2
  175. package/node_modules/@allyhub-next/render/dist/page.d.ts +11 -1
  176. package/node_modules/@allyhub-next/render/dist/render.d.ts +2 -0
  177. package/node_modules/@allyhub-next/render/dist/render.js +2 -2
  178. package/node_modules/@allyhub-next/render/package.json +1 -1
  179. package/node_modules/@allyhub-next/runtime/LICENSE +241 -0
  180. package/node_modules/@allyhub-next/runtime/dist/bridge.d.ts +13 -3
  181. package/node_modules/@allyhub-next/runtime/dist/clock.js +1 -1
  182. package/node_modules/@allyhub-next/runtime/dist/env.js +1 -1
  183. package/node_modules/@allyhub-next/runtime/dist/facade.js +1 -1
  184. package/node_modules/@allyhub-next/runtime/dist/footage.js +1 -1
  185. package/node_modules/@allyhub-next/runtime/dist/frame.js +1 -1
  186. package/node_modules/@allyhub-next/runtime/dist/index.d.ts +2 -0
  187. package/node_modules/@allyhub-next/runtime/dist/index.js +1 -1
  188. package/node_modules/@allyhub-next/runtime/dist/locate.d.ts +11 -0
  189. package/node_modules/@allyhub-next/runtime/dist/locate.js +2 -0
  190. package/node_modules/@allyhub-next/runtime/dist/measure.d.ts +2 -1
  191. package/node_modules/@allyhub-next/runtime/dist/measure.js +1 -1
  192. package/node_modules/@allyhub-next/runtime/dist/music.js +1 -1
  193. package/node_modules/@allyhub-next/runtime/dist/output.js +1 -1
  194. package/node_modules/@allyhub-next/runtime/dist/piece.d.ts +5 -9
  195. package/node_modules/@allyhub-next/runtime/dist/piece.js +2 -2
  196. package/node_modules/@allyhub-next/runtime/dist/player/player.js +1 -1
  197. package/node_modules/@allyhub-next/runtime/dist/reads.d.ts +2 -0
  198. package/node_modules/@allyhub-next/runtime/dist/reads.js +1 -1
  199. package/node_modules/@allyhub-next/runtime/dist/sound.js +1 -1
  200. package/node_modules/@allyhub-next/runtime/dist/stage-kit.d.ts +12 -0
  201. package/node_modules/@allyhub-next/runtime/dist/stage-kit.js +2 -0
  202. package/node_modules/@allyhub-next/runtime/package.json +5 -6
  203. package/node_modules/@allyhub-next/runtimes/dist/errors.d.ts +5 -1
  204. package/node_modules/@allyhub-next/runtimes/dist/index.d.ts +1 -0
  205. package/node_modules/@allyhub-next/runtimes/dist/index.js +1 -1
  206. package/node_modules/@allyhub-next/runtimes/dist/node-program.d.ts +3 -0
  207. package/node_modules/@allyhub-next/runtimes/dist/node-program.js +2 -0
  208. package/node_modules/@allyhub-next/runtimes/dist/packages.d.ts +65 -0
  209. package/node_modules/@allyhub-next/runtimes/dist/packages.js +4 -0
  210. package/node_modules/@allyhub-next/runtimes/dist/runtimes.js +2 -2
  211. package/node_modules/@allyhub-next/runtimes/dist/unpack.d.ts +7 -0
  212. package/node_modules/@allyhub-next/runtimes/dist/unpack.js +1 -1
  213. package/node_modules/@allyhub-next/runtimes/package.json +5 -1
  214. package/node_modules/@allyhub-next/runtimes/pins/docx/package-lock.json +67 -0
  215. package/node_modules/@allyhub-next/runtimes/pins/docx/package.json +9 -0
  216. package/node_modules/@allyhub-next/runtimes/pins/exceljs/package-lock.json +2533 -0
  217. package/node_modules/@allyhub-next/runtimes/pins/exceljs/package.json +8 -0
  218. package/node_modules/@allyhub-next/runtimes/pins/gltf-tools/package-lock.json +753 -0
  219. package/node_modules/@allyhub-next/runtimes/pins/gltf-tools/package.json +14 -0
  220. package/node_modules/@allyhub-next/runtimes/pins/manifold-3d/package-lock.json +950 -0
  221. package/node_modules/@allyhub-next/runtimes/pins/manifold-3d/package.json +8 -0
  222. package/node_modules/@allyhub-next/runtimes/pins/onnxruntime-node/package-lock.json +227 -0
  223. package/node_modules/@allyhub-next/runtimes/pins/onnxruntime-node/package.json +8 -0
  224. package/node_modules/@allyhub-next/runtimes/pins/sherpa-onnx-node/package-lock.json +105 -0
  225. package/node_modules/@allyhub-next/runtimes/pins/sherpa-onnx-node/package.json +8 -0
  226. package/node_modules/@allyhub-next/runtimes/pins/tesseract.js/package-lock.json +128 -0
  227. package/node_modules/@allyhub-next/runtimes/pins/tesseract.js/package.json +9 -0
  228. package/node_modules/@allyhub-next/runtimes/schemas/runtimes.schema.json +5 -24
  229. package/node_modules/@allyhub-next/scaffold/dist/index.js +5 -5
  230. package/node_modules/@allyhub-next/scaffold/package.json +1 -1
  231. package/node_modules/@allyhub-next/scenery/package.json +1 -1
  232. package/node_modules/@allyhub-next/scenery-host/dist/bundle.d.ts +3 -2
  233. package/node_modules/@allyhub-next/scenery-host/dist/bundle.js +3 -3
  234. package/node_modules/@allyhub-next/scenery-host/dist/model-stage.d.ts +32 -0
  235. package/node_modules/@allyhub-next/scenery-host/dist/model-stage.js +3 -0
  236. package/node_modules/@allyhub-next/scenery-host/dist/viewer.d.ts +11 -0
  237. package/node_modules/@allyhub-next/scenery-host/dist/viewer.js +1 -1
  238. package/node_modules/@allyhub-next/scenery-host/package.json +1 -1
  239. package/node_modules/@allyhub-next/sheet/package.json +1 -1
  240. package/node_modules/@allyhub-next/site/dist/media.js +2 -2
  241. package/node_modules/@allyhub-next/site/package.json +1 -1
  242. package/node_modules/@allyhub-next/slides-core/LICENSE +241 -0
  243. package/node_modules/@allyhub-next/slides-core/dist/animation.d.ts +129 -0
  244. package/node_modules/@allyhub-next/slides-core/dist/animation.js +2 -0
  245. package/node_modules/@allyhub-next/slides-core/dist/api.d.ts +649 -0
  246. package/node_modules/@allyhub-next/slides-core/dist/api.js +4 -0
  247. package/node_modules/@allyhub-next/slides-core/dist/capabilities.d.ts +18 -0
  248. package/node_modules/@allyhub-next/slides-core/dist/capabilities.js +2 -0
  249. package/node_modules/@allyhub-next/slides-core/dist/chart-api.d.ts +165 -0
  250. package/node_modules/@allyhub-next/slides-core/dist/chart-api.js +2 -0
  251. package/node_modules/@allyhub-next/slides-core/dist/chart-file.d.ts +11 -0
  252. package/node_modules/@allyhub-next/slides-core/dist/chart-file.js +2 -0
  253. package/node_modules/@allyhub-next/slides-core/dist/chart.d.ts +184 -0
  254. package/node_modules/@allyhub-next/slides-core/dist/chart.js +2 -0
  255. package/node_modules/@allyhub-next/slides-core/dist/check.d.ts +7 -0
  256. package/node_modules/@allyhub-next/slides-core/dist/check.js +2 -0
  257. package/node_modules/@allyhub-next/slides-core/dist/enums.d.ts +146 -0
  258. package/node_modules/@allyhub-next/slides-core/dist/enums.js +2 -0
  259. package/node_modules/@allyhub-next/slides-core/dist/file.d.ts +109 -0
  260. package/node_modules/@allyhub-next/slides-core/dist/file.js +4 -0
  261. package/node_modules/@allyhub-next/slides-core/dist/index.d.ts +21 -0
  262. package/node_modules/@allyhub-next/slides-core/dist/index.js +2 -0
  263. package/node_modules/@allyhub-next/slides-core/dist/measure.d.ts +34 -0
  264. package/node_modules/@allyhub-next/slides-core/dist/measure.js +2 -0
  265. package/node_modules/@allyhub-next/slides-core/dist/model.d.ts +278 -0
  266. package/node_modules/@allyhub-next/slides-core/dist/model.js +2 -0
  267. package/node_modules/@allyhub-next/slides-core/dist/office.d.ts +58 -0
  268. package/node_modules/@allyhub-next/slides-core/dist/office.js +2 -0
  269. package/node_modules/@allyhub-next/slides-core/dist/path.d.ts +6 -0
  270. package/node_modules/@allyhub-next/slides-core/dist/path.js +2 -0
  271. package/node_modules/@allyhub-next/slides-core/dist/placeholders.d.ts +7 -0
  272. package/node_modules/@allyhub-next/slides-core/dist/placeholders.js +2 -0
  273. package/node_modules/@allyhub-next/slides-core/dist/resolve.d.ts +181 -0
  274. package/node_modules/@allyhub-next/slides-core/dist/resolve.js +2 -0
  275. package/node_modules/@allyhub-next/slides-core/dist/script.d.ts +43 -0
  276. package/node_modules/@allyhub-next/slides-core/dist/script.js +3 -0
  277. package/node_modules/@allyhub-next/slides-core/dist/stage.d.ts +63 -0
  278. package/node_modules/@allyhub-next/slides-core/dist/stage.js +2 -0
  279. package/node_modules/@allyhub-next/slides-core/dist/strict.d.ts +23 -0
  280. package/node_modules/@allyhub-next/slides-core/dist/strict.js +2 -0
  281. package/node_modules/@allyhub-next/slides-core/dist/theme.d.ts +72 -0
  282. package/node_modules/@allyhub-next/slides-core/dist/theme.js +2 -0
  283. package/node_modules/@allyhub-next/slides-core/dist/units.d.ts +35 -0
  284. package/node_modules/@allyhub-next/slides-core/dist/units.js +2 -0
  285. package/node_modules/@allyhub-next/slides-core/package.json +14 -0
  286. package/node_modules/@allyhub-next/slides-pptx/LICENSE +241 -0
  287. package/node_modules/@allyhub-next/slides-pptx/dist/charts.d.ts +6 -0
  288. package/node_modules/@allyhub-next/slides-pptx/dist/charts.js +2 -0
  289. package/node_modules/@allyhub-next/slides-pptx/dist/fonts.d.ts +45 -0
  290. package/node_modules/@allyhub-next/slides-pptx/dist/fonts.js +2 -0
  291. package/node_modules/@allyhub-next/slides-pptx/dist/import.d.ts +18 -0
  292. package/node_modules/@allyhub-next/slides-pptx/dist/import.js +3 -0
  293. package/node_modules/@allyhub-next/slides-pptx/dist/index.d.ts +5 -0
  294. package/node_modules/@allyhub-next/slides-pptx/dist/index.js +2 -0
  295. package/node_modules/@allyhub-next/slides-pptx/dist/read.d.ts +55 -0
  296. package/node_modules/@allyhub-next/slides-pptx/dist/read.js +4 -0
  297. package/node_modules/@allyhub-next/slides-pptx/dist/shapes.d.ts +67 -0
  298. package/node_modules/@allyhub-next/slides-pptx/dist/shapes.js +2 -0
  299. package/node_modules/@allyhub-next/slides-pptx/dist/text.d.ts +21 -0
  300. package/node_modules/@allyhub-next/slides-pptx/dist/text.js +2 -0
  301. package/node_modules/@allyhub-next/slides-pptx/dist/theme.d.ts +4 -0
  302. package/node_modules/@allyhub-next/slides-pptx/dist/theme.js +2 -0
  303. package/node_modules/@allyhub-next/slides-pptx/dist/timing.d.ts +32 -0
  304. package/node_modules/@allyhub-next/slides-pptx/dist/timing.js +2 -0
  305. package/node_modules/@allyhub-next/slides-pptx/dist/write.d.ts +32 -0
  306. package/node_modules/@allyhub-next/slides-pptx/dist/write.js +3 -0
  307. package/node_modules/@allyhub-next/slides-pptx/dist/xml.d.ts +26 -0
  308. package/node_modules/@allyhub-next/slides-pptx/dist/xml.js +3 -0
  309. package/node_modules/@allyhub-next/slides-pptx/package.json +14 -0
  310. package/node_modules/@allyhub-next/slides-runtime/LICENSE +241 -0
  311. package/node_modules/@allyhub-next/slides-runtime/dist/draw.d.ts +40 -0
  312. package/node_modules/@allyhub-next/slides-runtime/dist/draw.js +3 -0
  313. package/node_modules/@allyhub-next/slides-runtime/dist/edit.d.ts +4 -0
  314. package/node_modules/@allyhub-next/slides-runtime/dist/edit.js +2 -0
  315. package/node_modules/@allyhub-next/slides-runtime/dist/index.d.ts +4 -0
  316. package/node_modules/@allyhub-next/slides-runtime/dist/index.js +2 -0
  317. package/node_modules/@allyhub-next/slides-runtime/dist/ink.d.ts +10 -0
  318. package/node_modules/@allyhub-next/slides-runtime/dist/ink.js +2 -0
  319. package/node_modules/@allyhub-next/slides-runtime/dist/load.d.ts +6 -0
  320. package/node_modules/@allyhub-next/slides-runtime/dist/load.js +6 -0
  321. package/node_modules/@allyhub-next/slides-runtime/package.json +14 -0
  322. package/node_modules/@allyhub-next/stage/dist/graphics.js +1 -1
  323. package/node_modules/@allyhub-next/stage/dist/identity.js +1 -1
  324. package/node_modules/@allyhub-next/stage/dist/page.d.ts +9 -0
  325. package/node_modules/@allyhub-next/stage/dist/page.js +12 -2
  326. package/node_modules/@allyhub-next/stage/dist/server.js +1 -1
  327. package/node_modules/@allyhub-next/stage/package.json +1 -1
  328. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/400-italic.css +79 -0
  329. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/400.css +79 -0
  330. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/700-italic.css +79 -0
  331. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/700.css +79 -0
  332. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/LICENSE +93 -0
  333. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/arial.css +316 -0
  334. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-400-italic.woff2 +0 -0
  335. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-400-normal.woff2 +0 -0
  336. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-700-italic.woff2 +0 -0
  337. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-700-normal.woff2 +0 -0
  338. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-400-italic.woff2 +0 -0
  339. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-400-normal.woff2 +0 -0
  340. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-700-italic.woff2 +0 -0
  341. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-700-normal.woff2 +0 -0
  342. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-400-italic.woff2 +0 -0
  343. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-400-normal.woff2 +0 -0
  344. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-700-italic.woff2 +0 -0
  345. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-700-normal.woff2 +0 -0
  346. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-400-italic.woff2 +0 -0
  347. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-400-normal.woff2 +0 -0
  348. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-700-italic.woff2 +0 -0
  349. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-700-normal.woff2 +0 -0
  350. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-400-italic.woff2 +0 -0
  351. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-400-normal.woff2 +0 -0
  352. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-700-italic.woff2 +0 -0
  353. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-700-normal.woff2 +0 -0
  354. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-400-italic.woff2 +0 -0
  355. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-400-normal.woff2 +0 -0
  356. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-700-italic.woff2 +0 -0
  357. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-700-normal.woff2 +0 -0
  358. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-400-italic.woff2 +0 -0
  359. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-400-normal.woff2 +0 -0
  360. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-700-italic.woff2 +0 -0
  361. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-700-normal.woff2 +0 -0
  362. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-400-italic.woff2 +0 -0
  363. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-400-normal.woff2 +0 -0
  364. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-700-italic.woff2 +0 -0
  365. package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-700-normal.woff2 +0 -0
  366. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/400-italic.css +69 -0
  367. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/400.css +69 -0
  368. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/700-italic.css +69 -0
  369. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/700.css +69 -0
  370. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/LICENSE +93 -0
  371. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/calibri.css +276 -0
  372. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-400-italic.woff2 +0 -0
  373. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-400-normal.woff2 +0 -0
  374. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-700-italic.woff2 +0 -0
  375. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-700-normal.woff2 +0 -0
  376. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-400-italic.woff2 +0 -0
  377. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-400-normal.woff2 +0 -0
  378. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-700-italic.woff2 +0 -0
  379. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-700-normal.woff2 +0 -0
  380. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-400-italic.woff2 +0 -0
  381. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-400-normal.woff2 +0 -0
  382. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-700-italic.woff2 +0 -0
  383. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-700-normal.woff2 +0 -0
  384. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-400-italic.woff2 +0 -0
  385. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-400-normal.woff2 +0 -0
  386. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-700-italic.woff2 +0 -0
  387. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-700-normal.woff2 +0 -0
  388. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-400-italic.woff2 +0 -0
  389. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-400-normal.woff2 +0 -0
  390. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-700-italic.woff2 +0 -0
  391. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-700-normal.woff2 +0 -0
  392. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-400-italic.woff2 +0 -0
  393. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-400-normal.woff2 +0 -0
  394. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-700-italic.woff2 +0 -0
  395. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-700-normal.woff2 +0 -0
  396. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-400-italic.woff2 +0 -0
  397. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-400-normal.woff2 +0 -0
  398. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-700-italic.woff2 +0 -0
  399. package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-700-normal.woff2 +0 -0
  400. package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/400.css +1 -1
  401. package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/700.css +1 -1
  402. package/node_modules/@allyhub-next/stage-page/dist/fonts/noto-sans-sc/microsoft-yahei.css +2018 -0
  403. package/node_modules/@allyhub-next/stage-page/dist/host.js +21 -0
  404. package/node_modules/@allyhub-next/stage-page/dist/page.js +79 -0
  405. package/node_modules/@allyhub-next/stage-page/package.json +14 -0
  406. package/node_modules/@allyhub-next/video-core/dist/export.d.ts +6 -5
  407. package/node_modules/@allyhub-next/video-core/dist/export.js +1 -1
  408. package/node_modules/@allyhub-next/video-core/dist/fact.d.ts +173 -4
  409. package/node_modules/@allyhub-next/video-core/dist/fact.js +1 -1
  410. package/node_modules/@allyhub-next/video-core/dist/formats.d.ts +6 -13
  411. package/node_modules/@allyhub-next/video-core/dist/formats.js +1 -1
  412. package/node_modules/@allyhub-next/video-core/dist/index.d.ts +0 -1
  413. package/node_modules/@allyhub-next/video-core/dist/index.js +1 -1
  414. package/node_modules/@allyhub-next/video-core/dist/measure.d.ts +83 -0
  415. package/node_modules/@allyhub-next/video-core/dist/piece.d.ts +8 -9
  416. package/node_modules/@allyhub-next/video-core/dist/piece.js +1 -1
  417. package/node_modules/@allyhub-next/video-core/dist/problem.d.ts +9 -1
  418. package/node_modules/@allyhub-next/video-core/dist/problem.js +1 -1
  419. package/node_modules/@allyhub-next/video-core/dist/schema.d.ts +0 -2
  420. package/node_modules/@allyhub-next/video-core/dist/script-edit.d.ts +4 -0
  421. package/node_modules/@allyhub-next/video-core/dist/script.d.ts +8 -0
  422. package/node_modules/@allyhub-next/video-core/dist/script.js +1 -1
  423. package/node_modules/@allyhub-next/video-core/dist/timeline.d.ts +34 -1
  424. package/node_modules/@allyhub-next/video-core/package.json +1 -1
  425. package/package.json +48 -41
  426. package/dist/commands/mcp-app.js +0 -3
  427. package/dist/commands/mcp-docs.js +0 -2
  428. package/dist/commands/mcp.js +0 -2
  429. package/editor-app/view.html +0 -128
  430. package/editor-web/assets/chevron-left-D1vfOP5S.js +0 -1
  431. package/editor-web/assets/chevron-up-BMNXDEBs.js +0 -1
  432. package/editor-web/assets/dist-B4VKfY-H.js +0 -136
  433. package/editor-web/assets/dist-BIEloJVS.js +0 -8
  434. package/editor-web/assets/dist-BcInw4os.js +0 -232
  435. package/editor-web/assets/dist-Coblfc3T.js +0 -1
  436. package/editor-web/assets/floating-ui.react-dom-DSyn5TRd.js +0 -1
  437. package/editor-web/assets/index-BSFR4plz.css +0 -2
  438. package/editor-web/assets/index-Dc8FX_sp.js +0 -56
  439. package/editor-web/assets/react-Bo429Bov.js +0 -61
  440. package/editor-web/assets/undo-2-CWgOKQ3L.js +0 -1
  441. package/node_modules/@allyhub-next/runtime/dist/host.js +0 -21
  442. package/node_modules/@allyhub-next/runtime/dist/page.js +0 -72
  443. package/node_modules/@allyhub-next/runtime/dist/paged.d.ts +0 -16
  444. package/node_modules/@allyhub-next/runtime/dist/paged.js +0 -2
  445. package/node_modules/@allyhub-next/video-core/dist/slides.d.ts +0 -37
  446. package/node_modules/@allyhub-next/video-core/dist/slides.js +0 -2
  447. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-color-emoji/LICENSE +0 -0
  448. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-color-emoji/emoji.css +0 -0
  449. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-color-emoji/files/noto-color-emoji-emoji-400-normal.woff2 +0 -0
  450. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/LICENSE +0 -0
  451. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-100-400-normal.woff2 +0 -0
  452. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-100-700-normal.woff2 +0 -0
  453. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-101-400-normal.woff2 +0 -0
  454. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-101-700-normal.woff2 +0 -0
  455. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-102-400-normal.woff2 +0 -0
  456. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-102-700-normal.woff2 +0 -0
  457. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-103-400-normal.woff2 +0 -0
  458. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-103-700-normal.woff2 +0 -0
  459. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-104-400-normal.woff2 +0 -0
  460. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-104-700-normal.woff2 +0 -0
  461. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-105-400-normal.woff2 +0 -0
  462. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-105-700-normal.woff2 +0 -0
  463. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-106-400-normal.woff2 +0 -0
  464. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-106-700-normal.woff2 +0 -0
  465. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-107-400-normal.woff2 +0 -0
  466. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-107-700-normal.woff2 +0 -0
  467. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-108-400-normal.woff2 +0 -0
  468. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-108-700-normal.woff2 +0 -0
  469. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-109-400-normal.woff2 +0 -0
  470. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-109-700-normal.woff2 +0 -0
  471. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-110-400-normal.woff2 +0 -0
  472. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-110-700-normal.woff2 +0 -0
  473. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-111-400-normal.woff2 +0 -0
  474. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-111-700-normal.woff2 +0 -0
  475. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-112-400-normal.woff2 +0 -0
  476. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-112-700-normal.woff2 +0 -0
  477. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-113-400-normal.woff2 +0 -0
  478. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-113-700-normal.woff2 +0 -0
  479. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-114-400-normal.woff2 +0 -0
  480. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-114-700-normal.woff2 +0 -0
  481. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-115-400-normal.woff2 +0 -0
  482. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-115-700-normal.woff2 +0 -0
  483. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-116-400-normal.woff2 +0 -0
  484. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-116-700-normal.woff2 +0 -0
  485. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-117-400-normal.woff2 +0 -0
  486. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-117-700-normal.woff2 +0 -0
  487. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-118-400-normal.woff2 +0 -0
  488. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-118-700-normal.woff2 +0 -0
  489. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-119-400-normal.woff2 +0 -0
  490. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-119-700-normal.woff2 +0 -0
  491. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-21-400-normal.woff2 +0 -0
  492. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-21-700-normal.woff2 +0 -0
  493. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-22-400-normal.woff2 +0 -0
  494. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-22-700-normal.woff2 +0 -0
  495. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-23-400-normal.woff2 +0 -0
  496. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-23-700-normal.woff2 +0 -0
  497. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-24-400-normal.woff2 +0 -0
  498. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-24-700-normal.woff2 +0 -0
  499. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-25-400-normal.woff2 +0 -0
  500. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-25-700-normal.woff2 +0 -0
  501. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-26-400-normal.woff2 +0 -0
  502. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-26-700-normal.woff2 +0 -0
  503. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-27-400-normal.woff2 +0 -0
  504. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-27-700-normal.woff2 +0 -0
  505. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-28-400-normal.woff2 +0 -0
  506. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-28-700-normal.woff2 +0 -0
  507. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-29-400-normal.woff2 +0 -0
  508. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-29-700-normal.woff2 +0 -0
  509. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-30-400-normal.woff2 +0 -0
  510. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-30-700-normal.woff2 +0 -0
  511. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-31-400-normal.woff2 +0 -0
  512. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-31-700-normal.woff2 +0 -0
  513. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-32-400-normal.woff2 +0 -0
  514. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-32-700-normal.woff2 +0 -0
  515. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-33-400-normal.woff2 +0 -0
  516. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-33-700-normal.woff2 +0 -0
  517. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-34-400-normal.woff2 +0 -0
  518. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-34-700-normal.woff2 +0 -0
  519. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-35-400-normal.woff2 +0 -0
  520. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-35-700-normal.woff2 +0 -0
  521. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-36-400-normal.woff2 +0 -0
  522. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-36-700-normal.woff2 +0 -0
  523. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-37-400-normal.woff2 +0 -0
  524. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-37-700-normal.woff2 +0 -0
  525. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-38-400-normal.woff2 +0 -0
  526. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-38-700-normal.woff2 +0 -0
  527. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-39-400-normal.woff2 +0 -0
  528. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-39-700-normal.woff2 +0 -0
  529. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-4-400-normal.woff2 +0 -0
  530. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-4-700-normal.woff2 +0 -0
  531. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-40-400-normal.woff2 +0 -0
  532. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-40-700-normal.woff2 +0 -0
  533. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-41-400-normal.woff2 +0 -0
  534. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-41-700-normal.woff2 +0 -0
  535. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-42-400-normal.woff2 +0 -0
  536. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-42-700-normal.woff2 +0 -0
  537. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-43-400-normal.woff2 +0 -0
  538. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-43-700-normal.woff2 +0 -0
  539. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-44-400-normal.woff2 +0 -0
  540. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-44-700-normal.woff2 +0 -0
  541. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-45-400-normal.woff2 +0 -0
  542. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-45-700-normal.woff2 +0 -0
  543. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-46-400-normal.woff2 +0 -0
  544. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-46-700-normal.woff2 +0 -0
  545. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-47-400-normal.woff2 +0 -0
  546. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-47-700-normal.woff2 +0 -0
  547. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-48-400-normal.woff2 +0 -0
  548. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-48-700-normal.woff2 +0 -0
  549. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-49-400-normal.woff2 +0 -0
  550. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-49-700-normal.woff2 +0 -0
  551. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-5-400-normal.woff2 +0 -0
  552. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-5-700-normal.woff2 +0 -0
  553. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-50-400-normal.woff2 +0 -0
  554. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-50-700-normal.woff2 +0 -0
  555. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-51-400-normal.woff2 +0 -0
  556. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-51-700-normal.woff2 +0 -0
  557. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-52-400-normal.woff2 +0 -0
  558. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-52-700-normal.woff2 +0 -0
  559. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-53-400-normal.woff2 +0 -0
  560. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-53-700-normal.woff2 +0 -0
  561. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-54-400-normal.woff2 +0 -0
  562. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-54-700-normal.woff2 +0 -0
  563. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-55-400-normal.woff2 +0 -0
  564. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-55-700-normal.woff2 +0 -0
  565. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-56-400-normal.woff2 +0 -0
  566. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-56-700-normal.woff2 +0 -0
  567. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-57-400-normal.woff2 +0 -0
  568. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-57-700-normal.woff2 +0 -0
  569. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-58-400-normal.woff2 +0 -0
  570. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-58-700-normal.woff2 +0 -0
  571. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-59-400-normal.woff2 +0 -0
  572. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-59-700-normal.woff2 +0 -0
  573. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-6-400-normal.woff2 +0 -0
  574. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-6-700-normal.woff2 +0 -0
  575. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-60-400-normal.woff2 +0 -0
  576. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-60-700-normal.woff2 +0 -0
  577. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-61-400-normal.woff2 +0 -0
  578. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-61-700-normal.woff2 +0 -0
  579. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-62-400-normal.woff2 +0 -0
  580. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-62-700-normal.woff2 +0 -0
  581. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-63-400-normal.woff2 +0 -0
  582. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-63-700-normal.woff2 +0 -0
  583. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-64-400-normal.woff2 +0 -0
  584. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-64-700-normal.woff2 +0 -0
  585. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-65-400-normal.woff2 +0 -0
  586. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-65-700-normal.woff2 +0 -0
  587. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-66-400-normal.woff2 +0 -0
  588. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-66-700-normal.woff2 +0 -0
  589. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-67-400-normal.woff2 +0 -0
  590. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-67-700-normal.woff2 +0 -0
  591. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-68-400-normal.woff2 +0 -0
  592. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-68-700-normal.woff2 +0 -0
  593. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-69-400-normal.woff2 +0 -0
  594. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-69-700-normal.woff2 +0 -0
  595. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-70-400-normal.woff2 +0 -0
  596. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-70-700-normal.woff2 +0 -0
  597. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-71-400-normal.woff2 +0 -0
  598. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-71-700-normal.woff2 +0 -0
  599. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-72-400-normal.woff2 +0 -0
  600. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-72-700-normal.woff2 +0 -0
  601. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-73-400-normal.woff2 +0 -0
  602. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-73-700-normal.woff2 +0 -0
  603. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-74-400-normal.woff2 +0 -0
  604. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-74-700-normal.woff2 +0 -0
  605. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-75-400-normal.woff2 +0 -0
  606. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-75-700-normal.woff2 +0 -0
  607. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-76-400-normal.woff2 +0 -0
  608. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-76-700-normal.woff2 +0 -0
  609. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-77-400-normal.woff2 +0 -0
  610. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-77-700-normal.woff2 +0 -0
  611. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-78-400-normal.woff2 +0 -0
  612. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-78-700-normal.woff2 +0 -0
  613. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-79-400-normal.woff2 +0 -0
  614. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-79-700-normal.woff2 +0 -0
  615. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-80-400-normal.woff2 +0 -0
  616. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-80-700-normal.woff2 +0 -0
  617. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-81-400-normal.woff2 +0 -0
  618. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-81-700-normal.woff2 +0 -0
  619. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-82-400-normal.woff2 +0 -0
  620. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-82-700-normal.woff2 +0 -0
  621. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-83-400-normal.woff2 +0 -0
  622. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-83-700-normal.woff2 +0 -0
  623. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-84-400-normal.woff2 +0 -0
  624. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-84-700-normal.woff2 +0 -0
  625. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-85-400-normal.woff2 +0 -0
  626. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-85-700-normal.woff2 +0 -0
  627. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-86-400-normal.woff2 +0 -0
  628. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-86-700-normal.woff2 +0 -0
  629. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-87-400-normal.woff2 +0 -0
  630. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-87-700-normal.woff2 +0 -0
  631. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-88-400-normal.woff2 +0 -0
  632. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-88-700-normal.woff2 +0 -0
  633. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-89-400-normal.woff2 +0 -0
  634. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-89-700-normal.woff2 +0 -0
  635. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-90-400-normal.woff2 +0 -0
  636. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-90-700-normal.woff2 +0 -0
  637. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-91-400-normal.woff2 +0 -0
  638. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-91-700-normal.woff2 +0 -0
  639. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-97-400-normal.woff2 +0 -0
  640. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-97-700-normal.woff2 +0 -0
  641. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-98-400-normal.woff2 +0 -0
  642. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-98-700-normal.woff2 +0 -0
  643. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-99-400-normal.woff2 +0 -0
  644. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-99-700-normal.woff2 +0 -0
  645. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-cyrillic-400-normal.woff2 +0 -0
  646. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-cyrillic-700-normal.woff2 +0 -0
  647. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-400-normal.woff2 +0 -0
  648. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-700-normal.woff2 +0 -0
  649. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-ext-400-normal.woff2 +0 -0
  650. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-ext-700-normal.woff2 +0 -0
  651. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-vietnamese-400-normal.woff2 +0 -0
  652. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-vietnamese-700-normal.woff2 +0 -0
  653. /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/host.d.ts +0 -0
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{withHandles as H}from"@allyhub-next/video-core";import{captionTrack as M}from"./captions.js";import{timeFilm as R}from"./clock.js";import{compose as j,layerContexts as q}from"./compose.js";import{createEmbedder as z}from"./embed.js";import{createEnv as A}from"./env.js";import{facade as B}from"./facade.js";import{coverParts as G,createDrawer as I,newDrawState as J,withLayout as K}from"./frame.js";import{footagePlanner as N}from"./footage.js";import{measurer as O,textReader as Q}from"./measure.js";import{musicClock as U}from"./music.js";import{loadPaged as V}from"./paged.js";import{buildParts as W,pieceContext as X,resolvePiece as Y}from"./piece.js";import{Clips as Z}from"./player/clips.js";import{soundPlanner as _}from"./sound.js";import{createStage as $}from"./stage.js";import{findTakes as tt}from"./takes.js";import{timelineTransitions as ot,transitionStage as rt}from"./transitions.js";export async function load(v,l,y,C){const o=A(v,l,C),r=$(o,y),t=await Y(o),m=r.dress(t),w=X(o,t),g=await W(o,t,w),a=z(o,r,load);if(t.isPaged)return V({env:o,piece:t,stage:r,background:m,specs:g,embedder:a});const n=await tt(o,t,g,a),P=U(o,t),e=R(o,t,n,P),S=P.plan(e);e.checkLimit();const c=M(n,e,t.fps),p=J(),x=q(o,t,a,p,e),h=Q(o,t,r,s=>K(p,s)),d=N(o,t,c,r.cssColor),f=_(o,t),{parts:b,mounted:i,clips:T}=j({env:o,piece:t,stage:r,takes:n,film:e,captions:c,footage:d,sound:f,contexts:x,texts:h}),u=ot(t,r,e.windows,n.specs,s=>i.find(F=>F.n===s)?.part,m),D=f.audio(S,i.map(s=>s.spec)),E=await G(t,w),L=new Z(l.purpose==="play"?H(T,b,u,t.fps):[],t.fps),k=I({env:o,piece:t,stage:r,mounted:i,transitions:u,transitionStage:rt(t,r),duration:e.duration,clips:L,contexts:x,covers:E,state:p});return B({env:o,piece:t,stage:r,mounted:i,parts:b,takes:n,captions:c,footage:d,cues:f.cues(),audio:D,transitions:u,duration:e.duration,words:s=>e.timing.words(s),timingProblems:e.timing.problems,background:m,embedder:a,drawer:k,measurer:O({piece:t,stage:r,drawer:k,mounted:i,duration:e.duration,captions:c,footage:d}),notes:new Map})}
2
+ import{withHandles as H}from"@allyhub-next/video-core";import{captionTrack as M}from"./captions.js";import{timeFilm as R}from"./clock.js";import{compose as j,layerContexts as q}from"./compose.js";import{createEmbedder as z}from"./embed.js";import{createEnv as A}from"./env.js";import{facade as B}from"./facade.js";import{coverParts as G,createDrawer as I,newDrawState as J,withLayout as K}from"./frame.js";import{footagePlanner as N}from"./footage.js";import{measurer as O,textReader as Q}from"./measure.js";import{musicClock as U}from"./music.js";import{buildParts as V,pieceContext as W,resolvePiece as X}from"./piece.js";import{Clips as Y}from"./player/clips.js";import{soundPlanner as Z}from"./sound.js";import{createStage as _}from"./stage.js";import{findTakes as $}from"./takes.js";import{timelineTransitions as tt,transitionStage as ot}from"./transitions.js";export async function load(k,u,v,y){const o=A(k,u,y),s=_(o,v),t=await X(o),l=s.dress(t),w=W(o,t),c=z(o,s,load),C=await V(o,t,w),n=await $(o,t,C,c),g=U(o,t),r=R(o,t,n,g),S=g.plan(r);r.checkLimit();const a=M(n,r,t.fps),m=J(),x=q(o,t,c,m,r),h=Q(o,t,s,e=>K(m,e)),p=N(o,t,a,s.cssColor),d=Z(o,t),{parts:P,mounted:i,clips:T}=j({env:o,piece:t,stage:s,takes:n,film:r,captions:a,footage:p,sound:d,contexts:x,texts:h}),f=tt(t,s,r.windows,n.specs,e=>i.find(F=>F.n===e)?.part,l),D=d.audio(S,i.map(e=>e.spec)),E=await G(t,w),L=new Y(u.purpose==="play"?H(T,P,f,t.fps):[],t.fps),b=I({env:o,piece:t,stage:s,mounted:i,transitions:f,transitionStage:ot(t,s),duration:r.duration,clips:L,contexts:x,covers:E,state:m});return B({env:o,piece:t,stage:s,mounted:i,parts:P,takes:n,captions:a,footage:p,cues:d.cues(),audio:D,transitions:f,duration:r.duration,words:e=>r.timing.words(e),timingProblems:r.timing.problems,background:l,embedder:c,drawer:b,measurer:O({piece:t,stage:s,drawer:b,mounted:i,duration:r.duration,captions:a,footage:p}),notes:new Map})}
@@ -1,22 +1,14 @@
1
- import { type Format, type Look, type PagedOptions, type PartDefaults, type PartSpec, type PieceContext, type PieceDefinition, type SizeInfo, type VideoOptions } from "@allyhub-next/video-core";
1
+ import { type Format, type Look, type PartDefaults, type PartSpec, type PieceContext, type PieceDefinition, type SizeInfo, type VideoOptions } from "@allyhub-next/video-core";
2
2
  import type { Env } from "./env.js";
3
3
  export interface ResolvedPiece {
4
4
  readonly def: PieceDefinition;
5
- readonly kind: "video" | "paged";
6
- readonly isPaged: boolean;
7
- /** A video's options; a deck's are in `paged`. */
8
5
  readonly options: VideoOptions;
9
- readonly paged: PagedOptions;
10
6
  readonly fps: number;
11
7
  readonly format: Format;
12
8
  /** Its pixels, orientation and safe zone: its format as the piece gives it. */
13
9
  readonly dims: SizeInfo;
14
10
  /** The prefix of its message keys: its id with `/` as `.`. */
15
11
  readonly prefix: string;
16
- /** The prefix of a deck's speaker notes. */
17
- readonly notesPrefix: string;
18
- /** What its parts are called in messages: "part" or "page". */
19
- readonly unit: "part" | "page";
20
12
  readonly look: Look;
21
13
  /** Part defaults: the output's over the project's over PART_DEFAULTS. */
22
14
  readonly defaults: Required<PartDefaults>;
@@ -28,7 +20,11 @@ export interface ResolvedPiece {
28
20
  readonly seekLimitMs: number;
29
21
  /** The longest loading may take, ms (AK-P002). */
30
22
  readonly loadLimitMs: number;
23
+ /** A deck's video items by folder, which its bundle imports for slides.yaml (`DECK_VIDEOS`). */
24
+ readonly videos: Readonly<Record<string, PieceDefinition>>;
31
25
  }
26
+ /** The export of a deck's module that holds the video items its slides.yaml shows, by folder. */
27
+ export declare const DECK_VIDEOS = "__allyhubVideos";
32
28
  /** Imports the piece and resolves its output; its parts are built by buildParts. */
33
29
  export declare function resolvePiece(env: Env): Promise<ResolvedPiece>;
34
30
  /** What every output's build function receives. */
@@ -1,3 +1,3 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{CLEAN_LOOK as g,FPS as b,formatEntry as L,formatInfo as x,isFormat as _,isLayerSpec as P,isPartSpec as S,isPieceDefinition as I,isSpeechSpec as A,LOAD_LIMIT as E,messagePrefix as T,outputOf as w,partDefaults as D,parseFps as K,presetInfo as O,problem as v,SEEK_LIMIT as F}from"@allyhub-next/video-core";import{consoleAtAsync as y}from"./console.js";import{LoadFailure as f}from"./errors.js";function j(l){return Promise.all(l.map(t=>new Promise(s=>{const o=document.createElement("link");o.rel="stylesheet",o.href=t,o.onload=()=>{s()},o.onerror=()=>{s()},document.head.append(o)})))}async function M(l){const{source:t,embed:s,ledger:o}=l;let n=s?.def;if(!s){let a;try{await j(t.styles??[]),a=await o.timed("importing the piece's module",()=>y({phase:"module"},()=>import(t.module)))}catch(e){const i=e instanceof Error?e:new Error(String(e));throw new f("load_failed",`Failed to load the piece module: ${i.message}
3
- ${i.stack??""}`)}n=a.default}if(!I(n))throw new f("no_content",`The default export of ${t.file} is not a video({ … }) or slides({ … }).`);return n}export async function resolvePiece(l){const{source:t,log:s}=l,o=await M(l),n=w(o),a=o.written?.file,e=a!==void 0&&a!==""?a:t.file;e!==t.file&&s.relativeTo(e);const i=n.kind;if(i!=="video"&&i!=="paged")throw new f("bad_output",`${t.piece} is ${i}; load() only loads video and paged.`);const r=n.kind==="paged",c=n.kind==="paged"?{}:n.options,p=n.kind==="paged"?n.options:{},d=K(c.fps)??b;if(!_(t.format))throw new f("bad_format",`${t.piece} is not rendered in ${t.format}: it is not a format.`);const u=t.format,m=L(o.format===void 0?[]:[o.format],u)??u,k=x(m)??O("16x9"),h=T(t.piece),$=(r?p.look:c.look)??"clean";return{def:o,kind:r?"paged":"video",isPaged:r,options:c,paged:p,fps:d,format:u,dims:k,prefix:h,notesPrefix:p.prefix??h,unit:r?"page":"part",look:t.looks?.[$]??g,defaults:D(t.partDefaults,c.defaults?.part),writtenIn:e,musicBase:o.written?.paths?.music?.[1]??e.split("/").slice(0,-1).join("/"),seekLimitMs:(c.seekLimit??p.seekLimit??F)*1e3,loadLimitMs:(c.loadLimit??p.loadLimit??E)*1e3}}export function pieceContext(l,t){const{log:s,combo:o,space:n}=l,a=Object.assign((e,i)=>s.s(e,i),{list:(e,i)=>s.list(e,i),with:(e,i,r)=>s.with(e,i,r)});return{combo:o,pool:e=>{const i=n?.slots[e]?.find(r=>r.name===o[e]);if(i?.file===void 0)throw new f("bad_pool",`ctx.pool("${e}"): ${e} is not a pool slot of this piece${n?` (pool slots: ${Object.entries(n.slots).filter(([,r])=>r.some(c=>c.file!==void 0)).map(([r])=>r).join(", ")||"none"})`:""}. Declare it as matrix.slots.${e} = { pool: "./folder" }.`);return`/${i.file}`},s:a,asset:e=>s.asset(e),data:e=>s.readData(e),look:t.look}}export async function buildParts(l,t,s){const{source:o,ledger:n}=l,{unit:a}=t,e=w(t.def),i=await y({phase:"build"},()=>Promise.resolve(e.build(s)));if(!Array.isArray(i)||i.length===0)throw new f("no_parts",`The function of output ${l.output} returned no ${a}s (AK-K003).`);const r=[],c=new Set;for(const[p,d]of i.entries()){if(!S(d))throw new f("bad_part",`Item ${String(p+1)} is not a ${a} made by part({ key, layers }).`);const u=d.layers.findIndex(m=>!P(m));if(u>=0)throw new f("bad_part",`Layer ${String(u+1)} of ${a} ${d.key} is not a layer made by footage(), a component or custom().`);if(d.speech!==void 0&&!A(d.speech))throw new f("bad_part",`The speech of ${a} ${d.key} is not made by take() or say().`);if(c.has(d.key)){n.problems.push(v("AK-K001",`The ${a} key "${d.key}" is used twice. Every ${a} in an output needs its own key.`,{part:d.key,where:{file:o.file}}));continue}c.add(d.key),r.push(d)}return r}
2
+ import{CLEAN_LOOK as b,FPS as _,formatEntry as g,formatInfo as L,isVideoFormat as x,isLayerSpec as S,isPartSpec as E,isPieceDefinition as h,isSpeechSpec as I,LOAD_LIMIT as P,messagePrefix as A,outputOf as w,partDefaults as D,parseFps as O,presetInfo as v,problem as K,SEEK_LIMIT as T}from"@allyhub-next/video-core";import{consoleAtAsync as y}from"./console.js";import{LoadFailure as l}from"./errors.js";export const DECK_VIDEOS="__allyhubVideos";function j(d){return Promise.all(d.map(o=>new Promise(r=>{const n=document.createElement("link");n.rel="stylesheet",n.href=o,n.onload=()=>{r()},n.onerror=()=>{r()},document.head.append(n)})))}async function F(d){const{source:o,embed:r,ledger:n}=d;let f=r?.def;const c={};if(!r){let e;try{await j(o.styles??[]),e=await n.timed("importing the piece's module",()=>y({phase:"module"},()=>import(o.module)))}catch(i){const s=i instanceof Error?i:new Error(String(i));throw new l("load_failed",`Failed to load the piece module: ${s.message}
3
+ ${s.stack??""}`)}f=e.default;const t=e[DECK_VIDEOS];if(typeof t=="object"&&t!==null)for(const[i,s]of Object.entries(t))h(s)&&(c[i]=s)}if(!h(f))throw new l("no_content",`The default export of ${o.file} is not a video({ … }).`);return{def:f,videos:c}}export async function resolvePiece(d){const{source:o,log:r}=d,{def:n,videos:f}=await F(d),c=w(n),e=n.written?.file,t=e!==void 0&&e!==""?e:o.file;t!==o.file&&r.relativeTo(t);const i=c.kind;if(i!=="video")throw new l("bad_output",`${o.piece} is ${i}; load() loads a video (a deck is the deck's runtime's).`);const s=c.options,u=O(s.fps)??_;if(!x(o.format))throw new l("bad_format",`${o.piece} is not rendered in ${o.format}: it is not a format.`);const a=o.format,p=g(n.format===void 0?[]:[n.format],a)??a,m=L(p)??v("16x9"),k=A(o.piece),$=s.look??"clean";return{def:n,options:s,fps:u,format:a,dims:m,prefix:k,look:o.looks?.[$]??b,defaults:D(o.partDefaults,s.defaults?.part),writtenIn:t,musicBase:n.written?.paths?.music?.[1]??t.split("/").slice(0,-1).join("/"),seekLimitMs:(s.seekLimit??T)*1e3,loadLimitMs:(s.loadLimit??P)*1e3,videos:f}}export function pieceContext(d,o){const{log:r,combo:n,space:f}=d,c=Object.assign((e,t)=>r.s(e,t),{list:(e,t)=>r.list(e,t),with:(e,t,i)=>r.with(e,t,i)});return{combo:n,pool:e=>{const t=f?.slots[e]?.find(i=>i.name===n[e]);if(t?.file===void 0)throw new l("bad_pool",`ctx.pool("${e}"): ${e} is not a pool slot of this piece${f?` (pool slots: ${Object.entries(f.slots).filter(([,i])=>i.some(s=>s.file!==void 0)).map(([i])=>i).join(", ")||"none"})`:""}. Declare it as matrix.slots.${e} = { pool: "./folder" }.`);return`/${t.file}`},s:c,asset:e=>r.asset(e),data:e=>r.readData(e),look:o.look}}export async function buildParts(d,o,r){const{source:n,ledger:f}=d,c="part",e=w(o.def),t=await y({phase:"build"},()=>Promise.resolve(e.build(r)));if(!Array.isArray(t)||t.length===0)throw new l("no_parts",`The function of output ${d.output} returned no ${c}s (AK-K003).`);const i=[],s=new Set;for(const[u,a]of t.entries()){if(!E(a))throw new l("bad_part",`Item ${String(u+1)} is not a ${c} made by part({ key, layers }).`);const p=a.layers.findIndex(m=>!S(m));if(p>=0)throw new l("bad_part",`Layer ${String(p+1)} of ${c} ${a.key} is not a layer made by footage(), a component or custom().`);if(a.speech!==void 0&&!I(a.speech))throw new l("bad_part",`The speech of ${c} ${a.key} is not made by take() or say().`);if(s.has(a.key)){f.problems.push(K("AK-K001",`The ${c} key "${a.key}" is used twice. Every ${c} in an output needs its own key.`,{part:a.key,where:{file:n.file}}));continue}s.add(a.key),i.push(a)}return i}
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{decodeKey as Q,decodings as Ne,MASTER_DEFAULTS as Re,previewMaster as Oe,renderMix as Be}from"@allyhub-next/audio";import{subtitleCues as De}from"@allyhub-next/video-core";import{realNow as F,realRaf as $e}from"../guards.js";import{mixPlan as Ue}from"../mix-plan.js";const re=o=>`${String(Math.floor(o/60))}:${String(Math.floor(o%60)).padStart(2,"0")}`;export async function startPlayer(o){const{output:k,stage:d}=o,s=k.timeline,v=s.fps,B=s.duration,$=B-1/v,i=new AudioContext,V=o.media??{},Me=o.seed??"",Y=Ue(s,V,{seed:Me}),ee=async e=>{if(e)try{const t=await fetch(e);return t.ok?await i.decodeAudioData(await t.arrayBuffer()):void 0}catch{return}},Ce=(e,t)=>{const n=V[e]?.denoisedUrl,a=[...t.denoise?[`db=${t.denoise.toFixed(2)}`]:[],...t.speed===void 0?[]:[`speed=${t.speed.toFixed(6)}`],...t.filter===void 0?[]:[`filter=${encodeURIComponent(t.filter)}`]];return n===void 0||a.length===0?void 0:`${n}?${a.join("&")}`},te=new Map,D=new Map,ne=[],le=Ne(Y);for(const{file:e,how:t}of le){const n=Ce(e,t);if(n){const a=await ee(`${n}&wait=0`);a?D.set(Q(e,t),a):ne.push({key:Q(e,t),url:n})}}for(const{file:e,how:t}of le)te.has(e)||D.has(Q(e,t))||te.set(e,await ee(V[e]?.url));const ce=e=>{const t=e.getChannelData(0);return[t,e.numberOfChannels>1?e.getChannelData(1):t]},Se=(e,t)=>{const n=D.get(Q(e,t));if(n)return{src:ce(n),made:t};const a=te.get(e);return a?{src:ce(a),made:{}}:void 0},Ae=s.audio.master??{...Re};let M;const de=()=>{const e=Oe(Be(Y,Se,i.sampleRate),i.sampleRate,Ae);if(!e){M=void 0;return}const[t,n]=e,a=i.createBuffer(2,Math.max(1,t.length),i.sampleRate);a.getChannelData(0).set(t),a.getChannelData(1).set(n),M=a};de();const C=De({lines:k.lines(),fps:s.fps},k.captionOptions()??void 0);let r=!1,h=Math.min(Math.max(o.start??s.parts[0]?.still??0,0),$),y=0,U=0,I=0,L=0,K=[],se=[],S=!1,H={ctx:0,real:0};const u=()=>r?S?y+(i.currentTime-U):y+(F()-I)/1e3:h,Ee=()=>{if(!S)return;const e=F();if(i.currentTime!==H.ctx)H={ctx:i.currentTime,real:e};else if(e-H.real>300){const t=u();S=!1,y=t,I=e}},ue=o.chrome!==!1,N="#141210",A="#ece6da",Te="#a39a8b",pe='ui-monospace,"SF Mono",Menlo,monospace';document.documentElement.style.background=N,document.body.style.cssText=`margin:0;background:${N};overflow:hidden;font:13px/1 system-ui,-apple-system,"PingFang SC","Noto Sans SC",sans-serif;color:${A}`;const p=document.createElement("div");p.style.cssText=`position:fixed;left:0;right:0;top:0;bottom:${ue?"48px":"0"};overflow:hidden;cursor:pointer`,d.parentElement?.insertBefore(p,d),p.append(d),d.style.position="absolute",d.style.transformOrigin="0 0";const R=document.createElement("div");R.style.cssText=`position:fixed;left:0;right:0;bottom:0;height:48px;display:flex;align-items:center;gap:12px;padding:0 10px;background:${N};border-top:1px solid #2a2622`;const E=document.createElement("button");E.style.cssText=`width:32px;height:32px;border:0;border-radius:4px;background:${A};color:${N};cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none`,E.setAttribute("aria-label","play");const l=document.createElement("input");l.type="range",l.min="0",l.max=String(Math.round(B*v)),l.step="1",l.style.cssText=`flex:1;min-width:0;accent-color:${A};cursor:pointer`;const ae=document.createElement("span");ae.style.cssText=`font:12px/1 ${pe};font-variant-numeric:tabular-nums;min-width:86px;text-align:right;color:${Te}`;const fe=`height:28px;padding:0 9px;border:1px solid #3a352e;border-radius:4px;background:transparent;color:${A};font:12px/1 ${pe};cursor:pointer;flex:none`,x=document.createElement("button");x.textContent="CC",x.style.cssText=fe,x.setAttribute("aria-label","captions"),x.setAttribute("aria-pressed","false");const f=document.createElement("button");f.textContent="Pages",f.style.cssText=fe,f.setAttribute("aria-label","page by page"),f.setAttribute("aria-pressed","false"),R.setAttribute("role","toolbar"),l.setAttribute("aria-label","seek"),R.append(E,l,ae,f),C.length&&R.append(x),ue&&document.body.append(R);const Pe=()=>{const e=Math.min(p.clientWidth/s.width,p.clientHeight/s.height);d.style.transform=`scale(${String(e)})`,d.style.left=`${String((p.clientWidth-s.width*e)/2)}px`,d.style.top=`${String((p.clientHeight-s.height*e)/2)}px`},W=s.width,j=s.height,q=Math.min(W,j)/1080,T=document.createElement("div");T.style.cssText=`position:absolute;left:0;top:0;width:${String(W)}px;height:${String(j)}px;transform-origin:0 0;pointer-events:none`;const g=document.createElement("div");g.setAttribute("role","status"),g.setAttribute("aria-live","polite"),g.style.cssText=`position:absolute;left:50%;transform:translateX(-50%);bottom:${String((j>W?.2:.08)*j)}px;max-width:${String(W*.84)}px;padding:${String(10*q)}px ${String(22*q)}px;border-radius:${String(12*q)}px;background:rgba(0,0,0,.66);color:#fff;font:600 ${String(44*q)}px/1.3 system-ui,-apple-system,"PingFang SC","Noto Sans SC",sans-serif;text-align:center;display:none`,T.append(g),p.append(T);let w=!1;const ge=e=>{const t=w?C.find(n=>e>=n.start&&e<n.end):void 0;t?(g.textContent!==t.text&&(g.textContent=t.text),g.style.display="block"):g.style.display="none"},me=()=>{Pe(),T.style.transform=d.style.transform,T.style.left=d.style.left,T.style.top=d.style.top};new ResizeObserver(me).observe(p),me();let m=k.kind==="paged"?"page":"play",c=0,b;const z=e=>Math.max(0,s.parts.findIndex(t=>e>=t.start&&e<t.end));m==="page"&&(c=z(h),f.setAttribute("aria-pressed","true"),f.textContent="Play all");let ie=-1,he=0,ye=0;const Fe=e=>s.parts.find(t=>e>=t.start&&e<t.end)?.key,G=async(e,t=!1)=>{const n=Math.min(Math.floor(e*v+1e-9),Math.round($*v));(n!==ie||t)&&(ie=n,await k.seek(n/v),l.value=String(n),l.setAttribute("aria-valuetext",re(e)),ae.textContent=`${re(e)} / ${re(B)}`),ge(e);const a=F();(t||a-ye>250)&&(ye=a,o.post?.({type:"time",t:e,part:Fe(e),playing:r,mode:m}))},xe={play:'<svg width="12" height="14" viewBox="0 0 12 14" aria-hidden="true"><path d="M1 1.2v11.6a.6.6 0 0 0 .9.5l9.6-5.8a.6.6 0 0 0 0-1L1.9.7a.6.6 0 0 0-.9.5Z" fill="currentColor"/></svg>',pause:'<svg width="12" height="14" viewBox="0 0 12 14" aria-hidden="true"><rect x="1" y="1" width="3.5" height="12" rx=".6" fill="currentColor"/><rect x="7.5" y="1" width="3.5" height="12" rx=".6" fill="currentColor"/></svg>'},oe=()=>{E.innerHTML=r?xe.pause:xe.play,E.setAttribute("aria-label",r?"pause":"play")},be=()=>{for(const e of K)try{e.stop()}catch{}K=[];for(const e of se)e.disconnect();se=[]},Le=e=>U+Math.max(0,e-y);function ve(){if(!M||y>=M.duration)return;const e=i.createGain();e.connect(i.destination),se.push(e);const t=i.createBufferSource();t.buffer=M,t.connect(e),K.push(t),t.start(Le(y),y)}function P(e=u()){L++,r=!1,k.setPlaying(!1),h=Math.min(Math.max(e,0),$),be(),oe(),G(h,!0)}async function we(){const e=++L;if(h>=$&&(h=0),await i.resume().catch(()=>{}),e!==L)return;y=h,U=i.currentTime+.05,I=F()+50,S=M!==void 0&&i.state==="running",!S&&C.length&&!Z&&_(!0),H={ctx:i.currentTime,real:F()},r=!0,k.setPlaying(!0),oe(),ve();const t=()=>{if(he++,!r||e!==L)return;Ee();const n=u();if(n>=$){P($);return}if(b!==void 0&&n>=b){const a=s.parts[c]?.still??b;b=void 0,P(a);return}G(n),$e(t)};$e(t)}function X(e){const t=r;b=void 0,P(e),t&&we()}let Z=!1;function _(e){w=e&&C.length>0,x.setAttribute("aria-pressed",String(w)),x.style.background=w?A:"transparent",x.style.color=w?N:A,ge(u())}function ke(e){m=e,f.setAttribute("aria-pressed",String(e==="page")),f.textContent=e==="page"?"Play all":"Pages",b=void 0,e==="page"?O(z(u())):G(u(),!0)}function O(e){c=Math.min(Math.max(e,0),s.parts.length-1),b=void 0,P(s.parts[c]?.still??0)}function J(){if(r){b=void 0,P();return}if(m==="page"){const e=s.parts[c];e&&(h=e.start,b=e.end-1/v)}we()}return E.addEventListener("click",e=>{e.stopPropagation(),J()}),p.addEventListener("click",J),l.addEventListener("input",()=>{X(Number(l.value)/v),m==="page"&&(c=z(Number(l.value)/v))}),x.addEventListener("click",e=>{e.stopPropagation(),Z=!0,_(!w)}),f.addEventListener("click",e=>{e.stopPropagation(),ke(m==="page"?"play":"page")}),addEventListener("keydown",e=>{if(!(e.metaKey||e.ctrlKey||e.altKey)){if(e.key===" "||e.key==="k")J();else if(e.key==="ArrowRight")m==="page"?O(c+1):X(u()+5);else if(e.key==="ArrowLeft")m==="page"?O(c-1):X(u()-5);else if(e.key==="c"&&C.length)Z=!0,_(!w);else if(e.key==="f")document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(()=>{});else return;e.preventDefault()}}),oe(),await G(h,!0),o.post?.({type:"ready",duration:B,parts:s.parts}),ne.length>0&&(o.post?.({type:"sound",denoising:!0}),Promise.all(ne.map(async({key:e,url:t})=>{const n=await ee(t);if(!n||(D.set(e,n),de(),!r))return;const a=u();be(),y=a,U=i.currentTime,I=F(),ve()})).then(()=>{o.post?.({type:"sound",denoising:!1})})),{command(e){e.type==="play"?r||J():e.type==="pause"?P():e.type==="seek"&&Number.isFinite(e.t)?(X(e.t),m==="page"&&(c=z(e.t))):e.type==="mode"?ke(e.mode):e.type==="next"?O(c+1):e.type==="prev"?O(c-1):e.type==="captions"&&(Z=!0,_(e.on))},now:u,state:()=>({playing:r,audioClock:S,audio:i.state,t:u(),frame:ie,ticks:he,generation:L,sounds:K.length,sfx:Y.sfx.length,mode:m,page:c,captions:w,caption:g.style.display==="none"?"":g.textContent,cues:C.length})}}
2
+ import{decodeKey as J,decodings as Ne,MASTER_DEFAULTS as Re,previewMaster as Oe,renderMix as Be}from"@allyhub-next/audio";import{subtitleCues as De}from"@allyhub-next/video-core";import{realNow as F,realRaf as $e}from"../guards.js";import{mixPlan as Ue}from"../mix-plan.js";const le=r=>`${String(Math.floor(r/60))}:${String(Math.floor(r%60)).padStart(2,"0")}`;export async function startPlayer(r){const{output:k,stage:d}=r,s=k.timeline,y=s.fps,B=s.duration,$=B-1/y,a=new AudioContext,Q=r.media??{},Me=r.seed??"",V=Ue(s,Q,{seed:Me}),Y=async e=>{if(e)try{const t=await fetch(e);return t.ok?await a.decodeAudioData(await t.arrayBuffer()):void 0}catch{return}},Ce=(e,t)=>{const n=Q[e]?.denoisedUrl,i=[...t.denoise?[`db=${t.denoise.toFixed(2)}`]:[],...t.speed===void 0?[]:[`speed=${t.speed.toFixed(6)}`],...t.filter===void 0?[]:[`filter=${encodeURIComponent(t.filter)}`]];return n===void 0||i.length===0?void 0:`${n}?${i.join("&")}`},ee=new Map,D=new Map,te=[],ce=Ne(V);for(const{file:e,how:t}of ce){const n=Ce(e,t);if(n){const i=await Y(`${n}&wait=0`);i?D.set(J(e,t),i):te.push({key:J(e,t),url:n})}}for(const{file:e,how:t}of ce)ee.has(e)||D.has(J(e,t))||ee.set(e,await Y(Q[e]?.url));const de=e=>{const t=e.getChannelData(0);return[t,e.numberOfChannels>1?e.getChannelData(1):t]},Se=(e,t)=>{const n=D.get(J(e,t));if(n)return{src:de(n),made:t};const i=ee.get(e);return i?{src:de(i),made:{}}:void 0},Ae=s.audio.master??{...Re};let M;const ue=()=>{const e=Oe(Be(V,Se,a.sampleRate),a.sampleRate,Ae);if(!e){M=void 0;return}const[t,n]=e,i=a.createBuffer(2,Math.max(1,t.length),a.sampleRate);i.getChannelData(0).set(t),i.getChannelData(1).set(n),M=i};ue();const C=De({lines:k.lines(),fps:s.fps},k.captionOptions()??void 0);let l=!1,x=Math.min(Math.max(r.start??s.parts[0]?.still??0,0),$),b=0,U=0,I=0,L=0,K=[],ne=[],S=!1,H={ctx:0,real:0};const u=()=>l?S?b+(a.currentTime-U):b+(F()-I)/1e3:x,Ee=()=>{if(!S)return;const e=F();if(a.currentTime!==H.ctx)H={ctx:a.currentTime,real:e};else if(e-H.real>300){const t=u();S=!1,b=t,I=e}},pe=r.chrome!==!1,N="#141210",A="#ece6da",Te="#a39a8b",fe='ui-monospace,"SF Mono",Menlo,monospace';document.documentElement.style.background=N,document.body.style.cssText=`margin:0;background:${N};overflow:hidden;font:13px/1 system-ui,-apple-system,"PingFang SC","Noto Sans SC",sans-serif;color:${A}`;const f=document.createElement("div");f.style.cssText=`position:fixed;left:0;right:0;top:0;bottom:${pe?"48px":"0"};overflow:hidden;cursor:pointer`,d.parentElement?.insertBefore(f,d),f.append(d),d.style.position="absolute",d.style.transformOrigin="0 0";const R=document.createElement("div");R.style.cssText=`position:fixed;left:0;right:0;bottom:0;height:48px;display:flex;align-items:center;gap:12px;padding:0 10px;background:${N};border-top:1px solid #2a2622`;const E=document.createElement("button");E.style.cssText=`width:32px;height:32px;border:0;border-radius:4px;background:${A};color:${N};cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none`,E.setAttribute("aria-label","play");const c=document.createElement("input");c.type="range",c.min="0",c.max=String(Math.round(B*y)),c.step="1",c.style.cssText=`flex:1;min-width:0;accent-color:${A};cursor:pointer`;const se=document.createElement("span");se.style.cssText=`font:12px/1 ${fe};font-variant-numeric:tabular-nums;min-width:86px;text-align:right;color:${Te}`;const ge=`height:28px;padding:0 9px;border:1px solid #3a352e;border-radius:4px;background:transparent;color:${A};font:12px/1 ${fe};cursor:pointer;flex:none`,v=document.createElement("button");v.textContent="CC",v.style.cssText=ge,v.setAttribute("aria-label","captions"),v.setAttribute("aria-pressed","false");const g=document.createElement("button");g.textContent="Pages",g.style.cssText=ge,g.setAttribute("aria-label","page by page"),g.setAttribute("aria-pressed","false"),R.setAttribute("role","toolbar"),c.setAttribute("aria-label","seek"),R.append(E,c,se,g),C.length&&R.append(v),pe&&document.body.append(R);const Pe=()=>{const e=Math.min(f.clientWidth/s.width,f.clientHeight/s.height);d.style.transform=`scale(${String(e)})`,d.style.left=`${String((f.clientWidth-s.width*e)/2)}px`,d.style.top=`${String((f.clientHeight-s.height*e)/2)}px`},W=s.width,j=s.height,q=Math.min(W,j)/1080,T=document.createElement("div");T.style.cssText=`position:absolute;left:0;top:0;width:${String(W)}px;height:${String(j)}px;transform-origin:0 0;pointer-events:none`;const m=document.createElement("div");m.setAttribute("role","status"),m.setAttribute("aria-live","polite"),m.style.cssText=`position:absolute;left:50%;transform:translateX(-50%);bottom:${String((j>W?.2:.08)*j)}px;max-width:${String(W*.84)}px;padding:${String(10*q)}px ${String(22*q)}px;border-radius:${String(12*q)}px;background:rgba(0,0,0,.66);color:#fff;font:600 ${String(44*q)}px/1.3 system-ui,-apple-system,"PingFang SC","Noto Sans SC",sans-serif;text-align:center;display:none`,T.append(m),f.append(T);let w=!1;const me=e=>{const t=w?C.find(n=>e>=n.start&&e<n.end):void 0;t?(m.textContent!==t.text&&(m.textContent=t.text),m.style.display="block"):m.style.display="none"},he=()=>{Pe(),T.style.transform=d.style.transform,T.style.left=d.style.left,T.style.top=d.style.top};new ResizeObserver(he).observe(f),he();let p=k.kind==="slides"?"page":"play",o=0,h;const z=e=>Math.max(0,s.parts.findIndex(t=>e>=t.start&&e<t.end));p==="page"&&(o=z(x),g.setAttribute("aria-pressed","true"),g.textContent="Play all");let ie=-1,ye=0,xe=0;const Fe=e=>s.parts.find(t=>e>=t.start&&e<t.end)?.key,G=async(e,t=!1)=>{const n=Math.min(Math.floor(e*y+1e-9),Math.round($*y));(n!==ie||t)&&(ie=n,await k.seek(n/y),c.value=String(n),c.setAttribute("aria-valuetext",le(e)),se.textContent=`${le(e)} / ${le(B)}`),me(e);const i=F();(t||i-xe>250)&&(xe=i,r.post?.({type:"time",t:e,part:Fe(e),playing:l,mode:p}))},be={play:'<svg width="12" height="14" viewBox="0 0 12 14" aria-hidden="true"><path d="M1 1.2v11.6a.6.6 0 0 0 .9.5l9.6-5.8a.6.6 0 0 0 0-1L1.9.7a.6.6 0 0 0-.9.5Z" fill="currentColor"/></svg>',pause:'<svg width="12" height="14" viewBox="0 0 12 14" aria-hidden="true"><rect x="1" y="1" width="3.5" height="12" rx=".6" fill="currentColor"/><rect x="7.5" y="1" width="3.5" height="12" rx=".6" fill="currentColor"/></svg>'},ae=()=>{E.innerHTML=l?be.pause:be.play,E.setAttribute("aria-label",l?"pause":"play")},ve=()=>{for(const e of K)try{e.stop()}catch{}K=[];for(const e of ne)e.disconnect();ne=[]},Le=e=>U+Math.max(0,e-b);function we(){if(!M||b>=M.duration)return;const e=a.createGain();e.connect(a.destination),ne.push(e);const t=a.createBufferSource();t.buffer=M,t.connect(e),K.push(t),t.start(Le(b),b)}function P(e=u()){L++,l=!1,k.setPlaying(!1),x=Math.min(Math.max(e,0),$),ve(),ae(),G(x,!0)}async function oe(){const e=++L;if(x>=$&&(x=0),await a.resume().catch(()=>{}),e!==L)return;b=x,U=a.currentTime+.05,I=F()+50,S=M!==void 0&&a.state==="running",!S&&C.length&&!Z&&_(!0),H={ctx:a.currentTime,real:F()},l=!0,k.setPlaying(!0),ae(),we();const t=()=>{if(ye++,!l||e!==L)return;Ee();const n=u();if(n>=$){P($);return}if(h!==void 0&&n>=h){const i=s.parts[o]?.still??h;h=void 0,P(i);return}G(n),$e(t)};$e(t)}function X(e){const t=l;h=void 0,P(e),t&&oe()}let Z=!1;function _(e){w=e&&C.length>0,v.setAttribute("aria-pressed",String(w)),v.style.background=w?A:"transparent",v.style.color=w?N:A,me(u())}function ke(e){p=e,g.setAttribute("aria-pressed",String(e==="page")),g.textContent=e==="page"?"Play all":"Pages",h=void 0,e==="page"?O(z(u())):G(u(),!0)}function O(e){o=Math.min(Math.max(e,0),s.parts.length-1),h=void 0,P(s.parts[o]?.still??0)}function re(){if(l){h=void 0,P();return}if(p==="page"){const e=s.parts[o];e&&(x=e.start,h=e.end-1/y)}oe()}return E.addEventListener("click",e=>{e.stopPropagation(),re()}),f.addEventListener("click",re),c.addEventListener("input",()=>{X(Number(c.value)/y),p==="page"&&(o=z(Number(c.value)/y))}),v.addEventListener("click",e=>{e.stopPropagation(),Z=!0,_(!w)}),g.addEventListener("click",e=>{e.stopPropagation(),ke(p==="page"?"play":"page")}),addEventListener("keydown",e=>{if(!(e.metaKey||e.ctrlKey||e.altKey)){if(e.key===" "||e.key==="k")re();else if(e.key==="ArrowRight")p==="page"?O(o+1):X(u()+5);else if(e.key==="ArrowLeft")p==="page"?O(o-1):X(u()-5);else if(e.key==="c"&&C.length)Z=!0,_(!w);else if(e.key==="f")document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(()=>{});else return;e.preventDefault()}}),ae(),await G(x,!0),r.post?.({type:"ready",duration:B,parts:s.parts}),te.length>0&&(r.post?.({type:"sound",denoising:!0}),Promise.all(te.map(async({key:e,url:t})=>{const n=await Y(t);if(!n||(D.set(e,n),ue(),!l))return;const i=u();ve(),b=i,U=a.currentTime,I=F(),we()})).then(()=>{r.post?.({type:"sound",denoising:!1})})),{command(e){if(e.type==="play"){if(!l){if(p==="page"){const t=s.parts[o];t&&(h=t.end-1/y)}oe()}}else e.type==="pause"?P():e.type==="seek"&&Number.isFinite(e.t)?(X(e.t),p==="page"&&(o=z(e.t))):e.type==="mode"?ke(e.mode):e.type==="next"?O(o+1):e.type==="prev"?O(o-1):e.type==="captions"&&(Z=!0,_(e.on))},now:u,state:()=>({playing:l,audioClock:S,audio:a.state,t:u(),frame:ie,ticks:ye,generation:L,sounds:K.length,sfx:V.sfx.length,mode:p,page:o,captions:w,caption:m.style.display==="none"?"":m.textContent,cues:C.length})}}
@@ -63,6 +63,8 @@ export declare class ReadLog {
63
63
  } | undefined;
64
64
  /** s.list(prefix): numbered keys under the prefix, in order. */
65
65
  list(prefix: string, hint?: MessageHint): MessageTree[];
66
+ /** The keys under a prefix (`<prefix>.…`), in either language, without recording a read. */
67
+ keysUnder(prefix: string): string[];
66
68
  /** The raw value of a key without recording a read. */
67
69
  peek(key: string): MessageValue | undefined;
68
70
  /** Marks a key as read (e.g. a page's "<prefix>.<page>.notes"). */
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{pathIn as g,asUrlString as d,displayOf as c,fillMessage as l,lineAnchors as m,messageList as A,problem as h,repoPath as u,speakOf as w,textsOf as p,hasMarks as k,withoutMarks as O}from"@allyhub-next/video-core";import{TEXT_DIR as v}from"@allyhub-next/formats";const $="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",b=3;export class ReadLog{messages=new Map;media=new Map;data=new Map;keyByText=new Map;missingReads=new Set;missingMedia=new Set;problems=[];texts=new Set;tap;opts;fileOf;constructor(t){this.opts=t,this.fileOf=e=>`${t.text??v}/${e??"en"}.json`}value(t){const{own:e,fallback:i,lang:s,defaultLang:n}=this.opts;return Object.hasOwn(e,t)?{value:e[t],fellBack:!1}:Object.hasOwn(i,t)?{value:i[t],fellBack:s!==n}:{value:void 0,fellBack:!1}}record(t,e,i){if(this.messages.has(t))return;const{value:s,fellBack:n}=this.value(t);this.messages.set(t,{key:t,kind:e,fallback:n,...i?{hint:i}:{}}),e!=="list"&&s===void 0&&this.problems.push(h("AK-S001",`The code reads ${t}, but the default language ${this.opts.defaultLang??"(no messages)"} does not have it. Add it to ${this.fileOf(this.opts.defaultLang)}.`,{where:{file:this.fileOf(this.opts.defaultLang)}}))}locale(t){return Object.hasOwn(this.opts.own,t)?this.opts.lang:this.opts.defaultLang}text(t,e,i){this.record(t,"text",e);const{value:s}=this.value(t);this.tap?.(`m:${t}`,JSON.stringify(s??null));for(const n of p(s))this.texts.add(n);return c(s,i,this.locale(t))??""}s(t,e){const i=this.text(t,e,{});return i&&this.keyByText.set(i,{key:t,inputs:{}}),i}with(t,e,i){const s=l(this.text(t,i,e),e);return this.texts.add(s),s&&this.keyByText.set(s,{key:t,inputs:e}),s}spokenOf(t){const e=this.keyByText.get(t);if(!e)return;const i=w(this.value(e.key).value,e.inputs,this.locale(e.key)),s=(Object.hasOwn(this.opts.own,e.key)?this.opts.anchors?.own:this.opts.anchors?.fallback)?.[e.key];return{key:e.key,speak:i===void 0?t:l(i,e.inputs),...s&&i!==void 0?{anchors:m(i,s,n=>l(n,e.inputs))}:{}}}list(t,e){const i=[],s=new Set([...Object.keys(this.opts.own),...Object.keys(this.opts.fallback)]),n=A(a=>c(this.value(a).value,{},this.locale(a)),s,t,i);this.record(t,"list",e),i.length===0&&this.problems.push(h("AK-S001",`The code reads the list ${t}, but the default language has no keys like ${t}.0, ${t}.1. Add them to ${this.fileOf(this.opts.defaultLang)}.`,{where:{file:this.fileOf(this.opts.defaultLang)}}));for(const a of i)this.text(a,void 0,{});return n}peek(t){return this.value(t).value}touch(t){const{value:e,fellBack:i}=this.value(t);return this.tap?.(`m:${t}`,JSON.stringify(e??null)),e!==void 0&&!this.messages.has(t)&&this.messages.set(t,{key:t,kind:"text",fallback:i}),e}mediaAt(t){const e=this.opts.media[t];return e&&this.media.set(t,d(e)),this.tap?.(`f:${t}`,e?.sha256??""),e}missing(t){this.missingReads.add(t)}report(t){this.problems.some(e=>e.code===t.code&&e.message===t.message)||this.problems.push(t)}relativeTo(t){this.base=t}base;get pathBase(){return this.base??this.opts.file}baseOf(t){return t===void 0?this.pathBase:t===""?"the project's root":t}resolve(t,e){return e===void 0?u(this.pathBase,t):g(e,t)}asset(t,e){const i=this.baseOf(e),s=this.resolve(t,e),n=s===void 0?void 0:this.mediaAt(s);if(n)return n;const a=s??t;return this.missingMedia.has(a)||(this.missingMedia.add(a),this.problems.push(h("AK-A001",s===void 0?`"${t}" points outside the project. Put media in the project, with a path relative to ${i}.`:`"${t}" (named in ${i}) cannot find ${s}: the path is wrong, or the file is not in the project yet.`,{where:{file:i}}))),d({path:s??t,sha256:"",kind:"image",url:$,width:1,height:1})}optionalAsset(t){const e=u(this.pathBase,t);if(e===void 0)return;const i=this.mediaAt(e);return i||this.missing(e),i?d(i):void 0}optionalData(t,e){const i=this.resolve(t,e);if(i===void 0)return{found:!1};const s=this.opts.data?.[i];return this.data.set(i,s?.sha256??""),s?s.error===void 0?{full:i,found:!0,value:s.value}:{full:i,found:!0,error:s.error}:{full:i,found:!1}}readData(t){const e=u(this.pathBase,t),i=e===void 0?void 0:this.opts.data?.[e];if(e!==void 0&&i){if(this.data.set(e,i.sha256),this.tap?.(`d:${e}`,i.sha256),i.error===void 0)return i.value;this.missingMedia.has(e)||(this.missingMedia.add(e),this.problems.push(h("AK-R001",`Cannot read the data file ${e}: ${i.error}`,{where:{file:e}})));return}this.missingMedia.has(t)||(this.missingMedia.add(t),this.problems.push(h("AK-A001",e===void 0?`ctx.data("${t}") points outside the project. Put data files in the project, with a path relative to ${this.pathBase}.`:`ctx.data("${t}") cannot find ${e}: the path is wrong, or the file is not CSV, YAML or JSON.`,{where:{file:this.pathBase}})))}reads(t,e){const i=s=>{if(!s.startsWith(`${t}.`))return;const n=s.slice(t.length+1).split(".")[0]??"";return e.includes(n)?n:void 0};return{messages:[...this.messages.values()].map(s=>{const n=i(s.key);return n===void 0?s:{...s,part:n}}).sort((s,n)=>s.key<n.key?-1:s.key>n.key?1:0),media:[...[...this.media.values()].map(s=>({path:s.path,sha256:s.sha256,kind:s.kind})),...[...this.missingReads].filter(s=>!this.media.has(s)).map(s=>({path:s,sha256:"",kind:"audio"}))].sort((s,n)=>s.path<n.path?-1:1),data:[...this.data.entries()].map(([s,n])=>({path:s,sha256:n})).sort((s,n)=>s.path<n.path?-1:1)}}translationProblems(){const t=[];for(const e of this.messages.values())e.fallback&&e.kind==="text"&&t.push(h("AK-S002",`${this.opts.lang??""} is missing a translation: ${e.key}. The ${this.opts.defaultLang??""} text was used.`,{where:{file:this.fileOf(this.opts.lang)}}));return t}keysShowing(t){const e=r=>r.replace(/[\s\p{Cf}]+/gu,""),i=e(t);if(i==="")return[];const s=[],n=[];for(const r of this.messages.values()){const f=p(this.peek(r.key)).flatMap(o=>k(o)?[o,O(o)]:[o]).map(e);f.includes(i)?s.push(r.key):f.some(o=>o.includes(i))&&n.push(r.key)}return s.length>0?s:(i.match(/[\p{L}\p{N}]/gu)?.length??0)>=b?n:[]}get file(){return this.fileOf(this.opts.lang)}}
2
+ import{pathIn as g,asUrlString as l,displayOf as c,fillMessage as d,lineAnchors as m,messageList as A,problem as h,repoPath as u,speakOf as w,textsOf as p,hasMarks as k,withoutMarks as O}from"@allyhub-next/video-core";import{TEXT_DIR as v}from"@allyhub-next/formats";const $="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",b=3;export class ReadLog{messages=new Map;media=new Map;data=new Map;keyByText=new Map;missingReads=new Set;missingMedia=new Set;problems=[];texts=new Set;tap;opts;fileOf;constructor(t){this.opts=t,this.fileOf=e=>`${t.text??v}/${e??"en"}.json`}value(t){const{own:e,fallback:i,lang:s,defaultLang:n}=this.opts;return Object.hasOwn(e,t)?{value:e[t],fellBack:!1}:Object.hasOwn(i,t)?{value:i[t],fellBack:s!==n}:{value:void 0,fellBack:!1}}record(t,e,i){if(this.messages.has(t))return;const{value:s,fellBack:n}=this.value(t);this.messages.set(t,{key:t,kind:e,fallback:n,...i?{hint:i}:{}}),e!=="list"&&s===void 0&&this.problems.push(h("AK-S001",`The code reads ${t}, but the default language ${this.opts.defaultLang??"(no messages)"} does not have it. Add it to ${this.fileOf(this.opts.defaultLang)}.`,{where:{file:this.fileOf(this.opts.defaultLang)}}))}locale(t){return Object.hasOwn(this.opts.own,t)?this.opts.lang:this.opts.defaultLang}text(t,e,i){this.record(t,"text",e);const{value:s}=this.value(t);this.tap?.(`m:${t}`,JSON.stringify(s??null));for(const n of p(s))this.texts.add(n);return c(s,i,this.locale(t))??""}s(t,e){const i=this.text(t,e,{});return i&&this.keyByText.set(i,{key:t,inputs:{}}),i}with(t,e,i){const s=d(this.text(t,i,e),e);return this.texts.add(s),s&&this.keyByText.set(s,{key:t,inputs:e}),s}spokenOf(t){const e=this.keyByText.get(t);if(!e)return;const i=w(this.value(e.key).value,e.inputs,this.locale(e.key)),s=(Object.hasOwn(this.opts.own,e.key)?this.opts.anchors?.own:this.opts.anchors?.fallback)?.[e.key];return{key:e.key,speak:i===void 0?t:d(i,e.inputs),...s&&i!==void 0?{anchors:m(i,s,n=>d(n,e.inputs))}:{}}}list(t,e){const i=[],s=new Set([...Object.keys(this.opts.own),...Object.keys(this.opts.fallback)]),n=A(a=>c(this.value(a).value,{},this.locale(a)),s,t,i);this.record(t,"list",e),i.length===0&&this.problems.push(h("AK-S001",`The code reads the list ${t}, but the default language has no keys like ${t}.0, ${t}.1. Add them to ${this.fileOf(this.opts.defaultLang)}.`,{where:{file:this.fileOf(this.opts.defaultLang)}}));for(const a of i)this.text(a,void 0,{});return n}keysUnder(t){const e=`${t}.`;return[...new Set([...Object.keys(this.opts.own),...Object.keys(this.opts.fallback)])].filter(i=>i.startsWith(e))}peek(t){return this.value(t).value}touch(t){const{value:e,fellBack:i}=this.value(t);return this.tap?.(`m:${t}`,JSON.stringify(e??null)),e!==void 0&&!this.messages.has(t)&&this.messages.set(t,{key:t,kind:"text",fallback:i}),e}mediaAt(t){const e=this.opts.media[t];return e&&this.media.set(t,l(e)),this.tap?.(`f:${t}`,e?.sha256??""),e}missing(t){this.missingReads.add(t)}report(t){this.problems.some(e=>e.code===t.code&&e.message===t.message)||this.problems.push(t)}relativeTo(t){this.base=t}base;get pathBase(){return this.base??this.opts.file}baseOf(t){return t===void 0?this.pathBase:t===""?"the project's root":t}resolve(t,e){return e===void 0?u(this.pathBase,t):g(e,t)}asset(t,e){const i=this.baseOf(e),s=this.resolve(t,e),n=s===void 0?void 0:this.mediaAt(s);if(n)return n;const a=s??t;return this.missingMedia.has(a)||(this.missingMedia.add(a),this.problems.push(h("AK-A001",s===void 0?`"${t}" points outside the project. Put media in the project, with a path relative to ${i}.`:`"${t}" (named in ${i}) cannot find ${s}: the path is wrong, or the file is not in the project yet.`,{where:{file:i}}))),l({path:s??t,sha256:"",kind:"image",url:$,width:1,height:1})}optionalAsset(t){const e=u(this.pathBase,t);if(e===void 0)return;const i=this.mediaAt(e);return i||this.missing(e),i?l(i):void 0}optionalData(t,e){const i=this.resolve(t,e);if(i===void 0)return{found:!1};const s=this.opts.data?.[i];return this.data.set(i,s?.sha256??""),s?s.error===void 0?{full:i,found:!0,value:s.value}:{full:i,found:!0,error:s.error}:{full:i,found:!1}}readData(t){const e=u(this.pathBase,t),i=e===void 0?void 0:this.opts.data?.[e];if(e!==void 0&&i){if(this.data.set(e,i.sha256),this.tap?.(`d:${e}`,i.sha256),i.error===void 0)return i.value;this.missingMedia.has(e)||(this.missingMedia.add(e),this.problems.push(h("AK-R001",`Cannot read the data file ${e}: ${i.error}`,{where:{file:e}})));return}this.missingMedia.has(t)||(this.missingMedia.add(t),this.problems.push(h("AK-A001",e===void 0?`ctx.data("${t}") points outside the project. Put data files in the project, with a path relative to ${this.pathBase}.`:`ctx.data("${t}") cannot find ${e}: the path is wrong, or the file is not CSV, YAML or JSON.`,{where:{file:this.pathBase}})))}reads(t,e){const i=s=>{if(!s.startsWith(`${t}.`))return;const n=s.slice(t.length+1).split(".")[0]??"";return e.includes(n)?n:void 0};return{messages:[...this.messages.values()].map(s=>{const n=i(s.key);return n===void 0?s:{...s,part:n}}).sort((s,n)=>s.key<n.key?-1:s.key>n.key?1:0),media:[...[...this.media.values()].map(s=>({path:s.path,sha256:s.sha256,kind:s.kind})),...[...this.missingReads].filter(s=>!this.media.has(s)).map(s=>({path:s,sha256:"",kind:"audio"}))].sort((s,n)=>s.path<n.path?-1:1),data:[...this.data.entries()].map(([s,n])=>({path:s,sha256:n})).sort((s,n)=>s.path<n.path?-1:1)}}translationProblems(){const t=[];for(const e of this.messages.values())e.fallback&&e.kind==="text"&&t.push(h("AK-S002",`${this.opts.lang??""} is missing a translation: ${e.key}. The ${this.opts.defaultLang??""} text was used.`,{where:{file:this.fileOf(this.opts.lang)}}));return t}keysShowing(t){const e=r=>r.replace(/[\s\p{Cf}]+/gu,""),i=e(t);if(i==="")return[];const s=[],n=[];for(const r of this.messages.values()){const f=p(this.peek(r.key)).flatMap(o=>k(o)?[o,O(o)]:[o]).map(e);f.includes(i)?s.push(r.key):f.some(o=>o.includes(i))&&n.push(r.key)}return s.length>0?s:(i.match(/[\p{L}\p{N}]/gu)?.length??0)>=b?n:[]}get file(){return this.fileOf(this.opts.lang)}}
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{resolveMaster as j,resolveMix as I}from"@allyhub-next/audio";import{BUILTIN_SFX as y,isBuiltinSfx as B,problem as x,toFrame as O}from"@allyhub-next/video-core";import{voicePlan as F}from"./mix-plan.js";const b=f=>Math.round(f*1e6)/1e6;export function soundPlanner(f,P){const{source:p,log:w,ledger:m}=f,{look:k,fps:$,options:u,dims:S,isPaged:v}=P,c=[],l=[],h=[],T=(t,o,d)=>{const i=t.sound;let n,s;if(typeof i=="string"){s=i;const r=k.sfx[i];if(r!==void 0){const e=r.replace(/^\.\//,"");if(n=w.mediaAt(e),!n){w.missing(e),m.problems.push(x("AK-A001",`The look's sound "${i}" is ${e}, which is not in the project. Put the file there, or change look.sfx in allyhub.config.ts.`,{part:o,where:{file:p.file}}));return}}else{if(B(i))return{sound:i};if(/[./]/.test(i))n=f.mediaOf(i,d);else{const e=[...y,...Object.keys(k.sfx)];m.problems.push(x("AK-A001",`The sound "${i}" in part ${o} is not one of the look's sounds (${[...new Set(e)].join(", ")}) and not a file. Name one of them, give a file ("./sfx/${i}.wav" or an import), or add it to look.sfx in allyhub.config.ts.`,{part:o,where:{file:p.file}}));return}}}else n=f.mediaOf(i,d),s=n.path.split("/").pop()??n.path;if(n.sha256!==""){if(n.kind!=="audio"&&!(n.kind==="video"&&n.audio)){m.problems.push(x("AK-A003",`The sound ${n.path} in part ${o} is not audio. Give an audio file (wav, mp3, m4a…) or a video with sound.`,{part:o,where:{file:p.file}}));return}return{sound:s,file:n.path}}};return{addSpeech(t,o){l.push(...t),h.push(...o)},sfx(t,o,d){if(v)return;const i=o.end-o.start;for(const n of t.sounds??[]){const s=T(n,t.key,t.base);if(!s)continue;const r=Math.min(Math.max(d(n.at),0),i);c.push({t:O(o.start+r,$),sound:s.sound,part:o.key,...n.what===void 0?{}:{what:n.what},...s.file===void 0?{}:{file:s.file},...n.gainDb===void 0||n.gainDb===0?{}:{gainDb:n.gainDb},...n.shape?{shape:n.shape}:{}})}},carry(t,o,d,i,n,s){const r=e=>{const a=Math.max(e.at,o),g=Math.min(e.at+e.dur,d);if(g-a<.005)return;const{fadeIn:A,fadeOut:D,...M}=e;return delete M.tone,{...M,part:n,at:b(i+a-o),from:b(e.from+(a-e.at)*(e.speed??1)),dur:b(g-a),...e.gainDb!==void 0||s!==0?{gainDb:(e.gainDb??0)+s}:{},...A!==void 0&&a===e.at?{fadeIn:A}:{},...D!==void 0&&g===e.at+e.dur?{fadeOut:D}:{}}};for(const e of t.timeline.audio.speech??[]){const a=r(e);a&&l.push(a)}for(const e of t.timeline.audio.room??[]){const a=r(e);a&&h.push(a)}for(const e of t.timeline.cues)e.t<o-1e-6||e.t>=d-1e-6||c.push({...e,t:O(i+e.t-o,$),part:n,...e.gainDb!==void 0||s!==0?{gainDb:(e.gainDb??0)+s}:{}})},cues:()=>[...c].sort((t,o)=>t.t-o.t),audio(t,o){if(v)return{};const d=S.profile;return{...l.length>0?{speech:l}:{},...h.length>0?{room:h}:{},...t?{music:t}:{},...u.mix?{mix:I(u.mix)}:{},master:j(u.master,d?.loudness),...F(u.mic,o)}}}}
2
+ import{resolveMaster as j,resolveMix as I}from"@allyhub-next/audio";import{BUILTIN_SFX as P,isBuiltinSfx as y,problem as x,toFrame as M}from"@allyhub-next/video-core";import{voicePlan as B}from"./mix-plan.js";const b=u=>Math.round(u*1e6)/1e6;export function soundPlanner(u,O){const{source:p,log:w,ledger:m}=u,{look:k,fps:$,options:r,dims:S}=O,c=[],l=[],h=[],T=(t,o,d)=>{const i=t.sound;let n,s;if(typeof i=="string"){s=i;const f=k.sfx[i];if(f!==void 0){const e=f.replace(/^\.\//,"");if(n=w.mediaAt(e),!n){w.missing(e),m.problems.push(x("AK-A001",`The look's sound "${i}" is ${e}, which is not in the project. Put the file there, or change look.sfx in allyhub.config.ts.`,{part:o,where:{file:p.file}}));return}}else{if(y(i))return{sound:i};if(/[./]/.test(i))n=u.mediaOf(i,d);else{const e=[...P,...Object.keys(k.sfx)];m.problems.push(x("AK-A001",`The sound "${i}" in part ${o} is not one of the look's sounds (${[...new Set(e)].join(", ")}) and not a file. Name one of them, give a file ("./sfx/${i}.wav" or an import), or add it to look.sfx in allyhub.config.ts.`,{part:o,where:{file:p.file}}));return}}}else n=u.mediaOf(i,d),s=n.path.split("/").pop()??n.path;if(n.sha256!==""){if(n.kind!=="audio"&&!(n.kind==="video"&&n.audio)){m.problems.push(x("AK-A003",`The sound ${n.path} in part ${o} is not audio. Give an audio file (wav, mp3, m4a…) or a video with sound.`,{part:o,where:{file:p.file}}));return}return{sound:s,file:n.path}}};return{addSpeech(t,o){l.push(...t),h.push(...o)},sfx(t,o,d){const i=o.end-o.start;for(const n of t.sounds??[]){const s=T(n,t.key,t.base);if(!s)continue;const f=Math.min(Math.max(d(n.at),0),i);c.push({t:M(o.start+f,$),sound:s.sound,part:o.key,...n.what===void 0?{}:{what:n.what},...s.file===void 0?{}:{file:s.file},...n.gainDb===void 0||n.gainDb===0?{}:{gainDb:n.gainDb},...n.shape?{shape:n.shape}:{}})}},carry(t,o,d,i,n,s){const f=e=>{const a=Math.max(e.at,o),g=Math.min(e.at+e.dur,d);if(g-a<.005)return;const{fadeIn:v,fadeOut:A,...D}=e;return delete D.tone,{...D,part:n,at:b(i+a-o),from:b(e.from+(a-e.at)*(e.speed??1)),dur:b(g-a),...e.gainDb!==void 0||s!==0?{gainDb:(e.gainDb??0)+s}:{},...v!==void 0&&a===e.at?{fadeIn:v}:{},...A!==void 0&&g===e.at+e.dur?{fadeOut:A}:{}}};for(const e of t.timeline.audio.speech??[]){const a=f(e);a&&l.push(a)}for(const e of t.timeline.audio.room??[]){const a=f(e);a&&h.push(a)}for(const e of t.timeline.cues)e.t<o-1e-6||e.t>=d-1e-6||c.push({...e,t:M(i+e.t-o,$),part:n,...e.gainDb!==void 0||s!==0?{gainDb:(e.gainDb??0)+s}:{}})},cues:()=>[...c].sort((t,o)=>t.t-o.t),audio(t,o){const d=S.profile;return{...l.length>0?{speech:l}:{},...h.length>0?{room:h}:{},...t?{music:t}:{},...r.mix?{mix:I(r.mix)}:{},master:j(r.master,d?.loudness),...B(r.mic,o)}}}}
@@ -0,0 +1,12 @@
1
+ export { createEnv, Ledger, type Env } from "./env.js";
2
+ export { LoadFailure, codeOf, messageOf } from "./errors.js";
3
+ export { consoleAt, consoleAtAsync } from "./console.js";
4
+ export { loadFaces, loadTextFonts, codePoints, namedFamilies, } from "./fonts.js";
5
+ export { pictureWaiter, watchPictures } from "./pictures.js";
6
+ export { watchStyles } from "./styles.js";
7
+ export { textBlocks, type TextBlock } from "./inspect.js";
8
+ export { inkOfBlock } from "./contrast.js";
9
+ export { domHash } from "./measure.js";
10
+ export { realTimers } from "./guards.js";
11
+ export type { ReadLog } from "./reads.js";
12
+ //# sourceMappingURL=stage-kit.d.ts.map
@@ -0,0 +1,2 @@
1
+ /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
+ export{createEnv,Ledger}from"./env.js";export{LoadFailure,codeOf,messageOf}from"./errors.js";export{consoleAt,consoleAtAsync}from"./console.js";export{loadFaces,loadTextFonts,codePoints,namedFamilies}from"./fonts.js";export{pictureWaiter,watchPictures}from"./pictures.js";export{watchStyles}from"./styles.js";export{textBlocks}from"./inspect.js";export{inkOfBlock}from"./contrast.js";export{domHash}from"./measure.js";export{realTimers}from"./guards.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/runtime",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -11,11 +11,10 @@
11
11
  "types": "./dist/bridge.d.ts",
12
12
  "default": "./dist/bridge.js"
13
13
  },
14
- "./host": {
15
- "types": "./dist/host.d.ts",
16
- "default": "./dist/host.js"
17
- },
18
- "./page.js": "./dist/page.js"
14
+ "./stage": {
15
+ "types": "./dist/stage-kit.d.ts",
16
+ "default": "./dist/stage-kit.js"
17
+ }
19
18
  },
20
19
  "private": true,
21
20
  "license": "SEE LICENSE IN LICENSE.md"
@@ -8,7 +8,11 @@ export type RuntimeErrorCode =
8
8
  /** A file came in another size or with another sha256 than its pin. */
9
9
  | "checksum"
10
10
  /** An archive could not be unpacked, or held a path outside its folder. */
11
- | "unpack" | "cancelled";
11
+ | "unpack"
12
+ /** The pins have no package by that name. */
13
+ | "unknown-package"
14
+ /** A package could not be installed from its lock. */
15
+ | "install" | "cancelled";
12
16
  export declare class RuntimeError extends Error {
13
17
  readonly code: RuntimeErrorCode;
14
18
  constructor(code: RuntimeErrorCode, message: string, options?: ErrorOptions);
@@ -1,4 +1,5 @@
1
1
  export { binVariable, createRuntimes, type EnsureOptions, type Located, type Progress, type Runtimes, type RuntimesOptions, type Status, } from "./runtimes.js";
2
+ export { createPackages, npmCi, type EnsurePackageOptions, type LoadOptions, type Install, type LocatedPackage, type Packages, type PackagesOptions, } from "./packages.js";
2
3
  export { bundledEnv, type BundledOptions } from "./bundled.js";
3
4
  export { RuntimeError, type RuntimeErrorCode } from "./errors.js";
4
5
  export { cacheHome } from "./home.js";
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- export{binVariable,createRuntimes}from"./runtimes.js";export{bundledEnv}from"./bundled.js";export{RuntimeError}from"./errors.js";export{cacheHome}from"./home.js";export{shippedManifest}from"./manifest.js";export{download,sha256Of}from"./download.js";export{withLock}from"./lock.js";export{unzip,untgz}from"./unpack.js";
2
+ export{binVariable,createRuntimes}from"./runtimes.js";export{createPackages,npmCi}from"./packages.js";export{bundledEnv}from"./bundled.js";export{RuntimeError}from"./errors.js";export{cacheHome}from"./home.js";export{shippedManifest}from"./manifest.js";export{download,sha256Of}from"./download.js";export{withLock}from"./lock.js";export{unzip,untgz}from"./unpack.js";
@@ -0,0 +1,3 @@
1
+ /** The program that runs a Node program here. */
2
+ export declare function nodeCommand(env?: Readonly<Record<string, string | undefined>>, versions?: Readonly<Record<string, string | undefined>>): string;
3
+ //# sourceMappingURL=node-program.d.ts.map
@@ -0,0 +1,2 @@
1
+ /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
+ export function nodeCommand(n=process.env,o=process.versions){const e=n.ALLYHUB_NODE;if(e)return e;if(o.electron!==void 0)throw new Error("This Electron app names no Node.js (ALLYHUB_NODE): its own executable is not Node.");return process.execPath}
@@ -0,0 +1,65 @@
1
+ export interface PackagesOptions {
2
+ /** The cache folder (default: the system's, `cacheHome`). */
3
+ home?: string;
4
+ /** The folder of pins (default: the ones AllyHub ships). */
5
+ pins?: string;
6
+ env?: Readonly<Record<string, string | undefined>>;
7
+ /** What fills a folder from its package-lock.json (default: `npm ci`). */
8
+ install?: Install;
9
+ }
10
+ export type Install = (dir: string, options: {
11
+ home: string;
12
+ signal?: AbortSignal | undefined;
13
+ }) => Promise<void>;
14
+ export interface LocatedPackage {
15
+ name: string;
16
+ version: string;
17
+ /** Its folder, the one holding its `node_modules`. */
18
+ dir: string;
19
+ }
20
+ export interface EnsurePackageOptions {
21
+ signal?: AbortSignal | undefined;
22
+ /** Called once if the package has to be fetched, before it is. */
23
+ onFetch?: (name: string) => void;
24
+ }
25
+ export interface LoadOptions extends EnsurePackageOptions {
26
+ /** The module to load, for a pin holding several (default: the pin's name). */
27
+ module?: string;
28
+ }
29
+ export interface Packages {
30
+ readonly home: string;
31
+ /** A package if it is there; never fetches, and reads only its record. */
32
+ locate(name: string): LocatedPackage | undefined;
33
+ /** What a package takes on this computer, as near as its pin says (bytes). */
34
+ size(name: string): number;
35
+ /** The file `import(name)` would load, when the package is there. */
36
+ entry(name: string): string | undefined;
37
+ /** The file a module of an ensured package resolves to, which never fetches. */
38
+ resolve(name: string, module: string): string | undefined;
39
+ /** A package, fetched and checked first if it is not there. */
40
+ ensure(name: string, options?: EnsurePackageOptions): Promise<LocatedPackage>;
41
+ /** A package's module, as `import(name)` would give it, ensured first. */
42
+ load<T>(name: string, options?: LoadOptions): Promise<T>;
43
+ /** Takes a package off this computer; it comes back when next ensured. */
44
+ remove(name: string): Promise<void>;
45
+ }
46
+ /** A setting `npx` puts in the environment about its own install. */
47
+ export declare const NPX_SETTING: RegExp;
48
+ /** What went wrong, from what npm wrote: its reason, not its advice. */
49
+ export declare function npmProblem(stderr: string, code: number | null): string;
50
+ export interface NpmCommand {
51
+ command: string;
52
+ /** What comes before npm's own arguments: its script, when Node runs it. */
53
+ script: string[];
54
+ }
55
+ /**
56
+ * The npm to install with. An app that brings its own names it (bundled.ts),
57
+ * and `npx` names the one that runs it; else the computer's; and where it has
58
+ * none, as a person who only has Studio may not, the runtime manager's Node
59
+ * and its npm, fetched like any runtime.
60
+ */
61
+ export declare function findNpm(env: Readonly<Record<string, string | undefined>>, ensureNode: () => Promise<Record<string, string>>): Promise<NpmCommand>;
62
+ /** Runs `npm ci` from the lock, keeping npm's cache in AllyHub's home. */
63
+ export declare const npmCi: Install;
64
+ export declare function createPackages(options?: PackagesOptions): Packages;
65
+ //# sourceMappingURL=packages.d.ts.map
@@ -0,0 +1,4 @@
1
+ /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
+ import{spawn as _}from"node:child_process";import{createHash as T,randomBytes as H}from"node:crypto";import{existsSync as A,readFileSync as b}from"node:fs";import{copyFile as R,mkdir as E,readdir as y,readFile as C,rename as F,rm as g,writeFile as L}from"node:fs/promises";import{createRequire as I}from"node:module";import{delimiter as z,join as o}from"node:path";import{fileURLToPath as J,pathToFileURL as U}from"node:url";import{RuntimeError as k}from"./errors.js";import{cacheHome as W}from"./home.js";import{withLock as B}from"./lock.js";import{nodeCommand as D}from"./node-program.js";import{createRuntimes as M}from"./runtimes.js";const N=".allyhub-package.json",q=J(new URL("../pins/",import.meta.url));async function G(s){const c=o(s,"node_modules","onnxruntime-node","bin","napi-v6");for(const n of await y(c)){if(n!==process.platform){await g(o(c,n),{recursive:!0,force:!0});continue}for(const p of await y(o(c,n)))p!==process.arch&&await g(o(c,n,p),{recursive:!0,force:!0})}if(process.platform!=="darwin")return;const i=o(c,"darwin",process.arch);for(const n of await y(i))/^libonnxruntime\.\d+\.\d+\.\d+\.dylib$/u.test(n)&&await g(o(i,n),{force:!0})}const V={"onnxruntime-node":G};export const NPX_SETTING=/^npm_config_(global|prefix|location|cache|.*_prefix)/iu;export function npmProblem(s,c){return s.split(`
3
+ `).map(n=>n.replace(/^npm (error|ERR!)\s*/u,"").trim()).find(n=>n!==""&&!/^(code|errno|syscall|path|type|A complete log|Exit handler|This is an error with npm|<https)/u.test(n))??`npm ended with code ${String(c)}`}const X=(s,c)=>(c.PATH??"").split(z).some(i=>i!==""&&A(o(i,s)));export async function findNpm(s,c){const i=s.ALLYHUB_NPM??s.npm_execpath;if(i?.endsWith(".js"))return{command:D(s),script:[i]};if(X("npm",s))return{command:"npm",script:[]};const n=await c(),{node:p,npm:l}=n;if(!p||!l)throw new Error("AllyHub's Node has no npm");return{command:p,script:[l]}}export const npmCi=async(s,{home:c,signal:i})=>{const n=await findNpm(process.env,async()=>(await M({home:c}).ensure("node",{signal:i})).bins),p=Object.fromEntries(Object.entries(process.env).filter(([f])=>!NPX_SETTING.test(f))),l=["ci","--ignore-scripts","--omit=dev","--no-audit","--no-fund","--omit=peer","--loglevel=error","--fetch-retries=1"];await new Promise((f,m)=>{const w=_(n.command,[...n.script,...l],{cwd:s,env:{...p,npm_config_cache:o(c,"packages",".npm")},stdio:["ignore","ignore","pipe"],...i?{signal:i}:{}});let h="";w.stderr.on("data",v=>{h=`${h}${v.toString()}`.slice(-1e3)}),w.on("error",m),w.on("close",v=>{v===0?f():m(new Error(npmProblem(h,v)))})})};export function createPackages(s={}){const c=s.env??process.env,i=s.home??W(c),n=s.pins??q,p=s.install??npmCi,l=o(i,"packages"),f=e=>{const r=o(n,e);let t,a;try{t=JSON.parse(b(o(r,"package.json"),"utf8")),a=b(o(r,"package-lock.json"),"utf8")}catch{throw new k("unknown-package",`AllyHub has no package "${e}".`)}const u=t.dependencies??{},d=u[e]??t.version;if(!d)throw new k("unknown-package",`The pin of "${e}" does not name it.`);return{version:d,holds:u,lock:T("sha256").update(a).digest("hex"),dir:r,size:t.allyhubSize??0}},m=(e,r)=>o(l,`${e}@${r.version}`),w=(e,r)=>{try{const t=JSON.parse(b(o(m(e,r),N),"utf8"));return t.version===r.version&&t.lock===r.lock}catch{return!1}},h=(e,r)=>({name:e,version:r.version,dir:m(e,r)}),v=async(e,r,t)=>{const a=m(e,r),u=`${a}.partial-${String(process.pid)}-${H(4).toString("hex")}`;await E(u,{recursive:!0});try{await R(o(r.dir,"package.json"),o(u,"package.json")),await R(o(r.dir,"package-lock.json"),o(u,"package-lock.json")),await p(u,{home:i,signal:t});for(const[d,j]of Object.entries(r.holds)){const O=JSON.parse(await C(o(u,"node_modules",d,"package.json"),"utf8"));if(O.version!==j)throw new Error(`it holds ${d} ${String(O.version)}, not ${j}`)}await V[e]?.(u),await L(o(u,N),`${JSON.stringify({version:r.version,lock:r.lock,at:new Date().toISOString()})}
4
+ `),await g(a,{recursive:!0,force:!0}),await F(u,a),await P(e,r)}catch(d){throw await g(u,{recursive:!0,force:!0}),t?.aborted?new k("cancelled",`Stopped getting ${e}.`,{cause:d}):new k("install",`Could not get ${e} ${r.version} (${d instanceof Error?d.message:String(d)}). Check the connection and run it again.`,{cause:d})}},P=async(e,r)=>{const t=`${e}@${r.version}`;for(const a of await y(l))a.startsWith(`${e}@`)&&a!==t&&!a.startsWith(`${t}.`)&&await g(o(l,a),{recursive:!0,force:!0})},$=e=>{const r=f(e);return w(e,r)?h(e,r):void 0},S=(e,r)=>I(o(e,"package.json")).resolve(r),x=async(e,r={})=>{const t=f(e);return w(e,t)||(await E(l,{recursive:!0}).catch(a=>{throw new k("install",`Could not get ${e} ${t.version}: AllyHub cannot write to ${l}.`,{cause:a})}),await B(`${m(e,t)}.lock`,async()=>{w(e,t)||(r.onFetch?.(e),await v(e,t,r.signal))},{signal:r.signal})),h(e,t)};return{home:i,locate:$,ensure:x,size:e=>f(e).size,entry(e){const r=$(e);return r?S(r.dir,e):void 0},resolve(e,r){const t=$(e);return t?S(t.dir,r):void 0},async load(e,r){const{dir:t}=await x(e,r),a=S(t,r?.module??e);return await import(U(a).href)},async remove(e){await g(m(e,f(e)),{recursive:!0,force:!0})}}}
@@ -1,3 +1,3 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{randomBytes as P}from"node:crypto";import{chmod as B,mkdir as S,readFile as D,rename as x,rm as g,writeFile as M}from"node:fs/promises";import{dirname as J,join as u}from"node:path";import{binsOf as L,filesFor as U,platformOf as _}from"@allyhub-next/protocol";import{download as T,sha256Of as V}from"./download.js";import{RuntimeError as p}from"./errors.js";import{cacheHome as Y}from"./home.js";import{withLock as q}from"./lock.js";import{shippedManifest as G}from"./manifest.js";import{inside as A,native as K,untgz as Q,unzip as W}from"./unpack.js";const C=".allyhub-runtime.json";export const binVariable=f=>`ALLYHUB_${f.toUpperCase().replaceAll("-","_")}`;export function createRuntimes(f={}){const j=f.env??process.env,z=f.home??Y(j),b=f.manifest??G(),l="platform"in f?f.platform:_(process.platform,process.arch),F=f.fetch??globalThis.fetch,$=u(z,"runtimes"),O=t=>{const e=Object.hasOwn(b.runtimes,t)?b.runtimes[t]:void 0;if(!e)throw new p("unknown-runtime",`AllyHub has no runtime "${t}".`);return e},d=(t,e)=>u($,`${t}@${e.version}`),h=(t,e)=>{const r=l?U(e,l):void 0;if(!r)throw new p("unsupported",`${t} ${e.version} has no build for ${l??`${process.platform}-${process.arch}`}.`);return r},H=(t,e,r)=>Object.fromEntries(Object.entries(L(h(t,e))).map(([n,s])=>[n,u(r,K(s))])),R=(t,e)=>{const r=[...new Set(Object.values(e.platforms).flatMap(i=>Object.keys(L(i))))];if(r.length===0)return;const n=r.map(i=>[i,j[binVariable(i)]]);if(n.some(([,i])=>!i))return;const s=Object.fromEntries(n),o=n[0]?.[1]??"";return{name:t,version:void 0,dir:J(o),bins:s,from:"env"}},y=async(t,e)=>{try{const r=JSON.parse(await D(u(d(t,e),C),"utf8")),n=h(t,e).map(s=>s.sha256);return r.version===e.version&&JSON.stringify(r.files)===JSON.stringify(n)}catch{return!1}},k=async t=>{const e=O(t),r=R(t,e);if(r)return r;if(!await y(t,e))return;const n=d(t,e);return{name:t,version:e.version,dir:n,bins:H(t,e,n),from:"cache"}},I=async(t,e,r)=>{const n=h(t,e),s=d(t,e),o=`${s}.partial-${String(process.pid)}-${P(4).toString("hex")}`,i=u(o,".downloads");await S(i,{recursive:!0});try{for(const[w,a]of n.entries()){const m=u(i,String(w));if(await T(a.url,m,{size:a.size,sha256:a.sha256,fetch:F,signal:r.signal,onProgress:(c,v)=>{r.onProgress?.({runtime:t,url:a.url,received:c,total:v})}}),a.unpack==="zip")await W(m,o);else if(a.unpack==="tgz")await Q(m,o);else{const c=A(o,a.name??X(a.url));if(!c)throw new p("unpack",`${a.url} would be kept outside its folder.`);await S(J(c),{recursive:!0}),await x(m,c),a.executable&&await B(c,493)}for(const c of a.check){const v=A(o,c.path),N=v?await V(v).catch(()=>"missing"):"missing";if(N!==c.sha256)throw new p("checksum",`${c.path} from ${a.url} has sha256 ${N}; its pin is ${c.sha256}.`)}}await g(i,{recursive:!0,force:!0}),await M(u(o,C),`${JSON.stringify({version:e.version,files:n.map(w=>w.sha256),at:new Date().toISOString()})}
3
- `),await g(s,{recursive:!0,force:!0}),await x(o,s)}catch(w){throw await g(o,{recursive:!0,force:!0}),w}},E=async(t,e={})=>{const r=O(t),n=await k(t);if(n)return n;h(t,r),await S($,{recursive:!0}),await q(`${d(t,r)}.lock`,async()=>{await y(t,r)||await I(t,r,e)},{signal:e.signal});const s=await k(t);if(!s)throw new p("download",`${t} was installed but cannot be found in ${$}.`);return s};return{home:z,platform:l,locate:k,ensure:E,async bin(t,e,r){const s=(await E(t,r)).bins[e];if(!s)throw new p("unknown-runtime",`${t} holds no program "${e}".`);return s},async remove(t){const e=O(t);await g(d(t,e),{recursive:!0,force:!0})},async status(){return Promise.all(Object.entries(b.runtimes).map(async([t,e])=>{const r=l?U(e,l):void 0,n=d(t,e),s=R(t,e)!==void 0?"env":r!==void 0&&await y(t,e)?"cache":void 0;return{name:t,about:e.about,version:e.version,license:e.license,available:r!==void 0,installed:s!==void 0,...s?{from:s}:{},size:(r??[]).reduce((o,i)=>o+i.size,0),dir:n}}))}}}const X=f=>decodeURIComponent(new URL(f).pathname.split("/").pop()??"file");
2
+ import{randomBytes as P}from"node:crypto";import{chmod as B,mkdir as S,readFile as D,rename as x,rm as v,writeFile as M}from"node:fs/promises";import{dirname as J,join as u}from"node:path";import{binsOf as L,filesFor as U,platformOf as _}from"@allyhub-next/protocol";import{download as T,sha256Of as V}from"./download.js";import{RuntimeError as p}from"./errors.js";import{cacheHome as Y}from"./home.js";import{withLock as q}from"./lock.js";import{shippedManifest as G}from"./manifest.js";import{inside as A,native as K,undmg as Q,untgz as W,unzip as X}from"./unpack.js";const C=".allyhub-runtime.json";export const binVariable=f=>`ALLYHUB_${f.toUpperCase().replaceAll("-","_")}`;export function createRuntimes(f={}){const j=f.env??process.env,z=f.home??Y(j),b=f.manifest??G(),l="platform"in f?f.platform:_(process.platform,process.arch),F=f.fetch??globalThis.fetch,$=u(z,"runtimes"),O=t=>{const e=Object.hasOwn(b.runtimes,t)?b.runtimes[t]:void 0;if(!e)throw new p("unknown-runtime",`AllyHub has no runtime "${t}".`);return e},d=(t,e)=>u($,`${t}@${e.version}`),h=(t,e)=>{const r=l?U(e,l):void 0;if(!r)throw new p("unsupported",`${t} ${e.version} has no build for ${l??`${process.platform}-${process.arch}`}.`);return r},H=(t,e,r)=>Object.fromEntries(Object.entries(L(h(t,e))).map(([n,s])=>[n,u(r,K(s))])),R=(t,e)=>{const r=[...new Set(Object.values(e.platforms).flatMap(a=>Object.keys(L(a))))];if(r.length===0)return;const n=r.map(a=>[a,j[binVariable(a)]]);if(n.some(([,a])=>!a))return;const s=Object.fromEntries(n),o=n[0]?.[1]??"";return{name:t,version:void 0,dir:J(o),bins:s,from:"env"}},y=async(t,e)=>{try{const r=JSON.parse(await D(u(d(t,e),C),"utf8")),n=h(t,e).map(s=>s.sha256);return r.version===e.version&&JSON.stringify(r.files)===JSON.stringify(n)}catch{return!1}},k=async t=>{const e=O(t),r=R(t,e);if(r)return r;if(!await y(t,e))return;const n=d(t,e);return{name:t,version:e.version,dir:n,bins:H(t,e,n),from:"cache"}},I=async(t,e,r)=>{const n=h(t,e),s=d(t,e),o=`${s}.partial-${String(process.pid)}-${P(4).toString("hex")}`,a=u(o,".downloads");await S(a,{recursive:!0});try{for(const[w,i]of n.entries()){const m=u(a,String(w));if(await T(i.url,m,{size:i.size,sha256:i.sha256,fetch:F,signal:r.signal,onProgress:(c,g)=>{r.onProgress?.({runtime:t,url:i.url,received:c,total:g})}}),i.unpack==="zip")await X(m,o);else if(i.unpack==="tgz")await W(m,o);else if(i.unpack==="dmg")await Q(m,o);else{const c=A(o,i.name??Z(i.url));if(!c)throw new p("unpack",`${i.url} would be kept outside its folder.`);await S(J(c),{recursive:!0}),await x(m,c),i.executable&&await B(c,493)}for(const c of i.check){const g=A(o,c.path),N=g?await V(g).catch(()=>"missing"):"missing";if(N!==c.sha256)throw new p("checksum",`${c.path} from ${i.url} has sha256 ${N}; its pin is ${c.sha256}.`)}}await v(a,{recursive:!0,force:!0}),await M(u(o,C),`${JSON.stringify({version:e.version,files:n.map(w=>w.sha256),at:new Date().toISOString()})}
3
+ `),await v(s,{recursive:!0,force:!0}),await x(o,s)}catch(w){throw await v(o,{recursive:!0,force:!0}),w}},E=async(t,e={})=>{const r=O(t),n=await k(t);if(n)return n;h(t,r),await S($,{recursive:!0}),await q(`${d(t,r)}.lock`,async()=>{await y(t,r)||await I(t,r,e)},{signal:e.signal});const s=await k(t);if(!s)throw new p("download",`${t} was installed but cannot be found in ${$}.`);return s};return{home:z,platform:l,locate:k,ensure:E,async bin(t,e,r){const s=(await E(t,r)).bins[e];if(!s)throw new p("unknown-runtime",`${t} holds no program "${e}".`);return s},async remove(t){const e=O(t);await v(d(t,e),{recursive:!0,force:!0})},async status(){return Promise.all(Object.entries(b.runtimes).map(async([t,e])=>{const r=l?U(e,l):void 0,n=d(t,e),s=R(t,e)!==void 0?"env":r!==void 0&&await y(t,e)?"cache":void 0;return{name:t,about:e.about,version:e.version,license:e.license,available:r!==void 0,installed:s!==void 0,...s?{from:s}:{},size:(r??[]).reduce((o,a)=>o+a.size,0),dir:n}}))}}}const Z=f=>decodeURIComponent(new URL(f).pathname.split("/").pop()??"file");
@@ -2,6 +2,13 @@
2
2
  export declare function inside(dir: string, entry: string): string | undefined;
3
3
  export declare function unzip(file: string, dir: string): Promise<void>;
4
4
  export declare function untgz(file: string, dir: string): Promise<void>;
5
+ /**
6
+ * A macOS disk image's items (an app) copied into `dir`: the image is
7
+ * attached read-only where nothing opens it, each item that is not a link
8
+ * (the Applications shortcut is one) copied with ditto, which keeps an
9
+ * app's own links and signatures, and the image detached.
10
+ */
11
+ export declare function undmg(file: string, dir: string): Promise<void>;
5
12
  /** A path in its system's spelling, from a manifest's forward slashes. */
6
13
  export declare const native: (path: string) => string;
7
14
  //# sourceMappingURL=unpack.d.ts.map
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{createWriteStream as w}from"node:fs";import{chmod as h,mkdir as d}from"node:fs/promises";import{dirname as k,isAbsolute as f,join as $,normalize as g,relative as z,sep as y}from"node:path";import{pipeline as x}from"node:stream/promises";import{extract as E}from"tar";import S from"yauzl";import{RuntimeError as s}from"./errors.js";export function inside(n,o){if(o.includes("\0")||f(o)||/^[A-Za-z]:/u.test(o))return;const e=g($(n,o)),t=z(n,e);if(!(t===""||t.startsWith("..")||f(t)))return e}export async function unzip(n,o){const e=await new Promise((t,a)=>{S.open(n,{lazyEntries:!0,autoClose:!0},(i,r)=>{i?a(new s("unpack",`${n} is not a zip: ${i.message}`,{cause:i})):t(r)})});await new Promise((t,a)=>{const i=r=>{e.close(),a(r instanceof s?r:new s("unpack",`Unpacking ${n} failed: ${String(r)}`,{cause:r}))};e.on("error",i),e.on("end",()=>{t()}),e.on("entry",r=>{const c=r.fileName.split("\\").join("/"),u=inside(o,c);if(!u){i(new s("unpack",`${n} holds ${c}, outside its folder.`));return}const p=r.externalFileAttributes>>>16&65535;if((p&61440)===40960){i(new s("unpack",`${n} holds a link, ${c}.`));return}if(c.endsWith("/")){d(u,{recursive:!0}).then(()=>{e.readEntry()},i);return}e.openReadStream(r,(m,l)=>{if(m){i(m);return}d(k(u),{recursive:!0}).then(()=>x(l,w(u))).then(()=>p&73?h(u,493):void 0).then(()=>{e.readEntry()},i)})}),e.readEntry()})}export async function untgz(n,o){try{await E({file:n,cwd:o,strict:!0,filter:(e,t)=>{const a="type"in t?t.type:void 0;return inside(o,e)!==void 0&&a!=="SymbolicLink"&&a!=="Link"}})}catch(e){throw new s("unpack",`Unpacking ${n} failed: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}export const native=n=>n.split("/").join(y);
2
+ import{createWriteStream as h}from"node:fs";import{execFile as k}from"node:child_process";import{chmod as $,mkdir as f,mkdtemp as y,readdir as g,rm as x}from"node:fs/promises";import{tmpdir as z}from"node:os";import{dirname as S,isAbsolute as l,join as m,normalize as b,relative as E,sep as v}from"node:path";import{pipeline as W}from"node:stream/promises";import{extract as j}from"tar";import A from"yauzl";import{RuntimeError as u}from"./errors.js";export function inside(e,r){if(r.includes("\0")||l(r)||/^[A-Za-z]:/u.test(r))return;const t=b(m(e,r)),i=E(e,t);if(!(i===""||i.startsWith("..")||l(i)))return t}export async function unzip(e,r){const t=await new Promise((i,a)=>{A.open(e,{lazyEntries:!0,autoClose:!0},(n,o)=>{n?a(new u("unpack",`${e} is not a zip: ${n.message}`,{cause:n})):i(o)})});await new Promise((i,a)=>{const n=o=>{t.close(),a(o instanceof u?o:new u("unpack",`Unpacking ${e} failed: ${String(o)}`,{cause:o}))};t.on("error",n),t.on("end",()=>{i()}),t.on("entry",o=>{const c=o.fileName.split("\\").join("/"),s=inside(r,c);if(!s){n(new u("unpack",`${e} holds ${c}, outside its folder.`));return}const p=o.externalFileAttributes>>>16&65535;if((p&61440)===40960){n(new u("unpack",`${e} holds a link, ${c}.`));return}if(c.endsWith("/")){f(s,{recursive:!0}).then(()=>{t.readEntry()},n);return}t.openReadStream(o,(d,w)=>{if(d){n(d);return}f(S(s),{recursive:!0}).then(()=>W(w,h(s))).then(()=>p&73?$(s,493):void 0).then(()=>{t.readEntry()},n)})}),t.readEntry()})}export async function untgz(e,r){try{await j({file:e,cwd:r,strict:!0,filter:(t,i)=>{const a="type"in i?i.type:void 0;return inside(r,t)!==void 0&&a!=="SymbolicLink"&&a!=="Link"}})}catch(t){throw new u("unpack",`Unpacking ${e} failed: ${t instanceof Error?t.message:String(t)}`,{cause:t})}}export async function undmg(e,r){if(process.platform!=="darwin")throw new u("unpack",`${e} is a macOS disk image.`);const t=await y(m(z(),"allyhub-dmg-")),i=(a,n)=>new Promise((o,c)=>{k(a,n,s=>{s?c(new u("unpack",`${a} ${n[0]??""} ${e} failed: ${s.message}`,{cause:s})):o()})});await i("hdiutil",["attach","-nobrowse","-readonly","-noautoopen","-mountpoint",t,e]);try{for(const a of await g(t,{withFileTypes:!0})){if(a.isSymbolicLink()||a.name.startsWith("."))continue;const n=inside(r,a.name);n&&await i("ditto",[m(t,a.name),n])}}finally{await i("hdiutil",["detach",t,"-force"]).catch(()=>{}),await x(t,{recursive:!0,force:!0})}}export const native=e=>e.split("/").join(v);
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@allyhub-next/runtimes",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
7
7
  "types": "./dist/index.d.ts",
8
8
  "default": "./dist/index.js"
9
9
  },
10
+ "./node": {
11
+ "types": "./dist/node-program.d.ts",
12
+ "default": "./dist/node-program.js"
13
+ },
10
14
  "./manifest.json": "./manifest.json"
11
15
  },
12
16
  "private": true,
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "allyhub-pin-docx",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "name": "allyhub-pin-docx",
8
+ "dependencies": {
9
+ "docx": "9.15.1",
10
+ "fflate": "0.8.3"
11
+ }
12
+ },
13
+ "node_modules/@types/node": {
14
+ "version": "26.6.6",
15
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.6.tgz",
16
+ "integrity": "sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==",
17
+ "license": "MIT",
18
+ "dependencies": {
19
+ "undici-types": "~8.9.0"
20
+ }
21
+ },
22
+ "node_modules/docx": {
23
+ "version": "9.15.1",
24
+ "resolved": "https://registry.npmjs.org/docx/-/docx-9.15.1.tgz",
25
+ "integrity": "sha512-wp8K+wsDov+gjtIE4fA7g4SkCcuefIjwdYUc2OYa8YViCqxKvbASwSODpUXsTIH5BCmoWw7cMVOB1xl3A7Uqig==",
26
+ "license": "MIT",
27
+ "dependencies": {
28
+ "@types/node": "^26.6.2",
29
+ "fflate": "^0.8.3",
30
+ "nanoid": "^6.0.1"
31
+ },
32
+ "engines": {
33
+ "node": ">=16"
34
+ }
35
+ },
36
+ "node_modules/fflate": {
37
+ "version": "0.8.3",
38
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
39
+ "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==",
40
+ "license": "MIT"
41
+ },
42
+ "node_modules/nanoid": {
43
+ "version": "6.0.2",
44
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-6.0.2.tgz",
45
+ "integrity": "sha512-hIvVOb9Qr1p/9CNNLOe0OlWvgx/ziTsVwKN/GDSsuArN2K0wDiafP3s0SWmsm7o2BdnyS8Z9Z64NFBUbn6ziBg==",
46
+ "funding": [
47
+ {
48
+ "type": "github",
49
+ "url": "https://github.com/sponsors/ai"
50
+ }
51
+ ],
52
+ "license": "MIT",
53
+ "bin": {
54
+ "nanoid": "bin/nanoid.js"
55
+ },
56
+ "engines": {
57
+ "node": "^22 || ^24 || >=26"
58
+ }
59
+ },
60
+ "node_modules/undici-types": {
61
+ "version": "8.9.0",
62
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",
63
+ "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",
64
+ "license": "MIT"
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "allyhub-pin-docx",
3
+ "private": true,
4
+ "dependencies": {
5
+ "docx": "9.15.1",
6
+ "fflate": "0.8.3"
7
+ },
8
+ "allyhubSize": 25000000
9
+ }