@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,1001 @@
|
|
|
1
|
+
import { createRequire as __hf_createRequire } from "node:module";
|
|
2
|
+
import { fileURLToPath as __hf_fileURLToPath } from "node:url";
|
|
3
|
+
import { dirname as __hf_dirname } from "node:path";
|
|
4
|
+
var require = __hf_createRequire(import.meta.url);
|
|
5
|
+
var __filename = __hf_fileURLToPath(import.meta.url);
|
|
6
|
+
var __dirname = __hf_dirname(__filename);
|
|
7
|
+
import {
|
|
8
|
+
runAdd
|
|
9
|
+
} from "./chunk-F3WZGU7C.js";
|
|
10
|
+
import "./chunk-XH4DSOS5.js";
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_PROJECT_CONFIG,
|
|
13
|
+
loadProjectConfig
|
|
14
|
+
} from "./chunk-CFKU7HTK.js";
|
|
15
|
+
import "./chunk-XT7X6QCP.js";
|
|
16
|
+
import "./chunk-4YYJOFKS.js";
|
|
17
|
+
import "./chunk-HVW7ABXD.js";
|
|
18
|
+
import {
|
|
19
|
+
Ee,
|
|
20
|
+
me,
|
|
21
|
+
q,
|
|
22
|
+
ue
|
|
23
|
+
} from "./chunk-WMQNIQDJ.js";
|
|
24
|
+
import {
|
|
25
|
+
loadAllItems
|
|
26
|
+
} from "./chunk-LYNI3FOL.js";
|
|
27
|
+
import "./chunk-CWPVM2QV.js";
|
|
28
|
+
import {
|
|
29
|
+
fetchRegistryManifest
|
|
30
|
+
} from "./chunk-A2Z4Z4VL.js";
|
|
31
|
+
import "./chunk-AWDFDFI3.js";
|
|
32
|
+
import "./chunk-P6LJ4Y32.js";
|
|
33
|
+
import "./chunk-GMECXFAN.js";
|
|
34
|
+
import {
|
|
35
|
+
downloadFile
|
|
36
|
+
} from "./chunk-X5HWXQPU.js";
|
|
37
|
+
import "./chunk-JTHMTOMQ.js";
|
|
38
|
+
import "./chunk-EISRN4E6.js";
|
|
39
|
+
import "./chunk-VWG7OQKU.js";
|
|
40
|
+
import {
|
|
41
|
+
c
|
|
42
|
+
} from "./chunk-ZTZA4UWZ.js";
|
|
43
|
+
import "./chunk-IUZFXWSV.js";
|
|
44
|
+
import "./chunk-AMKC3AXA.js";
|
|
45
|
+
import {
|
|
46
|
+
defineCommand
|
|
47
|
+
} from "./chunk-S3S4TGEH.js";
|
|
48
|
+
import "./chunk-54HJ63Q2.js";
|
|
49
|
+
import {
|
|
50
|
+
finishCommand
|
|
51
|
+
} from "./chunk-PBN6GBJE.js";
|
|
52
|
+
import "./chunk-K2FTXJYH.js";
|
|
53
|
+
import "./chunk-2YN64IN5.js";
|
|
54
|
+
import "./chunk-AVUUN2XD.js";
|
|
55
|
+
import "./chunk-DPVXBVLL.js";
|
|
56
|
+
import "./chunk-Z6B37SNM.js";
|
|
57
|
+
import "./chunk-HWKCIWQT.js";
|
|
58
|
+
import "./chunk-VC76R6W2.js";
|
|
59
|
+
import {
|
|
60
|
+
realpath
|
|
61
|
+
} from "./chunk-OFQWTKPW.js";
|
|
62
|
+
import "./chunk-TWWSYAKJ.js";
|
|
63
|
+
import "./chunk-ZJUKFZ2P.js";
|
|
64
|
+
import "./chunk-HBBJFK6I.js";
|
|
65
|
+
import "./chunk-PJ3HDUCY.js";
|
|
66
|
+
import "./chunk-TQFG7HTI.js";
|
|
67
|
+
import "./chunk-GK4AIFIH.js";
|
|
68
|
+
import "./chunk-2PSPARWP.js";
|
|
69
|
+
import "./chunk-K4WIOZFP.js";
|
|
70
|
+
import {
|
|
71
|
+
readConfig,
|
|
72
|
+
updateLocalModelConsent
|
|
73
|
+
} from "./chunk-XUXGIA7H.js";
|
|
74
|
+
import {
|
|
75
|
+
isAttendedTerminal
|
|
76
|
+
} from "./chunk-WERLJGIC.js";
|
|
77
|
+
import "./chunk-ISN5GRYI.js";
|
|
78
|
+
import "./chunk-FLWXXDNS.js";
|
|
79
|
+
import "./chunk-KNU5COPB.js";
|
|
80
|
+
import {
|
|
81
|
+
installedOptionalPackageVersion,
|
|
82
|
+
loadInstalledOptionalPackage,
|
|
83
|
+
loadOptionalPackage
|
|
84
|
+
} from "./chunk-XT5P4QMO.js";
|
|
85
|
+
import "./chunk-6BEFEWFB.js";
|
|
86
|
+
import "./chunk-3GXQPCJC.js";
|
|
87
|
+
import "./chunk-RQVDTPGD.js";
|
|
88
|
+
import "./chunk-PMRBLBUP.js";
|
|
89
|
+
import "./chunk-M2WBOQ2Q.js";
|
|
90
|
+
|
|
91
|
+
// src/commands/catalog.ts
|
|
92
|
+
import { relative, resolve } from "path";
|
|
93
|
+
|
|
94
|
+
// src/registry/localSearch.ts
|
|
95
|
+
var STOP = new Set(
|
|
96
|
+
"the a an and or of to in on at is are be it its for with that this as by from into one two must not no all over under across while when where which who whom whose they them their we our you your he she his her but if then than so such can may might will would should each other another same both few more most some any every".split(" ")
|
|
97
|
+
);
|
|
98
|
+
var STRONG_FIELD_WEIGHT = 3;
|
|
99
|
+
var PLURAL_RULES = [
|
|
100
|
+
[/([^aeiou])ies$/, "$1y"],
|
|
101
|
+
// stories -> story
|
|
102
|
+
[/(ch|sh|ss|x)es$/, "$1"],
|
|
103
|
+
// matches -> match, glasses -> glass
|
|
104
|
+
[/(ss|us|is)$/, "$&"],
|
|
105
|
+
// press, status, axis: the trailing s is not a plural
|
|
106
|
+
[/s$/, ""]
|
|
107
|
+
// counts -> count, pulses -> pulse
|
|
108
|
+
];
|
|
109
|
+
function singularize(word) {
|
|
110
|
+
if (word.length <= 3) return word;
|
|
111
|
+
for (const [pattern, replacement] of PLURAL_RULES) {
|
|
112
|
+
if (pattern.test(word)) return word.replace(pattern, replacement);
|
|
113
|
+
}
|
|
114
|
+
return word;
|
|
115
|
+
}
|
|
116
|
+
function tokenize(text) {
|
|
117
|
+
const words = text.toLowerCase().match(/[a-z]+/g) ?? [];
|
|
118
|
+
return words.filter((word) => word.length > 2 && !STOP.has(word)).map(singularize);
|
|
119
|
+
}
|
|
120
|
+
function hasNoSearchableTokens(query) {
|
|
121
|
+
return tokenize(query).length === 0 && query.trim().length > 0;
|
|
122
|
+
}
|
|
123
|
+
var INFERRED_TOKEN_WEIGHT = 0.35;
|
|
124
|
+
function expandCompounds(want, order, vocabulary) {
|
|
125
|
+
const infer = (token) => {
|
|
126
|
+
if (!want.has(token)) want.set(token, INFERRED_TOKEN_WEIGHT);
|
|
127
|
+
};
|
|
128
|
+
for (const token of order) {
|
|
129
|
+
if (token.length < 6) continue;
|
|
130
|
+
for (let cut = 3; cut <= token.length - 3; cut++) {
|
|
131
|
+
const head = token.slice(0, cut);
|
|
132
|
+
const tail = token.slice(cut);
|
|
133
|
+
if (vocabulary.has(head) && vocabulary.has(tail)) {
|
|
134
|
+
infer(head);
|
|
135
|
+
infer(tail);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
for (let i = 0; i < order.length - 1; i++) {
|
|
141
|
+
const joined = `${order[i]}${order[i + 1]}`;
|
|
142
|
+
if (vocabulary.has(joined)) infer(joined);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function rankByWords(query, items, textOf) {
|
|
146
|
+
const asked = tokenize(query);
|
|
147
|
+
const want = new Map(asked.map((token) => [token, 1]));
|
|
148
|
+
if (want.size === 0) return items.map((item) => ({ item, score: 0 }));
|
|
149
|
+
const parsed = items.map((item) => {
|
|
150
|
+
const { strong, weak } = textOf(item);
|
|
151
|
+
const strongTokens = new Set(tokenize(strong));
|
|
152
|
+
return { item, strongTokens, allTokens: /* @__PURE__ */ new Set([...strongTokens, ...tokenize(weak)]) };
|
|
153
|
+
});
|
|
154
|
+
const vocabulary = /* @__PURE__ */ new Set();
|
|
155
|
+
for (const entry of parsed) for (const token of entry.allTokens) vocabulary.add(token);
|
|
156
|
+
expandCompounds(want, asked, vocabulary);
|
|
157
|
+
const idf = /* @__PURE__ */ new Map();
|
|
158
|
+
for (const token of want.keys()) {
|
|
159
|
+
const df = parsed.reduce((count, p) => count + (p.allTokens.has(token) ? 1 : 0), 0);
|
|
160
|
+
idf.set(token, Math.log((parsed.length + 1) / (df + 1)) + 1);
|
|
161
|
+
}
|
|
162
|
+
return parsed.map(({ item, strongTokens, allTokens }) => {
|
|
163
|
+
let shared = 0;
|
|
164
|
+
for (const [token, asking] of want) {
|
|
165
|
+
const weight = (idf.get(token) ?? 1) * asking;
|
|
166
|
+
if (strongTokens.has(token)) shared += STRONG_FIELD_WEIGHT * weight;
|
|
167
|
+
else if (allTokens.has(token)) shared += weight;
|
|
168
|
+
}
|
|
169
|
+
return { item, score: shared / (Math.sqrt(allTokens.size) || 1) };
|
|
170
|
+
}).sort((a, b) => b.score - a.score || nameOf(b.item).localeCompare(nameOf(a.item)));
|
|
171
|
+
}
|
|
172
|
+
function searchByWords(query, items, textOf) {
|
|
173
|
+
return rankByWords(query, items, textOf).filter((scored) => scored.score > 0).map((scored) => scored.item);
|
|
174
|
+
}
|
|
175
|
+
function nameOf(item) {
|
|
176
|
+
const named = item;
|
|
177
|
+
return typeof named?.name === "string" ? named.name : "";
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// src/registry/localModel.ts
|
|
181
|
+
import { createHash } from "crypto";
|
|
182
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync } from "fs";
|
|
183
|
+
import { homedir } from "os";
|
|
184
|
+
import { join } from "path";
|
|
185
|
+
var LOCAL_MODEL_ID = "bge-small-en-v1.5";
|
|
186
|
+
var LOCAL_MODEL_DIMENSIONS = 384;
|
|
187
|
+
var LOCAL_MODEL_SIZE_MB = 33;
|
|
188
|
+
var QUERY_INSTRUCTION = "Represent this sentence for searching relevant passages: ";
|
|
189
|
+
var MODELS_DIR = join(homedir(), ".hyperframes", "models");
|
|
190
|
+
var MODEL_REPO = "Xenova/bge-small-en-v1.5";
|
|
191
|
+
var LOCAL_MODEL_REVISION = "ea104dacec62c0de699686887e3f920caeb4f3e3";
|
|
192
|
+
var LOCAL_MODEL_ARTIFACTS = [
|
|
193
|
+
{
|
|
194
|
+
url: `https://huggingface.co/${MODEL_REPO}/resolve/${LOCAL_MODEL_REVISION}/onnx/model_quantized.onnx`,
|
|
195
|
+
dest: () => localModelPath(),
|
|
196
|
+
bytes: 34014426,
|
|
197
|
+
sha256: "6c9c6101a956d62dfb5e7190c538226c0c5bb9cb27b651234b6df063ee7dbfe4"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
url: `https://huggingface.co/${MODEL_REPO}/resolve/${LOCAL_MODEL_REVISION}/tokenizer.json`,
|
|
201
|
+
dest: () => localTokenizerPath(),
|
|
202
|
+
bytes: 711396,
|
|
203
|
+
sha256: "d241a60d5e8f04cc1b2b3e9ef7a4921b27bf526d9f6050ab90f9267a1f9e5c66"
|
|
204
|
+
}
|
|
205
|
+
];
|
|
206
|
+
function localModelConsent() {
|
|
207
|
+
return readConfig().localEmbeddingEnabled;
|
|
208
|
+
}
|
|
209
|
+
function recordLocalModelConsent(enabled) {
|
|
210
|
+
return updateLocalModelConsent(() => enabled);
|
|
211
|
+
}
|
|
212
|
+
function savedLocalModelConsent() {
|
|
213
|
+
return updateLocalModelConsent((onDisk) => onDisk);
|
|
214
|
+
}
|
|
215
|
+
function assumeLocalModelConsent() {
|
|
216
|
+
return updateLocalModelConsent((onDisk) => onDisk ?? true);
|
|
217
|
+
}
|
|
218
|
+
function localModelPath() {
|
|
219
|
+
return join(MODELS_DIR, `${LOCAL_MODEL_ID}.onnx`);
|
|
220
|
+
}
|
|
221
|
+
function localTokenizerPath() {
|
|
222
|
+
return join(MODELS_DIR, `${LOCAL_MODEL_ID}.tokenizer.json`);
|
|
223
|
+
}
|
|
224
|
+
function modelFileIsValid(file) {
|
|
225
|
+
const path = file.dest();
|
|
226
|
+
if (!existsSync(path)) return false;
|
|
227
|
+
try {
|
|
228
|
+
return createHash("sha256").update(readFileSync(path)).digest("hex") === file.sha256;
|
|
229
|
+
} catch {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function isLocalModelReady() {
|
|
234
|
+
return LOCAL_MODEL_ARTIFACTS.every(modelFileIsValid);
|
|
235
|
+
}
|
|
236
|
+
function localModelStatus() {
|
|
237
|
+
const consent = localModelConsent();
|
|
238
|
+
if (consent === false) return { status: "declined" };
|
|
239
|
+
if (isLocalModelReady()) return { status: "ready" };
|
|
240
|
+
if (consent === void 0) return { status: "not-asked" };
|
|
241
|
+
return { status: "unavailable", reason: "model not downloaded yet" };
|
|
242
|
+
}
|
|
243
|
+
async function ensureLocalModel() {
|
|
244
|
+
if (isLocalModelReady()) return true;
|
|
245
|
+
try {
|
|
246
|
+
mkdirSync(MODELS_DIR, { recursive: true });
|
|
247
|
+
for (const file of LOCAL_MODEL_ARTIFACTS) {
|
|
248
|
+
if (modelFileIsValid(file)) continue;
|
|
249
|
+
const dest = file.dest();
|
|
250
|
+
await downloadFile(file.url, dest, { maxBytes: file.bytes });
|
|
251
|
+
if (!modelFileIsValid(file)) {
|
|
252
|
+
unlinkSync(dest);
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return isLocalModelReady();
|
|
257
|
+
} catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function nonInteractiveConsentMessage() {
|
|
262
|
+
return `On-device search needs a one-time ${LOCAL_MODEL_SIZE_MB} MB download that stays on this machine. Nothing is sent anywhere. Ask the person you are working for, and pass --on-device --yes once they agree.`;
|
|
263
|
+
}
|
|
264
|
+
function downloadOfferMessage(matchCount) {
|
|
265
|
+
const found = matchCount === void 0 ? "Use on-device meaning search." : matchCount === 0 ? "No matches from word search." : `Only ${matchCount} match${matchCount === 1 ? "" : "es"} from word search.`;
|
|
266
|
+
return `${found} Download a ${LOCAL_MODEL_SIZE_MB} MB search model for better offline results? It stays on your machine and nothing is sent.`;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// src/registry/localEmbedder.ts
|
|
270
|
+
import { readFileSync as readFileSync2 } from "fs";
|
|
271
|
+
|
|
272
|
+
// src/registry/wordpiece.ts
|
|
273
|
+
function configFromTokenizerJson(raw) {
|
|
274
|
+
const parsed = JSON.parse(raw);
|
|
275
|
+
const model = parsed.model;
|
|
276
|
+
if (!model?.vocab) throw new Error("tokenizer.json has no WordPiece vocab");
|
|
277
|
+
return {
|
|
278
|
+
vocab: model.vocab,
|
|
279
|
+
unkToken: model.unk_token ?? "[UNK]",
|
|
280
|
+
continuingSubwordPrefix: model.continuing_subword_prefix ?? "##",
|
|
281
|
+
maxInputCharsPerWord: model.max_input_chars_per_word ?? 100,
|
|
282
|
+
clsToken: "[CLS]",
|
|
283
|
+
sepToken: "[SEP]"
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function normalize(text) {
|
|
287
|
+
let out = "";
|
|
288
|
+
for (const char of text) {
|
|
289
|
+
const code = char.codePointAt(0);
|
|
290
|
+
if (code === 0 || code === 65533) continue;
|
|
291
|
+
if (isControl(char, code)) continue;
|
|
292
|
+
if (isWhitespace(char, code)) {
|
|
293
|
+
out += " ";
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
out += isChinese(code) ? ` ${char} ` : char;
|
|
297
|
+
}
|
|
298
|
+
return out.toLowerCase().normalize("NFD").replace(new RegExp("\\p{Mn}", "gu"), "");
|
|
299
|
+
}
|
|
300
|
+
function preTokenize(normalized) {
|
|
301
|
+
const words = [];
|
|
302
|
+
for (const chunk of normalized.split(/\s+/)) {
|
|
303
|
+
if (!chunk) continue;
|
|
304
|
+
let current = "";
|
|
305
|
+
for (const char of chunk) {
|
|
306
|
+
if (isPunctuation(char)) {
|
|
307
|
+
if (current) words.push(current);
|
|
308
|
+
words.push(char);
|
|
309
|
+
current = "";
|
|
310
|
+
} else {
|
|
311
|
+
current += char;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
if (current) words.push(current);
|
|
315
|
+
}
|
|
316
|
+
return words;
|
|
317
|
+
}
|
|
318
|
+
function wordPiece(word, config) {
|
|
319
|
+
if ([...word].length > config.maxInputCharsPerWord) return [config.unkToken];
|
|
320
|
+
const pieces = [];
|
|
321
|
+
let start = 0;
|
|
322
|
+
while (start < word.length) {
|
|
323
|
+
let end = word.length;
|
|
324
|
+
let match = null;
|
|
325
|
+
while (start < end) {
|
|
326
|
+
const candidate = start === 0 ? word.slice(start, end) : config.continuingSubwordPrefix + word.slice(start, end);
|
|
327
|
+
if (candidate in config.vocab) {
|
|
328
|
+
match = candidate;
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
end -= 1;
|
|
332
|
+
}
|
|
333
|
+
if (match === null) return [config.unkToken];
|
|
334
|
+
pieces.push(match);
|
|
335
|
+
start = end;
|
|
336
|
+
}
|
|
337
|
+
return pieces;
|
|
338
|
+
}
|
|
339
|
+
function encode(text, config) {
|
|
340
|
+
const tokens = [config.clsToken];
|
|
341
|
+
for (const word of preTokenize(normalize(text))) tokens.push(...wordPiece(word, config));
|
|
342
|
+
tokens.push(config.sepToken);
|
|
343
|
+
const unk = config.vocab[config.unkToken];
|
|
344
|
+
const ids = tokens.map((token) => config.vocab[token] ?? unk);
|
|
345
|
+
return {
|
|
346
|
+
ids,
|
|
347
|
+
attentionMask: ids.map(() => 1),
|
|
348
|
+
tokenTypeIds: ids.map(() => 0)
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function isControl(char, code) {
|
|
352
|
+
if (char === " " || char === "\n" || char === "\r") return false;
|
|
353
|
+
return code < 32 || code === 127 || new RegExp("\\p{Cc}|\\p{Cf}", "u").test(char);
|
|
354
|
+
}
|
|
355
|
+
function isWhitespace(char, code) {
|
|
356
|
+
return char === " " || char === " " || char === "\n" || char === "\r" || code === 11 || code === 12 || new RegExp("\\p{Zs}", "u").test(char);
|
|
357
|
+
}
|
|
358
|
+
function isPunctuation(char) {
|
|
359
|
+
const code = char.codePointAt(0);
|
|
360
|
+
const asciiSymbol = code >= 33 && code <= 47 || code >= 58 && code <= 64 || code >= 91 && code <= 96 || code >= 123 && code <= 126;
|
|
361
|
+
return asciiSymbol || new RegExp("\\p{P}", "u").test(char);
|
|
362
|
+
}
|
|
363
|
+
function isChinese(code) {
|
|
364
|
+
return code >= 19968 && code <= 40959 || code >= 13312 && code <= 19903 || code >= 131072 && code <= 173791 || code >= 173824 && code <= 177983 || code >= 177984 && code <= 178207 || code >= 178208 && code <= 183983 || code >= 63744 && code <= 64255 || code >= 194560 && code <= 195103;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// src/registry/localEmbedder.ts
|
|
368
|
+
var MAX_TOKENS = 512;
|
|
369
|
+
var FEATURE = "on-device search";
|
|
370
|
+
async function ensureLocalRuntime() {
|
|
371
|
+
try {
|
|
372
|
+
await loadOptionalPackage("onnxruntime-node", FEATURE);
|
|
373
|
+
return { ok: true };
|
|
374
|
+
} catch (err) {
|
|
375
|
+
return { ok: false, reason: err.message };
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
function hasLocalRuntime() {
|
|
379
|
+
return installedOptionalPackageVersion("onnxruntime-node") !== null;
|
|
380
|
+
}
|
|
381
|
+
async function loadLocalEmbedder() {
|
|
382
|
+
const ort = loadInstalledOptionalPackage("onnxruntime-node");
|
|
383
|
+
if (ort === null) throw new Error("the on-device runtime is not installed yet");
|
|
384
|
+
const config = configFromTokenizerJson(readFileSync2(localTokenizerPath(), "utf-8"));
|
|
385
|
+
const session = await ort.InferenceSession.create(localModelPath());
|
|
386
|
+
return {
|
|
387
|
+
async embed(texts, options) {
|
|
388
|
+
if (texts.length === 0) return [];
|
|
389
|
+
const prefix = options?.isQuery ? QUERY_INSTRUCTION : "";
|
|
390
|
+
const encodings = texts.map((text) => truncate(encode(prefix + text, config)));
|
|
391
|
+
const width = Math.max(...encodings.map((e) => e.ids.length));
|
|
392
|
+
const batch = encodings.length;
|
|
393
|
+
const ids = new BigInt64Array(batch * width);
|
|
394
|
+
const mask = new BigInt64Array(batch * width);
|
|
395
|
+
const types = new BigInt64Array(batch * width);
|
|
396
|
+
encodings.forEach((encoding, row) => {
|
|
397
|
+
encoding.ids.forEach((id, column) => {
|
|
398
|
+
const at = row * width + column;
|
|
399
|
+
ids[at] = BigInt(id);
|
|
400
|
+
mask[at] = 1n;
|
|
401
|
+
types[at] = 0n;
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
const dims = [batch, width];
|
|
405
|
+
const output = await session.run({
|
|
406
|
+
input_ids: new ort.Tensor("int64", ids, dims),
|
|
407
|
+
attention_mask: new ort.Tensor("int64", mask, dims),
|
|
408
|
+
token_type_ids: new ort.Tensor("int64", types, dims)
|
|
409
|
+
});
|
|
410
|
+
const hidden = output["last_hidden_state"];
|
|
411
|
+
if (!hidden) throw new Error("model returned no last_hidden_state");
|
|
412
|
+
const data = hidden.data;
|
|
413
|
+
const hiddenSize = hidden.dims[2];
|
|
414
|
+
if (hiddenSize !== LOCAL_MODEL_DIMENSIONS) {
|
|
415
|
+
throw new Error(
|
|
416
|
+
`model produced ${hiddenSize} dimensions, expected ${LOCAL_MODEL_DIMENSIONS}`
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
return encodings.map((_, row) => {
|
|
420
|
+
const start = row * width * hiddenSize;
|
|
421
|
+
return normalize2(Array.from(data.subarray(start, start + hiddenSize)));
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
function truncate(encoding) {
|
|
427
|
+
if (encoding.ids.length <= MAX_TOKENS) return encoding;
|
|
428
|
+
const ids = [
|
|
429
|
+
...encoding.ids.slice(0, MAX_TOKENS - 1),
|
|
430
|
+
encoding.ids[encoding.ids.length - 1]
|
|
431
|
+
];
|
|
432
|
+
return { ids, attentionMask: ids.map(() => 1), tokenTypeIds: ids.map(() => 0) };
|
|
433
|
+
}
|
|
434
|
+
function normalize2(vector) {
|
|
435
|
+
const norm = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));
|
|
436
|
+
return norm === 0 ? vector : vector.map((value) => value / norm);
|
|
437
|
+
}
|
|
438
|
+
function cosine(a, b) {
|
|
439
|
+
let sum = 0;
|
|
440
|
+
for (let i = 0; i < a.length; i += 1) sum += a[i] * b[i];
|
|
441
|
+
return sum;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// src/registry/localSemantic.ts
|
|
445
|
+
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync3, writeFileSync } from "fs";
|
|
446
|
+
import { homedir as homedir2 } from "os";
|
|
447
|
+
import { join as join2 } from "path";
|
|
448
|
+
function isMediaVectorRow(value) {
|
|
449
|
+
if (!value || typeof value !== "object") return false;
|
|
450
|
+
const row = value;
|
|
451
|
+
return typeof row.id === "string" && typeof row.kind === "string" && typeof row.title === "string" && typeof row.description === "string" && Array.isArray(row.tags) && row.tags.every((tag) => typeof tag === "string") && typeof row.file === "string" && (row.duration === void 0 || typeof row.duration === "number" && Number.isFinite(row.duration) && row.duration >= 0) && (row.dimensions === void 0 || typeof row.dimensions === "object" && row.dimensions !== null && Number.isInteger(row.dimensions.width) && Number.isInteger(row.dimensions.height) && row.dimensions.width > 0 && row.dimensions.height > 0);
|
|
452
|
+
}
|
|
453
|
+
var CATALOG_ARTIFACT_TIMEOUT_MS = 3e4;
|
|
454
|
+
function localVectorDirectory() {
|
|
455
|
+
return process.env["HYPERFRAMES_CATALOG_ARTIFACT_DIR"] ?? join2(homedir2(), ".hyperframes", "catalog");
|
|
456
|
+
}
|
|
457
|
+
function vectorPairAgrees(fetched, artifactBasename) {
|
|
458
|
+
const meta = fetched.find(([file]) => file === `${artifactBasename}.json`)?.[1];
|
|
459
|
+
const bin = fetched.find(([file]) => file === `${artifactBasename}.bin`)?.[1];
|
|
460
|
+
if (!meta || !bin) return false;
|
|
461
|
+
try {
|
|
462
|
+
const parsed = JSON.parse(meta.toString("utf-8"));
|
|
463
|
+
if (parsed.dimensions !== LOCAL_MODEL_DIMENSIONS) return false;
|
|
464
|
+
if (artifactBasename === "media-vectors" && (!parsed.rows || parsed.rows.length !== (parsed.names?.length ?? -1) || parsed.rows.some(
|
|
465
|
+
(row, index) => !isMediaVectorRow(row) || row.id !== parsed.names?.[index]
|
|
466
|
+
))) {
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
return bin.byteLength === (parsed.names?.length ?? -1) * LOCAL_MODEL_DIMENSIONS * 4;
|
|
470
|
+
} catch {
|
|
471
|
+
return false;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
function vectorRevisionAgrees(fetched, expectedRevision, artifactBasename = "local-vectors") {
|
|
475
|
+
if (expectedRevision === void 0) return true;
|
|
476
|
+
const meta = fetched.find(([file]) => file === `${artifactBasename}.json`)?.[1];
|
|
477
|
+
if (!meta) return false;
|
|
478
|
+
try {
|
|
479
|
+
const parsed = JSON.parse(meta.toString("utf-8"));
|
|
480
|
+
return parsed.revision === expectedRevision;
|
|
481
|
+
} catch {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
async function fetchLocalVectors(registryBaseUrl, options = {}) {
|
|
486
|
+
const directory = options.directory ?? localVectorDirectory();
|
|
487
|
+
const artifactBasename = options.artifactBasename ?? "local-vectors";
|
|
488
|
+
const base = registryBaseUrl.replace(/\/+$/, "");
|
|
489
|
+
try {
|
|
490
|
+
mkdirSync2(directory, { recursive: true, mode: 448 });
|
|
491
|
+
const fetched = [];
|
|
492
|
+
for (const file of [`${artifactBasename}.json`, `${artifactBasename}.bin`]) {
|
|
493
|
+
const response = await fetch(`${base}/catalog-artifact/${file}`, {
|
|
494
|
+
signal: AbortSignal.timeout(CATALOG_ARTIFACT_TIMEOUT_MS)
|
|
495
|
+
});
|
|
496
|
+
if (!response.ok) return false;
|
|
497
|
+
fetched.push([file, Buffer.from(await response.arrayBuffer())]);
|
|
498
|
+
}
|
|
499
|
+
if (!vectorPairAgrees(fetched, artifactBasename) || !vectorRevisionAgrees(fetched, options.expectedRevision, artifactBasename)) {
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
for (const [file, bytes] of fetched) {
|
|
503
|
+
writeFileSync(join2(directory, file), bytes, { mode: 384 });
|
|
504
|
+
}
|
|
505
|
+
return artifactBasename === "media-vectors" ? hasMediaVectors(directory) : hasLocalVectors(directory);
|
|
506
|
+
} catch {
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
function hasLocalVectors(directory = localVectorDirectory()) {
|
|
511
|
+
return existsSync2(join2(directory, "local-vectors.bin")) && existsSync2(join2(directory, "local-vectors.json"));
|
|
512
|
+
}
|
|
513
|
+
function hasMediaVectors(directory = localVectorDirectory()) {
|
|
514
|
+
return existsSync2(join2(directory, "media-vectors.bin")) && existsSync2(join2(directory, "media-vectors.json"));
|
|
515
|
+
}
|
|
516
|
+
function loadLocalVectors(directory = localVectorDirectory()) {
|
|
517
|
+
const meta = JSON.parse(
|
|
518
|
+
readFileSync3(join2(directory, "local-vectors.json"), "utf-8")
|
|
519
|
+
);
|
|
520
|
+
const buffer = readFileSync3(join2(directory, "local-vectors.bin"));
|
|
521
|
+
const vectors = new Float32Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 4);
|
|
522
|
+
const expected = meta.names.length * meta.dimensions;
|
|
523
|
+
if (vectors.length !== expected) {
|
|
524
|
+
throw new Error(`local vectors hold ${vectors.length} floats, expected ${expected}`);
|
|
525
|
+
}
|
|
526
|
+
if (meta.dimensions !== LOCAL_MODEL_DIMENSIONS) {
|
|
527
|
+
throw new Error(
|
|
528
|
+
`local vectors are ${meta.dimensions}-dimension, model produces ${LOCAL_MODEL_DIMENSIONS}`
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
return { names: meta.names, dimensions: meta.dimensions, vectors };
|
|
532
|
+
}
|
|
533
|
+
function localVectorNames(directory = localVectorDirectory()) {
|
|
534
|
+
if (!hasLocalVectors(directory)) return [];
|
|
535
|
+
try {
|
|
536
|
+
const meta = JSON.parse(readFileSync3(join2(directory, "local-vectors.json"), "utf-8"));
|
|
537
|
+
return meta.names ?? [];
|
|
538
|
+
} catch {
|
|
539
|
+
return [];
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
function cachedLocalVectorRevision(directory = localVectorDirectory()) {
|
|
543
|
+
if (!hasLocalVectors(directory)) return void 0;
|
|
544
|
+
try {
|
|
545
|
+
const meta = JSON.parse(readFileSync3(join2(directory, "local-vectors.json"), "utf-8"));
|
|
546
|
+
return typeof meta.revision === "string" ? meta.revision : void 0;
|
|
547
|
+
} catch {
|
|
548
|
+
return void 0;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
async function localSemanticRanking(query, directory = localVectorDirectory()) {
|
|
552
|
+
if (!isLocalModelReady() || !hasLocalVectors(directory)) return null;
|
|
553
|
+
const set = loadLocalVectors(directory);
|
|
554
|
+
const embedder = await loadLocalEmbedder();
|
|
555
|
+
const [queryVector] = await embedder.embed([query], { isQuery: true });
|
|
556
|
+
if (!queryVector) return null;
|
|
557
|
+
const scored = set.names.map((name, row) => {
|
|
558
|
+
const start = row * set.dimensions;
|
|
559
|
+
return {
|
|
560
|
+
name,
|
|
561
|
+
score: cosine(queryVector, Array.from(set.vectors.subarray(start, start + set.dimensions)))
|
|
562
|
+
};
|
|
563
|
+
});
|
|
564
|
+
scored.sort((a, b) => b.score - a.score || b.name.localeCompare(a.name));
|
|
565
|
+
return scored;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// src/commands/catalog.ts
|
|
569
|
+
var examples = [
|
|
570
|
+
["List all blocks and components", "hyperframes catalog"],
|
|
571
|
+
["List blocks only", "hyperframes catalog --type block"],
|
|
572
|
+
["Filter by tag", "hyperframes catalog --type block --tag social"],
|
|
573
|
+
["Machine-readable JSON", "hyperframes catalog --json"],
|
|
574
|
+
["Interactive picker (install on select)", "hyperframes catalog --human-friendly"],
|
|
575
|
+
["Search (positional, same as --query)", 'hyperframes catalog "crossfade"']
|
|
576
|
+
];
|
|
577
|
+
async function prepareOnDeviceTier(opts) {
|
|
578
|
+
const warnings = [];
|
|
579
|
+
const warn = (message) => {
|
|
580
|
+
warnings.push(message);
|
|
581
|
+
console.error(message);
|
|
582
|
+
};
|
|
583
|
+
const status = opts.status;
|
|
584
|
+
const unwatchedYes = opts.assumedYes && !opts.canPrompt;
|
|
585
|
+
const declined = "on-device search skipped: the model download was previously declined. To consent, re-run with --yes in an interactive terminal, without --json and outside CI.";
|
|
586
|
+
if (status.status === "declined" && !opts.assumedYes) {
|
|
587
|
+
warn(declined);
|
|
588
|
+
return warnings;
|
|
589
|
+
}
|
|
590
|
+
if (!opts.assumedYes && status.status === "not-asked" && !opts.canPrompt) {
|
|
591
|
+
warn(nonInteractiveConsentMessage());
|
|
592
|
+
return warnings;
|
|
593
|
+
}
|
|
594
|
+
if (!opts.assumedYes && status.status === "not-asked") {
|
|
595
|
+
const answer = await ue({
|
|
596
|
+
message: downloadOfferMessage(),
|
|
597
|
+
initialValue: true
|
|
598
|
+
});
|
|
599
|
+
if (q(answer) || answer !== true) {
|
|
600
|
+
warn(
|
|
601
|
+
recordLocalModelConsent(false) === false ? "on-device search skipped: the download was declined." : "on-device search skipped: the download was declined, but could not save the answer in settings; `hyperframes doctor` says why."
|
|
602
|
+
);
|
|
603
|
+
return warnings;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
const asked = status.status === "declined" || status.status === "not-asked";
|
|
607
|
+
const agreed = !asked ? savedLocalModelConsent() : unwatchedYes ? assumeLocalModelConsent() : recordLocalModelConsent(true);
|
|
608
|
+
if (agreed !== true) {
|
|
609
|
+
warn(
|
|
610
|
+
agreed === false && (unwatchedYes || !asked) ? declined : asked ? "on-device search skipped: could not save the answer in settings; `hyperframes doctor` says why." : nonInteractiveConsentMessage()
|
|
611
|
+
);
|
|
612
|
+
return warnings;
|
|
613
|
+
}
|
|
614
|
+
const runtime = await ensureLocalRuntime();
|
|
615
|
+
if (!runtime.ok) {
|
|
616
|
+
warn(`on-device search skipped: ${runtime.reason}`);
|
|
617
|
+
return warnings;
|
|
618
|
+
}
|
|
619
|
+
if (savedLocalModelConsent() !== true) {
|
|
620
|
+
warn(declined);
|
|
621
|
+
return warnings;
|
|
622
|
+
}
|
|
623
|
+
const model = await ensureLocalModel();
|
|
624
|
+
const revisionStale = opts.artifactRevision !== void 0 && cachedLocalVectorRevision() !== opts.artifactRevision;
|
|
625
|
+
if (!hasLocalVectors() || revisionStale || countUnindexed(opts.registryNames, localVectorNames()) > 0) {
|
|
626
|
+
await fetchLocalVectors(opts.registry, { expectedRevision: opts.artifactRevision });
|
|
627
|
+
}
|
|
628
|
+
const vectors = hasLocalVectors();
|
|
629
|
+
if (!model || !vectors) {
|
|
630
|
+
warn(
|
|
631
|
+
`on-device search unavailable: ${!model ? "model" : "catalog vectors"} could not be fetched`
|
|
632
|
+
);
|
|
633
|
+
} else if (opts.artifactRevision !== void 0 && cachedLocalVectorRevision() !== opts.artifactRevision) {
|
|
634
|
+
warn("on-device search is using the previous catalog vectors because the update failed");
|
|
635
|
+
}
|
|
636
|
+
return warnings;
|
|
637
|
+
}
|
|
638
|
+
var catalog_default = defineCommand({
|
|
639
|
+
meta: {
|
|
640
|
+
name: "catalog",
|
|
641
|
+
description: "Browse and install blocks and components from the registry"
|
|
642
|
+
},
|
|
643
|
+
args: {
|
|
644
|
+
words: {
|
|
645
|
+
type: "positional",
|
|
646
|
+
description: "Search words, same as --query (e.g. `catalog crossfade`)",
|
|
647
|
+
required: false
|
|
648
|
+
},
|
|
649
|
+
type: {
|
|
650
|
+
type: "string",
|
|
651
|
+
description: 'Filter by type: "block" or "component"'
|
|
652
|
+
},
|
|
653
|
+
tag: {
|
|
654
|
+
type: "string",
|
|
655
|
+
description: "Filter by tag (e.g. social, transition, text)"
|
|
656
|
+
},
|
|
657
|
+
json: {
|
|
658
|
+
type: "boolean",
|
|
659
|
+
description: "Print matching items as JSON to stdout"
|
|
660
|
+
},
|
|
661
|
+
"human-friendly": {
|
|
662
|
+
type: "boolean",
|
|
663
|
+
description: "Interactive picker \u2014 select an item to install"
|
|
664
|
+
},
|
|
665
|
+
query: {
|
|
666
|
+
type: "string",
|
|
667
|
+
description: "Search by meaning when the on-device model is on, otherwise by name, title, description and tags. A bare positional word works the same way (e.g. `catalog crossfade`)."
|
|
668
|
+
},
|
|
669
|
+
yes: {
|
|
670
|
+
type: "boolean",
|
|
671
|
+
alias: "y",
|
|
672
|
+
description: "Assume yes for prompts this run, including the on-device model download"
|
|
673
|
+
},
|
|
674
|
+
"on-device": {
|
|
675
|
+
type: "boolean",
|
|
676
|
+
// Consent for the model download is otherwise only reachable through a
|
|
677
|
+
// prompt that fires on a TTY, which leaves every agent and CI run unable
|
|
678
|
+
// to opt in at all.
|
|
679
|
+
description: "Use on-device meaning search; pass --yes to approve a first non-interactive download"
|
|
680
|
+
}
|
|
681
|
+
},
|
|
682
|
+
// one flag-parsing entry point feeding three output paths (json, interactive, table); splitting those is its own change
|
|
683
|
+
// fallow-ignore-next-line complexity
|
|
684
|
+
async run({ args }) {
|
|
685
|
+
const json = args.json === true;
|
|
686
|
+
const interactive = args["human-friendly"] === true;
|
|
687
|
+
const dir = resolve(process.cwd());
|
|
688
|
+
const config = loadProjectConfig(dir) ?? DEFAULT_PROJECT_CONFIG;
|
|
689
|
+
let typeFilter;
|
|
690
|
+
if (args.type === "block") typeFilter = "hyperframes:block";
|
|
691
|
+
else if (args.type === "component") typeFilter = "hyperframes:component";
|
|
692
|
+
else if (args.type) {
|
|
693
|
+
console.error(`Invalid --type: "${args.type}". Use "block" or "component".`);
|
|
694
|
+
finishCommand(1);
|
|
695
|
+
}
|
|
696
|
+
const manifest = await fetchRegistryManifest(config.registry);
|
|
697
|
+
const entries = manifest?.items ?? [];
|
|
698
|
+
const artifactRevision = manifest?.catalogArtifact?.revision;
|
|
699
|
+
const catalog = entries.filter((e) => e.type !== "hyperframes:example");
|
|
700
|
+
const registryNames = new Set(catalog.map((e) => e.name));
|
|
701
|
+
const filtered = typeFilter ? catalog.filter((e) => e.type === typeFilter) : catalog;
|
|
702
|
+
if (filtered.length === 0) {
|
|
703
|
+
if (json) console.log("[]");
|
|
704
|
+
else console.log("No items found in registry.");
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
const items = await loadAllItems(filtered, { baseUrl: config.registry });
|
|
708
|
+
const tagFilter = args.tag?.toLowerCase();
|
|
709
|
+
const tagged = tagFilter ? items.filter((item) => item.tags?.some((t) => t.toLowerCase() === tagFilter)) : items;
|
|
710
|
+
const query = (typeof args.query === "string" ? args.query.trim() : "") || args.words?.trim() || "";
|
|
711
|
+
const searchContext = query ? { status: localModelStatus() } : null;
|
|
712
|
+
const routineUpdate = searchContext?.status.status === "unavailable" || searchContext?.status.status === "ready" && (!hasLocalRuntime() || artifactRevision !== void 0 && cachedLocalVectorRevision() !== artifactRevision);
|
|
713
|
+
const shouldPrepare = args["on-device"] === true || routineUpdate;
|
|
714
|
+
let warnings = [];
|
|
715
|
+
let effectiveStatus = searchContext?.status;
|
|
716
|
+
if (searchContext && shouldPrepare) {
|
|
717
|
+
warnings = await prepareOnDeviceTier({
|
|
718
|
+
assumedYes: args.yes === true,
|
|
719
|
+
artifactRevision,
|
|
720
|
+
canPrompt: isAttendedTerminal() && !json,
|
|
721
|
+
registry: config.registry,
|
|
722
|
+
registryNames,
|
|
723
|
+
status: searchContext.status
|
|
724
|
+
});
|
|
725
|
+
effectiveStatus = localModelStatus();
|
|
726
|
+
}
|
|
727
|
+
const searched = effectiveStatus ? await applySearch(tagged, query, registryNames, effectiveStatus) : null;
|
|
728
|
+
if (searched) warnings.push(...searched.warnings);
|
|
729
|
+
const matching = searched ? searched.items : tagged;
|
|
730
|
+
if (matching.length === 0) {
|
|
731
|
+
const unsearchable = Boolean(query) && searched?.localMode === "words" && hasNoSearchableTokens(query);
|
|
732
|
+
const tierHint = query && !unsearchable && warnings.length === 0 ? localModelHint(json, effectiveStatus) : null;
|
|
733
|
+
if (tierHint) {
|
|
734
|
+
warnings.push(tierHint);
|
|
735
|
+
console.error(tierHint);
|
|
736
|
+
}
|
|
737
|
+
if (json && query) {
|
|
738
|
+
console.log(
|
|
739
|
+
JSON.stringify(
|
|
740
|
+
{
|
|
741
|
+
query,
|
|
742
|
+
tier: tierToken(searched),
|
|
743
|
+
tier_detail: tierDetail(searched),
|
|
744
|
+
dropped: searched?.missing ?? 0,
|
|
745
|
+
unindexed: searched?.unindexed ?? 0,
|
|
746
|
+
...searched?.topScore != null ? { top_score: searched.topScore } : {},
|
|
747
|
+
shown: 0,
|
|
748
|
+
total: tagged.length,
|
|
749
|
+
...warnings.length ? { warnings } : {},
|
|
750
|
+
...unsearchable ? { unsearchable_query: true } : {},
|
|
751
|
+
// Withheld when the query never parsed: the catalog has not been
|
|
752
|
+
// shown to be missing anything, so inviting a gap report here
|
|
753
|
+
// would file noise against a search that never ran.
|
|
754
|
+
...unsearchable ? {} : { report_gap: searchMissCommand(query, tierToken(searched)) },
|
|
755
|
+
results: []
|
|
756
|
+
},
|
|
757
|
+
null,
|
|
758
|
+
2
|
|
759
|
+
)
|
|
760
|
+
);
|
|
761
|
+
} else if (json) console.log("[]");
|
|
762
|
+
else {
|
|
763
|
+
const criteria = [
|
|
764
|
+
query ? `query "${query}"` : null,
|
|
765
|
+
args.tag ? `tag "${args.tag}"` : null
|
|
766
|
+
].filter(Boolean);
|
|
767
|
+
if (unsearchable) {
|
|
768
|
+
console.error(c.error(`No searchable words in query "${query}".`));
|
|
769
|
+
console.error("");
|
|
770
|
+
console.error(
|
|
771
|
+
c.warn(
|
|
772
|
+
" Word matching indexes the catalog in English, so a query written in another\n script produces no terms to match and returns nothing. This is not a gap in\n the catalog. Search in English; the on-screen copy of your video can stay\n in any language."
|
|
773
|
+
)
|
|
774
|
+
);
|
|
775
|
+
} else {
|
|
776
|
+
console.log(`No items match ${criteria.join(" and ")}.`);
|
|
777
|
+
if (query) {
|
|
778
|
+
console.log("");
|
|
779
|
+
console.log(c.dim(" Nothing in the catalog does this? Report the gap:"));
|
|
780
|
+
console.log(c.dim(` ${searchMissCommand(query, tierToken(searched))}`));
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
if (query) await offerLocalModel(0, json, config.registry, artifactRevision);
|
|
785
|
+
if (unsearchable) finishCommand(1);
|
|
786
|
+
return;
|
|
787
|
+
}
|
|
788
|
+
if (json) {
|
|
789
|
+
const output = matching.map(catalogRow);
|
|
790
|
+
if (!query) {
|
|
791
|
+
console.log(JSON.stringify(output, null, 2));
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
console.log(
|
|
795
|
+
JSON.stringify(
|
|
796
|
+
{
|
|
797
|
+
query,
|
|
798
|
+
tier: tierToken(searched),
|
|
799
|
+
tier_detail: tierDetail(searched),
|
|
800
|
+
dropped: searched?.missing ?? 0,
|
|
801
|
+
unindexed: searched?.unindexed ?? 0,
|
|
802
|
+
...searched?.topScore != null ? { top_score: searched.topScore } : {},
|
|
803
|
+
shown: output.length,
|
|
804
|
+
total: tagged.length,
|
|
805
|
+
...warnings.length ? { warnings } : {},
|
|
806
|
+
// Carried on hits too, not just on zero results. The gaps that
|
|
807
|
+
// actually get reported are the ones where the search returned
|
|
808
|
+
// plausible items and none of them did the thing — a judgement
|
|
809
|
+
// only the reader can make, so the command has to already be in
|
|
810
|
+
// the envelope by the time they make it.
|
|
811
|
+
report_gap: searchMissCommand(query, tierToken(searched)),
|
|
812
|
+
results: output
|
|
813
|
+
},
|
|
814
|
+
null,
|
|
815
|
+
2
|
|
816
|
+
)
|
|
817
|
+
);
|
|
818
|
+
return;
|
|
819
|
+
}
|
|
820
|
+
if (searched) {
|
|
821
|
+
const how = tierDetail(searched);
|
|
822
|
+
const unshowable = searched.missing > 0 ? ` \xB7 ${searched.missing} ranked ${searched.missing === 1 ? "move" : "moves"} not in this registry` : "";
|
|
823
|
+
console.log(c.dim(` ${matching.length} of ${tagged.length} moves \xB7 ${how}${unshowable}`));
|
|
824
|
+
if (searched.unindexed > 0) {
|
|
825
|
+
const remedy = args["on-device"] === true ? "The published index is behind this registry." : "Re-run with --on-device to refresh it.";
|
|
826
|
+
console.log(
|
|
827
|
+
c.warn(
|
|
828
|
+
` ${searched.unindexed} of ${registryNames.size} moves are missing from the on-device index, so meaning search cannot return them. ${remedy}`
|
|
829
|
+
)
|
|
830
|
+
);
|
|
831
|
+
}
|
|
832
|
+
if (searched.localMode === "words") {
|
|
833
|
+
if (warnings.length === 0) {
|
|
834
|
+
const hint = localModelHint(json, effectiveStatus);
|
|
835
|
+
if (hint) console.error(hint);
|
|
836
|
+
await offerLocalModel(matching.length, json, config.registry, artifactRevision);
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
if (query) {
|
|
840
|
+
console.log(
|
|
841
|
+
c.dim(` None of these do it? ${searchMissCommand(query, tierToken(searched))}`)
|
|
842
|
+
);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
if (interactive) {
|
|
846
|
+
const options = matching.map((item) => ({
|
|
847
|
+
value: item.name,
|
|
848
|
+
label: item.name,
|
|
849
|
+
hint: item.description
|
|
850
|
+
}));
|
|
851
|
+
const selected = await Ee({
|
|
852
|
+
message: `${matching.length} items available \u2014 pick one to install`,
|
|
853
|
+
options
|
|
854
|
+
});
|
|
855
|
+
if (q(selected)) {
|
|
856
|
+
me("Cancelled.");
|
|
857
|
+
finishCommand(0);
|
|
858
|
+
}
|
|
859
|
+
const result = await runAdd({
|
|
860
|
+
name: selected,
|
|
861
|
+
projectDir: dir,
|
|
862
|
+
skipClipboard: false
|
|
863
|
+
});
|
|
864
|
+
for (const warning of result.warnings) {
|
|
865
|
+
console.warn(c.warn(`Warning: ${warning}`));
|
|
866
|
+
}
|
|
867
|
+
console.log("");
|
|
868
|
+
console.log(`${c.success("\u2713")} Installed ${c.accent(result.name)} (${result.type})`);
|
|
869
|
+
const root = realpath(dir);
|
|
870
|
+
for (const file of result.written) {
|
|
871
|
+
console.log(` ${c.dim(relative(root, file))}`);
|
|
872
|
+
}
|
|
873
|
+
if (result.snippet) {
|
|
874
|
+
console.log("");
|
|
875
|
+
console.log(c.dim("Include snippet:"));
|
|
876
|
+
console.log(` ${result.snippet}`);
|
|
877
|
+
}
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
const NAME_COL = 28;
|
|
881
|
+
const TYPE_COL = 12;
|
|
882
|
+
console.log(
|
|
883
|
+
`${c.bold("Name".padEnd(NAME_COL))}${c.bold("Type".padEnd(TYPE_COL))}${c.bold("Description")}`
|
|
884
|
+
);
|
|
885
|
+
console.log("-".repeat(80));
|
|
886
|
+
for (const item of matching) {
|
|
887
|
+
const type = item.type.replace("hyperframes:", "");
|
|
888
|
+
const tags = item.tags?.length ? c.dim(` [${item.tags.join(", ")}]`) : "";
|
|
889
|
+
console.log(
|
|
890
|
+
`${c.cyan(item.name.padEnd(NAME_COL))}${type.padEnd(TYPE_COL)}${item.description}${tags}`
|
|
891
|
+
);
|
|
892
|
+
}
|
|
893
|
+
console.log("");
|
|
894
|
+
console.log(c.dim(`${matching.length} items. Run "hyperframes add <name>" to install.`));
|
|
895
|
+
}
|
|
896
|
+
});
|
|
897
|
+
function catalogRow(item) {
|
|
898
|
+
return {
|
|
899
|
+
name: item.name,
|
|
900
|
+
type: item.type.replace("hyperframes:", ""),
|
|
901
|
+
title: item.title,
|
|
902
|
+
description: item.description,
|
|
903
|
+
tags: item.tags ?? [],
|
|
904
|
+
..."dimensions" in item && item.dimensions ? { dimensions: item.dimensions } : {},
|
|
905
|
+
..."duration" in item && item.duration ? { duration: item.duration } : {},
|
|
906
|
+
...item.preview ? { preview: item.preview } : {}
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
function pickByName(items, names, registryNames) {
|
|
910
|
+
const byName = new Map(items.map((item) => [item.name, item]));
|
|
911
|
+
const ranked = names.map((name) => byName.get(name)).filter((item) => item !== void 0);
|
|
912
|
+
return { ranked, missing: names.filter((name) => !registryNames.has(name)).length };
|
|
913
|
+
}
|
|
914
|
+
function countUnindexed(registryNames, indexedNames) {
|
|
915
|
+
const indexed = new Set(indexedNames);
|
|
916
|
+
let count = 0;
|
|
917
|
+
for (const name of registryNames) {
|
|
918
|
+
if (!indexed.has(name)) count += 1;
|
|
919
|
+
}
|
|
920
|
+
return count;
|
|
921
|
+
}
|
|
922
|
+
async function applySearch(items, query, registryNames, status) {
|
|
923
|
+
const warnings = [];
|
|
924
|
+
if (status.status === "ready") {
|
|
925
|
+
try {
|
|
926
|
+
const ranking = await localSemanticRanking(query);
|
|
927
|
+
if (ranking) {
|
|
928
|
+
const { ranked, missing } = pickByName(
|
|
929
|
+
items,
|
|
930
|
+
ranking.map((entry) => entry.name),
|
|
931
|
+
registryNames
|
|
932
|
+
);
|
|
933
|
+
const best = ranked[0];
|
|
934
|
+
if (best) {
|
|
935
|
+
const scoreByName = new Map(ranking.map((entry) => [entry.name, entry.score]));
|
|
936
|
+
return {
|
|
937
|
+
items: ranked.slice(0, 25),
|
|
938
|
+
localMode: "local-model",
|
|
939
|
+
warnings,
|
|
940
|
+
missing,
|
|
941
|
+
unindexed: countUnindexed(registryNames, localVectorNames()),
|
|
942
|
+
topScore: scoreByName.get(best.name) ?? null
|
|
943
|
+
};
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
} catch (error) {
|
|
947
|
+
const warning = `on-device search did not run: ${error instanceof Error ? error.message : "unknown error"}`;
|
|
948
|
+
warnings.push(warning);
|
|
949
|
+
console.error(warning);
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
const words = searchByWords(query, items, (item) => ({
|
|
953
|
+
// Name and title are what an author types when they already know the move.
|
|
954
|
+
strong: `${item.name} ${item.title}`,
|
|
955
|
+
weak: `${item.description} ${(item.tags ?? []).join(" ")}`
|
|
956
|
+
}));
|
|
957
|
+
return { items: words, localMode: "words", warnings, missing: 0, unindexed: 0, topScore: null };
|
|
958
|
+
}
|
|
959
|
+
function tierToken(searched) {
|
|
960
|
+
return searched?.localMode === "local-model" ? "on-device" : "words";
|
|
961
|
+
}
|
|
962
|
+
function tierDetail(searched) {
|
|
963
|
+
return searched?.localMode === "local-model" ? "on-device meaning search" : "local word match";
|
|
964
|
+
}
|
|
965
|
+
function searchMissCommand(query, tier) {
|
|
966
|
+
const quoted = query.replace(/(["\\$`])/g, "\\$1");
|
|
967
|
+
return `npx hyperframes feedback --search-miss "${quoted}" --wanted "<the move you needed>" --tier ${tier}`;
|
|
968
|
+
}
|
|
969
|
+
function localModelHint(json, status) {
|
|
970
|
+
if (!json && isAttendedTerminal()) return null;
|
|
971
|
+
if (status?.status !== "not-asked") return null;
|
|
972
|
+
return nonInteractiveConsentMessage();
|
|
973
|
+
}
|
|
974
|
+
async function offerLocalModel(matchCount, json, registryBaseUrl, artifactRevision) {
|
|
975
|
+
if (json || !isAttendedTerminal()) return;
|
|
976
|
+
if (localModelStatus().status !== "not-asked") return;
|
|
977
|
+
const answer = await ue({
|
|
978
|
+
message: downloadOfferMessage(matchCount),
|
|
979
|
+
initialValue: true
|
|
980
|
+
});
|
|
981
|
+
if (q(answer)) return;
|
|
982
|
+
if (recordLocalModelConsent(answer === true) !== (answer === true)) {
|
|
983
|
+
console.error(" Could not save the answer in settings; `hyperframes doctor` says why.");
|
|
984
|
+
return;
|
|
985
|
+
}
|
|
986
|
+
if (answer !== true) return;
|
|
987
|
+
const vectors = hasLocalVectors() || await fetchLocalVectors(registryBaseUrl, { expectedRevision: artifactRevision });
|
|
988
|
+
console.log(
|
|
989
|
+
c.dim(
|
|
990
|
+
vectors ? " Run the search again to download the model and rank by meaning." : " Could not fetch the catalog vectors; offline ranking stays off until they are available."
|
|
991
|
+
)
|
|
992
|
+
);
|
|
993
|
+
}
|
|
994
|
+
export {
|
|
995
|
+
catalogRow,
|
|
996
|
+
countUnindexed,
|
|
997
|
+
catalog_default as default,
|
|
998
|
+
examples,
|
|
999
|
+
pickByName,
|
|
1000
|
+
searchMissCommand
|
|
1001
|
+
};
|