@ignix-social/editor 0.1.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.
- package/LICENSE +190 -0
- package/NOTICE +54 -0
- package/README.md +23 -0
- package/bin/ignix-editor.mjs +8 -0
- package/package.json +53 -0
- package/patches/index.mjs +53 -0
- package/scripts/build-ffmpeg-macos.sh +35 -0
- package/scripts/build-whisper-macos.sh +21 -0
- package/scripts/vendor.mjs +41 -0
- package/skills/ignix-editor/SKILL.md +132 -0
- package/src/audio.mjs +31 -0
- package/src/binaries.json +46 -0
- package/src/binaries.mjs +83 -0
- package/src/cli.mjs +254 -0
- package/src/prepare.mjs +74 -0
- package/src/runtime/ignix-frame.js +92 -0
- package/src/transcribe.mjs +71 -0
- package/src/validate.mjs +71 -0
- package/templates/blank/index.html +41 -0
- package/vendor/hyperframes/README.md +181 -0
- package/vendor/hyperframes/UPSTREAM.json +12 -0
- package/vendor/hyperframes/bin/hyperframes-localize-fonts.mjs +12 -0
- package/vendor/hyperframes/bin/hyperframes.mjs +11 -0
- package/vendor/hyperframes/dist/add-LR3ZR2A5.js +79 -0
- package/vendor/hyperframes/dist/agentPromptGenerator-VIIPZCJ3.js +143 -0
- package/vendor/hyperframes/dist/animatedGifPrep-P2T6YM7Z.js +34 -0
- package/vendor/hyperframes/dist/asset-BE2DOV72.js +26 -0
- package/vendor/hyperframes/dist/assetCataloger-VBLPHX24.js +340 -0
- package/vendor/hyperframes/dist/auth-RCQB2ZT7.js +60 -0
- package/vendor/hyperframes/dist/autoUpdate-RJAX3DAZ.js +268 -0
- package/vendor/hyperframes/dist/backgroundChecks-H2LCUIMJ.js +61 -0
- package/vendor/hyperframes/dist/backgroundChecksWorker.js +26 -0
- package/vendor/hyperframes/dist/batchRender-FT7AP7XH.js +355 -0
- package/vendor/hyperframes/dist/beat-analyzer.global.js +338 -0
- package/vendor/hyperframes/dist/beats-Y2EOP72P.js +309 -0
- package/vendor/hyperframes/dist/benchmark-MZ7GY3JW.js +231 -0
- package/vendor/hyperframes/dist/browser-HUTAMRQE.js +237 -0
- package/vendor/hyperframes/dist/bundleWithLocalizedFonts-5QOPOB5D.js +52 -0
- package/vendor/hyperframes/dist/capture-RLZA6EMR.js +4079 -0
- package/vendor/hyperframes/dist/capture-SZZ4IYJK.js +290 -0
- package/vendor/hyperframes/dist/captureFile-LYOJOUIE.js +15 -0
- package/vendor/hyperframes/dist/captureTimeout-PA4FYWT5.js +27 -0
- package/vendor/hyperframes/dist/catalog-KYU55EWR.js +1001 -0
- package/vendor/hyperframes/dist/check-TCG4PXLR.js +1697 -0
- package/vendor/hyperframes/dist/checkBrowser-RPMO4OW5.js +1032 -0
- package/vendor/hyperframes/dist/chunk-2EAXUCCE.js +88 -0
- package/vendor/hyperframes/dist/chunk-2EGFTPWD.js +1077 -0
- package/vendor/hyperframes/dist/chunk-2PSPARWP.js +6058 -0
- package/vendor/hyperframes/dist/chunk-2YN64IN5.js +5747 -0
- package/vendor/hyperframes/dist/chunk-3GXQPCJC.js +682 -0
- package/vendor/hyperframes/dist/chunk-3ZP5DXE7.js +15 -0
- package/vendor/hyperframes/dist/chunk-4NWOGZZS.js +1990 -0
- package/vendor/hyperframes/dist/chunk-4PFZPP2N.js +587 -0
- package/vendor/hyperframes/dist/chunk-4THIAPBL.js +128 -0
- package/vendor/hyperframes/dist/chunk-4YYJOFKS.js +28 -0
- package/vendor/hyperframes/dist/chunk-54HJ63Q2.js +29 -0
- package/vendor/hyperframes/dist/chunk-5ETJX6WM.js +89 -0
- package/vendor/hyperframes/dist/chunk-5IAKAQA7.js +389 -0
- package/vendor/hyperframes/dist/chunk-5Z63TBTX.js +37 -0
- package/vendor/hyperframes/dist/chunk-6BEFEWFB.js +25 -0
- package/vendor/hyperframes/dist/chunk-6CSYCFQV.js +68 -0
- package/vendor/hyperframes/dist/chunk-6CTIGJY7.js +154 -0
- package/vendor/hyperframes/dist/chunk-7HG4BFIN.js +93 -0
- package/vendor/hyperframes/dist/chunk-7JZ4FXP2.js +118 -0
- package/vendor/hyperframes/dist/chunk-A2Z4Z4VL.js +2961 -0
- package/vendor/hyperframes/dist/chunk-AMKC3AXA.js +25 -0
- package/vendor/hyperframes/dist/chunk-AVUUN2XD.js +4847 -0
- package/vendor/hyperframes/dist/chunk-AWDFDFI3.js +46 -0
- package/vendor/hyperframes/dist/chunk-AWNBM3MZ.js +94 -0
- package/vendor/hyperframes/dist/chunk-BXCMXMJQ.js +73 -0
- package/vendor/hyperframes/dist/chunk-BZ56MTDX.js +6 -0
- package/vendor/hyperframes/dist/chunk-CFKU7HTK.js +171 -0
- package/vendor/hyperframes/dist/chunk-CWPVM2QV.js +308 -0
- package/vendor/hyperframes/dist/chunk-DPVXBVLL.js +31292 -0
- package/vendor/hyperframes/dist/chunk-DQBY7FRR.js +397 -0
- package/vendor/hyperframes/dist/chunk-E6RPWJVC.js +213 -0
- package/vendor/hyperframes/dist/chunk-EISRN4E6.js +294 -0
- package/vendor/hyperframes/dist/chunk-EOVYQ3IG.js +143 -0
- package/vendor/hyperframes/dist/chunk-F3WZGU7C.js +479 -0
- package/vendor/hyperframes/dist/chunk-FCSIGXXP.js +366 -0
- package/vendor/hyperframes/dist/chunk-FI4I7CME.js +56 -0
- package/vendor/hyperframes/dist/chunk-FLWXXDNS.js +15 -0
- package/vendor/hyperframes/dist/chunk-GK4AIFIH.js +11171 -0
- package/vendor/hyperframes/dist/chunk-GMECXFAN.js +57 -0
- package/vendor/hyperframes/dist/chunk-GULOKZLI.js +155 -0
- package/vendor/hyperframes/dist/chunk-H4YZZ2VQ.js +68 -0
- package/vendor/hyperframes/dist/chunk-H6QMKUYA.js +477 -0
- package/vendor/hyperframes/dist/chunk-HBBJFK6I.js +273 -0
- package/vendor/hyperframes/dist/chunk-HRUGC23L.js +212 -0
- package/vendor/hyperframes/dist/chunk-HVW7ABXD.js +19 -0
- package/vendor/hyperframes/dist/chunk-HW6OYASV.js +344 -0
- package/vendor/hyperframes/dist/chunk-HWKCIWQT.js +3578 -0
- package/vendor/hyperframes/dist/chunk-I465DBM6.js +1214 -0
- package/vendor/hyperframes/dist/chunk-IGLEPPTN.js +24 -0
- package/vendor/hyperframes/dist/chunk-IGNAAHS3.js +433 -0
- package/vendor/hyperframes/dist/chunk-IHFUKJOR.js +85 -0
- package/vendor/hyperframes/dist/chunk-IQ3OUQ5Z.js +213 -0
- package/vendor/hyperframes/dist/chunk-ISN5GRYI.js +20 -0
- package/vendor/hyperframes/dist/chunk-IUZFXWSV.js +446 -0
- package/vendor/hyperframes/dist/chunk-JH556Q42.js +647 -0
- package/vendor/hyperframes/dist/chunk-JTHMTOMQ.js +601 -0
- package/vendor/hyperframes/dist/chunk-K2EQN4VU.js +405 -0
- package/vendor/hyperframes/dist/chunk-K2FTXJYH.js +16044 -0
- package/vendor/hyperframes/dist/chunk-K4WIOZFP.js +32 -0
- package/vendor/hyperframes/dist/chunk-K4WKGXRC.js +18 -0
- package/vendor/hyperframes/dist/chunk-KBJUXVOJ.js +172 -0
- package/vendor/hyperframes/dist/chunk-KC5XXX3X.js +590 -0
- package/vendor/hyperframes/dist/chunk-KNU5COPB.js +29 -0
- package/vendor/hyperframes/dist/chunk-KZI44OPA.js +185 -0
- package/vendor/hyperframes/dist/chunk-L3YOGIPG.js +48 -0
- package/vendor/hyperframes/dist/chunk-LAOCA3MQ.js +189 -0
- package/vendor/hyperframes/dist/chunk-LCSMOLGX.js +312 -0
- package/vendor/hyperframes/dist/chunk-LFGJWOVA.js +61 -0
- package/vendor/hyperframes/dist/chunk-LHSR3M4M.js +498 -0
- package/vendor/hyperframes/dist/chunk-LYNI3FOL.js +123 -0
- package/vendor/hyperframes/dist/chunk-M2WBOQ2Q.js +54 -0
- package/vendor/hyperframes/dist/chunk-MRF4AMKD.js +104 -0
- package/vendor/hyperframes/dist/chunk-MWB3ZIFM.js +852 -0
- package/vendor/hyperframes/dist/chunk-NGKM64BP.js +39 -0
- package/vendor/hyperframes/dist/chunk-NXMYHJAL.js +43 -0
- package/vendor/hyperframes/dist/chunk-OAF4XJOW.js +192 -0
- package/vendor/hyperframes/dist/chunk-OFQWTKPW.js +117 -0
- package/vendor/hyperframes/dist/chunk-P6LJ4Y32.js +4662 -0
- package/vendor/hyperframes/dist/chunk-PBN6GBJE.js +108 -0
- package/vendor/hyperframes/dist/chunk-PDAMK4Q5.js +28 -0
- package/vendor/hyperframes/dist/chunk-PFCFR3KZ.js +20 -0
- package/vendor/hyperframes/dist/chunk-PJ3HDUCY.js +108 -0
- package/vendor/hyperframes/dist/chunk-PMRBLBUP.js +152 -0
- package/vendor/hyperframes/dist/chunk-PPQUYWTW.js +240 -0
- package/vendor/hyperframes/dist/chunk-Q5X2B5WT.js +29 -0
- package/vendor/hyperframes/dist/chunk-Q7IU7MOR.js +351 -0
- package/vendor/hyperframes/dist/chunk-QC4FJVLM.js +371 -0
- package/vendor/hyperframes/dist/chunk-QNYYOUU3.js +1318 -0
- package/vendor/hyperframes/dist/chunk-RDNNAKEP.js +161 -0
- package/vendor/hyperframes/dist/chunk-RMHUQGRK.js +657 -0
- package/vendor/hyperframes/dist/chunk-RQVDTPGD.js +6 -0
- package/vendor/hyperframes/dist/chunk-RVCWIIZ7.js +68 -0
- package/vendor/hyperframes/dist/chunk-S3D6GE5W.js +72 -0
- package/vendor/hyperframes/dist/chunk-S3S4TGEH.js +424 -0
- package/vendor/hyperframes/dist/chunk-S7NPLFWV.js +11395 -0
- package/vendor/hyperframes/dist/chunk-SHB5VDMH.js +51 -0
- package/vendor/hyperframes/dist/chunk-TCLGPL65.js +860 -0
- package/vendor/hyperframes/dist/chunk-THXFSPLV.js +40 -0
- package/vendor/hyperframes/dist/chunk-TJSTGSAW.js +354 -0
- package/vendor/hyperframes/dist/chunk-TQFG7HTI.js +1024 -0
- package/vendor/hyperframes/dist/chunk-TVCRUG2S.js +265 -0
- package/vendor/hyperframes/dist/chunk-TWWSYAKJ.js +24 -0
- package/vendor/hyperframes/dist/chunk-U7CZBDMV.js +27 -0
- package/vendor/hyperframes/dist/chunk-UEZXMWG3.js +139 -0
- package/vendor/hyperframes/dist/chunk-UYEZTK4U.js +61 -0
- package/vendor/hyperframes/dist/chunk-VC76R6W2.js +27 -0
- package/vendor/hyperframes/dist/chunk-VFCKXTBB.js +159 -0
- package/vendor/hyperframes/dist/chunk-VWG7OQKU.js +22 -0
- package/vendor/hyperframes/dist/chunk-VXVRPIJA.js +105 -0
- package/vendor/hyperframes/dist/chunk-WBLXWOYK.js +15 -0
- package/vendor/hyperframes/dist/chunk-WERLJGIC.js +20 -0
- package/vendor/hyperframes/dist/chunk-WMQNIQDJ.js +2057 -0
- package/vendor/hyperframes/dist/chunk-WPHMNO44.js +4528 -0
- package/vendor/hyperframes/dist/chunk-X5HWXQPU.js +113 -0
- package/vendor/hyperframes/dist/chunk-X7MTZ4T2.js +6 -0
- package/vendor/hyperframes/dist/chunk-XH4DSOS5.js +59 -0
- package/vendor/hyperframes/dist/chunk-XS4EJSKU.js +23 -0
- package/vendor/hyperframes/dist/chunk-XT5P4QMO.js +181 -0
- package/vendor/hyperframes/dist/chunk-XT7X6QCP.js +6 -0
- package/vendor/hyperframes/dist/chunk-XUHOIDKG.js +6 -0
- package/vendor/hyperframes/dist/chunk-XUXGIA7H.js +485 -0
- package/vendor/hyperframes/dist/chunk-XZABUQTX.js +113 -0
- package/vendor/hyperframes/dist/chunk-Y6W4DVPS.js +356 -0
- package/vendor/hyperframes/dist/chunk-YEIFI443.js +44 -0
- package/vendor/hyperframes/dist/chunk-YQZNILVH.js +375 -0
- package/vendor/hyperframes/dist/chunk-Z27A7NUB.js +65 -0
- package/vendor/hyperframes/dist/chunk-Z6B37SNM.js +3081 -0
- package/vendor/hyperframes/dist/chunk-ZJUKFZ2P.js +10954 -0
- package/vendor/hyperframes/dist/chunk-ZKDMAOFU.js +32 -0
- package/vendor/hyperframes/dist/chunk-ZMXUQLI2.js +17219 -0
- package/vendor/hyperframes/dist/chunk-ZTZ7NCJT.js +58 -0
- package/vendor/hyperframes/dist/chunk-ZTZA4UWZ.js +108 -0
- package/vendor/hyperframes/dist/clean-W57E5YQ3.js +293 -0
- package/vendor/hyperframes/dist/cli.js +495 -0
- package/vendor/hyperframes/dist/cloud-FFTJGZ24.js +70 -0
- package/vendor/hyperframes/dist/cloudrun-AJUTHUEA.js +763 -0
- package/vendor/hyperframes/dist/colors-HKWSZCGK.js +15 -0
- package/vendor/hyperframes/dist/commands/contrast-audit.browser.js +459 -0
- package/vendor/hyperframes/dist/commands/layout-audit.browser.js +2102 -0
- package/vendor/hyperframes/dist/commands/motion-sample.browser.js +74 -0
- package/vendor/hyperframes/dist/commands/motion-signature.browser.js +374 -0
- package/vendor/hyperframes/dist/compare-AYCTT55F.js +421 -0
- package/vendor/hyperframes/dist/compiler-QO36EXLS.js +121 -0
- package/vendor/hyperframes/dist/component-VFFR2O7T.js +176 -0
- package/vendor/hyperframes/dist/compositions-QTVN3U2A.js +228 -0
- package/vendor/hyperframes/dist/contactSheet-27SRU7A4.js +22 -0
- package/vendor/hyperframes/dist/delete-ZAKYCB7I.js +114 -0
- package/vendor/hyperframes/dist/deploy-MX76RZ36.js +101 -0
- package/vendor/hyperframes/dist/destroy-H2TZBYHH.js +42 -0
- package/vendor/hyperframes/dist/deterministicFonts-HAEMV4TM.js +50 -0
- package/vendor/hyperframes/dist/dist-EWXJGN63.js +129 -0
- package/vendor/hyperframes/dist/dist-FNNGCKFS.js +29 -0
- package/vendor/hyperframes/dist/dist-S3PJNPXQ.js +392 -0
- package/vendor/hyperframes/dist/docker/Dockerfile.render +65 -0
- package/vendor/hyperframes/dist/docs/compositions.md +67 -0
- package/vendor/hyperframes/dist/docs/data-attributes.md +27 -0
- package/vendor/hyperframes/dist/docs/examples.md +19 -0
- package/vendor/hyperframes/dist/docs/gsap.md +26 -0
- package/vendor/hyperframes/dist/docs/rendering.md +35 -0
- package/vendor/hyperframes/dist/docs/troubleshooting.md +29 -0
- package/vendor/hyperframes/dist/docs-QAPJEGLS.js +131 -0
- package/vendor/hyperframes/dist/doctor-AI7C3FON.js +67 -0
- package/vendor/hyperframes/dist/dom-IROKGVJI.js +14 -0
- package/vendor/hyperframes/dist/dotEnv-AECLXQSO.js +14 -0
- package/vendor/hyperframes/dist/events-7LALYNKZ.js +92 -0
- package/vendor/hyperframes/dist/events-FQY3HGKZ.js +88 -0
- package/vendor/hyperframes/dist/feedback-WCMDMSTK.js +472 -0
- package/vendor/hyperframes/dist/ffmpeg-QIUFEFTY.js +35 -0
- package/vendor/hyperframes/dist/figma-64WY462P.js +63 -0
- package/vendor/hyperframes/dist/fontData.generated-NXAOI4GH.js +13 -0
- package/vendor/hyperframes/dist/fontLocalizeCli.js +132 -0
- package/vendor/hyperframes/dist/get-FPOMJMZB.js +103 -0
- package/vendor/hyperframes/dist/gpuPolicy-2ZUZE5D6.js +38 -0
- package/vendor/hyperframes/dist/grade-compare-E2CKPST4.js +647 -0
- package/vendor/hyperframes/dist/gsapParser-DIYYX6JT.js +2846 -0
- package/vendor/hyperframes/dist/gsapParserAcorn-E3GEIRZB.js +28 -0
- package/vendor/hyperframes/dist/help-YRQIDDML.js +197 -0
- package/vendor/hyperframes/dist/history-PP5NDRV3.js +571 -0
- package/vendor/hyperframes/dist/hyperframe-runtime.js +1081 -0
- package/vendor/hyperframes/dist/hyperframe.manifest.json +22 -0
- package/vendor/hyperframes/dist/hyperframe.runtime.iife.js +1081 -0
- package/vendor/hyperframes/dist/hyperframes-player.global.js +474 -0
- package/vendor/hyperframes/dist/hyperframes-slideshow.global.js +149 -0
- package/vendor/hyperframes/dist/info-SEX3B7JL.js +153 -0
- package/vendor/hyperframes/dist/init-U3AKHO5B.js +1147 -0
- package/vendor/hyperframes/dist/inspect-Q3K6EDEK.js +97 -0
- package/vendor/hyperframes/dist/installer-K6O5WF44.js +37 -0
- package/vendor/hyperframes/dist/keyframes-DC64JCI3.js +2602 -0
- package/vendor/hyperframes/dist/lambda-D7UMN4DJ.js +451 -0
- package/vendor/hyperframes/dist/layout-XSPPDHOO.js +86 -0
- package/vendor/hyperframes/dist/lib-TPG2ZMAX.js +128 -0
- package/vendor/hyperframes/dist/lint-7DQZE7L3.js +164 -0
- package/vendor/hyperframes/dist/lintProject-OHBBM3DJ.js +27 -0
- package/vendor/hyperframes/dist/list-4K5MVDQX.js +162 -0
- package/vendor/hyperframes/dist/login-NTX4OWXL.js +377 -0
- package/vendor/hyperframes/dist/logout-Q654A3SI.js +100 -0
- package/vendor/hyperframes/dist/manager-67P2XFXQ.js +34 -0
- package/vendor/hyperframes/dist/manager-CT3D67CG.js +38 -0
- package/vendor/hyperframes/dist/manager-GFN75DM4.js +30 -0
- package/vendor/hyperframes/dist/media-treatment-5FYAOPNL.js +972 -0
- package/vendor/hyperframes/dist/media-use-4XXGABIL.js +113 -0
- package/vendor/hyperframes/dist/models-C4E4IWJD.js +137 -0
- package/vendor/hyperframes/dist/motionShot-S4MIGMT5.js +614 -0
- package/vendor/hyperframes/dist/normalize-O76AC4HE.js +333 -0
- package/vendor/hyperframes/dist/normalize-audio-CSFTXLXD.js +276 -0
- package/vendor/hyperframes/dist/open-2ZD6BHZG.js +115 -0
- package/vendor/hyperframes/dist/pipeline-TNGWUZQC.js +54 -0
- package/vendor/hyperframes/dist/play-CTMUXX6E.js +349 -0
- package/vendor/hyperframes/dist/policies-FSDZVS2E.js +292 -0
- package/vendor/hyperframes/dist/preflight-SMNV6RW2.js +45 -0
- package/vendor/hyperframes/dist/present-WQVHV5CR.js +350 -0
- package/vendor/hyperframes/dist/preview-JOJXTH75.js +1820 -0
- package/vendor/hyperframes/dist/producer-ECLEN5RP.js +13 -0
- package/vendor/hyperframes/dist/progress-FBIEEB7Y.js +73 -0
- package/vendor/hyperframes/dist/projectConfig-HYJMJ5BY.js +56 -0
- package/vendor/hyperframes/dist/publication-HQ5Y3KBM.js +29 -0
- package/vendor/hyperframes/dist/publish-VHDYQASC.js +430 -0
- package/vendor/hyperframes/dist/refresh-K24ETHMA.js +53 -0
- package/vendor/hyperframes/dist/remove-background-W2YX2NVH.js +253 -0
- package/vendor/hyperframes/dist/render-AO5VX3YI.js +177 -0
- package/vendor/hyperframes/dist/render-LNO62LEL.js +2367 -0
- package/vendor/hyperframes/dist/render-TTQI7TGN.js +796 -0
- package/vendor/hyperframes/dist/render-batch-YH7CTWNY.js +284 -0
- package/vendor/hyperframes/dist/renderCancellation-JPIHE47X.js +35 -0
- package/vendor/hyperframes/dist/renderSetupWorker.js +79 -0
- package/vendor/hyperframes/dist/resolver-IZ647GBZ.js +38 -0
- package/vendor/hyperframes/dist/runtimeVersion.js +18 -0
- package/vendor/hyperframes/dist/screenshotCapture-ECBTLCU6.js +179 -0
- package/vendor/hyperframes/dist/shaderTransitionWorker.js +44 -0
- package/vendor/hyperframes/dist/sherpa-KKLNW6U2.js +314 -0
- package/vendor/hyperframes/dist/sherpaWorker.js +77 -0
- package/vendor/hyperframes/dist/sites-TNVKZS73.js +52 -0
- package/vendor/hyperframes/dist/skill-ZHVLH7KX.js +15 -0
- package/vendor/hyperframes/dist/skills/hyperframes/SKILL.md +152 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/brief-contract.md +108 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/brief-format.md +72 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/capability-menu.md +47 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/frame-worker-core.md +80 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/intent-interview.md +73 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/pitch-round.md +40 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/plugin-installation.md +43 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/production-loop.md +26 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/review-loop.md +37 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/route-briefs.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/embedded-captions.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/general-video.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/motion-graphics.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/music-to-video.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/pr-to-video.md +28 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/product-launch-video.md +13 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/slideshow.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/script-format.md +52 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/skill-lifecycle.md +35 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/storyboard-format.md +99 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/subagent-dispatch.md +35 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/workflow-catalog.md +10 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +194 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.mjs +88 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +117 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/SKILL.md +189 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/beats.md +19 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloud.md +163 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloudrun.md +62 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/doctor-browser.md +57 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/init-and-scaffold.md +74 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lambda.md +185 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/preview-render.md +193 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +134 -0
- package/vendor/hyperframes/dist/skills/media-use/SKILL.md +100 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/manifest.json +97 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/bgm.md +76 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/authoring.md +163 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/motion.md +87 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/transcript-handling.md +97 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/remove-background.md +143 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/requirements.md +29 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/sfx.md +42 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/transcribe.md +52 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/tts-to-captions.md +35 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/tts.md +260 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.mjs +311 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.test.mjs +159 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +131 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.mjs +122 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.mjs +39 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm-volume.mjs +4 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.test.mjs +74 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.mjs +43 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.py +52 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs +86 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth_test.py +90 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.mjs +122 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs +243 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.mjs +197 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +185 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.mjs +114 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +205 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.mjs +77 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.mjs +165 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +121 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.mjs +389 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +230 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.mjs +175 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.test.mjs +108 -0
- package/vendor/hyperframes/dist/skills/media-use/luts/README.md +28 -0
- package/vendor/hyperframes/dist/skills/media-use/luts/index.json +57 -0
- package/vendor/hyperframes/dist/skills/media-use/references/audio.md +20 -0
- package/vendor/hyperframes/dist/skills/media-use/references/grading.md +160 -0
- package/vendor/hyperframes/dist/skills/media-use/references/media-treatment-recipes.md +929 -0
- package/vendor/hyperframes/dist/skills/media-use/references/media-treatments.md +202 -0
- package/vendor/hyperframes/dist/skills/media-use/references/memory.md +37 -0
- package/vendor/hyperframes/dist/skills/media-use/references/meta.md +61 -0
- package/vendor/hyperframes/dist/skills/media-use/references/operations.md +327 -0
- package/vendor/hyperframes/dist/skills/media-use/references/resolve.md +150 -0
- package/vendor/hyperframes/dist/skills/media-use/references/setup-providers.md +80 -0
- package/vendor/hyperframes/dist/skills/media-use/references/telemetry-dashboard.md +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/audio-duck.mjs +113 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/compatibility.test.mjs +96 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/dither.mjs +328 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/dither.test.mjs +176 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/eval.mjs +369 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.mjs +128 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +119 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +139 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cache.mjs +148 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.mjs +91 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.d.mts +3 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.mjs +45 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.test.mjs +79 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/coverage.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.mjs +181 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.mjs +184 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.test.mjs +162 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.mjs +95 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.test.mjs +153 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ff-binaries.mjs +37 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.mjs +72 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.test.mjs +138 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.mjs +265 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.mjs +138 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +435 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/image-provider.mjs +44 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/index-gen.mjs +63 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-media-search.mjs +32 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.mjs +318 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.mjs +78 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.mjs +244 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.test.mjs +298 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.mjs +271 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +199 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.d.mts +19 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.mjs +279 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.test.mjs +397 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/match.mjs +47 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.mjs +85 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.test.mjs +197 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.mjs +20 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.test.mjs +61 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.d.mts +9 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.mjs +107 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.mjs +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.test.mjs +89 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.mjs +41 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.test.mjs +148 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/providers.mjs +5 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.mjs +212 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.test.mjs +262 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.mjs +24 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.test.mjs +32 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.mjs +132 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.test.mjs +157 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.mjs +117 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.test.mjs +165 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/svg-sanitize.mjs +21 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.mjs +210 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.test.mjs +437 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/test-home.test.mjs +10 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.mjs +21 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.test.mjs +33 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.mjs +94 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.mjs +57 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.test.mjs +54 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/words.mjs +18 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/prefs.mjs +70 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/recipe.mjs +103 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/resolve-plugin.test.mjs +62 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/resolve.mjs +1369 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.mjs +194 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.test.mjs +112 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.mjs +270 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.test.mjs +117 -0
- package/vendor/hyperframes/dist/skills-MJ2J4GEM.js +808 -0
- package/vendor/hyperframes/dist/skillsUpdateCheck-TKTYQN5R.js +26 -0
- package/vendor/hyperframes/dist/slideshow-EJ4IMY6P.js +24 -0
- package/vendor/hyperframes/dist/snapshot-KIVDUUMN.js +875 -0
- package/vendor/hyperframes/dist/src-6YQBJGWR.js +202 -0
- package/vendor/hyperframes/dist/src-PVYUYV3M.js +471 -0
- package/vendor/hyperframes/dist/state-KAXGHF77.js +26 -0
- package/vendor/hyperframes/dist/staticProjectServer-7EU666GS.js +49 -0
- package/vendor/hyperframes/dist/status-YM52BQ6S.js +311 -0
- package/vendor/hyperframes/dist/studio/assets/hyperframes-player-Cp8e_Zst.js +473 -0
- package/vendor/hyperframes/dist/studio/assets/index-BX3KHhGX.js +71 -0
- package/vendor/hyperframes/dist/studio/assets/index-CASEBNy2.js +1 -0
- package/vendor/hyperframes/dist/studio/assets/index-D11atkBt.css +1 -0
- package/vendor/hyperframes/dist/studio/assets/index-DMTt9nTf.js +531 -0
- package/vendor/hyperframes/dist/studio/assets/index-oE1pOdAy.js +399 -0
- package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js +948 -0
- package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js +938 -0
- package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js +190 -0
- package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js +1441 -0
- package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js +10 -0
- package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js +1103 -0
- package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js.map +1 -0
- package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js +47 -0
- package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js.map +1 -0
- package/vendor/hyperframes/dist/studio/favicon.svg +14 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/audio.svg +7 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/captions.svg +5 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/composition.svg +12 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/image.svg +18 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/music.svg +10 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/text.svg +3 -0
- package/vendor/hyperframes/dist/studio/index.css +165 -0
- package/vendor/hyperframes/dist/studio/index.css.map +1 -0
- package/vendor/hyperframes/dist/studio/index.d.ts +4296 -0
- package/vendor/hyperframes/dist/studio/index.html +23 -0
- package/vendor/hyperframes/dist/studio/index.js +99693 -0
- package/vendor/hyperframes/dist/studio/index.js.map +1 -0
- package/vendor/hyperframes/dist/studio/player.d.ts +30 -0
- package/vendor/hyperframes/dist/studio/player.js +10 -0
- package/vendor/hyperframes/dist/studio/player.js.map +1 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.d.ts +39 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js +50 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js.map +1 -0
- package/vendor/hyperframes/dist/studio/styles.css +1 -0
- package/vendor/hyperframes/dist/studio/ui.d.ts +296 -0
- package/vendor/hyperframes/dist/studio/ui.js +66 -0
- package/vendor/hyperframes/dist/studio/ui.js.map +1 -0
- package/vendor/hyperframes/dist/studio-api-PNQZRPX5.js +136 -0
- package/vendor/hyperframes/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
- package/vendor/hyperframes/dist/studioServer-UWRBPIOJ.js +1457 -0
- package/vendor/hyperframes/dist/synthesize-K62TIZWI.js +182 -0
- package/vendor/hyperframes/dist/system-EZYZNUFD.js +44 -0
- package/vendor/hyperframes/dist/telemetry-2YC4SGQU.js +144 -0
- package/vendor/hyperframes/dist/telemetry-QMYM4WME.js +95 -0
- package/vendor/hyperframes/dist/templates/_shared/AGENTS.md +107 -0
- package/vendor/hyperframes/dist/templates/_shared/CLAUDE.md +107 -0
- package/vendor/hyperframes/dist/templates/blank/index.html +55 -0
- package/vendor/hyperframes/dist/templates/from-file/index.html +75 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/captions.html +154 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/graphics.html +162 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/intro.html +87 -0
- package/vendor/hyperframes/dist/templates/warm-grain/index.html +264 -0
- package/vendor/hyperframes/dist/templates/warm-grain/registry-item.json +34 -0
- package/vendor/hyperframes/dist/timeline-77Z3BBQM.js +1377 -0
- package/vendor/hyperframes/dist/tokens-OBGTYE4Z.js +92 -0
- package/vendor/hyperframes/dist/transcribe-7NVFHCGA.js +387 -0
- package/vendor/hyperframes/dist/transcribe-BNSJRR4M.js +62 -0
- package/vendor/hyperframes/dist/tts-P3LIPIL5.js +234 -0
- package/vendor/hyperframes/dist/updateCheck-UDWIJ4ZQ.js +39 -0
- package/vendor/hyperframes/dist/upgrade-CT3CPO3E.js +231 -0
- package/vendor/hyperframes/dist/urlDownloader-H6WRI2UE.js +39 -0
- package/vendor/hyperframes/dist/usage-EC3KFUIJ.js +2139 -0
- package/vendor/hyperframes/dist/validate-65QDZJWZ.js +70 -0
- package/vendor/hyperframes/dist/video-FGSGKRSV.js +261 -0
- package/vendor/hyperframes/dist/workspaceBuildCheck-TOLGAI4T.js +133 -0
- package/vendor/hyperframes/package.json +80 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { strict as assert } from "node:assert";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
import {
|
|
4
|
+
getProviders,
|
|
5
|
+
getProvider,
|
|
6
|
+
listTypes,
|
|
7
|
+
providerMatches,
|
|
8
|
+
providerNamesFor,
|
|
9
|
+
runProviders,
|
|
10
|
+
runCapability,
|
|
11
|
+
providerTierFor,
|
|
12
|
+
buildProviderTierIndex,
|
|
13
|
+
} from "./registry.mjs";
|
|
14
|
+
|
|
15
|
+
// --- registry shape -------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
test("listTypes exposes the v2 media types", () => {
|
|
18
|
+
const types = listTypes();
|
|
19
|
+
for (const t of [
|
|
20
|
+
"bgm",
|
|
21
|
+
"sfx",
|
|
22
|
+
"image",
|
|
23
|
+
"icon",
|
|
24
|
+
"logo",
|
|
25
|
+
"voice",
|
|
26
|
+
"video",
|
|
27
|
+
"brand",
|
|
28
|
+
"grade",
|
|
29
|
+
"lut",
|
|
30
|
+
]) {
|
|
31
|
+
assert.ok(types.includes(t), `missing type: ${t}`);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("heygen provider is first for every type it serves except bundled sfx", () => {
|
|
36
|
+
for (const t of ["bgm", "image", "icon"]) {
|
|
37
|
+
const first = getProviders(t)[0];
|
|
38
|
+
assert.ok(first, `no enabled provider for ${t}`);
|
|
39
|
+
assert.match(first.name, /^heygen/, `${t} first provider is ${first.name}`);
|
|
40
|
+
}
|
|
41
|
+
assert.equal(getProviders("sfx")[0].name, "bundled.sfx");
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("sanctioned providers only: heygen, local mflux/kokoro/ltx, codex, design spec, logo tiers", () => {
|
|
45
|
+
const allowed =
|
|
46
|
+
/^heygen|^bundled\.sfx$|^mflux\.local$|^kokoro\.local$|^ltx\.local$|^codex\.image_gen$|^design_spec$|^thesvg$|^github\.avatar$|^favicon\.ddg$|^color_grade\.local$|^cube_lut\.local$/;
|
|
47
|
+
for (const t of listTypes()) {
|
|
48
|
+
for (const p of getProviders(t)) {
|
|
49
|
+
assert.ok(allowed.test(p.name), `${t} lists unsanctioned provider: ${p.name}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("image cascade: heygen catalog, then local mflux, then the codex upsell", () => {
|
|
55
|
+
const ps = getProviders("image");
|
|
56
|
+
assert.match(ps[0].name, /^heygen/, "heygen catalog first");
|
|
57
|
+
const names = ps.map((p) => p.name);
|
|
58
|
+
const mflux = ps.find((p) => p.name === "mflux.local");
|
|
59
|
+
const codex = ps.find((p) => p.name === "codex.image_gen");
|
|
60
|
+
assert.ok(mflux && typeof mflux.generate === "function", "local mflux registered");
|
|
61
|
+
assert.ok(codex && typeof codex.generate === "function", "codex upsell registered");
|
|
62
|
+
assert.ok(names.indexOf("mflux.local") < names.indexOf("codex.image_gen"), "local before codex");
|
|
63
|
+
assert.ok(!mflux.network, "local mflux is kept under --local-only");
|
|
64
|
+
assert.ok(codex.network, "codex is network (skipped under --local-only)");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("voice cascade: HeyGen TTS first, Kokoro remains the local fallback", () => {
|
|
68
|
+
const ps = getProviders("voice");
|
|
69
|
+
assert.equal(ps[0].name, "heygen.tts", "HeyGen TTS is first when credentials exist");
|
|
70
|
+
assert.ok(ps[0].network, "HeyGen TTS is network (skipped under --local-only)");
|
|
71
|
+
assert.ok(ps[0].paid, "HeyGen TTS may bill after the OAuth free allowance");
|
|
72
|
+
assert.equal(ps[1].name, "kokoro.local", "local Kokoro is the offline fallback");
|
|
73
|
+
assert.ok(!ps[1].network, "local Kokoro kept under --local-only");
|
|
74
|
+
assert.ok(!ps[1].paid, "local Kokoro is free");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("video cascade: HeyGen first, LTX local fallback, generate-only", async () => {
|
|
78
|
+
assert.deepEqual(providerNamesFor("video"), ["heygen.video", "ltx.local"]);
|
|
79
|
+
assert.equal(providerMatches("video", "ltx.local"), true);
|
|
80
|
+
|
|
81
|
+
const ps = getProviders("video");
|
|
82
|
+
assert.ok(ps[0].network, "HeyGen video is network (skipped under --local-only)");
|
|
83
|
+
assert.ok(ps[0].paid, "HeyGen video may bill after the OAuth free allowance");
|
|
84
|
+
assert.ok(!ps[1].network, "local LTX is kept under --local-only");
|
|
85
|
+
assert.equal(await runCapability("video", "search", "x", {}), null);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test("sfx cascade: bundled library first, HeyGen catalog remains the network fallback", () => {
|
|
89
|
+
const ps = getProviders("sfx");
|
|
90
|
+
assert.equal(ps[0].name, "bundled.sfx");
|
|
91
|
+
assert.equal(typeof ps[0].search, "function");
|
|
92
|
+
assert.ok(!ps[0].network, "bundled SFX remain available offline");
|
|
93
|
+
assert.equal(ps[1].name, "heygen.audio.sounds");
|
|
94
|
+
assert.ok(ps[1].network, "HeyGen SFX catalog is network-only");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("ctx.provider forces one generator (e.g. 'make an image WITH codex')", async () => {
|
|
98
|
+
const providers = [
|
|
99
|
+
{ name: "heygen.asset.search", network: true, search: async () => null },
|
|
100
|
+
{ name: "mflux.local", generate: async () => ({ hit: "local" }) },
|
|
101
|
+
{ name: "codex.image_gen", network: true, generate: async () => ({ hit: "codex" }) },
|
|
102
|
+
];
|
|
103
|
+
// no override: local wins (first generate to return non-null)
|
|
104
|
+
assert.deepEqual(await runProviders(providers, "generate", "x", {}), { hit: "local" });
|
|
105
|
+
// override to codex: skip local, use codex even though local would have worked
|
|
106
|
+
assert.deepEqual(await runProviders(providers, "generate", "x", { provider: "codex" }), {
|
|
107
|
+
hit: "codex",
|
|
108
|
+
});
|
|
109
|
+
// override matches the full name too
|
|
110
|
+
assert.deepEqual(
|
|
111
|
+
await runProviders(providers, "generate", "x", { provider: "codex.image_gen" }),
|
|
112
|
+
{ hit: "codex" },
|
|
113
|
+
);
|
|
114
|
+
// --local-only wins even over a forced network provider: no network call,
|
|
115
|
+
// clean miss (the caller surfaces the conflict). A forced LOCAL provider under
|
|
116
|
+
// --local-only still runs.
|
|
117
|
+
assert.equal(
|
|
118
|
+
await runProviders(providers, "generate", "x", { provider: "codex", localOnly: true }),
|
|
119
|
+
null,
|
|
120
|
+
);
|
|
121
|
+
assert.deepEqual(
|
|
122
|
+
await runProviders(providers, "generate", "x", { provider: "mflux", localOnly: true }),
|
|
123
|
+
{ hit: "local" },
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test("getProvider returns the first provider with its type, throws for unknown", () => {
|
|
128
|
+
const p = getProvider("bgm");
|
|
129
|
+
assert.equal(p.type, "bgm");
|
|
130
|
+
assert.equal(typeof p.search, "function");
|
|
131
|
+
assert.throws(() => getProvider("unknown_type"), /unknown media type/);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test("getProviders throws for unknown type", () => {
|
|
135
|
+
assert.throws(() => getProviders("nope"), /unknown media type/);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// --- deterministic capability execution (runProviders core) ---------------
|
|
139
|
+
|
|
140
|
+
test("runProviders calls providers in order and returns the first non-null", async () => {
|
|
141
|
+
const calls = [];
|
|
142
|
+
const providers = [
|
|
143
|
+
{
|
|
144
|
+
name: "a",
|
|
145
|
+
enabled: true,
|
|
146
|
+
search: async () => {
|
|
147
|
+
calls.push("a");
|
|
148
|
+
return null;
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: "b",
|
|
153
|
+
enabled: true,
|
|
154
|
+
search: async () => {
|
|
155
|
+
calls.push("b");
|
|
156
|
+
return { hit: "b" };
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: "c",
|
|
161
|
+
enabled: true,
|
|
162
|
+
search: async () => {
|
|
163
|
+
calls.push("c");
|
|
164
|
+
return { hit: "c" };
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
];
|
|
168
|
+
const res = await runProviders(providers, "search", "x", {});
|
|
169
|
+
assert.deepEqual(res, { hit: "b" });
|
|
170
|
+
assert.deepEqual(calls, ["a", "b"], "must stop at first non-null, never call c");
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
test("runProviders skips providers missing the requested capability", async () => {
|
|
174
|
+
const providers = [
|
|
175
|
+
{ name: "a", enabled: true /* no search */ },
|
|
176
|
+
{ name: "b", enabled: true, search: async () => ({ hit: "b" }) },
|
|
177
|
+
];
|
|
178
|
+
const res = await runProviders(providers, "search", "x", {});
|
|
179
|
+
assert.deepEqual(res, { hit: "b" });
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
test("runProviders returns null when no provider yields a result", async () => {
|
|
183
|
+
const providers = [{ name: "a", enabled: true, search: async () => null }];
|
|
184
|
+
assert.equal(await runProviders(providers, "search", "x", {}), null);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
test("runCapability('bgm','process') is null — process slot is graceful when unfilled", async () => {
|
|
188
|
+
assert.equal(await runCapability("bgm", "process", "x", {}), null);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// --- provider cost tier (telemetry) ---------------------------------------
|
|
192
|
+
|
|
193
|
+
test("providerTierFor reports the registry's own A/N/P declaration", () => {
|
|
194
|
+
assert.equal(providerTierFor("heygen.tts"), "network_paid");
|
|
195
|
+
assert.equal(providerTierFor("heygen.video"), "network_paid");
|
|
196
|
+
assert.equal(providerTierFor("heygen.audio.sounds"), "network_free");
|
|
197
|
+
assert.equal(providerTierFor("heygen.asset.search"), "network_free");
|
|
198
|
+
assert.equal(providerTierFor("codex.image_gen"), "network_free");
|
|
199
|
+
assert.equal(providerTierFor("bundled.sfx"), "local");
|
|
200
|
+
assert.equal(providerTierFor("kokoro.local"), "local");
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
test("providerTierFor agrees across every type that declares the same name", () => {
|
|
204
|
+
// heygen.audio.sounds serves both bgm and sfx; heygen.asset.search serves both
|
|
205
|
+
// image and icon. A name whose tier depended on the media type would make the
|
|
206
|
+
// telemetry property meaningless.
|
|
207
|
+
const byName = new Map();
|
|
208
|
+
for (const type of listTypes()) {
|
|
209
|
+
for (const name of providerNamesFor(type)) {
|
|
210
|
+
const tier = providerTierFor(name);
|
|
211
|
+
assert.ok(tier, `every declared provider has a tier (${type}/${name})`);
|
|
212
|
+
const prior = byName.get(name);
|
|
213
|
+
if (prior) assert.equal(tier, prior, `${name} must carry one tier across types`);
|
|
214
|
+
byName.set(name, tier);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
test("providerTierFor returns undefined for a name the registry does not declare", () => {
|
|
220
|
+
assert.equal(providerTierFor("does.not.exist"), undefined);
|
|
221
|
+
assert.equal(providerTierFor(undefined), undefined);
|
|
222
|
+
assert.equal(providerTierFor(null), undefined);
|
|
223
|
+
assert.equal(providerTierFor(""), undefined);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
test("buildProviderTierIndex throws when one name carries two tiers", () => {
|
|
227
|
+
assert.throws(
|
|
228
|
+
() =>
|
|
229
|
+
buildProviderTierIndex([
|
|
230
|
+
[{ name: "dual", network: true }],
|
|
231
|
+
[{ name: "dual", network: true, paid: true }],
|
|
232
|
+
]),
|
|
233
|
+
/declared network_free under one media type and network_paid under another/,
|
|
234
|
+
);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
test("buildProviderTierIndex accepts the same name repeated at the same tier", () => {
|
|
238
|
+
const index = buildProviderTierIndex([
|
|
239
|
+
[{ name: "same", network: true }],
|
|
240
|
+
[{ name: "same", network: true }],
|
|
241
|
+
]);
|
|
242
|
+
assert.equal(index.get("same"), "network_free");
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
test("--local-only skips every network provider (even free remote ones)", async () => {
|
|
246
|
+
let remoteRan = false;
|
|
247
|
+
const providers = [
|
|
248
|
+
{
|
|
249
|
+
name: "heygen",
|
|
250
|
+
network: true,
|
|
251
|
+
search: async () => {
|
|
252
|
+
remoteRan = true;
|
|
253
|
+
return { hit: "net" };
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
{ name: "local", search: async () => ({ hit: "local" }) },
|
|
257
|
+
];
|
|
258
|
+
assert.deepEqual(await runProviders(providers, "search", "x", { localOnly: true }), {
|
|
259
|
+
hit: "local",
|
|
260
|
+
});
|
|
261
|
+
assert.equal(remoteRan, false, "the remote provider must not be called offline");
|
|
262
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Paginated text search over a manifest (project or global) by id / description
|
|
2
|
+
// / entity. Plain substring match — no vector DB (B4): the agent's own file
|
|
3
|
+
// search covers semantics; this just keeps result pages small enough to not
|
|
4
|
+
// blow the context window.
|
|
5
|
+
|
|
6
|
+
const PAGE = 10;
|
|
7
|
+
|
|
8
|
+
export function searchRecords(records, query, { page = 1, pageSize = PAGE } = {}) {
|
|
9
|
+
const q = String(query || "")
|
|
10
|
+
.trim()
|
|
11
|
+
.toLowerCase();
|
|
12
|
+
const matched = q
|
|
13
|
+
? records.filter((r) =>
|
|
14
|
+
[r.id, r.description, r.entity, r.type].some(
|
|
15
|
+
(f) => f && String(f).toLowerCase().includes(q),
|
|
16
|
+
),
|
|
17
|
+
)
|
|
18
|
+
: records.slice();
|
|
19
|
+
const total = matched.length;
|
|
20
|
+
const pages = Math.max(1, Math.ceil(total / pageSize));
|
|
21
|
+
const p = Math.min(Math.max(1, page), pages);
|
|
22
|
+
const start = (p - 1) * pageSize;
|
|
23
|
+
return { results: matched.slice(start, start + pageSize), total, page: p, pages, pageSize };
|
|
24
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { strict as assert } from "node:assert";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
import { searchRecords } from "./search.mjs";
|
|
4
|
+
|
|
5
|
+
const recs = Array.from({ length: 23 }, (_, i) => ({
|
|
6
|
+
id: `bgm_${i}`,
|
|
7
|
+
type: i % 2 ? "bgm" : "sfx",
|
|
8
|
+
description: i === 5 ? "energetic tech whoosh" : `track ${i}`,
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
test("matches id / description / type, case-insensitively", () => {
|
|
12
|
+
assert.equal(searchRecords(recs, "ENERGETIC").results.length, 1);
|
|
13
|
+
assert.equal(searchRecords(recs, "energetic").results[0].id, "bgm_5");
|
|
14
|
+
assert.ok(searchRecords(recs, "sfx").total > 0);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("caps page size and reports pagination", () => {
|
|
18
|
+
const r = searchRecords(recs, "", { pageSize: 10 });
|
|
19
|
+
assert.equal(r.results.length, 10, "never returns more than a page");
|
|
20
|
+
assert.equal(r.total, 23);
|
|
21
|
+
assert.equal(r.pages, 3);
|
|
22
|
+
assert.equal(r.page, 1);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test("page navigation returns the right slice, clamps out-of-range", () => {
|
|
26
|
+
assert.equal(searchRecords(recs, "", { page: 3, pageSize: 10 }).results.length, 3);
|
|
27
|
+
assert.equal(searchRecords(recs, "", { page: 99, pageSize: 10 }).page, 3, "clamped to last page");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("empty query returns everything (paginated)", () => {
|
|
31
|
+
assert.equal(searchRecords(recs, "").total, 23);
|
|
32
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { heygenSearch } from "./heygen-search.mjs";
|
|
2
|
+
|
|
3
|
+
export const sfxProvider = {
|
|
4
|
+
async search(intent) {
|
|
5
|
+
const results = heygenSearch("audio sounds list", intent, {
|
|
6
|
+
type: "sound_effects",
|
|
7
|
+
minScore: 0.4,
|
|
8
|
+
});
|
|
9
|
+
if (!results) return null;
|
|
10
|
+
const best = results[0];
|
|
11
|
+
return {
|
|
12
|
+
url: best.audio_url,
|
|
13
|
+
source: "search",
|
|
14
|
+
// ext derived from audio_url by resolve.mjs — catalog SFX are .mp3 or .wav
|
|
15
|
+
metadata: {
|
|
16
|
+
description: best.description || best.name || intent,
|
|
17
|
+
duration: best.duration || null,
|
|
18
|
+
provider: "heygen.audio.sounds",
|
|
19
|
+
provenance: { track_id: best.id, score: best.score, query: intent },
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// Machine-capability probe for the spec-gated local-model fallback.
|
|
2
|
+
//
|
|
3
|
+
// Local models are USER-INSTALLED and local-use-only — media-use recommends,
|
|
4
|
+
// spec-checks, and assists install, but never bundles or runs them as a service.
|
|
5
|
+
// This probe answers "what tier can this machine actually run?" so selection can
|
|
6
|
+
// offer a medium/large local model, or fall back to recommending the CLI path.
|
|
7
|
+
//
|
|
8
|
+
// `osMod` and `exec` are injectable for tests. `exec(cmd)` returns the command's
|
|
9
|
+
// stdout as a string, or throws / returns null on failure.
|
|
10
|
+
|
|
11
|
+
import os from "node:os";
|
|
12
|
+
import { statfsSync } from "node:fs";
|
|
13
|
+
import { dirname, join } from "node:path";
|
|
14
|
+
import { execSync } from "node:child_process";
|
|
15
|
+
|
|
16
|
+
function defaultExec(cmd) {
|
|
17
|
+
return execSync(cmd, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 4000 });
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Available (not just total) RAM — the real budget for "will this model fit
|
|
21
|
+
// alongside the OS + open apps". On unified-memory Macs the model shares system
|
|
22
|
+
// RAM, so a big model on a busy machine OOMs/thrashes even if total RAM looks
|
|
23
|
+
// ample. macOS: vm_stat free + inactive + speculative + purgeable pages (all
|
|
24
|
+
// reclaimable). Linux: /proc/meminfo MemAvailable. Fallback: total (optimistic
|
|
25
|
+
// but stable when the probe is unavailable, e.g. in tests).
|
|
26
|
+
function availableRamMB(platform, exec, totalMB) {
|
|
27
|
+
try {
|
|
28
|
+
if (platform === "darwin") {
|
|
29
|
+
const out = String(exec("vm_stat"));
|
|
30
|
+
const pageSize = parseInt((out.match(/page size of (\d+)/) || [])[1] || "16384", 10);
|
|
31
|
+
const pages = (name) => {
|
|
32
|
+
const m = out.match(new RegExp(`${name}:\\s+(\\d+)`));
|
|
33
|
+
return m ? parseInt(m[1], 10) : 0;
|
|
34
|
+
};
|
|
35
|
+
const reclaimable =
|
|
36
|
+
pages("Pages free") +
|
|
37
|
+
pages("Pages inactive") +
|
|
38
|
+
pages("Pages speculative") +
|
|
39
|
+
pages("Pages purgeable");
|
|
40
|
+
const mb = Math.round((reclaimable * pageSize) / (1024 * 1024));
|
|
41
|
+
if (mb > 0) return mb;
|
|
42
|
+
} else if (platform === "linux") {
|
|
43
|
+
const out = String(exec("cat /proc/meminfo"));
|
|
44
|
+
const m = out.match(/MemAvailable:\s+(\d+)\s+kB/);
|
|
45
|
+
if (m) return Math.round(parseInt(m[1], 10) / 1024);
|
|
46
|
+
}
|
|
47
|
+
} catch {
|
|
48
|
+
// probe unavailable — fall through to the total-RAM estimate
|
|
49
|
+
}
|
|
50
|
+
return totalMB;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function detectGpu(platform, arch, ramMB, exec) {
|
|
54
|
+
// Apple Silicon: Metal GPU with unified memory — VRAM tracks system RAM.
|
|
55
|
+
if (platform === "darwin" && arch === "arm64") {
|
|
56
|
+
return { present: true, kind: "apple", vramMB: ramMB };
|
|
57
|
+
}
|
|
58
|
+
// NVIDIA: query total VRAM. Any failure (no driver, no GPU) -> no GPU.
|
|
59
|
+
try {
|
|
60
|
+
const out = exec("nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits");
|
|
61
|
+
const mb = parseInt(String(out).trim().split(/\r?\n/)[0], 10);
|
|
62
|
+
if (Number.isFinite(mb) && mb > 0) return { present: true, kind: "nvidia", vramMB: mb };
|
|
63
|
+
} catch {
|
|
64
|
+
// fall through — no usable GPU
|
|
65
|
+
}
|
|
66
|
+
return { present: false, kind: null, vramMB: 0 };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function probeSpecs({ osMod = os, exec = defaultExec } = {}) {
|
|
70
|
+
const platform = osMod.platform();
|
|
71
|
+
const arch = osMod.arch();
|
|
72
|
+
const cpuCores = osMod.cpus().length;
|
|
73
|
+
const ramMB = Math.round(osMod.totalmem() / (1024 * 1024));
|
|
74
|
+
return {
|
|
75
|
+
platform,
|
|
76
|
+
arch,
|
|
77
|
+
cpuCores,
|
|
78
|
+
ramMB,
|
|
79
|
+
availableRamMB: availableRamMB(platform, exec, ramMB),
|
|
80
|
+
appleSilicon: platform === "darwin" && arch === "arm64",
|
|
81
|
+
gpu: detectGpu(platform, arch, ramMB, exec),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Where Hugging Face actually puts downloaded weights. A free-space check
|
|
86
|
+
// against cwd measures the wrong filesystem, so the disk question has to be
|
|
87
|
+
// asked about this directory. Precedence follows huggingface_hub's own order.
|
|
88
|
+
export function weightsCacheDir({ env = process.env, osMod = os } = {}) {
|
|
89
|
+
if (env.HF_HUB_CACHE) return env.HF_HUB_CACHE;
|
|
90
|
+
if (env.HUGGINGFACE_HUB_CACHE) return env.HUGGINGFACE_HUB_CACHE;
|
|
91
|
+
if (env.HF_HOME) return join(env.HF_HOME, "hub");
|
|
92
|
+
return join(osMod.homedir(), ".cache", "huggingface", "hub");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Free space on the filesystem that will hold the weights. The cache dir
|
|
96
|
+
// usually does not exist until the first download and statfs throws on a
|
|
97
|
+
// missing path, so walk up to the deepest ancestor that does exist. Returns
|
|
98
|
+
// null when even the root cannot be read, so callers can say "unknown" instead
|
|
99
|
+
// of implying zero and scaring someone off a download that would have worked.
|
|
100
|
+
export function freeSpaceMB(dir, statfsFn = statfsSync) {
|
|
101
|
+
let path = dir;
|
|
102
|
+
for (;;) {
|
|
103
|
+
try {
|
|
104
|
+
const { bavail, bsize } = statfsFn(path);
|
|
105
|
+
return (bavail * bsize) / 1e6;
|
|
106
|
+
} catch {
|
|
107
|
+
const parent = dirname(path);
|
|
108
|
+
if (parent === path) return null;
|
|
109
|
+
path = parent;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// One line the user reads BEFORE agreeing to a pull that can be tens of GB.
|
|
115
|
+
// Always names the size and where it lands. When it will not fit we say so
|
|
116
|
+
// plainly rather than withholding the tier: a machine that could free up space
|
|
117
|
+
// should still be told the tier exists. `statfsFn` / `env` / `osMod` are
|
|
118
|
+
// injectable for tests.
|
|
119
|
+
export function describeDownload(
|
|
120
|
+
sizeMB,
|
|
121
|
+
{ statfsFn = statfsSync, env = process.env, osMod = os } = {},
|
|
122
|
+
) {
|
|
123
|
+
const dir = weightsCacheDir({ env, osMod });
|
|
124
|
+
const gb = (mb) => (mb / 1000).toFixed(1);
|
|
125
|
+
const head = `downloads ~${gb(sizeMB)}GB of weights to ${dir}`;
|
|
126
|
+
const free = freeSpaceMB(dir, statfsFn);
|
|
127
|
+
if (free == null) return `${head} (free space unknown)`;
|
|
128
|
+
if (free < sizeMB) {
|
|
129
|
+
return `${head}, but only ${gb(free)}GB is free there, so it will NOT fit as-is`;
|
|
130
|
+
}
|
|
131
|
+
return `${head} (${gb(free)}GB free there)`;
|
|
132
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { strict as assert } from "node:assert";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
import { describeDownload, freeSpaceMB, probeSpecs, weightsCacheDir } from "./specs.mjs";
|
|
4
|
+
|
|
5
|
+
// Fake os module + exec so the probe is deterministic across CI machines.
|
|
6
|
+
const fakeOs = (over = {}) => ({
|
|
7
|
+
platform: () => over.platform ?? "linux",
|
|
8
|
+
arch: () => over.arch ?? "x64",
|
|
9
|
+
cpus: () => Array.from({ length: over.cores ?? 8 }),
|
|
10
|
+
totalmem: () => (over.ramMB ?? 16384) * 1024 * 1024,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test("probeSpecs reports structured caps", () => {
|
|
14
|
+
const s = probeSpecs({ osMod: fakeOs({ cores: 12, ramMB: 32768 }), exec: () => null });
|
|
15
|
+
assert.equal(s.cpuCores, 12);
|
|
16
|
+
assert.equal(s.ramMB, 32768);
|
|
17
|
+
assert.equal(s.platform, "linux");
|
|
18
|
+
assert.equal(s.gpu.present, false);
|
|
19
|
+
// probe unavailable (exec returns null) -> availableRamMB falls back to total
|
|
20
|
+
assert.equal(s.availableRamMB, 32768);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("availableRamMB is read from /proc/meminfo on Linux", () => {
|
|
24
|
+
const exec = (cmd) =>
|
|
25
|
+
cmd.includes("meminfo") ? "MemTotal: 33554432 kB\nMemAvailable: 8388608 kB\n" : null;
|
|
26
|
+
const s = probeSpecs({ osMod: fakeOs({ platform: "linux", ramMB: 32768 }), exec });
|
|
27
|
+
assert.equal(s.availableRamMB, 8192, "8388608 kB -> 8192 MB");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("availableRamMB is summed from reclaimable vm_stat pages on macOS", () => {
|
|
31
|
+
const vmStat =
|
|
32
|
+
"Mach Virtual Memory Statistics: (page size of 16384 bytes)\n" +
|
|
33
|
+
"Pages free: 100000.\n" +
|
|
34
|
+
"Pages inactive: 200000.\n" +
|
|
35
|
+
"Pages speculative: 50000.\n" +
|
|
36
|
+
"Pages purgeable: 10000.\n";
|
|
37
|
+
const exec = (cmd) => (cmd.includes("vm_stat") ? vmStat : null);
|
|
38
|
+
const s = probeSpecs({
|
|
39
|
+
osMod: fakeOs({ platform: "darwin", arch: "arm64", ramMB: 24576 }),
|
|
40
|
+
exec,
|
|
41
|
+
});
|
|
42
|
+
// (100000+200000+50000+10000) pages * 16384 B / 1MiB = 5625 MB
|
|
43
|
+
assert.equal(s.availableRamMB, 5625);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("Apple Silicon is detected as a unified-memory GPU", () => {
|
|
47
|
+
const s = probeSpecs({
|
|
48
|
+
osMod: fakeOs({ platform: "darwin", arch: "arm64", ramMB: 24576 }),
|
|
49
|
+
exec: () => null,
|
|
50
|
+
});
|
|
51
|
+
assert.equal(s.appleSilicon, true);
|
|
52
|
+
assert.equal(s.gpu.present, true);
|
|
53
|
+
assert.equal(s.gpu.kind, "apple");
|
|
54
|
+
// unified memory: VRAM tracks system RAM
|
|
55
|
+
assert.equal(s.gpu.vramMB, 24576);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test("NVIDIA GPU is detected via nvidia-smi VRAM query", () => {
|
|
59
|
+
const exec = (cmd) => (cmd.includes("nvidia-smi") ? "24564" : null);
|
|
60
|
+
const s = probeSpecs({ osMod: fakeOs({ platform: "linux" }), exec });
|
|
61
|
+
assert.equal(s.gpu.present, true);
|
|
62
|
+
assert.equal(s.gpu.kind, "nvidia");
|
|
63
|
+
assert.equal(s.gpu.vramMB, 24564);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test("no GPU when nvidia-smi is absent / fails", () => {
|
|
67
|
+
const s = probeSpecs({
|
|
68
|
+
osMod: fakeOs({ platform: "linux" }),
|
|
69
|
+
exec: () => {
|
|
70
|
+
throw new Error("command not found");
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
assert.equal(s.gpu.present, false);
|
|
74
|
+
assert.equal(s.gpu.vramMB, 0);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// --- download disclosure: what the user is agreeing to before the pull ---
|
|
78
|
+
|
|
79
|
+
const fakeHome = { homedir: () => "/home/tester" };
|
|
80
|
+
// statfs reports blocks, not bytes: bavail * bsize. 1 MB blocks keep the sums
|
|
81
|
+
// readable, and mirror the real struct's shape.
|
|
82
|
+
const fakeStatfs = (freeMB, existsOnly) => (path) => {
|
|
83
|
+
if (existsOnly && path !== existsOnly) throw new Error(`ENOENT: ${path}`);
|
|
84
|
+
return { bavail: freeMB, bsize: 1e6 };
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
test("weightsCacheDir follows huggingface_hub's precedence", () => {
|
|
88
|
+
assert.equal(
|
|
89
|
+
weightsCacheDir({ env: {}, osMod: fakeHome }),
|
|
90
|
+
"/home/tester/.cache/huggingface/hub",
|
|
91
|
+
);
|
|
92
|
+
assert.equal(weightsCacheDir({ env: { HF_HOME: "/data/hf" }, osMod: fakeHome }), "/data/hf/hub");
|
|
93
|
+
assert.equal(
|
|
94
|
+
weightsCacheDir({ env: { HF_HOME: "/data/hf", HUGGINGFACE_HUB_CACHE: "/c" }, osMod: fakeHome }),
|
|
95
|
+
"/c",
|
|
96
|
+
"HUGGINGFACE_HUB_CACHE outranks HF_HOME",
|
|
97
|
+
);
|
|
98
|
+
assert.equal(
|
|
99
|
+
weightsCacheDir({ env: { HF_HUB_CACHE: "/a", HUGGINGFACE_HUB_CACHE: "/c" }, osMod: fakeHome }),
|
|
100
|
+
"/a",
|
|
101
|
+
"HF_HUB_CACHE wins outright",
|
|
102
|
+
);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test("freeSpaceMB walks up to the deepest existing ancestor", () => {
|
|
106
|
+
// the cache dir does not exist until the first download, and statfs throws
|
|
107
|
+
// on a missing path - so the answer has to come from an ancestor
|
|
108
|
+
const statfs = fakeStatfs(4096, "/home");
|
|
109
|
+
assert.equal(freeSpaceMB("/home/tester/.cache/huggingface/hub", statfs), 4096);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("freeSpaceMB reports null rather than zero when nothing can be read", () => {
|
|
113
|
+
assert.equal(
|
|
114
|
+
freeSpaceMB("/home/tester/.cache", () => {
|
|
115
|
+
throw new Error("EACCES");
|
|
116
|
+
}),
|
|
117
|
+
null,
|
|
118
|
+
"unknown must not be reported as no-space",
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
test("describeDownload names the size and where it lands", () => {
|
|
123
|
+
const msg = describeDownload(87500, {
|
|
124
|
+
statfsFn: fakeStatfs(200000),
|
|
125
|
+
env: {},
|
|
126
|
+
osMod: fakeHome,
|
|
127
|
+
});
|
|
128
|
+
assert.match(msg, /~87\.5GB/);
|
|
129
|
+
assert.match(msg, /\/home\/tester\/\.cache\/huggingface\/hub/);
|
|
130
|
+
assert.match(msg, /200\.0GB free/);
|
|
131
|
+
assert.equal(/NOT fit/.test(msg), false, "it fits, so no warning");
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test("describeDownload says plainly when the weights will not fit", () => {
|
|
135
|
+
const msg = describeDownload(87500, {
|
|
136
|
+
statfsFn: fakeStatfs(14000),
|
|
137
|
+
env: {},
|
|
138
|
+
osMod: fakeHome,
|
|
139
|
+
});
|
|
140
|
+
assert.match(msg, /only 14\.0GB is free there/);
|
|
141
|
+
assert.match(msg, /will NOT fit as-is/);
|
|
142
|
+
// the tier is still described, not withheld: a machine that could free up
|
|
143
|
+
// space should know the tier exists
|
|
144
|
+
assert.match(msg, /~87\.5GB/);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("describeDownload admits when free space is unknown", () => {
|
|
148
|
+
const msg = describeDownload(87500, {
|
|
149
|
+
statfsFn: () => {
|
|
150
|
+
throw new Error("EACCES");
|
|
151
|
+
},
|
|
152
|
+
env: {},
|
|
153
|
+
osMod: fakeHome,
|
|
154
|
+
});
|
|
155
|
+
assert.match(msg, /free space unknown/);
|
|
156
|
+
assert.equal(/NOT fit/.test(msg), false, "unknown is not a refusal");
|
|
157
|
+
});
|