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,5 +1,5 @@
1
1
  import { z } from "zod";
2
- export declare const REGISTRY_TYPES: readonly ["allyhub:component", "allyhub:template", "allyhub:scenery", "allyhub:model", "allyhub:skill"];
2
+ export declare const REGISTRY_TYPES: readonly ["allyhub:component", "allyhub:template", "allyhub:scenery", "allyhub:model", "allyhub:skill", "allyhub:lib"];
3
3
  export declare const RegistryFileSchema: z.ZodObject<{
4
4
  path: z.ZodString;
5
5
  target: z.ZodString;
@@ -73,6 +73,7 @@ export declare const RegistryItemSchema: z.ZodObject<{
73
73
  "allyhub:scenery": "allyhub:scenery";
74
74
  "allyhub:model": "allyhub:model";
75
75
  "allyhub:skill": "allyhub:skill";
76
+ "allyhub:lib": "allyhub:lib";
76
77
  }>;
77
78
  title: z.ZodString;
78
79
  description: z.ZodString;
@@ -137,13 +138,14 @@ export declare const RegistryIndexSchema: z.ZodObject<{
137
138
  "allyhub:scenery": "allyhub:scenery";
138
139
  "allyhub:model": "allyhub:model";
139
140
  "allyhub:skill": "allyhub:skill";
141
+ "allyhub:lib": "allyhub:lib";
140
142
  }>;
141
143
  name: z.ZodString;
142
144
  title: z.ZodString;
143
145
  description: z.ZodString;
144
146
  version: z.ZodOptional<z.ZodString>;
145
- preview: z.ZodOptional<z.ZodString>;
146
147
  categories: z.ZodDefault<z.ZodArray<z.ZodString>>;
148
+ preview: z.ZodOptional<z.ZodString>;
147
149
  card: z.ZodOptional<z.ZodObject<{
148
150
  category: z.ZodEnum<{
149
151
  video: "video";
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{z as t}from"zod";export const REGISTRY_TYPES=["allyhub:component","allyhub:template","allyhub:scenery","allyhub:model","allyhub:skill"];const e=t.string().regex(/^[a-z0-9][a-z0-9-]*$/u);export const RegistryFileSchema=t.strictObject({path:t.string().min(1),target:t.string().min(1),sha256:t.string().regex(/^[0-9a-f]{64}$/u),content:t.string().optional()}),RegistryAssetSchema=t.strictObject({source:t.literal("polyhaven"),id:t.string().min(1),resolution:t.string().min(1).optional(),maps:t.array(t.string().min(1)).optional()}),RegistryBakeSchema=t.strictObject({scenery:t.string().min(1),digest:t.string().regex(/^[0-9a-f]+$/u),renderer:t.string().min(1),sha256:t.string().regex(/^[0-9a-f]{64}$/u),size:t.number().int().positive(),url:t.url()}),SkillCardWordsSchema=t.strictObject({title:t.string().min(1),description:t.string().min(1),prompt:t.string().min(1).optional()}),SkillCardSchema=t.strictObject({category:t.enum(["video","writing","research"]),order:t.number().int().positive(),cover:t.string().optional(),words:SkillCardWordsSchema,languages:t.record(t.string(),SkillCardWordsSchema.partial()).default({})}),RegistryItemSchema=t.strictObject({$schema:t.string().optional(),name:e,type:t.enum(REGISTRY_TYPES),title:t.string().min(1),description:t.string().min(1),author:t.string().optional(),license:t.string().min(1),dependencies:t.array(t.string()).default([]),registryDependencies:t.array(e).default([]),files:t.array(RegistryFileSchema).min(1),assets:t.array(RegistryAssetSchema).default([]),bakes:t.array(RegistryBakeSchema).default([]),categories:t.array(t.string()).default([]),preview:t.string().optional(),version:t.string().optional(),card:SkillCardSchema.optional()}),RegistryIndexSchema=t.strictObject({$schema:t.string().optional(),name:t.string().min(1),homepage:t.url().optional(),items:t.array(RegistryItemSchema.pick({name:!0,type:!0,title:!0,description:!0,categories:!0,preview:!0,version:!0,card:!0}))});
2
+ import{z as t}from"zod";export const REGISTRY_TYPES=["allyhub:component","allyhub:template","allyhub:scenery","allyhub:model","allyhub:skill","allyhub:lib"];const e=t.string().regex(/^[a-z0-9][a-z0-9-]*$/u);export const RegistryFileSchema=t.strictObject({path:t.string().min(1),target:t.string().min(1),sha256:t.string().regex(/^[0-9a-f]{64}$/u),content:t.string().optional()}),RegistryAssetSchema=t.strictObject({source:t.literal("polyhaven"),id:t.string().min(1),resolution:t.string().min(1).optional(),maps:t.array(t.string().min(1)).optional()}),RegistryBakeSchema=t.strictObject({scenery:t.string().min(1),digest:t.string().regex(/^[0-9a-f]+$/u),renderer:t.string().min(1),sha256:t.string().regex(/^[0-9a-f]{64}$/u),size:t.number().int().positive(),url:t.url()}),SkillCardWordsSchema=t.strictObject({title:t.string().min(1),description:t.string().min(1),prompt:t.string().min(1).optional()}),SkillCardSchema=t.strictObject({category:t.enum(["video","writing","research"]),order:t.number().int().positive(),cover:t.string().optional(),words:SkillCardWordsSchema,languages:t.record(t.string(),SkillCardWordsSchema.partial()).default({})}),RegistryItemSchema=t.strictObject({$schema:t.string().optional(),name:e,type:t.enum(REGISTRY_TYPES),title:t.string().min(1),description:t.string().min(1),author:t.string().optional(),license:t.string().min(1),dependencies:t.array(t.string()).default([]),registryDependencies:t.array(e).default([]),files:t.array(RegistryFileSchema).min(1),assets:t.array(RegistryAssetSchema).default([]),bakes:t.array(RegistryBakeSchema).default([]),categories:t.array(t.string()).default([]),preview:t.string().optional(),version:t.string().optional(),card:SkillCardSchema.optional()}),RegistryIndexSchema=t.strictObject({$schema:t.string().optional(),name:t.string().min(1),homepage:t.url().optional(),items:t.array(RegistryItemSchema.pick({name:!0,type:!0,title:!0,description:!0,categories:!0,preview:!0,version:!0,card:!0}))});
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{ACCOUNT_PATH as A,DEVICES_PATH as o,METADATA_PATH as P}from"./auth.js";import{AUTO_TOP_UP_PATH as e,BILLING_CHECKOUT_PATH as _,BILLING_PLANS_PATH as r,BILLING_PORTAL_PATH as L,BILLING_SUMMARY_PATH as O,BILLING_USAGE_PATH as G,CATALOG_PATH as S,FILES_PATH as T,LLM_MESSAGES_PATH as I,LLM_MODELS_PATH as H}from"./cloud.js";import{MEMBERS_PATH as p,ORGANIZATIONS_PATH as E,ORGANIZATION_PATH as i,STUDIO_OPEN_PATH as n,STUDIO_PATH as a,STUDIO_WAKE_PATH as s}from"./teams.js";export const CLIENT_ROUTES=[{method:"GET",path:P},{method:"GET",path:A},{method:"GET",path:o},{method:"DELETE",path:`${o}/:id`},{method:"GET",path:r},{method:"GET",path:O},{method:"GET",path:G},{method:"POST",path:_},{method:"POST",path:L},{method:"PUT",path:e},{method:"DELETE",path:e},{method:"GET",path:H},{method:"POST",path:I},{method:"GET",path:S},{method:"POST",path:"/api/tools/:name/calls"},{method:"GET",path:"/api/calls/:id"},{method:"POST",path:T},{method:"POST",path:`${T}/:id/done`},{method:"GET",path:`${T}/:id/content`},{method:"GET",path:E},{method:"POST",path:`${E}/:id/restore`},{method:"DELETE",path:i},{method:"GET",path:p},{method:"PUT",path:`${p}/:userId/limit`},{method:"GET",path:a},{method:"DELETE",path:a},{method:"POST",path:n},{method:"PUT",path:s}],probePath=t=>t.path.replace(/:[A-Za-z]+/gu,"probe");export function routeMissing(t,d,m){if(d!==404)return!1;const h=m.error;return h?.code==="not_found"&&h.message===`There is no ${t.method} ${probePath(t)}.`}
2
+ import{ACCOUNT_DELETE_PATH as d,ACCOUNT_EXPORT_PATH as m,ACCOUNT_PATH as _,BROWSER_LINK_PATH as O,DEVICES_PATH as o,METADATA_PATH as r}from"./auth.js";import{AUTO_TOP_UP_PATH as e,BILLING_CHECKOUT_PATH as L,BILLING_PLANS_PATH as S,BILLING_PORTAL_PATH as G,BILLING_SUMMARY_PATH as H,BILLING_USAGE_PATH as I,CATALOG_PATH as i,FILES_PATH as T,LLM_MESSAGES_PATH as N,LLM_MODELS_PATH as n}from"./cloud.js";import{MEMBERS_PATH as E,ORGANIZATIONS_PATH as p,ORGANIZATION_PATH as U,STUDIO_OPEN_PATH as s,STUDIO_PATH as a,STUDIO_WAKE_PATH as C}from"./teams.js";export const CLIENT_ROUTES=[{method:"GET",path:r},{method:"GET",path:_},{method:"GET",path:m},{method:"POST",path:d},{method:"GET",path:o},{method:"DELETE",path:`${o}/:id`},{method:"POST",path:O},{method:"GET",path:S},{method:"GET",path:H},{method:"GET",path:I},{method:"POST",path:L},{method:"POST",path:G},{method:"PUT",path:e},{method:"DELETE",path:e},{method:"GET",path:n},{method:"POST",path:N},{method:"GET",path:i},{method:"POST",path:"/api/tools/:name/calls"},{method:"GET",path:"/api/calls/:id"},{method:"POST",path:T},{method:"POST",path:`${T}/:id/done`},{method:"GET",path:`${T}/:id/content`},{method:"GET",path:p},{method:"POST",path:`${p}/:id/restore`},{method:"DELETE",path:U},{method:"GET",path:E},{method:"PUT",path:`${E}/:userId/limit`},{method:"GET",path:a},{method:"DELETE",path:a},{method:"POST",path:s},{method:"PUT",path:C}],probePath=t=>t.path.replace(/:[A-Za-z]+/gu,"probe");export function routeMissing(t,A,P){if(A!==404)return!1;const h=P.error;return h?.code==="not_found"&&h.message===`There is no ${t.method} ${probePath(t)}.`}
@@ -10,6 +10,7 @@ export declare const RuntimeFileSchema: z.ZodObject<{
10
10
  none: "none";
11
11
  zip: "zip";
12
12
  tgz: "tgz";
13
+ dmg: "dmg";
13
14
  }>>;
14
15
  name: z.ZodOptional<z.ZodString>;
15
16
  check: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -39,6 +40,7 @@ export declare const RuntimeSchema: z.ZodObject<{
39
40
  none: "none";
40
41
  zip: "zip";
41
42
  tgz: "tgz";
43
+ dmg: "dmg";
42
44
  }>>;
43
45
  name: z.ZodOptional<z.ZodString>;
44
46
  check: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -72,6 +74,7 @@ export declare const RuntimeManifestSchema: z.ZodObject<{
72
74
  none: "none";
73
75
  zip: "zip";
74
76
  tgz: "tgz";
77
+ dmg: "dmg";
75
78
  }>>;
76
79
  name: z.ZodOptional<z.ZodString>;
77
80
  check: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{z as t}from"zod";export const PLATFORMS=["darwin-arm64","darwin-x64","linux-x64","linux-arm64","win32-x64"];const s=t.string().regex(/^[0-9a-f]{64}$/u),i=t.string().min(1).refine(e=>!e.startsWith("/")&&!e.split(/[\\/]/u).includes(".."),{message:"A path stays inside the runtime's folder."});export const RuntimeFileSchema=t.strictObject({url:t.url({protocol:/^https$/u}),sha256:s,size:t.int().positive(),unpack:t.enum(["none","zip","tgz"]).default("none"),name:i.optional(),check:t.array(t.strictObject({path:i,sha256:s})).default([]),executable:t.boolean().default(!1),bins:t.record(t.string().regex(/^[a-z0-9][a-z0-9-]*$/u),i).default({})}),RuntimeSchema=t.strictObject({about:t.string().min(1),version:t.string().min(1),license:t.string().min(1),homepage:t.url().optional(),platforms:t.partialRecord(t.union([t.enum(PLATFORMS),t.literal("any")]),t.array(RuntimeFileSchema).min(1))}),RuntimeManifestSchema=t.strictObject({$schema:t.string().optional(),version:t.literal(1),runtimes:t.record(t.string().regex(/^[a-z0-9][a-z0-9-]*$/u),RuntimeSchema)});export function platformOf(e,n){const r=`${e}-${n}`;return PLATFORMS.includes(r)?r:void 0}export function binsOf(e){return Object.assign({},...e.map(n=>n.bins))}export function filesFor(e,n){return e.platforms[n]??e.platforms.any}
2
+ import{z as t}from"zod";export const PLATFORMS=["darwin-arm64","darwin-x64","linux-x64","linux-arm64","win32-x64"];const s=t.string().regex(/^[0-9a-f]{64}$/u),i=t.string().min(1).refine(e=>!e.startsWith("/")&&!e.split(/[\\/]/u).includes(".."),{message:"A path stays inside the runtime's folder."});export const RuntimeFileSchema=t.strictObject({url:t.url({protocol:/^https$/u}),sha256:s,size:t.int().positive(),unpack:t.enum(["none","zip","tgz","dmg"]).default("none"),name:i.optional(),check:t.array(t.strictObject({path:i,sha256:s})).default([]),executable:t.boolean().default(!1),bins:t.record(t.string().regex(/^[a-z0-9][a-z0-9-]*$/u),i).default({})}),RuntimeSchema=t.strictObject({about:t.string().min(1),version:t.string().min(1),license:t.string().min(1),homepage:t.url().optional(),platforms:t.partialRecord(t.union([t.enum(PLATFORMS),t.literal("any")]),t.array(RuntimeFileSchema).min(1))}),RuntimeManifestSchema=t.strictObject({$schema:t.string().optional(),version:t.literal(1),runtimes:t.record(t.string().regex(/^[a-z0-9][a-z0-9-]*$/u),RuntimeSchema)});export function platformOf(e,n){const r=`${e}-${n}`;return PLATFORMS.includes(r)?r:void 0}export function binsOf(e){return Object.assign({},...e.map(n=>n.bins))}export function filesFor(e,n){return e.platforms[n]??e.platforms.any}
@@ -67,11 +67,15 @@ export declare const CheckStateSchema: z.ZodObject<{
67
67
  export type CheckState = z.infer<typeof CheckStateSchema>;
68
68
  export declare const EXPORT_STATES: readonly ["queued", "running", "done", "failed", "cancelled"];
69
69
  /** An export the person asked for, one at a time. */
70
+ /** The choices an export is made with (`EXPORT_OFFER`). */
71
+ export declare const ExportOptionsSchema: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>;
72
+ export type ExportOptions = z.infer<typeof ExportOptionsSchema>;
70
73
  export declare const ExportJobSchema: z.ZodObject<{
71
74
  id: z.ZodString;
72
75
  item: z.ZodString;
73
76
  versions: z.ZodArray<z.ZodString>;
74
77
  types: z.ZodArray<z.ZodString>;
78
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
75
79
  state: z.ZodEnum<{
76
80
  running: "running";
77
81
  done: "done";
@@ -105,6 +109,7 @@ export declare const PROJECT_TOOLS: {
105
109
  doc: "doc";
106
110
  sheet: "sheet";
107
111
  scenery: "scenery";
112
+ model: "model";
108
113
  website: "website";
109
114
  }>;
110
115
  dir: z.ZodString;
@@ -131,6 +136,17 @@ export declare const PROJECT_TOOLS: {
131
136
  lang: z.ZodOptional<z.ZodString>;
132
137
  }, z.core.$strict>>;
133
138
  }, z.core.$strict>>;
139
+ readonly "slides/deck": MethodSpec<z.ZodObject<{
140
+ item: z.ZodString;
141
+ }, z.core.$strict>, z.ZodObject<{
142
+ piece: z.ZodString;
143
+ file: z.ZodString;
144
+ prefix: z.ZodString;
145
+ layouts: z.ZodArray<z.ZodString>;
146
+ components: z.ZodRecord<z.ZodString, z.ZodUnknown>;
147
+ generators: z.ZodArray<z.ZodString>;
148
+ scripts: z.ZodRecord<z.ZodString, z.ZodString>;
149
+ }, z.core.$strict>>;
134
150
  readonly "video/stage": MethodSpec<z.ZodObject<{
135
151
  start: z.ZodOptional<z.ZodObject<{
136
152
  t: z.ZodOptional<z.ZodNumber>;
@@ -140,6 +156,7 @@ export declare const PROJECT_TOOLS: {
140
156
  }, z.core.$strict>>;
141
157
  play: z.ZodOptional<z.ZodBoolean>;
142
158
  chrome: z.ZodOptional<z.ZodBoolean>;
159
+ edit: z.ZodOptional<z.ZodBoolean>;
143
160
  item: z.ZodString;
144
161
  version: z.ZodOptional<z.ZodString>;
145
162
  }, z.core.$strict>, z.ZodObject<{
@@ -173,6 +190,19 @@ export declare const PROJECT_TOOLS: {
173
190
  height: z.ZodInt;
174
191
  duration: z.ZodNumber;
175
192
  }, z.core.$strict>>;
193
+ readonly "video/stills": MethodSpec<z.ZodObject<{
194
+ moments: z.ZodArray<z.ZodNumber>;
195
+ item: z.ZodString;
196
+ version: z.ZodOptional<z.ZodString>;
197
+ }, z.core.$strict>, z.ZodObject<{
198
+ stills: z.ZodArray<z.ZodObject<{
199
+ t: z.ZodNumber;
200
+ image: z.ZodObject<{
201
+ mime: z.ZodString;
202
+ data: z.ZodBase64;
203
+ }, z.core.$strict>;
204
+ }, z.core.$strict>>;
205
+ }, z.core.$strict>>;
176
206
  readonly "check/results": MethodSpec<z.ZodObject<{}, z.core.$strict>, z.ZodObject<{
177
207
  status: z.ZodEnum<{
178
208
  off: "off";
@@ -209,12 +239,14 @@ export declare const PROJECT_TOOLS: {
209
239
  item: z.ZodString;
210
240
  versions: z.ZodOptional<z.ZodArray<z.ZodString>>;
211
241
  types: z.ZodOptional<z.ZodArray<z.ZodString>>;
242
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
212
243
  }, z.core.$strict>, z.ZodObject<{
213
244
  job: z.ZodObject<{
214
245
  id: z.ZodString;
215
246
  item: z.ZodString;
216
247
  versions: z.ZodArray<z.ZodString>;
217
248
  types: z.ZodArray<z.ZodString>;
249
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
218
250
  state: z.ZodEnum<{
219
251
  running: "running";
220
252
  done: "done";
@@ -236,6 +268,7 @@ export declare const PROJECT_TOOLS: {
236
268
  item: z.ZodString;
237
269
  versions: z.ZodArray<z.ZodString>;
238
270
  types: z.ZodArray<z.ZodString>;
271
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
239
272
  state: z.ZodEnum<{
240
273
  running: "running";
241
274
  done: "done";
@@ -247,7 +280,11 @@ export declare const PROJECT_TOOLS: {
247
280
  files: z.ZodArray<z.ZodString>;
248
281
  error: z.ZodOptional<z.ZodString>;
249
282
  }, z.core.$strict>>;
283
+ reveal: z.ZodBoolean;
250
284
  }, z.core.$strict>>;
285
+ readonly "export/reveal": MethodSpec<z.ZodObject<{
286
+ path: z.ZodString;
287
+ }, z.core.$strict>, z.ZodObject<{}, z.core.$strict>>;
251
288
  readonly "scenery/viewer": MethodSpec<z.ZodObject<{
252
289
  item: z.ZodString;
253
290
  camera: z.ZodOptional<z.ZodObject<{
@@ -317,6 +354,7 @@ export declare const TOOL_NOTIFICATIONS: {
317
354
  item: z.ZodString;
318
355
  versions: z.ZodArray<z.ZodString>;
319
356
  types: z.ZodArray<z.ZodString>;
357
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
320
358
  state: z.ZodEnum<{
321
359
  running: "running";
322
360
  done: "done";
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{z as e}from"zod";import{KINDS as c}from"@allyhub-next/formats";import{PathSchema as n}from"./files.js";import{method as t,notification as r}from"./jsonrpc.js";const i={item:n,version:e.string().optional()};export const ImageSchema=e.strictObject({mime:e.string().regex(/^image\//u),data:e.base64()}),ProblemSchema=e.looseObject({code:e.string(),level:e.enum(["error","warn"]),message:e.string(),piece:e.string().optional(),part:e.string().optional(),t:e.number().optional()}),FactSchema=e.looseObject({kind:e.string(),data:e.unknown()}),TimelineSchema=e.looseObject({fps:e.number(),width:e.number(),height:e.number(),duration:e.number(),parts:e.array(e.unknown())}),CHECK_STATES=["off","waiting","running","done","failed"],CheckStateSchema=e.strictObject({status:e.enum(CHECK_STATES),revision:e.int().nonnegative(),problems:e.array(ProblemSchema),facts:e.array(FactSchema),versions:e.strictObject({total:e.int(),loaded:e.int(),reused:e.int()}).optional(),error:e.string().optional()}),EXPORT_STATES=["queued","running","done","failed","cancelled"],ExportJobSchema=e.strictObject({id:e.string(),item:n,versions:e.array(e.string()),types:e.array(e.string()),state:e.enum(EXPORT_STATES),progress:e.number().min(0).max(1),files:e.array(n),error:e.string().optional()}),IndexJobSchema=e.strictObject({file:n,status:e.enum(["running","done","failed"]),message:e.string(),share:e.number().min(0).max(1).optional()});const s=e.tuple([e.number(),e.number(),e.number()]),a=e.strictObject({url:e.string(),probe:e.string()});export const PROJECT_TOOLS={"project/items":t(e.strictObject({}),e.strictObject({items:e.array(e.strictObject({kind:e.enum(c),dir:n,entry:n,title:e.string().optional()})),folder:e.string(),name:e.string(),revision:e.int().nonnegative()}),"The project's items, as the build finds them."),"video/versions":t(e.strictObject({item:n}),e.strictObject({piece:e.string(),kind:e.enum(["video","slides"]),title:e.string().optional(),width:e.number(),height:e.number(),versions:e.array(e.strictObject({key:e.string(),lang:e.string().optional()}))}),"A video's or a deck's versions, one per language: what its stage, its timeline and its exports are asked for."),"video/stage":t(e.strictObject({...i,start:e.strictObject({t:e.number().nonnegative().optional(),part:e.string().optional(),offset:e.number().nonnegative().optional(),dur:e.number().positive().optional()}).optional(),play:e.boolean().optional(),chrome:e.boolean().optional()}),a,"The address of a version's stage page, for a sandboxed frame: it plays the piece and talks to its parent by postMessage."),"video/timeline":t(e.strictObject(i),e.strictObject({timeline:TimelineSchema,text:e.array(e.unknown())}),"A version's timeline, drawn nowhere."),"video/still":t(e.strictObject({...i,t:e.number().nonnegative().optional()}),e.strictObject({t:e.number(),image:ImageSchema,width:e.int().positive(),height:e.int().positive(),duration:e.number().nonnegative()}),"A moment of a version as the render draws it, as a picture."),"check/results":t(e.strictObject({}),CheckStateSchema,"The check run after edits, as it stands."),"check/run":t(e.strictObject({}),e.strictObject({}),"Runs the check again now."),"export/start":t(e.strictObject({item:n,versions:e.array(e.string()).optional(),types:e.array(e.string().min(1)).max(10).optional()}),e.strictObject({job:ExportJobSchema}),"Exports an item (its versions, as file types) into .allyhub/out/; `export/changed` says how it goes."),"export/cancel":t(e.strictObject({job:e.string()}),e.strictObject({}),"Stops an export."),"export/list":t(e.strictObject({}),e.strictObject({jobs:e.array(ExportJobSchema)}),"The exports asked for since the server started."),"scenery/viewer":t(e.strictObject({item:n,camera:e.strictObject({position:s,target:s}).optional()}),a,"The address of a scenery's viewer page, for a sandboxed frame: it tells what the person does by postMessage.")},AGENT_DOES={"project/items":{files:"the project's folder"},"video/versions":{command:"inspect combos"},"video/stage":{command:"frames"},"video/timeline":{command:"inspect timeline"},"video/still":{command:"frames"},"check/results":{command:"inspect"},"check/run":{command:"check"},"export/start":{command:"render"},"export/cancel":{command:"render"},"export/list":{files:".allyhub/out/"},"scenery/viewer":{command:"scenery view"}};export function toolSpec(o){return Object.hasOwn(PROJECT_TOOLS,o)?PROJECT_TOOLS[o]:void 0}export const TOOL_NOTIFICATIONS={"project/changed":r(e.strictObject({revision:e.int().nonnegative()}),"The build saw a change: a stage or a timeline asked for now is the new one's."),"check/changed":r(CheckStateSchema,"The check started, ended or failed."),"export/changed":r(e.strictObject({job:ExportJobSchema}),"An export moved on."),"index/changed":r(e.strictObject({jobs:e.array(IndexJobSchema)}),"Making what the media index lacks moved on.")};
2
+ import{z as e}from"zod";import{KINDS as c}from"@allyhub-next/formats";import{PathSchema as r}from"./files.js";import{method as t,notification as i}from"./jsonrpc.js";const n={item:r,version:e.string().optional()};export const ImageSchema=e.strictObject({mime:e.string().regex(/^image\//u),data:e.base64()}),ProblemSchema=e.looseObject({code:e.string(),level:e.enum(["error","warn"]),message:e.string(),piece:e.string().optional(),part:e.string().optional(),t:e.number().optional()}),FactSchema=e.looseObject({kind:e.string(),data:e.unknown()}),TimelineSchema=e.looseObject({fps:e.number(),width:e.number(),height:e.number(),duration:e.number(),parts:e.array(e.unknown())}),CHECK_STATES=["off","waiting","running","done","failed"],CheckStateSchema=e.strictObject({status:e.enum(CHECK_STATES),revision:e.int().nonnegative(),problems:e.array(ProblemSchema),facts:e.array(FactSchema),versions:e.strictObject({total:e.int(),loaded:e.int(),reused:e.int()}).optional(),error:e.string().optional()}),EXPORT_STATES=["queued","running","done","failed","cancelled"],ExportOptionsSchema=e.record(e.string(),e.union([e.string(),e.boolean()])),ExportJobSchema=e.strictObject({id:e.string(),item:r,versions:e.array(e.string()),types:e.array(e.string()),options:ExportOptionsSchema.optional(),state:e.enum(EXPORT_STATES),progress:e.number().min(0).max(1),files:e.array(r),error:e.string().optional()}),IndexJobSchema=e.strictObject({file:r,status:e.enum(["running","done","failed"]),message:e.string(),share:e.number().min(0).max(1).optional()});const o=e.tuple([e.number(),e.number(),e.number()]),a=e.strictObject({url:e.string(),probe:e.string()});export const PROJECT_TOOLS={"project/items":t(e.strictObject({}),e.strictObject({items:e.array(e.strictObject({kind:e.enum(c),dir:r,entry:r,title:e.string().optional()})),folder:e.string(),name:e.string(),revision:e.int().nonnegative()}),"The project's items, as the build finds them."),"video/versions":t(e.strictObject({item:r}),e.strictObject({piece:e.string(),kind:e.enum(["video","slides"]),title:e.string().optional(),width:e.number(),height:e.number(),versions:e.array(e.strictObject({key:e.string(),lang:e.string().optional()}))}),"A video's or a deck's versions, one per language: what its stage, its timeline and its exports are asked for."),"slides/deck":t(e.strictObject({item:r}),e.strictObject({piece:e.string(),file:r,prefix:e.string(),layouts:e.array(e.string()),components:e.record(e.string(),e.unknown()),generators:e.array(e.string()),scripts:e.record(e.string(),r)}),"A deck's layouts, components and generators, and its files: slides.yaml (its slides) and its script in each language (their words and notes), which the deck's editor edits."),"video/stage":t(e.strictObject({...n,start:e.strictObject({t:e.number().nonnegative().optional(),part:e.string().optional(),offset:e.number().nonnegative().optional(),dur:e.number().positive().optional()}).optional(),play:e.boolean().optional(),chrome:e.boolean().optional(),edit:e.boolean().optional()}),a,"The address of a version's stage page, for a sandboxed frame: it plays the piece and talks to its parent by postMessage."),"video/timeline":t(e.strictObject(n),e.strictObject({timeline:TimelineSchema,text:e.array(e.unknown())}),"A version's timeline, drawn nowhere."),"video/still":t(e.strictObject({...n,t:e.number().nonnegative().optional()}),e.strictObject({t:e.number(),image:ImageSchema,width:e.int().positive(),height:e.int().positive(),duration:e.number().nonnegative()}),"A moment of a version as the render draws it, as a picture."),"video/stills":t(e.strictObject({...n,moments:e.array(e.number().nonnegative()).min(1).max(32)}),e.strictObject({stills:e.array(e.strictObject({t:e.number(),image:ImageSchema}))}),"Several moments of a version as the render draws them: what `video/still` gives, on one page."),"check/results":t(e.strictObject({}),CheckStateSchema,"The check run after edits, as it stands."),"check/run":t(e.strictObject({}),e.strictObject({}),"Runs the check again now."),"export/start":t(e.strictObject({item:r,versions:e.array(e.string()).optional(),types:e.array(e.string().min(1)).max(10).optional(),options:ExportOptionsSchema.optional()}),e.strictObject({job:ExportJobSchema}),"Exports an item (its versions, as file types) into .allyhub/out/; `export/changed` says how it goes."),"export/cancel":t(e.strictObject({job:e.string()}),e.strictObject({}),"Stops an export."),"export/list":t(e.strictObject({}),e.strictObject({jobs:e.array(ExportJobSchema),reveal:e.boolean()}),"The exports asked for since the server started."),"export/reveal":t(e.strictObject({path:r}),e.strictObject({}),"Shows an exported file in the person's file manager, where the server runs on their computer (`export/list`'s `reveal`)."),"scenery/viewer":t(e.strictObject({item:r,camera:e.strictObject({position:o,target:o}).optional()}),a,"The address of a scenery's viewer page, for a sandboxed frame: it tells what the person does by postMessage.")},AGENT_DOES={"project/items":{files:"the project's folder"},"video/versions":{command:"inspect combos"},"slides/deck":{files:"slides.ts, slides.yaml and the item's script.<locale>.yaml"},"video/stage":{command:"frames"},"video/timeline":{command:"inspect timeline"},"video/still":{command:"frames"},"video/stills":{command:"frames"},"check/results":{command:"inspect"},"check/run":{command:"check"},"export/start":{command:"render"},"export/cancel":{command:"render"},"export/list":{files:".allyhub/out/"},"export/reveal":{files:".allyhub/out/"},"scenery/viewer":{command:"scenery view"}};export function toolSpec(s){return Object.hasOwn(PROJECT_TOOLS,s)?PROJECT_TOOLS[s]:void 0}export const TOOL_NOTIFICATIONS={"project/changed":i(e.strictObject({revision:e.int().nonnegative()}),"The build saw a change: a stage or a timeline asked for now is the new one's."),"check/changed":i(CheckStateSchema,"The check started, ended or failed."),"export/changed":i(e.strictObject({job:ExportJobSchema}),"An export moved on."),"index/changed":i(e.strictObject({jobs:e.array(IndexJobSchema)}),"Making what the media index lacks moved on.")};
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/protocol",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{createHash as O}from"node:crypto";import{lstat as T,mkdir as b,readFile as p,rename as v,symlink as B,writeFile as A}from"node:fs/promises";import{dirname as g,isAbsolute as W,join as w,relative as $,resolve as x,sep as S}from"node:path";import{BAKE_DIR as C,PACKAGE_FILE as D}from"@allyhub-next/formats";import{RegistryIndexSchema as E,RegistryItemSchema as I}from"@allyhub-next/protocol";import{z as R}from"zod";export class RegistryError extends Error{code;hint;constructor(o,i,s={}){super(i,s.cause===void 0?void 0:{cause:s.cause}),this.name="RegistryError",this.code=o,this.hint=s.hint}}export const itemFile=e=>`r/${e}.json`;async function M(e,o,i){let s;try{s=await p(e,"utf8")}catch(n){throw new RegistryError("no-registry",`There is no ${i} at ${e}.`,{cause:n})}let t;try{t=JSON.parse(s)}catch(n){throw new RegistryError("bad-registry",`${e} is not JSON.`,{cause:n})}const c=o.safeParse(t);if(!c.success)throw new RegistryError("bad-registry",`${e} is not a ${i}: ${R.prettifyError(c.error)}`);return c.data}export function folderRegistry(e){let o;const i=s=>{const t=x(e,s);if($(e,t).startsWith("..")||W($(e,t)))throw new RegistryError("bad-registry",`The registry names a file outside it: ${s}.`);return t};return{name:e,index:()=>o??=M(w(e,"registry.json"),E,"registry index"),async item(s){if((await this.index()).items.some(c=>c.name===s))return M(w(e,itemFile(s)),I,"registry item")},async file(s){return new Uint8Array(await p(i(s)))}}}export function urlRegistry(e,o=fetch){const i=e.endsWith("/")?e:`${e}/`;let s;const t=async n=>{let d;try{d=await o(new URL(n,i))}catch(f){throw new RegistryError("no-registry",`${i}${n} could not be read.`,{cause:f,hint:"Check the connection and run the same command again."})}if(!d.ok)throw new RegistryError("no-registry",`${i}${n} answered ${String(d.status)}.`);return d},c=async(n,d,f)=>{const u=d.safeParse(await(await t(n)).json());if(!u.success)throw new RegistryError("bad-registry",`${i}${n} is not a ${f}: ${R.prettifyError(u.error)}`);return u.data};return{name:i,index:()=>s??=c("registry.json",E,"registry index"),async item(n){if((await this.index()).items.some(f=>f.name===n))return c(itemFile(n),I,"registry item")},async file(n){return new Uint8Array(await(await t(n)).arrayBuffer())}}}export const registryAt=e=>/^https?:\/\//u.test(e)?urlRegistry(e):folderRegistry(e),sha256=e=>O("sha256").update(e).digest("hex");const F=e=>{const o=e.indexOf("@",e.startsWith("@")?1:0);return o<0?e:e.slice(0,o)};export async function planAdd(e,o,i){const s=[],t=new Set,c=async(r,a)=>{if(t.has(r))return;t.add(r);const l=await e.item(r);if(!l)throw new RegistryError("no-item",a===void 0?`The registry has no ${r}.`:`${a} needs ${r}, which the registry does not have.`,{hint:`It has ${(await e.index()).items.map(h=>h.name).join(", ")}.`});for(const h of l.registryDependencies)await c(h,r);s.push(l)};for(const r of o)await c(r);const n=x(i.root),d=[];for(const r of s)for(const a of r.files){const l=a.target.replaceAll("{dir}",i.dir).replaceAll("\\","/"),h=x(n,l);if(!h.startsWith(n+S))throw new RegistryError("outside",`${r.name}'s file ${a.path} would go outside the project (${l}).`);const m=a.content===void 0?await e.file(a.path):new TextEncoder().encode(a.content);if(sha256(m)!==a.sha256)throw new RegistryError("bad-file",`${r.name}'s file ${a.path} is not the one the registry lists (its sha256 differs).`);const j=await p(h).catch(()=>{}),N=j===void 0?"added":sha256(j)===a.sha256?"up to date":i.force?"replaced":"differs";d.push({item:r.name,path:$(n,h).split(S).join("/"),bytes:m,status:N})}let f=new Set;try{const r=JSON.parse(await p(w(n,D),"utf8"));f=new Set(["dependencies","devDependencies","peerDependencies"].flatMap(a=>Object.keys(r[a]??{})))}catch{}const u=[...new Set(s.flatMap(r=>r.dependencies.map(F)))].filter(r=>!f.has(r)),y=new Map;for(const r of s.flatMap(a=>a.assets)){const a=y.get(r.id);if(!a){y.set(r.id,r);continue}const l=[a.resolution,r.resolution].filter(h=>h!==void 0).sort((h,m)=>Number.parseInt(m,10)-Number.parseInt(h,10))[0];y.set(r.id,{source:a.source,id:a.id,...l===void 0?{}:{resolution:l},...a.maps&&r.maps?{maps:[...new Set([...a.maps,...r.maps])]}:{}})}const k=new Map;for(const r of s.flatMap(a=>a.bakes))k.set(`${r.digest}.${r.renderer}`,r);return{items:s,files:d,missing:u,assets:[...y.values()],bakes:[...k.values()]}}export const bakePath=e=>`${C}/${e.digest}.${e.renderer}.bin`;export async function fetchBakes(e,o,i=fetch){const s=[];for(const t of o){const c=bakePath(t),n=w(e,c),d=await p(n).catch(()=>{});if(d&&sha256(d)===t.sha256){s.push({bake:t,path:c,status:"up to date"});continue}let f;try{const u=await i(t.url);if(!u.ok)throw new Error(`${t.url} answered ${String(u.status)}`);f=new Uint8Array(await u.arrayBuffer())}catch(u){throw new RegistryError("no-registry",`The baked light for ${t.scenery} could not be downloaded.`,{cause:u,hint:"Check the connection and run the same command again; without it the scenery is drawn unbaked until allyhub scenery bake makes one."})}if(sha256(f)!==t.sha256)throw new RegistryError("bad-file",`The baked light for ${t.scenery} is not the one the registry lists (its sha256 differs).`);await b(g(n),{recursive:!0}),await A(`${n}.part`,f),await v(`${n}.part`,n),s.push({bake:t,path:c,status:"added"})}return s}export async function applyAdd(e,o){const i=o.files.filter(s=>s.status==="differs");if(i.length>0)throw new RegistryError("conflict",`${i.map(s=>s.path).join(", ")} ${i.length===1?"differs":"differ"} from the registry's: the project's copy has changes.`,{hint:"Keep the project's copy, or replace it with the registry's with --force (its changes are lost)."});for(const s of o.files){if(s.status==="up to date")continue;const t=w(e,s.path);await b(g(t),{recursive:!0}),await A(`${t}.part`,s.bytes),await v(`${t}.part`,t)}for(const s of o.items.filter(t=>t.type==="allyhub:skill")){const t=w(e,".claude","skills",s.name);await T(t).catch(()=>{})||(await b(g(t),{recursive:!0}),await B($(g(t),w(e,".agents","skills",s.name)),t))}}export function searchIndex(e,o){const i=t=>t.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean),s=i(o);return e.items.filter(t=>{const c=i([t.name,t.title,t.description,...t.categories].join(" "));return s.every(n=>c.some(d=>d.startsWith(n)))})}
2
+ import{createHash as O}from"node:crypto";import{lstat as T,mkdir as b,readFile as p,rename as v,symlink as B,writeFile as A}from"node:fs/promises";import{dirname as g,isAbsolute as W,join as w,relative as $,resolve as x,sep as S}from"node:path";import{BAKE_DIR as C,PACKAGE_FILE as D}from"@allyhub-next/formats";import{RegistryIndexSchema as E,RegistryItemSchema as I}from"@allyhub-next/protocol";import{z as R}from"zod";export class RegistryError extends Error{code;hint;constructor(o,i,s={}){super(i,s.cause===void 0?void 0:{cause:s.cause}),this.name="RegistryError",this.code=o,this.hint=s.hint}}export const itemFile=e=>`r/${e}.json`;async function M(e,o,i){let s;try{s=await p(e,"utf8")}catch(n){throw new RegistryError("no-registry",`There is no ${i} at ${e}.`,{cause:n})}let t;try{t=JSON.parse(s)}catch(n){throw new RegistryError("bad-registry",`${e} is not JSON.`,{cause:n})}const c=o.safeParse(t);if(!c.success)throw new RegistryError("bad-registry",`${e} is not a ${i}: ${R.prettifyError(c.error)}`);return c.data}export function folderRegistry(e){let o;const i=s=>{const t=x(e,s);if($(e,t).startsWith("..")||W($(e,t)))throw new RegistryError("bad-registry",`The registry names a file outside it: ${s}.`);return t};return{name:e,index:()=>o??=M(w(e,"registry.json"),E,"registry index"),async item(s){if((await this.index()).items.some(c=>c.name===s))return M(w(e,itemFile(s)),I,"registry item")},async file(s){return new Uint8Array(await p(i(s)))}}}export function urlRegistry(e,o=fetch){const i=e.endsWith("/")?e:`${e}/`;let s;const t=async n=>{let d;try{d=await o(new URL(n,i))}catch(f){throw new RegistryError("no-registry",`${i}${n} could not be read.`,{cause:f,hint:"Check the connection and run the same command again."})}if(!d.ok)throw new RegistryError("no-registry",`${i}${n} answered ${String(d.status)}.`);return d},c=async(n,d,f)=>{const u=d.safeParse(await(await t(n)).json());if(!u.success)throw new RegistryError("bad-registry",`${i}${n} is not a ${f}: ${R.prettifyError(u.error)}`);return u.data};return{name:i,index:()=>s??=c("registry.json",E,"registry index"),async item(n){if((await this.index()).items.some(f=>f.name===n))return c(itemFile(n),I,"registry item")},async file(n){return new Uint8Array(await(await t(n)).arrayBuffer())}}}export const registryAt=e=>/^https?:\/\//u.test(e)?urlRegistry(e):folderRegistry(e),sha256=e=>O("sha256").update(e).digest("hex");const F=e=>{const o=e.indexOf("@",e.startsWith("@")?1:0);return o<0?e:e.slice(0,o)};export async function planAdd(e,o,i){const s=[],t=new Set,c=async(r,a)=>{if(t.has(r))return;t.add(r);const l=await e.item(r);if(!l)throw new RegistryError("no-item",a===void 0?`The registry has no ${r}.`:`${a} needs ${r}, which the registry does not have.`,{hint:`It has ${(await e.index()).items.map(h=>h.name).join(", ")}.`});for(const h of l.registryDependencies)await c(h,r);s.push(l)};for(const r of o)await c(r);const n=x(i.root),d=[];for(const r of s)for(const a of r.files){const l=a.target.replaceAll("{dir}",i.dir).replaceAll("\\","/"),h=x(n,l);if(!h.startsWith(n+S))throw new RegistryError("outside",`${r.name}'s file ${a.path} would go outside the project (${l}).`);const m=a.content===void 0?await e.file(a.path):new TextEncoder().encode(a.content);if(sha256(m)!==a.sha256)throw new RegistryError("bad-file",`${r.name}'s file ${a.path} is not the one the registry lists (its sha256 differs).`);const j=await p(h).catch(()=>{}),N=j===void 0?"added":sha256(j)===a.sha256?"up to date":i.force?"replaced":"differs";d.push({item:r.name,path:$(n,h).split(S).join("/"),bytes:m,status:N})}let f=new Set;try{const r=JSON.parse(await p(w(n,D),"utf8"));f=new Set(["dependencies","devDependencies","peerDependencies"].flatMap(a=>Object.keys(r[a]??{})))}catch{}const u=[...new Set(s.flatMap(r=>r.dependencies.map(F)))].filter(r=>!f.has(r)&&r!=="@allyhub/sdk"),y=new Map;for(const r of s.flatMap(a=>a.assets)){const a=y.get(r.id);if(!a){y.set(r.id,r);continue}const l=[a.resolution,r.resolution].filter(h=>h!==void 0).sort((h,m)=>Number.parseInt(m,10)-Number.parseInt(h,10))[0];y.set(r.id,{source:a.source,id:a.id,...l===void 0?{}:{resolution:l},...a.maps&&r.maps?{maps:[...new Set([...a.maps,...r.maps])]}:{}})}const k=new Map;for(const r of s.flatMap(a=>a.bakes))k.set(`${r.digest}.${r.renderer}`,r);return{items:s,files:d,missing:u,assets:[...y.values()],bakes:[...k.values()]}}export const bakePath=e=>`${C}/${e.digest}.${e.renderer}.bin`;export async function fetchBakes(e,o,i=fetch){const s=[];for(const t of o){const c=bakePath(t),n=w(e,c),d=await p(n).catch(()=>{});if(d&&sha256(d)===t.sha256){s.push({bake:t,path:c,status:"up to date"});continue}let f;try{const u=await i(t.url);if(!u.ok)throw new Error(`${t.url} answered ${String(u.status)}`);f=new Uint8Array(await u.arrayBuffer())}catch(u){throw new RegistryError("no-registry",`The baked light for ${t.scenery} could not be downloaded.`,{cause:u,hint:"Check the connection and run the same command again; without it the scenery is drawn unbaked until allyhub scenery bake makes one."})}if(sha256(f)!==t.sha256)throw new RegistryError("bad-file",`The baked light for ${t.scenery} is not the one the registry lists (its sha256 differs).`);await b(g(n),{recursive:!0}),await A(`${n}.part`,f),await v(`${n}.part`,n),s.push({bake:t,path:c,status:"added"})}return s}export async function applyAdd(e,o){const i=o.files.filter(s=>s.status==="differs");if(i.length>0)throw new RegistryError("conflict",`${i.map(s=>s.path).join(", ")} ${i.length===1?"differs":"differ"} from the registry's: the project's copy has changes.`,{hint:"Keep the project's copy, or replace it with the registry's with --force (its changes are lost)."});for(const s of o.files){if(s.status==="up to date")continue;const t=w(e,s.path);await b(g(t),{recursive:!0}),await A(`${t}.part`,s.bytes),await v(`${t}.part`,t)}for(const s of o.items.filter(t=>t.type==="allyhub:skill")){const t=w(e,".claude","skills",s.name);await T(t).catch(()=>{})||(await b(g(t),{recursive:!0}),await B($(g(t),w(e,".agents","skills",s.name)),t))}}export function searchIndex(e,o){const i=t=>t.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean),s=i(o);return e.items.filter(t=>{const c=i([t.name,t.title,t.description,...t.categories].join(" "));return s.every(n=>c.some(d=>d.startsWith(n)))})}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/registry",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,3 +1,3 @@
1
- export { docPage, renderDoc, type DocFile, type DocFileType, type RenderDocOptions, } from "./print.js";
1
+ export { docPage, renderDoc, renderWord, type DocFile, type DocFileType, type RenderDocOptions, type RenderWordOptions, } from "./print.js";
2
2
  export { docFontsCss } from "./fonts.js";
3
3
  //# sourceMappingURL=index.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
- export{docPage,renderDoc}from"./print.js";export{docFontsCss}from"./fonts.js";
2
+ export{docPage,renderDoc,renderWord}from"./print.js";export{docFontsCss}from"./fonts.js";
@@ -1,3 +1,4 @@
1
+ import { type DocxModule, type DocxZip } from "@allyhub-next/doc/docx";
1
2
  export type DocFileType = "pdf" | "png";
2
3
  /** Which doc: its file and folder (project paths), and its title. */
3
4
  export interface DocFile {
@@ -11,6 +12,16 @@ export interface DocFile {
11
12
  }
12
13
  /** A doc's page as HTML, with the project's pictures it shows inside it. */
13
14
  export declare function docPage(root: string, doc: DocFile): Promise<string>;
15
+ export interface RenderWordOptions {
16
+ root: string;
17
+ doc: DocFile;
18
+ /** The file written. */
19
+ out: string;
20
+ docx: DocxModule;
21
+ zip: DocxZip;
22
+ }
23
+ /** Writes a doc as a Word document, its text editable. */
24
+ export declare function renderWord(opts: RenderWordOptions): Promise<void>;
14
25
  export interface RenderDocOptions {
15
26
  root: string;
16
27
  doc: DocFile;
@@ -1,2 +1,18 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{mkdir as p,readFile as m,writeFile as l}from"node:fs/promises";import{dirname as u,extname as w,join as d,posix as g}from"node:path";import{openPage as h,startBrowser as y}from"@allyhub-next/browser";import{docHtml as b,parseDoc as P}from"@allyhub-next/doc";import{docFontsCss as v}from"./fonts.js";const C={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".svg":"image/svg+xml"},x=/^([a-z][a-z0-9+.-]*:|\/\/)/i;export async function docPage(e,t){const n=P(await m(d(e,t.file),"utf8")),r=new Map,c=async s=>{for(const a of s){if("children"in a&&await c(a.children),a.type!=="image"||x.test(a.src))continue;const i=g.normalize(g.join(t.dir,decodeURIComponent(a.src))),o=C[w(i).toLowerCase()];if(o===void 0||i.startsWith(".."))continue;const f=await m(d(e,i)).catch(()=>{});f&&r.set(a.src,`data:${o};base64,${f.toString("base64")}`)}};return await c(n.blocks),b(n.blocks,{title:t.title??t.path,image:s=>r.get(s),fonts:await v()})}async function M(e,t){const{frameTree:n}=await e.session.send("Page.getFrameTree");await e.session.send("Page.setDocumentContent",{frameId:n.frame.id,html:t}),await e.evaluate("new Promise((r) => (document.readyState === 'complete' ? r() : addEventListener('load', () => r(), { once: true }))).then(() => document.fonts.ready).then(() => true)")}async function S(e){const{cssContentSize:t}=await e.session.send("Page.getLayoutMetrics"),n=await e.session.send("Page.captureScreenshot",{format:"png",clip:{x:0,y:0,width:Math.ceil(t.width),height:Math.ceil(t.height),scale:1},captureBeyondViewport:!0});return Buffer.from(n.data,"base64")}export async function renderDoc(e){const t=e.types?.length?e.types:["pdf"],n=await docPage(e.root,e.doc),r=e.name??"doc",c=[],s=await y({gpu:!1,htmlInCanvas:!1});try{const a=await h(s,{width:900,height:1200,scale:2,allow:()=>!1});await M(a,n);for(const i of t){const o=d(e.out,`${r}.${i}`);if(await p(u(o),{recursive:!0}),i==="pdf"){const{data:f}=await a.session.send("Page.printToPDF",{preferCSSPageSize:!0,printBackground:!0});await l(o,Buffer.from(f,"base64"))}else await a.evaluate("(() => { const s = document.createElement('style'); s.textContent = 'body{padding:48px 0;background:#fff}'; document.head.append(s); return true; })()"),await l(o,await S(a));c.push(`${r}.${i}`)}}finally{await s.close()}return c}
2
+ import{mkdir as m,readFile as g,writeFile as l}from"node:fs/promises";import{dirname as w,extname as C,join as d,posix as h}from"node:path";import{openPage as p,startBrowser as y}from"@allyhub-next/browser";import{docHtml as S,parseDoc as v}from"@allyhub-next/doc";import{docxOf as j}from"@allyhub-next/doc/docx";import{docFontsCss as E}from"./fonts.js";const $={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".svg":"image/svg+xml"},I=/^([a-z][a-z0-9+.-]*:|\/\/)/i;async function b(e,t,a){const i=new Map,s=async o=>{for(const n of o){if("children"in n&&await s(n.children??[]),n.type!=="image"||I.test(n.src))continue;const c=h.normalize(h.join(t.dir,decodeURIComponent(n.src))),r=$[C(c).toLowerCase()];if(r===void 0||c.startsWith(".."))continue;const f=await g(d(e,c)).catch(()=>{});f&&i.set(n.src,{type:r,bytes:f})}};return await s(a),i}const x=({type:e,bytes:t})=>`data:${e};base64,${t.toString("base64")}`;export async function docPage(e,t){const a=v(await g(d(e,t.file),"utf8")),i=await b(e,t,a.blocks);return S(a.blocks,{title:t.title??t.path,image:s=>{const o=i.get(s);return o&&x(o)},fonts:await E()})}const k={"image/png":"png","image/jpeg":"jpg","image/gif":"gif"},z=2,M=.92;async function O(e,t){const a=k[t.type],i=await e.evaluate(`(async () => {
3
+ const image = new Image();
4
+ image.src = ${JSON.stringify(x(t))};
5
+ try { await image.decode(); } catch { return null; }
6
+ const width = image.naturalWidth || 1024;
7
+ const height = image.naturalHeight || 768;
8
+ if (${JSON.stringify(a!==void 0)}) return { width, height };
9
+ const scale = ${JSON.stringify(t.type==="image/svg+xml"?z:1)};
10
+ const canvas = document.createElement("canvas");
11
+ canvas.width = width * scale;
12
+ canvas.height = height * scale;
13
+ const context = canvas.getContext("2d");
14
+ context.fillStyle = "#fff";
15
+ context.fillRect(0, 0, canvas.width, canvas.height);
16
+ context.drawImage(image, 0, 0, canvas.width, canvas.height);
17
+ return { width, height, jpeg: canvas.toDataURL("image/jpeg", ${String(M)}) };
18
+ })()`);if(!i)return;const{width:s,height:o,jpeg:n}=i;if(a!==void 0)return{data:t.bytes,type:a,width:s,height:o};if(n!==void 0)return{data:Buffer.from(n.slice(n.indexOf(",")+1),"base64"),type:"jpg",width:s,height:o}}export async function renderWord(e){const{root:t,doc:a}=e,{blocks:i}=v(await g(d(t,a.file),"utf8")),s=await b(t,a,i),o=new Map;if(s.size>0){const c=await y({gpu:!1,htmlInCanvas:!1});try{const r=await p(c,{width:900,height:1200,allow:()=>!1});for(const[f,P]of s){const u=await O(r,P);u&&o.set(f,u)}}finally{await c.close()}}const n=await j(e.docx,e.zip,i,{title:a.title??a.path,picture:c=>o.get(c)});await m(w(e.out),{recursive:!0}),await l(e.out,n)}async function R(e,t){const{frameTree:a}=await e.session.send("Page.getFrameTree");await e.session.send("Page.setDocumentContent",{frameId:a.frame.id,html:t}),await e.evaluate("new Promise((r) => (document.readyState === 'complete' ? r() : addEventListener('load', () => r(), { once: true }))).then(() => document.fonts.ready).then(() => true)")}async function T(e){const{cssContentSize:t}=await e.session.send("Page.getLayoutMetrics"),a=await e.session.send("Page.captureScreenshot",{format:"png",clip:{x:0,y:0,width:Math.ceil(t.width),height:Math.ceil(t.height),scale:1},captureBeyondViewport:!0});return Buffer.from(a.data,"base64")}export async function renderDoc(e){const t=e.types?.length?e.types:["pdf"],a=await docPage(e.root,e.doc),i=e.name??"doc",s=[],o=await y({gpu:!1,htmlInCanvas:!1});try{const n=await p(o,{width:900,height:1200,scale:2,allow:()=>!1});await R(n,a);for(const c of t){const r=d(e.out,`${i}.${c}`);if(await m(w(r),{recursive:!0}),c==="pdf"){const{data:f}=await n.session.send("Page.printToPDF",{preferCSSPageSize:!0,printBackground:!0});await l(r,Buffer.from(f,"base64"))}else await n.evaluate("(() => { const s = document.createElement('style'); s.textContent = 'body{padding:48px 0;background:#fff}'; document.head.append(s); return true; })()"),await l(r,await T(n));s.push(`${i}.${c}`)}}finally{await o.close()}return s}
@@ -1,4 +1,4 @@
1
- import { type CaptionCueOptions } from "@allyhub-next/video-core";
1
+ import { type CaptionCueOptions, type Part, type Timeline } from "@allyhub-next/video-core";
2
2
  import type { ExportPage, ProjectMedia, RenderTarget, VideoLook } from "./page.js";
3
3
  import type { Tools } from "./tools.js";
4
4
  export interface ExportOptions extends Tools {
@@ -8,7 +8,29 @@ export interface ExportOptions extends Tools {
8
8
  look: VideoLook;
9
9
  media: ProjectMedia;
10
10
  out: string;
11
+ /** A deck's pages: a PDF page, a PNG or a slide per step, not only each page's last; default false. */
12
+ steps?: boolean;
13
+ /**
14
+ * A PPTX's slides: "picture", each a full-bleed picture (the default),
15
+ * or "editable", each the picture with its text hidden under a text box
16
+ * per block of text, as measured on the page (its box, size, weight,
17
+ * colour and font), so the words can be edited in PowerPoint, Keynote or
18
+ * Google Slides.
19
+ */
20
+ pptx?: "picture" | "editable";
21
+ }
22
+ /** A moment an export draws: a part's (or a step's) still. */
23
+ interface Still {
24
+ part: Part;
25
+ at: number;
26
+ /** Its title: the part's, numbered by step when it has several. */
27
+ title: string;
11
28
  }
29
+ /**
30
+ * The stills a deck's (or a video's handout's) pages are: every part's
31
+ * still in order, a deck's hidden pages left out; with `steps`, each step's.
32
+ */
33
+ export declare function stillsOf(timeline: Timeline, steps?: boolean): Still[];
12
34
  export interface ExportResult {
13
35
  out: string;
14
36
  /** Pages for pdf / pptx / png, cues for subtitles, 1 for a cover. */
@@ -29,7 +51,7 @@ export declare function renderCaptions(opts: ExportOptions & {
29
51
  /** The cover as JPEG: the output's first cover, else the first part's still. */
30
52
  export declare function renderCover(opts: ExportOptions): Promise<ExportResult>;
31
53
  /**
32
- * One PDF page per part (a video's handout) or page (a paged output), each
54
+ * One PDF page per part (a video's handout) or slide (a deck), each
33
55
  * at its still; the text stays text. The page is the output's paper: the
34
56
  * frame's pixels, or A4 and Letter at their real size with the frame
35
57
  * scaled onto it. A page without headings of its own starts with an
@@ -44,8 +66,11 @@ export declare function renderPdf(opts: ExportOptions): Promise<ExportResult>;
44
66
  */
45
67
  export declare function renderPng(opts: ExportOptions): Promise<ExportResult>;
46
68
  /**
47
- * One full-bleed still per part or page; the speaker notes are a page's
48
- * notes, else what a part says, else the text it shows.
69
+ * One slide per part or page (per step with `steps`), each the still as a
70
+ * full-bleed picture, or, `editable`, the still without its text under a
71
+ * text box per block of text; the speaker notes are a page's notes, else
72
+ * what a part says, else the text it shows.
49
73
  */
50
74
  export declare function renderPptx(opts: ExportOptions): Promise<ExportResult>;
75
+ export {};
51
76
  //# sourceMappingURL=exports.d.ts.map
@@ -1,3 +1,3 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{writeFile as w}from"node:fs/promises";import{createRequire as x}from"node:module";import{captionCues as S,paperOf as k,subtitleCues as j,toSrt as $,toVtt as L}from"@allyhub-next/video-core";import{RenderError as v}from"./errors.js";import{backgroundStill as C,finalStill as p,footageStill as P}from"./stills.js";async function l(t,e,n){return await w(t,e),{out:t,units:n,bytes:e.byteLength}}const u=t=>({target:t.target,look:t.look,media:t.media,...t.ffmpeg===void 0?{}:{ffmpeg:t.ffmpeg},...t.ffprobe===void 0?{}:{ffprobe:t.ffprobe}});export async function renderCaptions(t){const{timeline:e}=t.page,n=await t.page.lines();if(n.length===0)throw new v("no-speech",`${t.target.output} of ${t.target.piece} (${t.target.combo.lang??"this combo"}) says nothing with word times, so there are no subtitles to export.`,{hint:'Give parts speech: speech: take("./take.mp4") with its .words.json beside it, or say(s("…")) and allyhub voice.'});const i={lines:n,fps:e.fps},a=t.captions?S(i,t.captions):j(i,await t.page.captionOptions()),o=t.type==="srt"?$(a):L(a);return l(t.out,new TextEncoder().encode(o),a.length)}export async function renderCover(t){const{page:e}=t,n=await e.covers()>0?await C(e.timeline,await e.cover(0),"jpeg",t):await p(e,e.timeline.parts[0]?.still??0,{...u(t),format:"jpeg"});return l(t.out,n,1)}export async function renderPdf(t){const{timeline:e}=t.page,n=e.background,i=[];for(const[o,s]of e.parts.entries()){const r=await P(t.media,e,s.still,"jpeg",t);i.push({still:s.still,title:s.title??String(o+1),background:r?`url(data:image/jpeg;base64,${r.toString("base64")}) 0 0 / 100% 100% no-repeat`:n})}const a=await t.page.print(i,k(t.target.format));return l(t.out,a,i.length)}export async function renderPng(t){const e=t.page.timeline.parts,n=Math.max(2,String(e.length).length),i=t.out.replace(/\.png$/i,""),a=[];let o=0;for(const[s,r]of e.entries()){const c=e.length===1?t.out:`${i}.${String(s+1).padStart(n,"0")}.png`,g=await p(t.page,r.still,u(t));await w(c,g),a.push(c),o+=g.byteLength}return{out:a[0]??t.out,units:a.length,bytes:o,files:a}}const O=x(import.meta.url)("pptxgenjs");export async function renderPptx(t){const{timeline:e}=t.page,{width:n,height:i}=e,a=13.333/Math.max(n,i),o=n*a,s=i*a,r=new O;r.defineLayout({name:"ALLYHUB",width:o,height:s}),r.layout="ALLYHUB";const c=await t.page.text();for(const d of e.parts){const b=await p(t.page,d.still,u(t)),m=r.addSlide();m.addImage({data:`image/png;base64,${b.toString("base64")}`,x:0,y:0,w:o,h:s});const f=c.find(y=>y.key===d.key),h=f?.notes??f?.spoken??f?.onScreen.join(`
3
- `)??"";h&&m.addNotes(h)}const g=await r.write({outputType:"nodebuffer"});return l(t.out,g,e.parts.length)}
2
+ import{writeFile as S}from"node:fs/promises";import{createRequire as $}from"node:module";import{captionCues as M,paperOf as j,subtitleCues as v,toSrt as L,toVtt as T}from"@allyhub-next/video-core";import{RenderError as O}from"./errors.js";import{backgroundStill as z,finalStill as w,footageStill as C}from"./stills.js";export function stillsOf(t,e=!1){const a=[];for(const[o,i]of t.parts.entries()){if(i.hidden===!0)continue;const n=i.title??String(o+1),r=e&&i.steps!==void 0?i.steps:[i.still];r.forEach((c,s)=>{a.push({part:i,at:c,title:r.length>1?`${n} (${String(s+1)})`:n})})}return a}async function h(t,e,a){return await S(t,e),{out:t,units:a,bytes:e.byteLength}}const b=t=>({target:t.target,look:t.look,media:t.media,...t.ffmpeg===void 0?{}:{ffmpeg:t.ffmpeg},...t.ffprobe===void 0?{}:{ffprobe:t.ffprobe}});export async function renderCaptions(t){const{timeline:e}=t.page,a=await t.page.lines();if(a.length===0)throw new O("no-speech",`${t.target.output} of ${t.target.piece} (${t.target.combo.lang??"this combo"}) says nothing with word times, so there are no subtitles to export.`,{hint:'Give parts speech: speech: take("./take.mp4") with its .words.json beside it, or say(s("…")) and allyhub voice.'});const o={lines:a,fps:e.fps},i=t.captions?M(o,t.captions):v(o,await t.page.captionOptions()),n=t.type==="srt"?L(i):T(i);return h(t.out,new TextEncoder().encode(n),i.length)}export async function renderCover(t){const{page:e}=t,a=await e.covers()>0?await z(e.timeline,await e.cover(0),"jpeg",t):await w(e,e.timeline.parts[0]?.still??0,{...b(t),format:"jpeg"});return h(t.out,a,1)}export async function renderPdf(t){const{timeline:e}=t.page,a=e.background,o=[];for(const n of stillsOf(e,t.steps)){const r=await C(t.media,e,n.at,"jpeg",t);o.push({still:n.at,title:n.title,background:r?`url(data:image/jpeg;base64,${r.toString("base64")}) 0 0 / 100% 100% no-repeat`:a})}const i=await t.page.print(o,e.paper??j(t.target.format));return h(t.out,i,o.length)}export async function renderPng(t){const e=stillsOf(t.page.timeline,t.steps),a=Math.max(2,String(e.length).length),o=t.out.replace(/\.png$/i,""),i=[];let n=0;for(const[r,c]of e.entries()){const s=e.length===1?t.out:`${o}.${String(r+1).padStart(a,"0")}.png`,l=await w(t.page,c.at,b(t));await S(s,l),i.push(s),n+=l.byteLength}return{out:i[0]??t.out,units:i.length,bytes:n,files:i}}const P=$(import.meta.url)("pptxgenjs"),E=t=>({color:t.slice(0,3).map(e=>Math.round(e).toString(16).padStart(2,"0")).join(""),transparency:Math.round((1-t[3])*100)}),N=t=>t?.[0]?.replace(/^["']|["']$/gu,"").replace(/ Variable$/u,"");async function A(t,e,a,o){const i=await t.inks?.(a)??[];for(const n of i){if(n.text.text.trim()==="")continue;const[r,c,s,l]=n.text.box,g=n.lines.find(p=>p.fill!==void 0)?.fill,f=g?E(g):void 0,u=Math.max(1,n.lines.length),d=N(n.text.fonts);e.addText(n.text.text,{x:r*o,y:c*o,w:Math.max(s,1)*o,h:Math.max(l,1)*o,fontSize:Math.max(1,Math.round(n.size*o*72*10)/10),...d===void 0?{}:{fontFace:d},...f===void 0?{}:{color:f.color,...f.transparency>0?{transparency:f.transparency}:{}},bold:n.weight>=600,margin:0,valign:"top",fit:"none",...u===1?{wrap:!1}:{},...u>1&&n.size>0?{lineSpacingMultiple:l/u/n.size/1.2}:{}})}}export async function renderPptx(t){const{timeline:e}=t.page,{width:a,height:o}=e,i=/^([\d.]+)in ([\d.]+)in$/u.exec(e.paper??""),n=13.333/Math.max(a,o),r=i?Number(i[1]):a*n,c=i?Number(i[2]):o*n,s=new P;s.defineLayout({name:"ALLYHUB",width:r,height:c}),s.layout="ALLYHUB";const l=await t.page.text(),g=t.pptx==="editable"&&t.page.inks!==void 0&&t.page.hideText!==void 0,f=stillsOf(e,t.steps);for(const d of f){g&&await t.page.hideText?.(!0);let p;try{p=await w(t.page,d.at,b(t))}finally{g&&await t.page.hideText?.(!1)}const m=s.addSlide();m.addImage({data:`image/png;base64,${p.toString("base64")}`,x:0,y:0,w:r,h:c}),g&&await A(t.page,m,d.at,r/a);const x=l.find(k=>k.key===d.part.key),y=x?.notes??x?.spoken??x?.onScreen.join(`
3
+ `)??"";y&&m.addNotes(y)}const u=await s.write({outputType:"nodebuffer"});return h(t.out,u,f.length)}
@@ -1,4 +1,4 @@
1
- import type { CaptionLine, CaptionOptions, CaptureOptions, Combo, MediaInfo, Problem, Timeline } from "@allyhub-next/video-core";
1
+ import type { TextInk, CaptionLine, CaptionOptions, CaptureOptions, Combo, MediaInfo, Problem, Timeline } from "@allyhub-next/video-core";
2
2
  /** Which output a render is of: a piece's output in one combo and format. */
3
3
  export interface RenderTarget {
4
4
  piece: string;
@@ -129,6 +129,16 @@ export interface ExportPage extends GraphicsPage {
129
129
  captionOptions(): Promise<CaptionOptions | undefined>;
130
130
  /** Each part's notes and text, for a deck's speaker notes. */
131
131
  text(): Promise<readonly PartText[]>;
132
+ /**
133
+ * Each text block drawn at film time t, with its lines' glyph boxes and
134
+ * fills, its size and weight (LoadedOutput.inks): an editable PPTX's
135
+ * text boxes. Absent where the page cannot measure.
136
+ */
137
+ inks?(t: number): Promise<TextInk[]>;
138
+ /** A deck as it was drawn (slides-core's DrawnDeck): its PowerPoint file's model. Absent on a video. */
139
+ deck?(): Promise<unknown>;
140
+ /** Hides every text's fill while on (HIDE_TEXT_CSS): the picture behind an editable PPTX's text boxes. */
141
+ hideText?(on: boolean): Promise<void>;
132
142
  /** How many covers the output has (video(…, { covers })). */
133
143
  covers(): Promise<number>;
134
144
  /**
@@ -44,6 +44,8 @@ export interface RenderOptions extends Tools {
44
44
  * renders every part again and keeps nothing.
45
45
  */
46
46
  partCache?: PartCache | false;
47
+ /** Aborting it stops the render: its pages and ffmpeg runs, and no part of its file stays. */
48
+ signal?: AbortSignal;
47
49
  }
48
50
  /** Where one part's time went (RenderTimings.part), in seconds. */
49
51
  export interface PartTimings {
@@ -1,3 +1,3 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{copyFile as Xe,mkdir as ht,mkdtemp as gt,readdir as yt,readFile as kt,rename as bt,rm as ce,stat as vt,writeFile as Pt}from"node:fs/promises";import{createHash as xt}from"node:crypto";import{tmpdir as Mt}from"node:os";import{join as S}from"node:path";import{EXIT as $t}from"@allyhub-next/protocol";import{ALPHA_TYPES as jt,comboKey as St,fpsRational as At,heldTime as _t,planeAt as Ft}from"@allyhub-next/video-core";import{CAP_START as Ot,capOf as Tt,capRun as Ye,overCap as Bt,packetSizes as Ne}from"./cap.js";import{capturesAnything as Et}from"./capture.js";import{compositeArgs as Ct,planSources as Dt,transparentPng as Rt}from"./composite.js";import{MAX_WORKERS as Ht,autoWorkers as Kt,encodeFor as zt,encoderOf as qe,gopArgs as It,HELD_OUT as Wt,twoOutputs as Lt}from"./encode.js";import{RenderError as Vt}from"./errors.js";import{ffmpegVersion as Jt}from"./ffmpeg.js";import{junctionArgs as Ut}from"./junction.js";import{lutFile as Xt,pagePlane as Yt}from"./look.js";import{PartCache as Nt,closedPart as qt,drawnKey as Gt,junctionDigest as Qt,partDigest as Zt,place as en}from"./parts.js";import{PipeFormat as Ge}from"./png.js";import{PagePool as tn,drawInOrder as nn,encoderSlots as rn,renderSerial as on}from"./pool.js";import{postReadsTime as Qe}from"./post.js";import{segmentsOf as an}from"./segments.js";import{mixSound as sn}from"./sound.js";import{runFfmpegWith as Ze,toolsOf as cn,write as fn}from"./tools.js";const A=s=>Math.round(performance.now()-s)/1e3,fe=async(s,y,w)=>{await Ze(s,y,w)};function un(s){const y=new Set;return s.filter(w=>{const I=[w.code,w.message,w.piece,w.output,w.combo?St(w.combo):"",w.format,w.part,w.where?.file,w.where?.line].join("|");return y.has(I)?!1:(y.add(I),!0)})}const et=s=>xt("sha256").update(s).digest("hex");export async function renderVideo(s){const{ffmpeg:y,ffprobe:w}=await cn(s),I={ffmpeg:y,ffprobe:w},{target:$e,media:J}=s,[O]=s.pages;if(!O)throw new Error("renderVideo draws with at least one page.");const d=s.type??"mp4",D=zt(d,$e.format,s.encode??{},O.timeline),M=s.look,U=M.transparent===!0&&jt.includes(d),je=qe(d,D,U),te=await Xt(J.root,M.post?.lut),R=await gt(S(Mt(),"allyhub-render-")),W=[...s.pages],Se=[],tt=()=>Promise.all(Se.splice(0).map(le=>le.close?.()??Promise.resolve())),ue=[];let X;const de=performance.now(),h={pages:0,workers:1,concurrency:1,plan:0,parts:0,mix:0,mux:0,total:0,part:[]};try{const le=performance.now(),b=O.timeline,l=b.fps,me=At(l),Ae=Math.round(b.duration*l),pe=M.motionBlur,_=pe?pe.samples:1,we=pe?.shutter??.5,_e=await Dt(J,b,w),P=d==="gif"||d==="png"?"png":d,he=d==="webm"?["-fflags","+bitexact"]:[],nt=P!=="png"&&!(d==="mp4"&&D.codec==="h265"),T=an(b,nt),ne=[];je.rgb?ne.push(`format=${je.pixFmt}`):ne.push("scale=out_color_matrix=bt709:out_range=tv:flags=neighbor");const Y=(e,t=!1,n)=>["-r",me.text,...qe(d,D,U,e,t,n).args,...It(d,D.codec,e),...d==="mp4"||d==="mov"?["-video_track_timescale","90000"]:[],...he],B=d==="mp4"&&D.maxBitrate!==void 0&&D.maxBitrate>0?Tt(D.maxBitrate):void 0,rt=e=>[...Y(e),...B?["over the cap",...Y(e,!0)]:[],...ne],N=s.code,H=P!=="png"&&N!==void 0&&s.partCache!==!1&&process.env.ALLYHUB_PART_CACHE!=="off"?s.partCache??Nt.of(J.root):void 0,q=[],Fe=new Map;if(H&&N){const e=await Jt(y),t=te?et(await kt(te)):null,n=O.reads,o={alpha:U,samples:_,shutter:we,capture:Et(M.capture)?M.capture??null:null,post:M.post?.filter??null,lut:t},i=r=>{const u=r.post?.filter,g=o.capture!==null||o.post!==null&&Qe(o.post)||u!==void 0&&Qe(u);return{...o,...u===void 0?{}:{partPost:u},...g?{at:Math.round(r.start*l)}:{}}},a=Math.round(b.duration*l),k=b.parts.at(-1)?.key,m=new Map,F=r=>{const u=O.signs[r.key];if(u===void 0||qt(N,u))return Promise.resolve(void 0);let g=m.get(r.key);if(!g){const j=Math.round(r.start*l),c=r.key===k?a:Math.min(a,Math.round(r.end*l)),f=[];for(let K=j;K<c;K++)for(let C=0;C<_;C++)f.push(K/l+(C>0?C*we/(l*_):0));const Pe=performance.now();g=O.partSign(r.key,f).then(K=>(h.signs=Math.round(((h.signs??0)+A(Pe))*1e3)/1e3,K)),m.set(r.key,g)}return g},x=async(r,u,g,j)=>{const c=O.signs[r.key];if(c===void 0)return;const f=await F(r);return f&&Fe.set(r.key,Gt(N,f)?"frames":`bundle: ${f.unknown??`a canvas drawn by ${f.owners.join(", ")}, in the piece's own file`}`),Zt({root:J.root,code:N,combo:$e.combo,timeline:b,part:r,sign:c,...f?{drawn:f}:{},media:J.media,reads:n,frames:u,encode:g,look:i(r),ffmpeg:e,...j?{trim:j}:{},...O.gpu===!0?{gpu:!0}:{}})},p=new Map,v=r=>{let u=p.get(r.key);return u||(u=x(r,Math.round(r.end*l)-Math.round(r.start*l),[]),p.set(r.key,u)),u};for(const r of T){const u=rt(r.frames);if(!r.junction){q.push(await x(r.part,r.frames,u,r.trim));continue}const[g,j]=[await v(r.junction.from),await v(r.part)];q.push(g===void 0||j===void 0?void 0:await Qt({out:g,in:j,transition:r.junction.transition,fps:l,frames:r.frames,encode:u,ffmpeg:e}))}}const Oe=await Promise.all(T.map((e,t)=>{const n=q[t];return H&&n?H.get(n,P):Promise.resolve(void 0)})),Te=e=>e>0?e*we/(l*_):0,ot=(e,t,n)=>e.junction?_t(t,n/l,l):n/l,Be=(e,t,n,o)=>Ft(t.part,t.plane,ot(e,t.part,n)+Te(o)),ge=T.map(e=>{const t=(e.junction?[e.junction.from,e.part]:[e.part]).map(i=>{const a=[];let k=0;return i.planes.forEach((m,F)=>{const x={part:i,plane:F,images:m.overlay===!0?1:_};let p=0;for(let v=e.first;v<e.first+e.frames;v++)for(let r=0;r<x.images;r++)Be(e,x,v,r)&&p++;p!==0&&(a.push(x),k+=p)}),{part:i,planes:a.map(m=>m.plane),overlays:a.flatMap(m=>i.planes[m.plane]?.overlay===!0?[m.plane]:[]),groups:a,drawn:k,graphics:k>0}}),n=t.flatMap(i=>i.groups),o=n.length===0?_:n.reduce((i,a)=>i+a.images,0);return{pictures:t,groups:n,per:o,graphics:t.some(i=>i.graphics),drawn:t.reduce((i,a)=>i+a.drawn,0),images:e.frames*o}}),Ee=(e,t,n)=>{let o=n%e.per,i={part:t.part,plane:0,images:_};for(const a of e.groups){if(o<a.images){i=a;break}o-=a.images}return{f:t.first+Math.floor(n/e.per),k:o,group:i}},at=(e,t,n)=>{const o=Ee(e,t,n);return Be(t,o.group,o.f,o.k)};let ye=0;ge.forEach((e,t)=>{Oe[t]===void 0&&(ye+=e.drawn)}),h.plan=A(le);const Ce=s.openPage===void 0?W.length:Math.max(W.length,ye===0?1:Math.min(s.workers??Kt(ye),Ht));h.workers=Ce;const re=new tn;for(const e of W)re.add(e);const st=async e=>{const t=[];for(const n of W)for(const o of await n.problems())o.level!=="error"||o.code==="AK-P002"||o.part!==void 0&&!e.has(o.part)||t.push(o);return un(t)},it=performance.now(),De=s.openPage;for(let e=W.length;De&&e<Ce;e++){const t=De().then(n=>{Se.push(n),W.push(n),re.add(n),h.pages=A(it)});t.catch(()=>{}),ue.push(t)}const ct=on(),ke=s.sound,E=d==="gif"||ke===void 0?void 0:S(R,"audio.wav"),Re=async()=>{if(E===void 0||ke===void 0)return;const e=performance.now(),t=await sn({timeline:b,sound:ke,out:E,ffmpeg:y});return h.mix=A(e),t};ct||(X=Re(),X.catch(()=>{}));const ft=Rt(b.width,b.height),He=ge.reduce((e,t)=>e+t.images,0);let L=0,Ke=-1;const be=()=>{const e=Math.floor(90*L/He);e<=Ke||(Ke=e,s.onProgress?.(.9*L/He))},G=S(R,"frames");P==="png"&&await ht(G,{recursive:!0});const oe=T.map((e,t)=>S(R,`segment.${String(t).padStart(4,"0")}.${P}`));let ze=0,Ie=0;const Q=new AbortController,We=rn();h.concurrency=Math.max(1,Math.min(We.limit,Oe.filter(e=>e===void 0).length));const ut=performance.now(),Le=(e,t,n)=>fe(y,["-v","error","-y","-i",e,"-map","0:v","-c","copy","-frames:v",String(n),...he,t]),dt=async(e,t)=>{const n=ge[e];if(!n)return;const o=n.graphics,i=n.images,a={key:t.junction?`${t.junction.from.key}>${t.part.key}`:t.part.key,...t.junction?{junction:!0}:{},frames:t.frames,cached:!1,images:o?i:0,captured:0,reused:0,clear:0,capture:0,ffmpeg:0,waitFrames:0,waitPipe:0,start:0,end:0},k=t.junction?void 0:Fe.get(t.part.key);k!==void 0&&(a.keyed=k),h.part[e]=a;const m={captured:0,reused:0},F=new Map,x=c=>{let f=F.get(c);return f||(f=new Map,F.set(c,f)),f},p=P==="png"?S(G,"frame.%05d.png"):oe[e]??"",v={...M.capture?{capture:M.capture}:{},...M.post?.filter?{post:M.post.filter}:{},...te?{lut:te}:{},tail:ne},r=c=>({planes:n.pictures[c]?.planes??[],overlays:n.pictures[c]?.overlays??[]}),u=c=>We.run(async()=>{Q.signal.throwIfAborted(),a.start=A(de);const f=B?`${c}.held.${P}`:void 0,Pe=()=>["-v","error","-y",...Lt(t.junction?Ut({timeline:b,transition:t.junction.transition,first:t.first,frames:t.frames,sources:_e,alpha:U,out:r(0),in:r(1),samples:_,...v}):Ct({timeline:b,first:t.first,frames:t.frames,sources:_e,alpha:U,planes:n.pictures[0]?.planes??[],overlays:n.pictures[0]?.overlays??[],samples:_,part:t.part,...v}),f!==void 0),...Y(t.frames),...P==="png"?["-start_number",String(t.first+1)]:[],c,...f===void 0?[]:["-map",`[${Wt}]`,"-frames:v",String(t.frames),...Y(t.frames,!0),f]],K=performance.now();let C=n.drawn<i||n.groups.length>1;for(;;){const xe=new Ge(C);let Z=0,z=0;try{await Ze(y,Pe(),o?async ae=>{await nn({count:i,ahead:Math.max(8,re.size*4),draw:ee=>{if(!at(n,t,ee))return a.clear++,z++,Promise.resolve(ft);const{f:Me,k:se,group:ie}=Ee(n,t,ee);return re.use([e,ee],async mt=>{Q.signal.throwIfAborted();const pt=performance.now(),wt=await mt.frame(Me/l,{format:"png",alpha:!0,...Yt(ie.part,ie.plane),...t.junction?{part:ie.part.key}:{},reuse:x(ie.part.key),stats:m,...se>0?{offset:Te(se)}:{}});return a.capture+=(performance.now()-pt)/1e3,wt})},emit:async ee=>{const Me=xe.next(ee),se=performance.now();await fn(ae,Me),a.waitPipe+=(performance.now()-se)/1e3,L++,Z++,be()},waits:a,signal:Q.signal})}:void 0,!1,Q.signal);break}catch(ae){if(!(ae instanceof Ge.Mixed)||C)throw f!==void 0&&await ce(f,{force:!0}),ae;C=!0}L-=Z,a.clear-=z}if(B&&f!==void 0&&(await Bt(c,B,l,I)?(await bt(f,c),a.held=!0):await ce(f,{force:!0})),a.ffmpeg=A(K),o||(L+=i,be()),o){const xe=new Set(t.junction?[t.junction.from.key,t.part.key]:[t.part.key]),Z=await st(xe);if(Z.length>0)throw new Vt("draw-failed",`Drawing ${a.key} failed, so it is not rendered: ${Z.map(z=>`${z.code} ${z.message}${z.t===void 0?"":` (at ${z.t.toFixed(2)} s)`}`).join("; ")}`,{exit:$t.failed,hint:"allyhub frames --at and allyhub inspect layout --at draw that moment; fix what failed and render again."})}}),g=t.keep<t.frames,j=q[e];if(H&&j){const c=await H.segment(j,P,u);g?await Le(c.file,p,t.keep):await en(c.file,p),c.cached&&(t.junction?Ie++:ze++,a.cached=!0,L+=i,be())}else if(g){const c=S(R,`whole.${String(e).padStart(4,"0")}.${P}`);await u(c),await Le(c,p,t.keep),await ce(c,{force:!0})}else await u(p);a.captured=m.captured,a.reused=m.reused,a.end=A(de)},Ve=(await Promise.allSettled(T.map((e,t)=>dt(t,e).catch(n=>{throw Q.abort(n),n})))).find(e=>e.status==="rejected");if(Ve)throw Ve.reason;await Promise.all(ue),h.parts=A(ut);const $=await(X??Re()),ve=$?.loudness;s.onProgress?.(.95);const lt=performance.now();let V;if(d==="png"){const e=s.out.replace(/\.png$/,"");V=[];const t=(await yt(G)).filter(n=>/^frame\.\d+\.png$/.test(n)).sort();for(const n of t){const o=`${e}.${n.slice(6)}`;await Xe(S(G,n),o),V.push(o)}E&&ve&&(await Xe(E,`${e}.wav`),V.push(`${e}.wav`))}else if(d==="gif")await fe(y,["-v","error","-y","-framerate",me.text,"-start_number","1","-i",S(G,"frame.%05d.png"),"-filter_complex","split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=sierra2_4a","-r",me.text,"-loop","0",s.out]);else{if(B){const n=B.bufferKbps*1e3;let o=Ot*n;for(const[i,a]of oe.entries()){const k=await Ne(a,I);if(!k)continue;const m=Ye(k,B,l,o);if(!m.breaks){o=m.end;continue}const F=Y(k.length,!0,o/n),x=r=>fe(y,["-v","error","-y","-i",a,"-an",...F,r]);let p=S(R,`held.${String(i)}.mp4`);const v=q[i];H&&v?p=(await H.segment(et(Buffer.from(JSON.stringify(["held across the join",v,F]))),P,x)).file:await x(p),oe[i]=p,h.capped=(h.capped??0)+1,o=Ye(await Ne(p,I)??k,B,l,o).end}}const e=S(R,"segments.txt");await Pt(e,oe.map(n=>`file '${n.replace(/'/g,"'\\''")}'
3
- `).join(""));const t=d==="mov"?["-c:a","pcm_s24le"]:d==="webm"?["-c:a","libopus","-b:a",`${String(s.encode?.audioBitrate??160)}k`]:["-c:a","aac","-b:a",`${String(s.encode?.audioBitrate??192)}k`];await fe(y,["-v","error","-y","-f","concat","-safe","0","-i",e,...E===void 0?[]:["-i",E],"-map","0:v",...E===void 0?[]:["-map","1:a"],"-c:v","copy",...E===void 0?[]:t,...d==="mp4"||d==="mov"?["-movflags","+faststart"]:[],...he,s.out])}h.mux=A(lt),s.onProgress?.(1);const Je=V??[s.out];let Ue=0;for(const e of Je)Ue+=(await vt(e)).size;return{out:Je[0]??s.out,frames:Ae,duration:Ae/l,bytes:Ue,...ve?{loudness:ve}:{},...$?.gainDb!==void 0?{master:{...$.before?{before:$.before}:{},gainDb:$.gainDb,...$.limited===void 0?{}:{limited:$.limited},target:$.target,...$.rounds===void 0?{}:{rounds:$.rounds}}}:{},...V?{files:V}:{},parts:{total:T.filter(e=>!e.junction).length,cached:ze},...T.some(e=>e.junction)?{junctions:{total:T.filter(e=>e.junction).length,cached:Ie}}:{},timings:{...h,total:A(de),part:h.part.map(e=>({...e,capture:Math.round(e.capture*1e3)/1e3,waitFrames:Math.round(e.waitFrames*1e3)/1e3,waitPipe:Math.round(e.waitPipe*1e3)/1e3}))}}}finally{await Promise.allSettled([...ue,...X?[X]:[]]),await tt(),await ce(R,{recursive:!0,force:!0})}}
2
+ import{copyFile as Ne,mkdir as yt,mkdtemp as kt,readdir as bt,readFile as vt,rename as Pt,rm as re,stat as xt,writeFile as Mt}from"node:fs/promises";import{createHash as $t}from"node:crypto";import{tmpdir as jt}from"node:os";import{join as S}from"node:path";import{EXIT as St}from"@allyhub-next/protocol";import{ALPHA_TYPES as At,comboKey as _t,fpsRational as Ft,heldTime as Ot,planeAt as Tt}from"@allyhub-next/video-core";import{CAP_START as Bt,capOf as Et,capRun as qe,overCap as Ct,packetSizes as Ge}from"./cap.js";import{capturesAnything as Dt}from"./capture.js";import{compositeArgs as Rt,planSources as It,transparentPng as Ht}from"./composite.js";import{MAX_WORKERS as Kt,autoWorkers as zt,encodeFor as Wt,encoderOf as Qe,gopArgs as Lt,HELD_OUT as Vt,twoOutputs as Jt}from"./encode.js";import{RenderError as Ut}from"./errors.js";import{ffmpegVersion as Xt}from"./ffmpeg.js";import{junctionArgs as Yt}from"./junction.js";import{lutFile as Nt,pagePlane as qt}from"./look.js";import{PartCache as Gt,closedPart as Qt,drawnKey as Zt,junctionDigest as en,partDigest as tn,place as nn}from"./parts.js";import{PipeFormat as Ze}from"./png.js";import{PagePool as rn,drawInOrder as on,encoderSlots as an,renderSerial as sn}from"./pool.js";import{postReadsTime as et}from"./post.js";import{segmentsOf as cn}from"./segments.js";import{mixSound as fn}from"./sound.js";import{runFfmpegWith as tt,toolsOf as un,write as dn}from"./tools.js";const A=a=>Math.round(performance.now()-a)/1e3,de=async(a,y,w,T)=>{await tt(a,y,w,!1,T)};function ln(a){const y=new Set;return a.filter(w=>{const T=[w.code,w.message,w.piece,w.output,w.combo?_t(w.combo):"",w.format,w.part,w.where?.file,w.where?.line].join("|");return y.has(T)?!1:(y.add(T),!0)})}const nt=a=>$t("sha256").update(a).digest("hex");export async function renderVideo(a){const{ffmpeg:y,ffprobe:w}=await un(a),T={ffmpeg:y,ffprobe:w},{target:Se,media:X}=a,[B]=a.pages;if(!B)throw new Error("renderVideo draws with at least one page.");const d=a.type??"mp4",I=Wt(d,Se.format,a.encode??{},B.timeline),M=a.look,Y=M.transparent===!0&&At.includes(d),Ae=Qe(d,I,Y),oe=await Nt(X.root,M.post?.lut),H=await kt(S(jt(),"allyhub-render-")),L=[...a.pages],_e=[],rt=()=>Promise.all(_e.splice(0).map(q=>q.close?.()??Promise.resolve())),le=[];let N;const V=[],me=performance.now(),h={pages:0,workers:1,concurrency:1,plan:0,parts:0,mix:0,mux:0,total:0,part:[]};try{const q=performance.now(),b=B.timeline,l=b.fps,pe=Ft(l),Fe=Math.round(b.duration*l),we=M.motionBlur,_=we?we.samples:1,he=we?.shutter??.5,Oe=await It(X,b,w),P=d==="gif"||d==="png"?"png":d,ge=d==="webm"?["-fflags","+bitexact"]:[],ot=P!=="png"&&!(d==="mp4"&&I.codec==="h265"),E=cn(b,ot),ae=[];Ae.rgb?ae.push(`format=${Ae.pixFmt}`):ae.push("scale=out_color_matrix=bt709:out_range=tv:flags=neighbor");const G=(e,t=!1,n)=>["-r",pe.text,...Qe(d,I,Y,e,t,n).args,...Lt(d,I.codec,e),...d==="mp4"||d==="mov"?["-video_track_timescale","90000"]:[],...ge],C=d==="mp4"&&I.maxBitrate!==void 0&&I.maxBitrate>0?Et(I.maxBitrate):void 0,at=e=>[...G(e),...C?["over the cap",...G(e,!0)]:[],...ae],Q=a.code,K=P!=="png"&&Q!==void 0&&a.partCache!==!1&&process.env.ALLYHUB_PART_CACHE!=="off"?a.partCache??Gt.of(X.root):void 0,Z=[],Te=new Map;if(K&&Q){const e=await Xt(y),t=oe?nt(await vt(oe)):null,n=B.reads,o={alpha:Y,samples:_,shutter:he,capture:Dt(M.capture)?M.capture??null:null,post:M.post?.filter??null,lut:t},i=r=>{const u=r.post?.filter,g=o.capture!==null||o.post!==null&&et(o.post)||u!==void 0&&et(u);return{...o,...u===void 0?{}:{partPost:u},...g?{at:Math.round(r.start*l)}:{}}},s=Math.round(b.duration*l),k=b.parts.at(-1)?.key,m=new Map,O=r=>{const u=B.signs[r.key];if(u===void 0||Qt(Q,u))return Promise.resolve(void 0);let g=m.get(r.key);if(!g){const j=Math.round(r.start*l),c=r.key===k?s:Math.min(s,Math.round(r.end*l)),f=[];for(let z=j;z<c;z++)for(let R=0;R<_;R++)f.push(z/l+(R>0?R*he/(l*_):0));const Me=performance.now();g=B.partSign(r.key,f).then(z=>(h.signs=Math.round(((h.signs??0)+A(Me))*1e3)/1e3,z)),m.set(r.key,g)}return g},x=async(r,u,g,j)=>{const c=B.signs[r.key];if(c===void 0)return;const f=await O(r);return f&&Te.set(r.key,Zt(Q,f)?"frames":`bundle: ${f.unknown??`a canvas drawn by ${f.owners.join(", ")}, in the piece's own file`}`),tn({root:X.root,code:Q,combo:Se.combo,timeline:b,part:r,sign:c,...f?{drawn:f}:{},media:X.media,reads:n,frames:u,encode:g,look:i(r),ffmpeg:e,...j?{trim:j}:{},...B.gpu===!0?{gpu:!0}:{}})},p=new Map,v=r=>{let u=p.get(r.key);return u||(u=x(r,Math.round(r.end*l)-Math.round(r.start*l),[]),p.set(r.key,u)),u};for(const r of E){const u=at(r.frames);if(!r.junction){Z.push(await x(r.part,r.frames,u,r.trim));continue}const[g,j]=[await v(r.junction.from),await v(r.part)];Z.push(g===void 0||j===void 0?void 0:await en({out:g,in:j,transition:r.junction.transition,fps:l,frames:r.frames,encode:u,ffmpeg:e}))}}const Be=await Promise.all(E.map((e,t)=>{const n=Z[t];return K&&n?K.get(n,P):Promise.resolve(void 0)})),Ee=e=>e>0?e*he/(l*_):0,st=(e,t,n)=>e.junction?Ot(t,n/l,l):n/l,Ce=(e,t,n,o)=>Tt(t.part,t.plane,st(e,t.part,n)+Ee(o)),ye=E.map(e=>{const t=(e.junction?[e.junction.from,e.part]:[e.part]).map(i=>{const s=[];let k=0;return i.planes.forEach((m,O)=>{const x={part:i,plane:O,images:m.overlay===!0?1:_};let p=0;for(let v=e.first;v<e.first+e.frames;v++)for(let r=0;r<x.images;r++)Ce(e,x,v,r)&&p++;p!==0&&(s.push(x),k+=p)}),{part:i,planes:s.map(m=>m.plane),overlays:s.flatMap(m=>i.planes[m.plane]?.overlay===!0?[m.plane]:[]),groups:s,drawn:k,graphics:k>0}}),n=t.flatMap(i=>i.groups),o=n.length===0?_:n.reduce((i,s)=>i+s.images,0);return{pictures:t,groups:n,per:o,graphics:t.some(i=>i.graphics),drawn:t.reduce((i,s)=>i+s.drawn,0),images:e.frames*o}}),De=(e,t,n)=>{let o=n%e.per,i={part:t.part,plane:0,images:_};for(const s of e.groups){if(o<s.images){i=s;break}o-=s.images}return{f:t.first+Math.floor(n/e.per),k:o,group:i}},it=(e,t,n)=>{const o=De(e,t,n);return Ce(t,o.group,o.f,o.k)};let ke=0;ye.forEach((e,t)=>{Be[t]===void 0&&(ke+=e.drawn)}),h.plan=A(q);const Re=a.openPage===void 0?L.length:Math.max(L.length,ke===0?1:Math.min(a.workers??zt(ke),Kt));h.workers=Re;const se=new rn;for(const e of L)se.add(e);const ct=async e=>{const t=[];for(const n of L)for(const o of await n.problems())o.level!=="error"||o.code==="AK-P002"||o.part!==void 0&&!e.has(o.part)||t.push(o);return ln(t)},ft=performance.now(),Ie=a.openPage;for(let e=L.length;Ie&&e<Re;e++){const t=Ie().then(n=>{_e.push(n),L.push(n),se.add(n),h.pages=A(ft)});t.catch(()=>{}),le.push(t)}const ut=sn(),be=a.sound,D=d==="gif"||be===void 0?void 0:S(H,"audio.wav"),He=async()=>{if(D===void 0||be===void 0)return;const e=performance.now(),t=await fn({timeline:b,sound:be,out:D,ffmpeg:y});return h.mix=A(e),t};ut||(N=He(),N.catch(()=>{}));const dt=Ht(b.width,b.height),Ke=ye.reduce((e,t)=>e+t.images,0);let J=0,ze=-1;const ve=()=>{const e=Math.floor(90*J/Ke);e<=ze||(ze=e,a.onProgress?.(.9*J/Ke))},ee=S(H,"frames");P==="png"&&await yt(ee,{recursive:!0});const ie=E.map((e,t)=>S(H,`segment.${String(t).padStart(4,"0")}.${P}`));let We=0,Le=0;const Pe=new AbortController,F=a.signal?AbortSignal.any([Pe.signal,a.signal]):Pe.signal,Ve=an();h.concurrency=Math.max(1,Math.min(Ve.limit,Be.filter(e=>e===void 0).length));const lt=performance.now(),Je=(e,t,n)=>de(y,["-v","error","-y","-i",e,"-map","0:v","-c","copy","-frames:v",String(n),...ge,t]),mt=async(e,t)=>{const n=ye[e];if(!n)return;const o=n.graphics,i=n.images,s={key:t.junction?`${t.junction.from.key}>${t.part.key}`:t.part.key,...t.junction?{junction:!0}:{},frames:t.frames,cached:!1,images:o?i:0,captured:0,reused:0,clear:0,capture:0,ffmpeg:0,waitFrames:0,waitPipe:0,start:0,end:0},k=t.junction?void 0:Te.get(t.part.key);k!==void 0&&(s.keyed=k),h.part[e]=s;const m={captured:0,reused:0},O=new Map,x=c=>{let f=O.get(c);return f||(f=new Map,O.set(c,f)),f},p=P==="png"?S(ee,"frame.%05d.png"):ie[e]??"",v={...M.capture?{capture:M.capture}:{},...M.post?.filter?{post:M.post.filter}:{},...oe?{lut:oe}:{},tail:ae},r=c=>({planes:n.pictures[c]?.planes??[],overlays:n.pictures[c]?.overlays??[]}),u=c=>Ve.run(async()=>{F.throwIfAborted(),s.start=A(me);const f=C?`${c}.held.${P}`:void 0,Me=()=>["-v","error","-y",...Jt(t.junction?Yt({timeline:b,transition:t.junction.transition,first:t.first,frames:t.frames,sources:Oe,alpha:Y,out:r(0),in:r(1),samples:_,...v}):Rt({timeline:b,first:t.first,frames:t.frames,sources:Oe,alpha:Y,planes:n.pictures[0]?.planes??[],overlays:n.pictures[0]?.overlays??[],samples:_,part:t.part,...v}),f!==void 0),...G(t.frames),...P==="png"?["-start_number",String(t.first+1)]:[],c,...f===void 0?[]:["-map",`[${Vt}]`,"-frames:v",String(t.frames),...G(t.frames,!0),f]],z=performance.now();let R=n.drawn<i||n.groups.length>1;for(;;){const $e=new Ze(R);let te=0,W=0;try{await tt(y,Me(),o?async ce=>{await on({count:i,ahead:Math.max(8,se.size*4),draw:ne=>{if(!it(n,t,ne))return s.clear++,W++,Promise.resolve(dt);const{f:je,k:fe,group:ue}=De(n,t,ne);return se.use([e,ne],async wt=>{F.throwIfAborted();const ht=performance.now(),gt=await wt.frame(je/l,{format:"png",alpha:!0,...qt(ue.part,ue.plane),...t.junction?{part:ue.part.key}:{},reuse:x(ue.part.key),stats:m,...fe>0?{offset:Ee(fe)}:{}});return s.capture+=(performance.now()-ht)/1e3,gt})},emit:async ne=>{const je=$e.next(ne),fe=performance.now();await dn(ce,je),s.waitPipe+=(performance.now()-fe)/1e3,J++,te++,ve()},waits:s,signal:F})}:void 0,!1,F);break}catch(ce){if(!(ce instanceof Ze.Mixed)||R)throw f!==void 0&&await re(f,{force:!0}),ce;R=!0}J-=te,s.clear-=W}if(C&&f!==void 0&&(await Ct(c,C,l,T)?(await Pt(f,c),s.held=!0):await re(f,{force:!0})),s.ffmpeg=A(z),o||(J+=i,ve()),o){const $e=new Set(t.junction?[t.junction.from.key,t.part.key]:[t.part.key]),te=await ct($e);if(te.length>0)throw new Ut("draw-failed",`Drawing ${s.key} failed, so it is not rendered: ${te.map(W=>`${W.code} ${W.message}${W.t===void 0?"":` (at ${W.t.toFixed(2)} s)`}`).join("; ")}`,{exit:St.failed,hint:"allyhub frames --at and allyhub inspect layout --at draw that moment; fix what failed and render again."})}}),g=t.keep<t.frames,j=Z[e];if(K&&j){const c=await K.segment(j,P,u);g?await Je(c.file,p,t.keep):await nn(c.file,p),c.cached&&(t.junction?Le++:We++,s.cached=!0,J+=i,ve())}else if(g){const c=S(H,`whole.${String(e).padStart(4,"0")}.${P}`);await u(c),await Je(c,p,t.keep),await re(c,{force:!0})}else await u(p);s.captured=m.captured,s.reused=m.reused,s.end=A(me)},Ue=(await Promise.allSettled(E.map((e,t)=>mt(t,e).catch(n=>{throw Pe.abort(n),n})))).find(e=>e.status==="rejected");if(Ue)throw Ue.reason;await Promise.all(le),h.parts=A(lt);const $=await(N??He()),xe=$?.loudness;a.onProgress?.(.95),F.throwIfAborted();const pt=performance.now();let U;if(d==="png"){const e=a.out.replace(/\.png$/,"");U=[];const t=(await bt(ee)).filter(n=>/^frame\.\d+\.png$/.test(n)).sort();for(const n of t){F.throwIfAborted();const o=`${e}.${n.slice(6)}`;V.push(o),await Ne(S(ee,n),o),U.push(o)}D&&xe&&(V.push(`${e}.wav`),await Ne(D,`${e}.wav`),U.push(`${e}.wav`))}else if(d==="gif")V.push(a.out),await de(y,["-v","error","-y","-framerate",pe.text,"-start_number","1","-i",S(ee,"frame.%05d.png"),"-filter_complex","split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=sierra2_4a","-r",pe.text,"-loop","0",a.out],void 0,F);else{if(C){const n=C.bufferKbps*1e3;let o=Bt*n;for(const[i,s]of ie.entries()){const k=await Ge(s,T);if(!k)continue;const m=qe(k,C,l,o);if(!m.breaks){o=m.end;continue}const O=G(k.length,!0,o/n),x=r=>de(y,["-v","error","-y","-i",s,"-an",...O,r],void 0,F);let p=S(H,`held.${String(i)}.mp4`);const v=Z[i];K&&v?p=(await K.segment(nt(Buffer.from(JSON.stringify(["held across the join",v,O]))),P,x)).file:await x(p),ie[i]=p,h.capped=(h.capped??0)+1,o=qe(await Ge(p,T)??k,C,l,o).end}}const e=S(H,"segments.txt");await Mt(e,ie.map(n=>`file '${n.replace(/'/g,"'\\''")}'
3
+ `).join(""));const t=d==="mov"?["-c:a","pcm_s24le"]:d==="webm"?["-c:a","libopus","-b:a",`${String(a.encode?.audioBitrate??160)}k`]:["-c:a","aac","-b:a",`${String(a.encode?.audioBitrate??192)}k`];V.push(a.out),await de(y,["-v","error","-y","-f","concat","-safe","0","-i",e,...D===void 0?[]:["-i",D],"-map","0:v",...D===void 0?[]:["-map","1:a"],"-c:v","copy",...D===void 0?[]:t,...d==="mp4"||d==="mov"?["-movflags","+faststart"]:[],...ge,a.out],void 0,F)}V.length=0,h.mux=A(pt),a.onProgress?.(1);const Xe=U??[a.out];let Ye=0;for(const e of Xe)Ye+=(await xt(e)).size;return{out:Xe[0]??a.out,frames:Fe,duration:Fe/l,bytes:Ye,...xe?{loudness:xe}:{},...$?.gainDb!==void 0?{master:{...$.before?{before:$.before}:{},gainDb:$.gainDb,...$.limited===void 0?{}:{limited:$.limited},target:$.target,...$.rounds===void 0?{}:{rounds:$.rounds}}}:{},...U?{files:U}:{},parts:{total:E.filter(e=>!e.junction).length,cached:We},...E.some(e=>e.junction)?{junctions:{total:E.filter(e=>e.junction).length,cached:Le}}:{},timings:{...h,total:A(me),part:h.part.map(e=>({...e,capture:Math.round(e.capture*1e3)/1e3,waitFrames:Math.round(e.waitFrames*1e3)/1e3,waitPipe:Math.round(e.waitPipe*1e3)/1e3}))}}}finally{await Promise.allSettled([...le,...N?[N]:[]]),await rt(),await Promise.all(V.map(q=>re(q,{force:!0}))),await re(H,{recursive:!0,force:!0})}}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/render",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {