diff --git a/DEMO.md b/DEMO.md index 922ba97..f9048d7 100644 --- a/DEMO.md +++ b/DEMO.md @@ -1,15 +1,20 @@ # Demo video: draft script -**Due:** Oct 14, 2026, 11:59 PM PDT. The video must be 5–10 min, in MP4, WebM or MOV, under 2 GiB. Target **8:00** so there's room to spare. Form answers are drafted in [docs/submission.md](docs/submission.md). +**Due:** Oct 14, 2026, 11:59 PM PDT. The video must be 5–10 min, in MP4, WebM or MOV, under 2 GiB. Currently **~5:15**: the rules require 5–10 min. Form answers are drafted in [docs/submission.md](docs/submission.md). ## The one-two punch +**Thesis (the opening line):** what if Cloudflare Artifacts could make Code Mode self-improving? + + 1. **Code Mode (Cloudflare's insight).** Models are better at writing code than at calling tools one at a time. In Code Mode the agent writes one function that chains tool calls, and Cloudflare calls that code "a compact plan" ([Code Mode MCP post](https://blog.cloudflare.com/code-mode-mcp/)). Each snippet runs in a fresh isolate, which is then thrown away ([Dynamic Workers post](https://blog.cloudflare.com/dynamic-workers/)). 2. **Code memory (ours).** If the code is the plan, then the code an agent writes over time is its experience, and today it's thrown away with the isolate. We keep it: - **Phase 1, durable:** every Code Mode execution is saved to the agent's own Cloudflare Artifacts repo. - **Phase 2, learning:** Workers AI embeddings and Vectorize let the next agent start from the closest code other agents already ran. That measurably improves agent outcomes. -**Tagline:** throw away the isolate, keep the code. +**Title:** Self-Improving Code Mode Workers, with Artifacts Memory. The package stays `codemode-git`. + +**Tagline:** keep the code, and your Workers get smarter over time. **Vocabulary:** say "Cloudflare Artifacts" and "code memory", not "git". Artifacts speaks Git, so mention once that any git client can read it, and move on. We are not pitching a reimagined GitHub. @@ -21,18 +26,34 @@ | Concurrency, coordination, context preservation, review, conflict handling | 25% | Context preservation is Phase 1. Concurrency: the swarm, with one writer per Artifacts repo and no conflicts. Coordination: retrieval plus provenance. Review: memory is shown as unverified, and every example links to its source | | Ease of use and product experience | 25% | Three lines in an existing Code Mode agent, `npm install`, the Deploy button | -## Run of show (~8:00) +## Run of show (~5:15) + +The video is code: [demo/video](demo/video). [transcript.md](demo/video/transcript.md) holds every voiceover line, so treat it as the source of truth for the narration. Edit it and run `npm run voiceover`. + +**Style:** a keynote talk, not a slide deck. Each scene is one idea, shown as an animated diagram, often a before and after. On-screen text is a few words at most, the voiceover carries the detail, and animations are timed to the spoken word. Keep the technical depth (outbox, isomorphic-git, embeddings), because the audience is technical. -| Time | Beat | On screen | Voiceover (draft) | +| # | Scene | Diagram | Point | |---|---|---|---| -| 0:00–0:30 | **Cold open** | Cloudflare's lava lamp wall (LavaRand), then split screen. Agent michelle: "How many lava lamps on the wall are flowing right now?", taking [N] executions to work out that the wall is paginated. Agent matthew: "How many red lava lamps are flowing?", taking one execution | "Cloudflare's lobby has a wall of about a hundred lava lamps, and a camera turns the moving wax into randomness for encryption. Here are two Code Mode agents checking on that wall, with two similar questions. The first one figures it out the hard way. The second gets it right the first time, because it can read the code the first one wrote. This is codemode-git: code memory for Code Mode agents, on Cloudflare Artifacts." | -| 0:30–1:30 | **Punch 1: why Code Mode** | Left: the same task as a chain of individual tool calls, each result going back through the model. Right: one function that walks every page of `lamps.wall` and returns a number | "Cloudflare's Code Mode insight: models are much better at writing code than at calling tools one at a time. They've seen millions of real programs. So instead of ten tool calls, the agent writes one function: loop over every page of the wall, filter, count, return. Cloudflare calls that code a compact plan." | -| 1:30–2:00 | **The gap** | The isolate lifecycle: load → run → discard. The code fades out with it | "Each plan runs in a fresh isolate that's thrown away afterward, which is exactly right for the sandbox. But the plan goes too. The next agent with the same kind of question starts from zero." | -| 2:00–3:15 | **Punch 2, Phase 1: code memory on Artifacts** | The three-line diff. michelle's Artifacts repo: `run.js`, `calls.jsonl`, `result.json`, with the `Codemode-*` trailers in the commit message. One shot of `git clone` | "Add one connector. Every execution is saved to that agent's own Cloudflare Artifacts repo: the code it ran, every tool call with its result, and the outcome. Artifacts gives every agent its own repo, at any scale. It speaks Git, so any git client can read it, but nobody has to. Agents read their own history back with two tools." | -| 3:15–3:45 | **Memory at fleet scale** | `scripts/swarm.mjs` summary. Artifacts dashboard metrics | "[1,000] agents at once: [1,000] Durable Objects, each writing to its own Artifacts repo, [N] runs saved per second, zero conflicts. Each agent is the only writer to its repo, so there's nothing to lock and nothing to merge." | -| 3:45–5:00 | **Phase 2: learning from code memory** | Diagram: saved run → Workers AI embedding of question + code → Vectorize. matthew's question → nearest runs → prompt, labeled unverified. matthew's commit with `Codemode-Examples: agent-michelle@`, then michelle's run it points to | "When a run produces an answer, Workers AI embeds the question and the code into Vectorize. matthew's question is similar to michelle's, so matthew starts with michelle's code, labeled unverified. matthew still writes and runs its own code, but already knows the wall is paginated. Its saved run records exactly which memory it used, so every answer traces back to the code that informed it." | -| 5:00–6:50 | **Deep dive: the benchmark** | DABstep: 450 payments-analysis tasks from Adyen. Learning-curve chart. Official accuracy by level. Small table: code runs 13.8 → 9.4, step-limit exhaustion 13% → 7%, Workers AI spend $26.76. Then a two-column slide: distilled skills vs raw runs | "Does it hold up on real investigations? DABstep is 450 data-analysis tasks over Adyen's payments data, the kind of work Code Mode is built for. Same model, same prompt, scored by Adyen's official scorer. Accuracy goes from 32 to 46 percent, and from 23.5 to 38.6 on hard tasks. The curve shows the learning. For the first eight tasks there's no memory, and both arms cost the same. Within about 25 tasks, the memory arm's median cost falls to about a third of baseline and stays there. One more finding: we first distilled runs into verified, shared skills. That made agents wrong together, because one bad skill spread. Raw runs, labeled unverified, worked better." | -| 6:50–8:00 | **Use it, what's next, close** | `npm install @smithclay/codemode-git`, the three lines, the Deploy to Cloudflare button. An architecture slide: Workers, Worker Loader, Durable Objects, Artifacts, Workers AI, Vectorize, cf CLI, Workers Builds. Closing line | "It's on npm. It's three lines in a Code Mode agent, plus a Deploy to Cloudflare button. Next: index runs as they're pushed, using Artifacts events, and record outcomes alongside the code. Code Mode made code the way agents act. Artifacts makes it the way they remember. Throw away the isolate. Keep the code." | +| 1 | **Thesis** | "What if Cloudflare Artifacts could make Code Mode self-improving?", built phrase by phrase, then the name | The hook is the thesis | +| 2 | **We tried it** | 32.2% → 46.2% counter. "Hard tasks: 23.5% → 38.6%". "+ memory" | The result, as proof of the thesis: same model, same prompt | +| 3 | **Every agent starts from zero** | A grid of agents, each writing code that dissolves | The problem | +| 4 | **Code Mode** | Before: model ⇄ tools ping-pong. After: one program in an isolate | Brief context; the code is the plan | +| 5 | **The gap** | The isolate collapses, and the code falls away | The plan is thrown away | +| 6 | **Phase 1: code memory** | Agents → their own Artifacts repos, with commits stacking up | 1 repo per agent, 1 writer per repo, 0 merges | +| 7 | **Under the hood** | execution ends → Durable Object SQLite outbox → isomorphic-git → Artifacts | How the write path works | +| 8 | **Every attempt, in git** (≥30s) | `git log` of an agent: error, fix, answer | Slot for a VHS recording | +| 9 | **One repo per agent** (≥25s) | 1,000 squares lighting up | Slot for the swarm recording | +| 10 | **Phase 2: learning** | michelle's repo → Workers AI → Vectorize → matthew. A provenance arrow back | Retrieval and `Codemode-Examples` | +| 11 | **Lava lamp wall** (≥60s) | michelle and matthew lanes: runs ✓/✗ and token bars | Slot for the real `walkthrough.mjs` run | +| 12 | **Learning curve** | Median tokens by run position, baseline vs memory | Cold start, then about a third | +| 13 | **Accuracy** | Overall 32.2 → 46.2, hard 23.5 → 38.6 | Right more often, not just cheaper | +| 14 | **Which memory works** | A shared skill hub spreading red to every agent, vs independent raw runs | The skills finding | +| 15 | **Next steps** | Three cards: record outcomes (git notes), index on push (Artifacts events), learn between tasks | What's next | +| 16 | **A new Worker** (≥40s) | VHS recording: `cf init` → install → connector and bindings → `cf deploy --dry-run` | How to start | +| 17 | **Close** | `npm install`, three lines of code, the tagline over the lava wall | Use it | +| 18 | **Credits** | Built by Clay Smith; tech stack credits for the code, benchmark and presentation | Exit slide | + +**Recording slots:** scenes 8, 9 and 11 show placeholders until a recording is added. To add one, put it at `demo/video/public/clips/.mp4` and add the scene id to `public/clips/index.json`. Without recordings the video runs about 3:45. The three recordings add about 80s, which brings it just over the 5-minute minimum; `npm run voiceover` prints the current runtime. ## The walkthrough (michelle → matthew) diff --git a/README.md b/README.md index 9232f36..a84ec86 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# codemode-git +# Self-Improving Code Mode Workers, with Artifacts Memory [![CI](https://github.com/smithclay/codemode-git/actions/workflows/ci.yml/badge.svg)](https://github.com/smithclay/codemode-git/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/@smithclay/codemode-git)](https://www.npmjs.com/package/@smithclay/codemode-git) @@ -7,7 +7,7 @@ [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/smithclay/codemode-git/tree/main/examples/agent) -**Code memory for Code Mode agents, on Cloudflare Artifacts.** Throw away the isolate, keep the code. +**`codemode-git` gives Code Mode agents code memory on Cloudflare Artifacts.** Keep the code, and your Workers get smarter over time. Every [Code Mode](https://www.npmjs.com/package/@cloudflare/codemode) execution becomes a git commit on that agent's own [Cloudflare Artifacts](https://developers.cloudflare.com/artifacts/) repo. Clone it with plain `git` and `git log -p run.js` is the agent's trajectory. diff --git a/demo/video/.gitignore b/demo/video/.gitignore new file mode 100644 index 0000000..699d674 --- /dev/null +++ b/demo/video/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +out/ +.wrangler/ +.cloudflare/ +frames-*/ diff --git a/demo/video/README.md b/demo/video/README.md new file mode 100644 index 0000000..58bae3b --- /dev/null +++ b/demo/video/README.md @@ -0,0 +1,25 @@ +# Demo video + +The competition demo, built with [Remotion](https://www.remotion.dev/). The voiceover is generated on Workers AI with Deepgram Aura-2 (`@cf/deepgram/aura-2-en`), and Whisper (`@cf/openai/whisper`) supplies word timings for the captions. The narration is in [transcript.md](transcript.md), one `## ` section per scene. Scene order, diagrams and recording slots are in [src/script.ts](src/script.ts). The run of show it follows is in [DEMO.md](../../DEMO.md). + +This package sits outside the repo's npm workspaces, so Remotion's headless Chrome doesn't affect CI or the library install. + +```bash +npm install +npm run tts-worker # terminal 1: local Worker with a Workers AI binding, using your cf login +npm run voiceover # terminal 2: regenerates audio for edited sections of transcript.md, then prints the runtime +npm run studio # preview and scrub in the browser +npm run render # out/demo.mp4 +``` + +To skip the local Worker, set `CLOUDFLARE_API_TOKEN` (with Workers AI access) and `CLOUDFLARE_ACCOUNT_ID`, and `npm run voiceover` calls the REST API instead. + +**How timing works:** +- Each scene lasts as long as its voiceover, plus a 0.2s lead-in and a 0.6s hold (`LEAD_IN` and `HOLD` in `src/script.ts`). Keep them small, or they read as dead air. +- Captions use the transcript text the audio was generated from, with Whisper's timings, because Whisper mishears names like "Cloudflare". + +**Cost:** a full regeneration of the voiceover is about 2,850 characters, roughly $0.09 at Aura-2's $0.03 per 1,000 characters. Whisper adds a fraction of a cent. + +**Recordings:** a scene shows `public/clips/.mp4` instead of its diagram when the scene id is listed in `public/clips/index.json`. Scenes with `minSeconds` in the script stretch to that length once their recording exists (the git log, the swarm, and the michelle → matthew run). Until then they last only as long as their narration, so there's no silent padding. + +**Terminal recordings:** `npm run record` records [terminal/new-worker.tape](terminal/new-worker.tape) with [VHS](https://github.com/charmbracelet/vhs): `cf init`, installing Code Mode and codemode-git, the connector and bindings, and `cf deploy --dry-run` (nothing is deployed). [scripts/record.mjs](scripts/record.mjs) then encodes the clip to `public/clips/new-worker.mp4` and lists it in `public/clips/index.json`. VHS's own encoding fails silently with ffmpeg 9, so VHS writes frames and ffmpeg does the encoding. The recording turns off npm's minimum-release-age check for its own shell only, because the `cf init` template pins a `cf` beta that is less than a week old. diff --git a/demo/video/cloudflare.config.ts b/demo/video/cloudflare.config.ts new file mode 100644 index 0000000..2e50988 --- /dev/null +++ b/demo/video/cloudflare.config.ts @@ -0,0 +1,15 @@ +import { bindings, defineConfig } from "cf/config"; + +// A local helper Worker for the video pipeline: `cf dev` runs it with your cf +// login, and scripts/voiceover.mjs calls it for text-to-speech and captions. +// The Workers AI binding always runs remotely, so no API token is needed. +export default defineConfig({ + worker: { + name: "codemode-git-voiceover", + compatibilityDate: "2026-09-30", + entrypoint: "worker/index.ts", + env: { + AI: bindings.ai() + } + } +}); diff --git a/demo/video/package-lock.json b/demo/video/package-lock.json new file mode 100644 index 0000000..b2a30f3 --- /dev/null +++ b/demo/video/package-lock.json @@ -0,0 +1,5144 @@ +{ + "name": "codemode-git-demo-video", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "codemode-git-demo-video", + "dependencies": { + "@remotion/cli": "4.0.532", + "react": "19.3.0", + "react-dom": "19.3.0", + "remotion": "4.0.532" + }, + "devDependencies": { + "@cloudflare/workers-types": "^5.20260901.1", + "@types/react": "^19.2.0", + "cf": "^1.0.0-beta.12", + "typescript": "^5.9.0", + "wrangler": "^4.147.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cloudflare/build-output-utils": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@cloudflare/build-output-utils/-/build-output-utils-0.8.5.tgz", + "integrity": "sha512-xnwcDCyBSErZeOj5eUy1gTrmVjwIY51TZ0Pz9W7mZqLGA3IkIckud7dNtFdGhKSXL2szfxBRbGM4R4qFE4SoPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cloudflare/config": "0.23.0" + } + }, + "node_modules/@cloudflare/codemods": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@cloudflare/codemods/-/codemods-0.4.0.tgz", + "integrity": "sha512-qeRpKNXtvqhTtagx/5cLmDaFx/voBhWJ1S6SdFdBkE3OtgcPVz+Q8MtIG26zltW9Z0Icsu2FGBxV5RFmuHI/Bg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "bin": { + "cloudflare-codemods": "dist/bin.mjs" + } + }, + "node_modules/@cloudflare/config": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@cloudflare/config/-/config-0.23.0.tgz", + "integrity": "sha512-oE0S7X54esZmJHr9hhCoqODR+yTxxkSYWCLtRiItQdPs0gQuqYw9a13zChhK+8DmdCUJIFBsMAR6t+mfu8g+9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "4.4.3" + } + }, + "node_modules/@cloudflare/config/node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.5.0.tgz", + "integrity": "sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@cloudflare/runtime-types": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@cloudflare/runtime-types/-/runtime-types-0.1.7.tgz", + "integrity": "sha512-avgC1wfTunbVea8HOq4ygiQ0WFQVNxcUHOQvH9TM47+0NTdsVTqB8rPQg6Tb5BfVkcWh/a0RAjk+Elr/h35mtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "miniflare": "5.20261001.0-alpha", + "workerd": "1.20261001.1" + } + }, + "node_modules/@cloudflare/runtime-types/node_modules/miniflare": { + "version": "5.20261001.0-alpha", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-5.20261001.0-alpha.tgz", + "integrity": "sha512-GaimS5mSIOMyvd16ga+e1/QkI8cmp3z35QPHFex0DktqNQf2RVZQwMPQXdyoUreUiFP/0Gpe2MoQInTyMAD5xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "0.35.4", + "undici": "7.29.1", + "workerd": "1.20261001.1", + "ws": "8.21.0", + "youch": "4.1.0-beta.10" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.2.tgz", + "integrity": "sha512-JBP1+Z7ZSNG/d4mRP+y8VC5dka3tZVMLEZRvS+rzQ4DGV1EoxRFQckcJTTkXbHSQiTj0DtNI01Zwb/V2fX0mvQ==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.24", + "workerd": ">1.20260305.0 <2.0.0-0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20261001.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20261001.1.tgz", + "integrity": "sha512-4cgSgDf28JSw/P5Dj5GCS59hzVqS5XnmGAWNkvYHLI6ODU9idGaMMNEuhJXDkEG/lsABmlVlnCgsdh2VbKWepw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20261001.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20261001.1.tgz", + "integrity": "sha512-8ulAWruEVouNmEIsQsy9WSSCS9zkLu93W2MTwp5esiFyoPp05BNSVFIFsYSPi1pkFmBBd7fsnwMpbLkaJLaVPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20261001.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20261001.1.tgz", + "integrity": "sha512-kZbTZJGrhsMOdqZ2BIybjaBRLZjYsRLWj7mcNw/6Y3hodOhp5MrNzcz4iWGwNVWwyIV+7Pl+/LX5VcgnRqdHOg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20261001.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20261001.1.tgz", + "integrity": "sha512-oOk3Zj6k/8oP0FJgZBWDn7+BqbsqIMEMaV95pulHPVbwVu4wYoLfQq2hp0vkbCNsCFLqZb7cqixXdrwD54ZIow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20261001.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20261001.1.tgz", + "integrity": "sha512-uRxm5W4VyBkoSaoP1BfOuH0873tE+vxsknF4sab6/5YIRvIAufChq3QDp+zlAn67PuGPGcn7W8QraA0t4ucmOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workers-types": { + "version": "5.20261005.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-5.20261005.1.tgz", + "integrity": "sha512-QQwZY342US72QGHso/H1CSzn9FWe6IoLZ8TsYyoMnvRHHOnucGuKZRDCyOn43HAkkRQqfRHFw8NP1xe1A7Oj8A==", + "dev": true, + "license": "MIT OR Apache-2.0" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz", + "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz", + "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz", + "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz", + "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz", + "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz", + "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz", + "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz", + "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz", + "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz", + "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz", + "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz", + "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz", + "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz", + "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz", + "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz", + "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz", + "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz", + "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz", + "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz", + "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz", + "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz", + "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==", + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz", + "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz", + "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz", + "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz", + "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mediabunny/aac-encoder": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@mediabunny/aac-encoder/-/aac-encoder-1.56.1.tgz", + "integrity": "sha512-a+OY/BctP7zC4G/prHikooOVaoWXMD4+bUyEwHg2dtQiQdIwC6TDJdVYJu5dfrdSNOiAFkv1HKcYEeROdwMezg==", + "license": "MPL-2.0", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/Vanilagy" + }, + "peerDependencies": { + "mediabunny": "^1.0.0" + } + }, + "node_modules/@mediabunny/flac-encoder": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@mediabunny/flac-encoder/-/flac-encoder-1.56.1.tgz", + "integrity": "sha512-zbmorMVlF1izwtlz5mWnu7A1rJLM+V26I0pEFr9Td1EDTwE5uAGRSW+/UZlnjwj1t00Woe3Zonfh9kb7lRRBqg==", + "license": "MPL-2.0", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/Vanilagy" + }, + "peerDependencies": { + "mediabunny": "^1.0.0" + } + }, + "node_modules/@mediabunny/mp3-encoder": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@mediabunny/mp3-encoder/-/mp3-encoder-1.56.1.tgz", + "integrity": "sha512-p66ovEq6mZt3ejje45NOju84hIJI4v8rHfsmc1D2J34ziV0USE8AdJBzmiwqxl6nZkIAQLNB19HzbVRcQfc51g==", + "license": "MPL-2.0", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/Vanilagy" + }, + "peerDependencies": { + "mediabunny": "^1.0.0" + } + }, + "node_modules/@module-federation/error-codes": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz", + "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", + "license": "MIT" + }, + "node_modules/@module-federation/runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz", + "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/runtime-core": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@module-federation/runtime-core": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", + "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@module-federation/runtime-tools": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", + "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", + "license": "MIT", + "dependencies": { + "@module-federation/runtime": "0.22.0", + "@module-federation/webpack-bundler-runtime": "0.22.0" + } + }, + "node_modules/@module-federation/sdk": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz", + "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", + "license": "MIT" + }, + "node_modules/@module-federation/webpack-bundler-runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", + "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", + "license": "MIT", + "dependencies": { + "@module-federation/runtime": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" + } + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/colors/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/dumper/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@remotion/bundler": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.532.tgz", + "integrity": "sha512-3F0yU4jw8I0VYr4CXznxqafCb0IcM5SlJjmt6bZfTPDIeP3in/CKU6ZL0L2xE4W0ppMUU6QFMroi0VnMi9NlSw==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@remotion/media-parser": "4.0.532", + "@remotion/studio": "4.0.532", + "@remotion/studio-shared": "4.0.532", + "@remotion/timeline-utils": "4.0.532", + "@rspack/core": "1.7.11", + "@rspack/plugin-react-refresh": "1.6.1", + "css-loader": "7.1.4", + "esbuild": "0.28.1", + "react-refresh": "0.18.0", + "remotion": "4.0.532", + "style-loader": "4.0.0", + "webpack": "5.105.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remotion/canvas": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/canvas/-/canvas-4.0.532.tgz", + "integrity": "sha512-7HwcyUBCLmE1oQD+mtV7HjC/7d+jXEk3ZiX0XvdjuBBhTeb381jiC0LZoObEk307x6LV5d63B4ZNMAyA/Kapjw==", + "license": "Remotion License", + "dependencies": { + "@remotion/player": "4.0.532", + "@remotion/studio-shared": "4.0.532", + "remotion": "4.0.532" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remotion/captions": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/captions/-/captions-4.0.532.tgz", + "integrity": "sha512-1DzWEnv5DCGESIq1ux1C1M/z/sJMv08A7Z+1bHAnGW3gVrg37QtoRyhyDvWKJZHnNIYiEmBeICSeQpgu5p0Bdw==", + "license": "MIT" + }, + "node_modules/@remotion/cli": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/cli/-/cli-4.0.532.tgz", + "integrity": "sha512-1Iy4IFK1KN4LOBjGcJh56ZlW/NQdbTEMhFG0H1g1rHvx8Vva9aQdF/rtFi7cvFon99WvPJPc8k2F1jFNba9BIQ==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@babel/parser": "7.24.1", + "@remotion/bundler": "4.0.532", + "@remotion/media-utils": "4.0.532", + "@remotion/player": "4.0.532", + "@remotion/renderer": "4.0.532", + "@remotion/studio": "4.0.532", + "@remotion/studio-server": "4.0.532", + "@remotion/studio-shared": "4.0.532", + "dotenv": "17.3.1", + "minimist": "1.2.6", + "prompts": "2.4.2", + "remotion": "4.0.532", + "semver": "7.5.3" + }, + "bin": { + "remotion": "remotion-cli.js", + "remotionb": "remotionb-cli.js", + "remotiond": "remotiond-cli.js" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remotion/codemods": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/codemods/-/codemods-4.0.532.tgz", + "integrity": "sha512-WEOuUHYc6vNx4pheNsB0jqdfNuqgDk1Xz7cgCdHihPRpwZpUgJgl1mxH0f+KVIL3+ef9+gagqYScEkuS2q3pdw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "7.24.1", + "@babel/types": "7.24.0", + "@remotion/studio-protocol": "4.0.532", + "@remotion/studio-shared": "4.0.532", + "ast-types": "0.16.1", + "recast": "0.23.21", + "remotion": "4.0.532" + } + }, + "node_modules/@remotion/compositor-darwin-arm64": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-arm64/-/compositor-darwin-arm64-4.0.532.tgz", + "integrity": "sha512-K/RID6hvhRqiE1q/DTurkmG/6SrD9b918fgqvmntFpFiU3bc8Ti9ZaYQCOwTwOA6mVBh6oneuHuoA2QpFlP0Qg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@remotion/compositor-darwin-x64": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-x64/-/compositor-darwin-x64-4.0.532.tgz", + "integrity": "sha512-mggi24c5As/H6wYoCr22oTRPVeblvNMdenh+bi7316lvBpBDgSXeIUkXvUEG4379lJQtshks0UfwkBkqnePyvg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@remotion/compositor-linux-arm64-gnu": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-gnu/-/compositor-linux-arm64-gnu-4.0.532.tgz", + "integrity": "sha512-7ZPI1t6k0NEbJHP6fSjgdJJymyOQCtExeC6nqs6P5jYQ6UT5xKZyIEiytAAXJ6KQBOWlyuhvU1iHgYpAHYKXlA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@remotion/compositor-linux-arm64-musl": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-musl/-/compositor-linux-arm64-musl-4.0.532.tgz", + "integrity": "sha512-DatMaiMqiO+2rAXSgE+61V3WmmL6sRQPJd15PTI7k6F905ewM0TlXhyoEp1P/vCS1M0xBEgI/XNeEcr0yVEJXQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@remotion/compositor-linux-x64-gnu": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-gnu/-/compositor-linux-x64-gnu-4.0.532.tgz", + "integrity": "sha512-XmXrGroGga9pYJ4CfexCun2rh64WvsIVuTPYEWSpfFnHGsD9Pa7ljOio9A1B+6qAoz6iZeXZFKAOTH1COD5KJg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@remotion/compositor-linux-x64-musl": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-musl/-/compositor-linux-x64-musl-4.0.532.tgz", + "integrity": "sha512-y05BgTyOw3KbavIWm3n8AxsnmIt2PgoqH1ZFuZySkEvrGWY2oq+t1i7kBqMvNvCDRzv+wca5wb0FaGi4GXXIjg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@remotion/compositor-win32-x64-msvc": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/compositor-win32-x64-msvc/-/compositor-win32-x64-msvc-4.0.532.tgz", + "integrity": "sha512-OES5+mlcBTxcQc7VXszEqwbpnAU593P5uuXDGPz6VC/FMivFtOGmBObE8LQ3azAkVfls4Arjxh33U44inlCweg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@remotion/elevenlabs": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/elevenlabs/-/elevenlabs-4.0.532.tgz", + "integrity": "sha512-WTnWQ+obrURlIXZqKaTehd69eYwMpWLwlVv/QRnd7XKicMzhIsxw6XXK3muFXn3kyltJV6A97NTiF0g7T92TQw==", + "license": "MIT", + "dependencies": { + "@remotion/captions": "4.0.532", + "zod": "4.5.4" + } + }, + "node_modules/@remotion/licensing": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/licensing/-/licensing-4.0.532.tgz", + "integrity": "sha512-rVFt+XpEn4X5aOiy1DDCjJeUKgGey1ftYK812W8iEBZkcl6hlb1eq9SyQTIX0JlTtMzdJrev6+jLSnLCOj69OQ==", + "license": "MIT" + }, + "node_modules/@remotion/media": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/media/-/media-4.0.532.tgz", + "integrity": "sha512-tY8GhDaqwhPQz0/e2eioe2EBUSQsYhpkQSYvwBdl+VrhPFfJ3t4YpEIeUJx0rJm1rH1/zhQISkMIS92WHUMjRQ==", + "dependencies": { + "mediabunny": "1.56.1", + "remotion": "4.0.532", + "zod": "4.5.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remotion/media-parser": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/media-parser/-/media-parser-4.0.532.tgz", + "integrity": "sha512-xOhwauHbVnXPRqyz5tI5tGtdacp1POZuFjAp8NALw/0g+8Bp99YXjgUjjkXBHNqV6r8Eym7eHA+EBWfmqvIJAQ==", + "license": "Remotion License https://remotion.dev/license" + }, + "node_modules/@remotion/media-utils": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/media-utils/-/media-utils-4.0.532.tgz", + "integrity": "sha512-ZjHDqNxGYHj4rOMVDvQQaoc4pn4t1fmlemVcJCCKrElYUih/gn+bV8NlSddYnAB9KSS2GyRXbfqvYgUdQZbG1g==", + "license": "MIT", + "dependencies": { + "mediabunny": "1.56.1", + "remotion": "4.0.532" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remotion/openai-whisper": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/openai-whisper/-/openai-whisper-4.0.532.tgz", + "integrity": "sha512-CXTAIabqX0pS38SOselqR0wM1OyKsnsDk+iLSVrALdD/47jajWV0t2Ap9nYtB441dzrpWINPvW5hIvmw4xVvZQ==", + "license": "MIT", + "dependencies": { + "@remotion/captions": "4.0.532", + "zod": "4.5.4" + } + }, + "node_modules/@remotion/paths": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/paths/-/paths-4.0.532.tgz", + "integrity": "sha512-JyO0zYT47lbqfsDriFl69RfmUmjXm4h/h1TAvDt5XnChIZMlf9DlpUdiBYkOUvO7NHOXku8XsG/LKyTP/jnZmg==", + "license": "MIT", + "dependencies": { + "remotion": "4.0.532" + } + }, + "node_modules/@remotion/player": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/player/-/player-4.0.532.tgz", + "integrity": "sha512-McCswN8cb3Y6BEg1iCRc6yBUoxjODoStvOsAHZ6uReHEP+mqzor3p1qO9zKIm9aL/evEF7bumwo43nKoO1klxA==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "remotion": "4.0.532" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remotion/renderer": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/renderer/-/renderer-4.0.532.tgz", + "integrity": "sha512-Iy5JVGKBglJNBzu5uT9qKG8ZK2HqK9dZWn1gVG+BjyH0QAlvry3E5drra6hRmI0e9nhu2HxT9MrKQ0oLIfX5hA==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@remotion/licensing": "4.0.532", + "@remotion/streaming": "4.0.532", + "execa": "5.1.1", + "remotion": "4.0.532", + "source-map": "0.8.0", + "ws": "8.21.0" + }, + "optionalDependencies": { + "@remotion/compositor-darwin-arm64": "4.0.532", + "@remotion/compositor-darwin-x64": "4.0.532", + "@remotion/compositor-linux-arm64-gnu": "4.0.532", + "@remotion/compositor-linux-arm64-musl": "4.0.532", + "@remotion/compositor-linux-x64-gnu": "4.0.532", + "@remotion/compositor-linux-x64-musl": "4.0.532", + "@remotion/compositor-win32-x64-msvc": "4.0.532" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remotion/streaming": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/streaming/-/streaming-4.0.532.tgz", + "integrity": "sha512-1Lw5HQzznHEfSq2HjXEJHbWsXLHLjqiQ2CfUaeMHtpFCR2AqUle13vbnqw+yG96e2GmnHhRPwQONSMtGHSjnfw==", + "license": "MIT" + }, + "node_modules/@remotion/studio": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/studio/-/studio-4.0.532.tgz", + "integrity": "sha512-GMxdgX5xhwcyXBdx0JKQs9qRN6zTVASFfBs5N6qcqgg1ep8GWI/7mGWSFoH9wYjB3YxtEAA2eo0+vb+0ZE+g/g==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.31", + "@remotion/canvas": "4.0.532", + "@remotion/captions": "4.0.532", + "@remotion/codemods": "4.0.532", + "@remotion/elevenlabs": "4.0.532", + "@remotion/media": "4.0.532", + "@remotion/media-utils": "4.0.532", + "@remotion/openai-whisper": "4.0.532", + "@remotion/paths": "4.0.532", + "@remotion/player": "4.0.532", + "@remotion/renderer": "4.0.532", + "@remotion/studio-protocol": "4.0.532", + "@remotion/studio-shared": "4.0.532", + "@remotion/timeline-utils": "4.0.532", + "@remotion/web-renderer": "4.0.532", + "@remotion/zod-types": "4.0.532", + "@tanstack/react-virtual": "3.14.9", + "mediabunny": "1.56.1", + "memfs": "3.4.3", + "open": "8.4.2", + "prismjs": "1.30.0", + "remotion": "4.0.532", + "semver": "7.5.3", + "zod": "4.5.4" + }, + "peerDependencies": { + "@remotion/video-matting": "4.0.532", + "@remotion/whisper-webgpu": "4.0.532", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@remotion/video-matting": { + "optional": true + }, + "@remotion/whisper-webgpu": { + "optional": true + } + } + }, + "node_modules/@remotion/studio-protocol": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/studio-protocol/-/studio-protocol-4.0.532.tgz", + "integrity": "sha512-rv+5OT6ORlQbTyWwvXngF8f81JJFbIy6HBYlT4uXELwcvODMkARs3yRa2WCxFyT8otd8HH9J0pcYQlfJkW/E9g==", + "license": "Remotion License", + "dependencies": { + "zod": "4.5.4" + } + }, + "node_modules/@remotion/studio-server": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/studio-server/-/studio-server-4.0.532.tgz", + "integrity": "sha512-TAipO/dRiomewFXooOZwzUEz/4Jdgm7Ng5jvsaEv8XgC8UfYchXBe5rFY9url8XKuvjxAQDUc9Jok2fvlmlihA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "7.24.1", + "@babel/types": "7.24.0", + "@remotion/bundler": "4.0.532", + "@remotion/codemods": "4.0.532", + "@remotion/renderer": "4.0.532", + "@remotion/studio-protocol": "4.0.532", + "@remotion/studio-shared": "4.0.532", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "kiwi-schema": "0.5.0", + "memfs": "3.4.3", + "open": "8.4.2", + "recast": "0.23.21", + "remotion": "4.0.532", + "semver": "7.5.3", + "zod": "4.5.4" + } + }, + "node_modules/@remotion/studio-shared": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/studio-shared/-/studio-shared-4.0.532.tgz", + "integrity": "sha512-wUgce2FQ56lDNlMXHyEjz2aAI7fFYyUTmNorjghOyC4pGt+lzcuNPifjNQivLi8OkWWdaUjZLeLLcHs8IkVLVA==", + "license": "MIT", + "dependencies": { + "remotion": "4.0.532" + } + }, + "node_modules/@remotion/timeline-utils": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/timeline-utils/-/timeline-utils-4.0.532.tgz", + "integrity": "sha512-DXWm1yoZ7lntTsk1syabokIfKgh8B3ivQbZb4qpJf+gO5mLltWr9O731T6ky3xE38WYl5IEREDgItjxQLM1ESQ==", + "license": "MIT", + "dependencies": { + "mediabunny": "1.56.1", + "remotion": "4.0.532" + } + }, + "node_modules/@remotion/web-renderer": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/web-renderer/-/web-renderer-4.0.532.tgz", + "integrity": "sha512-rA5Tbz+QLTMZbdJFP6XuBg/Xb5zSs6JxTCPuom3n+BFI/Wdzu63JhCjLe3MkIfEj38yQV0gvOcwFzvLcPFwmhA==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@mediabunny/aac-encoder": "1.56.1", + "@mediabunny/flac-encoder": "1.56.1", + "@mediabunny/mp3-encoder": "1.56.1", + "@remotion/licensing": "4.0.532", + "mediabunny": "1.56.1", + "remotion": "4.0.532" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@remotion/zod-types": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/@remotion/zod-types/-/zod-types-4.0.532.tgz", + "integrity": "sha512-I/hKQp4UmrYKCjbOI/MBzojPbnwXW2lOPRhq6/AWBDdlNzxrgKz9cZV+R2jhzaXcjHQ+DgklixBhbROynIlDRw==", + "license": "MIT", + "dependencies": { + "remotion": "4.0.532" + } + }, + "node_modules/@rspack/binding": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz", + "integrity": "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==", + "license": "MIT", + "optionalDependencies": { + "@rspack/binding-darwin-arm64": "1.7.11", + "@rspack/binding-darwin-x64": "1.7.11", + "@rspack/binding-linux-arm64-gnu": "1.7.11", + "@rspack/binding-linux-arm64-musl": "1.7.11", + "@rspack/binding-linux-x64-gnu": "1.7.11", + "@rspack/binding-linux-x64-musl": "1.7.11", + "@rspack/binding-wasm32-wasi": "1.7.11", + "@rspack/binding-win32-arm64-msvc": "1.7.11", + "@rspack/binding-win32-ia32-msvc": "1.7.11", + "@rspack/binding-win32-x64-msvc": "1.7.11" + } + }, + "node_modules/@rspack/binding-darwin-arm64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz", + "integrity": "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-darwin-x64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz", + "integrity": "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-linux-arm64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz", + "integrity": "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-arm64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz", + "integrity": "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz", + "integrity": "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz", + "integrity": "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-wasm32-wasi": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz", + "integrity": "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "1.0.7" + } + }, + "node_modules/@rspack/binding-win32-arm64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz", + "integrity": "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-ia32-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz", + "integrity": "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-x64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz", + "integrity": "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/core": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz", + "integrity": "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==", + "license": "MIT", + "dependencies": { + "@module-federation/runtime-tools": "0.22.0", + "@rspack/binding": "1.7.11", + "@rspack/lite-tapable": "1.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.1" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@rspack/lite-tapable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", + "license": "MIT" + }, + "node_modules/@rspack/plugin-react-refresh": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.1.tgz", + "integrity": "sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw==", + "license": "MIT", + "dependencies": { + "error-stack-parser": "^2.1.4", + "html-entities": "^2.6.0" + }, + "peerDependencies": { + "react-refresh": ">=0.10.0 <1.0.0", + "webpack-hot-middleware": "2.x" + }, + "peerDependenciesMeta": { + "webpack-hot-middleware": { + "optional": true + } + } + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.24", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.24.tgz", + "integrity": "sha512-qeW2e1l78afw8VhRPfPQ1Gjj+KU5XFQ/OFV5ti6eTa9bruO7mJyZtA4vw0ofqmA3tKCkROE9xLk3VZoeRc98nw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.14.9", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.9.tgz", + "integrity": "sha512-qZyr0FZDP8rDC4WBhsryIZmAd9bveJvFGUJJtskWaew6/0dTRS6wZxnR6VQ5bY2KwL3LjerrHqQLk3a0GKcPXQ==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.17.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.17.7", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.17.7.tgz", + "integrity": "sha512-bp+v10y65sp2H7WpWfIMyxTNfl8ZVfxFTLRjPIFRryi6FV/J33z4IS53WO4pTk36KlvJ4iLiQz+oaydDC1xbcA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/dom-mediacapture-transform": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@types/dom-mediacapture-transform/-/dom-mediacapture-transform-0.1.12.tgz", + "integrity": "sha512-d7/QsLRwF864A5mgIM/YrfiglHoYn7zgCcAoJgW404r+2DwnNr7EBbLnCWpmOMgH8y0te73L1AV6H1bmauaWFw==", + "license": "MIT", + "dependencies": { + "@types/dom-webcodecs": "*" + } + }, + "node_modules/@types/dom-webcodecs": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.13.tgz", + "integrity": "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==", + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", + "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/acorn": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz", + "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserslist": { + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", + "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.26", + "caniuse-lite": "^1.0.30001813", + "electron-to-chromium": "^1.5.439", + "node-releases": "^2.0.57", + "update-browserslist-db": "^1.3.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001814", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001814.tgz", + "integrity": "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/cf": { + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/cf/-/cf-1.0.0-beta.12.tgz", + "integrity": "sha512-tyQ+Jpnw+4NDwDtl7ZNteXBm7N0TeJ6gYww79kkabpcYoCEXkUUpmt9BlDUKH8ub17tjAeiuyqa9NQzH0vp2Aw==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/build-output-utils": "0.8.5", + "@cloudflare/codemods": "0.4.0", + "@cloudflare/config": "0.23.0", + "@cloudflare/runtime-types": "0.1.7", + "blake3-wasm": "2.1.5", + "miniflare": "5.20260930.0-alpha", + "minisearch": "7.2.0" + }, + "bin": { + "cf": "bin/cf", + "cloudflare": "bin/cf" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.4.tgz", + "integrity": "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.40", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.6.3" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.444", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.444.tgz", + "integrity": "sha512-5ss/uJfoDYDHT0lfJzT6FbcskIzROIOPf0BbbFkGcvDzoJU7i//9GDrwwIHQVmIsrAGiF3ihpADBRIsrEFt1rQ==", + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz", + "integrity": "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "license": "Unlicense" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kiwi-schema": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/kiwi-schema/-/kiwi-schema-0.5.0.tgz", + "integrity": "sha512-X+FpfU0yTEtc6aTHS7VwbOpvQwRt70+pXXWRI5fd6CvWhe7pSVC854TVo4Zo0x5/wwcWj+/9KUlXpdcP0dY9AA==", + "license": "MIT", + "bin": { + "kiwic": "cli.js" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/mediabunny": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.56.1.tgz", + "integrity": "sha512-DNOm0bRBmeOxJgCK/g3LxNWbxY5morTauNdlychujGmJ9L37ezVezkNoI1WtO2Xdb4WlWWJlYfIKnOEzd5phRw==", + "license": "MPL-2.0", + "workspaces": [ + ".", + "packages/*" + ], + "dependencies": { + "@types/dom-mediacapture-transform": "^0.1.11", + "@types/dom-webcodecs": "0.1.13" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/Vanilagy" + } + }, + "node_modules/memfs": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz", + "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/miniflare": { + "version": "5.20260930.0-alpha", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-5.20260930.0-alpha.tgz", + "integrity": "sha512-vZljfRtOEeynbhJtuvYsnCU8t6zF5wIUm9ql4YFHB7zvYw2+F2tpT0BzXjzaa++eiUIml1gsODCf02qShBmJdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "0.35.4", + "undici": "7.29.1", + "workerd": "1.20260930.2", + "ws": "8.21.0", + "youch": "4.1.0-beta.10" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/miniflare/node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20260930.2", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260930.2.tgz", + "integrity": "sha512-wxKsfekWeev6xkjHEMx3x7nz6WfWOn1/scQ8geqWQhUm8qRl1ZRZhjnj+rucIMLhLhP9RGSYMZIjEm3AV0zwVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/miniflare/node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20260930.2", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260930.2.tgz", + "integrity": "sha512-cviPpheZGQ2H5X+Ctxd3wfxhksNrdyoNprjSgg3br2+psetKacjdEvK8CILdN/2GF+u1KOExvr45amSL6lgzGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/miniflare/node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20260930.2", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260930.2.tgz", + "integrity": "sha512-cwrJAC5y/avPd1OzGyhc5OvUUfPXBFc065TY5CjXp7Hb3dhiTx6JeB5Pc8L3G8L8M44HyAfRHSpoLtRr+SR3cQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/miniflare/node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20260930.2", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260930.2.tgz", + "integrity": "sha512-FHucB4gak1IuT+IxLx3KbtMBMapZhcqD9EdhHvBxk1FpHwD2QU5x26MRRVN53jIKG/O25HUmE9yffb3cMANQgw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/miniflare/node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20260930.2", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260930.2.tgz", + "integrity": "sha512-JHFMdGFMqP+M2QiVzZq1S8Ie66Gvxo7Og5EYz/KtmDvGCqge5L3lK+ksZxAhF3j/tpSLqdvlUvcTKoR9PkwTTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/miniflare/node_modules/workerd": { + "version": "1.20260930.2", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260930.2.tgz", + "integrity": "sha512-k1lQzEiGyCDqaRsR5+o9PBT5wVU5omtas6hXx3spbEHHMFo8a7tkAixVCMsWFeiT7xhrmg21Hd6a9jLNrkcUMg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20260930.2", + "@cloudflare/workerd-darwin-arm64": "1.20260930.2", + "@cloudflare/workerd-linux-64": "1.20260930.2", + "@cloudflare/workerd-linux-arm64": "1.20260930.2", + "@cloudflare/workerd-windows-64": "1.20260930.2" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "license": "MIT" + }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.57", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", + "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.19", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz", + "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.0" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.21", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.21.tgz", + "integrity": "sha512-mFAyJq9vUbSTARLZUvAEf1z3YxlvAwswbmxMx2mPA/MSm4KmpwvwvhsH/NIrZhyOuwD60Lzyw2qh83uCbgTPYw==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remotion": { + "version": "4.0.532", + "resolved": "https://registry.npmjs.org/remotion/-/remotion-4.0.532.tgz", + "integrity": "sha512-YsxSVz4E7HDKhC9v+O9sNCA9ud05VuWbjTX/ko51lf4MV+uyyrvsAyVNbPW2pW9Nk5Ty+JPdW3osRr5A+hXOoA==", + "license": "SEE LICENSE IN LICENSE.md", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/schema-utils": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.5.0.tgz", + "integrity": "sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.15", + "ajv": "^8.20.0", + "ajv-formats": "^3.0.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz", + "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.4", + "@img/sharp-darwin-x64": "0.35.4", + "@img/sharp-freebsd-wasm32": "0.35.4", + "@img/sharp-libvips-darwin-arm64": "1.3.3", + "@img/sharp-libvips-darwin-x64": "1.3.3", + "@img/sharp-libvips-linux-arm": "1.3.3", + "@img/sharp-libvips-linux-arm64": "1.3.3", + "@img/sharp-libvips-linux-ppc64": "1.3.3", + "@img/sharp-libvips-linux-riscv64": "1.3.3", + "@img/sharp-libvips-linux-s390x": "1.3.3", + "@img/sharp-libvips-linux-x64": "1.3.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3", + "@img/sharp-libvips-linuxmusl-x64": "1.3.3", + "@img/sharp-linux-arm": "0.35.4", + "@img/sharp-linux-arm64": "0.35.4", + "@img/sharp-linux-ppc64": "0.35.4", + "@img/sharp-linux-riscv64": "0.35.4", + "@img/sharp-linux-s390x": "0.35.4", + "@img/sharp-linux-x64": "0.35.4", + "@img/sharp-linuxmusl-arm64": "0.35.4", + "@img/sharp-linuxmusl-x64": "0.35.4", + "@img/sharp-webcontainers-wasm32": "0.35.4", + "@img/sharp-win32-arm64": "0.35.4", + "@img/sharp-win32-ia32": "0.35.4", + "@img/sharp-win32-x64": "0.35.4" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", + "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/style-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.27.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/svg-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.1.0.tgz", + "integrity": "sha512-bwLf38YmY+TDYHJw1Ex0Co8c4yeXuJAo8YnXGZrscxrvYoVVIvLeniEkV1Ks/54VteMnL4FtyN1+P+TZJdUPmQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser": { + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.1.tgz", + "integrity": "sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/watchpack": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.105.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", + "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.6.0.tgz", + "integrity": "sha512-EIMmPVvNI0CYXyRPp34F2Qk7W37/BZVZIofS6LAUnrNjCVahS+hO4mxwFJDjQjODTGZDtVzLYoN2+1dYkhk9qA==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workerd": { + "version": "1.20261001.1", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20261001.1.tgz", + "integrity": "sha512-d/SIYHFO0PT/wiFZg8in4NpRIxYuFwslX1HdylOtWkBIIUmSpkGFhK820cV84XACFylwJ48xuRoWW/8DWDPsPQ==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20261001.1", + "@cloudflare/workerd-darwin-arm64": "1.20261001.1", + "@cloudflare/workerd-linux-64": "1.20261001.1", + "@cloudflare/workerd-linux-arm64": "1.20261001.1", + "@cloudflare/workerd-windows-64": "1.20261001.1" + } + }, + "node_modules/wrangler": { + "version": "4.147.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.147.0.tgz", + "integrity": "sha512-pQYRoiq8PTAxphaG69z8+GC1DkSGd19EDZehQ8zxjo/Ko3mRB6Qs1mTrd8ZuKAarLklIjTqr1lUdCK9r4q2hUg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.5.0", + "@cloudflare/unenv-preset": "2.16.2", + "blake3-wasm": "2.1.5", + "esbuild": "0.28.1", + "miniflare": "5.20261001.0-alpha", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20261001.1" + }, + "bin": { + "cf-wrangler": "bin/cf-wrangler.js", + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=22.0.0" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^5.20261001.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/wrangler/node_modules/miniflare": { + "version": "5.20261001.0-alpha", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-5.20261001.0-alpha.tgz", + "integrity": "sha512-GaimS5mSIOMyvd16ga+e1/QkI8cmp3z35QPHFex0DktqNQf2RVZQwMPQXdyoUreUiFP/0Gpe2MoQInTyMAD5xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "0.35.4", + "undici": "7.29.1", + "workerd": "1.20261001.1", + "ws": "8.21.0", + "youch": "4.1.0-beta.10" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/youch": { + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/zod": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz", + "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/demo/video/package.json b/demo/video/package.json new file mode 100644 index 0000000..1451347 --- /dev/null +++ b/demo/video/package.json @@ -0,0 +1,27 @@ +{ + "name": "codemode-git-demo-video", + "private": true, + "type": "module", + "description": "Demo video for codemode-git: Remotion composition with a Workers AI voiceover (Deepgram Aura-2) and Whisper captions.", + "scripts": { + "tts-worker": "cf dev", + "voiceover": "node scripts/voiceover.mjs", + "studio": "remotion studio", + "render": "remotion render Demo out/demo.mp4", + "typecheck": "tsc -p . && tsc -p worker", + "record": "node scripts/record.mjs new-worker" + }, + "dependencies": { + "@remotion/cli": "4.0.532", + "react": "19.3.0", + "react-dom": "19.3.0", + "remotion": "4.0.532" + }, + "devDependencies": { + "@cloudflare/workers-types": "^5.20260901.1", + "@types/react": "^19.2.0", + "cf": "^1.0.0-beta.12", + "typescript": "^5.9.0", + "wrangler": "^4.147.0" + } +} diff --git a/demo/video/public/clips/index.json b/demo/video/public/clips/index.json new file mode 100644 index 0000000..5d4057a --- /dev/null +++ b/demo/video/public/clips/index.json @@ -0,0 +1,3 @@ +[ + "new-worker" +] diff --git a/demo/video/public/clips/new-worker.mp4 b/demo/video/public/clips/new-worker.mp4 new file mode 100644 index 0000000..1bf8d7c Binary files /dev/null and b/demo/video/public/clips/new-worker.mp4 differ diff --git a/demo/video/public/voiceover/accuracy.mp3 b/demo/video/public/voiceover/accuracy.mp3 new file mode 100644 index 0000000..4d6ffd9 Binary files /dev/null and b/demo/video/public/voiceover/accuracy.mp3 differ diff --git a/demo/video/public/voiceover/close.mp3 b/demo/video/public/voiceover/close.mp3 new file mode 100644 index 0000000..7dc01c5 Binary files /dev/null and b/demo/video/public/voiceover/close.mp3 differ diff --git a/demo/video/public/voiceover/code-memory.mp3 b/demo/video/public/voiceover/code-memory.mp3 new file mode 100644 index 0000000..3f3de4d Binary files /dev/null and b/demo/video/public/voiceover/code-memory.mp3 differ diff --git a/demo/video/public/voiceover/code-mode.mp3 b/demo/video/public/voiceover/code-mode.mp3 new file mode 100644 index 0000000..3277ab5 Binary files /dev/null and b/demo/video/public/voiceover/code-mode.mp3 differ diff --git a/demo/video/public/voiceover/contagion.mp3 b/demo/video/public/voiceover/contagion.mp3 new file mode 100644 index 0000000..1186933 Binary files /dev/null and b/demo/video/public/voiceover/contagion.mp3 differ diff --git a/demo/video/public/voiceover/credits.mp3 b/demo/video/public/voiceover/credits.mp3 new file mode 100644 index 0000000..79a01bb Binary files /dev/null and b/demo/video/public/voiceover/credits.mp3 differ diff --git a/demo/video/public/voiceover/curve.mp3 b/demo/video/public/voiceover/curve.mp3 new file mode 100644 index 0000000..999baa2 Binary files /dev/null and b/demo/video/public/voiceover/curve.mp3 differ diff --git a/demo/video/public/voiceover/gap.mp3 b/demo/video/public/voiceover/gap.mp3 new file mode 100644 index 0000000..75b9a0a Binary files /dev/null and b/demo/video/public/voiceover/gap.mp3 differ diff --git a/demo/video/public/voiceover/hook.mp3 b/demo/video/public/voiceover/hook.mp3 new file mode 100644 index 0000000..7117c84 Binary files /dev/null and b/demo/video/public/voiceover/hook.mp3 differ diff --git a/demo/video/public/voiceover/manifest.json b/demo/video/public/voiceover/manifest.json new file mode 100644 index 0000000..137daa4 --- /dev/null +++ b/demo/video/public/voiceover/manifest.json @@ -0,0 +1,3401 @@ +{ + "thesis": { + "file": "voiceover/thesis.mp3", + "hash": "57cb1c7f56534efa", + "text": "What if Cloudflare Artifacts could make Code Mode in Workers self-improving? Every Code Mode run is a program. Keep every program in Artifacts, and let the next agent learn from it. That's codemode-git.", + "seconds": 14.184, + "words": [ + { + "word": "What", + "start": 0, + "end": 0.25999999046325684 + }, + { + "word": "if", + "start": 0.25999999046325684, + "end": 0.41999998688697815 + }, + { + "word": "CloudFlare", + "start": 0.41999998688697815, + "end": 1.0800000429153442 + }, + { + "word": "artifacts", + "start": 1.0800000429153442, + "end": 1.5 + }, + { + "word": "could", + "start": 1.5, + "end": 1.899999976158142 + }, + { + "word": "make", + "start": 1.899999976158142, + "end": 2.0999999046325684 + }, + { + "word": "code", + "start": 2.0999999046325684, + "end": 2.4000000953674316 + }, + { + "word": "mode", + "start": 2.4000000953674316, + "end": 2.7200000286102295 + }, + { + "word": "in", + "start": 2.7200000286102295, + "end": 3.5 + }, + { + "word": "workers'", + "start": 3.5, + "end": 4.21999979019165 + }, + { + "word": "self", + "start": 4.21999979019165, + "end": 4.360000133514404 + }, + { + "word": "-improving?", + "start": 4.360000133514404, + "end": 5.539999961853027 + }, + { + "word": "Every", + "start": 5.539999961853027, + "end": 5.78000020980835 + }, + { + "word": "code", + "start": 5.78000020980835, + "end": 6.059999942779541 + }, + { + "word": "mode", + "start": 6.059999942779541, + "end": 6.300000190734863 + }, + { + "word": "run", + "start": 6.300000190734863, + "end": 6.539999961853027 + }, + { + "word": "is", + "start": 6.539999961853027, + "end": 6.78000020980835 + }, + { + "word": "a", + "start": 6.78000020980835, + "end": 6.860000133514404 + }, + { + "word": "program.", + "start": 6.860000133514404, + "end": 7.840000152587891 + }, + { + "word": "Keep", + "start": 7.840000152587891, + "end": 7.960000038146973 + }, + { + "word": "every", + "start": 7.960000038146973, + "end": 8.319999694824219 + }, + { + "word": "program", + "start": 8.319999694824219, + "end": 8.779999732971191 + }, + { + "word": "in", + "start": 8.779999732971191, + "end": 8.960000038146973 + }, + { + "word": "artifacts", + "start": 8.960000038146973, + "end": 9.399999618530273 + }, + { + "word": "and", + "start": 9.399999618530273, + "end": 10.260000228881836 + }, + { + "word": "let", + "start": 10.260000228881836, + "end": 10.420000076293945 + }, + { + "word": "the", + "start": 10.420000076293945, + "end": 10.579999923706055 + }, + { + "word": "next", + "start": 10.579999923706055, + "end": 10.819999694824219 + }, + { + "word": "agent", + "start": 10.819999694824219, + "end": 11.260000228881836 + }, + { + "word": "learn", + "start": 11.260000228881836, + "end": 11.520000457763672 + }, + { + "word": "from", + "start": 11.520000457763672, + "end": 11.779999732971191 + }, + { + "word": "it.", + "start": 11.779999732971191, + "end": 12.460000038146973 + }, + { + "word": "That's", + "start": 12.460000038146973, + "end": 12.899999618530273 + }, + { + "word": "code", + "start": 12.899999618530273, + "end": 13.260000228881836 + }, + { + "word": "mode", + "start": 13.260000228881836, + "end": 13.640000343322754 + }, + { + "word": "git.", + "start": 13.640000343322754, + "end": 14.15999984741211 + } + ] + }, + "hook": { + "file": "voiceover/hook.mp3", + "hash": "4d37c8ff1a40259b", + "text": "We used an open source data analytics benchmark with the same four hundred and fifty tasks. Accuracy went from thirty-two percent to forty-six. On the hardest tasks, from twenty-three to almost thirty-nine. The only thing we added was memory using Artifacts.", + "seconds": 18.048, + "words": [ + { + "word": "We", + "start": 0, + "end": 0.23999999463558197 + }, + { + "word": "used", + "start": 0.23999999463558197, + "end": 0.5799999833106995 + }, + { + "word": "an", + "start": 0.5799999833106995, + "end": 0.7200000286102295 + }, + { + "word": "open", + "start": 0.7200000286102295, + "end": 0.9800000190734863 + }, + { + "word": "source", + "start": 0.9800000190734863, + "end": 1.2999999523162842 + }, + { + "word": "data", + "start": 1.2999999523162842, + "end": 1.7400000095367432 + }, + { + "word": "analytics", + "start": 1.7400000095367432, + "end": 2.259999990463257 + }, + { + "word": "benchmark", + "start": 2.259999990463257, + "end": 2.799999952316284 + }, + { + "word": "with", + "start": 2.799999952316284, + "end": 3.2200000286102295 + }, + { + "word": "the", + "start": 3.2200000286102295, + "end": 3.380000114440918 + }, + { + "word": "same", + "start": 3.380000114440918, + "end": 3.640000104904175 + }, + { + "word": "450", + "start": 3.640000104904175, + "end": 4.340000152587891 + }, + { + "word": "tasks.", + "start": 4.340000152587891, + "end": 6.239999771118164 + }, + { + "word": "Accuracy", + "start": 6.239999771118164, + "end": 6.920000076293945 + }, + { + "word": "went", + "start": 6.920000076293945, + "end": 7.159999847412109 + }, + { + "word": "from", + "start": 7.159999847412109, + "end": 7.400000095367432 + }, + { + "word": "32", + "start": 7.400000095367432, + "end": 7.860000133514404 + }, + { + "word": "%", + "start": 7.860000133514404, + "end": 8.319999694824219 + }, + { + "word": "to", + "start": 8.319999694824219, + "end": 8.760000228881836 + }, + { + "word": "46,", + "start": 8.760000228881836, + "end": 10.15999984741211 + }, + { + "word": "on", + "start": 10.15999984741211, + "end": 10.420000076293945 + }, + { + "word": "the", + "start": 10.420000076293945, + "end": 10.5600004196167 + }, + { + "word": "hardest", + "start": 10.5600004196167, + "end": 10.819999694824219 + }, + { + "word": "tasks", + "start": 10.819999694824219, + "end": 11.380000114440918 + }, + { + "word": "from", + "start": 11.380000114440918, + "end": 11.960000038146973 + }, + { + "word": "23", + "start": 11.960000038146973, + "end": 12.539999961853027 + }, + { + "word": "to", + "start": 12.539999961853027, + "end": 13.079999923706055 + }, + { + "word": "almost", + "start": 13.079999923706055, + "end": 13.420000076293945 + }, + { + "word": "39.", + "start": 13.420000076293945, + "end": 14.779999732971191 + }, + { + "word": "The", + "start": 14.779999732971191, + "end": 14.979999542236328 + }, + { + "word": "only", + "start": 14.979999542236328, + "end": 15.199999809265137 + }, + { + "word": "thing", + "start": 15.199999809265137, + "end": 15.4399995803833 + }, + { + "word": "we", + "start": 15.4399995803833, + "end": 15.619999885559082 + }, + { + "word": "added", + "start": 15.619999885559082, + "end": 15.920000076293945 + }, + { + "word": "was", + "start": 15.920000076293945, + "end": 16.280000686645508 + }, + { + "word": "memory", + "start": 16.280000686645508, + "end": 16.639999389648438 + }, + { + "word": "using", + "start": 16.639999389648438, + "end": 17.100000381469727 + }, + { + "word": "artifacts.", + "start": 17.100000381469727, + "end": 18.020000457763672 + } + ] + }, + "vanish": { + "file": "voiceover/vanish.mp3", + "hash": "a7ee048f6dd2494d", + "text": "Today, every Code Mode agent writes code, runs it, gets an answer, and the code is gone. A thousand agents solve similar problems hundreds of times, even if they've seen it before.", + "seconds": 13.848, + "words": [ + { + "word": "Today,", + "start": 0, + "end": 1.0399999618530273 + }, + { + "word": "every", + "start": 1.0399999618530273, + "end": 1.340000033378601 + }, + { + "word": "code", + "start": 1.340000033378601, + "end": 1.6200000047683716 + }, + { + "word": "mode", + "start": 1.6200000047683716, + "end": 1.8799999952316284 + }, + { + "word": "agent", + "start": 1.8799999952316284, + "end": 2.319999933242798 + }, + { + "word": "writes", + "start": 2.319999933242798, + "end": 2.8399999141693115 + }, + { + "word": "code,", + "start": 2.8399999141693115, + "end": 4.059999942779541 + }, + { + "word": "runs", + "start": 4.059999942779541, + "end": 4.28000020980835 + }, + { + "word": "it,", + "start": 4.28000020980835, + "end": 5.059999942779541 + }, + { + "word": "gets", + "start": 5.059999942779541, + "end": 5.21999979019165 + }, + { + "word": "an", + "start": 5.21999979019165, + "end": 5.5 + }, + { + "word": "answer,", + "start": 5.5, + "end": 6.340000152587891 + }, + { + "word": "and", + "start": 6.340000152587891, + "end": 6.579999923706055 + }, + { + "word": "the", + "start": 6.579999923706055, + "end": 6.679999828338623 + }, + { + "word": "code", + "start": 6.679999828338623, + "end": 7 + }, + { + "word": "is", + "start": 7, + "end": 7.260000228881836 + }, + { + "word": "gone.", + "start": 7.260000228881836, + "end": 8.300000190734863 + }, + { + "word": "A", + "start": 8.300000190734863, + "end": 8.380000114440918 + }, + { + "word": "thousand", + "start": 8.380000114440918, + "end": 8.760000228881836 + }, + { + "word": "agents", + "start": 8.760000228881836, + "end": 9.260000228881836 + }, + { + "word": "saw", + "start": 9.260000228881836, + "end": 9.5600004196167 + }, + { + "word": "similar", + "start": 9.5600004196167, + "end": 10.020000457763672 + }, + { + "word": "problems", + "start": 10.020000457763672, + "end": 10.5600004196167 + }, + { + "word": "hundreds", + "start": 10.5600004196167, + "end": 11.0600004196167 + }, + { + "word": "of", + "start": 11.0600004196167, + "end": 11.279999732971191 + }, + { + "word": "times,", + "start": 11.279999732971191, + "end": 12.260000228881836 + }, + { + "word": "even", + "start": 12.260000228881836, + "end": 12.520000457763672 + }, + { + "word": "if", + "start": 12.520000457763672, + "end": 12.680000305175781 + }, + { + "word": "they've", + "start": 12.680000305175781, + "end": 12.920000076293945 + }, + { + "word": "seen", + "start": 12.920000076293945, + "end": 13.100000381469727 + }, + { + "word": "it", + "start": 13.100000381469727, + "end": 13.239999771118164 + }, + { + "word": "before.", + "start": 13.239999771118164, + "end": 13.819999694824219 + } + ] + }, + "code-mode": { + "file": "voiceover/code-mode.mp3", + "hash": "6f7bd8bfb0777b37", + "text": "First, let's review Cloudflare's Code Mode. Agents don't call tools one at a time, sending every result back through the model: They write one program against the tools and run it in a fresh Worker isolate. That program is a complete record of how the agent solved the problem.", + "seconds": 18.936, + "words": [ + { + "word": "First,", + "start": 0, + "end": 0.9599999785423279 + }, + { + "word": "let's", + "start": 0.9599999785423279, + "end": 1.4199999570846558 + }, + { + "word": "review", + "start": 1.4199999570846558, + "end": 1.7599999904632568 + }, + { + "word": "CloudFlares", + "start": 1.7599999904632568, + "end": 2.4800000190734863 + }, + { + "word": "Code", + "start": 2.4800000190734863, + "end": 2.9000000953674316 + }, + { + "word": "Mode.", + "start": 2.9000000953674316, + "end": 4 + }, + { + "word": "Agents", + "start": 4, + "end": 4.400000095367432 + }, + { + "word": "don't", + "start": 4.400000095367432, + "end": 4.699999809265137 + }, + { + "word": "call", + "start": 4.699999809265137, + "end": 4.860000133514404 + }, + { + "word": "tools", + "start": 4.860000133514404, + "end": 5.21999979019165 + }, + { + "word": "one", + "start": 5.21999979019165, + "end": 5.559999942779541 + }, + { + "word": "at", + "start": 5.559999942779541, + "end": 5.679999828338623 + }, + { + "word": "a", + "start": 5.679999828338623, + "end": 5.820000171661377 + }, + { + "word": "time,", + "start": 5.820000171661377, + "end": 6.559999942779541 + }, + { + "word": "sending", + "start": 6.559999942779541, + "end": 6.940000057220459 + }, + { + "word": "every", + "start": 6.940000057220459, + "end": 7.300000190734863 + }, + { + "word": "result", + "start": 7.300000190734863, + "end": 7.639999866485596 + }, + { + "word": "back", + "start": 7.639999866485596, + "end": 7.960000038146973 + }, + { + "word": "through", + "start": 7.960000038146973, + "end": 8.260000228881836 + }, + { + "word": "the", + "start": 8.260000228881836, + "end": 8.399999618530273 + }, + { + "word": "model.", + "start": 8.399999618530273, + "end": 9.239999771118164 + }, + { + "word": "They", + "start": 9.239999771118164, + "end": 9.479999542236328 + }, + { + "word": "write", + "start": 9.479999542236328, + "end": 9.699999809265137 + }, + { + "word": "one", + "start": 9.699999809265137, + "end": 10 + }, + { + "word": "program", + "start": 10, + "end": 10.479999542236328 + }, + { + "word": "against", + "start": 10.479999542236328, + "end": 10.899999618530273 + }, + { + "word": "the", + "start": 10.899999618530273, + "end": 11.119999885559082 + }, + { + "word": "tools", + "start": 11.119999885559082, + "end": 11.4399995803833 + }, + { + "word": "and", + "start": 11.4399995803833, + "end": 12.0600004196167 + }, + { + "word": "run", + "start": 12.0600004196167, + "end": 12.279999732971191 + }, + { + "word": "it", + "start": 12.279999732971191, + "end": 12.4399995803833 + }, + { + "word": "in", + "start": 12.4399995803833, + "end": 12.579999923706055 + }, + { + "word": "a", + "start": 12.579999923706055, + "end": 12.680000305175781 + }, + { + "word": "fresh", + "start": 12.680000305175781, + "end": 12.979999542236328 + }, + { + "word": "worker", + "start": 12.979999542236328, + "end": 13.399999618530273 + }, + { + "word": "isolate.", + "start": 13.399999618530273, + "end": 14.680000305175781 + }, + { + "word": "That", + "start": 14.680000305175781, + "end": 14.979999542236328 + }, + { + "word": "program", + "start": 14.979999542236328, + "end": 15.479999542236328 + }, + { + "word": "is", + "start": 15.479999542236328, + "end": 15.739999771118164 + }, + { + "word": "a", + "start": 15.739999771118164, + "end": 15.880000114440918 + }, + { + "word": "complete", + "start": 15.880000114440918, + "end": 16.219999313354492 + }, + { + "word": "record", + "start": 16.219999313354492, + "end": 16.700000762939453 + }, + { + "word": "of", + "start": 16.700000762939453, + "end": 16.959999084472656 + }, + { + "word": "how", + "start": 16.959999084472656, + "end": 17.15999984741211 + }, + { + "word": "the", + "start": 17.15999984741211, + "end": 17.3799991607666 + }, + { + "word": "agent", + "start": 17.3799991607666, + "end": 17.760000228881836 + }, + { + "word": "solve", + "start": 17.760000228881836, + "end": 18.1200008392334 + }, + { + "word": "the", + "start": 18.1200008392334, + "end": 18.3799991607666 + }, + { + "word": "problem.", + "start": 18.3799991607666, + "end": 18.899999618530273 + } + ] + }, + "gap": { + "file": "voiceover/gap.mp3", + "hash": "eef311160da318e7", + "text": "But the isolate is thrown away after every run, and the code goes with it. When similar tasks are given to the agent again, it forgets.", + "seconds": 8.664, + "words": [ + { + "word": "that", + "start": 0, + "end": 0.20000000298023224 + }, + { + "word": "the", + "start": 0.20000000298023224, + "end": 0.3799999952316284 + }, + { + "word": "isolate", + "start": 0.3799999952316284, + "end": 0.6800000071525574 + }, + { + "word": "is", + "start": 0.6800000071525574, + "end": 1.0199999809265137 + }, + { + "word": "thrown", + "start": 1.0199999809265137, + "end": 1.2400000095367432 + }, + { + "word": "away", + "start": 1.2400000095367432, + "end": 1.559999942779541 + }, + { + "word": "after", + "start": 1.559999942779541, + "end": 1.8799999952316284 + }, + { + "word": "every", + "start": 1.8799999952316284, + "end": 2.2200000286102295 + }, + { + "word": "run", + "start": 2.2200000286102295, + "end": 2.4600000381469727 + }, + { + "word": "and", + "start": 2.4600000381469727, + "end": 3.0399999618530273 + }, + { + "word": "the", + "start": 3.0399999618530273, + "end": 3.1600000858306885 + }, + { + "word": "code", + "start": 3.1600000858306885, + "end": 3.380000114440918 + }, + { + "word": "goes", + "start": 3.380000114440918, + "end": 3.640000104904175 + }, + { + "word": "with", + "start": 3.640000104904175, + "end": 3.880000114440918 + }, + { + "word": "it.", + "start": 3.880000114440918, + "end": 4.659999847412109 + }, + { + "word": "When", + "start": 4.659999847412109, + "end": 4.860000133514404 + }, + { + "word": "similar", + "start": 4.860000133514404, + "end": 5.260000228881836 + }, + { + "word": "tasks", + "start": 5.260000228881836, + "end": 5.639999866485596 + }, + { + "word": "are", + "start": 5.639999866485596, + "end": 5.960000038146973 + }, + { + "word": "given", + "start": 5.960000038146973, + "end": 6.199999809265137 + }, + { + "word": "to", + "start": 6.199999809265137, + "end": 6.400000095367432 + }, + { + "word": "the", + "start": 6.400000095367432, + "end": 6.559999942779541 + }, + { + "word": "agent", + "start": 6.559999942779541, + "end": 6.820000171661377 + }, + { + "word": "again,", + "start": 6.820000171661377, + "end": 7.760000228881836 + }, + { + "word": "it", + "start": 7.760000228881836, + "end": 7.900000095367432 + }, + { + "word": "forgets.", + "start": 7.900000095367432, + "end": 8.640000343322754 + } + ] + }, + "code-memory": { + "file": "voiceover/code-memory.mp3", + "hash": "459162f3101d3c1d", + "text": "So we keep it in a Cloudflare Artifact git repository. Every execution becomes a commit on that agent's own personal repo: the code, every tool call and its result, and the outcome. One repo per agent, and one writer per repo. Nothing to lock, nothing to merge.", + "seconds": 20.424, + "words": [ + { + "word": "So", + "start": 0, + "end": 0.36000001430511475 + }, + { + "word": "we", + "start": 0.36000001430511475, + "end": 0.5600000023841858 + }, + { + "word": "keep", + "start": 0.5600000023841858, + "end": 0.7799999713897705 + }, + { + "word": "it", + "start": 0.7799999713897705, + "end": 0.9800000190734863 + }, + { + "word": "in", + "start": 0.9800000190734863, + "end": 1.1799999475479126 + }, + { + "word": "a", + "start": 1.1799999475479126, + "end": 1.3200000524520874 + }, + { + "word": "Cloud", + "start": 1.3200000524520874, + "end": 1.6200000047683716 + }, + { + "word": "Flare", + "start": 1.6200000047683716, + "end": 2.0799999237060547 + }, + { + "word": "Artifact", + "start": 2.0799999237060547, + "end": 2.799999952316284 + }, + { + "word": "Git", + "start": 2.799999952316284, + "end": 3.259999990463257 + }, + { + "word": "repository.", + "start": 3.259999990463257, + "end": 4.760000228881836 + }, + { + "word": "Every", + "start": 4.760000228881836, + "end": 5.039999961853027 + }, + { + "word": "execution", + "start": 5.039999961853027, + "end": 5.71999979019165 + }, + { + "word": "becomes", + "start": 5.71999979019165, + "end": 6.159999847412109 + }, + { + "word": "a", + "start": 6.159999847412109, + "end": 6.400000095367432 + }, + { + "word": "commit", + "start": 6.400000095367432, + "end": 6.699999809265137 + }, + { + "word": "on", + "start": 6.699999809265137, + "end": 6.980000019073486 + }, + { + "word": "that", + "start": 6.980000019073486, + "end": 7.199999809265137 + }, + { + "word": "agent's", + "start": 7.199999809265137, + "end": 7.78000020980835 + }, + { + "word": "own", + "start": 7.78000020980835, + "end": 7.960000038146973 + }, + { + "word": "personal", + "start": 7.960000038146973, + "end": 8.479999542236328 + }, + { + "word": "repo,", + "start": 8.479999542236328, + "end": 9.319999694824219 + }, + { + "word": "the", + "start": 9.319999694824219, + "end": 9.520000457763672 + }, + { + "word": "code,", + "start": 9.520000457763672, + "end": 10.279999732971191 + }, + { + "word": "every", + "start": 10.279999732971191, + "end": 10.65999984741211 + }, + { + "word": "tool", + "start": 10.65999984741211, + "end": 10.9399995803833 + }, + { + "word": "call,", + "start": 10.9399995803833, + "end": 11.600000381469727 + }, + { + "word": "and", + "start": 11.600000381469727, + "end": 11.899999618530273 + }, + { + "word": "its", + "start": 11.899999618530273, + "end": 12.119999885559082 + }, + { + "word": "results,", + "start": 12.119999885559082, + "end": 12.880000114440918 + }, + { + "word": "and", + "start": 12.880000114440918, + "end": 13.220000267028809 + }, + { + "word": "the", + "start": 13.220000267028809, + "end": 13.399999618530273 + }, + { + "word": "outcome.", + "start": 13.399999618530273, + "end": 14.460000038146973 + }, + { + "word": "One", + "start": 14.460000038146973, + "end": 14.619999885559082 + }, + { + "word": "repo", + "start": 14.619999885559082, + "end": 14.960000038146973 + }, + { + "word": "per", + "start": 14.960000038146973, + "end": 15.220000267028809 + }, + { + "word": "agent,", + "start": 15.220000267028809, + "end": 16.059999465942383 + }, + { + "word": "and", + "start": 16.059999465942383, + "end": 16.299999237060547 + }, + { + "word": "one", + "start": 16.299999237060547, + "end": 16.520000457763672 + }, + { + "word": "writer", + "start": 16.520000457763672, + "end": 16.84000015258789 + }, + { + "word": "per", + "start": 16.84000015258789, + "end": 17.1200008392334 + }, + { + "word": "repo.", + "start": 17.1200008392334, + "end": 18.1200008392334 + }, + { + "word": "Nothing", + "start": 18.1200008392334, + "end": 18.399999618530273 + }, + { + "word": "to", + "start": 18.399999618530273, + "end": 18.6200008392334 + }, + { + "word": "lock,", + "start": 18.6200008392334, + "end": 19.31999969482422 + }, + { + "word": "nothing", + "start": 19.31999969482422, + "end": 19.639999389648438 + }, + { + "word": "to", + "start": 19.639999389648438, + "end": 19.8799991607666 + }, + { + "word": "merge.", + "start": 19.8799991607666, + "end": 20.399999618530273 + } + ] + }, + "under-the-hood": { + "file": "voiceover/under-the-hood.mp3", + "hash": "4964807411f4df2b", + "text": "Under the hood, a connector hooks the end of every execution in the Cloudflare SDK. The run lands in a SQLite outbox inside the agent's Durable Object, and git pushes it to Artifacts. Any git client can read an agent's history and use that to learn.", + "seconds": 16.704, + "words": [ + { + "word": "Under", + "start": 0, + "end": 0.3199999928474426 + }, + { + "word": "the", + "start": 0.3199999928474426, + "end": 0.5400000214576721 + }, + { + "word": "hood,", + "start": 0.5400000214576721, + "end": 0.9599999785423279 + }, + { + "word": "a", + "start": 0.9599999785423279, + "end": 1.059999942779541 + }, + { + "word": "connector", + "start": 1.059999942779541, + "end": 1.4199999570846558 + }, + { + "word": "hooks", + "start": 1.4199999570846558, + "end": 1.6799999475479126 + }, + { + "word": "the", + "start": 1.6799999475479126, + "end": 1.9600000381469727 + }, + { + "word": "end", + "start": 1.9600000381469727, + "end": 2.2200000286102295 + }, + { + "word": "of", + "start": 2.2200000286102295, + "end": 2.4000000953674316 + }, + { + "word": "every", + "start": 2.4000000953674316, + "end": 2.799999952316284 + }, + { + "word": "execution", + "start": 2.799999952316284, + "end": 3.4000000953674316 + }, + { + "word": "in", + "start": 3.4000000953674316, + "end": 3.740000009536743 + }, + { + "word": "the", + "start": 3.740000009536743, + "end": 3.859999895095825 + }, + { + "word": "CloudFlayer", + "start": 3.859999895095825, + "end": 4.539999961853027 + }, + { + "word": "SDK.", + "start": 4.539999961853027, + "end": 5.960000038146973 + }, + { + "word": "The", + "start": 5.960000038146973, + "end": 6.260000228881836 + }, + { + "word": "run", + "start": 6.260000228881836, + "end": 6.480000019073486 + }, + { + "word": "lands", + "start": 6.480000019073486, + "end": 6.760000228881836 + }, + { + "word": "in", + "start": 6.760000228881836, + "end": 6.960000038146973 + }, + { + "word": "a", + "start": 6.960000038146973, + "end": 7.099999904632568 + }, + { + "word": "SQLite", + "start": 7.099999904632568, + "end": 7.639999866485596 + }, + { + "word": "outbox", + "start": 7.639999866485596, + "end": 8.0600004196167 + }, + { + "word": "inside", + "start": 8.0600004196167, + "end": 8.600000381469727 + }, + { + "word": "the", + "start": 8.600000381469727, + "end": 8.920000076293945 + }, + { + "word": "agent's", + "start": 8.920000076293945, + "end": 9.34000015258789 + }, + { + "word": "durable", + "start": 9.34000015258789, + "end": 9.619999885559082 + }, + { + "word": "object", + "start": 9.619999885559082, + "end": 10.140000343322754 + }, + { + "word": "and", + "start": 10.140000343322754, + "end": 10.760000228881836 + }, + { + "word": "Git", + "start": 10.760000228881836, + "end": 10.960000038146973 + }, + { + "word": "pushes", + "start": 10.960000038146973, + "end": 11.34000015258789 + }, + { + "word": "it", + "start": 11.34000015258789, + "end": 11.5600004196167 + }, + { + "word": "to", + "start": 11.5600004196167, + "end": 11.739999771118164 + }, + { + "word": "artifacts.", + "start": 11.739999771118164, + "end": 12.9399995803833 + }, + { + "word": "Any", + "start": 12.9399995803833, + "end": 13.220000267028809 + }, + { + "word": "Git", + "start": 13.220000267028809, + "end": 13.479999542236328 + }, + { + "word": "client", + "start": 13.479999542236328, + "end": 13.920000076293945 + }, + { + "word": "can", + "start": 13.920000076293945, + "end": 14.15999984741211 + }, + { + "word": "read", + "start": 14.15999984741211, + "end": 14.359999656677246 + }, + { + "word": "an", + "start": 14.359999656677246, + "end": 14.539999961853027 + }, + { + "word": "agent's", + "start": 14.539999961853027, + "end": 15 + }, + { + "word": "history", + "start": 15, + "end": 15.34000015258789 + }, + { + "word": "and", + "start": 15.34000015258789, + "end": 15.600000381469727 + }, + { + "word": "use", + "start": 15.600000381469727, + "end": 15.819999694824219 + }, + { + "word": "that", + "start": 15.819999694824219, + "end": 16.059999465942383 + }, + { + "word": "to", + "start": 16.059999465942383, + "end": 16.280000686645508 + }, + { + "word": "learn.", + "start": 16.280000686645508, + "end": 16.68000030517578 + } + ] + }, + "repo": { + "file": "voiceover/repo.mp3", + "hash": "e0d4b20fb9f18937", + "seconds": 8.064, + "words": [ + { + "word": "Clone", + "start": 0, + "end": 0.36000001430511475 + }, + { + "word": "an", + "start": 0.36000001430511475, + "end": 0.5600000023841858 + }, + { + "word": "agent's", + "start": 0.5600000023841858, + "end": 1.059999942779541 + }, + { + "word": "repo", + "start": 1.059999942779541, + "end": 1.2999999523162842 + }, + { + "word": "and", + "start": 1.2999999523162842, + "end": 1.940000057220459 + }, + { + "word": "its", + "start": 1.940000057220459, + "end": 2.180000066757202 + }, + { + "word": "log", + "start": 2.180000066757202, + "end": 2.440000057220459 + }, + { + "word": "is", + "start": 2.440000057220459, + "end": 2.7799999713897705 + }, + { + "word": "the", + "start": 2.7799999713897705, + "end": 2.9200000762939453 + }, + { + "word": "agent's", + "start": 2.9200000762939453, + "end": 3.440000057220459 + }, + { + "word": "trajectory.", + "start": 3.440000057220459, + "end": 4.559999942779541 + }, + { + "word": "Every", + "start": 4.559999942779541, + "end": 4.940000057220459 + }, + { + "word": "attempt,", + "start": 4.940000057220459, + "end": 5.880000114440918 + }, + { + "word": "every", + "start": 5.880000114440918, + "end": 6.139999866485596 + }, + { + "word": "fix,", + "start": 6.139999866485596, + "end": 7.139999866485596 + }, + { + "word": "every", + "start": 7.139999866485596, + "end": 7.440000057220459 + }, + { + "word": "answer.", + "start": 7.440000057220459, + "end": 8.039999961853027 + } + ], + "text": "Clone an agent's repo, and its log is the agent's trajectory: every attempt, every fix, every answer." + }, + "scale": { + "file": "voiceover/scale.mp3", + "hash": "bb2d598015c04775", + "seconds": 7.344, + "words": [ + { + "word": "Artifacts", + "start": 0.20000000298023224, + "end": 0.7799999713897705 + }, + { + "word": "is", + "start": 0.7799999713897705, + "end": 0.9800000190734863 + }, + { + "word": "built", + "start": 0.9800000190734863, + "end": 1.2200000286102295 + }, + { + "word": "for", + "start": 1.2200000286102295, + "end": 1.5 + }, + { + "word": "tens", + "start": 1.5, + "end": 1.7799999713897705 + }, + { + "word": "of", + "start": 1.7799999713897705, + "end": 2.0799999237060547 + }, + { + "word": "millions", + "start": 2.0799999237060547, + "end": 2.380000114440918 + }, + { + "word": "of", + "start": 2.380000114440918, + "end": 2.680000066757202 + }, + { + "word": "repos,", + "start": 2.680000066757202, + "end": 3.5399999618530273 + }, + { + "word": "so", + "start": 3.5399999618530273, + "end": 3.799999952316284 + }, + { + "word": "every", + "start": 3.799999952316284, + "end": 4.099999904632568 + }, + { + "word": "agent", + "start": 4.099999904632568, + "end": 4.460000038146973 + }, + { + "word": "debts", + "start": 4.460000038146973, + "end": 4.71999979019165 + }, + { + "word": "its", + "start": 4.71999979019165, + "end": 4.940000057220459 + }, + { + "word": "own,", + "start": 4.940000057220459, + "end": 5.639999866485596 + }, + { + "word": "and", + "start": 5.639999866485596, + "end": 5.71999979019165 + }, + { + "word": "they", + "start": 5.71999979019165, + "end": 5.840000152587891 + }, + { + "word": "all", + "start": 5.840000152587891, + "end": 6.039999961853027 + }, + { + "word": "write", + "start": 6.039999961853027, + "end": 6.239999771118164 + }, + { + "word": "at", + "start": 6.239999771118164, + "end": 6.460000038146973 + }, + { + "word": "the", + "start": 6.460000038146973, + "end": 6.559999942779541 + }, + { + "word": "same", + "start": 6.559999942779541, + "end": 6.820000171661377 + }, + { + "word": "time.", + "start": 6.820000171661377, + "end": 7.320000171661377 + } + ], + "text": "Artifacts is built for tens of millions of repos, so every agent gets its own, and they all write at the same time." + }, + "recall": { + "file": "voiceover/recall.mp3", + "hash": "dd2388e0f7d4f8ac", + "text": "Here's a simple way agents can use Artifacts to learn. When a run produces an answer, Workers AI embeds the question and the code into Cloudflare Vectorize. The next agent with a similar question searches for similar solutions and uses that for better context.", + "seconds": 18.624, + "words": [ + { + "word": "Here's", + "start": 0, + "end": 0.46000000834465027 + }, + { + "word": "a", + "start": 0.46000000834465027, + "end": 0.5400000214576721 + }, + { + "word": "simple", + "start": 0.5400000214576721, + "end": 0.9200000166893005 + }, + { + "word": "way", + "start": 0.9200000166893005, + "end": 1.2599999904632568 + }, + { + "word": "agents", + "start": 1.2599999904632568, + "end": 1.899999976158142 + }, + { + "word": "can", + "start": 1.899999976158142, + "end": 2.2200000286102295 + }, + { + "word": "use", + "start": 2.2200000286102295, + "end": 2.5399999618530273 + }, + { + "word": "artifacts", + "start": 2.5399999618530273, + "end": 2.940000057220459 + }, + { + "word": "to", + "start": 2.940000057220459, + "end": 3.380000114440918 + }, + { + "word": "learn.", + "start": 3.380000114440918, + "end": 4.260000228881836 + }, + { + "word": "When", + "start": 4.260000228881836, + "end": 4.480000019073486 + }, + { + "word": "a", + "start": 4.480000019073486, + "end": 4.579999923706055 + }, + { + "word": "run", + "start": 4.579999923706055, + "end": 4.760000228881836 + }, + { + "word": "produces", + "start": 4.760000228881836, + "end": 5.21999979019165 + }, + { + "word": "an", + "start": 5.21999979019165, + "end": 5.5 + }, + { + "word": "answer,", + "start": 5.5, + "end": 6.380000114440918 + }, + { + "word": "workers", + "start": 6.380000114440918, + "end": 6.579999923706055 + }, + { + "word": "AI", + "start": 6.579999923706055, + "end": 7 + }, + { + "word": "embeds", + "start": 7, + "end": 7.820000171661377 + }, + { + "word": "the", + "start": 7.820000171661377, + "end": 7.940000057220459 + }, + { + "word": "question", + "start": 7.940000057220459, + "end": 8.399999618530273 + }, + { + "word": "and", + "start": 8.399999618530273, + "end": 8.779999732971191 + }, + { + "word": "the", + "start": 8.779999732971191, + "end": 8.9399995803833 + }, + { + "word": "code", + "start": 8.9399995803833, + "end": 9.260000228881836 + }, + { + "word": "into", + "start": 9.260000228881836, + "end": 9.65999984741211 + }, + { + "word": "CloudFlare", + "start": 9.65999984741211, + "end": 10.420000076293945 + }, + { + "word": "vectorize.", + "start": 10.420000076293945, + "end": 11.760000228881836 + }, + { + "word": "The", + "start": 11.760000228881836, + "end": 12.0600004196167 + }, + { + "word": "next", + "start": 12.0600004196167, + "end": 12.279999732971191 + }, + { + "word": "agent", + "start": 12.279999732971191, + "end": 12.699999809265137 + }, + { + "word": "with", + "start": 12.699999809265137, + "end": 12.9399995803833 + }, + { + "word": "a", + "start": 12.9399995803833, + "end": 13.039999961853027 + }, + { + "word": "similar", + "start": 13.039999961853027, + "end": 13.359999656677246 + }, + { + "word": "question", + "start": 13.359999656677246, + "end": 13.920000076293945 + }, + { + "word": "searches", + "start": 13.920000076293945, + "end": 14.65999984741211 + }, + { + "word": "for", + "start": 14.65999984741211, + "end": 14.960000038146973 + }, + { + "word": "similar", + "start": 14.960000038146973, + "end": 15.380000114440918 + }, + { + "word": "solutions", + "start": 15.380000114440918, + "end": 16 + }, + { + "word": "and", + "start": 16, + "end": 16.639999389648438 + }, + { + "word": "uses", + "start": 16.639999389648438, + "end": 16.940000534057617 + }, + { + "word": "that", + "start": 16.940000534057617, + "end": 17.260000228881836 + }, + { + "word": "for", + "start": 17.260000228881836, + "end": 17.5 + }, + { + "word": "better", + "start": 17.5, + "end": 17.739999771118164 + }, + { + "word": "context.", + "start": 17.739999771118164, + "end": 18.600000381469727 + } + ] + }, + "walkthrough": { + "file": "voiceover/walkthrough.mp3", + "hash": "b7d34eef4ff8e26f", + "text": "Let's walk through an example: Cloudflare's wall of lava lamps. Agent Michelle asks how many lamps are flowing. With no memory, Michelle has to discover that the wall is paginated. Agent Matthew asks about the red lamps, starts from Michelle's run, and already knows to walk every page.", + "seconds": 19.056, + "words": [ + { + "word": "Let's", + "start": 0, + "end": 0.36000001430511475 + }, + { + "word": "walk", + "start": 0.36000001430511475, + "end": 0.5199999809265137 + }, + { + "word": "through", + "start": 0.5199999809265137, + "end": 0.7799999713897705 + }, + { + "word": "an", + "start": 0.7799999713897705, + "end": 0.9200000166893005 + }, + { + "word": "example.", + "start": 0.9200000166893005, + "end": 2.0799999237060547 + }, + { + "word": "Cloudflare's", + "start": 2.0799999237060547, + "end": 2.619999885559082 + }, + { + "word": "wall", + "start": 2.619999885559082, + "end": 2.799999952316284 + }, + { + "word": "of", + "start": 2.799999952316284, + "end": 3.140000104904175 + }, + { + "word": "lava", + "start": 3.140000104904175, + "end": 3.4000000953674316 + }, + { + "word": "lamps.", + "start": 3.4000000953674316, + "end": 4.639999866485596 + }, + { + "word": "Agent", + "start": 4.639999866485596, + "end": 4.880000114440918 + }, + { + "word": "Michelle", + "start": 4.880000114440918, + "end": 5.099999904632568 + }, + { + "word": "asks", + "start": 5.099999904632568, + "end": 5.71999979019165 + }, + { + "word": "how", + "start": 5.71999979019165, + "end": 6.079999923706055 + }, + { + "word": "many", + "start": 6.079999923706055, + "end": 6.28000020980835 + }, + { + "word": "lamps", + "start": 6.28000020980835, + "end": 6.539999961853027 + }, + { + "word": "are", + "start": 6.539999961853027, + "end": 6.739999771118164 + }, + { + "word": "flowing.", + "start": 6.739999771118164, + "end": 7.739999771118164 + }, + { + "word": "With", + "start": 7.739999771118164, + "end": 8 + }, + { + "word": "no", + "start": 8, + "end": 8.199999809265137 + }, + { + "word": "memory,", + "start": 8.199999809265137, + "end": 9.100000381469727 + }, + { + "word": "Michelle", + "start": 9.100000381469727, + "end": 9.319999694824219 + }, + { + "word": "has", + "start": 9.319999694824219, + "end": 9.5600004196167 + }, + { + "word": "to", + "start": 9.5600004196167, + "end": 9.739999771118164 + }, + { + "word": "discover", + "start": 9.739999771118164, + "end": 10.180000305175781 + }, + { + "word": "that", + "start": 10.180000305175781, + "end": 10.5600004196167 + }, + { + "word": "the", + "start": 10.5600004196167, + "end": 10.680000305175781 + }, + { + "word": "wall", + "start": 10.680000305175781, + "end": 10.920000076293945 + }, + { + "word": "is", + "start": 10.920000076293945, + "end": 11.180000305175781 + }, + { + "word": "paginated.", + "start": 11.180000305175781, + "end": 12.5 + }, + { + "word": "Agent", + "start": 12.5, + "end": 12.819999694824219 + }, + { + "word": "Matthew", + "start": 12.819999694824219, + "end": 13.180000305175781 + }, + { + "word": "asks", + "start": 13.180000305175781, + "end": 13.619999885559082 + }, + { + "word": "about", + "start": 13.619999885559082, + "end": 13.960000038146973 + }, + { + "word": "the", + "start": 13.960000038146973, + "end": 14.119999885559082 + }, + { + "word": "red", + "start": 14.119999885559082, + "end": 14.300000190734863 + }, + { + "word": "lamps,", + "start": 14.300000190734863, + "end": 15.199999809265137 + }, + { + "word": "starts", + "start": 15.199999809265137, + "end": 15.479999542236328 + }, + { + "word": "from", + "start": 15.479999542236328, + "end": 15.739999771118164 + }, + { + "word": "Michelle's", + "start": 15.739999771118164, + "end": 16.239999771118164 + }, + { + "word": "run,", + "start": 16.239999771118164, + "end": 17 + }, + { + "word": "and", + "start": 17, + "end": 17.079999923706055 + }, + { + "word": "already", + "start": 17.079999923706055, + "end": 17.399999618530273 + }, + { + "word": "knows", + "start": 17.399999618530273, + "end": 17.65999984741211 + }, + { + "word": "to", + "start": 17.65999984741211, + "end": 17.920000076293945 + }, + { + "word": "walk", + "start": 17.920000076293945, + "end": 18.15999984741211 + }, + { + "word": "every", + "start": 18.15999984741211, + "end": 18.520000457763672 + }, + { + "word": "page.", + "start": 18.520000457763672, + "end": 19.020000457763672 + } + ] + }, + "curve": { + "file": "voiceover/curve.mp3", + "hash": "2a88f36f166a9dc2", + "text": "At scale, we ran the DABstep benchmark: four hundred and fifty real multi-step data investigations over payments data. With no code stored in Artifacts, both arms cost the same. However, as Code Mode and Vectorize index more programs, the median cost per task drops to about a third, within the first few dozen tasks, and it stays there.", + "seconds": 23.496, + "words": [ + { + "word": "At", + "start": 0, + "end": 0.25999999046325684 + }, + { + "word": "scale,", + "start": 0.25999999046325684, + "end": 0.8600000143051147 + }, + { + "word": "we", + "start": 0.8600000143051147, + "end": 0.9399999976158142 + }, + { + "word": "ran", + "start": 0.9399999976158142, + "end": 1.1799999475479126 + }, + { + "word": "the", + "start": 1.1799999475479126, + "end": 1.3600000143051147 + }, + { + "word": "DAB", + "start": 1.3600000143051147, + "end": 1.6799999475479126 + }, + { + "word": "Step", + "start": 1.6799999475479126, + "end": 1.899999976158142 + }, + { + "word": "Benchmark,", + "start": 1.899999976158142, + "end": 3.119999885559082 + }, + { + "word": "450", + "start": 3.119999885559082, + "end": 4.019999980926514 + }, + { + "word": "real", + "start": 4.019999980926514, + "end": 4.599999904632568 + }, + { + "word": "multi", + "start": 4.599999904632568, + "end": 4.940000057220459 + }, + { + "word": "-step", + "start": 4.940000057220459, + "end": 5.21999979019165 + }, + { + "word": "data", + "start": 5.21999979019165, + "end": 5.599999904632568 + }, + { + "word": "investigations", + "start": 5.599999904632568, + "end": 6.380000114440918 + }, + { + "word": "over", + "start": 6.380000114440918, + "end": 6.78000020980835 + }, + { + "word": "payments", + "start": 6.78000020980835, + "end": 7.139999866485596 + }, + { + "word": "data,", + "start": 7.139999866485596, + "end": 8 + }, + { + "word": "with", + "start": 8, + "end": 8.239999771118164 + }, + { + "word": "no", + "start": 8.239999771118164, + "end": 8.479999542236328 + }, + { + "word": "code", + "start": 8.479999542236328, + "end": 8.779999732971191 + }, + { + "word": "stored", + "start": 8.779999732971191, + "end": 9.15999984741211 + }, + { + "word": "in", + "start": 9.15999984741211, + "end": 9.399999618530273 + }, + { + "word": "artifacts,", + "start": 9.399999618530273, + "end": 10.479999542236328 + }, + { + "word": "both", + "start": 10.479999542236328, + "end": 10.65999984741211 + }, + { + "word": "arms", + "start": 10.65999984741211, + "end": 11.079999923706055 + }, + { + "word": "cost", + "start": 11.079999923706055, + "end": 11.34000015258789 + }, + { + "word": "the", + "start": 11.34000015258789, + "end": 11.619999885559082 + }, + { + "word": "same.", + "start": 11.619999885559082, + "end": 12.460000038146973 + }, + { + "word": "However,", + "start": 12.460000038146973, + "end": 13.420000076293945 + }, + { + "word": "as", + "start": 13.420000076293945, + "end": 13.539999961853027 + }, + { + "word": "code", + "start": 13.539999961853027, + "end": 13.819999694824219 + }, + { + "word": "mode", + "start": 13.819999694824219, + "end": 14.140000343322754 + }, + { + "word": "and", + "start": 14.140000343322754, + "end": 14.420000076293945 + }, + { + "word": "vectorize", + "start": 14.420000076293945, + "end": 15.079999923706055 + }, + { + "word": "index", + "start": 15.079999923706055, + "end": 15.359999656677246 + }, + { + "word": "more", + "start": 15.359999656677246, + "end": 15.640000343322754 + }, + { + "word": "programs,", + "start": 15.640000343322754, + "end": 16.799999237060547 + }, + { + "word": "the", + "start": 16.799999237060547, + "end": 16.860000610351562 + }, + { + "word": "median", + "start": 16.860000610351562, + "end": 17.200000762939453 + }, + { + "word": "cost", + "start": 17.200000762939453, + "end": 17.579999923706055 + }, + { + "word": "per", + "start": 17.579999923706055, + "end": 17.8799991607666 + }, + { + "word": "task", + "start": 17.8799991607666, + "end": 18.200000762939453 + }, + { + "word": "drops", + "start": 18.200000762939453, + "end": 18.65999984741211 + }, + { + "word": "to", + "start": 18.65999984741211, + "end": 18.920000076293945 + }, + { + "word": "about", + "start": 18.920000076293945, + "end": 19.15999984741211 + }, + { + "word": "a", + "start": 19.15999984741211, + "end": 19.299999237060547 + }, + { + "word": "third", + "start": 19.299999237060547, + "end": 19.639999389648438 + }, + { + "word": "within", + "start": 19.639999389648438, + "end": 20.31999969482422 + }, + { + "word": "the", + "start": 20.31999969482422, + "end": 20.5 + }, + { + "word": "first", + "start": 20.5, + "end": 20.799999237060547 + }, + { + "word": "few", + "start": 20.799999237060547, + "end": 21.100000381469727 + }, + { + "word": "dozen", + "start": 21.100000381469727, + "end": 21.440000534057617 + }, + { + "word": "tasks,", + "start": 21.440000534057617, + "end": 22.479999542236328 + }, + { + "word": "and", + "start": 22.479999542236328, + "end": 22.600000381469727 + }, + { + "word": "it", + "start": 22.600000381469727, + "end": 22.700000762939453 + }, + { + "word": "stays", + "start": 22.700000762939453, + "end": 23 + }, + { + "word": "there.", + "start": 23, + "end": 23.459999084472656 + } + ] + }, + "accuracy": { + "file": "voiceover/accuracy.mp3", + "hash": "15be00d3acf1f36e", + "text": "And they're not just cheaper. They're right more often. Scored by DABstep: forty-six percent overall, up from thirty-two.", + "seconds": 8.568, + "words": [ + { + "word": "And", + "start": 0.23999999463558197, + "end": 0.5199999809265137 + }, + { + "word": "they're", + "start": 0.5199999809265137, + "end": 0.6200000047683716 + }, + { + "word": "not", + "start": 0.6200000047683716, + "end": 0.7799999713897705 + }, + { + "word": "just", + "start": 0.7799999713897705, + "end": 1.0800000429153442 + }, + { + "word": "cheaper.", + "start": 1.0800000429153442, + "end": 2.1600000858306885 + }, + { + "word": "They're", + "start": 2.1600000858306885, + "end": 2.319999933242798 + }, + { + "word": "right", + "start": 2.319999933242798, + "end": 2.5199999809265137 + }, + { + "word": "more", + "start": 2.5199999809265137, + "end": 2.740000009536743 + }, + { + "word": "often.", + "start": 2.740000009536743, + "end": 3.740000009536743 + }, + { + "word": "Scored", + "start": 3.740000009536743, + "end": 4.039999961853027 + }, + { + "word": "by", + "start": 4.039999961853027, + "end": 4.28000020980835 + }, + { + "word": "Dabstep.", + "start": 4.28000020980835, + "end": 5.460000038146973 + }, + { + "word": "46", + "start": 5.460000038146973, + "end": 5.920000076293945 + }, + { + "word": "%", + "start": 5.920000076293945, + "end": 6.340000152587891 + }, + { + "word": "overall.", + "start": 6.340000152587891, + "end": 7.420000076293945 + }, + { + "word": "Up", + "start": 7.420000076293945, + "end": 7.559999942779541 + }, + { + "word": "from", + "start": 7.559999942779541, + "end": 7.800000190734863 + }, + { + "word": "32.", + "start": 7.800000190734863, + "end": 8.539999961853027 + } + ] + }, + "contagion": { + "file": "voiceover/contagion.mp3", + "hash": "554425aab7ac90d0", + "seconds": 17.976, + "words": [ + { + "word": "We", + "start": 0, + "end": 0.23999999463558197 + }, + { + "word": "also", + "start": 0.23999999463558197, + "end": 0.5 + }, + { + "word": "learned", + "start": 0.5, + "end": 0.7799999713897705 + }, + { + "word": "what", + "start": 0.7799999713897705, + "end": 1.0199999809265137 + }, + { + "word": "kind", + "start": 1.0199999809265137, + "end": 1.2599999904632568 + }, + { + "word": "of", + "start": 1.2599999904632568, + "end": 1.4800000190734863 + }, + { + "word": "memory", + "start": 1.4800000190734863, + "end": 1.6799999475479126 + }, + { + "word": "works.", + "start": 1.6799999475479126, + "end": 2.7799999713897705 + }, + { + "word": "Our", + "start": 2.7799999713897705, + "end": 3.0199999809265137 + }, + { + "word": "first", + "start": 3.0199999809265137, + "end": 3.359999895095825 + }, + { + "word": "version", + "start": 3.359999895095825, + "end": 3.740000009536743 + }, + { + "word": "distilled", + "start": 3.740000009536743, + "end": 4.260000228881836 + }, + { + "word": "runs", + "start": 4.260000228881836, + "end": 4.519999980926514 + }, + { + "word": "into", + "start": 4.519999980926514, + "end": 4.940000057220459 + }, + { + "word": "a", + "start": 4.940000057220459, + "end": 5.119999885559082 + }, + { + "word": "shared", + "start": 5.119999885559082, + "end": 5.380000114440918 + }, + { + "word": "library", + "start": 5.380000114440918, + "end": 5.980000019073486 + }, + { + "word": "of", + "start": 5.980000019073486, + "end": 6.28000020980835 + }, + { + "word": "verified", + "start": 6.28000020980835, + "end": 6.739999771118164 + }, + { + "word": "skills.", + "start": 6.739999771118164, + "end": 8.079999923706055 + }, + { + "word": "One", + "start": 8.079999923706055, + "end": 8.239999771118164 + }, + { + "word": "wrong", + "start": 8.239999771118164, + "end": 8.460000038146973 + }, + { + "word": "skill", + "start": 8.460000038146973, + "end": 8.880000114440918 + }, + { + "word": "spread", + "start": 8.880000114440918, + "end": 9.260000228881836 + }, + { + "word": "to", + "start": 9.260000228881836, + "end": 9.460000038146973 + }, + { + "word": "every", + "start": 9.460000038146973, + "end": 9.739999771118164 + }, + { + "word": "agent", + "start": 9.739999771118164, + "end": 10.100000381469727 + }, + { + "word": "that", + "start": 10.100000381469727, + "end": 10.319999694824219 + }, + { + "word": "used", + "start": 10.319999694824219, + "end": 10.619999885559082 + }, + { + "word": "it.", + "start": 10.619999885559082, + "end": 11.460000038146973 + }, + { + "word": "Raw", + "start": 11.460000038146973, + "end": 11.720000267028809 + }, + { + "word": "runs", + "start": 11.720000267028809, + "end": 12.180000305175781 + }, + { + "word": "labeled", + "start": 12.180000305175781, + "end": 12.819999694824219 + }, + { + "word": "unverified,", + "start": 12.819999694824219, + "end": 14.319999694824219 + }, + { + "word": "worked", + "start": 14.319999694824219, + "end": 14.539999961853027 + }, + { + "word": "better", + "start": 14.539999961853027, + "end": 14.859999656677246 + }, + { + "word": "because", + "start": 14.859999656677246, + "end": 15.5600004196167 + }, + { + "word": "each", + "start": 15.5600004196167, + "end": 15.880000114440918 + }, + { + "word": "agent", + "start": 15.880000114440918, + "end": 16.260000228881836 + }, + { + "word": "still", + "start": 16.260000228881836, + "end": 16.639999389648438 + }, + { + "word": "runs", + "start": 16.639999389648438, + "end": 16.920000076293945 + }, + { + "word": "its", + "start": 16.920000076293945, + "end": 17.15999984741211 + }, + { + "word": "own", + "start": 17.15999984741211, + "end": 17.420000076293945 + }, + { + "word": "code.", + "start": 17.420000076293945, + "end": 17.940000534057617 + } + ], + "text": "We also learned what kind of memory works. Our first version distilled runs into a shared library of verified skills. One wrong skill spread to every agent that used it. Raw runs, labeled unverified, worked better, because each agent still runs its own code." + }, + "next-steps": { + "file": "voiceover/next-steps.mp3", + "hash": "e45efdc013161d78", + "text": "What's next. Today, a run becomes memory when it produces an answer. Next, we'll record whether that answer was right, as a git note on the commit, so agents learn from the runs that worked. Artifacts events can index each run the moment it's pushed. And agents can review their own history between tasks.", + "seconds": 21.888, + "words": [ + { + "word": "What's", + "start": 0, + "end": 0.6 + }, + { + "word": "next?", + "start": 0.6, + "end": 1.66 + }, + { + "word": "Today", + "start": 1.66, + "end": 2.06 + }, + { + "word": "a", + "start": 2.06, + "end": 2.68 + }, + { + "word": "run", + "start": 2.68, + "end": 2.92 + }, + { + "word": "becomes", + "start": 2.92, + "end": 3.32 + }, + { + "word": "memory", + "start": 3.32, + "end": 3.9 + }, + { + "word": "when", + "start": 3.9, + "end": 4.18 + }, + { + "word": "it", + "start": 4.18, + "end": 4.3 + }, + { + "word": "produces", + "start": 4.3, + "end": 4.74 + }, + { + "word": "an", + "start": 4.74, + "end": 4.98 + }, + { + "word": "answer.", + "start": 4.98, + "end": 5.9 + }, + { + "word": "Next", + "start": 5.9, + "end": 6.24 + }, + { + "word": "will", + "start": 6.24, + "end": 6.8 + }, + { + "word": "record", + "start": 6.8, + "end": 7.18 + }, + { + "word": "whether", + "start": 7.18, + "end": 7.58 + }, + { + "word": "that", + "start": 7.58, + "end": 7.78 + }, + { + "word": "answer", + "start": 7.78, + "end": 8.14 + }, + { + "word": "was", + "start": 8.14, + "end": 8.36 + }, + { + "word": "right", + "start": 8.36, + "end": 8.62 + }, + { + "word": "as", + "start": 8.62, + "end": 9.4 + }, + { + "word": "a", + "start": 9.4, + "end": 9.52 + }, + { + "word": "get", + "start": 9.52, + "end": 9.7 + }, + { + "word": "note", + "start": 9.7, + "end": 10.02 + }, + { + "word": "on", + "start": 10.02, + "end": 10.32 + }, + { + "word": "the", + "start": 10.32, + "end": 10.46 + }, + { + "word": "commit", + "start": 10.46, + "end": 10.74 + }, + { + "word": "so", + "start": 10.74, + "end": 11.34 + }, + { + "word": "agents", + "start": 11.34, + "end": 11.72 + }, + { + "word": "learn", + "start": 11.72, + "end": 12.1 + }, + { + "word": "from", + "start": 12.1, + "end": 12.38 + }, + { + "word": "the", + "start": 12.38, + "end": 12.54 + }, + { + "word": "runs", + "start": 12.54, + "end": 12.74 + }, + { + "word": "that", + "start": 12.96, + "end": 13.02 + }, + { + "word": "worked.", + "start": 13.02, + "end": 13.96 + }, + { + "word": "Artifacts", + "start": 13.96, + "end": 14.46 + }, + { + "word": "events", + "start": 14.46, + "end": 14.84 + }, + { + "word": "can", + "start": 14.84, + "end": 15.5 + }, + { + "word": "index", + "start": 15.5, + "end": 15.96 + }, + { + "word": "each", + "start": 15.96, + "end": 16.36 + }, + { + "word": "run", + "start": 16.36, + "end": 16.76 + }, + { + "word": "the", + "start": 16.76, + "end": 17.18 + }, + { + "word": "moment", + "start": 17.18, + "end": 17.48 + }, + { + "word": "it's", + "start": 17.48, + "end": 17.82 + }, + { + "word": "pushed", + "start": 17.82, + "end": 18.16 + }, + { + "word": "and", + "start": 18.16, + "end": 18.82 + }, + { + "word": "agents", + "start": 18.82, + "end": 19.2 + }, + { + "word": "can", + "start": 19.2, + "end": 19.54 + }, + { + "word": "review", + "start": 19.68, + "end": 19.84 + }, + { + "word": "their", + "start": 19.84, + "end": 20.12 + }, + { + "word": "own", + "start": 20.12, + "end": 20.32 + }, + { + "word": "history", + "start": 20.32, + "end": 20.74 + }, + { + "word": "between", + "start": 20.74, + "end": 21.16 + }, + { + "word": "tasks.", + "start": 21.16, + "end": 21.86 + } + ] + }, + "new-worker": { + "file": "voiceover/new-worker.mp3", + "hash": "db52d1127c0cb094", + "text": "Getting started takes about a minute. Create a Worker with the cf CLI, and install Code Mode and codemode-git. Add the connector and three bindings: Artifacts, a Worker Loader, and a Durable Object. A dry run shows everything wired up.", + "seconds": 16.488, + "words": [ + { + "word": "Getting", + "start": 0, + "end": 0.30000001192092896 + }, + { + "word": "started", + "start": 0.30000001192092896, + "end": 0.6600000262260437 + }, + { + "word": "takes", + "start": 0.6600000262260437, + "end": 0.9800000190734863 + }, + { + "word": "about", + "start": 0.9800000190734863, + "end": 1.2799999713897705 + }, + { + "word": "a", + "start": 1.2799999713897705, + "end": 1.3799999952316284 + }, + { + "word": "minute.", + "start": 1.3799999952316284, + "end": 2.240000009536743 + }, + { + "word": "Create", + "start": 2.240000009536743, + "end": 2.440000057220459 + }, + { + "word": "a", + "start": 2.440000057220459, + "end": 2.640000104904175 + }, + { + "word": "worker", + "start": 2.640000104904175, + "end": 2.940000057220459 + }, + { + "word": "with", + "start": 2.940000057220459, + "end": 3.200000047683716 + }, + { + "word": "the", + "start": 3.200000047683716, + "end": 3.359999895095825 + }, + { + "word": "CF", + "start": 3.359999895095825, + "end": 3.640000104904175 + }, + { + "word": "CLI", + "start": 3.640000104904175, + "end": 4.340000152587891 + }, + { + "word": "and", + "start": 4.340000152587891, + "end": 4.840000152587891 + }, + { + "word": "install", + "start": 4.840000152587891, + "end": 5.179999828338623 + }, + { + "word": "Code", + "start": 5.179999828338623, + "end": 5.599999904632568 + }, + { + "word": "Mode", + "start": 5.599999904632568, + "end": 5.880000114440918 + }, + { + "word": "and", + "start": 5.880000114440918, + "end": 6.260000228881836 + }, + { + "word": "Code", + "start": 6.260000228881836, + "end": 6.579999923706055 + }, + { + "word": "Mode", + "start": 6.579999923706055, + "end": 6.900000095367432 + }, + { + "word": "Git.", + "start": 6.900000095367432, + "end": 7.960000038146973 + }, + { + "word": "Add", + "start": 7.960000038146973, + "end": 8.079999923706055 + }, + { + "word": "the", + "start": 8.079999923706055, + "end": 8.239999771118164 + }, + { + "word": "connector", + "start": 8.239999771118164, + "end": 8.619999885559082 + }, + { + "word": "and", + "start": 8.619999885559082, + "end": 8.920000076293945 + }, + { + "word": "pre", + "start": 8.920000076293945, + "end": 9.100000381469727 + }, + { + "word": "-bindings,", + "start": 9.100000381469727, + "end": 10.260000228881836 + }, + { + "word": "Artifacts,", + "start": 10.260000228881836, + "end": 11.239999771118164 + }, + { + "word": "a", + "start": 11.239999771118164, + "end": 11.300000190734863 + }, + { + "word": "worker", + "start": 11.300000190734863, + "end": 11.579999923706055 + }, + { + "word": "loader,", + "start": 11.579999923706055, + "end": 12.34000015258789 + }, + { + "word": "and", + "start": 12.34000015258789, + "end": 12.579999923706055 + }, + { + "word": "a", + "start": 12.579999923706055, + "end": 12.680000305175781 + }, + { + "word": "durable", + "start": 12.680000305175781, + "end": 12.979999542236328 + }, + { + "word": "object.", + "start": 12.979999542236328, + "end": 14.279999732971191 + }, + { + "word": "A", + "start": 14.279999732971191, + "end": 14.380000114440918 + }, + { + "word": "dry", + "start": 14.380000114440918, + "end": 14.600000381469727 + }, + { + "word": "run", + "start": 14.600000381469727, + "end": 14.84000015258789 + }, + { + "word": "shows", + "start": 14.84000015258789, + "end": 15.119999885559082 + }, + { + "word": "everything", + "start": 15.119999885559082, + "end": 15.65999984741211 + }, + { + "word": "wired", + "start": 15.65999984741211, + "end": 16.020000457763672 + }, + { + "word": "up.", + "start": 16.020000457763672, + "end": 16.459999084472656 + } + ] + }, + "close": { + "file": "voiceover/close.mp3", + "hash": "4189b14a9278e2da", + "text": "It's on npm: three lines in any Code Mode agent. Keep the code, and your Workers get smarter over time.", + "seconds": 7.704, + "words": [ + { + "word": "It's", + "start": 0, + "end": 0.30000001192092896 + }, + { + "word": "on", + "start": 0.30000001192092896, + "end": 0.41999998688697815 + }, + { + "word": "NPM.", + "start": 0.41999998688697815, + "end": 1.6399999856948853 + }, + { + "word": "Three", + "start": 1.6399999856948853, + "end": 1.8799999952316284 + }, + { + "word": "lines", + "start": 1.8799999952316284, + "end": 2.1600000858306885 + }, + { + "word": "in", + "start": 2.1600000858306885, + "end": 2.619999885559082 + }, + { + "word": "any", + "start": 2.619999885559082, + "end": 3.0199999809265137 + }, + { + "word": "code", + "start": 3.0199999809265137, + "end": 3.359999895095825 + }, + { + "word": "mode", + "start": 3.359999895095825, + "end": 3.6600000858306885 + }, + { + "word": "agent.", + "start": 3.6600000858306885, + "end": 4.800000190734863 + }, + { + "word": "Keep", + "start": 4.800000190734863, + "end": 4.960000038146973 + }, + { + "word": "the", + "start": 4.960000038146973, + "end": 5.159999847412109 + }, + { + "word": "code", + "start": 5.159999847412109, + "end": 5.420000076293945 + }, + { + "word": "and", + "start": 5.420000076293945, + "end": 5.659999847412109 + }, + { + "word": "your", + "start": 5.659999847412109, + "end": 5.820000171661377 + }, + { + "word": "workers", + "start": 5.820000171661377, + "end": 6.139999866485596 + }, + { + "word": "get", + "start": 6.139999866485596, + "end": 6.420000076293945 + }, + { + "word": "smarter", + "start": 6.420000076293945, + "end": 6.820000171661377 + }, + { + "word": "over", + "start": 6.820000171661377, + "end": 7.179999828338623 + }, + { + "word": "time.", + "start": 7.179999828338623, + "end": 7.679999828338623 + } + ] + }, + "credits": { + "file": "voiceover/credits.mp3", + "hash": "9cfeae5596cc48c7", + "text": "Built by Clay Smith, on Cloudflare. Thanks for watching.", + "seconds": 3.888, + "words": [ + { + "word": "Built", + "start": 0, + "end": 0.2800000011920929 + }, + { + "word": "by", + "start": 0.2800000011920929, + "end": 0.5199999809265137 + }, + { + "word": "Clay", + "start": 0.5199999809265137, + "end": 0.7400000095367432 + }, + { + "word": "Smith", + "start": 0.7400000095367432, + "end": 1.0399999618530273 + }, + { + "word": "on", + "start": 1.0399999618530273, + "end": 1.6200000047683716 + }, + { + "word": "Cloudflare.", + "start": 1.6200000047683716, + "end": 2.7799999713897705 + }, + { + "word": "Thanks", + "start": 2.7799999713897705, + "end": 3.200000047683716 + }, + { + "word": "for", + "start": 3.200000047683716, + "end": 3.380000114440918 + }, + { + "word": "watching.", + "start": 3.380000114440918, + "end": 3.859999895095825 + } + ] + } +} diff --git a/demo/video/public/voiceover/new-worker.mp3 b/demo/video/public/voiceover/new-worker.mp3 new file mode 100644 index 0000000..4a51c27 Binary files /dev/null and b/demo/video/public/voiceover/new-worker.mp3 differ diff --git a/demo/video/public/voiceover/next-steps.mp3 b/demo/video/public/voiceover/next-steps.mp3 new file mode 100644 index 0000000..534df74 Binary files /dev/null and b/demo/video/public/voiceover/next-steps.mp3 differ diff --git a/demo/video/public/voiceover/recall.mp3 b/demo/video/public/voiceover/recall.mp3 new file mode 100644 index 0000000..c920d7e Binary files /dev/null and b/demo/video/public/voiceover/recall.mp3 differ diff --git a/demo/video/public/voiceover/repo.mp3 b/demo/video/public/voiceover/repo.mp3 new file mode 100644 index 0000000..cf4343a Binary files /dev/null and b/demo/video/public/voiceover/repo.mp3 differ diff --git a/demo/video/public/voiceover/scale.mp3 b/demo/video/public/voiceover/scale.mp3 new file mode 100644 index 0000000..f77c3a7 Binary files /dev/null and b/demo/video/public/voiceover/scale.mp3 differ diff --git a/demo/video/public/voiceover/thesis.mp3 b/demo/video/public/voiceover/thesis.mp3 new file mode 100644 index 0000000..95dc480 Binary files /dev/null and b/demo/video/public/voiceover/thesis.mp3 differ diff --git a/demo/video/public/voiceover/under-the-hood.mp3 b/demo/video/public/voiceover/under-the-hood.mp3 new file mode 100644 index 0000000..0da1fc3 Binary files /dev/null and b/demo/video/public/voiceover/under-the-hood.mp3 differ diff --git a/demo/video/public/voiceover/vanish.mp3 b/demo/video/public/voiceover/vanish.mp3 new file mode 100644 index 0000000..4e4e117 Binary files /dev/null and b/demo/video/public/voiceover/vanish.mp3 differ diff --git a/demo/video/public/voiceover/walkthrough.mp3 b/demo/video/public/voiceover/walkthrough.mp3 new file mode 100644 index 0000000..bd4c939 Binary files /dev/null and b/demo/video/public/voiceover/walkthrough.mp3 differ diff --git a/demo/video/scripts/record.mjs b/demo/video/scripts/record.mjs new file mode 100644 index 0000000..d3df194 --- /dev/null +++ b/demo/video/scripts/record.mjs @@ -0,0 +1,41 @@ +#!/usr/bin/env node +// Records a terminal scene with VHS and encodes it for the video: +// node scripts/record.mjs [new-worker] +// VHS writes text and cursor frames to frames-/; ffmpeg +// overlays them, centers them on a 1920×1080 background, and writes +// public/clips/.mp4. (VHS's built-in encoding fails silently with +// ffmpeg 9.) Then add to public/clips/index.json. + +import { execFileSync } from "node:child_process"; +import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const name = process.argv[2] ?? "new-worker"; +// VHS only writes frames to a single-level directory, so: frames-/. +const frames = join(root, `frames-${name}`); +const out = join(root, "public/clips", `${name}.mp4`); + +rmSync(frames, { recursive: true, force: true }); +// It must not exist beforehand either: VHS writes nothing into an existing one. +execFileSync("vhs", [join("terminal", `${name}.tape`)], { cwd: root, stdio: "inherit" }); +if (!existsSync(join(frames, "frame-text-00001.png"))) throw new Error(`VHS wrote no frames to ${frames}`); + +mkdirSync(dirname(out), { recursive: true }); +execFileSync("ffmpeg", [ + "-v", "error", "-y", + "-framerate", "30", "-i", join(frames, "frame-text-%05d.png"), + "-framerate", "30", "-i", join(frames, "frame-cursor-%05d.png"), + "-filter_complex", + "[0][1]overlay,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:color=0x0f1115,format=yuv420p", + "-c:v", "libx264", "-crf", "18", "-movflags", "+faststart", + out +], { stdio: "inherit" }); +rmSync(frames, { recursive: true, force: true }); + +const indexPath = join(root, "public/clips/index.json"); +const index = existsSync(indexPath) ? JSON.parse(readFileSync(indexPath, "utf8")) : []; +if (!index.includes(name)) writeFileSync(indexPath, JSON.stringify([...index, name], null, 2) + "\n"); +const seconds = Number(execFileSync("ffprobe", ["-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", out]).toString()); +console.log(`${out}: ${seconds.toFixed(1)}s; "${name}" is listed in public/clips/index.json`); diff --git a/demo/video/scripts/voiceover.mjs b/demo/video/scripts/voiceover.mjs new file mode 100644 index 0000000..3a5d769 --- /dev/null +++ b/demo/video/scripts/voiceover.mjs @@ -0,0 +1,143 @@ +#!/usr/bin/env node +// Generates the voiceover for every scene with Workers AI, from the text in +// transcript.md (one "## " section per scene in src/script.ts): +// Deepgram Aura-2 for speech, Whisper for word timings (captions). +// +// Two ways to reach Workers AI: +// 1. The local helper Worker (default): `npm run tts-worker` in another +// terminal, which uses your cf login. Override with VOICE_URL. +// 2. The REST API: set CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID. +// +// Writes public/voiceover/.mp3 and public/voiceover/manifest.json +// (with the text each clip was generated from, for captions). A scene is +// regenerated only when its text or speaker changes. + +import { createHash } from "node:crypto"; +import { execFileSync } from "node:child_process"; +import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; +import { sceneSeconds, scenes, SPEAKER } from "../src/script.ts"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const outDir = join(root, "public/voiceover"); +const manifestPath = join(outDir, "manifest.json"); +mkdirSync(outDir, { recursive: true }); + +const token = process.env.CLOUDFLARE_API_TOKEN; +const account = process.env.CLOUDFLARE_ACCOUNT_ID; +const voiceUrl = process.env.VOICE_URL ?? "http://localhost:8788"; +const rest = (model) => `https://api.cloudflare.com/client/v4/accounts/${account}/ai/run/${model}`; + +async function speak(text) { + const res = + token && account + ? await fetch(rest("@cf/deepgram/aura-2-en"), { + method: "POST", + headers: { authorization: `Bearer ${token}`, "content-type": "application/json" }, + body: JSON.stringify({ text, speaker: SPEAKER, encoding: "mp3" }) + }) + : await fetch(`${voiceUrl}/tts`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ text, speaker: SPEAKER }) + }); + if (!res.ok) throw new Error(`tts: HTTP ${res.status} ${(await res.text()).slice(0, 200)}`); + return Buffer.from(await res.arrayBuffer()); +} + +async function transcribe(audio) { + const res = + token && account + ? await fetch(rest("@cf/openai/whisper"), { method: "POST", headers: { authorization: `Bearer ${token}` }, body: audio }) + : await fetch(`${voiceUrl}/transcribe`, { method: "POST", body: audio }); + if (!res.ok) throw new Error(`transcribe: HTTP ${res.status} ${(await res.text()).slice(0, 200)}`); + const body = await res.json(); + return (body.result ?? body).words ?? []; +} + +// Workers AI occasionally drops a connection; retry a few times. +async function retry(label, fn) { + for (let attempt = 1; ; attempt++) { + try { + return await fn(); + } catch (err) { + if (attempt >= 4) throw err; + process.stderr.write(`(${label} failed: ${String(err.message ?? err).slice(0, 80)}; retrying) `); + await new Promise((r) => setTimeout(r, 1000 * attempt)); + } + } +} + +// "## " sections; HTML comments are dropped and lines joined. +function readTranscript() { + const md = readFileSync(join(root, "transcript.md"), "utf8").replace(//g, ""); + const sections = {}; + let id = null; + for (const line of md.split("\n")) { + const heading = /^##\s+(.*?)\s*$/.exec(line); + if (heading) { + id = heading[1]; + if (/\s/.test(id)) throw new Error(`transcript.md: "## ${id}" — scene ids can't contain spaces (use "${id.replace(/\s+/g, "-")}" and match src/script.ts)`); + if (id in sections) throw new Error(`transcript.md: duplicate section "## ${id}"`); + sections[id] = []; + } else if (id) { + sections[id].push(line.trim()); + } + } + const text = Object.fromEntries(Object.entries(sections).map(([k, lines]) => [k, lines.filter(Boolean).join(" ")])); + const ids = scenes.map((s) => s.id); + const missing = ids.filter((k) => !text[k]); + const extra = Object.keys(text).filter((k) => !ids.includes(k)); + if (missing.length || extra.length) { + throw new Error( + `transcript.md doesn't match src/script.ts.` + + (missing.length ? ` Missing or empty: ${missing.join(", ")}.` : "") + + (extra.length ? ` Unknown sections: ${extra.join(", ")}.` : "") + ); + } + return text; +} + +const duration = (file) => + Number(execFileSync("ffprobe", ["-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", file]).toString().trim()); + +const transcript = readTranscript(); +const previous = existsSync(manifestPath) ? JSON.parse(readFileSync(manifestPath, "utf8")) : {}; +const manifest = {}; +let generated = 0; +for (const scene of scenes) { + const text = transcript[scene.id]; + const hash = createHash("sha256").update(`${SPEAKER}\n${text}`).digest("hex").slice(0, 16); + const file = `voiceover/${scene.id}.mp3`; + const path = join(root, "public", file); + if (previous[scene.id]?.hash === hash && existsSync(path)) { + manifest[scene.id] = { ...previous[scene.id], text }; + continue; + } + process.stderr.write(`${scene.id}: speaking ${text.length} chars… `); + const audio = await retry("tts", () => speak(text)); + writeFileSync(path, audio); + const words = (await retry("transcribe", () => transcribe(audio))).map((w) => ({ word: w.word, start: w.start, end: w.end })); + manifest[scene.id] = { file, hash, text, seconds: duration(path), words }; + generated++; + // Save progress, so a failure later doesn't lose this scene. + writeFileSync(manifestPath, JSON.stringify({ ...previous, ...manifest }, null, 2) + "\n"); + process.stderr.write(`${manifest[scene.id].seconds.toFixed(1)}s\n`); +} +writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n"); +const chars = Object.values(transcript).reduce((s, t) => s + t.length, 0); +console.log(`${generated} scene(s) generated, ${scenes.length - generated} cached. ${chars} chars (~$${((chars / 1000) * 0.03).toFixed(2)} at Aura-2 pricing for a full regeneration).\n`); + +// Runtime report: what the composition will use, scene by scene. +const clipsPath = join(root, "public/clips/index.json"); +const clips = existsSync(clipsPath) ? JSON.parse(readFileSync(clipsPath, "utf8")) : []; +const fmt = (sec) => `${Math.floor(sec / 60)}:${String(Math.round(sec % 60)).padStart(2, "0")}`; +let runtime = 0; +for (const scene of scenes) { + const seconds = sceneSeconds(scene, manifest[scene.id].seconds, clips.includes(scene.id)); + const slot = scene.minSeconds ? (clips.includes(scene.id) ? ` recording (${scene.minSeconds}s)` : ` recording slot empty (+${Math.max(0, scene.minSeconds - seconds).toFixed(0)}s when filled)`) : ""; + console.log(`${fmt(runtime).padStart(5)} ${scene.id.padEnd(16)} ${seconds.toFixed(1).padStart(5)}s${slot}`); + runtime += seconds; +} +console.log(`\nRuntime ${fmt(runtime)}.` + (runtime < 300 ? ` Under the 5:00 minimum by ${Math.ceil(300 - runtime)}s; filling the recording slots adds time.` : "")); diff --git a/demo/video/src/Demo.tsx b/demo/video/src/Demo.tsx new file mode 100644 index 0000000..80518a9 --- /dev/null +++ b/demo/video/src/Demo.tsx @@ -0,0 +1,92 @@ +import { AbsoluteFill, Audio, OffthreadVideo, Sequence, Series, staticFile, useCurrentFrame } from "remotion"; +import { LEAD_IN, sceneSeconds, scenes, type Scene } from "./script"; +import { theme } from "./theme"; +import { Visual } from "./scenes/Visual"; + +export const FPS = 30; + +export type Word = { word: string; start: number; end: number }; +export type Manifest = Record; +export type DemoProps = { manifest: Manifest; clips: string[] }; + +export const sceneFrames = (scene: Scene, manifest: Manifest, clips: string[]) => + Math.ceil(sceneSeconds(scene, manifest[scene.id]?.seconds, clips.includes(scene.id)) * FPS); + +/** + * Seconds into the scene when a word is spoken, for syncing visuals to the + * voiceover. Matches the transcript's words (case- and punctuation-insensitive), + * falling back to `fallback` seconds before the voiceover exists. + */ +export type Cue = (needle: string, fallback: number) => number; + +const norm = (s: string) => s.toLowerCase().replace(/[^a-z0-9-]/g, ""); + +function makeCue(words: Word[]): Cue { + return (needle, fallback) => { + const parts = needle.split(/\s+/).map(norm); + for (let i = 0; i + parts.length <= words.length; i++) { + if (parts.every((p, k) => norm(words[i + k]!.word) === p)) return LEAD_IN + words[i]!.start; + } + return fallback; + }; +} + +// Whisper's timings, but the transcript's words: Whisper mishears names like +// "Cloudflare". Transcript word i takes the timing of the proportionally placed +// Whisper word, which is exact when the counts match. +function alignToScript(text: string, timed: Word[]): Word[] { + const words = text.split(/\s+/).filter(Boolean); + if (!timed.length) return []; + return words.map((word, i) => { + const t = timed[Math.min(timed.length - 1, Math.floor((i * timed.length) / words.length))]!; + return { word, start: t.start, end: t.end }; + }); +} + +export const Demo = ({ manifest, clips }: DemoProps) => ( + + + {scenes.map((scene) => { + const voice = manifest[scene.id]; + const words = voice ? alignToScript(voice.text, voice.words) : []; + const clip = clips.includes(scene.id) ? staticFile(`clips/${scene.id}.mp4`) : null; + return ( + + {clip ? ( + + + + ) : ( + + )} + {voice && ( + + + )} + + ); + })} + + +); + +// The current phrase, up to 8 words, with the spoken word highlighted. +function Captions({ words }: { words: Word[] }) { + const t = useCurrentFrame() / FPS; + const i = words.findIndex((w) => t < w.end); + if (i < 0 || t < (words[0]?.start ?? 0)) return null; + const start = Math.floor(i / 8) * 8; + return ( + +
+ {words.slice(start, start + 8).map((w, j) => ( + + {(j ? " " : "") + w.word} + + ))} +
+
+ ); +} diff --git a/demo/video/src/Root.tsx b/demo/video/src/Root.tsx new file mode 100644 index 0000000..51a56e4 --- /dev/null +++ b/demo/video/src/Root.tsx @@ -0,0 +1,41 @@ +import { Composition, staticFile } from "remotion"; +import { Demo, FPS, sceneFrames, type DemoProps, type Manifest } from "./Demo"; +import { scenes } from "./script"; + +// Scene lengths come from the generated voiceover; a scene without audio yet +// gets a placeholder length. +async function loadManifest(): Promise { + try { + const res = await fetch(staticFile("voiceover/manifest.json")); + return res.ok ? ((await res.json()) as Manifest) : {}; + } catch { + return {}; + } +} + +// Scene ids with a recording in public/clips/.mp4, listed in +// public/clips/index.json (add the id there when you add a recording). +async function loadClips(): Promise { + try { + const res = await fetch(staticFile("clips/index.json")); + return res.ok ? ((await res.json()) as string[]) : []; + } catch { + return []; + } +} + +export const RemotionRoot = () => ( + { + const [manifest, clips] = await Promise.all([loadManifest(), loadClips()]); + const durationInFrames = scenes.reduce((sum, scene) => sum + sceneFrames(scene, manifest, clips), 0); + return { durationInFrames, props: { manifest, clips } }; + }} + /> +); diff --git a/demo/video/src/data.ts b/demo/video/src/data.ts new file mode 100644 index 0000000..c3c95ff --- /dev/null +++ b/demo/video/src/data.ts @@ -0,0 +1,22 @@ +// DABstep full1 (docs/experiments.md): official per-task scores and median tokens by run position. +export const learningCurve = [ + { tasks: "1–8", baseline: 315, examples: 320, note: "no memory yet" }, + { tasks: "9–24", baseline: 341, examples: 217, note: "" }, + { tasks: "25–48", baseline: 215, examples: 45, note: "" }, + { tasks: "49–96", baseline: 141, examples: 41, note: "" }, + { tasks: "97–450", baseline: 186, examples: 60, note: "" } +]; + +export const accuracy = [ + { level: "Easy (72)", baseline: 77.8, examples: 86.1 }, + { level: "Hard (378)", baseline: 23.5, examples: 38.6 }, + { level: "Overall (450)", baseline: 32.2, examples: 46.2 } +]; + +// michelle → matthew on the lava lamp wall. Illustrative until filled in from +// a recorded run of examples/agent/scripts/walkthrough.mjs. +export const walkthrough = { + illustrative: true, + michelle: { runs: ["error", "ok", "ok"] as ("error" | "ok")[], tokens: 3 }, + matthew: { runs: ["ok"] as ("error" | "ok")[], tokens: 1 } +}; diff --git a/demo/video/src/index.ts b/demo/video/src/index.ts new file mode 100644 index 0000000..f31c790 --- /dev/null +++ b/demo/video/src/index.ts @@ -0,0 +1,4 @@ +import { registerRoot } from "remotion"; +import { RemotionRoot } from "./Root"; + +registerRoot(RemotionRoot); diff --git a/demo/video/src/scenes/Visual.tsx b/demo/video/src/scenes/Visual.tsx new file mode 100644 index 0000000..371f5b7 --- /dev/null +++ b/demo/video/src/scenes/Visual.tsx @@ -0,0 +1,778 @@ +import type { ReactNode } from "react"; +import { AbsoluteFill, interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion"; +import { accuracy, learningCurve, walkthrough } from "../data"; +import type { Cue } from "../Demo"; +import type { Visual as VisualKind } from "../script"; +import { theme, WAX } from "../theme"; + +// One idea per scene, as a diagram. On-screen text is a few words at most; +// the voiceover carries the detail. Animations key off `cue(word)`, the time +// that word is spoken. + +export function Visual({ visual, cue }: { visual: VisualKind; cue: Cue }) { + const scenes: Record ReactNode> = { + thesis: () => , + hook: () => , + vanish: () => , + "code-mode": () => , + gap: () => , + memory: () => , + "under-the-hood": () => , + repo: () => , + scale: () => , + recall: () => , + walkthrough: () => , + curve: () => , + accuracy: () => , + contagion: () => , + "next-steps": () => , + "new-worker": () => , + close: () => , + credits: () => + }; + return {scenes[visual]()}; +} + +// ---- Timing helpers ---- + +function useSeconds() { + return useCurrentFrame() / useVideoConfig().fps; +} + +/** 0 → 1 spring starting at `at` seconds. */ +function useIn(at: number) { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + return spring({ frame: frame - at * fps, fps, config: { damping: 200 } }); +} + +/** Linear 0 → 1 between two times, clamped. */ +const ramp = (t: number, from: number, to: number) => + interpolate(t, [from, to], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }); + +// ---- Primitives (all in a 1920×1080 SVG) ---- + +const Canvas = ({ children }: { children: ReactNode }) => ( + + + + + + + + + + {children} + +); + +function Label({ x, y, children, size = 34, color = theme.text, anchor = "middle", weight = 600, mono, opacity = 1 }: { + x: number; y: number; children: ReactNode; size?: number; color?: string; anchor?: "start" | "middle" | "end"; weight?: number; mono?: boolean; opacity?: number; +}) { + return ( + + {children} + + ); +} + +function Box({ x, y, w, h, label, sub, p = 1, stroke = theme.border, fill = theme.panel, size = 30 }: { + x: number; y: number; w: number; h: number; label?: ReactNode; sub?: ReactNode; p?: number; stroke?: string; fill?: string; size?: number; +}) { + return ( + + + {label && } + {sub && } + + ); +} + +/** A straight arrow that draws itself as `p` goes 0 → 1. */ +function Arrow({ x1, y1, x2, y2, p, color = theme.orange, dashed, width = 4 }: { + x1: number; y1: number; x2: number; y2: number; p: number; color?: string; dashed?: boolean; width?: number; +}) { + if (p <= 0) return null; + const len = Math.hypot(x2 - x1, y2 - y1); + return ( + 0.98 ? `url(#${color === theme.orange ? "arrow" : "arrow-muted"})` : undefined} + opacity={Math.min(1, len > 0 ? 1 : 0)} + /> + ); +} + +/** A dot travelling along a segment, looping every `period` seconds. */ +function Packet({ x1, y1, x2, y2, t, start, period = 1.6, color = theme.amber, r = 9 }: { + x1: number; y1: number; x2: number; y2: number; t: number; start: number; period?: number; color?: string; r?: number; +}) { + if (t < start) return null; + const f = ((t - start) % period) / period; + return ; +} + +const Kicker = ({ children, p = 1 }: { children: ReactNode; p?: number }) => ( + +); + +// ---- Lava lamps ---- + +function LavaLamp({ x, y, wax, seed, scale = 1 }: { x: number; y: number; wax: string; seed: number; scale?: number }) { + const t = useSeconds(); + const blob = (k: number) => { + const phase = seed * 1.7 + k * 2.1; + const cy = 92 - ((Math.sin(t * 0.35 + phase) + 1) / 2) * 60; + const r = 7 + 3 * Math.sin(t * 0.8 + phase); + return ; + }; + return ( + + + {[0, 1, 2].map(blob)} + + + + + ); +} + +function LavaWall({ opacity = 0.85, top = 330, rows = 5 }: { opacity?: number; top?: number; rows?: number }) { + const lamps = []; + for (let row = 0; row < rows; row++) { + for (let col = 0; col < 20; col++) { + const i = row * 20 + col; + lamps.push(); + } + } + return {lamps}; +} + +// ---- Scenes ---- + +function Hook({ cue }: { cue: Cue }) { + const t = useSeconds(); + const pSame = useIn(0.3); + const tFrom = cue("thirty-two", 3.2); + const tTo = cue("forty-six", 4.6); + const tHard = cue("hardest", 6.5); + const tMemory = cue("memory", 11); + const pFrom = useIn(tFrom - 0.2); + const value = interpolate(t, [tTo - 0.3, tTo + 0.9], [32.2, 46.2], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }); + const pTo = useIn(tTo - 0.3); + const pHard = useIn(tHard); + const pMem = useIn(tMemory - 0.4); + return ( + + + + + + + + + + + + ); +} + +function Thesis({ cue }: { cue: Cue }) { + const t = useSeconds(); + // The question builds phrase by phrase, then the name lands under it. + const parts = [ + { text: "What if Cloudflare Artifacts", at: cue("What if", 0.5), color: theme.text }, + { text: "could make Code Mode in Workers", at: cue("could make", 1.6), color: theme.text }, + { text: "self-improving?", at: cue("self-improving?", 2.6), color: theme.amber } + ]; + const tKeep = cue("Keep", 6); + const tName = cue("That's", 9); + // The subtitle leaves before the name arrives, so they never overlap. + const settle = ramp(t, tName - 0.1, tName + 0.4); + const subtitleOut = ramp(t, tName - 0.7, tName - 0.2); + return ( + + + + + + + + + + {parts.map((p, i) => ( + + ))} + + + + + + ); +} + +function Agent({ x, y, r = 46, color = theme.text, p = 1, label }: { x: number; y: number; r?: number; color?: string; p?: number; label?: string }) { + // A robot in a ring; the ring's color carries state (red wrong, green right, amber highlighted). + return ( + + + + 🤖 + + {label && } + + ); +} + +function Vanish({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tGone = cue("gone", 4); + const tThousand = cue("thousand", 5.5); + const agents = []; + for (let r = 0; r < 3; r++) { + for (let c = 0; c < 6; c++) { + const i = r * 6 + c; + const x = 330 + c * 252; + const y = 300 + r * 250; + // Each agent writes a snippet, which rises and dissolves, on a loop. + const cycle = 3.2; + const local = (t + i * 0.37) % cycle; + const rise = local / cycle; + const show = t > 0.6 + i * 0.05; + agents.push( + + + {show && t > tGone - 2 && ( + + + + + )} + + ); + } + } + return ( + + {agents} + + + ); +} + +function CodeMode({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tAfter = cue("They write", 7.5); + const pBefore = useIn(0.2); + const pAfter = useIn(tAfter - 0.2); + // Before: model ⇄ tools ping-pong, one round trip per call. + const trips = 5; + const leftX = 230, rightX = 760, top = 300, gap = 110; + const ping = []; + for (let i = 0; i < trips; i++) { + const s = 0.8 + i * 0.9; + const y = top + i * gap; + ping.push( + + + + + ); + } + const code = ["let cursor = null, n = 0;", "do {", " const page = await lamps.wall({ cursor });", " n += page.lamps.filter(flowing).length;", " cursor = page.nextCursor;", "} while (cursor);", "return n;"]; + return ( + + + + + + + + {ping} + + + + + + + + {code.map((line, i) => ( + + ))} + + + + + ); +} + +function Gap({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tThrown = cue("thrown", 1.6); + const tPlan = cue("code goes", 3.4); + const shrink = ramp(t, tThrown, tThrown + 0.8); + const fall = ramp(t, tPlan - 0.2, tPlan + 1.2); + const lines = ["do {", " const page = await lamps.wall({ cursor });", " n += page.lamps.filter(flowing).length;", "} while (cursor);"]; + return ( + + + + + + {lines.map((line, i) => ( + + ))} + + + ); +} + +const AGENTS = ["michelle", "matthew", "lena", "omar"]; + +function RepoCard({ x, y, name, commits, p = 1, highlight }: { x: number; y: number; name: string; commits: number; p?: number; highlight?: boolean }) { + const dots = []; + for (let i = 0; i < Math.floor(commits); i++) { + dots.push(); + if (i > 0) dots.push(); + } + return ( + + + + {dots} + + ); +} + +function Memory({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tCommit = cue("commit", 1.6); + const tOne = cue("One repo", 9); + return ( + + PHASE 1 · CODE MEMORY + + {AGENTS.map((name, i) => { + const y = 300 + i * 170; + const s = tCommit - 0.3 + i * 0.25; + const commits = ramp(t, s, s + 6) * 7 + (t > s ? 1 : 0); + return ( + + + + + + + ); + })} + + + ); +} + +function UnderTheHood({ cue }: { cue: Cue }) { + const t = useSeconds(); + const steps = [ + { label: "execution ends", sub: "disposeExecution()", at: cue("connector", 1.5) }, + { label: "Durable Object", sub: "SQLite outbox", at: cue("outbox", 4) }, + { label: "isomorphic-git", sub: "push, in order", at: cue("git pushes", 6.5) }, + { label: "Artifacts repo", sub: "one commit per run", at: cue("Artifacts,", 8.5) } + ]; + const w = 360, gap = 80, x0 = (1920 - (4 * w + 3 * gap)) / 2, y = 440, h = 150; + const tGit = cue("git client", 12); + return ( + + UNDER THE HOOD + {steps.map((s, i) => { + const x = x0 + i * (w + gap); + return ( + + + {i < 3 && ( + <> + + + + )} + + ); + })} + + + ); +} + +function RepoLog() { + const t = useSeconds(); + const lines = [ + ["$ git log --oneline", theme.green], + ["7c1e2a9 Count flowing lava lamps across every page [completed]", theme.text], + ["3f90b41 Count flowing lava lamps (follow nextCursor) [completed]", theme.text], + ["a12d7e0 Count flowing lava lamps [error]", theme.red], + ["$ git show 7c1e2a9 -- run.js", theme.green] + ] as const; + return ( + + EVERY ATTEMPT, IN GIT + + {lines.map(([line, color], i) => ( + + ))} + + + ); +} + +function Scale() { + const t = useSeconds(); + const cols = 50, rows = 20, size = 26, gap = 6; + const x0 = (1920 - cols * (size + gap)) / 2; + const cells = []; + for (let i = 0; i < cols * rows; i++) { + const lit = ramp(t, 0.5 + (i % 37) * 0.04 + Math.floor(i / cols) * 0.18, 1 + (i % 37) * 0.04 + Math.floor(i / cols) * 0.18); + cells.push( + 0.5 ? theme.orange : theme.panel} opacity={0.35 + 0.65 * lit} /> + ); + } + return ( + + ONE REPO PER AGENT + {cells} + + + ); +} + +function Recall({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tEmbed = cue("embeds", 2.5); + const tVec = cue("Vectorize.", 4.5); + const tNext = cue("next agent", 6); + const tRecords = cue("searches", 10); + const y = 380; + return ( + + PHASE 2 · LEARNING + + + + + + + + + + + + + + + + + + ); +} + +function Lane({ y, name, runs, tokens, maxTokens, at, color }: { + y: number; name: string; runs: ("error" | "ok")[]; tokens: number; maxTokens: number; at: number; color: string; +}) { + const t = useSeconds(); + return ( + + + {runs.map((r, i) => ( + + + + + ))} + + + + + + ); +} + +function Walkthrough({ cue }: { cue: Cue }) { + const tM = cue("Michelle asks", 2); + const tT = cue("Matthew asks", 9); + const d = walkthrough; + const max = Math.max(d.michelle.tokens, d.matthew.tokens); + return ( + + THE LAVA LAMP WALL + + {Array.from({ length: 12 }, (_, i) => ( + + ))} + + + + {d.illustrative && ( + + )} + + ); +} + +function Curve({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tNo = cue("no memory", 6); + const tDrop = cue("drops", 9); + const tStays = cue("stays", 13); + const x0 = 260, x1 = 1700, y0 = 860, y1 = 260, max = 360; + const xs = learningCurve.map((_, i) => x0 + (i * (x1 - x0)) / (learningCurve.length - 1)); + const yOf = (v: number) => y0 - (v / max) * (y0 - y1); + const path = (key: "baseline" | "examples", p: number) => { + const pts = learningCurve.map((r, i) => [xs[i]!, yOf(r[key])] as const); + const n = Math.max(1, Math.ceil(p * (pts.length - 1))); + return pts.slice(0, n + 1).map(([x, y], i) => `${i ? "L" : "M"}${x} ${y}`).join(" "); + }; + const pBase = ramp(t, 1, 4); + const pMem = ramp(t, tNo, tDrop + 2.5); + return ( + + DABSTEP · MEDIAN TOKENS PER TASK, BY POSITION IN THE RUN + + {learningCurve.map((r, i) => ( + + ))} + + + + + + + ); +} + +function Accuracy({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tGrow = cue("right", 2.5); + const groups = [accuracy[2]!, accuracy[1]!]; + return ( + + DABSTEP · ADYEN'S OFFICIAL SCORER + {groups.map((g, gi) => { + const cx = 620 + gi * 700; + const bars = [ + { v: g.baseline, c: theme.muted }, + { v: g.examples, c: theme.orange } + ]; + return ( + + {bars.map((b, bi) => { + const p = ramp(t, tGrow - 1 + bi * 0.6, tGrow + bi * 0.6); + const h = (b.v / 55) * 560 * p; + const x = cx - 170 + bi * 190; + return ( + + + + + ); + })} + + + ); + })} + + ); +} + +function Network({ cx, cy, hub, infected, t, start }: { cx: number; cy: number; hub: boolean; infected: boolean; t: number; start: number }) { + const n = 8, R = 230; + const nodes = Array.from({ length: n }, (_, i) => { + const a = (i / n) * Math.PI * 2 - Math.PI / 2; + return { x: cx + R * Math.cos(a), y: cy + R * Math.sin(a) }; + }); + return ( + + {hub && + nodes.map((p, i) => { + const reach = ramp(t, start + 0.5 + i * 0.12, start + 1.1 + i * 0.12); + return ( + + + {infected && reach > 0 && reach < 1 && } + + ); + })} + {!hub && + nodes.map((p, i) => { + const q = nodes[(i + 3) % n]!; + return i % 2 === 0 ? : null; + })} + {hub && ( + + start ? theme.red : theme.amber} strokeWidth={4} /> + + + )} + {nodes.map((p, i) => { + const bad = hub ? infected && t > start + 1.1 + i * 0.12 : infected && i === 0 && t > start; + return ; + })} + + ); +} + +function Contagion({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tWrong = cue("One wrong", 5); + const tRaw = cue("Raw runs", 9); + const pRaw = useIn(tRaw - 0.4); + return ( + + WHICH MEMORY WORKS + + + + + + + + + + ); +} + +function Close({ cue }: { cue: Cue }) { + const t = useSeconds(); + const tTag = cue("Keep the code", 4); + const lines = [ + "const history = new GitHistoryConnector(ctx, env, { sink });", + "const runtime = history.bind(createCodemodeRuntime({", + " ctx, executor, connectors: [lamps, history] }));" + ]; + return ( + + + + {lines.map((l, i) => ( + + ))} + + + + + + + ); +} + +function NextSteps({ cue }: { cue: Cue }) { + const steps = [ + { glyph: "✓", title: "Record outcomes", sub: "a git note on each commit", at: cue("right,", 4) }, + { glyph: "⚡", title: "Index on push", sub: "Artifacts events", at: cue("Artifacts events", 9) }, + { glyph: "↺", title: "Learn between tasks", sub: "agents review their history", at: cue("review", 13) } + ]; + const w = 470, gap = 70, x0 = (1920 - (3 * w + 2 * gap)) / 2; + return ( + + NEXT STEPS + {steps.map((st, i) => { + const x = x0 + i * (w + gap); + const p = useIn(st.at - 0.4); + return ( + + + + + + + ); + })} + + ); +} + +// Shown only when public/clips/new-worker.mp4 is missing (npm run record). +function NewWorker() { + const t = useSeconds(); + const lines = [ + "$ npx cf init lava-agent", + "$ npm install @cloudflare/codemode @smithclay/codemode-git", + " + GitHistoryConnector, ARTIFACTS, LOADER, AGENT", + "$ npx cf deploy --dry-run" + ]; + return ( + + A NEW WORKER, WITH CODE MEMORY + + {lines.map((l, i) => ( + + ))} + + ); +} + +function Credits() { + const columns = [ + { + title: "Code", + items: ["Cloudflare Workers", "Code Mode (@cloudflare/codemode)", "Cloudflare Artifacts", "Durable Objects", "Worker Loader", "Workers AI", "Vectorize", "isomorphic-git", "cf CLI", "TypeScript · Vitest"] + }, + { + title: "Benchmark", + items: ["DABstep by Adyen (CC BY 4.0)", "GLM-5.3 Flash on Workers AI", "Qwen3 Embedding on Workers AI"] + }, + { + title: "Presentation", + items: ["Remotion", "Deepgram Aura-2 on Workers AI", "Whisper on Workers AI", "VHS by Charm", "ffmpeg", "Claude Code"] + } + ]; + return ( + + + + + + {columns.map((col, c) => { + const x = 330 + c * 630; + const p = useIn(1.2 + c * 0.4); + return ( + + + {col.items.map((item, i) => ( + + ))} + + ); + })} + + + ); +} diff --git a/demo/video/src/script.ts b/demo/video/src/script.ts new file mode 100644 index 0000000..3f4ab81 --- /dev/null +++ b/demo/video/src/script.ts @@ -0,0 +1,72 @@ +// The demo video's scenes, in order: which diagram each shows, and how long a +// recording slot needs. What the narrator says lives in ../transcript.md, one +// "## " section per scene; `npm run voiceover` turns it into audio and +// public/voiceover/manifest.json, which the composition reads. +// +// Style: one idea per scene, told with a diagram, with on-screen text of a few +// words at most. The voiceover carries the detail. +// +// `minSeconds` is how long a scene's recording (public/clips/.mp4, listed +// in public/clips/index.json) needs. It applies only once the recording +// exists. The rules require 5–10 min; `npm run voiceover` reports the total. + +export type Visual = + | "thesis" + | "hook" + | "vanish" + | "code-mode" + | "gap" + | "memory" + | "under-the-hood" + | "scale" + | "recall" + | "walkthrough" + | "repo" + | "curve" + | "accuracy" + | "contagion" + | "next-steps" + | "new-worker" + | "close" + | "credits"; + +// `extraHold` lengthens a scene past its voiceover, e.g. for credits. +export type Scene = { id: string; visual: Visual; minSeconds?: number; extraHold?: number }; + +export const SPEAKER = "orion"; + +// Seconds of silence before each line and after it. Keep these small: Aura's +// own phrasing already has natural pauses, and long holds read as dead air. +export const LEAD_IN = 0.2; +export const HOLD = 0.6; + +/** + * A scene's length: its voiceover plus the lead-in and hold, stretched to + * `minSeconds` only when that scene's recording exists. Placeholders + * shouldn't pad with silence. + */ +export function sceneSeconds(scene: Scene, voiceSeconds: number | undefined, hasClip: boolean): number { + const voiced = LEAD_IN + (voiceSeconds ?? 8) + HOLD + (scene.extraHold ?? 0); + return hasClip ? Math.max(voiced, scene.minSeconds ?? 0) : voiced; +} + +export const scenes: Scene[] = [ + { id: "thesis", visual: "thesis" }, + { id: "hook", visual: "hook" }, + { id: "vanish", visual: "vanish" }, + { id: "code-mode", visual: "code-mode" }, + { id: "gap", visual: "gap" }, + { id: "code-memory", visual: "memory" }, + { id: "under-the-hood", visual: "under-the-hood" }, + { id: "repo", visual: "repo", minSeconds: 30 }, + { id: "scale", visual: "scale", minSeconds: 25 }, + { id: "recall", visual: "recall" }, + { id: "walkthrough", visual: "walkthrough", minSeconds: 60 }, + { id: "curve", visual: "curve" }, + { id: "accuracy", visual: "accuracy" }, + { id: "contagion", visual: "contagion" }, + { id: "next-steps", visual: "next-steps" }, + { id: "new-worker", visual: "new-worker", minSeconds: 40 }, + { id: "close", visual: "close" }, + { id: "credits", visual: "credits", extraHold: 5 } +]; diff --git a/demo/video/src/theme.ts b/demo/video/src/theme.ts new file mode 100644 index 0000000..1eaec6e --- /dev/null +++ b/demo/video/src/theme.ts @@ -0,0 +1,15 @@ +export const theme = { + bg: "#0f1115", + panel: "#181b22", + border: "#2a2f3a", + text: "#eef0f4", + muted: "#9aa3b2", + orange: "#f38020", + amber: "#fbad41", + green: "#3ecf8e", + red: "#ef5b5b", + mono: "'JetBrains Mono', 'SF Mono', Menlo, monospace", + sans: "'Inter', -apple-system, 'Helvetica Neue', Arial, sans-serif" +}; + +export const WAX = ["#ef5b5b", "#f38020", "#fbad41", "#3ecf8e", "#4d9fff", "#a974ff", "#ff7ab6"]; diff --git a/demo/video/terminal/new-worker.tape b/demo/video/terminal/new-worker.tape new file mode 100644 index 0000000..ddeddfa --- /dev/null +++ b/demo/video/terminal/new-worker.tape @@ -0,0 +1,63 @@ +# Terminal recording for the "new-worker" scene: a fresh Worker with Code Mode +# and codemode-git, from `cf init` to a dry-run deploy (nothing is deployed). +# npm run record (from demo/video; writes public/clips/new-worker.mp4) +# VHS writes raw frames; scripts/record.mjs encodes them, because VHS's own +# encoder fails silently with ffmpeg 9. +# The two edited files come from terminal/new-worker/, copied in off-camera +# and then shown with cat. + +Output frames-new-worker/ +Set Framerate 30 +Require npx + +Set Shell "bash" +Set FontSize 26 +Set Width 1920 +Set Height 1080 +Set Padding 56 +Set TypingSpeed 40ms +Set WaitTimeout 240s +Set Theme { "name": "codemode", "background": "#0f1115", "foreground": "#eef0f4", "cursor": "#f38020", "selection": "#2a2f3a", "black": "#181b22", "red": "#ef5b5b", "green": "#3ecf8e", "yellow": "#fbad41", "blue": "#4d9fff", "magenta": "#a974ff", "cyan": "#5ad1e6", "white": "#eef0f4", "brightBlack": "#9aa3b2", "brightRed": "#ef5b5b", "brightGreen": "#3ecf8e", "brightYellow": "#fbad41", "brightBlue": "#4d9fff", "brightMagenta": "#a974ff", "brightCyan": "#5ad1e6", "brightWhite": "#ffffff" } + +# Off camera: a clean prompt, an empty directory, no credentials (the deploy is +# a dry run), and npm's minimum-release-age check off for this session only. +Hide +Type "export DEMO=$PWD/terminal/new-worker PS1='$ ' NPM_CONFIG_MIN_RELEASE_AGE=0 NPM_CONFIG_UPDATE_NOTIFIER=false && unset CLOUDFLARE_API_TOKEN && cd $(mktemp -d) && clear" +Enter +Sleep 500ms +Show + +Type "npx cf init lava-agent --package-manager npm" +Sleep 400ms +Enter +Wait+Screen /cf deploy/ +Sleep 2s + +Type "cd lava-agent && npm install @cloudflare/codemode @smithclay/codemode-git" +Sleep 400ms +Enter +Wait+Line /^\$\s*$/ +Sleep 1.5s + +# Off camera: add the agent and its bindings. +Hide +Type "cp $DEMO/cloudflare.config.ts . && cp $DEMO/src/index.ts src/ && clear" +Enter +Sleep 500ms +Show + +Type "cat cloudflare.config.ts" +Sleep 300ms +Enter +Sleep 6s + +Type "clear && head -24 src/index.ts" +Sleep 300ms +Enter +Sleep 8s + +Type "clear && npx cf deploy --dry-run" +Sleep 300ms +Enter +Wait+Screen /exiting now/ +Sleep 5s diff --git a/demo/video/terminal/new-worker/cloudflare.config.ts b/demo/video/terminal/new-worker/cloudflare.config.ts new file mode 100644 index 0000000..7381ea0 --- /dev/null +++ b/demo/video/terminal/new-worker/cloudflare.config.ts @@ -0,0 +1,17 @@ +import { bindings, defineConfig, exports } from "cf/config"; +import * as entrypoint from "./src/index.ts" with { type: "cf-worker" }; + +export default defineConfig({ + worker: { + name: "lava-agent", + compatibilityDate: "2026-10-06", + compatibilityFlags: ["nodejs_compat"], + entrypoint, + exports: { Agent: exports.durableObject({ storage: "sqlite" }) }, + env: { + ARTIFACTS: bindings.artifacts({ namespace: "codemode-git" }), + AGENT: bindings.durableObject({ worker: "lava-agent", exportName: "Agent" }), + LOADER: bindings.workerLoader(), + }, + }, +}); diff --git a/demo/video/terminal/new-worker/src/index.ts b/demo/video/terminal/new-worker/src/index.ts new file mode 100644 index 0000000..d4f2998 --- /dev/null +++ b/demo/video/terminal/new-worker/src/index.ts @@ -0,0 +1,33 @@ +import { DurableObject } from "cloudflare:workers"; +import { createCodemodeRuntime, DynamicWorkerExecutor } from "@cloudflare/codemode"; +import { ArtifactsSink, GitHistoryConnector } from "@smithclay/codemode-git"; + +export { CodemodeRuntime } from "@cloudflare/codemode"; + +type Env = { ARTIFACTS: Artifacts; LOADER: WorkerLoader; AGENT: DurableObjectNamespace }; + +// One Code Mode agent per name; every run is a commit on its own Artifacts repo. +export class Agent extends DurableObject { + async run(name: string, code: string) { + const history = new GitHistoryConnector(this.ctx, this.env, { + sink: new ArtifactsSink({ artifacts: this.env.ARTIFACTS, repo: `agent-${name}` }), + }); + const runtime = history.bind( + createCodemodeRuntime({ + ctx: this.ctx, + executor: new DynamicWorkerExecutor({ loader: this.env.LOADER }), + connectors: [history], + }), + ); + return runtime.execute({ code }); + } +} + +// Add auth before deploying for real: this runs any code it's sent. +export default { + async fetch(request, env) { + const name = new URL(request.url).searchParams.get("agent") ?? "demo"; + const agent = env.AGENT.get(env.AGENT.idFromName(name)); + return Response.json(await agent.run(name, await request.text())); + }, +} satisfies ExportedHandler; diff --git a/demo/video/transcript.md b/demo/video/transcript.md new file mode 100644 index 0000000..b23b0ec --- /dev/null +++ b/demo/video/transcript.md @@ -0,0 +1,85 @@ +# Demo video transcript + + + +## thesis + +What if Cloudflare Artifacts could make Code Mode in Workers self-improving? Every Code Mode run is a program. Keep every program in Artifacts, and let the next agent learn from it. That's codemode-git. + +## hook + +We used an open source data analytics benchmark with the same four hundred and fifty tasks. Accuracy went from thirty-two percent to forty-six. On the hardest tasks, from twenty-three to almost thirty-nine. The only thing we added was memory using Artifacts. + +## vanish + +Today, every Code Mode agent writes code, runs it, gets an answer, and the code is gone. A thousand agents solve similar problems hundreds of times, even if they've seen it before. + +## code-mode + +First, let's review Cloudflare's Code Mode. Agents don't call tools one at a time, sending every result back through the model: They write one program against the tools and run it in a fresh Worker isolate. That program is a complete record of how the agent solved the problem. + +## gap + +But the isolate is thrown away after every run, and the code goes with it. When similar tasks are given to the agent again, it forgets. + +## code-memory + +So we keep it in a Cloudflare Artifact git repository. Every execution becomes a commit on that agent's own personal repo: the code, every tool call and its result, and the outcome. One repo per agent, and one writer per repo. Nothing to lock, nothing to merge. + +## under-the-hood + +Under the hood, a connector hooks the end of every execution in the Cloudflare SDK. The run lands in a SQLite outbox inside the agent's Durable Object, and git pushes it to Artifacts. Any git client can read an agent's history and use that to learn. + +## repo + +Clone an agent's repo, and its log is the agent's trajectory: every attempt, every fix, every answer. + +## scale + +Artifacts is built for tens of millions of repos, so every agent gets its own, and they all write at the same time. + +## recall + +Here's a simple way agents can use Artifacts to learn. When a run produces an answer, Workers AI embeds the question and the code into Cloudflare Vectorize. The next agent with a similar question searches for similar solutions and uses that for better context. + +## walkthrough + + +Let's walk through an example: Cloudflare's wall of lava lamps. Agent Michelle asks how many lamps are flowing. With no memory, Michelle has to discover that the wall is paginated. Agent Matthew asks about the red lamps, starts from Michelle's run, and already knows to walk every page. + +## curve + +At scale, we ran the DABstep benchmark: four hundred and fifty real multi-step data investigations over payments data. With no code stored in Artifacts, both arms cost the same. However, as Code Mode and Vectorize index more programs, the median cost per task drops to about a third, within the first few dozen tasks, and it stays there. + +## accuracy + +And they're not just cheaper. They're right more often. Scored by DABstep: forty-six percent overall, up from thirty-two. + +## contagion + +We also learned what kind of memory works. Our first version distilled runs into a shared library of verified skills. One wrong skill spread to every agent that used it. Raw runs, labeled unverified, worked better, because each agent still runs its own code. + +## next-steps + +What's next. Today, a run becomes memory when it produces an answer. Next, we'll record whether that answer was right, as a git note on the commit, so agents learn from the runs that worked. Artifacts events can index each run the moment it's pushed. And agents can review their own history between tasks. + +## new-worker + +Getting started takes about a minute. Create a Worker with the cf CLI, and install Code Mode and codemode-git. Add the connector and three bindings: Artifacts, a Worker Loader, and a Durable Object. A dry run shows everything wired up. + +## close + +It's on npm: three lines in any Code Mode agent. Keep the code, and your Workers get smarter over time. + +## credits + +Built by Clay Smith, on Cloudflare. Thanks for watching. diff --git a/demo/video/tsconfig.json b/demo/video/tsconfig.json new file mode 100644 index 0000000..43ee2af --- /dev/null +++ b/demo/video/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "esnext", + "moduleResolution": "bundler", + "lib": ["dom", "es2023"], + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "noEmit": true, + "allowImportingTsExtensions": true, + "types": [] + }, + "include": ["src"] +} diff --git a/demo/video/worker/index.ts b/demo/video/worker/index.ts new file mode 100644 index 0000000..2e340af --- /dev/null +++ b/demo/video/worker/index.ts @@ -0,0 +1,24 @@ +// POST /tts {"text": "...", "speaker": "orion"} -> audio/mpeg (Deepgram Aura-2) +// POST /transcribe