import { lstat, readdir } from 'node:fs/promises'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { phase1Skills } from '../shared/workflow.ts'; const root = fileURLToPath(new URL('../', import.meta.url)); // New documentation and developer scripts require an explicit distribution decision. const motionDesignRemixFiles = [ 'library/skills/motion-design-remix/LICENSE', 'library/skills/motion-design-remix/NOTICE.md', 'library/skills/motion-design-remix/SKILL.md', 'library/skills/motion-design-remix/assets/canopy-part-title/assets/leaf-surface-color.webp', 'library/skills/motion-design-remix/assets/canopy-part-title/assets/leaf-surface-normal.webp', 'library/skills/motion-design-remix/assets/canopy-part-title/index.html', 'library/skills/motion-design-remix/assets/code-3d-extrude/index.html', 'library/skills/motion-design-remix/assets/code-particle-assemble/index.html', 'library/skills/motion-design-remix/assets/liquid-glass-widgets/assets/hyperframes-logo-dark.svg', 'library/skills/motion-design-remix/assets/liquid-glass-widgets/index.html', 'library/skills/motion-design-remix/assets/liquid-glass-widgets/lib/liquid-glass.iife.js', 'library/skills/motion-design-remix/assets/ui-3d-reveal/index.html', 'library/skills/motion-design-remix/assets/wireframe-portal-title/assets/fonts/Geist-Bold.ttf', 'library/skills/motion-design-remix/assets/wireframe-portal-title/assets/fonts/Geist-OFL.txt', 'library/skills/motion-design-remix/assets/wireframe-portal-title/assets/fonts/Geist-Regular.ttf', 'library/skills/motion-design-remix/assets/wireframe-portal-title/assets/fonts/Geist-SemiBold.ttf', 'library/skills/motion-design-remix/assets/wireframe-portal-title/index.html', 'library/skills/motion-design-remix/cases.json', 'library/skills/motion-design-remix/evidence.json', 'library/skills/motion-design-remix/presets/canopy-part-title.json', 'library/skills/motion-design-remix/presets/code-3d-extrude.json', 'library/skills/motion-design-remix/presets/code-particle-assemble.json', 'library/skills/motion-design-remix/presets/liquid-glass-widgets.json', 'library/skills/motion-design-remix/presets/ui-3d-reveal.json', 'library/skills/motion-design-remix/presets/wireframe-portal-title.json', 'library/skills/motion-design-remix/previews/canopy-part-title.gif', 'library/skills/motion-design-remix/previews/canopy-part-title.jpg', 'library/skills/motion-design-remix/previews/canopy-part-title.mp4', 'library/skills/motion-design-remix/previews/code-3d-extrude.gif', 'library/skills/motion-design-remix/previews/code-3d-extrude.jpg', 'library/skills/motion-design-remix/previews/code-3d-extrude.mp4', 'library/skills/motion-design-remix/previews/code-particle-assemble.gif', 'library/skills/motion-design-remix/previews/code-particle-assemble.jpg', 'library/skills/motion-design-remix/previews/code-particle-assemble.mp4', 'library/skills/motion-design-remix/previews/encoding.json', 'library/skills/motion-design-remix/previews/liquid-glass-widgets.gif', 'library/skills/motion-design-remix/previews/liquid-glass-widgets.jpg', 'library/skills/motion-design-remix/previews/liquid-glass-widgets.mp4', 'library/skills/motion-design-remix/previews/ui-3d-reveal.gif', 'library/skills/motion-design-remix/previews/ui-3d-reveal.jpg', 'library/skills/motion-design-remix/previews/ui-3d-reveal.mp4', 'library/skills/motion-design-remix/previews/wireframe-portal-title.gif', 'library/skills/motion-design-remix/previews/wireframe-portal-title.jpg', 'library/skills/motion-design-remix/previews/wireframe-portal-title.mp4', 'library/skills/motion-design-remix/references/canopy-part-title/MOTION_DESIGN.md', 'library/skills/motion-design-remix/references/code-3d-extrude/MOTION_DESIGN.md', 'library/skills/motion-design-remix/references/code-particle-assemble/MOTION_DESIGN.md', 'library/skills/motion-design-remix/references/liquid-glass-widgets/MOTION_DESIGN.md', 'library/skills/motion-design-remix/references/ui-3d-reveal/MOTION_DESIGN.md', 'library/skills/motion-design-remix/references/wireframe-portal-title/MOTION_DESIGN.md', 'library/skills/motion-design-remix/scripts/encode-previews.mjs', 'library/skills/motion-design-remix/scripts/materialize.mjs', 'library/skills/motion-design-remix/scripts/render-previews.mjs', 'library/skills/motion-design-remix/sources.json', ]; const presenterStoryFiles = [ 'docs/readme/people/aiwithsachi.gif', 'docs/readme/people/aiwithsachi.jpg', 'docs/readme/people/ali-abdaal-workflow-comparison.gif', 'docs/readme/people/ali-abdaal-workflow-comparison.jpg', 'docs/readme/people/ali-abdaal-workflow.gif', 'docs/readme/people/ali-abdaal-workflow.jpg', 'docs/readme/people/careerwithriya-comparison.gif', 'docs/readme/people/careerwithriya-comparison.jpg', 'docs/readme/people/careerwithriya.gif', 'docs/readme/people/careerwithriya.jpg', 'docs/readme/people/dan-martell-tools.gif', 'docs/readme/people/dan-martell-tools.jpg', 'docs/readme/people/harpercarrollai.gif', 'docs/readme/people/harpercarrollai.jpg', 'docs/readme/people/john-tagudin-capso-comparison.gif', 'docs/readme/people/john-tagudin-capso-comparison.jpg', 'docs/readme/people/john-tagudin-capso.gif', 'docs/readme/people/john-tagudin-capso.jpg', 'docs/readme/people/kevinstratvert.gif', 'docs/readme/people/kevinstratvert.jpg', 'docs/readme/people/khris-sheer-founder.gif', 'docs/readme/people/khris-sheer-founder.jpg', 'docs/readme/people/manifest.json', 'docs/readme/people/motiongit-kinetic.gif', 'docs/readme/people/motiongit-kinetic.jpg', 'docs/readme/people/ugc-rachelll.gif', 'docs/readme/people/ugc-rachelll.jpg', 'library/skills/presenter-story/SKILL.md', 'library/skills/presenter-story/references/presenter-listicle/MOTION_DESIGN.md', 'library/skills/presenter-story/references/product-walkthrough/MOTION_DESIGN.md', 'library/skills/presenter-story/references/workflow-demo/MOTION_DESIGN.md', ]; const presenterTechFiles = [ 'library/templates/presenter-tech/LICENSE', 'library/templates/presenter-tech/MOTION_DESIGN.md', 'library/templates/presenter-tech/NOTICE.md', 'library/templates/presenter-tech/README.md', 'library/templates/presenter-tech/TEMPLATE.md', 'library/templates/presenter-tech/THIRD-PARTY-NOTICES.md', 'library/templates/presenter-tech/presenter-tech.motion', 'library/templates/presenter-tech/source.json', 'library/templates/presenter-tech/verification.json', ]; const localReadmeResourceFiles = [ 'examples/brand-studies/anthropic/comparison.mobile.mp4', 'examples/brand-studies/deepseek/comparison.mobile.mp4', 'examples/brand-studies/kimi/comparison.mobile.mp4', 'examples/brand-studies/stripe/coast.jpg', 'examples/brand-studies/stripe/comparison.mobile.mp4', 'examples/motion-studies/comparison.mobile.mp4', 'examples/motion-studies/signoff.html', 'examples/motion-studies/signoff.mp4', 'docs/readme/openmotion-logo.svg', 'docs/readme/community-star.svg', 'docs/readme/community-star.zh-CN.svg', 'docs/readme/community-star.ja.svg', 'docs/readme/brand-hero.ja.jpg', 'docs/readme/brand-hero.mobile.ja.jpg', 'docs/readme/badges/built-by-opendesign.ja.svg', 'docs/readme/badges/built-by-opendesign.svg', 'docs/readme/badges/built-by-opendesign.zh-CN.svg', 'docs/readme/badges/discord.svg', 'docs/readme/badges/license.ja.svg', 'docs/readme/badges/license.svg', 'docs/readme/badges/license.zh-CN.svg', 'docs/readme/badges/node.svg', 'docs/readme/badges/opendesign-go.svg', 'docs/readme/badges/stars.ja.svg', 'docs/readme/badges/stars.svg', 'docs/readme/badges/stars.zh-CN.svg', 'docs/readme/badges/website.ja.svg', 'docs/readme/badges/website.svg', 'docs/readme/badges/website.zh-CN.svg', 'docs/readme/badges/x-opendesigndevs.svg', 'docs/readme/badges/x-opendesignhq.svg', 'docs/readme/badges/youtube.svg', 'docs/readme/diagrams/creation-stack.ja.svg', 'docs/readme/diagrams/creation-stack.zh-CN.svg', 'docs/readme/diagrams/creative-context.ja.svg', 'docs/readme/diagrams/creative-context.zh-CN.svg', 'docs/readme/diagrams/runtime-architecture.ja.svg', 'docs/readme/diagrams/runtime-architecture.zh-CN.svg', 'docs/readme/diagrams/translations.json', 'docs/readme/brand-hero.jpg', 'docs/readme/brand-hero.mobile.jpg', 'docs/readme/brand-hero.mobile.zh-CN.jpg', 'docs/readme/brand-hero.zh-CN.jpg', 'examples/brand-studies/anthropic/comparison.jpg', 'examples/brand-studies/anthropic/comparison.mobile.webp', 'examples/brand-studies/anthropic/comparison.mp4', 'examples/brand-studies/anthropic/comparison.webp', 'examples/brand-studies/anthropic/film.mp4', 'examples/brand-studies/anthropic/index.html', 'examples/brand-studies/deepseek/comparison.jpg', 'examples/brand-studies/deepseek/comparison.mobile.webp', 'examples/brand-studies/deepseek/comparison.mp4', 'examples/brand-studies/deepseek/comparison.webp', 'examples/brand-studies/deepseek/film.mp4', 'examples/brand-studies/deepseek/index.html', 'examples/brand-studies/kimi/comparison.jpg', 'examples/brand-studies/kimi/comparison.mobile.webp', 'examples/brand-studies/kimi/comparison.mp4', 'examples/brand-studies/kimi/comparison.webp', 'examples/brand-studies/kimi/film.mp4', 'examples/brand-studies/kimi/index.html', 'examples/brand-studies/stripe/MOTION.md', 'examples/brand-studies/stripe/comparison.jpg', 'examples/brand-studies/stripe/comparison.mobile.webp', 'examples/brand-studies/stripe/comparison.mp4', 'examples/brand-studies/stripe/comparison.webp', 'examples/brand-studies/stripe/film.mp4', 'examples/brand-studies/stripe/index.html', 'examples/motion-studies/assets/mark.svg', 'examples/motion-studies/assets/score.m4a', 'examples/motion-studies/comparison.jpg', 'examples/motion-studies/comparison.mobile.webp', 'examples/motion-studies/comparison.mp4', 'examples/motion-studies/comparison.webp', 'examples/motion-studies/film.mp4', 'examples/motion-studies/index.html', 'docs/readme/agents/claude-code-badge.svg', 'docs/readme/agents/codex-badge.svg', 'docs/readme/agents/deepseek-harness-badge.svg', 'docs/readme/agents/workbuddy-badge.svg', 'docs/readme/agents/opencode-badge.svg', 'docs/readme/agents/hermes-badge.svg', 'docs/readme/agents/antigravity-badge.svg', 'docs/readme/agents/gemini-badge.svg', 'docs/readme/agents/grok-build-badge.svg', 'docs/readme/agents/kimi-badge.svg', 'docs/readme/agents/cursor-badge.svg', 'docs/readme/agents/qwen-badge.svg', 'docs/readme/agents/qoder-badge.svg', 'docs/readme/agents/copilot-badge.svg', 'docs/readme/agents/pi-badge.svg', 'docs/readme/agents/kiro-badge.svg', 'docs/readme/agents/kilo-badge.svg', 'docs/readme/agents/vibe-badge.svg', 'docs/readme/agents/deepseek-badge.svg', 'docs/readme/agents/reasonix-badge.svg', 'docs/readme/agents/aider-badge.svg', 'docs/readme/agents/devin-badge.svg', 'docs/readme/agents/trae-badge.svg', 'docs/readme/agents/local-agents.png', 'docs/readme/agents/local-agents.mobile.png', 'docs/readme/models/LICENSE.txt', 'docs/readme/models/README.md', 'docs/readme/models/codex.svg', 'docs/readme/models/elevenlabs.svg', 'docs/readme/models/flux.svg', 'docs/readme/models/kokoro.svg', 'docs/readme/models/nano-banana.svg', 'docs/readme/models/seedance.svg', 'docs/readme/models/suno.svg', 'docs/readme/models/veo.svg', 'docs/readme/models/wan.svg', 'docs/readme/studio-tour.mp4', 'docs/readme/studio-tour.zh-CN.mp4', 'examples/reference-reveal/MOTION.md', 'examples/reference-reveal/MOTION.zh-CN.md', 'examples/reference-reveal/assets/cues.wav', 'examples/reference-reveal/assets/mark.svg', 'examples/reference-reveal/comparison.jpg', 'examples/reference-reveal/comparison.mp4', 'examples/reference-reveal/comparison.webp', 'examples/reference-reveal/film.mp4', 'examples/reference-reveal/graph-cut.mp4', 'examples/reference-reveal/index.html', 'examples/wing-construction/README.md', 'examples/wing-construction/assets/score.m4a', 'examples/wing-construction/comparison.jpg', 'examples/wing-construction/comparison.mp4', 'examples/wing-construction/comparison.webp', 'examples/wing-construction/film.mp4', 'examples/wing-construction/index.html', 'docs/readme/resource-verification.json', 'library/skills/motion-design-remix/vendor/clipper-lib-6.4.2/ChangeLog.txt', 'docs/readme/RESOURCES.md', 'scripts/check-readme-resources.mjs', 'docs/readme/contributors/C1-BA-B1-F3.png', 'docs/readme/contributors/FaintFlower.png', 'docs/readme/contributors/GHX5T-SOL.png', 'docs/readme/contributors/Link-990.png', 'docs/readme/contributors/PerishCode.png', 'docs/readme/contributors/TuYv.png', 'docs/readme/contributors/ZhongXiandou.png', 'docs/readme/contributors/aaronjmars.png', 'docs/readme/contributors/chasel34.png', 'docs/readme/contributors/chenmofei.png', 'docs/readme/contributors/cszhouwei.png', 'docs/readme/contributors/fix2015.png', 'docs/readme/contributors/fredkwok-it.png', 'docs/readme/contributors/jhinzzz.png', 'docs/readme/contributors/joeylee12629-star.png', 'docs/readme/contributors/kokiainet.png', 'docs/readme/contributors/lxyAK.png', 'docs/readme/contributors/manifest.json', 'docs/readme/contributors/mrcfps.png', 'docs/readme/contributors/octo-patch.png', 'docs/readme/contributors/pftom.png', 'docs/readme/contributors/tackcrypto1031.png', 'docs/readme/contributors/ttoyekk1a.png', 'docs/readme/contributors/wuwangzhang1216.png', 'docs/readme/media/M1128-clip.mp4', 'docs/readme/media/M1139-clip.mp4', 'docs/readme/media/M945-clip.mp4', 'docs/readme/media/aiwithsachi-reference.mp4', 'docs/readme/media/app-showcase.mp4', 'docs/readme/media/aurora.mp4', 'docs/readme/media/dan-martell-tools-reference.mp4', 'docs/readme/media/glass-shard-title.mp4', 'docs/readme/media/harpercarrollai-reference.mp4', 'docs/readme/media/hundred-days-story-reference.mp4', 'docs/readme/media/jake-figma-draw-reference.mp4', 'docs/readme/media/jake-lovable-reference.mp4', 'docs/readme/media/jake-pond-reference.mp4', 'docs/readme/media/kevinstratvert-reference.mp4', 'docs/readme/media/khris-sheer-founder-reference.mp4', 'docs/readme/media/manifest.json', 'docs/readme/media/nyc-paris-flight.mp4', 'docs/readme/media/presenter-caption-remake.mp4', 'docs/readme/media/remix-authorize-once-reference.mp4', 'docs/readme/media/remix-cyera-reference.mp4', 'docs/readme/media/remix-elevenlabs-reception-reference.mp4', 'docs/readme/media/remix-firecrawl-reference.mp4', 'docs/readme/media/remix-glyph-reference.mp4', 'docs/readme/media/remix-iskra-light-reference.mp4', 'docs/readme/media/remix-kimi-k3-reference.mp4', 'docs/readme/media/remix-linear-loops-reference.mp4', 'docs/readme/media/ugc-rachelll-reference.mp4', 'library/components/showcase/LICENSE', 'library/components/showcase/NOTICE.md', 'library/components/showcase/README.md', 'library/components/showcase/app-showcase/index.html', 'library/components/showcase/app-showcase/vendor/fonts/dm-sans-2a8e7f713ee7.ttf', 'library/components/showcase/app-showcase/vendor/fonts/dm-sans-376427b53221.ttf', 'library/components/showcase/app-showcase/vendor/fonts/dm-sans-OFL.txt', 'library/components/showcase/app-showcase/vendor/fonts/dm-sans-b0ae3e89a7d3.ttf', 'library/components/showcase/app-showcase/vendor/fonts/dm-sans.css', 'library/components/showcase/app-showcase/vendor/gsap-3.14.2/LICENSE.txt', 'library/components/showcase/app-showcase/vendor/gsap-3.14.2/README.md', 'library/components/showcase/app-showcase/vendor/gsap-3.14.2/dist/gsap.min.js', 'library/components/showcase/app-showcase/vendor/manifest.json', 'library/components/showcase/aurora/index.html', 'library/components/showcase/aurora/lib/shaders.THIRD-PARTY-LICENSES.txt', 'library/components/showcase/aurora/lib/shaders.iife.js', 'library/components/showcase/aurora/vendor/gsap-3.14.2/LICENSE.txt', 'library/components/showcase/aurora/vendor/gsap-3.14.2/README.md', 'library/components/showcase/aurora/vendor/gsap-3.14.2/dist/gsap.min.js', 'library/components/showcase/aurora/vendor/manifest.json', 'library/components/showcase/glass-shard-title/assets/Three-LICENSE.txt', 'library/components/showcase/glass-shard-title/assets/ferndale_studio_01_1k.hdr', 'library/components/showcase/glass-shard-title/assets/fonts/CormorantGaramond-OFL.txt', 'library/components/showcase/glass-shard-title/assets/fonts/Geist-Bold.ttf', 'library/components/showcase/glass-shard-title/assets/fonts/Geist-OFL.txt', 'library/components/showcase/glass-shard-title/assets/fonts/Geist-Regular.ttf', 'library/components/showcase/glass-shard-title/assets/fonts/Geist-SemiBold.ttf', 'library/components/showcase/glass-shard-title/assets/fonts/cormorant-garamond.woff2', 'library/components/showcase/glass-shard-title/assets/glass-main.js', 'library/components/showcase/glass-shard-title/assets/matcap-1.svg', 'library/components/showcase/glass-shard-title/index.html', 'library/components/showcase/glass-shard-title/vendor/d3-delaunay-6.0.4/LICENSE', 'library/components/showcase/glass-shard-title/vendor/d3-delaunay-6.0.4/dist/d3-delaunay.min.js', 'library/components/showcase/glass-shard-title/vendor/gsap-3.14.2/LICENSE.txt', 'library/components/showcase/glass-shard-title/vendor/gsap-3.14.2/README.md', 'library/components/showcase/glass-shard-title/vendor/gsap-3.14.2/dist/gsap.min.js', 'library/components/showcase/glass-shard-title/vendor/manifest.json', 'library/components/showcase/manifest.json', 'library/components/showcase/nyc-paris-flight/assets/map-nyc-paris.png', 'library/components/showcase/nyc-paris-flight/assets/sfx-mix.wav', 'library/components/showcase/nyc-paris-flight/index.html', 'library/components/showcase/nyc-paris-flight/vendor/gsap-3.14.2/LICENSE.txt', 'library/components/showcase/nyc-paris-flight/vendor/gsap-3.14.2/README.md', 'library/components/showcase/nyc-paris-flight/vendor/gsap-3.14.2/dist/gsap.min.js', 'library/components/showcase/nyc-paris-flight/vendor/manifest.json', 'library/skills/motion-design-remix/assets/canopy-part-title/poster.jpg', 'library/skills/motion-design-remix/assets/canopy-part-title/reference.mp4', 'library/skills/motion-design-remix/assets/code-3d-extrude/poster.jpg', 'library/skills/motion-design-remix/assets/code-3d-extrude/reference.mp4', 'library/skills/motion-design-remix/assets/code-particle-assemble/poster.jpg', 'library/skills/motion-design-remix/assets/code-particle-assemble/reference.mp4', 'library/skills/motion-design-remix/assets/liquid-glass-widgets/poster.jpg', 'library/skills/motion-design-remix/assets/liquid-glass-widgets/reference.mp4', 'library/skills/motion-design-remix/assets/ui-3d-reveal/poster.jpg', 'library/skills/motion-design-remix/assets/ui-3d-reveal/reference.mp4', 'library/skills/motion-design-remix/assets/wireframe-portal-title/poster.jpg', 'library/skills/motion-design-remix/assets/wireframe-portal-title/reference.mp4', 'library/skills/motion-design-remix/scripts/localize.mjs', 'library/skills/motion-design-remix/vendor/NOTICE.md', 'library/skills/motion-design-remix/vendor/clipper-lib-6.4.2/README.md', 'library/skills/motion-design-remix/vendor/clipper-lib-6.4.2/clipper.js', 'library/skills/motion-design-remix/vendor/d3-delaunay-6.0.4/LICENSE', 'library/skills/motion-design-remix/vendor/d3-delaunay-6.0.4/dist/d3-delaunay.min.js', 'library/skills/motion-design-remix/vendor/fonts/dm-sans-2a8e7f713ee7.ttf', 'library/skills/motion-design-remix/vendor/fonts/dm-sans-376427b53221.ttf', 'library/skills/motion-design-remix/vendor/fonts/dm-sans-OFL.txt', 'library/skills/motion-design-remix/vendor/fonts/dm-sans-b0ae3e89a7d3.ttf', 'library/skills/motion-design-remix/vendor/fonts/dm-sans.css', 'library/skills/motion-design-remix/vendor/fonts/gelasio-595c99c35631.ttf', 'library/skills/motion-design-remix/vendor/fonts/gelasio-OFL.txt', 'library/skills/motion-design-remix/vendor/fonts/gelasio-a6821780eb45.ttf', 'library/skills/motion-design-remix/vendor/fonts/gelasio.css', 'library/skills/motion-design-remix/vendor/fonts/inter-1b08e7fc267a.ttf', 'library/skills/motion-design-remix/vendor/fonts/inter-5b717029a2c4.ttf', 'library/skills/motion-design-remix/vendor/fonts/inter-8c883f63b2c4.ttf', 'library/skills/motion-design-remix/vendor/fonts/inter-OFL.txt', 'library/skills/motion-design-remix/vendor/fonts/inter-b37284b5701b.ttf', 'library/skills/motion-design-remix/vendor/fonts/inter-d0f4bc7faca4.ttf', 'library/skills/motion-design-remix/vendor/fonts/inter-e7a1aaf7eda9.ttf', 'library/skills/motion-design-remix/vendor/fonts/inter-eec66af7f233.ttf', 'library/skills/motion-design-remix/vendor/fonts/inter.css', 'library/skills/motion-design-remix/vendor/fonts/libre-baskerville-8b008ffdae31.ttf', 'library/skills/motion-design-remix/vendor/fonts/libre-baskerville-OFL.txt', 'library/skills/motion-design-remix/vendor/fonts/libre-baskerville-f5bc4341f15d.ttf', 'library/skills/motion-design-remix/vendor/fonts/libre-baskerville.css', 'library/skills/motion-design-remix/vendor/fonts/libre-franklin-04f71a680a40.ttf', 'library/skills/motion-design-remix/vendor/fonts/libre-franklin-OFL.txt', 'library/skills/motion-design-remix/vendor/fonts/libre-franklin-b03fb188d888.ttf', 'library/skills/motion-design-remix/vendor/fonts/libre-franklin-fa16f76d2aff.ttf', 'library/skills/motion-design-remix/vendor/fonts/libre-franklin.css', 'library/skills/motion-design-remix/vendor/fonts/libre.css', 'library/skills/motion-design-remix/vendor/gsap-3.14.2/LICENSE.txt', 'library/skills/motion-design-remix/vendor/gsap-3.14.2/README.md', 'library/skills/motion-design-remix/vendor/gsap-3.14.2/dist/gsap.min.js', 'library/skills/motion-design-remix/vendor/manifest.json', 'library/skills/motion-design-remix/vendor/three-0.128.0/LICENSE', 'library/skills/motion-design-remix/vendor/three-0.128.0/build/three.min.js', 'library/skills/motion-design-remix/vendor/three-0.147.0/LICENSE', 'library/skills/motion-design-remix/vendor/three-0.147.0/build/three.min.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/LICENSE', 'library/skills/motion-design-remix/vendor/three-0.170.0/build/three.module.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/postprocessing/BokehPass.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/postprocessing/EffectComposer.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/postprocessing/MaskPass.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/postprocessing/Pass.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/postprocessing/RenderPass.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/postprocessing/ShaderPass.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/shaders/BokehShader.js', 'library/skills/motion-design-remix/vendor/three-0.170.0/examples/jsm/shaders/CopyShader.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/LICENSE', 'library/skills/motion-design-remix/vendor/three-0.181.2/build/three.core.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/build/three.module.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/libs/opentype.module.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/lines/LineMaterial.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/lines/LineSegments2.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/lines/LineSegmentsGeometry.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/loaders/FontLoader.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/loaders/TTFLoader.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/postprocessing/EffectComposer.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/postprocessing/MaskPass.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/postprocessing/OutputPass.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/postprocessing/Pass.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/postprocessing/RenderPass.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/postprocessing/ShaderPass.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/shaders/CopyShader.js', 'library/skills/motion-design-remix/vendor/three-0.181.2/examples/jsm/shaders/OutputShader.js', 'library/skills/presenter-story/assets/ali-abdaal-workflow-reference.mp4', 'library/skills/presenter-story/assets/ali-abdaal-workflow-result.mp4', 'library/skills/presenter-story/assets/careerwithriya-reference.mp4', 'library/skills/presenter-story/assets/careerwithriya-result.mp4', 'library/skills/presenter-story/assets/john-tagudin-capso-reference.mp4', 'library/skills/presenter-story/assets/john-tagudin-capso-result.mp4', 'library/templates/presenter-tech/preview.mp4', ]; export const distributionDocuments = [ ...localReadmeResourceFiles, 'README.md', 'README.zh-CN.md', 'CONTRIBUTING.md', 'CONTRIBUTING.zh-CN.md', 'AGENTS.md', 'CLAUDE.md', 'docs/README.md', 'docs/product/architecture.md', 'docs/product/changes.md', 'docs/product/media-generation-design.md', 'docs/product/studio-vision.md', 'tracking/README.md', 'tracking/INTEGRATION.md', 'tracking/posthog-geoip.hog', 'docs/agent-adapters.md', 'docs/browser-runtime.md', 'docs/design-system.md', 'docs/editor-fork.md', 'docs/hyperframes.md', 'docs/mcp-phase1-tools.md', 'docs/model-gateway.md', 'docs/motion-director.md', 'docs/motion-extension-scope.md', 'docs/npm-installation.md', 'docs/install.md', 'docs/release-guide.md', 'docs/release-workflows.md', 'docs/templates/release-record.md', 'docs/project-workspace.md', 'docs/repository-migration.md', 'docs/session-architecture.md', 'docs/shared-editor.md', 'docs/README.zh-CN.md', 'docs/README.ja.md', 'docs/usage.md', 'docs/motion-md.md', 'docs/motion-md.zh-CN.md', 'docs/collections/README.md', 'docs/collections/README.zh-CN.md', 'docs/examples/product-launch.MOTION.md', 'docs/examples/product-launch.MOTION.zh-CN.md', 'docs/readme/ASSETS.md', 'docs/readme/opendesign-symbol.svg', 'docs/readme/reverse-engineering-cover.md', 'docs/readme/cover-reverse-engineering.png', 'docs/readme/cover-reverse-engineering-v2.png', 'docs/readme/collaboration-concept-v2.png', 'docs/readme/diagrams/creation-stack.svg', 'docs/readme/diagrams/creative-context.svg', 'docs/readme/diagrams/runtime-architecture.svg', 'docs/readme/diagrams/generate.py', 'docs/readme/diagrams/cover-paper.jpg', 'docs/readme/brand-showcase/README.md', 'docs/readme/brand-showcase/manifest.json', 'docs/readme/brand-showcase/codex-originals.webp', 'docs/readme/brand-showcase/rea-unboxing.mp4', 'docs/readme/brand-showcase/rea-unboxing.gif', 'docs/readme/brand-showcase/rea-unboxing.jpg', 'docs/readme/brand-showcase/rea-dual-role.mp4', 'docs/readme/brand-showcase/rea-dual-role.gif', 'docs/readme/brand-showcase/rea-dual-role.jpg', 'docs/readme/editor.jpg', 'docs/readme/workspace.jpg', 'docs/product-tour.md', 'docs/readme/product-tour/codex-embedded.png', 'docs/readme/product-tour/standalone-studio.png', 'docs/readme/product-tour/claude-code-skills.png', 'docs/readme/product-tour/cli-checks.png', 'docs/readme/product-tour/connect-agent.png', 'docs/readme/product-tour/template-to-agent.png', 'docs/media-kit.md', 'docs/readme/cover.png', 'docs/readme/cover-motion.gif', 'docs/readme/social-preview.jpg', 'docs/readme/library.png', 'docs/readme/community.png', 'docs/readme/collaboration-coming.png', 'docs/readme/stay-tuned.png', 'docs/readme/stay-tuned-starred.png', 'docs/readme/stay-tuned.gif', 'docs/examples.md', 'docs/examples.zh-CN.md', 'docs/readme/examples/manifest.json', 'docs/readme/examples/talking-head.gif', 'docs/readme/examples/talking-head.jpg', 'docs/readme/examples/story-recut.gif', 'docs/readme/examples/story-recut.jpg', 'docs/readme/examples/product-launch.gif', 'docs/readme/examples/product-launch.jpg', 'docs/readme/examples/viral-remix.gif', 'docs/readme/examples/viral-remix.jpg', 'docs/readme/examples/explainer.gif', 'docs/readme/examples/explainer.jpg', 'docs/readme/examples/data-story.gif', 'docs/readme/examples/data-story.jpg', 'docs/readme/examples/music-visual.gif', 'docs/readme/examples/music-visual.jpg', 'docs/readme/gallery/manifest.json', 'docs/readme/gallery/app-showcase.gif', 'docs/readme/gallery/firecrawl.gif', 'docs/readme/gallery/ui-3d-reveal.gif', 'docs/readme/gallery/pond.gif', 'docs/readme/gallery/kimi-k3.gif', 'docs/readme/gallery/elevenlabs-reception.gif', 'docs/readme/gallery/glass-shard-title.gif', 'docs/readme/gallery/canopy-title.gif', 'docs/readme/gallery/wireframe-title.gif', 'docs/readme/gallery/iskra-light.gif', 'docs/readme/gallery/liquid-glass-widgets.gif', 'docs/readme/gallery/cyera.gif', 'docs/readme/gallery/code-3d.gif', 'docs/readme/gallery/glyph.gif', 'docs/readme/gallery/flight-map.gif', 'docs/readme/gallery/aurora.gif', 'docs/readme/gallery/linear-loops.gif', 'docs/readme/gallery/code-particles.gif', 'library/README.md', 'library/README.zh-CN.md', 'library/ENTRY_TEMPLATE.md', 'library/skills/brandkit/SKILL.md', 'library/templates/README.md', 'library/components/README.md', 'library/components/title-reveal/README.md', 'library/design-systems/ink-water/MOTION_DESIGN.md', 'library/brandkits/openmotion/BRANDKIT.md', 'docs/motion-design-examples.md', 'docs/motion-design-examples.zh-CN.md', ...motionDesignRemixFiles, ...presenterStoryFiles, ...presenterTechFiles, 'docs/skills.md', 'docs/template-catalog.md', 'docs/test-packages.md', 'docs/templates/requirement.md', ]; export async function distributionFiles(profile: string): Promise { if (!['phase1', 'legacy'].includes(profile)) throw new Error('Unknown distribution profile: ' + profile); const files = [ ...distributionDocuments, 'LICENSE', '.codex-plugin/plugin.json', '.mcp.json', 'marketplace.example.json', 'package.json', 'package-lock.json', 'server.ts', 'browser.ts', 'workspace.ts', 'mcp.ts', 'mcp-tools.ts', 'editor-runtime.ts', 'phase1.ts', 'phase1-versions.ts', 'preview.ts', 'hyperframes.ts', 'template-library.ts', 'template-catalog.ts', 'prism-templates.ts', 'editor-server.ts', 'scripts/runtime-assets.mjs', 'scripts/npm-runtime.mjs', 'scripts/runtime-lock.json', 'scripts/lint-project.mjs', 'scripts/npm-installer.mjs', 'scripts/npm-hosts.mjs', 'scripts/check-installed-mcp.mjs', 'scripts/install-onboarding.mjs', 'scripts/onboarding-catalog.ts', 'scripts/diagnostics.mjs', 'scripts/diagnostic-redaction.mjs', 'scripts/zip.mjs', 'scripts/verify-export.ts', 'scripts/export-adapters.ts', 'scripts/package.ts', 'scripts/distribution.ts', 'shared/workflow-entry.js', 'studio/LICENSE', 'studio/README.md', 'template-library/LICENSE', 'shared/editor-launch.pl', 'tracking/core.ts', 'tracking/node.ts', 'tracking/browser.ts', 'tracking/events.ts', ]; async function walk(directory: string, extensions: RegExp) { for (const entry of await readdir(path.join(root, directory), { withFileTypes: true })) { if (entry.name.startsWith('.') || ['node_modules', 'tests', '__tests__'].includes(entry.name)) continue; const file = directory + '/' + entry.name; if (entry.isSymbolicLink()) throw new Error('Distribution must not follow symlinks: ' + file); if (entry.isDirectory()) await walk(file, extensions); else if (entry.isFile() && !/\.(?:test|spec)\./.test(entry.name) && extensions.test(entry.name)) files.push(file); } } for (const directory of ['shared', 'gateway']) await walk(directory, /\.(?:ts|mjs|json)$/); await walk('web', /\.(?:ts|js|json|html|css|svg|jpg|png|webp|ttf|woff2?|txt)$/); for (const directory of ['templates', 'template-library']) await walk(directory, /\.(?:html|js|json|css|svg|jpg|png|webp|md|txt|ttf|woff2?)$/); for (const skill of phase1Skills) await walk('skills/' + skill, /\.(?:md|mjs|ts|py|json)$/); await walk('studio/build', /\.(?:html|js|css|json|svg|png|jpg|webp|woff2?|ttf|txt)$/); await walk('studio/public', /\.(?:html|js|css|json|svg|png|jpg|webp|woff2?|ttf|txt)$/); for (const file of files) if (!(await lstat(path.join(root, file))).isFile()) throw new Error('Distribution requires a regular file: ' + file); return [...new Set(files)].sort(); }