@vfrey/vfrey 0.0.1 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +33 -0
- package/README.md +78 -3
- package/accounts.example.json +61 -0
- package/accounts.first-run.json +41 -0
- package/bin/vfrey.mjs +36 -0
- package/integration-tools/README.md +43 -0
- package/integration-tools/image/pillow.md +32 -0
- package/integration-tools/image/playwright.md +33 -0
- package/integration-tools/image/resvg.md +36 -0
- package/integration-tools/image/satori.md +36 -0
- package/integration-tools/image/sharp.md +38 -0
- package/integration-tools/video/blender.md +34 -0
- package/integration-tools/video/ffmpeg.md +41 -0
- package/integration-tools/video/manim.md +37 -0
- package/integration-tools/video/motion-canvas.md +37 -0
- package/integration-tools/video/remotion.md +50 -0
- package/integration-tools/video/revideo.md +32 -0
- package/package.json +74 -6
- package/skills/vfrey-orchestrator/SKILL.md +15 -0
- package/skills/vfrey-orchestrator/channel-video/SKILL.md +41 -0
- package/skills/vfrey-product/SKILL.md +63 -0
- package/skills/vfrey-product/examples/concurrency-vs-parallelism/framey/cook-one.svg +14 -0
- package/skills/vfrey-product/examples/concurrency-vs-parallelism/framey/cook-two.svg +22 -0
- package/skills/vfrey-product/examples/concurrency-vs-parallelism/framey/index.html +70 -0
- package/skills/vfrey-product/examples/concurrency-vs-parallelism/remotion/cook-one.svg +14 -0
- package/skills/vfrey-product/examples/concurrency-vs-parallelism/remotion/cook-two.svg +22 -0
- package/skills/vfrey-product/examples/concurrency-vs-parallelism/remotion/index.tsx +49 -0
- package/skills/vfrey-product/examples/concurrency-vs-parallelism/script.json +15 -0
- package/skills/vfrey-product/examples/octopus-facts/index.html +60 -0
- package/skills/vfrey-product/examples/octopus-facts/octopus.svg +8 -0
- package/skills/vfrey-product/examples/octopus-facts/script.json +14 -0
- package/skills/vfrey-product/push/SKILL.md +15 -0
- package/skills/vfrey-product/scenes/NOTICE +5 -0
- package/skills/vfrey-product/scenes/blocks.md +57 -0
- package/skills/vfrey-product/scenes/craft.md +118 -0
- package/skills/vfrey-product/scenes/motion.md +88 -0
- package/src/analytics/dashboard.ts +109 -0
- package/src/analytics/index.ts +260 -0
- package/src/api/client.ts +361 -0
- package/src/api/cloud-files.ts +197 -0
- package/src/api/cloud-runs.ts +75 -0
- package/src/api/cloud.ts +413 -0
- package/src/api/commands.ts +330 -0
- package/src/api/config.ts +34 -0
- package/src/api/creators.ts +463 -0
- package/src/api/credentials.ts +152 -0
- package/src/api/mail.ts +333 -0
- package/src/api/topics.ts +207 -0
- package/src/api/types.ts +273 -0
- package/src/cli.ts +468 -0
- package/src/cloud/bundle.ts +70 -0
- package/src/cloud/cloudrun-executor.ts +237 -0
- package/src/cloud/executor.ts +281 -0
- package/src/cloud/gcs-sign.ts +76 -0
- package/src/cloud/job.ts +106 -0
- package/src/cloud/remote-job.ts +67 -0
- package/src/cloud/render-job.ts +191 -0
- package/src/config.ts +309 -0
- package/src/dashboard-link.ts +180 -0
- package/src/dashboard-start.ts +103 -0
- package/src/desk/channel.ts +64 -0
- package/src/desk/cli.ts +216 -0
- package/src/desk/creators-route.ts +129 -0
- package/src/desk/fonts/JetBrainsMono-OFL.txt +93 -0
- package/src/desk/fonts/google-sans-flex-latin.woff2 +0 -0
- package/src/desk/fonts/jetbrains-mono-medium.woff2 +0 -0
- package/src/desk/http.ts +460 -0
- package/src/desk/mail-route.ts +103 -0
- package/src/desk/overlay.ts +112 -0
- package/src/desk/preview.ts +422 -0
- package/src/desk/screens.ts +149 -0
- package/src/desk/secrets.ts +143 -0
- package/src/desk/series.ts +127 -0
- package/src/desk/state.ts +77 -0
- package/src/desk/studio-route.ts +119 -0
- package/src/desk/tick-runner.ts +66 -0
- package/src/desk/tick.ts +56 -0
- package/src/desk/topics-route.ts +41 -0
- package/src/desk/ui/app.css +505 -0
- package/src/desk/ui/app.js +185 -0
- package/src/desk/ui/apple-icon.png +0 -0
- package/src/desk/ui/components.js +79 -0
- package/src/desk/ui/core.js +156 -0
- package/src/desk/ui/favicon.ico +0 -0
- package/src/desk/ui/icon.svg +1 -0
- package/src/desk/ui/icons.js +49 -0
- package/src/desk/ui/index.html +41 -0
- package/src/desk/ui/metrics-math.d.ts +22 -0
- package/src/desk/ui/metrics-math.js +135 -0
- package/src/desk/ui/theme.js +5 -0
- package/src/desk/ui/views-creators.js +209 -0
- package/src/desk/ui/views-keys.js +114 -0
- package/src/desk/ui/views-mail.js +188 -0
- package/src/desk/ui/views-misc.js +123 -0
- package/src/desk/ui/views-review.js +119 -0
- package/src/desk/ui/views-runs.js +350 -0
- package/src/desk/ui/views-screens.js +163 -0
- package/src/desk/ui/views-series.js +318 -0
- package/src/desk/ui/views-topics.js +87 -0
- package/src/desk/verbs.ts +361 -0
- package/src/doctor.ts +212 -0
- package/src/drain.ts +14 -0
- package/src/engage/index.ts +217 -0
- package/src/generate/index.ts +110 -0
- package/src/generate/script.ts +152 -0
- package/src/generate/title.ts +78 -0
- package/src/help.ts +252 -0
- package/src/home.ts +45 -0
- package/src/llm/client.ts +177 -0
- package/src/log.ts +7 -0
- package/src/oauth/tokens.ts +189 -0
- package/src/oauth/vault.ts +72 -0
- package/src/pipeline/review.ts +642 -0
- package/src/pipeline/run.ts +443 -0
- package/src/pipeline/series-guard.ts +26 -0
- package/src/pipeline/source-fetch.ts +69 -0
- package/src/pipeline/stages.ts +728 -0
- package/src/pipeline/topics-source.ts +90 -0
- package/src/product/commands.ts +296 -0
- package/src/product/config-file.ts +38 -0
- package/src/product/engine-choice.ts +89 -0
- package/src/product/engines.ts +103 -0
- package/src/product/insights.ts +50 -0
- package/src/product/keys.ts +67 -0
- package/src/product/paths.ts +18 -0
- package/src/product/probes.ts +88 -0
- package/src/product/push-flow.ts +90 -0
- package/src/product/render-video.ts +21 -0
- package/src/product/short.ts +62 -0
- package/src/product/update.ts +32 -0
- package/src/project/canonical.ts +14 -0
- package/src/project/commands.ts +177 -0
- package/src/project/dashboard-status.ts +28 -0
- package/src/project/discover.ts +19 -0
- package/src/project/index-file.ts +73 -0
- package/src/project/marker.ts +92 -0
- package/src/project/migrate.ts +201 -0
- package/src/project/names.ts +27 -0
- package/src/project/notice.ts +16 -0
- package/src/project/open.ts +88 -0
- package/src/project/scaffold.ts +112 -0
- package/src/project/templates.ts +42 -0
- package/src/project/videos.ts +64 -0
- package/src/publish/facebook.ts +91 -0
- package/src/publish/index.ts +12 -0
- package/src/publish/instagram.ts +97 -0
- package/src/publish/rate.ts +62 -0
- package/src/publish/session.ts +242 -0
- package/src/publish/tiktok.ts +202 -0
- package/src/publish/youtube.ts +177 -0
- package/src/queue/desk-ops.ts +1170 -0
- package/src/queue/seal.ts +3 -0
- package/src/queue/store.ts +1006 -0
- package/src/remotion/AiLabel.tsx +26 -0
- package/src/remotion/Root.tsx +73 -0
- package/src/remotion/defaults.ts +26 -0
- package/src/remotion/films/claude/ClaudeFilm.tsx +1014 -0
- package/src/remotion/films/engine/EngineMark.tsx +17 -0
- package/src/remotion/films/rea/ReaShort.tsx +552 -0
- package/src/remotion/films/rea/drawings.tsx +907 -0
- package/src/remotion/films/rea/timing.ts +144 -0
- package/src/remotion/index.ts +4 -0
- package/src/remotion/templates/EditorialSplit.tsx +39 -0
- package/src/remotion/templates/KineticType.tsx +39 -0
- package/src/remotion/templates/SignalBoard.tsx +50 -0
- package/src/remotion/timing.ts +22 -0
- package/src/render/chrome.ts +78 -0
- package/src/render/engine-mark.ts +29 -0
- package/src/render/framey-template.ts +130 -0
- package/src/render/html-engine.ts +149 -0
- package/src/render/node-crypto-stub.ts +11 -0
- package/src/render/probe.ts +29 -0
- package/src/render/props.ts +17 -0
- package/src/render/vertical-short.ts +35 -0
- package/src/render/webpack.ts +33 -0
- package/src/render/worker.ts +65 -0
- package/src/scene/assets/fonts/TitanOne-OFL.txt +94 -0
- package/src/scene/assets/fonts/titan-one.woff2 +0 -0
- package/src/scene/assets/gsap/LICENSE.txt +8 -0
- package/src/scene/assets/gsap/gsap.min.js +11 -0
- package/src/scene/audio.ts +54 -0
- package/src/scene/blocks/LICENSE +190 -0
- package/src/scene/blocks/NOTICE +5 -0
- package/src/scene/blocks/bar-chart-race/bar-chart-race.html +585 -0
- package/src/scene/blocks/beat-freeze-cut/beat-freeze-cut.html +874 -0
- package/src/scene/blocks/camcorder-hud/camcorder-hud.html +164 -0
- package/src/scene/blocks/camera-dolly-zoom/camera-dolly-zoom.html +355 -0
- package/src/scene/blocks/code-diff/code-diff.html +817 -0
- package/src/scene/blocks/code-snippet-apple-terminal-pro/code-snippet-apple-terminal-pro.html +248 -0
- package/src/scene/blocks/code-typing/code-typing.html +764 -0
- package/src/scene/blocks/data-chart/data-chart.html +452 -0
- package/src/scene/blocks/flowchart-vertical/flowchart-vertical.html +454 -0
- package/src/scene/blocks/hw-scribble-transition/hw-scribble-transition.html +153 -0
- package/src/scene/blocks/index.json +824 -0
- package/src/scene/blocks/lt-accent-underline/lt-accent-underline.html +107 -0
- package/src/scene/blocks/lt-bold-block/lt-bold-block.html +109 -0
- package/src/scene/blocks/lt-clean-bar/lt-clean-bar.html +112 -0
- package/src/scene/blocks/lt-dark-card/lt-dark-card.html +111 -0
- package/src/scene/blocks/lt-kicker-name/lt-kicker-name.html +114 -0
- package/src/scene/blocks/lt-mask-reveal/lt-mask-reveal.html +120 -0
- package/src/scene/blocks/lt-neon-border/lt-neon-border.html +391 -0
- package/src/scene/blocks/lt-stack-bars/lt-stack-bars.html +109 -0
- package/src/scene/blocks/macos-notification/macos-notification.html +194 -0
- package/src/scene/blocks/mk-background/mk-background.html +236 -0
- package/src/scene/blocks/mk-callout-highlight/mk-callout-highlight.html +183 -0
- package/src/scene/blocks/mk-clone-wall-transition/mk-clone-wall-transition.html +226 -0
- package/src/scene/blocks/mk-line-graph/mk-line-graph.html +293 -0
- package/src/scene/blocks/mk-progress-stat/mk-progress-stat.html +186 -0
- package/src/scene/blocks/mk-specs-list/mk-specs-list.html +223 -0
- package/src/scene/blocks/news-ticker/news-ticker.html +409 -0
- package/src/scene/blocks/organic-light-leak-overlay/organic-light-leak-overlay.html +126 -0
- package/src/scene/blocks/oscilloscope-trace/oscilloscope-trace.html +519 -0
- package/src/scene/blocks/snow/snow.html +205 -0
- package/src/scene/blocks/split-flap-board/split-flap-board.html +347 -0
- package/src/scene/blocks/spotify-card/spotify-card.html +294 -0
- package/src/scene/blocks/starfield/starfield.html +188 -0
- package/src/scene/blocks/thread-message-stack/thread-message-stack.html +239 -0
- package/src/scene/blocks/week-in-merges/week-in-merges.html +470 -0
- package/src/scene/blocks/x-post/x-post.html +437 -0
- package/src/scene/blocks/yt-comment-card/yt-comment-card.html +319 -0
- package/src/scene/blocks/yt-lcd-background/yt-lcd-background.html +307 -0
- package/src/scene/blocks/yt-prism-title/yt-prism-title.html +205 -0
- package/src/scene/blocks.ts +229 -0
- package/src/scene/command.ts +272 -0
- package/src/scene/figure.ts +181 -0
- package/src/scene/glyphs.ts +107 -0
- package/src/scene/init.ts +86 -0
- package/src/scene/inspect/css-tree.d.ts +6 -0
- package/src/scene/inspect/page-scripts.ts +272 -0
- package/src/scene/inspect/report.ts +405 -0
- package/src/scene/inspect/run.ts +200 -0
- package/src/scene/inspect/source.ts +236 -0
- package/src/scene/label.ts +131 -0
- package/src/scene/net-guard.ts +74 -0
- package/src/scene/render.ts +292 -0
- package/src/scene/runtime/browser.ts +199 -0
- package/src/scene/runtime/core.ts +181 -0
- package/src/scene/runtime/react.tsx +115 -0
- package/src/scene/runtime/transitions.ts +133 -0
- package/src/scene/sanitize.ts +181 -0
- package/src/scene/scene.ts +152 -0
- package/src/scene/studio-command.ts +48 -0
- package/src/scene/studio-skin.ts +59 -0
- package/src/scene/studio.ts +337 -0
- package/src/scene/supply.ts +111 -0
- package/src/scene/timing.ts +288 -0
- package/src/scene/transitions/LICENSE +190 -0
- package/src/scene/transitions/NOTICE +5 -0
- package/src/scene/transitions/SOURCE.json +24 -0
- package/src/scene/transitions/transitions.global.js +38 -0
- package/src/scene/transitions.ts +26 -0
- package/src/service/all-projects.ts +153 -0
- package/src/service/commands.ts +256 -0
- package/src/service/due.ts +82 -0
- package/src/service/lock.ts +101 -0
- package/src/service/log-file.ts +56 -0
- package/src/service/state.ts +41 -0
- package/src/service/units.ts +90 -0
- package/src/service/worker.ts +51 -0
- package/src/skill-agents.ts +74 -0
- package/src/skill-install.ts +334 -0
- package/src/sync-write.ts +21 -0
- package/src/tick-report.ts +205 -0
- package/src/tts.ts +124 -0
- package/vendor/@vfrey/contracts/dist/account.d.ts +97 -0
- package/vendor/@vfrey/contracts/dist/account.js +27 -0
- package/vendor/@vfrey/contracts/dist/checks.d.ts +8 -0
- package/vendor/@vfrey/contracts/dist/checks.js +1 -0
- package/vendor/@vfrey/contracts/dist/credentials/crypto.d.ts +4 -0
- package/vendor/@vfrey/contracts/dist/credentials/crypto.js +38 -0
- package/vendor/@vfrey/contracts/dist/domain/advice-persona.d.ts +10 -0
- package/vendor/@vfrey/contracts/dist/domain/advice-persona.js +24 -0
- package/vendor/@vfrey/contracts/dist/domain/backoff.d.ts +13 -0
- package/vendor/@vfrey/contracts/dist/domain/backoff.js +27 -0
- package/vendor/@vfrey/contracts/dist/domain/cadence.d.ts +29 -0
- package/vendor/@vfrey/contracts/dist/domain/cadence.js +95 -0
- package/vendor/@vfrey/contracts/dist/domain/creators.d.ts +146 -0
- package/vendor/@vfrey/contracts/dist/domain/creators.js +2 -0
- package/vendor/@vfrey/contracts/dist/domain/disclosure.d.ts +127 -0
- package/vendor/@vfrey/contracts/dist/domain/disclosure.js +250 -0
- package/vendor/@vfrey/contracts/dist/domain/errors.d.ts +34 -0
- package/vendor/@vfrey/contracts/dist/domain/errors.js +68 -0
- package/vendor/@vfrey/contracts/dist/domain/redact.d.ts +1 -0
- package/vendor/@vfrey/contracts/dist/domain/redact.js +21 -0
- package/vendor/@vfrey/contracts/dist/domain/revenue.d.ts +13 -0
- package/vendor/@vfrey/contracts/dist/domain/revenue.js +16 -0
- package/vendor/@vfrey/contracts/dist/domain/safety.d.ts +20 -0
- package/vendor/@vfrey/contracts/dist/domain/safety.js +61 -0
- package/vendor/@vfrey/contracts/dist/domain/similarity.d.ts +13 -0
- package/vendor/@vfrey/contracts/dist/domain/similarity.js +100 -0
- package/vendor/@vfrey/contracts/dist/domain/templates.d.ts +18 -0
- package/vendor/@vfrey/contracts/dist/domain/templates.js +67 -0
- package/vendor/@vfrey/contracts/dist/domain/tiktok-chunks.d.ts +19 -0
- package/vendor/@vfrey/contracts/dist/domain/tiktok-chunks.js +52 -0
- package/vendor/@vfrey/contracts/dist/domain/topics.d.ts +78 -0
- package/vendor/@vfrey/contracts/dist/domain/topics.js +4 -0
- package/vendor/@vfrey/contracts/dist/domain/types.d.ts +216 -0
- package/vendor/@vfrey/contracts/dist/domain/types.js +1 -0
- package/vendor/@vfrey/contracts/dist/domain/variation.d.ts +57 -0
- package/vendor/@vfrey/contracts/dist/domain/variation.js +278 -0
- package/vendor/@vfrey/contracts/dist/events.d.ts +20 -0
- package/vendor/@vfrey/contracts/dist/events.js +1 -0
- package/vendor/@vfrey/contracts/dist/http.d.ts +11 -0
- package/vendor/@vfrey/contracts/dist/http.js +37 -0
- package/vendor/@vfrey/contracts/dist/index.d.ts +22 -0
- package/vendor/@vfrey/contracts/dist/index.js +22 -0
- package/vendor/@vfrey/contracts/dist/log.d.ts +2 -0
- package/vendor/@vfrey/contracts/dist/log.js +10 -0
- package/vendor/@vfrey/contracts/dist/mail.d.ts +55 -0
- package/vendor/@vfrey/contracts/dist/mail.js +1 -0
- package/vendor/@vfrey/contracts/package.json +18 -0
- package/vendor/@vfrey/ingest/dist/index.d.ts +41 -0
- package/vendor/@vfrey/ingest/dist/index.js +221 -0
- package/vendor/@vfrey/ingest/dist/parse.d.ts +5 -0
- package/vendor/@vfrey/ingest/dist/parse.js +165 -0
- package/vendor/@vfrey/ingest/package.json +21 -0
- package/vendor/framey/LICENSE +190 -0
- package/vendor/framey/NOTICE +15 -0
- package/vendor/framey/SOURCE.json +24 -0
- package/vendor/framey/STUDIO-SOURCE.json +9 -0
- package/vendor/framey/bin/framey-localize-fonts.mjs +12 -0
- package/vendor/framey/bin/framey.mjs +16 -0
- package/vendor/framey/dist/add-VMJD5KBS.js +75 -0
- package/vendor/framey/dist/animatedGifPrep-QPKGJ6PM.js +43 -0
- package/vendor/framey/dist/api.d.ts +211 -0
- package/vendor/framey/dist/api.js +76 -0
- package/vendor/framey/dist/appHistory-WW56FZTT.js +31 -0
- package/vendor/framey/dist/asset-WQKGOELE.js +26 -0
- package/vendor/framey/dist/audio-RSJWVWRA.js +1936 -0
- package/vendor/framey/dist/batchRender-3HPICDCT.js +366 -0
- package/vendor/framey/dist/beats-HL2BDUZI.js +273 -0
- package/vendor/framey/dist/benchmark-RWCWHI5Z.js +230 -0
- package/vendor/framey/dist/browser-ECYET3Q2.js +206 -0
- package/vendor/framey/dist/bundleWithLocalizedFonts-ALYBQEQT.js +52 -0
- package/vendor/framey/dist/captureCompositionFrame-4DA6SEH2.js +94 -0
- package/vendor/framey/dist/catalog-5JVDEUWK.js +979 -0
- package/vendor/framey/dist/catch-up-NEBCL5NO.js +106 -0
- package/vendor/framey/dist/check-F5N544ML.js +111 -0
- package/vendor/framey/dist/checkBrowser-LZ66CMJG.js +110 -0
- package/vendor/framey/dist/chunk-2K7Z2HVP.js +372 -0
- package/vendor/framey/dist/chunk-2UZQHDM7.js +323 -0
- package/vendor/framey/dist/chunk-2X4PQEYM.js +34 -0
- package/vendor/framey/dist/chunk-3422KMTD.js +168 -0
- package/vendor/framey/dist/chunk-3FYD4YEK.js +72 -0
- package/vendor/framey/dist/chunk-3GXQPCJC.js +682 -0
- package/vendor/framey/dist/chunk-3LM6YPBR.js +179 -0
- package/vendor/framey/dist/chunk-442JNXRM.js +20 -0
- package/vendor/framey/dist/chunk-4BNN5FGX.js +182 -0
- package/vendor/framey/dist/chunk-4P7NX5BM.js +11532 -0
- package/vendor/framey/dist/chunk-4UMPIPCQ.js +88 -0
- package/vendor/framey/dist/chunk-4YYJOFKS.js +28 -0
- package/vendor/framey/dist/chunk-54HJ63Q2.js +29 -0
- package/vendor/framey/dist/chunk-5ETJX6WM.js +89 -0
- package/vendor/framey/dist/chunk-5SG54JRS.js +68 -0
- package/vendor/framey/dist/chunk-634HSJ3J.js +58 -0
- package/vendor/framey/dist/chunk-66LREXGS.js +48 -0
- package/vendor/framey/dist/chunk-6BEFEWFB.js +25 -0
- package/vendor/framey/dist/chunk-6BNTGNGD.js +286 -0
- package/vendor/framey/dist/chunk-6DDPOHMK.js +140 -0
- package/vendor/framey/dist/chunk-6GV5XSOR.js +214 -0
- package/vendor/framey/dist/chunk-6JR2XUEE.js +127 -0
- package/vendor/framey/dist/chunk-73QVATIM.js +362 -0
- package/vendor/framey/dist/chunk-7FMUTGOH.js +279 -0
- package/vendor/framey/dist/chunk-7JQFJ6JJ.js +291 -0
- package/vendor/framey/dist/chunk-AHPGAESX.js +113 -0
- package/vendor/framey/dist/chunk-AHX34EFP.js +15 -0
- package/vendor/framey/dist/chunk-AJ5CSAEZ.js +487 -0
- package/vendor/framey/dist/chunk-B7RJV74O.js +5047 -0
- package/vendor/framey/dist/chunk-BL4U6U52.js +254 -0
- package/vendor/framey/dist/chunk-BSQ7XANM.js +210 -0
- package/vendor/framey/dist/chunk-BZ56MTDX.js +6 -0
- package/vendor/framey/dist/chunk-C5BO7PMT.js +282 -0
- package/vendor/framey/dist/chunk-CFUCHO4T.js +358 -0
- package/vendor/framey/dist/chunk-CZGHFATT.js +31 -0
- package/vendor/framey/dist/chunk-DLA44CMS.js +5649 -0
- package/vendor/framey/dist/chunk-DPVXBVLL.js +31292 -0
- package/vendor/framey/dist/chunk-DQBY7FRR.js +397 -0
- package/vendor/framey/dist/chunk-EAMLBAHA.js +154 -0
- package/vendor/framey/dist/chunk-EOVYQ3IG.js +143 -0
- package/vendor/framey/dist/chunk-EVMY7IPL.js +612 -0
- package/vendor/framey/dist/chunk-FG4BBFZI.js +122 -0
- package/vendor/framey/dist/chunk-FI4I7CME.js +56 -0
- package/vendor/framey/dist/chunk-FLREUEHW.js +2081 -0
- package/vendor/framey/dist/chunk-FUFP7A7S.js +1126 -0
- package/vendor/framey/dist/chunk-FV3PIKGH.js +56 -0
- package/vendor/framey/dist/chunk-FXMKHHPO.js +123 -0
- package/vendor/framey/dist/chunk-GGZAM5VH.js +1187 -0
- package/vendor/framey/dist/chunk-GKZEVJIB.js +39 -0
- package/vendor/framey/dist/chunk-GMECXFAN.js +57 -0
- package/vendor/framey/dist/chunk-GNEFDLFB.js +621 -0
- package/vendor/framey/dist/chunk-GPMLSOEG.js +19274 -0
- package/vendor/framey/dist/chunk-GPYVT5EE.js +59 -0
- package/vendor/framey/dist/chunk-H6IEMZEV.js +40 -0
- package/vendor/framey/dist/chunk-HEFQCIXR.js +170 -0
- package/vendor/framey/dist/chunk-HFQ4CWHA.js +118 -0
- package/vendor/framey/dist/chunk-HPDTCOKE.js +304 -0
- package/vendor/framey/dist/chunk-HTUHQKDB.js +548 -0
- package/vendor/framey/dist/chunk-HU2SPFNG.js +103 -0
- package/vendor/framey/dist/chunk-HVW7ABXD.js +19 -0
- package/vendor/framey/dist/chunk-IG7NDKXO.js +26 -0
- package/vendor/framey/dist/chunk-II3J3WXK.js +246 -0
- package/vendor/framey/dist/chunk-IR35BCLK.js +13 -0
- package/vendor/framey/dist/chunk-ISN5GRYI.js +20 -0
- package/vendor/framey/dist/chunk-IUONB55J.js +669 -0
- package/vendor/framey/dist/chunk-IVSUQR2B.js +161 -0
- package/vendor/framey/dist/chunk-IXU6PQSW.js +259 -0
- package/vendor/framey/dist/chunk-IZCW2NKT.js +29 -0
- package/vendor/framey/dist/chunk-JGXJU5PF.js +68 -0
- package/vendor/framey/dist/chunk-JHOCK3DG.js +27 -0
- package/vendor/framey/dist/chunk-JVBRJMOP.js +121 -0
- package/vendor/framey/dist/chunk-K4MJX7SR.js +17 -0
- package/vendor/framey/dist/chunk-K4WKGXRC.js +18 -0
- package/vendor/framey/dist/chunk-KGPLIH7B.js +127 -0
- package/vendor/framey/dist/chunk-KLIKCX6Q.js +63 -0
- package/vendor/framey/dist/chunk-KXTKKBOC.js +61 -0
- package/vendor/framey/dist/chunk-KZI44OPA.js +185 -0
- package/vendor/framey/dist/chunk-LEKZNRKI.js +45 -0
- package/vendor/framey/dist/chunk-LFGJWOVA.js +61 -0
- package/vendor/framey/dist/chunk-LLMSX6V6.js +17 -0
- package/vendor/framey/dist/chunk-LTGTN2TH.js +195 -0
- package/vendor/framey/dist/chunk-M2WBOQ2Q.js +54 -0
- package/vendor/framey/dist/chunk-MI5FTLYK.js +399 -0
- package/vendor/framey/dist/chunk-MLQP2QUF.js +1809 -0
- package/vendor/framey/dist/chunk-MMQ52NIZ.js +956 -0
- package/vendor/framey/dist/chunk-ND46XKK3.js +742 -0
- package/vendor/framey/dist/chunk-NYEXNSHM.js +504 -0
- package/vendor/framey/dist/chunk-O4YRB27L.js +57 -0
- package/vendor/framey/dist/chunk-O7BGSQ5F.js +92 -0
- package/vendor/framey/dist/chunk-OFQWTKPW.js +117 -0
- package/vendor/framey/dist/chunk-P5ZBLXJ6.js +91 -0
- package/vendor/framey/dist/chunk-P6LJ4Y32.js +4662 -0
- package/vendor/framey/dist/chunk-PKZ7RK5N.js +281 -0
- package/vendor/framey/dist/chunk-PURHAXFL.js +15 -0
- package/vendor/framey/dist/chunk-Q5X2B5WT.js +29 -0
- package/vendor/framey/dist/chunk-QAMKOG67.js +248 -0
- package/vendor/framey/dist/chunk-R6YBK4XX.js +514 -0
- package/vendor/framey/dist/chunk-RGLQURIX.js +2997 -0
- package/vendor/framey/dist/chunk-RNV3DM4S.js +3573 -0
- package/vendor/framey/dist/chunk-ROEW726S.js +4638 -0
- package/vendor/framey/dist/chunk-RQVDTPGD.js +6 -0
- package/vendor/framey/dist/chunk-RVZHGOGR.js +26 -0
- package/vendor/framey/dist/chunk-RXATE6FZ.js +385 -0
- package/vendor/framey/dist/chunk-S3S4TGEH.js +424 -0
- package/vendor/framey/dist/chunk-SDYDNHEE.js +11202 -0
- package/vendor/framey/dist/chunk-SSWBU67I.js +173 -0
- package/vendor/framey/dist/chunk-ST35C4K6.js +28 -0
- package/vendor/framey/dist/chunk-SZNTYTIV.js +990 -0
- package/vendor/framey/dist/chunk-T2EUWCJE.js +29 -0
- package/vendor/framey/dist/chunk-T6AGUTZJ.js +444 -0
- package/vendor/framey/dist/chunk-THJALHFJ.js +11131 -0
- package/vendor/framey/dist/chunk-TIQB63MX.js +18128 -0
- package/vendor/framey/dist/chunk-U242RTCT.js +134 -0
- package/vendor/framey/dist/chunk-UJZREAV6.js +3901 -0
- package/vendor/framey/dist/chunk-UMD3V7CU.js +264 -0
- package/vendor/framey/dist/chunk-UOFAE5RF.js +42 -0
- package/vendor/framey/dist/chunk-UTEIUGAZ.js +29 -0
- package/vendor/framey/dist/chunk-VAS6HQX3.js +138 -0
- package/vendor/framey/dist/chunk-VC76R6W2.js +27 -0
- package/vendor/framey/dist/chunk-VFZ7W5W7.js +226 -0
- package/vendor/framey/dist/chunk-VHNLZAE2.js +348 -0
- package/vendor/framey/dist/chunk-VMC4WSH5.js +278 -0
- package/vendor/framey/dist/chunk-VORQIH64.js +108 -0
- package/vendor/framey/dist/chunk-VTXFRIHO.js +186 -0
- package/vendor/framey/dist/chunk-W2LGJSEN.js +182 -0
- package/vendor/framey/dist/chunk-WKBM7NDG.js +32 -0
- package/vendor/framey/dist/chunk-WMQNIQDJ.js +2057 -0
- package/vendor/framey/dist/chunk-WN4XZC5F.js +504 -0
- package/vendor/framey/dist/chunk-WQ6ZXHFQ.js +133 -0
- package/vendor/framey/dist/chunk-X7HBSTCZ.js +53 -0
- package/vendor/framey/dist/chunk-X7MTZ4T2.js +6 -0
- package/vendor/framey/dist/chunk-XPTOJZJF.js +308 -0
- package/vendor/framey/dist/chunk-XT6MXC7A.js +6 -0
- package/vendor/framey/dist/chunk-XT7X6QCP.js +6 -0
- package/vendor/framey/dist/chunk-XTMDWNEC.js +2820 -0
- package/vendor/framey/dist/chunk-XUHOIDKG.js +6 -0
- package/vendor/framey/dist/chunk-XX7LTW5Y.js +138 -0
- package/vendor/framey/dist/chunk-Y3YGTZEG.js +382 -0
- package/vendor/framey/dist/chunk-Y5SBSGN7.js +346 -0
- package/vendor/framey/dist/chunk-YCMVI4MZ.js +625 -0
- package/vendor/framey/dist/chunk-YOR4CTCE.js +261 -0
- package/vendor/framey/dist/chunk-YPRBGITP.js +2748 -0
- package/vendor/framey/dist/chunk-ZKDMAOFU.js +32 -0
- package/vendor/framey/dist/chunk-ZW6DURPF.js +1318 -0
- package/vendor/framey/dist/clean-ZJOGDKDM.js +336 -0
- package/vendor/framey/dist/cli.js +439 -0
- package/vendor/framey/dist/cloudrun-HGJ3B6ZV.js +767 -0
- package/vendor/framey/dist/commands/contrast-audit.browser.js +643 -0
- package/vendor/framey/dist/commands/layout-audit.browser.js +2914 -0
- package/vendor/framey/dist/commands/motion-sample.browser.js +74 -0
- package/vendor/framey/dist/commands/motion-signature.browser.js +475 -0
- package/vendor/framey/dist/compare-W7UY3BAZ.js +463 -0
- package/vendor/framey/dist/compiler-TM3W6GYF.js +136 -0
- package/vendor/framey/dist/component-QF5VGYMU.js +176 -0
- package/vendor/framey/dist/compositions-XT3PMNDF.js +238 -0
- package/vendor/framey/dist/contactSheet-7W6GYHBQ.js +24 -0
- package/vendor/framey/dist/deploy-6FJPWKF2.js +299 -0
- package/vendor/framey/dist/destroy-HE2RIPKZ.js +57 -0
- package/vendor/framey/dist/deterministicFonts-RADD3BSX.js +50 -0
- package/vendor/framey/dist/dist-4S2FGGVY.js +422 -0
- package/vendor/framey/dist/dist-BE4B2EZE.js +32 -0
- package/vendor/framey/dist/dist-EWXJGN63.js +129 -0
- package/vendor/framey/dist/docs-VKIRFEEX.js +131 -0
- package/vendor/framey/dist/doctor-2UNJ2G7U.js +74 -0
- package/vendor/framey/dist/dom-37K6YOH4.js +14 -0
- package/vendor/framey/dist/dotEnv-7PZQTVIM.js +54 -0
- package/vendor/framey/dist/events-ACY3P2PA.js +76 -0
- package/vendor/framey/dist/events-IHB3B2MK.js +69 -0
- package/vendor/framey/dist/ffmpeg-DR5LGGSK.js +63 -0
- package/vendor/framey/dist/figma-BODVUPHB.js +63 -0
- package/vendor/framey/dist/fontData.generated-NXAOI4GH.js +13 -0
- package/vendor/framey/dist/fontLocalizeCli.js +142 -0
- package/vendor/framey/dist/gpuPolicy-XLEXORZY.js +49 -0
- package/vendor/framey/dist/grade-compare-GAXFQ74C.js +661 -0
- package/vendor/framey/dist/gsapParser-IEUSLYDJ.js +2885 -0
- package/vendor/framey/dist/gsapParserAcorn-LZJKCFQI.js +30 -0
- package/vendor/framey/dist/help-VCB5X2HS.js +184 -0
- package/vendor/framey/dist/history-ENGZEVFT.js +471 -0
- package/vendor/framey/dist/hyperframe.manifest.json +22 -0
- package/vendor/framey/dist/hyperframe.runtime.iife.js +1132 -0
- package/vendor/framey/dist/hyperframes-player.global.js +478 -0
- package/vendor/framey/dist/hyperframes-slideshow.global.js +148 -0
- package/vendor/framey/dist/info-WPCJHBMU.js +182 -0
- package/vendor/framey/dist/init-G4WGLYGD.js +1176 -0
- package/vendor/framey/dist/inspect-5IQ6CNEQ.js +106 -0
- package/vendor/framey/dist/installer-ML4HWUV7.js +40 -0
- package/vendor/framey/dist/keyframes-Q6XJO7VW.js +2755 -0
- package/vendor/framey/dist/lambda-A7JC74JF.js +468 -0
- package/vendor/framey/dist/layout-YET6XNXA.js +95 -0
- package/vendor/framey/dist/lint-I7FZN2VJ.js +162 -0
- package/vendor/framey/dist/lintProject-PDB3UN72.js +30 -0
- package/vendor/framey/dist/manager-CD6LJ7ZN.js +45 -0
- package/vendor/framey/dist/manager-WA4F2GST.js +67 -0
- package/vendor/framey/dist/media-treatment-BXYS4WVA.js +1030 -0
- package/vendor/framey/dist/media-use-LWH3MANK.js +113 -0
- package/vendor/framey/dist/models-K363FYM4.js +195 -0
- package/vendor/framey/dist/motionShot-GPAVWXLH.js +640 -0
- package/vendor/framey/dist/normalize-FASIPBUM.js +24 -0
- package/vendor/framey/dist/normalize-audio-VDWYRHN6.js +268 -0
- package/vendor/framey/dist/open-E3TB6P6J.js +128 -0
- package/vendor/framey/dist/parakeetRunner-UP34UOI2.js +58 -0
- package/vendor/framey/dist/pipeline-VXIUYEBU.js +64 -0
- package/vendor/framey/dist/play-BUTDQ4DV.js +353 -0
- package/vendor/framey/dist/policies-OLDYGFK5.js +309 -0
- package/vendor/framey/dist/preflight-2KZ2GWAZ.js +55 -0
- package/vendor/framey/dist/present-GXYSM7NX.js +353 -0
- package/vendor/framey/dist/preview-EKZ33JOJ.js +1910 -0
- package/vendor/framey/dist/producer-SKU5EV3J.js +13 -0
- package/vendor/framey/dist/progress-ZWB4Z4ET.js +76 -0
- package/vendor/framey/dist/projectConfig-3MZAYVTS.js +60 -0
- package/vendor/framey/dist/publication-DTKWNF74.js +33 -0
- package/vendor/framey/dist/remove-background-OY5L7XN2.js +265 -0
- package/vendor/framey/dist/render-CDV4GDFX.js +187 -0
- package/vendor/framey/dist/render-YE5YAMOD.js +2620 -0
- package/vendor/framey/dist/render-batch-ZAMFPCLL.js +274 -0
- package/vendor/framey/dist/renderSetupWorker.js +120 -0
- package/vendor/framey/dist/resolver-D5BIPSEW.js +42 -0
- package/vendor/framey/dist/runtimeVersion.js +18 -0
- package/vendor/framey/dist/sam-WFZXI4F7.js +23 -0
- package/vendor/framey/dist/shaderTransitionWorker.js +44 -0
- package/vendor/framey/dist/sherpa-RQWLV7I3.js +79 -0
- package/vendor/framey/dist/sherpaWorker.js +84 -0
- package/vendor/framey/dist/sites-AMOVABTK.js +54 -0
- package/vendor/framey/dist/skill-ZHVLH7KX.js +15 -0
- package/vendor/framey/dist/slideshow-SJGK4RQS.js +24 -0
- package/vendor/framey/dist/snapshot-TUXL6LBQ.js +1515 -0
- package/vendor/framey/dist/src-JHQGB2S6.js +215 -0
- package/vendor/framey/dist/src-Z5PGEMXB.js +532 -0
- package/vendor/framey/dist/state-B6H3WHCF.js +28 -0
- package/vendor/framey/dist/staticProjectServer-DFVZOUGI.js +63 -0
- package/vendor/framey/dist/studio/assets/hyperframes-player-DLaKjw0L.js +478 -0
- package/vendor/framey/dist/studio/assets/index-BX3KHhGX.js +71 -0
- package/vendor/framey/dist/studio/assets/index-CYbvOVp-.css +1 -0
- package/vendor/framey/dist/studio/assets/index-Dp3QEUGL.js +402 -0
- package/vendor/framey/dist/studio/assets/index-qrTAXbqc.js +531 -0
- package/vendor/framey/dist/studio/favicon.svg +14 -0
- package/vendor/framey/dist/studio/icons/timeline/audio.svg +7 -0
- package/vendor/framey/dist/studio/icons/timeline/captions.svg +5 -0
- package/vendor/framey/dist/studio/icons/timeline/composition.svg +12 -0
- package/vendor/framey/dist/studio/icons/timeline/image.svg +18 -0
- package/vendor/framey/dist/studio/icons/timeline/music.svg +10 -0
- package/vendor/framey/dist/studio/icons/timeline/text.svg +3 -0
- package/vendor/framey/dist/studio/index.html +23 -0
- package/vendor/framey/dist/studio-api-2NECGRMB.js +179 -0
- package/vendor/framey/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
- package/vendor/framey/dist/studioServer-N2OPUMOQ.js +1569 -0
- package/vendor/framey/dist/synthesize-PKTB5ATG.js +183 -0
- package/vendor/framey/dist/system-7F3UEHQT.js +27 -0
- package/vendor/framey/dist/telemetry-DQGPEKM6.js +145 -0
- package/vendor/framey/dist/telemetry-UN55N6U6.js +77 -0
- package/vendor/framey/dist/timeline-LHUUMK63.js +1295 -0
- package/vendor/framey/dist/tokens-OLECWDFK.js +92 -0
- package/vendor/framey/dist/transcribe-O7HQKMIV.js +331 -0
- package/vendor/framey/dist/transcribe-UJESPBT5.js +76 -0
- package/vendor/framey/dist/tts-YCCQHZD4.js +234 -0
- package/vendor/framey/dist/urlDownloader-H2LXLG4U.js +48 -0
- package/vendor/framey/dist/usage-HG4WMM7A.js +2167 -0
- package/vendor/framey/dist/validate-F2XMN6EV.js +87 -0
- package/vendor/framey/dist/vendor/npm/gsap@3.15.0/GSAP-LICENSE.txt +8 -0
- package/vendor/framey/dist/vendor/npm/gsap@3.15.0/dist/CustomEase.min.js +11 -0
- package/vendor/framey/dist/vendor/npm/gsap@3.15.0/dist/MotionPathPlugin.min.js +11 -0
- package/vendor/framey/dist/vendor/npm/gsap@3.15.0/dist/gsap.min.js +11 -0
- package/vendor/framey/dist/warmCheck.js +220 -0
- package/vendor/framey/dist/warmCheckClient.js +139 -0
- package/vendor/framey/dist/workspaceBuildCheck-XYD2YTFW.js +133 -0
- package/vendor/framey-player/LICENSE +190 -0
- package/vendor/framey-player/NOTICE +16 -0
- package/vendor/framey-player/SOURCE.json +6 -0
- package/vendor/framey-player/hyperframes-player.global.js +478 -0
- package/vendor/framey.pin +1 -0
- package/bin/index.js +0 -3
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
buildArcPath,
|
|
9
|
+
editabilityForProvenance,
|
|
10
|
+
extractGsapLabels,
|
|
11
|
+
findTimelineScript,
|
|
12
|
+
gsapScriptMotionPathFirstUseIndex,
|
|
13
|
+
gsapScriptUsesMotionPath,
|
|
14
|
+
parseGsapScriptAcorn,
|
|
15
|
+
parseGsapScriptAcornForWrite,
|
|
16
|
+
scriptShape
|
|
17
|
+
} from "./chunk-FLREUEHW.js";
|
|
18
|
+
import "./chunk-RXATE6FZ.js";
|
|
19
|
+
import "./chunk-M2WBOQ2Q.js";
|
|
20
|
+
export {
|
|
21
|
+
buildArcPath,
|
|
22
|
+
editabilityForProvenance,
|
|
23
|
+
extractGsapLabels,
|
|
24
|
+
findTimelineScript,
|
|
25
|
+
gsapScriptMotionPathFirstUseIndex,
|
|
26
|
+
gsapScriptUsesMotionPath,
|
|
27
|
+
parseGsapScriptAcorn,
|
|
28
|
+
parseGsapScriptAcornForWrite,
|
|
29
|
+
scriptShape
|
|
30
|
+
};
|
|
@@ -0,0 +1,184 @@
|
|
|
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
|
+
renderUsage
|
|
9
|
+
} from "./chunk-S3S4TGEH.js";
|
|
10
|
+
import {
|
|
11
|
+
c
|
|
12
|
+
} from "./chunk-VORQIH64.js";
|
|
13
|
+
import {
|
|
14
|
+
VERSION
|
|
15
|
+
} from "./chunk-AHX34EFP.js";
|
|
16
|
+
import "./chunk-M2WBOQ2Q.js";
|
|
17
|
+
|
|
18
|
+
// src/help.ts
|
|
19
|
+
var GROUPS = [
|
|
20
|
+
{
|
|
21
|
+
title: "Getting Started",
|
|
22
|
+
commands: [
|
|
23
|
+
["init", "Scaffold a new composition project"],
|
|
24
|
+
["add", "Install a block or component from the registry"],
|
|
25
|
+
["catalog", "Browse and install blocks and components"],
|
|
26
|
+
["preview", "Start the studio for previewing compositions"],
|
|
27
|
+
["present", "Open a slideshow deck in presenter mode (with audience sync)"],
|
|
28
|
+
["render", "Render a composition to MP4 or WebM"],
|
|
29
|
+
["open", "Open a project in the HyperFrames desktop app"],
|
|
30
|
+
["catch-up", "See what was done in the desktop app since you last looked"]
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: "Project",
|
|
35
|
+
commands: [
|
|
36
|
+
["lint", "Validate a composition for common mistakes"],
|
|
37
|
+
["check", "Run lint, runtime validation, and layout inspection as one gate"],
|
|
38
|
+
[
|
|
39
|
+
"validate",
|
|
40
|
+
"Runtime-validate a composition in headless Chrome (JS errors, missing assets, contrast)"
|
|
41
|
+
],
|
|
42
|
+
["beats", "Detect beats in the music track and write beats/<audio>.json"],
|
|
43
|
+
["audio", "Measure where sounds land: onsets, hits, loudness, silence, in film time"],
|
|
44
|
+
["inspect", "Inspect rendered visual layout across the timeline"],
|
|
45
|
+
["keyframes", "Inspect keyframes and render onion-shot diagnostics"],
|
|
46
|
+
["snapshot", "Capture key frames as PNG screenshots for visual verification"],
|
|
47
|
+
[
|
|
48
|
+
"media-treatment",
|
|
49
|
+
"Discover, apply, or clear deterministic media treatments on media elements"
|
|
50
|
+
],
|
|
51
|
+
[
|
|
52
|
+
"normalize-audio",
|
|
53
|
+
"Match one authored audio clip's loudness to another using integrated LUFS"
|
|
54
|
+
],
|
|
55
|
+
[
|
|
56
|
+
"grade-compare",
|
|
57
|
+
"Render candidate color grades onto a reference frame as one labeled comparison PNG"
|
|
58
|
+
],
|
|
59
|
+
["compare", "Render composition variants into one labeled comparison sheet"],
|
|
60
|
+
["info", "Print project metadata"],
|
|
61
|
+
["compositions", "List all compositions in a project"],
|
|
62
|
+
["timeline", "Print the project's tracks and clips"],
|
|
63
|
+
["history", "List, undo and restore the project's recorded changes"],
|
|
64
|
+
["docs", "View inline documentation in the terminal"]
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
title: "Tooling",
|
|
69
|
+
commands: [
|
|
70
|
+
[
|
|
71
|
+
"benchmark",
|
|
72
|
+
"Render with preset fps/quality/worker configs and compare speed and file size"
|
|
73
|
+
],
|
|
74
|
+
["browser", "Manage the Chrome browser used for rendering"],
|
|
75
|
+
["doctor", "Check system dependencies and environment"],
|
|
76
|
+
["clean", "Find and remove what Framey left on disk"]
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
title: "Deploy",
|
|
81
|
+
commands: [
|
|
82
|
+
["lambda", "Deploy and drive distributed renders on AWS Lambda"],
|
|
83
|
+
["cloudrun", "Deploy and drive distributed renders on Google Cloud Run"]
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
title: "AI & Integrations",
|
|
88
|
+
commands: [
|
|
89
|
+
[
|
|
90
|
+
"transcribe",
|
|
91
|
+
"Transcribe audio/video to word-level timestamps, or import an existing transcript"
|
|
92
|
+
],
|
|
93
|
+
["models", "List or download on-device models (models list, models install parakeet)"],
|
|
94
|
+
["tts", "Generate speech audio from text using a local AI model (Kokoro-82M)"],
|
|
95
|
+
["remove-background", "Remove background from a video or image to produce transparent media"]
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
title: "Settings",
|
|
100
|
+
commands: [["telemetry", "Manage anonymous usage telemetry"]]
|
|
101
|
+
}
|
|
102
|
+
];
|
|
103
|
+
var ROOT_EXAMPLES = [
|
|
104
|
+
["Create a new project", "framey init my-video"],
|
|
105
|
+
["Start the live preview studio", "framey preview"],
|
|
106
|
+
["Render to MP4", "framey render -o out.mp4"],
|
|
107
|
+
["Transparent WebM overlay", "framey render --format webm -o out.webm"],
|
|
108
|
+
["Validate your composition", "framey lint"],
|
|
109
|
+
["Inspect visual layout", "framey inspect"],
|
|
110
|
+
["Check system dependencies", "framey doctor"]
|
|
111
|
+
];
|
|
112
|
+
async function loadExamples(name, parentName) {
|
|
113
|
+
if (parentName && parentName !== "framey") {
|
|
114
|
+
const examples = await tryLoadExamples(`./commands/${parentName}/${name}.js`);
|
|
115
|
+
if (examples) return examples;
|
|
116
|
+
}
|
|
117
|
+
return await tryLoadExamples(`./commands/${name}.js`);
|
|
118
|
+
}
|
|
119
|
+
async function tryLoadExamples(modulePath) {
|
|
120
|
+
try {
|
|
121
|
+
const mod = await import(modulePath);
|
|
122
|
+
return mod.examples;
|
|
123
|
+
} catch (err) {
|
|
124
|
+
if (err.code === "ERR_MODULE_NOT_FOUND") return void 0;
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
var STATIC_EXAMPLES = {};
|
|
129
|
+
function renderRootHelp() {
|
|
130
|
+
const NAME_COL = 19;
|
|
131
|
+
const CMD_COL = 46;
|
|
132
|
+
const lines = [];
|
|
133
|
+
lines.push(
|
|
134
|
+
`${c.bold("framey")} ${c.dim(`v${VERSION}`)} \u2014 Create and render HTML video compositions`
|
|
135
|
+
);
|
|
136
|
+
lines.push("");
|
|
137
|
+
lines.push(`${c.bold("Usage:")} framey ${c.cyan("<command>")} [options]`);
|
|
138
|
+
lines.push("");
|
|
139
|
+
for (const group of GROUPS) {
|
|
140
|
+
lines.push(c.bold(`${group.title}:`));
|
|
141
|
+
for (const [name, desc] of group.commands) {
|
|
142
|
+
lines.push(` ${c.cyan(name.padEnd(NAME_COL))}${desc}`);
|
|
143
|
+
}
|
|
144
|
+
lines.push("");
|
|
145
|
+
}
|
|
146
|
+
lines.push(c.bold("Examples:"));
|
|
147
|
+
for (const [comment, command] of ROOT_EXAMPLES) {
|
|
148
|
+
lines.push(` ${c.dim("$")} ${command.padEnd(CMD_COL)} ${c.dim(comment)}`);
|
|
149
|
+
}
|
|
150
|
+
lines.push("");
|
|
151
|
+
lines.push(`Run ${c.cyan("framey <command> --help")} for more information about a command.`);
|
|
152
|
+
return lines.join("\n");
|
|
153
|
+
}
|
|
154
|
+
function formatExamples(examples) {
|
|
155
|
+
const lines = [];
|
|
156
|
+
lines.push(c.bold("Examples:"));
|
|
157
|
+
for (const [comment, command] of examples) {
|
|
158
|
+
lines.push(` ${c.gray(`# ${comment}`)}`);
|
|
159
|
+
lines.push(` ${command}`);
|
|
160
|
+
lines.push("");
|
|
161
|
+
}
|
|
162
|
+
return lines.join("\n");
|
|
163
|
+
}
|
|
164
|
+
async function showUsage(cmd, parent) {
|
|
165
|
+
if (!parent) {
|
|
166
|
+
console.log(renderRootHelp() + "\n");
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const meta = await (typeof cmd.meta === "function" ? cmd.meta() : cmd.meta);
|
|
170
|
+
const usage = await renderUsage(cmd, parent);
|
|
171
|
+
console.log(usage + "\n");
|
|
172
|
+
const name = meta?.name;
|
|
173
|
+
if (name) {
|
|
174
|
+
const parentMeta = await (typeof parent.meta === "function" ? parent.meta() : parent.meta);
|
|
175
|
+
const parentName = parentMeta?.name;
|
|
176
|
+
const examples = STATIC_EXAMPLES[name] ?? await loadExamples(name, parentName);
|
|
177
|
+
if (examples) {
|
|
178
|
+
console.log(formatExamples(examples) + "\n");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export {
|
|
183
|
+
showUsage
|
|
184
|
+
};
|
|
@@ -0,0 +1,471 @@
|
|
|
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
|
+
Refusal,
|
|
9
|
+
endTurn,
|
|
10
|
+
historyDeps,
|
|
11
|
+
lastTurnParts,
|
|
12
|
+
withOwner,
|
|
13
|
+
withReader,
|
|
14
|
+
writeTurn
|
|
15
|
+
} from "./chunk-IXU6PQSW.js";
|
|
16
|
+
import "./chunk-X7MTZ4T2.js";
|
|
17
|
+
import {
|
|
18
|
+
withMeta
|
|
19
|
+
} from "./chunk-O4YRB27L.js";
|
|
20
|
+
import "./chunk-O7BGSQ5F.js";
|
|
21
|
+
import {
|
|
22
|
+
HistoryBusyError,
|
|
23
|
+
HistoryIdError,
|
|
24
|
+
HistoryRefusedError,
|
|
25
|
+
START
|
|
26
|
+
} from "./chunk-YPRBGITP.js";
|
|
27
|
+
import "./chunk-7JQFJ6JJ.js";
|
|
28
|
+
import "./chunk-P5ZBLXJ6.js";
|
|
29
|
+
import {
|
|
30
|
+
AmbiguousPreviewServerError
|
|
31
|
+
} from "./chunk-DQBY7FRR.js";
|
|
32
|
+
import "./chunk-EOVYQ3IG.js";
|
|
33
|
+
import {
|
|
34
|
+
trackHistoryAction
|
|
35
|
+
} from "./chunk-GNEFDLFB.js";
|
|
36
|
+
import "./chunk-2UZQHDM7.js";
|
|
37
|
+
import "./chunk-NYEXNSHM.js";
|
|
38
|
+
import {
|
|
39
|
+
defineCommand
|
|
40
|
+
} from "./chunk-S3S4TGEH.js";
|
|
41
|
+
import "./chunk-54HJ63Q2.js";
|
|
42
|
+
import "./chunk-ISN5GRYI.js";
|
|
43
|
+
import "./chunk-VORQIH64.js";
|
|
44
|
+
import {
|
|
45
|
+
setCommandExitCode
|
|
46
|
+
} from "./chunk-JVBRJMOP.js";
|
|
47
|
+
import "./chunk-EVMY7IPL.js";
|
|
48
|
+
import "./chunk-OFQWTKPW.js";
|
|
49
|
+
import "./chunk-634HSJ3J.js";
|
|
50
|
+
import "./chunk-FXMKHHPO.js";
|
|
51
|
+
import "./chunk-AHX34EFP.js";
|
|
52
|
+
import "./chunk-T2EUWCJE.js";
|
|
53
|
+
import "./chunk-T6AGUTZJ.js";
|
|
54
|
+
import "./chunk-XT6MXC7A.js";
|
|
55
|
+
import "./chunk-W2LGJSEN.js";
|
|
56
|
+
import "./chunk-M2WBOQ2Q.js";
|
|
57
|
+
|
|
58
|
+
// src/commands/history.ts
|
|
59
|
+
import { spawnSync } from "child_process";
|
|
60
|
+
import {
|
|
61
|
+
closeSync,
|
|
62
|
+
fstatSync,
|
|
63
|
+
mkdirSync,
|
|
64
|
+
mkdtempSync,
|
|
65
|
+
openSync,
|
|
66
|
+
readSync,
|
|
67
|
+
rmSync,
|
|
68
|
+
writeFileSync
|
|
69
|
+
} from "fs";
|
|
70
|
+
import { tmpdir } from "os";
|
|
71
|
+
import { dirname, join } from "path";
|
|
72
|
+
var examples = [
|
|
73
|
+
[
|
|
74
|
+
"What changed since your last turn, and who changed it",
|
|
75
|
+
"framey history --since mine --who claude"
|
|
76
|
+
],
|
|
77
|
+
["Label your writes as one entry", "framey history begin --who claude --label 'Bigger title'"],
|
|
78
|
+
["Undo your newest entry after a failed check", "framey history undo --who claude"]
|
|
79
|
+
];
|
|
80
|
+
var YOU = { kind: "person", name: "You" };
|
|
81
|
+
var withOwner2 = (action, dir, task) => withOwner(dir, (owner, turn, projectDir) => {
|
|
82
|
+
trackHistoryAction({ action, via: owner.via });
|
|
83
|
+
return task(owner, turn, projectDir);
|
|
84
|
+
});
|
|
85
|
+
var withReader2 = (action, dir, task) => withReader(dir, (reader) => {
|
|
86
|
+
trackHistoryAction({ action, via: reader.via });
|
|
87
|
+
return task(reader);
|
|
88
|
+
});
|
|
89
|
+
var whoOf = (name) => name ? { kind: "agent", name } : YOU;
|
|
90
|
+
var short = (id) => id.slice(0, 8);
|
|
91
|
+
function lastIndex(items, match) {
|
|
92
|
+
for (let index = items.length - 1; index >= 0; index -= 1) if (match(items[index])) return index;
|
|
93
|
+
return -1;
|
|
94
|
+
}
|
|
95
|
+
async function latestWrite(owner, turn) {
|
|
96
|
+
const entries = await owner.list();
|
|
97
|
+
return entries.reduce((latest, entry) => {
|
|
98
|
+
const same = entry.id === turn.id || turn.parts.includes(entry.id) || entry.who.kind === turn.who.kind && entry.who.name === turn.who.name && entry.label === turn.label && entry.startedAt === turn.startedAt;
|
|
99
|
+
return same ? Math.max(latest, entry.endedAt) : latest;
|
|
100
|
+
}, turn.lastWriteAt);
|
|
101
|
+
}
|
|
102
|
+
async function releaseOpenTurn(owner, turn, who, exclusive, projectDir) {
|
|
103
|
+
if (!turn) return;
|
|
104
|
+
if (owner.via !== "direct") {
|
|
105
|
+
if (!exclusive || turn.who.name === who.name) await endTurn(owner, turn, projectDir);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const latest = await latestWrite(owner, turn);
|
|
109
|
+
const live = historyDeps.now() - latest <= historyDeps.turnIdleMs;
|
|
110
|
+
if (exclusive && live && turn.who.name !== who.name)
|
|
111
|
+
throw new Refusal(`${turn.who.name}'s turn is open; it has to end before yours begins`);
|
|
112
|
+
await endTurn(owner, turn, projectDir);
|
|
113
|
+
}
|
|
114
|
+
function entryOf(entries, ref) {
|
|
115
|
+
const found = entries.filter((entry) => entry.id.startsWith(ref));
|
|
116
|
+
if (found.length === 1) return found[0];
|
|
117
|
+
throw new Refusal(
|
|
118
|
+
found.length ? `"${ref}" matches ${found.length} entries` : `No entry "${ref}" in this history`
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
function timeOf(entries, ref) {
|
|
122
|
+
if (!/^\d{4}-\d\d-\d\d(T.+)?$/.test(ref) || entries.some((entry) => entry.id.startsWith(ref)))
|
|
123
|
+
return null;
|
|
124
|
+
const time = Date.parse(ref.includes("T") ? ref : `${ref}T00:00`);
|
|
125
|
+
const [year, month, date] = ref.slice(0, 10).split("-").map(Number);
|
|
126
|
+
const day = new Date(Date.UTC(year, month - 1, date));
|
|
127
|
+
if (Number.isNaN(time) || day.getUTCMonth() !== month - 1 || day.getUTCDate() !== date)
|
|
128
|
+
throw new Refusal(`"${ref}" is not a date`);
|
|
129
|
+
return time;
|
|
130
|
+
}
|
|
131
|
+
function pointOf(entries, ref) {
|
|
132
|
+
if (ref === START) return ref;
|
|
133
|
+
const time = timeOf(entries, ref);
|
|
134
|
+
if (time === null) return entryOf(entries, ref).id;
|
|
135
|
+
return entries[lastIndex(entries, (entry) => entry.endedAt <= time)]?.id ?? START;
|
|
136
|
+
}
|
|
137
|
+
function since(entries, ref, who) {
|
|
138
|
+
if (ref === "mine")
|
|
139
|
+
return entries.slice(lastIndex(entries, (entry) => entry.who.name === who.name) + 1);
|
|
140
|
+
const time = timeOf(entries, ref);
|
|
141
|
+
if (time !== null) return entries.filter((entry) => entry.endedAt > time);
|
|
142
|
+
return entries.slice(entries.indexOf(entryOf(entries, ref)) + 1);
|
|
143
|
+
}
|
|
144
|
+
function ago(at) {
|
|
145
|
+
const seconds = Math.max(0, Math.round((historyDeps.now() - at) / 1e3));
|
|
146
|
+
if (seconds < 60) return `${seconds}s ago`;
|
|
147
|
+
if (seconds < 3600) return `${Math.round(seconds / 60)}m ago`;
|
|
148
|
+
if (seconds < 86400) return `${Math.round(seconds / 3600)}h ago`;
|
|
149
|
+
return `${Math.round(seconds / 86400)}d ago`;
|
|
150
|
+
}
|
|
151
|
+
function endedTurnText(entry, parts) {
|
|
152
|
+
const earlier = parts.length - (entry ? 1 : 0);
|
|
153
|
+
const text = entry ? line(entry) : earlier ? "Nothing changed since this turn's last command." : "Nothing changed in this turn.";
|
|
154
|
+
return earlier ? `${text}
|
|
155
|
+
(+${earlier} earlier part${earlier > 1 ? "s" : ""})` : text;
|
|
156
|
+
}
|
|
157
|
+
function line(entry) {
|
|
158
|
+
const paths = entry.files.map((file) => file.path);
|
|
159
|
+
const files = paths.slice(0, 2).join(", ") + (paths.length > 2 ? ` +${paths.length - 2}` : "");
|
|
160
|
+
const flags = "undone" in entry ? `${entry.undone ? " [undone]" : ""}${entry.pinned ? " [pinned]" : ""}` : "";
|
|
161
|
+
return `${short(entry.id)} ${ago(entry.endedAt)} ${entry.who.name} ${entry.label} (${files})${flags}`;
|
|
162
|
+
}
|
|
163
|
+
var publicEntry = (entry) => ({
|
|
164
|
+
id: entry.id,
|
|
165
|
+
who: entry.who,
|
|
166
|
+
label: entry.label,
|
|
167
|
+
startedAt: entry.startedAt,
|
|
168
|
+
endedAt: entry.endedAt,
|
|
169
|
+
files: entry.files.map((file) => file.path),
|
|
170
|
+
undone: entry.undone ?? false,
|
|
171
|
+
pinned: entry.pinned ?? false
|
|
172
|
+
});
|
|
173
|
+
var changeOf = (file) => file.before === null ? "added" : file.after === null ? "deleted" : "modified";
|
|
174
|
+
function print(json, data, text) {
|
|
175
|
+
console.log(json ? JSON.stringify(withMeta(data), null, 2) : text);
|
|
176
|
+
}
|
|
177
|
+
async function textDiff(reader, entry) {
|
|
178
|
+
const work = mkdtempSync(join(tmpdir(), "hf-history-diff-"));
|
|
179
|
+
try {
|
|
180
|
+
const out = [];
|
|
181
|
+
for (const file of entry.files) {
|
|
182
|
+
const sides = await Promise.all(
|
|
183
|
+
[file.before, file.after].map((hash) => hash ? reader.blob(hash) : Buffer.alloc(0))
|
|
184
|
+
);
|
|
185
|
+
if (sides.some((bytes) => bytes.subarray(0, 8e3).includes(0))) {
|
|
186
|
+
out.push(`Binary ${file.path} changed`);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const [a, b] = ["a", "b"].map((side, index) => {
|
|
190
|
+
const path = join(side, file.path);
|
|
191
|
+
mkdirSync(dirname(join(work, path)), { recursive: true });
|
|
192
|
+
writeFileSync(join(work, path), sides[index]);
|
|
193
|
+
return path;
|
|
194
|
+
});
|
|
195
|
+
const outputPath = join(work, "diff");
|
|
196
|
+
const outputFd = openSync(outputPath, "w+", 384);
|
|
197
|
+
try {
|
|
198
|
+
const diff = spawnSync("git", ["diff", "--no-index", "--no-color", "--no-prefix", a, b], {
|
|
199
|
+
cwd: work,
|
|
200
|
+
encoding: "utf-8",
|
|
201
|
+
stdio: ["ignore", outputFd, "pipe"]
|
|
202
|
+
});
|
|
203
|
+
if (diff.error) throw new Refusal("--diff needs git on PATH");
|
|
204
|
+
const output = Buffer.alloc(fstatSync(outputFd).size);
|
|
205
|
+
let offset = 0;
|
|
206
|
+
while (offset < output.length) {
|
|
207
|
+
const count = readSync(outputFd, output, offset, output.length - offset, offset);
|
|
208
|
+
if (count === 0) break;
|
|
209
|
+
offset += count;
|
|
210
|
+
}
|
|
211
|
+
out.push(output.subarray(0, offset).toString("utf-8").trimEnd());
|
|
212
|
+
} finally {
|
|
213
|
+
closeSync(outputFd);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return out.join("\n");
|
|
217
|
+
} finally {
|
|
218
|
+
rmSync(work, { recursive: true, force: true });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function conflictText(entry, newer, files, again) {
|
|
222
|
+
return [
|
|
223
|
+
`${files.join(", ")} changed since "${entry.label}". Newer entries:`,
|
|
224
|
+
...newer.map((later) => ` ${line(later)}`),
|
|
225
|
+
`Choose one:`,
|
|
226
|
+
` framey history ${again} --just-this put back only its files, over the newer edits to them`,
|
|
227
|
+
` framey history ${again} --back-to-before go back to before it, undoing the newer entries too`
|
|
228
|
+
].join("\n");
|
|
229
|
+
}
|
|
230
|
+
function turnTargets(entries, who, dir) {
|
|
231
|
+
const inEffect = (entry) => !entry.undone && !entry.undoes;
|
|
232
|
+
const parts = lastTurnParts(dir, who.name);
|
|
233
|
+
const newest = entries[lastIndex(entries, (e) => e.who.name === who.name && inEffect(e))];
|
|
234
|
+
const targets = parts ? entries.filter((entry) => parts.includes(entry.id) && inEffect(entry)).reverse() : newest ? [newest] : [];
|
|
235
|
+
if (!targets.length)
|
|
236
|
+
throw new Refusal(
|
|
237
|
+
parts ? `${who.name}'s last turn has no change still in effect; undo an older entry by its id` : `${who.name} has no entry still in effect`
|
|
238
|
+
);
|
|
239
|
+
return targets;
|
|
240
|
+
}
|
|
241
|
+
async function undoWhole(owner, targets, who, mode) {
|
|
242
|
+
const undid = [];
|
|
243
|
+
for (const target of targets) {
|
|
244
|
+
const result = await owner.undo(target.id, who, mode);
|
|
245
|
+
if (!result.ok) {
|
|
246
|
+
for (const done of undid.reverse()) await owner.undo(done.undo.id, who);
|
|
247
|
+
return { undid: [], refused: { target, result } };
|
|
248
|
+
}
|
|
249
|
+
if (result.entry) undid.push({ target, undo: result.entry });
|
|
250
|
+
}
|
|
251
|
+
return { undid };
|
|
252
|
+
}
|
|
253
|
+
async function runUndo(args) {
|
|
254
|
+
const mode = args.justThis ? "just-this" : args.backToBefore ? "back-to-before" : void 0;
|
|
255
|
+
await withOwner2("undo", args.dir, async (owner, turn, projectDir) => {
|
|
256
|
+
const who = whoOf(args.who);
|
|
257
|
+
if (turn?.who.name === who.name) await endTurn(owner, turn, projectDir);
|
|
258
|
+
const entries = await owner.list();
|
|
259
|
+
const targets = args.ref ? [entryOf(entries, args.ref)] : turnTargets(entries, who, projectDir);
|
|
260
|
+
const { undid, refused } = await undoWhole(owner, targets, who, mode);
|
|
261
|
+
if (refused) {
|
|
262
|
+
const { target, result } = refused;
|
|
263
|
+
setCommandExitCode(2);
|
|
264
|
+
const now = await owner.list();
|
|
265
|
+
const newer = result.conflict.newer.map((id) => entryOf(now, id));
|
|
266
|
+
const again = args.ref ? `undo ${short(target.id)}` : `undo --who ${who.name}`;
|
|
267
|
+
return print(args.json, result, conflictText(target, newer, result.conflict.files, again));
|
|
268
|
+
}
|
|
269
|
+
print(
|
|
270
|
+
args.json,
|
|
271
|
+
{
|
|
272
|
+
ok: true,
|
|
273
|
+
entry: undid[0] ? publicEntry(undid[0].undo) : null,
|
|
274
|
+
entries: undid.map((done) => publicEntry(done.undo))
|
|
275
|
+
},
|
|
276
|
+
undid.map((done) => `Undid ${short(done.target.id)}: ${line(done.undo)}`).join("\n") || "Nothing to undo."
|
|
277
|
+
);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
function guarded(run) {
|
|
281
|
+
return async (args) => {
|
|
282
|
+
try {
|
|
283
|
+
await run(args);
|
|
284
|
+
} catch (error) {
|
|
285
|
+
const refused = error instanceof Refusal || error instanceof AmbiguousPreviewServerError || error instanceof HistoryBusyError || error instanceof HistoryIdError || error instanceof HistoryRefusedError;
|
|
286
|
+
if (!refused) throw error;
|
|
287
|
+
setCommandExitCode(2);
|
|
288
|
+
const message = error instanceof HistoryBusyError ? `This project is open in another app (pid ${error.pid}), which keeps its history: undo, restore or pin there.` : error.message;
|
|
289
|
+
if (args.json) print(true, { ok: false, error: message }, message);
|
|
290
|
+
else console.error(message);
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
var common = {
|
|
295
|
+
dir: { type: "string", description: "Project directory (default: current)" },
|
|
296
|
+
json: { type: "boolean", description: "Output as JSON", default: false }
|
|
297
|
+
};
|
|
298
|
+
var sub = (name, description, args, run) => defineCommand({
|
|
299
|
+
meta: { name, description },
|
|
300
|
+
args: { ...common, ...args },
|
|
301
|
+
run: ({ args: parsed }) => guarded(run)(parsed)
|
|
302
|
+
});
|
|
303
|
+
var listEntries = async (args) => {
|
|
304
|
+
if (args._?.[0]) return;
|
|
305
|
+
await withReader2("list", args.dir, async (reader) => {
|
|
306
|
+
const all = await reader.list();
|
|
307
|
+
const picked = args.since ? since(all, args.since, whoOf(args.who)) : all;
|
|
308
|
+
const limit = Number(args.limit ?? 20);
|
|
309
|
+
if (!Number.isInteger(limit) || limit < 1)
|
|
310
|
+
throw new Refusal("--limit takes a whole number above 0");
|
|
311
|
+
const shown = picked.slice(-limit).reverse();
|
|
312
|
+
const more = picked.length - shown.length;
|
|
313
|
+
const text = shown.map(line).join("\n") || "No changes recorded.";
|
|
314
|
+
print(
|
|
315
|
+
args.json,
|
|
316
|
+
{ entries: shown.map(publicEntry) },
|
|
317
|
+
more ? `${text}
|
|
318
|
+
(${more} older; --limit)` : text
|
|
319
|
+
);
|
|
320
|
+
});
|
|
321
|
+
};
|
|
322
|
+
var history_default = defineCommand({
|
|
323
|
+
meta: { name: "history", description: "List, undo and restore the project's recorded changes" },
|
|
324
|
+
args: {
|
|
325
|
+
...common,
|
|
326
|
+
since: { type: "string", description: "Only entries after an entry id, a time, or 'mine'" },
|
|
327
|
+
who: { type: "string", description: "Your name, for --since mine" },
|
|
328
|
+
limit: { type: "string", description: "Newest entries to show (default 20)" }
|
|
329
|
+
},
|
|
330
|
+
subCommands: {
|
|
331
|
+
show: () => sub(
|
|
332
|
+
"show",
|
|
333
|
+
"One entry's files, before and after",
|
|
334
|
+
{ ref: { type: "positional", required: true }, diff: { type: "boolean", default: false } },
|
|
335
|
+
(args) => withReader2("show", args.dir, async (reader) => {
|
|
336
|
+
const entry = entryOf(await reader.list(), args.ref);
|
|
337
|
+
const changes = entry.files.map((file) => ({
|
|
338
|
+
path: file.path,
|
|
339
|
+
change: changeOf(file)
|
|
340
|
+
}));
|
|
341
|
+
const diff = args.diff ? await textDiff(reader, entry) : void 0;
|
|
342
|
+
const marks = changes.map((file) => ` ${file.change[0].toUpperCase()} ${file.path}`);
|
|
343
|
+
print(
|
|
344
|
+
args.json,
|
|
345
|
+
{ entry: publicEntry(entry), changes, ...diff !== void 0 && { diff } },
|
|
346
|
+
`${line(entry)}
|
|
347
|
+
${diff ?? marks.join("\n")}`
|
|
348
|
+
);
|
|
349
|
+
})
|
|
350
|
+
),
|
|
351
|
+
undo: () => sub(
|
|
352
|
+
"undo",
|
|
353
|
+
"Undo an entry (default: your newest one still in effect)",
|
|
354
|
+
{
|
|
355
|
+
ref: { type: "positional", required: false },
|
|
356
|
+
who: { type: "string", description: "Your name" },
|
|
357
|
+
"just-this": { type: "boolean", default: false },
|
|
358
|
+
"back-to-before": { type: "boolean", default: false }
|
|
359
|
+
},
|
|
360
|
+
runUndo
|
|
361
|
+
),
|
|
362
|
+
restore: () => sub(
|
|
363
|
+
"restore",
|
|
364
|
+
"Make the files what they were right after an entry, a time, or 'start'",
|
|
365
|
+
{ ref: { type: "positional", required: true }, who: { type: "string" } },
|
|
366
|
+
(args) => withOwner2("restore", args.dir, async (owner) => {
|
|
367
|
+
const entry = await owner.restore(
|
|
368
|
+
pointOf(await owner.list(), args.ref),
|
|
369
|
+
whoOf(args.who)
|
|
370
|
+
);
|
|
371
|
+
print(
|
|
372
|
+
args.json,
|
|
373
|
+
{ entry: entry && publicEntry(entry) },
|
|
374
|
+
entry ? `Restored: ${line(entry)}` : "Already there."
|
|
375
|
+
);
|
|
376
|
+
})
|
|
377
|
+
),
|
|
378
|
+
peek: () => sub(
|
|
379
|
+
"peek",
|
|
380
|
+
"The files at an entry, a time, or 'start' (read-only); with a path, that file",
|
|
381
|
+
{
|
|
382
|
+
ref: { type: "positional", required: true },
|
|
383
|
+
path: { type: "positional", required: false }
|
|
384
|
+
},
|
|
385
|
+
(args) => withReader2("peek", args.dir, async (reader) => {
|
|
386
|
+
const files = await reader.peek(pointOf(await reader.list(), args.ref));
|
|
387
|
+
if (!files) throw new Refusal("That point is no longer kept");
|
|
388
|
+
if (!args.path) return print(args.json, { files }, Object.keys(files).join("\n"));
|
|
389
|
+
const hash = files[args.path];
|
|
390
|
+
if (!hash) throw new Refusal(`${args.path} did not exist then`);
|
|
391
|
+
process.stdout.write(await reader.blob(hash));
|
|
392
|
+
})
|
|
393
|
+
),
|
|
394
|
+
pin: () => sub(
|
|
395
|
+
"pin",
|
|
396
|
+
"Keep an entry (and what it needs) when old history is trimmed",
|
|
397
|
+
{ ref: { type: "positional", required: true }, off: { type: "boolean", default: false } },
|
|
398
|
+
(args) => withOwner2("pin", args.dir, async (owner) => {
|
|
399
|
+
const entry = entryOf(await owner.list(), args.ref);
|
|
400
|
+
await owner.pin(entry.id, !args.off);
|
|
401
|
+
print(
|
|
402
|
+
args.json,
|
|
403
|
+
{ id: entry.id, pinned: !args.off },
|
|
404
|
+
`${args.off ? "Unpinned" : "Pinned"} ${short(entry.id)}`
|
|
405
|
+
);
|
|
406
|
+
})
|
|
407
|
+
),
|
|
408
|
+
begin: () => sub(
|
|
409
|
+
"begin",
|
|
410
|
+
"Start a turn: your writes until `end` become one entry under your name",
|
|
411
|
+
{
|
|
412
|
+
who: { type: "string", required: true },
|
|
413
|
+
label: { type: "string", required: true },
|
|
414
|
+
exclusive: {
|
|
415
|
+
type: "boolean",
|
|
416
|
+
default: false,
|
|
417
|
+
description: "Refuse while another agent's turn is open, instead of ending it"
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
(args) => withOwner2("begin", args.dir, async (owner, turn, projectDir) => {
|
|
421
|
+
const who = whoOf(args.who);
|
|
422
|
+
await releaseOpenTurn(owner, turn, who, args.exclusive, projectDir);
|
|
423
|
+
const { id, startedAt } = await owner.begin(
|
|
424
|
+
who,
|
|
425
|
+
args.label,
|
|
426
|
+
args.exclusive && owner.via === "preview"
|
|
427
|
+
);
|
|
428
|
+
writeTurn(projectDir, {
|
|
429
|
+
via: owner.via,
|
|
430
|
+
id,
|
|
431
|
+
who,
|
|
432
|
+
label: args.label,
|
|
433
|
+
startedAt,
|
|
434
|
+
lastWriteAt: startedAt,
|
|
435
|
+
parts: []
|
|
436
|
+
});
|
|
437
|
+
print(args.json, { entryId: id }, short(id));
|
|
438
|
+
})
|
|
439
|
+
),
|
|
440
|
+
end: () => sub(
|
|
441
|
+
"end",
|
|
442
|
+
"End your turn and print its entry",
|
|
443
|
+
{
|
|
444
|
+
who: { type: "string", description: "Refuse unless the open turn is this agent's" },
|
|
445
|
+
"if-open": {
|
|
446
|
+
type: "boolean",
|
|
447
|
+
default: false,
|
|
448
|
+
description: "Succeed with no entry when no turn is open"
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
(args) => withOwner2("end", args.dir, async (owner, turn, projectDir) => {
|
|
452
|
+
if (!turn && args.ifOpen)
|
|
453
|
+
return print(args.json, { entry: null, parts: [] }, "No turn is open.");
|
|
454
|
+
if (!turn) throw new Refusal("No turn is open; start one with history begin");
|
|
455
|
+
if (args.who !== void 0 && turn.who.name !== args.who)
|
|
456
|
+
throw new Refusal(`The open turn is ${turn.who.name}'s, not ${args.who}'s`);
|
|
457
|
+
const { entry, parts } = await endTurn(owner, turn, projectDir);
|
|
458
|
+
print(
|
|
459
|
+
args.json,
|
|
460
|
+
{ entry: entry && publicEntry(entry), parts },
|
|
461
|
+
endedTurnText(entry, parts)
|
|
462
|
+
);
|
|
463
|
+
})
|
|
464
|
+
)
|
|
465
|
+
},
|
|
466
|
+
run: ({ args }) => guarded(listEntries)(args)
|
|
467
|
+
});
|
|
468
|
+
export {
|
|
469
|
+
history_default as default,
|
|
470
|
+
examples
|
|
471
|
+
};
|