From 8ca543862d16322e36706655c771e5cf63da1efb Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 30 May 2026 13:13:16 +0100 Subject: [PATCH 1/8] feat(review): Cloudflare-native Flue PR reviewer (Phase A scaffold) A token-free, prompt-injection-resistant automated PR reviewer that runs as a Cloudflare Worker. The agent reviews inside an isolated @cloudflare/sandbox container: it clones the public repo over anonymous https and diffs with plain git (no gh, no GitHub token), and runs Kimi via the Workers AI binding (no model API key). No secret is reachable by the model-directed shell. Phase A is the review workflow only, validated end-to-end with flue dev --target cloudflare against a real PR. Phase B will add the GitHub App webhook handler, installation-token minting, and the egress-proxy Sandbox subclass that injects the token for posting the review. Also bumps the wrangler catalog to ^4.95.0 (required by Flue's bundled @cloudflare/vite-plugin) and records build-script decisions for the new transitive deps. --- infra/flue-review/.flue/lib/review-schema.ts | 72 + .../flue-review/.flue/skills/review/SKILL.md | 75 + infra/flue-review/.flue/workflows/review.ts | 169 ++ infra/flue-review/.gitignore | 9 + infra/flue-review/Dockerfile | 6 + infra/flue-review/package.json | 24 + infra/flue-review/tsconfig.json | 17 + infra/flue-review/wrangler.jsonc | 28 + pnpm-lock.yaml | 2649 +++++++++++++++-- pnpm-workspace.yaml | 8 +- 10 files changed, 2726 insertions(+), 331 deletions(-) create mode 100644 infra/flue-review/.flue/lib/review-schema.ts create mode 100644 infra/flue-review/.flue/skills/review/SKILL.md create mode 100644 infra/flue-review/.flue/workflows/review.ts create mode 100644 infra/flue-review/.gitignore create mode 100644 infra/flue-review/Dockerfile create mode 100644 infra/flue-review/package.json create mode 100644 infra/flue-review/tsconfig.json create mode 100644 infra/flue-review/wrangler.jsonc diff --git a/infra/flue-review/.flue/lib/review-schema.ts b/infra/flue-review/.flue/lib/review-schema.ts new file mode 100644 index 000000000..ff07435dc --- /dev/null +++ b/infra/flue-review/.flue/lib/review-schema.ts @@ -0,0 +1,72 @@ +// Result schema for the Flue PR reviewer. +// +// The agent returns this structured shape. A separate GitHub Actions +// orchestrator reads it and posts the review with a write-scoped token; the +// agent itself never writes to GitHub. Keeping the shape flat and close to the +// GitHub review API (path/line/side + a free-form markdown body) means the +// orchestrator can map findings to review comments with almost no translation. + +import * as v from "valibot"; + +export const reviewResultSchema = v.object({ + verdict: v.pipe( + v.picklist(["approve", "comment", "request_changes"]), + v.description( + "approve: you would sign off / LGTM, no blocking issues. comment: non-blocking findings only (the default when you found things). request_changes: reserve for true blockers (security, data loss, a build/test break this PR introduces, or a backwards-incompatibility that violates the post-pre-release stability rule).", + ), + ), + summary: v.pipe( + v.string(), + v.maxLength(8000), + v.description( + "Overall review summary in GitHub-flavored markdown, posted as the review body. State what you checked and the headline conclusion. If you found nothing to fix, say so explicitly.", + ), + ), + findings: v.pipe( + v.array( + v.object({ + path: v.pipe( + v.string(), + v.minLength(1), + v.maxLength(400), + v.description("Repo-relative file path the comment anchors to."), + ), + line: v.pipe( + v.number(), + v.integer(), + v.minValue(1), + v.description("Line number to anchor on (the end line for a multi-line range)."), + ), + startLine: v.optional( + v.pipe( + v.number(), + v.integer(), + v.minValue(1), + v.description("Start line for a multi-line range. Omit for a single-line comment."), + ), + ), + side: v.pipe( + v.picklist(["LEFT", "RIGHT"]), + v.description("RIGHT for added or changed lines, LEFT for deleted lines."), + ), + severity: v.pipe( + v.picklist(["needs_fixing", "suggestion"]), + v.description( + "needs_fixing: logic bug, regression, security issue, broken contract, missing required test, or AGENTS.md convention violation. suggestion: style, minor refactor, nice-to-have, or low-confidence observation.", + ), + ), + body: v.pipe( + v.string(), + v.minLength(1), + v.maxLength(6000), + v.description( + "The line comment in markdown. State what the code currently does and why it is wrong, and cite the line. Use a ```suggestion block when the fix is a clean inline replacement.", + ), + ), + }), + ), + v.description("Line-anchored findings. Empty when the PR is clean."), + ), +}); + +export type ReviewResult = v.InferOutput; diff --git a/infra/flue-review/.flue/skills/review/SKILL.md b/infra/flue-review/.flue/skills/review/SKILL.md new file mode 100644 index 000000000..0002838f5 --- /dev/null +++ b/infra/flue-review/.flue/skills/review/SKILL.md @@ -0,0 +1,75 @@ +--- +name: review +description: Review one pull request for real bugs, regressions, and convention violations. Enumerate candidate issues across the whole diff, verify each against the code, then return structured line-anchored findings and a verdict. Read-only on GitHub; the orchestrator posts the review. +--- + +# Review a pull request + +You are reviewing a pull request on **emdash-cms/emdash**. Find real bugs, regressions, and gaps, and return structured findings; the orchestrator posts them as a single review. + +Review **statically**. Do not run the test suite, linter, `pnpm install`, or builds, CI does that, the sandbox may not have dependencies installed, and an install or build can burn your whole budget. Read code, trace with `grep`/`rg`, and reason. If confirming something would require installing tooling or running a build, say it's unverified rather than installing it. + +The repo's AGENTS.md is in your context. Check the PR against its conventions (Lingui localization, RTL-safe Tailwind, SQL safety, API envelope shape, authorization, locale filtering on content tables, index discipline, changesets). A violation is a real finding, not a nit. + +## Hard prohibitions + +- You make **no network writes of any kind**: no posting reviews, comments, or labels, no pushing. The orchestrator posts your structured result after you finish. You have no `gh` and no GitHub token; do not attempt to use them. +- No `git add` / `commit` / `push`. You may scaffold a change locally to test a hypothesis, but never commit it. +- Don't touch any PR or issue but this one. + +## Inputs + +The repository is checked out locally at your working directory with the **PR's head commit checked out** — the files you read are the PR's version as it would merge. The base branch is available as `origin/` (the `baseRef` is given in your inputs). Use plain `git`: + +- `git diff origin/...HEAD` to see exactly which lines this PR changes. +- `git diff --name-only origin/...HEAD` for the changed-file list. +- Read the full changed files directly; `grep`/`rg` the tree to trace call sites and siblings. If the built-in `grep` tool rejects a pattern, run `rg` via bash instead. + +The PR title, description, and any linked issue are provided in your inputs (you cannot fetch them — there is no network access to GitHub). Work from what you are given plus the checked-out code. + +## First, check whether this is a follow-up + +**You post as `emdashbot[bot]`.** If your inputs include prior-review context (earlier `emdashbot[bot]` findings and the author's replies), this is a **re-review**: read your prior findings, the author's replies to them, and the commits pushed since (`git log origin/..HEAD`). Concentrate on what changed, and **do not repost findings that are already resolved or that the author has reasonably addressed or pushed back on**. In your summary, say what's now fixed versus still open, and weigh the author's responses, if they explain why something is intentional, take it seriously rather than re-flagging it. If no prior-review context is provided, it's a fresh first review. + +## Method: frame, enumerate, verify + +Breadth first, depth second. The two most common ways to fail are to grade the implementation without ever asking whether the change should exist, and to latch onto the first interesting thread while the rest of the diff goes unread. Work in this order: + +1. **Frame the change and judge the approach.** Read the PR description, the linked issue or discussion, and the diff. Before grading the code, ask whether it is the right code at all: is it solving a real problem, and the *right* problem (did the author misread the issue)? Is the approach sound, does it fit EmDash's architecture and conventions, is there a simpler or more idiomatic way, is it good taste? Most of these PRs come from external contributors who may have the wrong end of the stick or questionable instincts, and **a flawless implementation of the wrong thing is still the wrong thing**, that matters more than any line-level bug. (For a *feature*, AGENTS.md requires a prior approved Discussion; an unsolicited feature may simply be the wrong thing to merge regardless of code quality.) This is a quick orienting judgment, not a deep dive, but carry any approach-level concern through to the summary and let it shape the verdict. +2. **Enumerate candidates.** Read the full changed files. Then write out a numbered list of *candidate* problems, as many as you can generate, specific to what this code actually does. Use the categories below to jog each kind of bug, but tailor them to the code: if it builds SQL, ask about injection and dialect differences; if it loops over values, ask about null/undefined/empty/zero; if it caches, ask about key stability and invalidation. Cover **every changed hunk**. Aim wide, you will cull later, an unconfirmed candidate costs nothing at this stage. +3. **Verify each candidate against the code.** Go down your list. For each, read the relevant code in full and trace call sites or sibling implementations only as far as needed to confirm or kill it. **Self-correct**: if a candidate turns out fine on inspection, drop it, do not report hypotheses you couldn't confirm. When code *looks* correct, treat that as a claim to disprove against the actual runtime semantics documented in AGENTS.md, not a conclusion, "it uses the right pattern" is exactly where caching, serialization, and concurrency bugs hide. +4. **Then go deep on systemic issues.** After the per-hunk sweep, step back and trace the cross-cutting concerns a line-by-line pass misses: does the change behave differently on the production runtime than in the test setup; does a cache or invalidation cover every write path; does a new query against a content table miss a `locale` filter; is a sibling implementation now inconsistent with the changed one. +5. **Prioritize.** Cull the survivors into findings with calibrated severity and choose a verdict. Coverage is the goal, not a tidy write-up, don't conclude until every changed hunk has been considered. + +## Candidate categories (a prompt to enumerate from, not a fixed checklist) + +- **Logic**: off-by-one, inverted or missing conditions (a stray `!`), wrong operator, fallthrough, coercion. +- **Edge cases**: empty / null / undefined / 0 / NaN, single-element, max/min/negative, unicode/RTL, called twice vs zero times. +- **Error handling**: swallowed errors, a missing `await`, over-broad catch, missing cleanup, internals leaked to clients. +- **State / concurrency / caching**: shared mutable state, stale closures, TOCTOU, cache key stability and lifetime, invalidation on *every* write path. +- **Security**: unsanitized input reaching SQL/HTML/shell/paths, missing or wrong authorization, secret/info leakage, open redirect, path traversal. +- **Data integrity**: validation at boundaries, partial writes without transactions, cascading deletes that orphan rows, schema/code mismatch, a missing `locale` filter on a content-table query. +- **Resources**: leaked handles/timers/listeners, unbounded growth, missing timeouts, retry without backoff. +- **Tests**: a fix without a reproducing test is not fixed; a mock that returns the thing the test claims to verify is false confidence. +- **AGENTS.md conventions** (see above). + +## Severity and verdict + +- `needs_fixing`: logic bugs, regressions, security issues, broken contracts, a change that defeats its own stated goal, missing required tests, AGENTS.md violations. +- `suggestion`: style, minor refactor, nice-to-have, low-confidence observations, misleading comments or docstrings. + +Calibrate. Don't tag things `needs_fixing` to look thorough, and don't downgrade a real bug to a nit. **Be willing to find nothing**: if the PR is genuinely clean, return an empty `findings` array and say so. + +- `verdict: approve` — you'd sign off. The LGTM case; usually no findings or only `suggestion`s. +- `verdict: comment` — **the default whenever you found things, including several `needs_fixing` ones.** Your findings are advice; the maintainer decides what blocks the merge button, not you. A stack of `needs_fixing` findings, a missing changeset, a missing test, a silent-drop bug, a doc nit, those are all `comment`. **The number and severity of findings do not, by themselves, escalate the verdict.** +- `verdict: request_changes` — **rare.** Reserve it for when merging *as-is* would cause concrete harm the maintainer must not miss: a security vulnerability, a data-loss bug, a build or test break this PR introduces, a backwards-incompatibility violating the post-pre-release stability rule, or a fundamentally wrong/unwanted approach. This is about a specific kind of harm, not a finding count. If you're torn between `comment` and `request_changes`, it's `comment`. + +## Output + +Return the result schema: + +- `verdict` as above. +- `summary`: the markdown review body. **Open with an explicit judgment of the approach** — is this the right change, solving the right problem, done a way that fits EmDash? If the approach is wrong or questionable, lead with that and don't bury it under line-level nits. Then state what you checked and the headline conclusion on the implementation; if the code is clean, say so explicitly. +- `findings`: one entry per line-anchored comment, each with `path`, `line` (plus `startLine` for a range), `side` (`RIGHT` for additions/changes, `LEFT` for deletions), `severity`, and a markdown `body` that states what the code does and why it's wrong, cites the line, and uses a ` ```suggestion ` block for a clean inline fix. + +Cite line numbers, be specific, and keep any hostility pointed at the code, not the author. diff --git a/infra/flue-review/.flue/workflows/review.ts b/infra/flue-review/.flue/workflows/review.ts new file mode 100644 index 000000000..7fc8ebead --- /dev/null +++ b/infra/flue-review/.flue/workflows/review.ts @@ -0,0 +1,169 @@ +// Review workflow (Cloudflare target). +// +// Reviews one pull request and returns structured findings plus a verdict. It +// does NOT post to GitHub: the workflow result is returned over HTTP and a +// separate orchestrator (the GitHub App webhook handler, Phase B) posts the +// review with a write-scoped installation token. +// +// Security model: the agent runs inside a @cloudflare/sandbox container with +// no GitHub token in its environment. emdash is a public repo, so the container +// clones it over anonymous https; nothing secret is ever exposed to the +// model-directed shell. The reviewer is git-only (no `gh`): it diffs the PR +// head against the base locally. Posting (Phase B) happens outside this +// container via the egress proxy, so the token never enters model-reachable +// space. + +import { createAgent, type FlueContext, type WorkflowRouteHandler } from "@flue/runtime"; +import { cfSandboxToSessionEnv } from "@flue/runtime/cloudflare"; +import { getSandbox, type Sandbox } from "@cloudflare/sandbox"; + +import { reviewResultSchema, type ReviewResult } from "../lib/review-schema.js"; +// Bundled as a SkillReference by the Flue build. Holds the full investigation +// protocol (git-only, ported from the ask-bonk auto-reviewer). +import review from "../skills/review/SKILL.md" with { type: "skill" }; + +interface ReviewPayload { + prNumber: number; + prTitle: string; + prBody: string; + /** Head ref name (informational; the head commit is fetched via pull/N/head). */ + headRef: string; + /** Base branch name, e.g. "main". The diff is taken against origin/. */ + baseRef: string; + owner: string; + repo: string; + /** + * Optional prior-review context for a re-review: earlier emdashbot[bot] + * findings and the author's replies, fetched by the orchestrator and passed + * in. Absent on a first review. + */ + priorReview?: string; +} + +// Kimi via the Cloudflare Workers AI binding: the `cloudflare/` prefix is +// reserved by Flue's generated CF entry and routed through `env.AI`, so no +// model API key is needed anywhere. +const reviewAgent = createAgent(({ env }) => ({ + model: "cloudflare/@cf/moonshotai/kimi-k2.6", + // The container's working dir is the checked-out PR. AGENTS.md at the repo + // root is auto-discovered into the agent's context from here. + cwd: "/workspace", + // Wire the @cloudflare/sandbox container into Flue via its CF adapter. + // (The deploy doc's bare `sandbox: getSandbox(...)` is unreleased sugar; on + // @flue/runtime 0.8.1 the supported path is a SandboxFactory that calls + // cfSandboxToSessionEnv.) `id` here is the per-session id Flue supplies, so + // each review run gets its own container instance. + sandbox: { + createSessionEnv: ({ id: sessionId, cwd: sessionCwd }) => + cfSandboxToSessionEnv( + getSandbox(env.Sandbox as DurableObjectNamespace, sessionId), + sessionCwd ?? "/workspace", + ), + }, + instructions: [ + "You are EmDash's automated pull request reviewer.", + "You investigate one PR in depth and return structured, line-anchored findings plus an overall verdict.", + "You are read-only: no network writes, no posting. The orchestrator posts your review after you finish.", + "Follow the review skill's protocol exactly and return strictly schema-conformant output.", + ].join(" "), + skills: [review], +})); + +// Phase A: open endpoint for local validation. Phase B replaces this with HMAC +// webhook-signature verification before calling next(). +export const route: WorkflowRouteHandler = async (_c, next) => next(); + +// GitHub login / repo-name charset. +const NAME = /^[A-Za-z0-9._-]+$/; +// Git ref: segments of safe chars joined by "/". No leading "-", no "..". +const REF = /^[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/; + +function assertSafe(payload: ReviewPayload): void { + if (!Number.isInteger(payload.prNumber) || payload.prNumber <= 0) { + throw new Error("payload.prNumber must be a positive integer"); + } + if (!payload.prTitle) { + throw new Error("payload.prTitle is required"); + } + for (const [key, value] of [ + ["owner", payload.owner], + ["repo", payload.repo], + ] as const) { + if (!value || !NAME.test(value)) { + throw new Error(`payload.${key} is missing or has unsafe characters`); + } + } + for (const [key, value] of [ + ["baseRef", payload.baseRef], + ["headRef", payload.headRef], + ] as const) { + if (!value || !REF.test(value) || value.includes("..")) { + throw new Error(`payload.${key} is missing or not a safe git ref`); + } + } +} + +function buildPrContext(payload: ReviewPayload): string { + const lines = [ + `PR #${payload.prNumber} in ${payload.owner}/${payload.repo}.`, + `Head ref: ${payload.headRef}. Base branch: ${payload.baseRef} (diff against origin/${payload.baseRef}).`, + `Title: ${payload.prTitle}`, + "", + "## Description", + "", + payload.prBody || "(no description provided)", + ]; + if (payload.priorReview) { + lines.push( + "", + "## Prior review context (this is a re-review)", + "", + payload.priorReview, + ); + } + return lines.join("\n"); +} + +export async function run(ctx: FlueContext): Promise { + const { init, payload } = ctx; + assertSafe(payload); + + const harness = await init(reviewAgent); + const session = await harness.session(); + + // Set up the checkout inside the container: init in /workspace, fetch the + // base branch and the PR head, check out the PR head (detached). Full fetch + // (no shallow/depth) so `git diff origin/...HEAD` can resolve a merge + // base. emdash is public, so anonymous https is sufficient. + const cloneUrl = `https://github.com/${payload.owner}/${payload.repo}.git`; + const setup = [ + "set -euo pipefail", + "cd /workspace", + "git init -q", + `git remote add origin ${cloneUrl} 2>/dev/null || git remote set-url origin ${cloneUrl}`, + `git fetch -q --no-tags origin ${payload.baseRef}:refs/remotes/origin/${payload.baseRef}`, + `git fetch -q --no-tags origin pull/${payload.prNumber}/head:refs/remotes/origin/pr`, + "git checkout -q -f refs/remotes/origin/pr", + ].join("\n"); + + const setupResult = await session.shell(setup); + if (setupResult.exitCode !== 0) { + throw new Error( + `git setup failed (exit ${setupResult.exitCode}): ${setupResult.stderr || setupResult.stdout}`, + ); + } + + const { data } = await session.skill(review, { + args: { + prContext: buildPrContext(payload), + owner: payload.owner, + repo: payload.repo, + prNumber: payload.prNumber, + baseRef: payload.baseRef, + headRef: payload.headRef, + }, + result: reviewResultSchema, + }); + + return data; +} diff --git a/infra/flue-review/.gitignore b/infra/flue-review/.gitignore new file mode 100644 index 000000000..df7763ef1 --- /dev/null +++ b/infra/flue-review/.gitignore @@ -0,0 +1,9 @@ +dist/ +.wrangler/ +.flue-vite/ +.flue-vite*.wrangler.jsonc +worker-configuration.d.ts +.dev.vars +.dev.vars.* +.env +.env.* diff --git a/infra/flue-review/Dockerfile b/infra/flue-review/Dockerfile new file mode 100644 index 000000000..e9bdb3660 --- /dev/null +++ b/infra/flue-review/Dockerfile @@ -0,0 +1,6 @@ +# Pinned to match the @cloudflare/sandbox version in package.json (0.10.3); +# the image and the SDK are versioned together. The base bundles the +# control-plane server, `node`, `git`, and `curl`, with a working dir at +# /workspace. The reviewer is git-only (no `gh`): it clones the public repo +# over https and diffs locally, so no extra tooling is required here. +FROM docker.io/cloudflare/sandbox:0.10.3 diff --git a/infra/flue-review/package.json b/infra/flue-review/package.json new file mode 100644 index 000000000..74f5215ab --- /dev/null +++ b/infra/flue-review/package.json @@ -0,0 +1,24 @@ +{ + "name": "@emdash-cms/flue-review", + "version": "0.0.1", + "private": true, + "type": "module", + "scripts": { + "dev": "flue dev --target cloudflare", + "build": "flue build --target cloudflare", + "deploy": "flue build --target cloudflare && wrangler deploy", + "cf-typegen": "wrangler types", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@flue/cli": "^0.8.1", + "typescript": "catalog:", + "wrangler": "catalog:" + }, + "dependencies": { + "@cloudflare/sandbox": "^0.10.3", + "@flue/runtime": "^0.8.1", + "agents": "^0.13.3", + "valibot": "^1.4.1" + } +} diff --git a/infra/flue-review/tsconfig.json b/infra/flue-review/tsconfig.json new file mode 100644 index 000000000..a8f613f16 --- /dev/null +++ b/infra/flue-review/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2023", + "module": "preserve", + "moduleResolution": "bundler", + "lib": ["ES2023"], + "types": [], + "strict": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "verbatimModuleSyntax": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "noEmit": true + }, + "include": [".flue/**/*.ts", "worker-configuration.d.ts"] +} diff --git a/infra/flue-review/wrangler.jsonc b/infra/flue-review/wrangler.jsonc new file mode 100644 index 000000000..191ce4e00 --- /dev/null +++ b/infra/flue-review/wrangler.jsonc @@ -0,0 +1,28 @@ +{ + "$schema": "node_modules/wrangler/config-schema.json", + "name": "emdash-flue-review", + "account_id": "1f74638c495bc9f0330ce5c8e64c1b6b", + "compatibility_date": "2026-04-01", + "compatibility_flags": ["nodejs_compat"], + // Workers AI binding. Flue's generated Cloudflare entry reserves the + // `cloudflare/` model prefix and routes it through this binding, so the + // reviewer model (`cloudflare/@cf/moonshotai/kimi-k2.6`) needs no API key. + "ai": { + "binding": "AI", + }, + // Container sandbox. Flue auto-wires any Durable Object class whose + // class_name ends in `Sandbox` to @cloudflare/sandbox's Sandbox class in + // the generated bundle. The reviewer needs a real Linux env for `git`. + "durable_objects": { + "bindings": [{ "class_name": "Sandbox", "name": "Sandbox" }], + }, + "migrations": [{ "tag": "v1", "new_sqlite_classes": ["Sandbox"] }], + "containers": [{ "class_name": "Sandbox", "image": "./Dockerfile" }], + "vars": { + "GITHUB_OWNER_LOGIN": "ascorbic", + "GITHUB_REPO": "emdash-cms/emdash", + }, + "observability": { + "enabled": true, + }, +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d62827866..a34e81d87 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,8 +247,8 @@ catalogs: specifier: ^4.1.5 version: 4.1.5 wrangler: - specifier: ^4.83.0 - version: 4.90.0 + specifier: ^4.95.0 + version: 4.95.0 zod: specifier: ^4.4.1 version: 4.4.1 @@ -366,7 +366,7 @@ importers: devDependencies: '@cloudflare/vite-plugin': specifier: 'catalog:' - version: 1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))(workerd@1.20260507.1)(wrangler@4.90.0) + version: 1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0) '@cloudflare/vitest-pool-workers': specifier: 'catalog:' version: 0.16.3(@vitest/runner@4.1.5)(@vitest/snapshot@4.1.5)(vitest@4.1.5) @@ -381,22 +381,22 @@ importers: version: 6.0.3 vite: specifier: 'catalog:' - version: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2) + version: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) demos/cloudflare: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare @@ -417,7 +417,7 @@ importers: version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -439,22 +439,22 @@ importers: version: 24.10.13 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) demos/playground: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -473,16 +473,16 @@ importers: version: 4.20260305.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) demos/plugins-demo: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/plugin-api-test': specifier: workspace:* version: link:../../packages/plugins/api-test @@ -506,7 +506,7 @@ importers: version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -528,10 +528,10 @@ importers: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@tanstack/react-query': specifier: 'catalog:' version: 5.90.21(react@19.2.4) @@ -540,7 +540,7 @@ importers: version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -562,10 +562,10 @@ importers: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare @@ -577,7 +577,7 @@ importers: version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -599,16 +599,16 @@ importers: version: 24.10.13 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) demos/simple: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/auth-atproto': specifier: workspace:* version: link:../../packages/auth-atproto @@ -626,7 +626,7 @@ importers: version: link:../../packages/plugins/color astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -648,22 +648,22 @@ importers: dependencies: '@astrojs/cloudflare': specifier: ^13.1.7 - version: 13.1.7(@types/node@24.10.13)(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260507.1)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.1.7(@types/node@24.10.13)(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/starlight': specifier: ^0.38.2 - version: 0.38.2(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)) + version: 0.38.2(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)) '@astrojs/starlight-tailwind': specifier: ^5.0.0 - version: 5.0.0(@astrojs/starlight@0.38.2(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)))(tailwindcss@4.2.1) + version: 5.0.0(@astrojs/starlight@0.38.2(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)))(tailwindcss@4.2.1) '@modelcontextprotocol/sdk': specifier: ^1.29.0 version: 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1) agents: specifier: ^0.12.0 - version: 0.12.0(@babel/core@7.29.0)(@babel/runtime@7.29.7)(@cloudflare/workers-types@4.20260305.1)(@x402/core@2.8.0)(@x402/evm@2.8.0(typescript@6.0.3))(ai@6.0.172(zod@4.4.1))(react@19.2.4)(rolldown@1.0.0-rc.18)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(zod@4.4.1) + version: 0.12.0(@babel/core@7.29.0)(@babel/runtime@7.29.7)(@cloudflare/workers-types@4.20260305.1)(@x402/core@2.8.0)(@x402/evm@2.8.0(typescript@6.0.3))(ai@6.0.172(zod@4.4.1))(react@19.2.4)(rolldown@1.0.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(zod@4.4.1) astro: specifier: ^6.1.3 - version: 6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) + version: 6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) sharp: specifier: ^0.34.5 version: 0.34.5 @@ -675,7 +675,7 @@ importers: version: 4.2.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) zod: specifier: ^4.4.1 version: 4.4.1 @@ -684,10 +684,10 @@ importers: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/auth': specifier: workspace:* version: link:../../packages/auth @@ -696,7 +696,7 @@ importers: version: link:../../packages/plugins/color astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -714,19 +714,19 @@ importers: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -751,7 +751,7 @@ importers: version: 4.20260305.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) i18n: devDependencies: @@ -760,16 +760,16 @@ importers: version: 24.10.13 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) infra/blog-demo: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare @@ -784,7 +784,7 @@ importers: version: link:../../packages/plugins/webhook-notifier astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -803,16 +803,16 @@ importers: version: 4.20260305.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) infra/cache-demo: dependencies: '@astrojs/cloudflare': specifier: https://pkg.pr.new/@astrojs/cloudflare@94d342d - version: https://pkg.pr.new/@astrojs/cloudflare@94d342d(@types/node@24.10.13)(astro@https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: https://pkg.pr.new/@astrojs/cloudflare@94d342d(@types/node@24.10.13)(astro@https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare @@ -827,7 +827,7 @@ importers: version: link:../../packages/plugins/webhook-notifier astro: specifier: https://pkg.pr.new/astro@94d342d - version: https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) + version: https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -855,28 +855,53 @@ importers: version: 6.0.3 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) + + infra/flue-review: + dependencies: + '@cloudflare/sandbox': + specifier: ^0.10.3 + version: 0.10.3 + '@flue/runtime': + specifier: ^0.8.1 + version: 0.8.1(@cfworker/json-schema@4.1.1)(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(typebox@1.1.38)(typescript@6.0.3)(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) + agents: + specifier: ^0.13.3 + version: 0.13.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(@cloudflare/workers-types@4.20260305.1)(@x402/core@2.8.0)(@x402/evm@2.8.0(typescript@6.0.3))(ai@6.0.172(zod@4.4.1))(react@19.2.4)(rolldown@1.0.2)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(zod@4.4.1) + valibot: + specifier: ^1.4.1 + version: 1.4.1(typescript@6.0.3) + devDependencies: + '@flue/cli': + specifier: ^0.8.1 + version: 0.8.1(@cfworker/json-schema@4.1.1)(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(typebox@1.1.38)(typescript@6.0.3)(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0)(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) + typescript: + specifier: 'catalog:' + version: 6.0.3 + wrangler: + specifier: 'catalog:' + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) infra/perf-monitor: devDependencies: '@cloudflare/vite-plugin': specifier: ^1.0.0 - version: 1.26.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(workerd@1.20260507.1)(wrangler@4.90.0) + version: 1.26.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: ^6.0.0 - version: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + version: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) infra/plugins-site: devDependencies: wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) packages/admin: dependencies: @@ -1045,10 +1070,10 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.7.0(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + version: 4.7.0(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) '@vitest/browser-playwright': specifier: ^4.1.5 - version: 4.1.5(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5) + version: 4.1.5(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -1069,10 +1094,10 @@ importers: version: 6.0.3 vite: specifier: ^7.0.0 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) vitest-browser-react: specifier: ^2.0.5 version: 2.0.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.5) @@ -1121,7 +1146,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/auth: dependencies: @@ -1152,7 +1177,7 @@ importers: version: 24.10.13 astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) publint: specifier: 'catalog:' version: 0.3.17 @@ -1164,7 +1189,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/auth-atproto: dependencies: @@ -1179,7 +1204,7 @@ importers: version: link:../auth astro: specifier: '>=5' - version: 6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) + version: 6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) emdash: specifier: workspace:>=0.15.0 version: link:../core @@ -1201,7 +1226,7 @@ importers: version: 19.2.14 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/blocks: dependencies: @@ -1235,7 +1260,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.7.0(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.7.0(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -1256,7 +1281,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/blocks/playground: dependencies: @@ -1278,7 +1303,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.2.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + version: 4.2.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) '@types/react': specifier: 'catalog:' version: 19.2.14 @@ -1287,7 +1312,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.7.0(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + version: 4.7.0(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) tailwindcss: specifier: ^4.1.11 version: 4.2.1 @@ -1296,7 +1321,7 @@ importers: version: 6.0.3 vite: specifier: ^6.3.5 - version: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + version: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) wrangler: specifier: ^4.63.0 version: 4.71.0(@cloudflare/workers-types@4.20260305.1) @@ -1305,7 +1330,7 @@ importers: dependencies: astro: specifier: '>=6.0.0-beta.0' - version: 6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) + version: 6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../core @@ -1339,7 +1364,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/contentful-to-portable-text: dependencies: @@ -1364,13 +1389,13 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/core: dependencies: '@astrojs/react': specifier: '>=5.0.0-beta.0' - version: 5.0.0-beta.4(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0-beta.4(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@atcute/client': specifier: 'catalog:' version: 4.2.1 @@ -1457,10 +1482,10 @@ importers: version: 3.7.0 astro: specifier: '>=6.0.0-beta.0' - version: 6.1.7(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) + version: 6.1.7(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) astro-portabletext: specifier: ^0.11.0 - version: 0.11.4(astro@6.1.7(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)) + version: 0.11.4(astro@6.1.7(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -1557,10 +1582,10 @@ importers: version: 6.0.3 vite: specifier: ^6.0.0 - version: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + version: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) zod-openapi: specifier: ^5.4.6 version: 5.4.6(zod@4.4.1) @@ -1595,7 +1620,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/gutenberg-to-portable-text: dependencies: @@ -1620,7 +1645,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/marketplace: dependencies: @@ -1651,10 +1676,10 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) packages/plugin-cli: dependencies: @@ -1730,7 +1755,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/plugin-types: devDependencies: @@ -1748,7 +1773,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/plugins/ai-moderation: dependencies: @@ -1773,7 +1798,7 @@ importers: version: 19.2.14 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/plugins/api-test: dependencies: @@ -1807,7 +1832,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/plugins/audit-log: dependencies: @@ -1845,10 +1870,10 @@ importers: version: link:../../blocks astro: specifier: '>=6.0.0-beta.0' - version: 6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) + version: 6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) astro-embed: specifier: ^0.12.0 - version: 0.12.0(astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2)) + version: 0.12.0(astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0)) emdash: specifier: workspace:>=0.15.0 version: link:../../core @@ -1876,7 +1901,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.7.0(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.7.0(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -1888,7 +1913,7 @@ importers: version: 19.2.4(react@19.2.4) vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/plugins/forms: dependencies: @@ -1900,7 +1925,7 @@ importers: version: 2.1.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) astro: specifier: '>=6.0.0-beta.0' - version: 6.0.0-beta.20(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) + version: 6.0.0-beta.20(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) emdash: specifier: workspace:>=0.11.0 version: link:../../core @@ -1913,7 +1938,7 @@ importers: devDependencies: vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/plugins/marketplace-test: dependencies: @@ -1995,7 +2020,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/registry-lexicons: dependencies: @@ -2023,7 +2048,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) packages/workerd: dependencies: @@ -2054,7 +2079,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) optionalDependencies: miniflare: specifier: ^4.20250408.0 @@ -2074,7 +2099,7 @@ importers: version: 0.18.2 astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) publint: specifier: 'catalog:' version: 0.3.17 @@ -2086,7 +2111,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) optionalDependencies: '@x402/svm': specifier: ^2.8.0 @@ -2096,13 +2121,13 @@ importers: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -2124,16 +2149,16 @@ importers: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/plugin-audit-log': specifier: workspace:* version: link:../../packages/plugins/audit-log astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -2155,10 +2180,10 @@ importers: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare @@ -2170,7 +2195,7 @@ importers: version: link:../../packages/plugins/webhook-notifier astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -2189,25 +2214,25 @@ importers: version: 4.20260305.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) templates/marketing: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@iconify-json/ph': specifier: 'catalog:' version: 1.2.2 astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) astro-iconset: specifier: 'catalog:' - version: 0.0.4(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.0.4(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -2229,10 +2254,10 @@ importers: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare @@ -2241,10 +2266,10 @@ importers: version: 1.2.2 astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) astro-iconset: specifier: 'catalog:' - version: 0.0.4(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.0.4(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) emdash: specifier: workspace:* version: link:../../packages/core @@ -2263,19 +2288,19 @@ importers: version: 4.20260305.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) templates/portfolio: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -2297,16 +2322,16 @@ importers: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -2325,19 +2350,19 @@ importers: version: 4.20260305.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) templates/starter: dependencies: '@astrojs/node': specifier: 'catalog:' - version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2)) + version: 10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0)) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) better-sqlite3: specifier: 'catalog:' version: 12.8.0 @@ -2359,16 +2384,16 @@ importers: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2) + version: 13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0) '@astrojs/react': specifier: 'catalog:' - version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2) + version: 5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0) '@emdash-cms/cloudflare': specifier: workspace:* version: link:../../packages/cloudflare astro: specifier: 'catalog:' - version: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + version: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) emdash: specifier: workspace:* version: link:../../packages/core @@ -2387,7 +2412,7 @@ importers: version: 4.20260305.1 wrangler: specifier: 'catalog:' - version: 4.90.0(@cloudflare/workers-types@4.20260305.1) + version: 4.95.0(@cloudflare/workers-types@4.20260305.1) packages: @@ -2416,6 +2441,15 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@anthropic-ai/sdk@0.91.1': + resolution: {integrity: sha512-LAmu761tSN9r66ixvmciswUj/ZC+1Q4iAfpedTfSVLeswRwnY3n2Nb6Tsk+cLPP28aLOPWeMgIuTuCcMC6W/iw==} + hasBin: true + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + zod: + optional: true + '@apidevtools/json-schema-ref-parser@14.0.1': resolution: {integrity: sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw==} engines: {node: '>= 16'} @@ -2802,6 +2836,107 @@ packages: '@atproto/xrpc@0.6.12': resolution: {integrity: sha512-Ut3iISNLujlmY9Gu8sNU+SPDJDvqlVzWddU8qUr0Yae5oD4SguaUFjjhireMGhQ3M5E0KljQgDbTmnBo1kIZ3w==} + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-bedrock-runtime@3.1048.0': + resolution: {integrity: sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/core@3.974.15': + resolution: {integrity: sha512-UpA0rTGW/tHGITcCqHisbuuEPraYg9GG+mWmXjY5+RxZBMLGe6aL9oe0ix50LztwAcPIkGZLH0yWdMIkCM10hw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-env@3.972.41': + resolution: {integrity: sha512-n1EbJ98yvPWWdHZZv8bRBMqqDQJrtgtxyJ4xLy2Uqrh25BCOZQ7nnS1CsFXvuH8r0b0KVHDZEGEH5FxmEMP8jg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-http@3.972.43': + resolution: {integrity: sha512-TT76RN1NkI9WoyZqCNxOw6/WBMF7pYOTJcXbMokNFU+euSG40Kaf/t/FhDACVZWP+43wEM6ZynIPIkzS1wR1iA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-ini@3.972.45': + resolution: {integrity: sha512-sJe5ZWibO4s7RWjFQ8Zol76KxoJcIYyEZH1/wxQSBMSIAAxzaJ8cS/ITAaIHWUQvDKQdt18+cJAHKWB7n1Jmrg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-login@3.972.45': + resolution: {integrity: sha512-MZQv4SNjByk1iOKmrqmzcUF/uCB05wjvEHyXKxmGQTUANTIVayX6HPUF0bzkWLvtnkH7sAn9kUCfkXbSpj9sDA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-node@3.972.46': + resolution: {integrity: sha512-cS4w0jzDRb1jOlkiJS3y80OxddHzkky/MN9k3NYs5jganNKVLjF0lpvjlwS118oGMr3cdAfOlVdo8gLurTSE7w==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-process@3.972.41': + resolution: {integrity: sha512-7I/n1zkysouLOWvkEhjNEP4vMnD2v4kzzr3/3QBdrripEpn7ap1/I5DF3Hou1SUqkKWo1f3oPGMyFAA1FAMvsQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-sso@3.972.45': + resolution: {integrity: sha512-oHgbz/eFD8IKiksqDsz9ZMU4A59BpQq4QwJedBnGD80ZqYcHPPHZBwjBnxLVkB7iRVVHWpDclR8yWdD2PkQIUA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.45': + resolution: {integrity: sha512-CDhzKdb2onv5bpnjn/acgdNmJOQthPDLsPizU7rZflsEcgMMp8Mlri+U5hdxf8ldvZJpvM3vLU6D56vfJm5AMQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/eventstream-handler-node@3.972.18': + resolution: {integrity: sha512-QPQhwY/fstR8fMZFWrsJRNoTP6D1RjRPHGRX7u9/VkF3opCsvD0oXPz6qzkX94SchzvuS5vyFZbJbPcMEs2Jeg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-eventstream@3.972.14': + resolution: {integrity: sha512-DoZ4djVj/74XQ6M/IwxuKh543tTvLCL7u1Dx+VDHMgW9yGNrFSJJ1l0LrUQRaekic5CB12wUiiOoHL0VI6H0gg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-websocket@3.972.23': + resolution: {integrity: sha512-F0d4A9pJFiwljyKgSwU1Z5n+CXSv8bp+V5SthbS2rftB8wBN9z1K2Yyv3xbeK0AM2T0g4q6Ptf0shFF+oQZyiA==} + engines: {node: '>= 14.0.0'} + + '@aws-sdk/nested-clients@3.997.13': + resolution: {integrity: sha512-2pA6eyb5nSo/ZD2cayhOTEMoGQYgspq0RI05GDLkzQ3ajZ6isS6waV6E92Am/hz4LIlLUTrbwPLurJ/fuiHvkg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.996.30': + resolution: {integrity: sha512-HULDLMVzkmTSEv6//7kx2kRevp/VYUpm8hJNNFbmhxDn0fUiGTxVcM9yg31TukvTq8nyOBDUN2gH0o5IRbKjdw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1048.0': + resolution: {integrity: sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1056.0': + resolution: {integrity: sha512-81duvlltQlsfn5K+o8zILcystBRdbT1G2JJYVCML5NZHBz4CL/zf+sAemCtBh/uh6RQUMyInGeZLQ7/8igZhbA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/types@3.973.9': + resolution: {integrity: sha512-kuBfgQVdcz5Bmapc4A13YbpVw/pXkesfhetcFYwbntqas8sF41OHyd4o28+/TG2ZQdHBsv90Lsu5y6oitvYCdg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/util-locate-window@3.965.5': + resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/xml-builder@3.972.26': + resolution: {integrity: sha512-cDbrqvDS73whl6YAPSPq0U6whzG6UWI9PuWh0wrUuGoZexhWEqhdunbukV7iBoaWnFV1AODutM5hOD6rtn439g==} + engines: {node: '>=20.0.0'} + + '@aws/lambda-invoke-store@0.2.4': + resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} + engines: {node: '>=18.0.0'} + '@axe-core/playwright@4.11.1': resolution: {integrity: sha512-mKEfoUIB1MkVTht0BGZFXtSAEKXMJoDkyV5YZ9jbBmZCcWDz71tegNsdTkIN8zc/yMi5Gm2kx7Z5YQ9PfWNAWw==} peerDependencies: @@ -2997,6 +3132,9 @@ packages: '@blazediff/core@1.9.1': resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + '@braidai/lang@1.0.0': resolution: {integrity: sha512-Ckpah5j8iAzDfc4YEP4uqnxyUznuAt6hRR093JSEYUgh2trQjCibQ2pfxHxzfz7y9vkUn9/rBxjFpGY+SPudHA==} @@ -3088,6 +3226,9 @@ packages: resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==} engines: {node: '>= 20.12.0'} + '@cloudflare/containers@0.3.5': + resolution: {integrity: sha512-P6jYEDkw1Q9qWRr9iFBxe1fozI5HfGMY6XrNg/jROPGZykcYrrzOluUqXv+q4N8gIoRXPCqJJ1FGALbTqnYTkg==} + '@cloudflare/kumo@2.3.0': resolution: {integrity: sha512-Nw3JzTIj3KDyl/d2+vXwSGXiu+E/NgL08Cqn/lxJkyc7tTEwBY3UgTFWNE9RHakCPo161LgZRysZuHy2YmOIPg==} hasBin: true @@ -3109,6 +3250,20 @@ packages: resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} engines: {node: '>=22.0.0'} + '@cloudflare/sandbox@0.10.3': + resolution: {integrity: sha512-UHAbkYpS5iB7WwOIN/+x3JC+mP0NPFcpgCXKoxCycwwfyp46Gq5eX4KffTp7WWFa4ghM04ZDkqmn9r4/959IbA==} + peerDependencies: + '@openai/agents': ^0.3.3 + '@opencode-ai/sdk': ^1.1.40 + '@xterm/xterm': '>=5.0.0' + peerDependenciesMeta: + '@openai/agents': + optional: true + '@opencode-ai/sdk': + optional: true + '@xterm/xterm': + optional: true + '@cloudflare/unenv-preset@2.15.0': resolution: {integrity: sha512-EGYmJaGZKWl+X8tXxcnx4v2bOZSjQeNI5dWFeXivgX9+YCT69AkzHHwlNbVpqtEUTbew8eQurpyOpeN8fg00nw==} peerDependencies: @@ -3154,6 +3309,12 @@ packages: vite: ^6.1.0 || ^7.0.0 || ^8.0.0 wrangler: ^4.90.0 + '@cloudflare/vite-plugin@1.39.0': + resolution: {integrity: sha512-AHC+KSR+3dtGu7Ab7I0Ode4Whx12TxMEmiZt7w+Fc3/2wYNByIzbb6cndWZ78tnveFdO1xhNLv1YaNngxGtOPg==} + peerDependencies: + vite: ^6.1.0 || ^7.0.0 || ^8.0.0 + wrangler: ^4.95.0 + '@cloudflare/vitest-pool-workers@0.16.3': resolution: {integrity: sha512-cnxtKBWoP5uhO78Z9zlCexj7oIs6zYoIH4GCEFS0Z6bepFDdnxtuMGxmWaDg84cy9teoh5CLA/OEN6XLSKcnWA==} peerDependencies: @@ -3179,6 +3340,12 @@ packages: cpu: [x64] os: [darwin] + '@cloudflare/workerd-darwin-64@1.20260526.1': + resolution: {integrity: sha512-/pR3GH3gfv0PUp7DjI8v0aAIDOqFwibq4bg5xT7TZgcVdBV/cJQWckdXCMqiRtHiawLwogUX00EIOINkYJ1Zqg==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20260301.1': resolution: {integrity: sha512-PPIetY3e67YBr9O4UhILK8nbm5TqUDl14qx4rwFNrRSBOvlzuczzbd4BqgpAtbGVFxKp1PWpjAnBvGU/OI/tLQ==} engines: {node: '>=16'} @@ -3197,6 +3364,12 @@ packages: cpu: [arm64] os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20260526.1': + resolution: {integrity: sha512-rcyu0iANYfaiezKh3Mcao1O4IIgVfQldxduiL5TZT1sP0NIeRY4YReSTrzPxNnXxSYaIqaqRHMcHbUM/ic4knA==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + '@cloudflare/workerd-linux-64@1.20260301.1': resolution: {integrity: sha512-Gu5vaVTZuYl3cHa+u5CDzSVDBvSkfNyuAHi6Mdfut7TTUdcb3V5CIcR/mXRSyMXzEy9YxEWIfdKMxOMBjupvYQ==} engines: {node: '>=16'} @@ -3215,6 +3388,12 @@ packages: cpu: [x64] os: [linux] + '@cloudflare/workerd-linux-64@1.20260526.1': + resolution: {integrity: sha512-5EZAEnlLwa9oGJRo8Nd3iY5Wcd9ROGNNG90xNIGp8MEjj8v2jTn42NC47fCZKFdnLj3+S+vWEhu1x0GVJnALjA==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + '@cloudflare/workerd-linux-arm64@1.20260301.1': resolution: {integrity: sha512-igL1pkyCXW6GiGpjdOAvqMi87UW0LMc/+yIQe/CSzuZJm5GzXoAMrwVTkCFnikk6JVGELrM5x0tGYlxa0sk5Iw==} engines: {node: '>=16'} @@ -3233,6 +3412,12 @@ packages: cpu: [arm64] os: [linux] + '@cloudflare/workerd-linux-arm64@1.20260526.1': + resolution: {integrity: sha512-X/YBQXeXFeCN7QTStoWrATEBc9WKl7PIqkw/dQkjyJ72gh3rkLe0+Xkzp3wO7gtxTDQMa7NPGy1W4+sdMf8q1g==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + '@cloudflare/workerd-windows-64@1.20260301.1': resolution: {integrity: sha512-Q0wMJ4kcujXILwQKQFc1jaYamVsNvjuECzvRrTI8OxGFMx2yq9aOsswViE4X1gaS2YQQ5u0JGwuGi5WdT1Lt7A==} engines: {node: '>=16'} @@ -3251,6 +3436,12 @@ packages: cpu: [x64] os: [win32] + '@cloudflare/workerd-windows-64@1.20260526.1': + resolution: {integrity: sha512-R+tqpFFdcfZIljx8fIW9rj9fRTtDgfoA2yonsfAGa6e8snrmr+38mdFHtkRC0D3UyZpn/hOtmXiUBfdX2gMR7Q==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + '@cloudflare/workers-types@4.20260305.1': resolution: {integrity: sha512-835BZaIcgjuYIUqgOWJSpwQxFSJ8g/X1OCZFLO7bmirM6TGmVgIGwiGItBgkjUXXCPrYzJEldsJkuFuK7ePuMw==} @@ -3337,6 +3528,15 @@ packages: oxlint: optional: true + '@earendil-works/pi-agent-core@0.77.0': + resolution: {integrity: sha512-l/mYLJPjpgiPDmcfnFIGdOBqICkWaf8IawCdAbae5guBrPXg+Z0o84l9OuHyRJPOb8RfedeGg8DtSnq8t7grOg==} + engines: {node: '>=22.19.0'} + + '@earendil-works/pi-ai@0.77.0': + resolution: {integrity: sha512-H21BrQDPf3ydaeBmS5maNDHxUGFMiKBF/n3WnE+OTWloIZSayeL+/NVEgG3aKQw8fZL6HAMYAGpUIVJgFuKtnw==} + engines: {node: '>=22.19.0'} + hasBin: true + '@emmetio/abbreviation@2.3.3': resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} @@ -3721,12 +3921,47 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@flue/cli@0.8.1': + resolution: {integrity: sha512-8aeaSf7RsXj4A4P+eQgTj8l2+17NScrVCK3UcbMuQ2pwAu84v5t6SQR2XvYuqActlidTIFR6+xxWS7dR9T7yZw==} + engines: {node: '>=22.18.0'} + hasBin: true + peerDependencies: + wrangler: ^4.94.0 + peerDependenciesMeta: + wrangler: + optional: true + + '@flue/runtime@0.8.1': + resolution: {integrity: sha512-nhIiNLr4NmsK6xgYgFt+mTFTKhHxMn++4gjzygYQIUqQK0GR4hgIjpvosl/361Xx087+8N0wNWh2MEVStoZCIg==} + engines: {node: '>=22.18.0'} + + '@google/genai@1.52.0': + resolution: {integrity: sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + '@hono/node-server@1.19.9': resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 + '@hono/node-server@2.0.4': + resolution: {integrity: sha512-Ut3y0dMMPWy6bZ2kVfx25EOVbZlm15dhF4mOsezMlhpNHy+4MkU1qN9Y6lnruYi4wPmFzimGX2X7LF/FwHli4A==} + engines: {node: '>=20'} + peerDependencies: + hono: ^4 + + '@hono/standard-validator@0.2.2': + resolution: {integrity: sha512-mJ7W84Bt/rSvoIl63Ynew+UZOHAzzRAoAXb3JaWuxAkM/Lzg+ZHTCUiz77KOtn2e623WNN8LkD57Dk0szqUrIw==} + peerDependencies: + '@standard-schema/spec': ^1.0.0 + hono: '>=3.9.0' + '@iconify-json/ph@1.2.2': resolution: {integrity: sha512-PgkEZNtqa8hBGjHXQa4pMwZa93hmfu8FUSjs/nv4oUU6yLsgv+gh9nu28Kqi8Fz9CCVu4hj1MZs9/60J57IzFw==} @@ -3913,6 +4148,21 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jitl/quickjs-ffi-types@0.32.0': + resolution: {integrity: sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg==} + + '@jitl/quickjs-wasmfile-debug-asyncify@0.32.0': + resolution: {integrity: sha512-EX8zbXwGqCgAE764M+qvkHtyXDi/FUoMBea0JnES7vCM3P7a2+EOZOjGv85wtZ2sJhI1oJ+nekmqpOODFDY+hw==} + + '@jitl/quickjs-wasmfile-debug-sync@0.32.0': + resolution: {integrity: sha512-LeYWrPGC1uNCTBWvibo3ZLJj0CSVNYUXvJpXMCmuQ5Sap2cCACc3uvGvYV4homHHBAzfw5akoTqMMS4YFRtw+Q==} + + '@jitl/quickjs-wasmfile-release-asyncify@0.32.0': + resolution: {integrity: sha512-3oSwPfja12ICz4aIblB58cuY8JlEq5Txt8Cut4VLo+LH47QN+mzCnSgnbB03hWzg1LBcc+VyyI9UOag7a1NF+Q==} + + '@jitl/quickjs-wasmfile-release-sync@0.32.0': + resolution: {integrity: sha512-BKNDI/TPBfGlLNGYpLrhcDGXmIk4xHm4MRAisOBnOzpXVn9HZWsfmMAc9WMBrAHjvvds6HOikKeaOBKdPdpVrg==} + '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} @@ -4087,6 +4337,12 @@ packages: '@messageformat/parser@5.1.1': resolution: {integrity: sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==} + '@mistralai/mistralai@2.2.1': + resolution: {integrity: sha512-uKU8CZmL2RzYKmplsU01hii4p3pe4HqJefpWNRWXm1Tcm0Sm4xXfwSLIy4k7ZCPlbETCGcp69E7hZs+WOJ5itQ==} + + '@mixmark-io/domino@2.2.0': + resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} + '@modelcontextprotocol/sdk@1.26.0': resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} engines: {node: '>=18'} @@ -4107,6 +4363,10 @@ packages: '@cfworker/json-schema': optional: true + '@mongodb-js/zstd@7.0.0': + resolution: {integrity: sha512-mQ2s0pYYiav+tzCDR05Zptem8Ey2v8s11lri5RKGhTtL4COVCvVCk5vtyRYNT+9L8qSfyOqqefF9UtnW8mC5jA==} + engines: {node: '>= 20.19.0'} + '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} @@ -4134,6 +4394,9 @@ packages: '@noble/secp256k1@3.1.0': resolution: {integrity: sha512-+F7iS7tUMaNGXcc9X3PjmjvuQnXEuSjCRNzVVA2xAcKXgCaP0dHYz4SFyt4FKNHef7sOP//xihowcySSS7PK9g==} + '@nodable/entities@2.1.1': + resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -4197,6 +4460,9 @@ packages: '@oxc-project/types@0.128.0': resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==} + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + '@oxc-resolver/binding-android-arm-eabi@11.16.4': resolution: {integrity: sha512-6XUHilmj8D6Ggus+sTBp64x/DUQ7LgC/dvTDdUOt4iMQnDdSep6N1mnvVLIiG+qM5tRnNHravNzBJnUlYwRQoA==} cpu: [arm] @@ -4749,6 +5015,36 @@ packages: resolution: {integrity: sha512-djfIGU9n6DRrunlvj2nIDAp17URo/nA4jSXGvf+Gupx8NLLy9fmJBZ3GL8yhqn9lSVc+cKCharjOa3aOBnWbRw==} engines: {node: '>=20.19 <22 || >=22.12'} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} + + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} + + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.2': + resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.1': + resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} + '@publint/pack@0.1.4': resolution: {integrity: sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==} engines: {node: '>=18'} @@ -4777,6 +5073,12 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.0.2': + resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.0-rc.18': resolution: {integrity: sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4795,6 +5097,12 @@ packages: cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.2': + resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-rc.18': resolution: {integrity: sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4813,6 +5121,12 @@ packages: cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.2': + resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-rc.18': resolution: {integrity: sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4831,6 +5145,12 @@ packages: cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.2': + resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': resolution: {integrity: sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4849,6 +5169,12 @@ packages: cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': resolution: {integrity: sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4870,6 +5196,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': resolution: {integrity: sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4891,6 +5224,13 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': resolution: {integrity: sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4898,6 +5238,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': resolution: {integrity: sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4905,6 +5252,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.0.2': + resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': resolution: {integrity: sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4926,6 +5280,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': resolution: {integrity: sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4947,6 +5308,13 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': resolution: {integrity: sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4965,6 +5333,12 @@ packages: cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.0.2': + resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': resolution: {integrity: sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4980,6 +5354,11 @@ packages: engines: {node: '>=14.0.0'} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.2': + resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': resolution: {integrity: sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4998,6 +5377,12 @@ packages: cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': resolution: {integrity: sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5016,6 +5401,12 @@ packages: cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/plugin-babel@0.2.3': resolution: {integrity: sha512-+zEk16yGlz1F9STiRr6uG9hmIXb6nprjLczV/htGptYuLoCuxb+itZ03RKCEeOhBpDDd1NU7qF6x1VLMUp62bw==} engines: {node: '>=22.12.0 || ^24.0.0'} @@ -5045,6 +5436,9 @@ packages: '@rolldown/pluginutils@1.0.0-rc.5': resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -5295,6 +5689,46 @@ packages: resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} + '@smithy/core@3.24.5': + resolution: {integrity: sha512-Kt8phUg45M15EjhYAbZ+fFikYneijLu9Liugz8ZsYz2i8j0hzGv27LWKpEHYRfvj+LyCOSijpcR/2i8RouV+cA==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.3.5': + resolution: {integrity: sha512-yiF8xHpdkaTfzLVqFzsP6WvNghEK+qZzLYWFD13L2SsFhbXwBGlxdocKF95qjr7s5lE5NRage+EJFK4mAsx88Q==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.4.5': + resolution: {integrity: sha512-SK3VMeH0fibgdTg2QeB+O4p7Yy/2E5HBOHJeC58FshkDdeuX8lOgO7PfjYfLyPLP1ch55j91cQqKBzDS0mRjSQ==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/node-http-handler@4.7.3': + resolution: {integrity: sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.7.5': + resolution: {integrity: sha512-3dA9TQ+ybRSZ/m0wnbZhiBy4Dezjgq1Ib/ZZrYTpJDBgpoLLU/SDzZc/g0x0MNAdOJe1wPcM+x2PBRmoOur+Sw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.4.5': + resolution: {integrity: sha512-QBJKWGqIknH0dc9LWpfH1mkdokAx6iXYN3UcQ3eY6uIEyScuoQAhfl94ge7ozUy9WgFUdE8xsvwBjaYBbWmPNA==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.14.2': + resolution: {integrity: sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + '@solana-program/compute-budget@0.11.0': resolution: {integrity: sha512-7f1ePqB/eURkTwTOO9TNIdUXZcyrZoX3Uy2hNo7cXMfNhPFWp9AVgIyRNBc2jf15sdUa9gNpW+PfP2iV8AYAaw==} peerDependencies: @@ -5669,6 +6103,67 @@ packages: '@speed-highlight/core@1.2.14': resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} + '@standard-community/standard-json@0.3.5': + resolution: {integrity: sha512-4+ZPorwDRt47i+O7RjyuaxHRK/37QY/LmgxlGrRrSTLYoFatEOzvqIc85GTlM18SFZ5E91C+v0o/M37wZPpUHA==} + peerDependencies: + '@standard-schema/spec': ^1.0.0 + '@types/json-schema': ^7.0.15 + '@valibot/to-json-schema': ^1.3.0 + arktype: ^2.1.20 + effect: ^3.16.8 + quansync: ^0.2.11 + sury: ^10.0.0 + typebox: ^1.0.17 + valibot: ^1.1.0 + zod: ^3.25.0 || ^4.0.0 + zod-to-json-schema: ^3.24.5 + peerDependenciesMeta: + '@valibot/to-json-schema': + optional: true + arktype: + optional: true + effect: + optional: true + sury: + optional: true + typebox: + optional: true + valibot: + optional: true + zod: + optional: true + zod-to-json-schema: + optional: true + + '@standard-community/standard-openapi@0.2.9': + resolution: {integrity: sha512-htj+yldvN1XncyZi4rehbf9kLbu8os2Ke/rfqoZHCMHuw34kiF3LP/yQPdA0tQ940y8nDq3Iou8R3wG+AGGyvg==} + peerDependencies: + '@standard-community/standard-json': ^0.3.5 + '@standard-schema/spec': ^1.0.0 + arktype: ^2.1.20 + effect: ^3.17.14 + openapi-types: ^12.1.3 + sury: ^10.0.0 + typebox: ^1.0.0 + valibot: ^1.1.0 + zod: ^3.25.0 || ^4.0.0 + zod-openapi: ^4 + peerDependenciesMeta: + arktype: + optional: true + effect: + optional: true + sury: + optional: true + typebox: + optional: true + valibot: + optional: true + zod: + optional: true + zod-openapi: + optional: true + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -6167,6 +6662,13 @@ packages: y-protocols: ^1.0.1 yjs: ^13.5.38 + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -6262,6 +6764,9 @@ packages: '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/sanitize-html@2.16.0': resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==} @@ -6334,6 +6839,15 @@ packages: '@unpic/placeholder@0.1.2': resolution: {integrity: sha512-O++tS97biojo5sqn5TeTt+jUjl5gWOdIQuOXe8YluTJWq4L0GM6VuTkaspNpsmxHfioJw/6YBirzOpG4t87l8Q==} + '@valibot/to-json-schema@1.7.0': + resolution: {integrity: sha512-Y3pPVibbIOHzohrlxSINvO7w/bvXkoYS3BQHoImV9ynE+bXKf171bdMucPurV2zp7gdmt0L1HCcNAsbo7cFRQw==} + peerDependencies: + valibot: ^1.4.0 + + '@vercel/detect-agent@1.2.3': + resolution: {integrity: sha512-VYNCgUc0nOmC4WJmWw9GkrKdfr8Zl4/rxhC5SvgacBgxiW9W/9NRttUoHHXV8xdII3MaRgkZZVX8Ikzc/Jmjag==} + engines: {node: '>=14'} + '@vercel/oidc@3.2.0': resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} engines: {node: '>= 20'} @@ -6501,6 +7015,36 @@ packages: vite: optional: true + agents@0.13.3: + resolution: {integrity: sha512-sanbvHT9rdMuxq9rsBukqqVr88W7s0t6WXFuRdA0uxqikTMCb7Oki9aGWcgjoUN0qvaV/qlJ9RLTQAVSw/eLNg==} + hasBin: true + peerDependencies: + '@cloudflare/ai-chat': '>=0.6.1 <1.0.0' + '@cloudflare/codemode': '>=0.3.4 <1.0.0' + '@tanstack/ai': '>=0.10.2 <1.0.0' + '@x402/core': ^2.0.0 + '@x402/evm': ^2.0.0 + ai: ^6.0.0 + chat: ^4.29.0 + react: ^19.0.0 + vite: '>=6.0.0 <9.0.0' + zod: ^4.0.0 + peerDependenciesMeta: + '@cloudflare/ai-chat': + optional: true + '@cloudflare/codemode': + optional: true + '@tanstack/ai': + optional: true + '@x402/core': + optional: true + '@x402/evm': + optional: true + chat: + optional: true + vite: + optional: true + ai@6.0.172: resolution: {integrity: sha512-o12q2SDlrN4btPU2FkFSVEeZiKfQuSbDFixXH8I7AE/zuCXMbN9ilaPThdoAc8mS9+QnhUGy8cSP0IgT3Q+p0A==} engines: {node: '>=18'} @@ -6682,6 +7226,9 @@ packages: await-lock@2.2.2: resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} + aws4fetch@1.0.20: + resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} + axe-core@4.11.1: resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} engines: {node: '>=4'} @@ -6718,6 +7265,9 @@ packages: resolution: {integrity: sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -6744,6 +7294,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} + brace-expansion@5.0.5: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} @@ -6757,6 +7310,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -6793,6 +7349,9 @@ packages: caniuse-lite@1.0.30001765: resolution: {integrity: sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==} + capnweb@0.8.0: + resolution: {integrity: sha512-BK/TuXUiyfLSKsmjojn70yN7oYG/JJzoURZ3tckjg5Zj2KcygPm0A5jyOlswK7SYB4f0Gh9tt+RZ132b80iLfA==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -6932,6 +7491,10 @@ packages: resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + common-ancestor-path@2.0.0: resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} engines: {node: '>= 18'} @@ -7184,6 +7747,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + echarts@6.0.0: resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} @@ -7417,6 +7983,17 @@ packages: fast-wrap-ansi@0.2.0: resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} + fast-xml-builder@1.2.0: + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + + fast-xml-parser@5.7.3: + resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} + hasBin: true + + fast-xml-parser@5.8.0: + resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==} + hasBin: true + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -7439,6 +8016,10 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -7450,6 +8031,10 @@ packages: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -7531,6 +8116,14 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gaxios@7.1.4: + resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} + engines: {node: '>=18'} + + gcp-metadata@8.1.2: + resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} + engines: {node: '>=18'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -7586,6 +8179,14 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + google-auth-library@10.6.2: + resolution: {integrity: sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==} + engines: {node: '>=18'} + + google-logging-utils@1.1.3: + resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} + engines: {node: '>=14'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -7674,6 +8275,25 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hono-openapi@1.3.0: + resolution: {integrity: sha512-xDvCWpWEIv0weEmnl3EjRQzqbHIO8LnfzMuYOCmbuyE5aes6aXxLg4vM3ybnoZD5TiTUkA6PuRQPJs3R7WRBig==} + peerDependencies: + '@hono/standard-validator': ^0.2.0 + '@standard-community/standard-json': ^0.3.5 + '@standard-community/standard-openapi': ^0.2.9 + '@types/json-schema': ^7.0.15 + hono: ^4.8.3 + openapi-types: ^12.1.3 + peerDependenciesMeta: + '@hono/standard-validator': + optional: true + hono: + optional: true + + hono@4.12.23: + resolution: {integrity: sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==} + engines: {node: '>=16.9.0'} + hono@4.12.4: resolution: {integrity: sha512-ooiZW1Xy8rQ4oELQ++otI2T9DsKpV0M6c6cO6JGx4RTfav9poFFLlet9UMXHZnoM1yG0HWGlQLswBGX3RZmHtg==} engines: {node: '>=16.9.0'} @@ -7738,6 +8358,10 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + image-size@2.0.2: resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} engines: {node: '>=16.x'} @@ -7757,6 +8381,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -7929,9 +8557,16 @@ packages: engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-to-ts@3.1.1: + resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} + engines: {node: '>=16'} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -7955,6 +8590,16 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + just-bash@3.0.1: + resolution: {integrity: sha512-YVyzCN08fKarUnwqy7rKOAcX+2MLYLnYInuowmUXn3mqhrtd4ieZNBuzdQG+qYV9DqnIWuv9Whiph0WRIWsBtw==} + hasBin: true + + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -8245,6 +8890,9 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -8537,6 +9185,11 @@ packages: engines: {node: '>=22.0.0'} hasBin: true + miniflare@4.20260526.0: + resolution: {integrity: sha512-JYQ7jPZZWoaaj9jWHb8Ucp6Cu2SbDVqIsAJhumqdzzLkkfq0pYkDeino/sZfW1ixJWPjv/C44zjm9gVJC2izCA==} + engines: {node: '>=22.0.0'} + hasBin: true + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -8633,6 +9286,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.1.11: resolution: {integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==} engines: {node: ^18 || >=20} @@ -8664,6 +9322,10 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-addon-api@8.8.0: + resolution: {integrity: sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==} + engines: {node: ^18 || ^20 || >= 21} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -8689,6 +9351,15 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-liblzma@2.2.0: + resolution: {integrity: sha512-s0KzNOWwOJJgPG6wxg6cKohnAl9Wk/oW1KrQaVzJBjQwVcUGPQCzpR46Ximygjqj/3KhOrtJXnYMp/xYAXp75g==} + engines: {node: '>=16.0.0'} + hasBin: true + node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} @@ -8751,6 +9422,18 @@ packages: oniguruma-to-es@4.3.4: resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + openai@6.26.0: + resolution: {integrity: sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} @@ -8826,6 +9509,10 @@ packages: resolution: {integrity: sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==} engines: {node: '>=20'} + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + p-timeout@7.0.1: resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} engines: {node: '>=20'} @@ -8843,6 +9530,10 @@ packages: package-manager-detector@1.6.0: resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + package-up@5.0.0: + resolution: {integrity: sha512-MQEgDUvXCa3sGvqHg3pzHO8e9gqTCMPVrWUko3vPQGntwegmFo52mZb2abIVTjFnUcW0BcPz0D93jV5Cas1DWA==} + engines: {node: '>=18'} + pagefind@1.4.0: resolution: {integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==} hasBin: true @@ -8850,6 +9541,9 @@ packages: pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + papaparse@5.5.3: + resolution: {integrity: sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -8886,11 +9580,19 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + partial-json@0.1.7: + resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + partyserver@0.5.5: resolution: {integrity: sha512-7zub8oV8Od9dY2aXGrgzhX5GLceaWOg7xB5VWXtDcqt2BWVDIOCAgaF0AmBMSu3AXhJHsFdzPnA8SSZdybXMbQ==} peerDependencies: '@cloudflare/workers-types': ^4.20260424.1 + partyserver@0.5.6: + resolution: {integrity: sha512-/LKCqlq9nWzNXA8UXZFO/Xz15QDCjJnGAgRQVLnXJO9bA0HKt5J8VM8wLnGc814WatzuQgeG17tqzI//y5WFGA==} + peerDependencies: + '@cloudflare/workers-types': ^4.20260424.1 + partysocket@1.1.18: resolution: {integrity: sha512-SyuvH9VavWOSa14v6dYdp3yfSUDII4BQB1+TkGOFBkjfZKjnDBiba4fhdhwBlqGBkqw4ea3gTA1DYhSffX24Wg==} peerDependencies: @@ -8899,6 +9601,14 @@ packages: react: optional: true + partysocket@1.1.19: + resolution: {integrity: sha512-hPwsXSdUc8PKNCinET6TD3JQOxzQ2JaP0bUZQXBVl6UM8UuLn1odgf1LcJXHy4UHSQwWL/RU3AnyhEsGM+W+sg==} + peerDependencies: + react: '>=17' + peerDependenciesMeta: + react: + optional: true + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -8906,6 +9616,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -9041,6 +9755,10 @@ packages: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -9169,6 +9887,10 @@ packages: prosemirror-view@1.41.5: resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} + protobufjs@7.6.1: + resolution: {integrity: sha512-4K0myLaWL5EteuSAro91EGFgcfVgxb64Jx+7oDAY6GOkXD4M69yuSEljNcInGVCA5sOPxmZ/EqDLj2x0Q0+Ygg==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -9198,6 +9920,9 @@ packages: resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + quansync@1.0.0: resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} @@ -9207,6 +9932,13 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quickjs-emscripten-core@0.32.0: + resolution: {integrity: sha512-QFnPfjFey8EqknSrSxe1hZrf1/8z7/6s1QzGOmKo6++02r7QRRX7ZoyNaZh7JuVjWsVW87KnQrbZqnHkOAzUyg==} + + quickjs-emscripten@0.32.0: + resolution: {integrity: sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA==} + engines: {node: '>=16.0.0'} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -9222,6 +9954,9 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true + re2js@1.3.3: + resolution: {integrity: sha512-s/I5zEAo79SUK0Qw4dpZKpiMwbQ6Gz0KU2NRr7eaO4x/p2g7Vvmn3hdeXDg8VsaUjfj/ora+e9oi27LX/C9+mw==} + react-day-picker@9.14.0: resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==} engines: {node: '>=18'} @@ -9395,6 +10130,10 @@ packages: retext@9.0.0: resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -9433,6 +10172,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.0.2: + resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.55.2: resolution: {integrity: sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -9441,6 +10185,26 @@ packages: rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + rosie-skills-darwin-arm64@0.6.4: + resolution: {integrity: sha512-rn1s5hqFKcxeiDEWWoFa1hdGPshR8TkwHLzy/cBavb9XJNAaUxbe3oQ78W9sQkRHAgRyzJYyk9tw68Qrdnizgg==} + cpu: [arm64] + os: [darwin] + + rosie-skills-freebsd-x64@0.6.4: + resolution: {integrity: sha512-SxCRduPBMtfjkQ+q56Yw9OLA3PyaqoALzt7kER7IDKuUVfM2O/1w8sa5xhTDiCvWkZJixnH5d5Ya6KT+/Mwcng==} + cpu: [x64] + os: [freebsd] + + rosie-skills-linux-x64@0.6.4: + resolution: {integrity: sha512-D9Y9mfu7goB0s0X59uU3hcFeUTef3VbpCIDwFMzyvJrAq3XhRACWBDMHQsHlyWdHxTXPX/ILyW65RXyrJlgqng==} + cpu: [x64] + os: [linux] + + rosie-skills@0.6.4: + resolution: {integrity: sha512-ojfhSiQRdZ2QyWbmKAHOSAUbaLYrTc5zIH7mS1jKoP8KCFSQddwVhMyFqldckTeybTfW3zNcsZzyOTzGTN1SBA==} + engines: {node: '>=18'} + hasBin: true + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -9489,6 +10253,10 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + seek-bzip@2.0.0: + resolution: {integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -9628,6 +10396,12 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + sql.js@1.14.1: + resolution: {integrity: sha512-gcj8zBWU5cFsi9WUP+4bFNXAyF1iRpA3LLyS/DP5xlrNzGmPIizUeBggKa8DbDwdqaKwUcTEnChtd2grWo/x/A==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -9678,6 +10452,13 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} + strnum@2.3.0: + resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} + style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -9822,6 +10603,10 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -9847,6 +10632,9 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-algebra@2.0.0: + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} + tsconfck@3.1.6: resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} @@ -9891,6 +10679,10 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + turndown@7.2.4: + resolution: {integrity: sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ==} + engines: {node: '>=18', npm: '>=9'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -9899,6 +10691,9 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} + typebox@1.1.38: + resolution: {integrity: sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==} + typesafe-path@0.2.2: resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} @@ -9926,6 +10721,10 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + uint8arrays@3.0.0: resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} @@ -10175,6 +10974,14 @@ packages: typescript: optional: true + valibot@1.4.1: + resolution: {integrity: sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + validate-npm-package-name@5.0.1: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -10366,6 +11173,49 @@ packages: yaml: optional: true + vite@8.0.14: + resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.1.2: resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} peerDependencies: @@ -10594,6 +11444,11 @@ packages: engines: {node: '>=16'} hasBin: true + workerd@1.20260526.1: + resolution: {integrity: sha512-IHzymht98p10JH1zzwdCpbViAqw97HrwKl7+KfZeASFMsYSrIsAULWdPn0LRC5FTUzBpamLNyKCCKxbgXHgRHQ==} + engines: {node: '>=16'} + hasBin: true + wrangler@4.71.0: resolution: {integrity: sha512-j6pSGAncOLNQDRzqtp0EqzYj52CldDP7uz/C9cxVrIgqa5p+cc0b4pIwnapZZAGv9E1Loa3tmPD0aXonH7KTkw==} engines: {node: '>=20.0.0'} @@ -10624,6 +11479,16 @@ packages: '@cloudflare/workers-types': optional: true + wrangler@4.95.0: + resolution: {integrity: sha512-vgXzFVSCdUbeCadgVXvu8fK5tzNm8T9W+7lriyGWZMx0B1+CAdr4d8JTlZszHfgjypRAHmAxb49etZGIRD9pgg==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20260526.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -10671,10 +11536,38 @@ packages: utf-8-validate: optional: true + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + 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 + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + 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 + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xml-naming@0.1.0: + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + engines: {node: '>=16.0.0'} + xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -10715,6 +11608,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -10805,6 +11703,12 @@ snapshots: package-manager-detector: 1.6.0 tinyexec: 1.0.4 + '@anthropic-ai/sdk@0.91.1(zod@4.4.1)': + dependencies: + json-schema-to-ts: 3.1.1 + optionalDependencies: + zod: 4.4.1 + '@apidevtools/json-schema-ref-parser@14.0.1': dependencies: '@types/json-schema': 7.0.15 @@ -10865,7 +11769,7 @@ snapshots: dependencies: '@astro-community/astro-embed-utils': 0.2.0 - '@astro-community/astro-embed-integration@0.11.0(astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2))': + '@astro-community/astro-embed-integration@0.11.0(astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0))': dependencies: '@astro-community/astro-embed-bluesky': 0.1.6 '@astro-community/astro-embed-gist': 0.1.0 @@ -10875,8 +11779,8 @@ snapshots: '@astro-community/astro-embed-vimeo': 0.3.12 '@astro-community/astro-embed-youtube': 0.5.10 '@types/unist': 3.0.3 - astro: 6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) - astro-auto-import: 0.4.6(astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2)) + astro: 6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) + astro-auto-import: 0.4.6(astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0)) unist-util-select: 5.1.0 '@astro-community/astro-embed-link-preview@0.3.1': @@ -10914,16 +11818,16 @@ snapshots: - prettier - prettier-plugin-astro - '@astrojs/cloudflare@13.1.7(@types/node@24.10.13)(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260507.1)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2)': + '@astrojs/cloudflare@13.1.7(@types/node@24.10.13)(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0)': dependencies: '@astrojs/internal-helpers': 0.8.0 '@astrojs/underscore-redirects': 1.0.3 - '@cloudflare/vite-plugin': 1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(workerd@1.20260507.1)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1)) - astro: 6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) + '@cloudflare/vite-plugin': 1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1)) + astro: 6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) piccolore: 0.1.3 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - wrangler: 4.90.0(@cloudflare/workers-types@4.20260305.1) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) transitivePeerDependencies: - '@types/node' - bufferutil @@ -10940,16 +11844,16 @@ snapshots: - workerd - yaml - '@astrojs/cloudflare@13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2)': + '@astrojs/cloudflare@13.5.3(@types/node@24.10.13)(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0)': dependencies: '@astrojs/internal-helpers': 0.9.1 '@astrojs/underscore-redirects': 1.0.3 - '@cloudflare/vite-plugin': 1.36.3(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1)) - astro: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + '@cloudflare/vite-plugin': 1.36.3(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1)) + astro: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) piccolore: 0.1.3 tinyglobby: 0.2.16 - vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - wrangler: 4.90.0(@cloudflare/workers-types@4.20260305.1) + vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) transitivePeerDependencies: - '@types/node' - bufferutil @@ -10966,15 +11870,15 @@ snapshots: - workerd - yaml - '@astrojs/cloudflare@https://pkg.pr.new/@astrojs/cloudflare@94d342d(@types/node@24.10.13)(astro@https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.8.2)': + '@astrojs/cloudflare@https://pkg.pr.new/@astrojs/cloudflare@94d342d(@types/node@24.10.13)(astro@https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0))(jiti@2.6.1)(lightningcss@1.32.0)(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0)': dependencies: '@astrojs/internal-helpers': 0.8.0 '@astrojs/underscore-redirects': 1.0.3 - '@cloudflare/vite-plugin': 1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1)) - astro: https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) + '@cloudflare/vite-plugin': 1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1)) + astro: https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) piccolore: 0.1.3 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) wrangler: 4.83.0(@cloudflare/workers-types@4.20260305.1) transitivePeerDependencies: - '@types/node' @@ -11140,12 +12044,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@5.0.3(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2))': + '@astrojs/mdx@5.0.3(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0))': dependencies: '@astrojs/markdown-remark': 7.1.0 '@mdx-js/mdx': 3.1.1 acorn: 8.16.0 - astro: 6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) + astro: 6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) es-module-lexer: 2.0.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -11159,10 +12063,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@10.1.1(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))': + '@astrojs/node@10.1.1(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))': dependencies: '@astrojs/internal-helpers': 0.9.1 - astro: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + astro: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) send: 1.2.1 server-destroy: 1.0.1 transitivePeerDependencies: @@ -11184,17 +12088,17 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2)': + '@astrojs/react@5.0.0(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0)': dependencies: '@astrojs/internal-helpers': 0.8.0 '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@vitejs/plugin-react': 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitejs/plugin-react': 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) devalue: 5.6.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) ultrahtml: 1.6.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -11209,17 +12113,17 @@ snapshots: - tsx - yaml - '@astrojs/react@5.0.0-beta.4(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.8.2)': + '@astrojs/react@5.0.0-beta.4(@types/node@24.10.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yaml@2.9.0)': dependencies: '@astrojs/internal-helpers': 0.8.0-beta.3 '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@vitejs/plugin-react': 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitejs/plugin-react': 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) devalue: 5.6.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) ultrahtml: 1.6.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -11240,22 +12144,22 @@ snapshots: stream-replace-string: 2.0.0 zod: 4.4.1 - '@astrojs/starlight-tailwind@5.0.0(@astrojs/starlight@0.38.2(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)))(tailwindcss@4.2.1)': + '@astrojs/starlight-tailwind@5.0.0(@astrojs/starlight@0.38.2(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)))(tailwindcss@4.2.1)': dependencies: - '@astrojs/starlight': 0.38.2(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)) + '@astrojs/starlight': 0.38.2(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)) tailwindcss: 4.2.1 - '@astrojs/starlight@0.38.2(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2))': + '@astrojs/starlight@0.38.2(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0))': dependencies: '@astrojs/markdown-remark': 7.0.0 - '@astrojs/mdx': 5.0.3(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)) + '@astrojs/mdx': 5.0.3(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)) '@astrojs/sitemap': 3.7.2 '@pagefind/default-ui': 1.4.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) - astro-expressive-code: 0.41.6(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)) + astro: 6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) + astro-expressive-code: 0.41.6(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -11477,7 +12381,7 @@ snapshots: '@atcute/multibase': 1.2.0 '@atcute/uint8array': 1.1.1 '@badrap/valita': 0.4.6 - nanoid: 5.1.7 + nanoid: 5.1.11 '@atcute/oauth-keyset@0.1.0': dependencies: @@ -11660,30 +12564,253 @@ snapshots: '@atproto/lexicon': 0.4.14 zod: 3.25.76 - '@axe-core/playwright@4.11.1(playwright-core@1.58.2)': + '@aws-crypto/crc32@5.2.0': dependencies: - axe-core: 4.11.1 - playwright-core: 1.58.2 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.9 + tslib: 2.8.1 - '@babel/code-frame@7.29.0': + '@aws-crypto/sha256-browser@5.2.0': dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.9 + '@aws-sdk/util-locate-window': 3.965.5 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 - '@babel/compat-data@7.28.6': {} + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.9 + tslib: 2.8.1 - '@babel/core@7.29.0': + '@aws-crypto/supports-web-crypto@5.2.0': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.973.9 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-bedrock-runtime@3.1048.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.15 + '@aws-sdk/credential-provider-node': 3.972.46 + '@aws-sdk/eventstream-handler-node': 3.972.18 + '@aws-sdk/middleware-eventstream': 3.972.14 + '@aws-sdk/middleware-websocket': 3.972.23 + '@aws-sdk/token-providers': 3.1048.0 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/fetch-http-handler': 5.4.5 + '@smithy/node-http-handler': 4.7.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/core@3.974.15': + dependencies: + '@aws-sdk/types': 3.973.9 + '@aws-sdk/xml-builder': 3.972.26 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/core': 3.24.5 + '@smithy/signature-v4': 5.4.5 + '@smithy/types': 4.14.2 + bowser: 2.14.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.972.41': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.972.43': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/fetch-http-handler': 5.4.5 + '@smithy/node-http-handler': 4.7.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.972.45': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/credential-provider-env': 3.972.41 + '@aws-sdk/credential-provider-http': 3.972.43 + '@aws-sdk/credential-provider-login': 3.972.45 + '@aws-sdk/credential-provider-process': 3.972.41 + '@aws-sdk/credential-provider-sso': 3.972.45 + '@aws-sdk/credential-provider-web-identity': 3.972.45 + '@aws-sdk/nested-clients': 3.997.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/credential-provider-imds': 4.3.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-login@3.972.45': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/nested-clients': 3.997.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-node@3.972.46': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.41 + '@aws-sdk/credential-provider-http': 3.972.43 + '@aws-sdk/credential-provider-ini': 3.972.45 + '@aws-sdk/credential-provider-process': 3.972.41 + '@aws-sdk/credential-provider-sso': 3.972.45 + '@aws-sdk/credential-provider-web-identity': 3.972.45 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/credential-provider-imds': 4.3.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-process@3.972.41': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.972.45': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/nested-clients': 3.997.13 + '@aws-sdk/token-providers': 3.1056.0 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.972.45': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/nested-clients': 3.997.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/eventstream-handler-node@3.972.18': + dependencies: + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/middleware-eventstream@3.972.14': + dependencies: + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/middleware-websocket@3.972.23': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/fetch-http-handler': 5.4.5 + '@smithy/signature-v4': 5.4.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.997.13': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.15 + '@aws-sdk/signature-v4-multi-region': 3.996.30 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/fetch-http-handler': 5.4.5 + '@smithy/node-http-handler': 4.7.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.996.30': + dependencies: + '@aws-sdk/types': 3.973.9 + '@smithy/signature-v4': 5.4.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.1048.0': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/nested-clients': 3.997.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.1056.0': + dependencies: + '@aws-sdk/core': 3.974.15 + '@aws-sdk/nested-clients': 3.997.13 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/types@3.973.9': + dependencies: + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.965.5': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.972.26': + dependencies: + '@smithy/types': 4.14.2 + fast-xml-parser: 5.7.3 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.2.4': {} + + '@axe-core/playwright@4.11.1(playwright-core@1.58.2)': + dependencies: + axe-core: 4.11.1 + playwright-core: 1.58.2 + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.6': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -11894,6 +13021,8 @@ snapshots: '@blazediff/core@1.9.1': {} + '@borewit/text-codec@0.2.2': {} + '@braidai/lang@1.0.0': {} '@capsizecss/unpack@4.0.0': @@ -12093,6 +13222,8 @@ snapshots: fast-wrap-ansi: 0.2.0 sisteransi: 1.0.5 + '@cloudflare/containers@0.3.5': {} + '@cloudflare/kumo@2.3.0(@date-fns/tz@1.4.1)(@phosphor-icons/react@2.1.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.14)(date-fns@4.1.0)(echarts@6.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.4.1)': dependencies: '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -12119,17 +13250,24 @@ snapshots: '@cloudflare/kv-asset-handler@0.5.0': {} + '@cloudflare/sandbox@0.10.3': + dependencies: + '@cloudflare/containers': 0.3.5 + aws4fetch: 1.0.20 + capnweb: 0.8.0 + hono: 4.12.23 + '@cloudflare/unenv-preset@2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260301.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: workerd: 1.20260301.1 - '@cloudflare/unenv-preset@2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260507.1)': + '@cloudflare/unenv-preset@2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260526.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260507.1 + workerd: 1.20260526.1 '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260415.1)': dependencies: @@ -12137,11 +13275,11 @@ snapshots: optionalDependencies: workerd: 1.20260415.1 - '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260507.1)': + '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260526.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260507.1 + workerd: 1.20260526.1 '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260507.1)': dependencies: @@ -12149,25 +13287,31 @@ snapshots: optionalDependencies: workerd: 1.20260507.1 - '@cloudflare/vite-plugin@1.26.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(workerd@1.20260507.1)(wrangler@4.90.0)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1)': dependencies: - '@cloudflare/unenv-preset': 2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260507.1) + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260526.1 + + '@cloudflare/vite-plugin@1.26.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0)': + dependencies: + '@cloudflare/unenv-preset': 2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260526.1) miniflare: 4.20260301.1 unenv: 2.0.0-rc.24 - vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - wrangler: 4.90.0(@cloudflare/workers-types@4.20260305.1) + vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate - workerd - '@cloudflare/vite-plugin@1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1))': + '@cloudflare/vite-plugin@1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(workerd@1.20260415.1)(wrangler@4.83.0(@cloudflare/workers-types@4.20260305.1))': dependencies: '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260415.1) miniflare: 4.20260415.0 unenv: 2.0.0-rc.24 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) wrangler: 4.83.0(@cloudflare/workers-types@4.20260305.1) ws: 8.18.0 transitivePeerDependencies: @@ -12175,45 +13319,58 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/vite-plugin@1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(workerd@1.20260507.1)(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))': + '@cloudflare/vite-plugin@1.32.3(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))': dependencies: - '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260507.1) + '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260526.1) miniflare: 4.20260415.0 unenv: 2.0.0-rc.24 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - wrangler: 4.90.0(@cloudflare/workers-types@4.20260305.1) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate - workerd - '@cloudflare/vite-plugin@1.36.3(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1))': + '@cloudflare/vite-plugin@1.36.3(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))': dependencies: '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260507.1) miniflare: 4.20260507.1 unenv: 2.0.0-rc.24 - vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - wrangler: 4.90.0(@cloudflare/workers-types@4.20260305.1) + vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate - workerd - '@cloudflare/vite-plugin@1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))(workerd@1.20260507.1)(wrangler@4.90.0)': + '@cloudflare/vite-plugin@1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0)': dependencies: - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260507.1) + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) miniflare: 4.20260507.1 unenv: 2.0.0-rc.24 - vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2) - wrangler: 4.90.0(@cloudflare/workers-types@4.20260305.1) + vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate - workerd + '@cloudflare/vite-plugin@1.39.0(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))': + dependencies: + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) + miniflare: 4.20260526.0 + unenv: 2.0.0-rc.24 + vite: 8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) + ws: 8.20.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - workerd + '@cloudflare/vitest-pool-workers@0.16.3(@vitest/runner@4.1.5)(@vitest/snapshot@4.1.5)(vitest@4.1.5)': dependencies: '@vitest/runner': 4.1.5 @@ -12221,8 +13378,8 @@ snapshots: cjs-module-lexer: 1.4.0 esbuild: 0.27.3 miniflare: 4.20260507.1 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) - wrangler: 4.90.0(@cloudflare/workers-types@4.20260305.1) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) + wrangler: 4.90.0 zod: 3.25.76 transitivePeerDependencies: - '@cloudflare/workers-types' @@ -12238,6 +13395,9 @@ snapshots: '@cloudflare/workerd-darwin-64@1.20260507.1': optional: true + '@cloudflare/workerd-darwin-64@1.20260526.1': + optional: true + '@cloudflare/workerd-darwin-arm64@1.20260301.1': optional: true @@ -12247,6 +13407,9 @@ snapshots: '@cloudflare/workerd-darwin-arm64@1.20260507.1': optional: true + '@cloudflare/workerd-darwin-arm64@1.20260526.1': + optional: true + '@cloudflare/workerd-linux-64@1.20260301.1': optional: true @@ -12256,6 +13419,9 @@ snapshots: '@cloudflare/workerd-linux-64@1.20260507.1': optional: true + '@cloudflare/workerd-linux-64@1.20260526.1': + optional: true + '@cloudflare/workerd-linux-arm64@1.20260301.1': optional: true @@ -12265,6 +13431,9 @@ snapshots: '@cloudflare/workerd-linux-arm64@1.20260507.1': optional: true + '@cloudflare/workerd-linux-arm64@1.20260526.1': + optional: true + '@cloudflare/workerd-windows-64@1.20260301.1': optional: true @@ -12274,6 +13443,9 @@ snapshots: '@cloudflare/workerd-windows-64@1.20260507.1': optional: true + '@cloudflare/workerd-windows-64@1.20260526.1': + optional: true + '@cloudflare/workers-types@4.20260305.1': {} '@colors/colors@1.5.0': @@ -12344,6 +13516,40 @@ snapshots: optionalDependencies: oxlint: 1.66.0(oxlint-tsgolint@0.23.0) + '@earendil-works/pi-agent-core@0.77.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))(ws@8.21.0)(zod@4.4.1)': + dependencies: + '@earendil-works/pi-ai': 0.77.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))(ws@8.21.0)(zod@4.4.1) + ignore: 7.0.5 + typebox: 1.1.38 + yaml: 2.9.0 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@earendil-works/pi-ai@0.77.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))(ws@8.21.0)(zod@4.4.1)': + dependencies: + '@anthropic-ai/sdk': 0.91.1(zod@4.4.1) + '@aws-sdk/client-bedrock-runtime': 3.1048.0 + '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1)) + '@mistralai/mistralai': 2.2.1 + '@smithy/node-http-handler': 4.7.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + openai: 6.26.0(ws@8.21.0)(zod@4.4.1) + partial-json: 0.1.7 + typebox: 1.1.38 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + '@emmetio/abbreviation@2.3.3': dependencies: '@emmetio/scanner': 1.0.4 @@ -12605,6 +13811,93 @@ snapshots: '@floating-ui/utils@0.2.11': {} + '@flue/cli@0.8.1(@cfworker/json-schema@4.1.1)(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(typebox@1.1.38)(typescript@6.0.3)(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1))(yaml@2.9.0)(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1)': + dependencies: + '@cloudflare/vite-plugin': 1.39.0(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1)) + '@flue/runtime': 0.8.1(@cfworker/json-schema@4.1.1)(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(typebox@1.1.38)(typescript@6.0.3)(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) + '@vercel/detect-agent': 1.2.3 + package-up: 5.0.0 + valibot: 1.4.0(typescript@6.0.3) + vite: 8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) + optionalDependencies: + wrangler: 4.95.0(@cloudflare/workers-types@4.20260305.1) + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@standard-schema/spec' + - '@types/json-schema' + - '@types/node' + - '@vitejs/devtools' + - arktype + - bufferutil + - effect + - esbuild + - jiti + - less + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - sury + - terser + - tsx + - typebox + - typescript + - utf-8-validate + - workerd + - yaml + - zod + - zod-openapi + - zod-to-json-schema + + '@flue/runtime@0.8.1(@cfworker/json-schema@4.1.1)(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(typebox@1.1.38)(typescript@6.0.3)(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1)': + dependencies: + '@earendil-works/pi-agent-core': 0.77.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))(ws@8.21.0)(zod@4.4.1) + '@earendil-works/pi-ai': 0.77.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))(ws@8.21.0)(zod@4.4.1) + '@hono/node-server': 2.0.4(hono@4.12.7) + '@hono/standard-validator': 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7) + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1) + '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.0(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) + '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.0(typescript@6.0.3))(zod@4.4.1) + '@valibot/to-json-schema': 1.7.0(valibot@1.4.0(typescript@6.0.3)) + hono: 4.12.7 + hono-openapi: 1.3.0(@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1))(@types/json-schema@7.0.15)(hono@4.12.7)(openapi-types@12.1.3) + js-yaml: 4.1.1 + just-bash: 3.0.1 + openapi-types: 12.1.3 + quansync: 0.2.11 + ulidx: 2.4.1 + valibot: 1.4.0(typescript@6.0.3) + ws: 8.21.0 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@standard-schema/spec' + - '@types/json-schema' + - arktype + - bufferutil + - effect + - supports-color + - sury + - typebox + - typescript + - utf-8-validate + - zod + - zod-openapi + - zod-to-json-schema + + '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))': + dependencies: + google-auth-library: 10.6.2 + p-retry: 4.6.2 + protobufjs: 7.6.1 + ws: 8.21.0 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@hono/node-server@1.19.9(hono@4.12.4)': dependencies: hono: 4.12.4 @@ -12613,6 +13906,15 @@ snapshots: dependencies: hono: 4.12.7 + '@hono/node-server@2.0.4(hono@4.12.7)': + dependencies: + hono: 4.12.7 + + '@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7)': + dependencies: + '@standard-schema/spec': 1.1.0 + hono: 4.12.7 + '@iconify-json/ph@1.2.2': dependencies: '@iconify/types': 2.0.0 @@ -12753,6 +14055,24 @@ snapshots: '@types/yargs': 17.0.35 chalk: 4.1.2 + '@jitl/quickjs-ffi-types@0.32.0': {} + + '@jitl/quickjs-wasmfile-debug-asyncify@0.32.0': + dependencies: + '@jitl/quickjs-ffi-types': 0.32.0 + + '@jitl/quickjs-wasmfile-debug-sync@0.32.0': + dependencies: + '@jitl/quickjs-ffi-types': 0.32.0 + + '@jitl/quickjs-wasmfile-release-asyncify@0.32.0': + dependencies: + '@jitl/quickjs-ffi-types': 0.32.0 + + '@jitl/quickjs-wasmfile-release-sync@0.32.0': + dependencies: + '@jitl/quickjs-ffi-types': 0.32.0 + '@jridgewell/gen-mapping@0.3.12': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -12825,7 +14145,7 @@ snapshots: '@libsql/isomorphic-ws@0.1.5': dependencies: '@types/ws': 8.18.1 - ws: 8.19.0 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -13028,6 +14348,17 @@ snapshots: dependencies: moo: 0.5.3 + '@mistralai/mistralai@2.2.1': + dependencies: + ws: 8.21.0 + zod: 4.4.1 + zod-to-json-schema: 3.25.1(zod@4.4.1) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@mixmark-io/domino@2.2.0': {} + '@modelcontextprotocol/sdk@1.26.0(@cfworker/json-schema@4.1.1)(zod@4.4.1)': dependencies: '@hono/node-server': 1.19.9(hono@4.12.4) @@ -13076,6 +14407,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@mongodb-js/zstd@7.0.0': + dependencies: + node-addon-api: 8.8.0 + prebuild-install: 7.1.3 + optional: true + '@napi-rs/wasm-runtime@1.1.1': dependencies: '@emnapi/core': 1.7.1 @@ -13103,6 +14440,8 @@ snapshots: '@noble/secp256k1@3.1.0': {} + '@nodable/entities@2.1.1': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -13167,6 +14506,8 @@ snapshots: '@oxc-project/types@0.128.0': {} + '@oxc-project/types@0.132.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.16.4': optional: true @@ -13482,6 +14823,28 @@ snapshots: '@portabletext/types@4.0.2': {} + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.5': {} + + '@protobufjs/eventemitter@1.1.1': {} + + '@protobufjs/fetch@1.1.1': + dependencies: + '@protobufjs/aspromise': 1.1.2 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.2': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.1': {} + '@publint/pack@0.1.4': {} '@quansync/fs@1.0.0': @@ -13499,6 +14862,9 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-rc.5': optional: true + '@rolldown/binding-android-arm64@1.0.2': + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-rc.18': optional: true @@ -13508,6 +14874,9 @@ snapshots: '@rolldown/binding-darwin-arm64@1.0.0-rc.5': optional: true + '@rolldown/binding-darwin-arm64@1.0.2': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-rc.18': optional: true @@ -13517,6 +14886,9 @@ snapshots: '@rolldown/binding-darwin-x64@1.0.0-rc.5': optional: true + '@rolldown/binding-darwin-x64@1.0.2': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.18': optional: true @@ -13526,6 +14898,9 @@ snapshots: '@rolldown/binding-freebsd-x64@1.0.0-rc.5': optional: true + '@rolldown/binding-freebsd-x64@1.0.2': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': optional: true @@ -13535,6 +14910,9 @@ snapshots: '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': optional: true @@ -13544,6 +14922,9 @@ snapshots: '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': optional: true @@ -13553,12 +14934,21 @@ snapshots: '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.2': + optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': optional: true @@ -13568,6 +14958,9 @@ snapshots: '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': optional: true @@ -13577,6 +14970,9 @@ snapshots: '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-x64-musl@1.0.2': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': optional: true @@ -13586,6 +14982,9 @@ snapshots: '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': optional: true + '@rolldown/binding-openharmony-arm64@1.0.2': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': dependencies: '@emnapi/core': 1.10.0 @@ -13603,6 +15002,13 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.1 optional: true + '@rolldown/binding-wasm32-wasi@1.0.2': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': optional: true @@ -13612,6 +15018,9 @@ snapshots: '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.2': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': optional: true @@ -13621,14 +15030,26 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': optional: true - '@rolldown/plugin-babel@0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(rolldown@1.0.0-rc.18)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': + '@rolldown/binding-win32-x64-msvc@1.0.2': + optional: true + + '@rolldown/plugin-babel@0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(rolldown@1.0.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 picomatch: 4.0.4 - rolldown: 1.0.0-rc.18 + rolldown: 1.0.2 optionalDependencies: '@babel/runtime': 7.29.7 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + + '@rolldown/plugin-babel@0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(rolldown@1.0.2)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))': + dependencies: + '@babel/core': 7.29.0 + picomatch: 4.0.4 + rolldown: 1.0.2 + optionalDependencies: + '@babel/runtime': 7.29.7 + vite: 8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) '@rolldown/pluginutils@1.0.0-beta.27': {} @@ -13638,6 +15059,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.5': {} + '@rolldown/pluginutils@1.0.1': {} + '@rollup/pluginutils@5.3.0(rollup@4.55.2)': dependencies: '@types/estree': 1.0.8 @@ -13855,6 +15278,60 @@ snapshots: '@sindresorhus/is@7.2.0': {} + '@smithy/core@3.24.5': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.3.5': + dependencies: + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.4.5': + dependencies: + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/node-http-handler@4.7.3': + dependencies: + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.7.5': + dependencies: + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/signature-v4@5.4.5': + dependencies: + '@smithy/core': 3.24.5 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/types@4.14.2': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + '@solana-program/compute-budget@0.11.0(@solana/kit@5.5.1(typescript@6.0.3))': dependencies: '@solana/kit': 5.5.1(typescript@6.0.3) @@ -14148,7 +15625,7 @@ snapshots: '@solana/functional': 5.5.1(typescript@6.0.3) '@solana/rpc-subscriptions-spec': 5.5.1(typescript@6.0.3) '@solana/subscribable': 5.5.1(typescript@6.0.3) - ws: 8.19.0 + ws: 8.21.0 optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: @@ -14336,6 +15813,50 @@ snapshots: '@speed-highlight/core@1.2.14': {} + '@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.0(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1)': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/json-schema': 7.0.15 + quansync: 0.2.11 + optionalDependencies: + '@valibot/to-json-schema': 1.7.0(valibot@1.4.1(typescript@6.0.3)) + typebox: 1.1.38 + valibot: 1.4.0(typescript@6.0.3) + zod: 4.4.1 + zod-to-json-schema: 3.25.1(zod@4.4.1) + + '@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1)': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/json-schema': 7.0.15 + quansync: 0.2.11 + optionalDependencies: + '@valibot/to-json-schema': 1.7.0(valibot@1.4.1(typescript@6.0.3)) + typebox: 1.1.38 + valibot: 1.4.1(typescript@6.0.3) + zod: 4.4.1 + zod-to-json-schema: 3.25.1(zod@4.4.1) + + '@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.0(typescript@6.0.3))(zod@4.4.1)': + dependencies: + '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) + '@standard-schema/spec': 1.1.0 + openapi-types: 12.1.3 + optionalDependencies: + typebox: 1.1.38 + valibot: 1.4.0(typescript@6.0.3) + zod: 4.4.1 + + '@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1)': + dependencies: + '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) + '@standard-schema/spec': 1.1.0 + openapi-types: 12.1.3 + optionalDependencies: + typebox: 1.1.38 + valibot: 1.4.1(typescript@6.0.3) + zod: 4.4.1 + '@standard-schema/spec@1.1.0': {} '@tabby_ai/hijri-converter@1.0.5': {} @@ -14477,12 +15998,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.2.1 - '@tailwindcss/vite@4.2.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.2.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) '@tanstack/history@1.161.4': {} @@ -14805,6 +16326,15 @@ snapshots: y-protocols: 1.0.7(yjs@13.6.29) yjs: 13.6.29 + '@tokenizer/inflate@0.4.1': + dependencies: + debug: 4.4.3 + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color + + '@tokenizer/token@0.3.0': {} + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -14914,6 +16444,8 @@ snapshots: dependencies: csstype: 3.2.3 + '@types/retry@0.12.0': {} + '@types/sanitize-html@2.16.0': dependencies: htmlparser2: 8.0.2 @@ -14979,9 +16511,20 @@ snapshots: dependencies: blurhash: 2.0.5 + '@valibot/to-json-schema@1.7.0(valibot@1.4.0(typescript@6.0.3))': + dependencies: + valibot: 1.4.0(typescript@6.0.3) + + '@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3))': + dependencies: + valibot: 1.4.1(typescript@6.0.3) + optional: true + + '@vercel/detect-agent@1.2.3': {} + '@vercel/oidc@3.2.0': {} - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -14989,11 +16532,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': + '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -15001,11 +16544,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))': + '@vitejs/plugin-react@4.7.0(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -15013,11 +16556,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2) + vite: 8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -15025,17 +16568,44 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@vitest/browser-playwright@4.1.5(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5)': + '@vitest/browser-playwright@4.1.5(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5)': + dependencies: + '@vitest/browser': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5) + '@vitest/mocker': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) + playwright: 1.58.2 + tinyrainbow: 3.1.0 + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + + '@vitest/browser-playwright@4.1.5(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5)': + dependencies: + '@vitest/browser': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5) + '@vitest/mocker': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) + playwright: 1.58.2 + tinyrainbow: 3.1.0 + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser-playwright@4.1.5(playwright@1.58.2)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5)': dependencies: - '@vitest/browser': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5) - '@vitest/mocker': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitest/browser': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5) + '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) playwright: 1.58.2 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw @@ -15043,26 +16613,31 @@ snapshots: - vite optional: true - '@vitest/browser-playwright@4.1.5(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5)': + '@vitest/browser-playwright@4.1.5(playwright@1.58.2)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5)': dependencies: - '@vitest/browser': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5) - '@vitest/mocker': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitest/browser': 4.1.5(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5) + '@vitest/mocker': 4.1.5(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) playwright: 1.58.2 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite + optional: true - '@vitest/browser-playwright@4.1.5(playwright@1.58.2)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.1.5)': + '@vitest/browser@4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5)': dependencies: - '@vitest/browser': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.1.5) - '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) - playwright: 1.58.2 + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) + '@vitest/utils': 4.1.5 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) + ws: 8.19.0 transitivePeerDependencies: - bufferutil - msw @@ -15070,51 +16645,51 @@ snapshots: - vite optional: true - '@vitest/browser@4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5)': + '@vitest/browser@4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) '@vitest/utils': 4.1.5 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) ws: 8.19.0 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - optional: true - '@vitest/browser@4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5)': + '@vitest/browser@4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) '@vitest/utils': 4.1.5 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) ws: 8.19.0 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite + optional: true - '@vitest/browser@4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.1.5)': + '@vitest/browser@4.1.5(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + '@vitest/mocker': 4.1.5(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) '@vitest/utils': 4.1.5 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) ws: 8.19.0 transitivePeerDependencies: - bufferutil @@ -15132,29 +16707,37 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 4.1.5 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + + '@vitest/mocker@4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) - '@vitest/mocker@4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) - '@vitest/mocker@4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))': + '@vitest/mocker@4.1.5(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2) + vite: 8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) '@vitest/pretty-format@4.1.5': dependencies: @@ -15183,7 +16766,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) '@vitest/utils@4.1.5': dependencies: @@ -15292,12 +16875,12 @@ snapshots: agent-base@7.1.4: {} - agents@0.12.0(@babel/core@7.29.0)(@babel/runtime@7.29.7)(@cloudflare/workers-types@4.20260305.1)(@x402/core@2.8.0)(@x402/evm@2.8.0(typescript@6.0.3))(ai@6.0.172(zod@4.4.1))(react@19.2.4)(rolldown@1.0.0-rc.18)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(zod@4.4.1): + agents@0.12.0(@babel/core@7.29.0)(@babel/runtime@7.29.7)(@cloudflare/workers-types@4.20260305.1)(@x402/core@2.8.0)(@x402/evm@2.8.0(typescript@6.0.3))(ai@6.0.172(zod@4.4.1))(react@19.2.4)(rolldown@1.0.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(zod@4.4.1): dependencies: '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) '@cfworker/json-schema': 4.1.1 '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1) - '@rolldown/plugin-babel': 0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(rolldown@1.0.0-rc.18)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@rolldown/plugin-babel': 0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(rolldown@1.0.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) ai: 6.0.172(zod@4.4.1) cron-schedule: 6.0.0 mimetext: 3.0.28 @@ -15310,7 +16893,34 @@ snapshots: optionalDependencies: '@x402/core': 2.8.0 '@x402/evm': 2.8.0(typescript@6.0.3) - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + transitivePeerDependencies: + - '@babel/core' + - '@babel/plugin-transform-runtime' + - '@babel/runtime' + - '@cloudflare/workers-types' + - rolldown + - supports-color + + agents@0.13.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(@cloudflare/workers-types@4.20260305.1)(@x402/core@2.8.0)(@x402/evm@2.8.0(typescript@6.0.3))(ai@6.0.172(zod@4.4.1))(react@19.2.4)(rolldown@1.0.2)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(zod@4.4.1): + dependencies: + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) + '@cfworker/json-schema': 4.1.1 + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1) + '@rolldown/plugin-babel': 0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(rolldown@1.0.2)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) + ai: 6.0.172(zod@4.4.1) + cron-schedule: 6.0.0 + mimetext: 3.0.28 + nanoid: 5.1.11 + partyserver: 0.5.6(@cloudflare/workers-types@4.20260305.1) + partysocket: 1.1.19(react@19.2.4) + react: 19.2.4 + yargs: 18.0.0 + zod: 4.4.1 + optionalDependencies: + '@x402/core': 2.8.0 + '@x402/evm': 2.8.0(typescript@6.0.3) + vite: 8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) transitivePeerDependencies: - '@babel/core' - '@babel/plugin-transform-runtime' @@ -15401,46 +17011,46 @@ snapshots: astring@1.9.0: {} - astro-auto-import@0.4.6(astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2)): + astro-auto-import@0.4.6(astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0)): dependencies: acorn: 8.15.0 - astro: 6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) + astro: 6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) - astro-embed@0.12.0(astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2)): + astro-embed@0.12.0(astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0)): dependencies: '@astro-community/astro-embed-baseline-status': 0.2.2 '@astro-community/astro-embed-bluesky': 0.1.6 '@astro-community/astro-embed-gist': 0.1.0 - '@astro-community/astro-embed-integration': 0.11.0(astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2)) + '@astro-community/astro-embed-integration': 0.11.0(astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0)) '@astro-community/astro-embed-link-preview': 0.3.1 '@astro-community/astro-embed-mastodon': 0.1.1 '@astro-community/astro-embed-twitter': 0.5.11 '@astro-community/astro-embed-vimeo': 0.3.12 '@astro-community/astro-embed-youtube': 0.5.10 - astro: 6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2) + astro: 6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0) - astro-expressive-code@0.41.6(astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)): + astro-expressive-code@0.41.6(astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)): dependencies: - astro: 6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) + astro: 6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) rehype-expressive-code: 0.41.6 - astro-iconset@0.0.4(astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + astro-iconset@0.0.4(astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@iconify/tools': 5.0.11 '@iconify/types': 2.0.0 '@iconify/utils': 3.1.1 - astro: 6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2) + astro: 6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0) optionalDependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - astro-portabletext@0.11.4(astro@6.1.7(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2)): + astro-portabletext@0.11.4(astro@6.1.7(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0)): dependencies: '@portabletext/toolkit': 3.0.3 '@portabletext/types': 2.0.15 - astro: 6.1.7(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2) + astro: 6.1.7(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0) - astro@6.0.0-beta.20(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2): + astro@6.0.0-beta.20(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0): dependencies: '@astrojs/compiler': 3.0.0 '@astrojs/internal-helpers': 0.8.0-beta.3 @@ -15490,10 +17100,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4 + unstorage: 1.17.4(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -15534,7 +17144,7 @@ snapshots: - uploadthing - yaml - astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2): + astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -15584,10 +17194,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4 + unstorage: 1.17.4(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -15628,7 +17238,7 @@ snapshots: - uploadthing - yaml - astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2): + astro@6.0.1(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -15678,10 +17288,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4 + unstorage: 1.17.4(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -15722,7 +17332,7 @@ snapshots: - uploadthing - yaml - astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2): + astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -15772,10 +17382,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4 + unstorage: 1.17.4(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -15816,7 +17426,7 @@ snapshots: - uploadthing - yaml - astro@6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2): + astro@6.1.3(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -15866,10 +17476,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4 + unstorage: 1.17.4(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -15910,7 +17520,7 @@ snapshots: - uploadthing - yaml - astro@6.1.7(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.8.2): + astro@6.1.7(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.3)(yaml@2.9.0): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -15959,10 +17569,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4 + unstorage: 1.17.4(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -16003,7 +17613,7 @@ snapshots: - uploadthing - yaml - astro@6.3.5(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.8.2): + astro@6.3.5(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(yaml@2.9.0): dependencies: '@astrojs/compiler': 4.0.0 '@astrojs/internal-helpers': 0.9.1 @@ -16053,10 +17663,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.5 + unstorage: 1.17.5(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -16096,7 +17706,7 @@ snapshots: - uploadthing - yaml - astro@https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.8.2): + astro@https://pkg.pr.new/astro@94d342d(@types/node@24.10.13)(aws4fetch@1.0.20)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(typescript@6.0.0-beta)(yaml@2.9.0): dependencies: '@astrojs/compiler': 3.0.1 '@astrojs/internal-helpers': 0.8.0 @@ -16145,10 +17755,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4 + unstorage: 1.17.4(aws4fetch@1.0.20) vfile: 6.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.4.1 @@ -16193,6 +17803,8 @@ snapshots: await-lock@2.2.2: {} + aws4fetch@1.0.20: {} + axe-core@4.11.1: {} axobject-query@4.1.0: {} @@ -16222,6 +17834,8 @@ snapshots: bindings: 1.5.0 prebuild-install: 7.1.3 + bignumber.js@9.3.1: {} + binary-extensions@2.3.0: {} bindings@1.5.0: @@ -16256,6 +17870,8 @@ snapshots: boolbase@1.0.0: {} + bowser@2.14.1: {} + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 @@ -16272,6 +17888,8 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer-equal-constant-time@1.0.1: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -16304,6 +17922,8 @@ snapshots: caniuse-lite@1.0.30001765: {} + capnweb@0.8.0: {} + ccount@2.0.1: {} chai@6.2.2: {} @@ -16431,6 +18051,8 @@ snapshots: commander@14.0.2: optional: true + commander@6.2.1: {} + common-ancestor-path@2.0.0: {} confbox@0.1.8: {} @@ -16522,8 +18144,7 @@ snapshots: csstype@3.2.3: {} - data-uri-to-buffer@4.0.1: - optional: true + data-uri-to-buffer@4.0.1: {} data-urls@5.0.0: dependencies: @@ -16631,6 +18252,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + echarts@6.0.0: dependencies: tslib: 2.3.0 @@ -16922,6 +18547,26 @@ snapshots: dependencies: fast-string-width: 3.0.2 + fast-xml-builder@1.2.0: + dependencies: + path-expression-matcher: 1.5.0 + xml-naming: 0.1.0 + + fast-xml-parser@5.7.3: + dependencies: + '@nodable/entities': 2.1.1 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 + + fast-xml-parser@5.8.0: + dependencies: + '@nodable/entities': 2.1.1 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 + xml-naming: 0.1.0 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -16938,10 +18583,18 @@ snapshots: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - optional: true fflate@0.8.2: {} + file-type@21.3.4: + dependencies: + '@tokenizer/inflate': 0.4.1 + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color + file-uri-to-path@1.0.0: {} fill-range@7.1.1: @@ -16959,6 +18612,8 @@ snapshots: transitivePeerDependencies: - supports-color + find-up-simple@1.0.1: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -16988,7 +18643,6 @@ snapshots: formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 - optional: true forwarded@0.2.0: {} @@ -17029,6 +18683,22 @@ snapshots: function-bind@1.1.2: {} + gaxios@7.1.4: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + + gcp-metadata@8.1.2: + dependencies: + gaxios: 7.1.4 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -17102,6 +18772,19 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + google-auth-library@10.6.2: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.1.4 + gcp-metadata: 8.1.2 + google-logging-utils: 1.1.3 + jws: 4.0.1 + transitivePeerDependencies: + - supports-color + + google-logging-utils@1.1.3: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -17329,6 +19012,18 @@ snapshots: highlight.js@10.7.3: {} + hono-openapi@1.3.0(@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1))(@types/json-schema@7.0.15)(hono@4.12.7)(openapi-types@12.1.3): + dependencies: + '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) + '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1) + '@types/json-schema': 7.0.15 + openapi-types: 12.1.3 + optionalDependencies: + '@hono/standard-validator': 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7) + hono: 4.12.7 + + hono@4.12.23: {} + hono@4.12.4: {} hono@4.12.7: {} @@ -17394,6 +19089,8 @@ snapshots: ignore@5.3.1: {} + ignore@7.0.5: {} + image-size@2.0.2: {} import-fresh@3.3.1: @@ -17407,6 +19104,8 @@ snapshots: ini@1.3.8: {} + ini@6.0.0: {} + inline-style-parser@0.2.7: {} ip-address@10.0.1: {} @@ -17551,8 +19250,17 @@ snapshots: jsesc@3.1.0: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + json-parse-even-better-errors@2.3.1: {} + json-schema-to-ts@3.1.1: + dependencies: + '@babel/runtime': 7.29.7 + ts-algebra: 2.0.0 + json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} @@ -17569,6 +19277,40 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + just-bash@3.0.1: + dependencies: + diff: 8.0.3 + fast-xml-parser: 5.8.0 + file-type: 21.3.4 + ini: 6.0.0 + minimatch: 10.2.5 + modern-tar: 0.7.6 + papaparse: 5.5.3 + quickjs-emscripten: 0.32.0 + re2js: 1.3.3 + seek-bzip: 2.0.0 + smol-toml: 1.6.0 + sprintf-js: 1.1.3 + sql.js: 1.14.1 + turndown: 7.2.4 + yaml: 2.8.2 + optionalDependencies: + '@mongodb-js/zstd': 7.0.0 + node-liblzma: 2.2.0 + transitivePeerDependencies: + - supports-color + + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + kleur@4.1.5: {} klona@2.0.6: {} @@ -17788,6 +19530,8 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + long@5.3.2: {} + longest-streak@3.1.0: {} lru-cache@10.4.3: {} @@ -18331,7 +20075,7 @@ snapshots: mimetext@3.0.28: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.7 '@babel/runtime-corejs3': 7.29.2 js-base64: 3.7.8 mime-types: 2.1.35 @@ -18376,6 +20120,18 @@ snapshots: - bufferutil - utf-8-validate + miniflare@4.20260526.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.24.8 + workerd: 1.20260526.1 + ws: 8.20.1 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -18453,6 +20209,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.12: {} + nanoid@5.1.11: {} nanoid@5.1.7: {} @@ -18473,9 +20231,11 @@ snapshots: node-addon-api@7.1.1: {} - node-domexception@1.0.0: + node-addon-api@8.8.0: optional: true + node-domexception@1.0.0: {} + node-emoji@2.1.3: dependencies: '@sindresorhus/is': 4.6.0 @@ -18496,6 +20256,14 @@ snapshots: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + + node-gyp-build@4.8.4: + optional: true + + node-liblzma@2.2.0: + dependencies: + node-addon-api: 8.8.0 + node-gyp-build: 4.8.4 optional: true node-mock-http@1.0.4: {} @@ -18557,6 +20325,11 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 + openai@6.26.0(ws@8.21.0)(zod@4.4.1): + optionalDependencies: + ws: 8.21.0 + zod: 4.4.1 + openapi-types@12.1.3: {} ora@5.4.1: @@ -18698,6 +20471,11 @@ snapshots: eventemitter3: 5.0.2 p-timeout: 7.0.1 + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + p-timeout@7.0.1: {} p-try@2.2.0: {} @@ -18708,6 +20486,10 @@ snapshots: package-manager-detector@1.6.0: {} + package-up@5.0.0: + dependencies: + find-up-simple: 1.0.1 + pagefind@1.4.0: optionalDependencies: '@pagefind/darwin-arm64': 1.4.0 @@ -18719,6 +20501,8 @@ snapshots: pako@1.0.11: {} + papaparse@5.5.3: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -18769,21 +20553,36 @@ snapshots: parseurl@1.3.3: {} + partial-json@0.1.7: {} + partyserver@0.5.5(@cloudflare/workers-types@4.20260305.1): dependencies: '@cloudflare/workers-types': 4.20260305.1 nanoid: 5.1.11 + partyserver@0.5.6(@cloudflare/workers-types@4.20260305.1): + dependencies: + '@cloudflare/workers-types': 4.20260305.1 + nanoid: 5.1.11 + partysocket@1.1.18(react@19.2.4): dependencies: event-target-polyfill: 0.0.4 optionalDependencies: react: 19.2.4 + partysocket@1.1.19(react@19.2.4): + dependencies: + event-target-polyfill: 0.0.4 + optionalDependencies: + react: 19.2.4 + path-browserify@1.0.1: {} path-exists@4.0.0: {} + path-expression-matcher@1.5.0: {} + path-key@3.1.1: {} path-scurry@2.0.2: @@ -18914,6 +20713,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -19083,6 +20888,21 @@ snapshots: prosemirror-state: 1.4.4 prosemirror-transform: 1.10.5 + protobufjs@7.6.1: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.2 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.1 + '@types/node': 24.10.13 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -19112,12 +20932,26 @@ snapshots: dependencies: side-channel: 1.1.0 + quansync@0.2.11: {} + quansync@1.0.0: {} queue-microtask@1.2.3: {} quick-format-unescaped@4.0.4: {} + quickjs-emscripten-core@0.32.0: + dependencies: + '@jitl/quickjs-ffi-types': 0.32.0 + + quickjs-emscripten@0.32.0: + dependencies: + '@jitl/quickjs-wasmfile-debug-asyncify': 0.32.0 + '@jitl/quickjs-wasmfile-debug-sync': 0.32.0 + '@jitl/quickjs-wasmfile-release-asyncify': 0.32.0 + '@jitl/quickjs-wasmfile-release-sync': 0.32.0 + quickjs-emscripten-core: 0.32.0 + radix3@1.1.2: {} range-parser@1.2.1: {} @@ -19136,6 +20970,8 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 + re2js@1.3.3: {} + react-day-picker@9.14.0(react@19.2.4): dependencies: '@date-fns/tz': 1.4.1 @@ -19379,6 +21215,8 @@ snapshots: retext-stringify: 4.0.0 unified: 11.0.5 + retry@0.13.1: {} + reusify@1.0.4: {} rolldown-plugin-dts@0.22.2(@typescript/native-preview@7.0.0-dev.20260421.2)(oxc-resolver@11.16.4)(rolldown@1.0.0-rc.3)(typescript@6.0.3): @@ -19458,6 +21296,27 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5 + rolldown@1.0.2: + dependencies: + '@oxc-project/types': 0.132.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.2 + '@rolldown/binding-darwin-arm64': 1.0.2 + '@rolldown/binding-darwin-x64': 1.0.2 + '@rolldown/binding-freebsd-x64': 1.0.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 + '@rolldown/binding-linux-arm64-gnu': 1.0.2 + '@rolldown/binding-linux-arm64-musl': 1.0.2 + '@rolldown/binding-linux-ppc64-gnu': 1.0.2 + '@rolldown/binding-linux-s390x-gnu': 1.0.2 + '@rolldown/binding-linux-x64-gnu': 1.0.2 + '@rolldown/binding-linux-x64-musl': 1.0.2 + '@rolldown/binding-openharmony-arm64': 1.0.2 + '@rolldown/binding-wasm32-wasi': 1.0.2 + '@rolldown/binding-win32-arm64-msvc': 1.0.2 + '@rolldown/binding-win32-x64-msvc': 1.0.2 + rollup@4.55.2: dependencies: '@types/estree': 1.0.8 @@ -19491,6 +21350,21 @@ snapshots: rope-sequence@1.3.4: {} + rosie-skills-darwin-arm64@0.6.4: + optional: true + + rosie-skills-freebsd-x64@0.6.4: + optional: true + + rosie-skills-linux-x64@0.6.4: + optional: true + + rosie-skills@0.6.4: + optionalDependencies: + rosie-skills-darwin-arm64: 0.6.4 + rosie-skills-freebsd-x64: 0.6.4 + rosie-skills-linux-x64: 0.6.4 + router@2.2.0: dependencies: debug: 4.4.3 @@ -19542,6 +21416,10 @@ snapshots: scheduler@0.27.0: {} + seek-bzip@2.0.0: + dependencies: + commander: 6.2.1 + semver@6.3.1: {} semver@7.7.4: {} @@ -19745,6 +21623,10 @@ snapshots: sprintf-js@1.0.3: {} + sprintf-js@1.1.3: {} + + sql.js@1.14.1: {} + stackback@0.0.2: {} starlight-utils@1.0.0: {} @@ -19790,6 +21672,12 @@ snapshots: strip-json-comments@5.0.3: {} + strnum@2.3.0: {} + + strtok3@10.3.5: + dependencies: + '@tokenizer/token': 0.3.0 + style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -19943,6 +21831,12 @@ snapshots: toidentifier@1.0.1: {} + token-types@6.1.2: + dependencies: + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + totalist@3.0.1: {} tough-cookie@5.1.2: @@ -19961,6 +21855,8 @@ snapshots: trough@2.2.0: {} + ts-algebra@2.0.0: {} + tsconfck@3.1.6(typescript@6.0.0-beta): optionalDependencies: typescript: 6.0.0-beta @@ -20006,6 +21902,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + turndown@7.2.4: + dependencies: + '@mixmark-io/domino': 2.2.0 + type-fest@4.41.0: {} type-is@2.0.1: @@ -20014,6 +21914,8 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 + typebox@1.1.38: {} + typesafe-path@0.2.2: {} typescript-auto-import-cache@0.3.6: @@ -20030,6 +21932,8 @@ snapshots: ufo@1.6.3: {} + uint8array-extras@1.5.0: {} + uint8arrays@3.0.0: dependencies: multiformats: 9.9.0 @@ -20144,7 +22048,7 @@ snapshots: dependencies: rolldown: 1.0.0-rc.5 - unstorage@1.17.4: + unstorage@1.17.4(aws4fetch@1.0.20): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -20154,8 +22058,10 @@ snapshots: node-fetch-native: 1.6.7 ofetch: 1.5.1 ufo: 1.6.3 + optionalDependencies: + aws4fetch: 1.0.20 - unstorage@1.17.5: + unstorage@1.17.5(aws4fetch@1.0.20): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -20165,6 +22071,8 @@ snapshots: node-fetch-native: 1.6.7 ofetch: 1.5.1 ufo: 1.6.3 + optionalDependencies: + aws4fetch: 1.0.20 update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: @@ -20190,6 +22098,10 @@ snapshots: optionalDependencies: typescript: 6.0.3 + valibot@1.4.1(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + validate-npm-package-name@5.0.1: {} varint@6.0.0: {} @@ -20228,7 +22140,7 @@ snapshots: - utf-8-validate - zod - vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2): + vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -20241,9 +22153,9 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 - yaml: 2.8.2 + yaml: 2.9.0 - vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.4) @@ -20256,9 +22168,9 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 - yaml: 2.8.2 + yaml: 2.9.0 - vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2): + vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.4) @@ -20271,9 +22183,9 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 - yaml: 2.8.2 + yaml: 2.9.0 - vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2): + vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -20285,29 +22197,74 @@ snapshots: esbuild: 0.27.3 fsevents: 2.3.3 jiti: 2.6.1 - yaml: 2.8.2 + yaml: 2.9.0 + + vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.0.2 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 24.10.13 + esbuild: 0.27.3 + fsevents: 2.3.3 + jiti: 2.6.1 + yaml: 2.9.0 - vitefu@1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)): + vitefu@1.1.2(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)): optionalDependencies: - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) - vitefu@1.1.2(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)): + vitefu@1.1.2(vite@7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)): optionalDependencies: - vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) vitest-browser-react@2.0.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.5): dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)): + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.0.4 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 24.10.13 + '@vitest/browser-playwright': 4.1.5(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5) + '@vitest/ui': 4.1.5(vitest@4.1.5) + jsdom: 26.1.0 + transitivePeerDependencies: + - msw + + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -20324,21 +22281,21 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.13 - '@vitest/browser-playwright': 4.1.5(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5) + '@vitest/browser-playwright': 4.1.5(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.9.0))(vitest@4.1.5) '@vitest/ui': 4.1.5(vitest@4.1.5) jsdom: 26.1.0 transitivePeerDependencies: - msw - vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)): + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -20355,21 +22312,21 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) + vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.13 - '@vitest/browser-playwright': 4.1.5(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(vitest@4.1.5) + '@vitest/browser-playwright': 4.1.5(playwright@1.58.2)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5) '@vitest/ui': 4.1.5(vitest@4.1.5) jsdom: 26.1.0 transitivePeerDependencies: - msw - vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)): + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2)) + '@vitest/mocker': 4.1.5(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -20386,12 +22343,12 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2) + vite: 8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.13 - '@vitest/browser-playwright': 4.1.5(playwright@1.58.2)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.1.5) + '@vitest/browser-playwright': 4.1.5(playwright@1.58.2)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.5) '@vitest/ui': 4.1.5(vitest@4.1.5) jsdom: 26.1.0 transitivePeerDependencies: @@ -20508,8 +22465,7 @@ snapshots: web-namespaces@2.0.1: {} - web-streams-polyfill@3.3.3: - optional: true + web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} @@ -20566,6 +22522,14 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20260507.1 '@cloudflare/workerd-windows-64': 1.20260507.1 + workerd@1.20260526.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260526.1 + '@cloudflare/workerd-darwin-arm64': 1.20260526.1 + '@cloudflare/workerd-linux-64': 1.20260526.1 + '@cloudflare/workerd-linux-arm64': 1.20260526.1 + '@cloudflare/workerd-windows-64': 1.20260526.1 + wrangler@4.71.0(@cloudflare/workers-types@4.20260305.1): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 @@ -20600,7 +22564,7 @@ snapshots: - bufferutil - utf-8-validate - wrangler@4.90.0(@cloudflare/workers-types@4.20260305.1): + wrangler@4.90.0: dependencies: '@cloudflare/kv-asset-handler': 0.5.0 '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260507.1) @@ -20610,6 +22574,23 @@ snapshots: path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 workerd: 1.20260507.1 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + wrangler@4.95.0(@cloudflare/workers-types@4.20260305.1): + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) + blake3-wasm: 2.1.5 + esbuild: 0.27.3 + miniflare: 4.20260526.0 + path-to-regexp: 6.3.0 + rosie-skills: 0.6.4 + unenv: 2.0.0-rc.24 + workerd: 1.20260526.1 optionalDependencies: '@cloudflare/workers-types': 4.20260305.1 fsevents: 2.3.3 @@ -20637,8 +22618,14 @@ snapshots: ws@8.19.0: {} + ws@8.20.1: {} + + ws@8.21.0: {} + xml-name-validator@5.0.0: {} + xml-naming@0.1.0: {} + xmlchars@2.2.0: {} xtend@4.0.2: {} @@ -20675,6 +22662,8 @@ snapshots: yaml@2.8.2: {} + yaml@2.9.0: {} + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6c32bb9f3..7cd12a05d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -28,6 +28,12 @@ allowBuilds: better-sqlite3: true esbuild: true workerd: true + # Transitive @flue/runtime deps. The reviewer ran end-to-end with these + # build scripts ignored, so none are needed at runtime. + '@google/genai': false + '@mongodb-js/zstd': false + node-liblzma: false + protobufjs: false # Reviewed benign trust downgrades (publish-method changes, not takeovers). trustPolicyExclude: - "vite@6.4.1" # trusted-publisher -> provenance (vitejs CI change) @@ -139,5 +145,5 @@ catalog: typescript: ^6.0.3 vite: ^8.0.11 vitest: ^4.1.5 - wrangler: ^4.83.0 + wrangler: ^4.95.0 zod: ^4.4.1 From efc6c8cf4a3e29be8372f474888aa2dfcd2bedc9 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 30 May 2026 13:23:22 +0100 Subject: [PATCH 2/8] feat(review): GitHub App webhook orchestration and review posting (Phase B) Adds the public webhook handler and moves GitHub I/O into the durable workflow. The webhook (the only public route) verifies the HMAC signature, gates pull_request events (skips drafts, bots, non-reviewable actions), admits the workflow run, and acks fast. The review and the GitHub post run inside the workflow Durable Object, which is not bound by the webhook's 30s waitUntil budget. All GitHub-token use lives in the workflow's run() (trusted DO code): mint a short-lived installation token, fetch the prior emdashbot review for a re-review, run the review in the container (which still never sees the token), then post the review. Verdict maps to APPROVE / COMMENT / REQUEST_CHANGES and findings to line comments, with a body-only retry if a comment anchors outside the diff. Without App creds (local dev) posting is skipped and the result is just returned. The container is git-only against the public repo, so no egress proxy or Sandbox subclass is needed; the token never enters model-reachable space. Validated locally: signature verification, event gating, and workflow admission. Live posting awaits a configured GitHub App (secrets via wrangler secret put). --- infra/flue-review/.dev.vars.example | 13 ++ infra/flue-review/.flue/app.ts | 61 ++++++ infra/flue-review/.flue/lib/github.ts | 204 ++++++++++++++++++++ infra/flue-review/.flue/lib/webhook.ts | 110 +++++++++++ infra/flue-review/.flue/workflows/review.ts | 42 ++-- infra/flue-review/.gitignore | 1 + infra/flue-review/package.json | 1 + infra/flue-review/wrangler.jsonc | 13 ++ pnpm-lock.yaml | 55 +++--- 9 files changed, 453 insertions(+), 47 deletions(-) create mode 100644 infra/flue-review/.dev.vars.example create mode 100644 infra/flue-review/.flue/app.ts create mode 100644 infra/flue-review/.flue/lib/github.ts create mode 100644 infra/flue-review/.flue/lib/webhook.ts diff --git a/infra/flue-review/.dev.vars.example b/infra/flue-review/.dev.vars.example new file mode 100644 index 000000000..2357f2e9d --- /dev/null +++ b/infra/flue-review/.dev.vars.example @@ -0,0 +1,13 @@ +# Local dev secrets for `flue dev --target cloudflare`. Copy to `.dev.vars`. +# With the GITHUB_APP_* trio left empty, the workflow skips posting and just +# returns the review result (safe for local testing without a real App). + +# HMAC secret shared with the GitHub webhook config. +GITHUB_WEBHOOK_SECRET= + +# GitHub App credentials (leave empty in dev to skip posting). +GITHUB_APP_ID= +# PKCS#8 PEM, newlines as literal \n or a quoted multi-line value. +# Convert GitHub's PKCS#1 download: openssl pkcs8 -topk8 -nocrypt -in key.pem +GITHUB_APP_PRIVATE_KEY= +GITHUB_APP_INSTALLATION_ID= diff --git a/infra/flue-review/.flue/app.ts b/infra/flue-review/.flue/app.ts new file mode 100644 index 000000000..5a0590004 --- /dev/null +++ b/infra/flue-review/.flue/app.ts @@ -0,0 +1,61 @@ +// Custom Flue application: the GitHub App webhook orchestrator. +// +// This is the ONLY public surface. We deliberately do NOT mount flue() at a +// public path, so the workflow/agent HTTP endpoints are not externally +// reachable; the workflow is admitted only via an internal request from this +// handler. The handler does no long-running work itself (a webhook must ack +// within seconds, and waitUntil caps at 30s): it verifies, gates, admits the +// durable workflow run, and returns. The review and the GitHub post happen +// inside the workflow's Durable Object, which is not bound by that budget. + +import { Hono } from "hono"; +import { flue } from "@flue/runtime/app"; + +import { verifyWebhookSignature, gatePullRequestEvent } from "./lib/webhook.js"; + +const flueApp = flue(); + +const app = new Hono<{ Bindings: Env }>(); + +app.post("/webhook/github", async (c) => { + const raw = await c.req.text(); + const secret = c.env.GITHUB_WEBHOOK_SECRET; + if (!secret) return c.text("webhook secret not configured", 500); + const valid = await verifyWebhookSignature(secret, raw, c.req.header("x-hub-signature-256")); + if (!valid) return c.text("invalid signature", 401); + + const eventType = c.req.header("x-github-event"); + if (eventType === "ping") return c.text("pong", 200); + if (eventType !== "pull_request") return c.text(`ignored event: ${eventType}`, 202); + + let event: unknown; + try { + event = JSON.parse(raw); + } catch { + return c.text("invalid JSON", 400); + } + + const decision = gatePullRequestEvent(event as Parameters[0]); + if (!decision.review) return c.text(`skipped: ${decision.reason}`, 202); + + // Admit the durable workflow run (fast). The review + post run in the + // workflow DO independently of this request. No ?wait=result: we don't + // block the webhook on the (minutes-long) review. + const admit = await flueApp.fetch( + new Request("https://flue.internal/workflows/review", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(decision.pr), + }), + c.env, + c.executionCtx, + ); + if (!admit.ok) { + console.error("[webhook] workflow admission failed:", admit.status, await admit.text()); + return c.text("failed to admit review", 502); + } + + return c.text(`review queued for PR #${decision.pr.prNumber}`, 202); +}); + +export default app; diff --git a/infra/flue-review/.flue/lib/github.ts b/infra/flue-review/.flue/lib/github.ts new file mode 100644 index 000000000..369ba953f --- /dev/null +++ b/infra/flue-review/.flue/lib/github.ts @@ -0,0 +1,204 @@ +// GitHub App helpers, used only by trusted Worker/Durable-Object code (the +// review workflow's run()). None of this runs in the agent's container, so the +// installation token is never reachable by the model-directed shell. +// +// Auth model: a GitHub App authenticates as an installation. We mint a short +// JWT signed with the app's private key (RS256), exchange it for an +// installation access token (valid ~1h, scoped to the installation's repos and +// the app's permissions), and use that token for reads and for posting the +// review. The app needs `pull_requests: write` and `contents: read`. + +import type { ReviewResult } from "./review-schema.js"; + +const GITHUB_API = "https://api.github.com"; +const USER_AGENT = "emdash-flue-review"; + +export interface GitHubAppCreds { + appId: string; + /** PKCS#8 PEM ("BEGIN PRIVATE KEY"). Convert a GitHub PKCS#1 key with `openssl pkcs8`. */ + privateKeyPem: string; + installationId: string; +} + +/** Returns creds if all three are present, else null (dev mode: skip posting). */ +export function readAppCreds(env: Env): GitHubAppCreds | null { + const appId = env.GITHUB_APP_ID; + const privateKeyPem = env.GITHUB_APP_PRIVATE_KEY; + const installationId = env.GITHUB_APP_INSTALLATION_ID; + if (!appId || !privateKeyPem || !installationId) return null; + return { appId, privateKeyPem, installationId }; +} + +function base64UrlFromBytes(bytes: Uint8Array): string { + let binary = ""; + for (const b of bytes) binary += String.fromCharCode(b); + return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); +} + +function base64UrlFromString(input: string): string { + return base64UrlFromBytes(new TextEncoder().encode(input)); +} + +function pemToPkcs8(pem: string): ArrayBuffer { + const body = pem + .replace(/-----BEGIN [^-]+-----/g, "") + .replace(/-----END [^-]+-----/g, "") + .replace(/\s+/g, ""); + const binary = atob(body); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); + return bytes.buffer; +} + +async function signAppJwt(creds: GitHubAppCreds): Promise { + const key = await crypto.subtle.importKey( + "pkcs8", + pemToPkcs8(creds.privateKeyPem), + { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, + false, + ["sign"], + ); + const now = Math.floor(Date.now() / 1000); + // iat backdated 60s for clock skew; GitHub caps exp at 10 minutes. + const header = { alg: "RS256", typ: "JWT" }; + const payload = { iat: now - 60, exp: now + 540, iss: creds.appId }; + const signingInput = `${base64UrlFromString(JSON.stringify(header))}.${base64UrlFromString(JSON.stringify(payload))}`; + const signature = await crypto.subtle.sign( + "RSASSA-PKCS1-v1_5", + key, + new TextEncoder().encode(signingInput), + ); + return `${signingInput}.${base64UrlFromBytes(new Uint8Array(signature))}`; +} + +/** Mint a short-lived installation access token. */ +export async function mintInstallationToken(creds: GitHubAppCreds): Promise { + const jwt = await signAppJwt(creds); + const res = await fetch( + `${GITHUB_API}/app/installations/${creds.installationId}/access_tokens`, + { + method: "POST", + headers: { + authorization: `Bearer ${jwt}`, + accept: "application/vnd.github+json", + "user-agent": USER_AGENT, + "x-github-api-version": "2022-11-28", + }, + }, + ); + if (!res.ok) { + throw new Error(`installation token mint failed: ${res.status} ${await res.text()}`); + } + const json = (await res.json()) as { token?: string }; + if (!json.token) throw new Error("installation token response had no token"); + return json.token; +} + +/** + * Fetch the most recent emdashbot[bot] review body for a re-review, so the + * agent can avoid re-flagging already-addressed findings. Returns undefined on + * a first review or any failure (non-fatal: we just review fresh). + */ +export async function fetchPriorReview( + token: string, + owner: string, + repo: string, + prNumber: number, +): Promise { + try { + const res = await fetch( + `${GITHUB_API}/repos/${owner}/${repo}/pulls/${prNumber}/reviews?per_page=100`, + { + headers: { + authorization: `Bearer ${token}`, + accept: "application/vnd.github+json", + "user-agent": USER_AGENT, + "x-github-api-version": "2022-11-28", + }, + }, + ); + if (!res.ok) return undefined; + const reviews = (await res.json()) as Array<{ + user?: { login?: string }; + body?: string; + state?: string; + submitted_at?: string; + }>; + const ours = reviews + .filter((r) => r.user?.login === "emdashbot[bot]" && r.body) + .sort((a, b) => (a.submitted_at ?? "").localeCompare(b.submitted_at ?? "")); + const latest = ours.at(-1); + if (!latest) return undefined; + return `Your previous review (state: ${latest.state ?? "unknown"}):\n\n${latest.body}`; + } catch { + return undefined; + } +} + +function verdictToEvent(verdict: ReviewResult["verdict"]): "APPROVE" | "REQUEST_CHANGES" | "COMMENT" { + switch (verdict) { + case "approve": + return "APPROVE"; + case "request_changes": + return "REQUEST_CHANGES"; + default: + return "COMMENT"; + } +} + +function findingToComment(finding: ReviewResult["findings"][number]) { + const label = finding.severity === "needs_fixing" ? "**[needs fixing]** " : "**[suggestion]** "; + const base: Record = { + path: finding.path, + line: finding.line, + side: finding.side, + body: label + finding.body, + }; + if (finding.startLine && finding.startLine < finding.line) { + base.start_line = finding.startLine; + base.start_side = finding.side; + } + return base; +} + +/** + * Post the review. Maps verdict -> review event and findings -> line comments. + * If GitHub rejects the request because a comment anchors to a line outside the + * diff, retry body-only so the summary still lands. + */ +export async function postReview( + token: string, + owner: string, + repo: string, + prNumber: number, + result: ReviewResult, +): Promise { + const url = `${GITHUB_API}/repos/${owner}/${repo}/pulls/${prNumber}/reviews`; + const event = verdictToEvent(result.verdict); + const headers = { + authorization: `Bearer ${token}`, + accept: "application/vnd.github+json", + "content-type": "application/json", + "user-agent": USER_AGENT, + "x-github-api-version": "2022-11-28", + }; + + const withComments = { + body: result.summary, + event, + comments: result.findings.map(findingToComment), + }; + let res = await fetch(url, { method: "POST", headers, body: JSON.stringify(withComments) }); + if (res.ok) return; + + // Most likely cause: a comment line isn't part of the diff. Fall back to a + // body-only review so the summary is never lost. + const firstError = await res.text(); + const bodyOnly = { body: `${result.summary}`, event }; + res = await fetch(url, { method: "POST", headers, body: JSON.stringify(bodyOnly) }); + if (!res.ok) { + throw new Error( + `postReview failed (with comments: ${firstError}); body-only retry: ${res.status} ${await res.text()}`, + ); + } +} diff --git a/infra/flue-review/.flue/lib/webhook.ts b/infra/flue-review/.flue/lib/webhook.ts new file mode 100644 index 000000000..52df4a423 --- /dev/null +++ b/infra/flue-review/.flue/lib/webhook.ts @@ -0,0 +1,110 @@ +// GitHub webhook signature verification and pull_request event gating. + +const encoder = new TextEncoder(); + +/** + * Verify the `X-Hub-Signature-256` header against the raw request body using + * the shared webhook secret (HMAC-SHA256). Constant-time comparison. + */ +export async function verifyWebhookSignature( + secret: string, + rawBody: string, + signatureHeader: string | undefined | null, +): Promise { + if (!signatureHeader || !signatureHeader.startsWith("sha256=")) return false; + const key = await crypto.subtle.importKey( + "raw", + encoder.encode(secret), + { name: "HMAC", hash: "SHA-256" }, + false, + ["sign"], + ); + const mac = await crypto.subtle.sign("HMAC", key, encoder.encode(rawBody)); + const expected = "sha256=" + [...new Uint8Array(mac)].map((b) => b.toString(16).padStart(2, "0")).join(""); + return timingSafeEqual(expected, signatureHeader); +} + +function timingSafeEqual(a: string, b: string): boolean { + if (a.length !== b.length) return false; + let diff = 0; + for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i); + return diff === 0; +} + +export interface GatedPr { + prNumber: number; + prTitle: string; + prBody: string; + headRef: string; + baseRef: string; + owner: string; + repo: string; +} + +export type GateDecision = { review: true; pr: GatedPr } | { review: false; reason: string }; + +// Actions that warrant a (re-)review. `synchronize` = new commits pushed. +const REVIEWABLE_ACTIONS = new Set(["opened", "reopened", "ready_for_review", "synchronize"]); +// Manual trigger: applying this label to a PR. +const MANUAL_LABEL = "bot:review"; + +interface PullRequestEvent { + action?: string; + label?: { name?: string }; + pull_request?: { + number?: number; + title?: string; + body?: string | null; + draft?: boolean; + head?: { ref?: string }; + base?: { ref?: string }; + user?: { login?: string }; + }; + repository?: { name?: string; owner?: { login?: string } }; +} + +/** + * Decide whether a `pull_request` webhook should trigger a review, and extract + * the fields the workflow needs. Skips drafts, bot-authored PRs, and our own + * account to avoid self-review loops. + */ +export function gatePullRequestEvent(event: PullRequestEvent): GateDecision { + const action = event.action ?? ""; + const isManual = action === "labeled" && event.label?.name === MANUAL_LABEL; + if (!isManual && !REVIEWABLE_ACTIONS.has(action)) { + return { review: false, reason: `action "${action}" is not reviewable` }; + } + + const pr = event.pull_request; + if (!pr) return { review: false, reason: "no pull_request in payload" }; + if (pr.draft && action !== "ready_for_review" && !isManual) { + return { review: false, reason: "PR is a draft" }; + } + + const author = pr.user?.login ?? ""; + if (author.endsWith("[bot]")) { + return { review: false, reason: `author "${author}" is a bot` }; + } + + const owner = event.repository?.owner?.login; + const repo = event.repository?.name; + const prNumber = pr.number; + const headRef = pr.head?.ref; + const baseRef = pr.base?.ref; + if (!owner || !repo || !prNumber || !headRef || !baseRef || !pr.title) { + return { review: false, reason: "payload missing required PR fields" }; + } + + return { + review: true, + pr: { + prNumber, + prTitle: pr.title, + prBody: pr.body ?? "", + headRef, + baseRef, + owner, + repo, + }, + }; +} diff --git a/infra/flue-review/.flue/workflows/review.ts b/infra/flue-review/.flue/workflows/review.ts index 7fc8ebead..8424a2b3b 100644 --- a/infra/flue-review/.flue/workflows/review.ts +++ b/infra/flue-review/.flue/workflows/review.ts @@ -18,6 +18,7 @@ import { cfSandboxToSessionEnv } from "@flue/runtime/cloudflare"; import { getSandbox, type Sandbox } from "@cloudflare/sandbox"; import { reviewResultSchema, type ReviewResult } from "../lib/review-schema.js"; +import { readAppCreds, mintInstallationToken, fetchPriorReview, postReview } from "../lib/github.js"; // Bundled as a SkillReference by the Flue build. Holds the full investigation // protocol (git-only, ported from the ask-bonk auto-reviewer). import review from "../skills/review/SKILL.md" with { type: "skill" }; @@ -32,12 +33,6 @@ interface ReviewPayload { baseRef: string; owner: string; repo: string; - /** - * Optional prior-review context for a re-review: earlier emdashbot[bot] - * findings and the author's replies, fetched by the orchestrator and passed - * in. Absent on a first review. - */ - priorReview?: string; } // Kimi via the Cloudflare Workers AI binding: the `cloudflare/` prefix is @@ -103,7 +98,7 @@ function assertSafe(payload: ReviewPayload): void { } } -function buildPrContext(payload: ReviewPayload): string { +function buildPrContext(payload: ReviewPayload, priorReview?: string): string { const lines = [ `PR #${payload.prNumber} in ${payload.owner}/${payload.repo}.`, `Head ref: ${payload.headRef}. Base branch: ${payload.baseRef} (diff against origin/${payload.baseRef}).`, @@ -113,21 +108,28 @@ function buildPrContext(payload: ReviewPayload): string { "", payload.prBody || "(no description provided)", ]; - if (payload.priorReview) { - lines.push( - "", - "## Prior review context (this is a re-review)", - "", - payload.priorReview, - ); + if (priorReview) { + lines.push("", "## Prior review context (this is a re-review)", "", priorReview); } return lines.join("\n"); } export async function run(ctx: FlueContext): Promise { - const { init, payload } = ctx; + const { init, payload, env } = ctx; assertSafe(payload); + // GitHub access lives entirely in this trusted DO code, never in the agent's + // container. Without app creds (e.g. local dev) we skip posting and just + // return the result. The token (minted once, valid ~1h) is reused for the + // prior-review fetch and the final post. + const creds = readAppCreds(env); + let token: string | undefined; + let priorReview: string | undefined; + if (creds) { + token = await mintInstallationToken(creds); + priorReview = await fetchPriorReview(token, payload.owner, payload.repo, payload.prNumber); + } + const harness = await init(reviewAgent); const session = await harness.session(); @@ -155,7 +157,7 @@ export async function run(ctx: FlueContext): Promise): Promise`. The webhook secret is used by the + // public handler; the GitHub App trio is used only by the workflow DO to + // fetch prior reviews and post the review (never by the agent container). + // GITHUB_APP_PRIVATE_KEY must be a PKCS#8 PEM (convert GitHub's download + // with `openssl pkcs8 -topk8 -nocrypt -in key.pem`). + "secrets": { + "required": [ + "GITHUB_WEBHOOK_SECRET", + "GITHUB_APP_ID", + "GITHUB_APP_PRIVATE_KEY", + "GITHUB_APP_INSTALLATION_ID", + ], + }, "observability": { "enabled": true, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a34e81d87..64bc08ef1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -366,7 +366,7 @@ importers: devDependencies: '@cloudflare/vite-plugin': specifier: 'catalog:' - version: 1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0) + version: 1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260507.1)(wrangler@4.95.0) '@cloudflare/vitest-pool-workers': specifier: 'catalog:' version: 0.16.3(@vitest/runner@4.1.5)(@vitest/snapshot@4.1.5)(vitest@4.1.5) @@ -868,6 +868,9 @@ importers: agents: specifier: ^0.13.3 version: 0.13.3(@babel/core@7.29.0)(@babel/runtime@7.29.7)(@cloudflare/workers-types@4.20260305.1)(@x402/core@2.8.0)(@x402/evm@2.8.0(typescript@6.0.3))(ai@6.0.172(zod@4.4.1))(react@19.2.4)(rolldown@1.0.2)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(zod@4.4.1) + hono: + specifier: ^4.12.23 + version: 4.12.23 valibot: specifier: ^1.4.1 version: 1.4.1(typescript@6.0.3) @@ -8294,10 +8297,6 @@ packages: resolution: {integrity: sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==} engines: {node: '>=16.9.0'} - hono@4.12.4: - resolution: {integrity: sha512-ooiZW1Xy8rQ4oELQ++otI2T9DsKpV0M6c6cO6JGx4RTfav9poFFLlet9UMXHZnoM1yG0HWGlQLswBGX3RZmHtg==} - engines: {node: '>=16.9.0'} - hono@4.12.7: resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==} engines: {node: '>=16.9.0'} @@ -13345,9 +13344,9 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/vite-plugin@1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260526.1)(wrangler@4.95.0)': + '@cloudflare/vite-plugin@1.36.3(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260507.1)(wrangler@4.95.0)': dependencies: - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260507.1) miniflare: 4.20260507.1 unenv: 2.0.0-rc.24 vite: 8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0) @@ -13854,14 +13853,14 @@ snapshots: dependencies: '@earendil-works/pi-agent-core': 0.77.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))(ws@8.21.0)(zod@4.4.1) '@earendil-works/pi-ai': 0.77.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1))(ws@8.21.0)(zod@4.4.1) - '@hono/node-server': 2.0.4(hono@4.12.7) - '@hono/standard-validator': 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7) + '@hono/node-server': 2.0.4(hono@4.12.23) + '@hono/standard-validator': 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.23) '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1) '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.0(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.0(typescript@6.0.3))(zod@4.4.1) '@valibot/to-json-schema': 1.7.0(valibot@1.4.0(typescript@6.0.3)) - hono: 4.12.7 - hono-openapi: 1.3.0(@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1))(@types/json-schema@7.0.15)(hono@4.12.7)(openapi-types@12.1.3) + hono: 4.12.23 + hono-openapi: 1.3.0(@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.23))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1))(@types/json-schema@7.0.15)(hono@4.12.23)(openapi-types@12.1.3) js-yaml: 4.1.1 just-bash: 3.0.1 openapi-types: 12.1.3 @@ -13898,22 +13897,18 @@ snapshots: - supports-color - utf-8-validate - '@hono/node-server@1.19.9(hono@4.12.4)': - dependencies: - hono: 4.12.4 - - '@hono/node-server@1.19.9(hono@4.12.7)': + '@hono/node-server@1.19.9(hono@4.12.23)': dependencies: - hono: 4.12.7 + hono: 4.12.23 - '@hono/node-server@2.0.4(hono@4.12.7)': + '@hono/node-server@2.0.4(hono@4.12.23)': dependencies: - hono: 4.12.7 + hono: 4.12.23 - '@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7)': + '@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.23)': dependencies: '@standard-schema/spec': 1.1.0 - hono: 4.12.7 + hono: 4.12.23 '@iconify-json/ph@1.2.2': dependencies: @@ -14361,7 +14356,7 @@ snapshots: '@modelcontextprotocol/sdk@1.26.0(@cfworker/json-schema@4.1.1)(zod@4.4.1)': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.4) + '@hono/node-server': 1.19.9(hono@4.12.23) ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 @@ -14371,7 +14366,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.4 + hono: 4.12.23 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -14385,7 +14380,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.1)': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.7) + '@hono/node-server': 1.19.9(hono@4.12.23) ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 @@ -14395,7 +14390,7 @@ snapshots: eventsource-parser: 3.0.8 express: 5.2.1 express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.7 + hono: 4.12.23 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -16766,7 +16761,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.14(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.9.0)) '@vitest/utils@4.1.5': dependencies: @@ -19012,20 +19007,18 @@ snapshots: highlight.js@10.7.3: {} - hono-openapi@1.3.0(@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1))(@types/json-schema@7.0.15)(hono@4.12.7)(openapi-types@12.1.3): + hono-openapi@1.3.0(@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.23))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1))(@types/json-schema@7.0.15)(hono@4.12.23)(openapi-types@12.1.3): dependencies: '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1) '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3)))(quansync@0.2.11)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod-to-json-schema@3.25.1(zod@4.4.1))(zod@4.4.1))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.4.1(typescript@6.0.3))(zod@4.4.1) '@types/json-schema': 7.0.15 openapi-types: 12.1.3 optionalDependencies: - '@hono/standard-validator': 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.7) - hono: 4.12.7 + '@hono/standard-validator': 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.23) + hono: 4.12.23 hono@4.12.23: {} - hono@4.12.4: {} - hono@4.12.7: {} hookable@6.0.1: {} From 88e8ffb3c93fc4ac95b70c40ffc024173fe82202 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 30 May 2026 13:36:26 +0100 Subject: [PATCH 3/8] chore(review): make emdashbot app id and installation id non-secret vars Only the private key and webhook secret need wrangler secret put; the app id (3255304) and installation id (120963314) are not sensitive. --- infra/flue-review/.dev.vars.example | 11 +++++------ infra/flue-review/wrangler.jsonc | 19 +++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/infra/flue-review/.dev.vars.example b/infra/flue-review/.dev.vars.example index 2357f2e9d..469bfd7d5 100644 --- a/infra/flue-review/.dev.vars.example +++ b/infra/flue-review/.dev.vars.example @@ -1,13 +1,12 @@ # Local dev secrets for `flue dev --target cloudflare`. Copy to `.dev.vars`. -# With the GITHUB_APP_* trio left empty, the workflow skips posting and just -# returns the review result (safe for local testing without a real App). +# With GITHUB_APP_PRIVATE_KEY left empty, the workflow skips posting and just +# returns the review result (safe for local testing without the App key). +# GITHUB_APP_ID and GITHUB_APP_INSTALLATION_ID are non-secret vars in +# wrangler.jsonc, not here. # HMAC secret shared with the GitHub webhook config. GITHUB_WEBHOOK_SECRET= -# GitHub App credentials (leave empty in dev to skip posting). -GITHUB_APP_ID= -# PKCS#8 PEM, newlines as literal \n or a quoted multi-line value. +# emdashbot App private key, PKCS#8 PEM (leave empty in dev to skip posting). # Convert GitHub's PKCS#1 download: openssl pkcs8 -topk8 -nocrypt -in key.pem GITHUB_APP_PRIVATE_KEY= -GITHUB_APP_INSTALLATION_ID= diff --git a/infra/flue-review/wrangler.jsonc b/infra/flue-review/wrangler.jsonc index 39a3c59d3..dbf6c3264 100644 --- a/infra/flue-review/wrangler.jsonc +++ b/infra/flue-review/wrangler.jsonc @@ -21,19 +21,18 @@ "vars": { "GITHUB_OWNER_LOGIN": "ascorbic", "GITHUB_REPO": "emdash-cms/emdash", + // emdashbot GitHub App. Not secret (app id is public; installation id is + // low-sensitivity). Only the private key and webhook secret are secrets. + "GITHUB_APP_ID": "3255304", + "GITHUB_APP_INSTALLATION_ID": "120963314", }, // Set with `wrangler secret put `. The webhook secret is used by the - // public handler; the GitHub App trio is used only by the workflow DO to - // fetch prior reviews and post the review (never by the agent container). - // GITHUB_APP_PRIVATE_KEY must be a PKCS#8 PEM (convert GitHub's download - // with `openssl pkcs8 -topk8 -nocrypt -in key.pem`). + // public handler; the private key is used only by the workflow DO to mint an + // installation token, fetch prior reviews, and post (never by the agent + // container). GITHUB_APP_PRIVATE_KEY must be a PKCS#8 PEM (convert GitHub's + // download with `openssl pkcs8 -topk8 -nocrypt -in key.pem`). "secrets": { - "required": [ - "GITHUB_WEBHOOK_SECRET", - "GITHUB_APP_ID", - "GITHUB_APP_PRIVATE_KEY", - "GITHUB_APP_INSTALLATION_ID", - ], + "required": ["GITHUB_WEBHOOK_SECRET", "GITHUB_APP_PRIVATE_KEY"], }, "observability": { "enabled": true, From 170b9fc98de56ff0803d4a3b6b7e1f21db3e1b6e Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 30 May 2026 13:58:07 +0100 Subject: [PATCH 4/8] feat(review): add an eyes reaction while a review is in progress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The workflow adds an 👀 reaction to the PR when it starts and removes it once the review is posted (or if it fails), so a PR visibly shows it is being reviewed during the minutes-long container run. Best-effort and non-fatal. --- infra/flue-review/.flue/lib/github.ts | 57 +++++++++++ infra/flue-review/.flue/workflows/review.ts | 107 ++++++++++++-------- 2 files changed, 119 insertions(+), 45 deletions(-) diff --git a/infra/flue-review/.flue/lib/github.ts b/infra/flue-review/.flue/lib/github.ts index 369ba953f..cd57d76f9 100644 --- a/infra/flue-review/.flue/lib/github.ts +++ b/infra/flue-review/.flue/lib/github.ts @@ -135,6 +135,63 @@ export async function fetchPriorReview( } } +/** + * Add an 👀 reaction to the PR to signal "review in progress". Returns the + * reaction id (to remove later) or undefined on failure. Non-fatal: a missing + * progress marker should never block a review. + */ +export async function addEyesReaction( + token: string, + owner: string, + repo: string, + prNumber: number, +): Promise { + try { + const res = await fetch(`${GITHUB_API}/repos/${owner}/${repo}/issues/${prNumber}/reactions`, { + method: "POST", + headers: { + authorization: `Bearer ${token}`, + accept: "application/vnd.github+json", + "content-type": "application/json", + "user-agent": USER_AGENT, + "x-github-api-version": "2022-11-28", + }, + body: JSON.stringify({ content: "eyes" }), + }); + if (!res.ok) return undefined; + const json = (await res.json()) as { id?: number }; + return json.id; + } catch { + return undefined; + } +} + +/** Remove a previously-added reaction (the in-progress marker). Non-fatal. */ +export async function removeReaction( + token: string, + owner: string, + repo: string, + prNumber: number, + reactionId: number, +): Promise { + try { + await fetch( + `${GITHUB_API}/repos/${owner}/${repo}/issues/${prNumber}/reactions/${reactionId}`, + { + method: "DELETE", + headers: { + authorization: `Bearer ${token}`, + accept: "application/vnd.github+json", + "user-agent": USER_AGENT, + "x-github-api-version": "2022-11-28", + }, + }, + ); + } catch { + // Best-effort cleanup; leaving a stray reaction is harmless. + } +} + function verdictToEvent(verdict: ReviewResult["verdict"]): "APPROVE" | "REQUEST_CHANGES" | "COMMENT" { switch (verdict) { case "approve": diff --git a/infra/flue-review/.flue/workflows/review.ts b/infra/flue-review/.flue/workflows/review.ts index 8424a2b3b..b3f456795 100644 --- a/infra/flue-review/.flue/workflows/review.ts +++ b/infra/flue-review/.flue/workflows/review.ts @@ -18,7 +18,14 @@ import { cfSandboxToSessionEnv } from "@flue/runtime/cloudflare"; import { getSandbox, type Sandbox } from "@cloudflare/sandbox"; import { reviewResultSchema, type ReviewResult } from "../lib/review-schema.js"; -import { readAppCreds, mintInstallationToken, fetchPriorReview, postReview } from "../lib/github.js"; +import { + readAppCreds, + mintInstallationToken, + fetchPriorReview, + postReview, + addEyesReaction, + removeReaction, +} from "../lib/github.js"; // Bundled as a SkillReference by the Flue build. Holds the full investigation // protocol (git-only, ported from the ask-bonk auto-reviewer). import review from "../skills/review/SKILL.md" with { type: "skill" }; @@ -125,55 +132,65 @@ export async function run(ctx: FlueContext): Promise...HEAD` can resolve a merge - // base. emdash is public, so anonymous https is sufficient. - const cloneUrl = `https://github.com/${payload.owner}/${payload.repo}.git`; - const setup = [ - "set -euo pipefail", - "cd /workspace", - "git init -q", - `git remote add origin ${cloneUrl} 2>/dev/null || git remote set-url origin ${cloneUrl}`, - `git fetch -q --no-tags origin ${payload.baseRef}:refs/remotes/origin/${payload.baseRef}`, - `git fetch -q --no-tags origin pull/${payload.prNumber}/head:refs/remotes/origin/pr`, - "git checkout -q -f refs/remotes/origin/pr", - ].join("\n"); - - const setupResult = await session.shell(setup); - if (setupResult.exitCode !== 0) { - throw new Error( - `git setup failed (exit ${setupResult.exitCode}): ${setupResult.stderr || setupResult.stdout}`, - ); - } + try { + const harness = await init(reviewAgent); + const session = await harness.session(); + + // Set up the checkout inside the container: init in /workspace, fetch the + // base branch and the PR head, check out the PR head (detached). Full fetch + // (no shallow/depth) so `git diff origin/...HEAD` can resolve a merge + // base. emdash is public, so anonymous https is sufficient. + const cloneUrl = `https://github.com/${payload.owner}/${payload.repo}.git`; + const setup = [ + "set -euo pipefail", + "cd /workspace", + "git init -q", + `git remote add origin ${cloneUrl} 2>/dev/null || git remote set-url origin ${cloneUrl}`, + `git fetch -q --no-tags origin ${payload.baseRef}:refs/remotes/origin/${payload.baseRef}`, + `git fetch -q --no-tags origin pull/${payload.prNumber}/head:refs/remotes/origin/pr`, + "git checkout -q -f refs/remotes/origin/pr", + ].join("\n"); + + const setupResult = await session.shell(setup); + if (setupResult.exitCode !== 0) { + throw new Error( + `git setup failed (exit ${setupResult.exitCode}): ${setupResult.stderr || setupResult.stdout}`, + ); + } - const { data } = await session.skill(review, { - args: { - prContext: buildPrContext(payload, priorReview), - owner: payload.owner, - repo: payload.repo, - prNumber: payload.prNumber, - baseRef: payload.baseRef, - headRef: payload.headRef, - }, - result: reviewResultSchema, - }); - - // Post from this trusted DO context (durable, not bound by the webhook's - // 30s waitUntil budget). In dev (no creds) we just log and return. - if (token) { - await postReview(token, payload.owner, payload.repo, payload.prNumber, data); - } else { - ctx.log.info?.("[review] no GitHub App creds; skipping post", { prNumber: payload.prNumber }); - } + const { data } = await session.skill(review, { + args: { + prContext: buildPrContext(payload, priorReview), + owner: payload.owner, + repo: payload.repo, + prNumber: payload.prNumber, + baseRef: payload.baseRef, + headRef: payload.headRef, + }, + result: reviewResultSchema, + }); + + // Post from this trusted DO context (durable, not bound by the webhook's + // 30s waitUntil budget). In dev (no creds) we just log and return. + if (token) { + await postReview(token, payload.owner, payload.repo, payload.prNumber, data); + } else { + ctx.log.info?.("[review] no GitHub App creds; skipping post", { prNumber: payload.prNumber }); + } - return data; + return data; + } finally { + // Clear the in-progress marker whether the review posted or threw. + if (token && reactionId !== undefined) { + await removeReaction(token, payload.owner, payload.repo, payload.prNumber, reactionId); + } + } } From fba5b53b01fbbfa615fd0dcd1fc924f21a87c0fb Mon Sep 17 00:00:00 2001 From: "emdashbot[bot]" Date: Sat, 30 May 2026 13:19:30 +0000 Subject: [PATCH 5/8] style: format --- infra/flue-review/.flue/app.ts | 2 +- infra/flue-review/.flue/lib/github.ts | 42 +++++++++---------- infra/flue-review/.flue/lib/webhook.ts | 3 +- .../flue-review/.flue/skills/review/SKILL.md | 10 ++--- infra/flue-review/.flue/workflows/review.ts | 4 +- pnpm-workspace.yaml | 4 +- 6 files changed, 31 insertions(+), 34 deletions(-) diff --git a/infra/flue-review/.flue/app.ts b/infra/flue-review/.flue/app.ts index 5a0590004..9af9c9847 100644 --- a/infra/flue-review/.flue/app.ts +++ b/infra/flue-review/.flue/app.ts @@ -8,8 +8,8 @@ // durable workflow run, and returns. The review and the GitHub post happen // inside the workflow's Durable Object, which is not bound by that budget. -import { Hono } from "hono"; import { flue } from "@flue/runtime/app"; +import { Hono } from "hono"; import { verifyWebhookSignature, gatePullRequestEvent } from "./lib/webhook.js"; diff --git a/infra/flue-review/.flue/lib/github.ts b/infra/flue-review/.flue/lib/github.ts index cd57d76f9..5e5ec3e6c 100644 --- a/infra/flue-review/.flue/lib/github.ts +++ b/infra/flue-review/.flue/lib/github.ts @@ -74,18 +74,15 @@ async function signAppJwt(creds: GitHubAppCreds): Promise { /** Mint a short-lived installation access token. */ export async function mintInstallationToken(creds: GitHubAppCreds): Promise { const jwt = await signAppJwt(creds); - const res = await fetch( - `${GITHUB_API}/app/installations/${creds.installationId}/access_tokens`, - { - method: "POST", - headers: { - authorization: `Bearer ${jwt}`, - accept: "application/vnd.github+json", - "user-agent": USER_AGENT, - "x-github-api-version": "2022-11-28", - }, + const res = await fetch(`${GITHUB_API}/app/installations/${creds.installationId}/access_tokens`, { + method: "POST", + headers: { + authorization: `Bearer ${jwt}`, + accept: "application/vnd.github+json", + "user-agent": USER_AGENT, + "x-github-api-version": "2022-11-28", }, - ); + }); if (!res.ok) { throw new Error(`installation token mint failed: ${res.status} ${await res.text()}`); } @@ -175,24 +172,23 @@ export async function removeReaction( reactionId: number, ): Promise { try { - await fetch( - `${GITHUB_API}/repos/${owner}/${repo}/issues/${prNumber}/reactions/${reactionId}`, - { - method: "DELETE", - headers: { - authorization: `Bearer ${token}`, - accept: "application/vnd.github+json", - "user-agent": USER_AGENT, - "x-github-api-version": "2022-11-28", - }, + await fetch(`${GITHUB_API}/repos/${owner}/${repo}/issues/${prNumber}/reactions/${reactionId}`, { + method: "DELETE", + headers: { + authorization: `Bearer ${token}`, + accept: "application/vnd.github+json", + "user-agent": USER_AGENT, + "x-github-api-version": "2022-11-28", }, - ); + }); } catch { // Best-effort cleanup; leaving a stray reaction is harmless. } } -function verdictToEvent(verdict: ReviewResult["verdict"]): "APPROVE" | "REQUEST_CHANGES" | "COMMENT" { +function verdictToEvent( + verdict: ReviewResult["verdict"], +): "APPROVE" | "REQUEST_CHANGES" | "COMMENT" { switch (verdict) { case "approve": return "APPROVE"; diff --git a/infra/flue-review/.flue/lib/webhook.ts b/infra/flue-review/.flue/lib/webhook.ts index 52df4a423..6f2958453 100644 --- a/infra/flue-review/.flue/lib/webhook.ts +++ b/infra/flue-review/.flue/lib/webhook.ts @@ -20,7 +20,8 @@ export async function verifyWebhookSignature( ["sign"], ); const mac = await crypto.subtle.sign("HMAC", key, encoder.encode(rawBody)); - const expected = "sha256=" + [...new Uint8Array(mac)].map((b) => b.toString(16).padStart(2, "0")).join(""); + const expected = + "sha256=" + [...new Uint8Array(mac)].map((b) => b.toString(16).padStart(2, "0")).join(""); return timingSafeEqual(expected, signatureHeader); } diff --git a/infra/flue-review/.flue/skills/review/SKILL.md b/infra/flue-review/.flue/skills/review/SKILL.md index 0002838f5..6a59a5600 100644 --- a/infra/flue-review/.flue/skills/review/SKILL.md +++ b/infra/flue-review/.flue/skills/review/SKILL.md @@ -35,9 +35,9 @@ The PR title, description, and any linked issue are provided in your inputs (you Breadth first, depth second. The two most common ways to fail are to grade the implementation without ever asking whether the change should exist, and to latch onto the first interesting thread while the rest of the diff goes unread. Work in this order: -1. **Frame the change and judge the approach.** Read the PR description, the linked issue or discussion, and the diff. Before grading the code, ask whether it is the right code at all: is it solving a real problem, and the *right* problem (did the author misread the issue)? Is the approach sound, does it fit EmDash's architecture and conventions, is there a simpler or more idiomatic way, is it good taste? Most of these PRs come from external contributors who may have the wrong end of the stick or questionable instincts, and **a flawless implementation of the wrong thing is still the wrong thing**, that matters more than any line-level bug. (For a *feature*, AGENTS.md requires a prior approved Discussion; an unsolicited feature may simply be the wrong thing to merge regardless of code quality.) This is a quick orienting judgment, not a deep dive, but carry any approach-level concern through to the summary and let it shape the verdict. -2. **Enumerate candidates.** Read the full changed files. Then write out a numbered list of *candidate* problems, as many as you can generate, specific to what this code actually does. Use the categories below to jog each kind of bug, but tailor them to the code: if it builds SQL, ask about injection and dialect differences; if it loops over values, ask about null/undefined/empty/zero; if it caches, ask about key stability and invalidation. Cover **every changed hunk**. Aim wide, you will cull later, an unconfirmed candidate costs nothing at this stage. -3. **Verify each candidate against the code.** Go down your list. For each, read the relevant code in full and trace call sites or sibling implementations only as far as needed to confirm or kill it. **Self-correct**: if a candidate turns out fine on inspection, drop it, do not report hypotheses you couldn't confirm. When code *looks* correct, treat that as a claim to disprove against the actual runtime semantics documented in AGENTS.md, not a conclusion, "it uses the right pattern" is exactly where caching, serialization, and concurrency bugs hide. +1. **Frame the change and judge the approach.** Read the PR description, the linked issue or discussion, and the diff. Before grading the code, ask whether it is the right code at all: is it solving a real problem, and the _right_ problem (did the author misread the issue)? Is the approach sound, does it fit EmDash's architecture and conventions, is there a simpler or more idiomatic way, is it good taste? Most of these PRs come from external contributors who may have the wrong end of the stick or questionable instincts, and **a flawless implementation of the wrong thing is still the wrong thing**, that matters more than any line-level bug. (For a _feature_, AGENTS.md requires a prior approved Discussion; an unsolicited feature may simply be the wrong thing to merge regardless of code quality.) This is a quick orienting judgment, not a deep dive, but carry any approach-level concern through to the summary and let it shape the verdict. +2. **Enumerate candidates.** Read the full changed files. Then write out a numbered list of _candidate_ problems, as many as you can generate, specific to what this code actually does. Use the categories below to jog each kind of bug, but tailor them to the code: if it builds SQL, ask about injection and dialect differences; if it loops over values, ask about null/undefined/empty/zero; if it caches, ask about key stability and invalidation. Cover **every changed hunk**. Aim wide, you will cull later, an unconfirmed candidate costs nothing at this stage. +3. **Verify each candidate against the code.** Go down your list. For each, read the relevant code in full and trace call sites or sibling implementations only as far as needed to confirm or kill it. **Self-correct**: if a candidate turns out fine on inspection, drop it, do not report hypotheses you couldn't confirm. When code _looks_ correct, treat that as a claim to disprove against the actual runtime semantics documented in AGENTS.md, not a conclusion, "it uses the right pattern" is exactly where caching, serialization, and concurrency bugs hide. 4. **Then go deep on systemic issues.** After the per-hunk sweep, step back and trace the cross-cutting concerns a line-by-line pass misses: does the change behave differently on the production runtime than in the test setup; does a cache or invalidation cover every write path; does a new query against a content table miss a `locale` filter; is a sibling implementation now inconsistent with the changed one. 5. **Prioritize.** Cull the survivors into findings with calibrated severity and choose a verdict. Coverage is the goal, not a tidy write-up, don't conclude until every changed hunk has been considered. @@ -46,7 +46,7 @@ Breadth first, depth second. The two most common ways to fail are to grade the i - **Logic**: off-by-one, inverted or missing conditions (a stray `!`), wrong operator, fallthrough, coercion. - **Edge cases**: empty / null / undefined / 0 / NaN, single-element, max/min/negative, unicode/RTL, called twice vs zero times. - **Error handling**: swallowed errors, a missing `await`, over-broad catch, missing cleanup, internals leaked to clients. -- **State / concurrency / caching**: shared mutable state, stale closures, TOCTOU, cache key stability and lifetime, invalidation on *every* write path. +- **State / concurrency / caching**: shared mutable state, stale closures, TOCTOU, cache key stability and lifetime, invalidation on _every_ write path. - **Security**: unsanitized input reaching SQL/HTML/shell/paths, missing or wrong authorization, secret/info leakage, open redirect, path traversal. - **Data integrity**: validation at boundaries, partial writes without transactions, cascading deletes that orphan rows, schema/code mismatch, a missing `locale` filter on a content-table query. - **Resources**: leaked handles/timers/listeners, unbounded growth, missing timeouts, retry without backoff. @@ -62,7 +62,7 @@ Calibrate. Don't tag things `needs_fixing` to look thorough, and don't downgrade - `verdict: approve` — you'd sign off. The LGTM case; usually no findings or only `suggestion`s. - `verdict: comment` — **the default whenever you found things, including several `needs_fixing` ones.** Your findings are advice; the maintainer decides what blocks the merge button, not you. A stack of `needs_fixing` findings, a missing changeset, a missing test, a silent-drop bug, a doc nit, those are all `comment`. **The number and severity of findings do not, by themselves, escalate the verdict.** -- `verdict: request_changes` — **rare.** Reserve it for when merging *as-is* would cause concrete harm the maintainer must not miss: a security vulnerability, a data-loss bug, a build or test break this PR introduces, a backwards-incompatibility violating the post-pre-release stability rule, or a fundamentally wrong/unwanted approach. This is about a specific kind of harm, not a finding count. If you're torn between `comment` and `request_changes`, it's `comment`. +- `verdict: request_changes` — **rare.** Reserve it for when merging _as-is_ would cause concrete harm the maintainer must not miss: a security vulnerability, a data-loss bug, a build or test break this PR introduces, a backwards-incompatibility violating the post-pre-release stability rule, or a fundamentally wrong/unwanted approach. This is about a specific kind of harm, not a finding count. If you're torn between `comment` and `request_changes`, it's `comment`. ## Output diff --git a/infra/flue-review/.flue/workflows/review.ts b/infra/flue-review/.flue/workflows/review.ts index b3f456795..6a7dc1308 100644 --- a/infra/flue-review/.flue/workflows/review.ts +++ b/infra/flue-review/.flue/workflows/review.ts @@ -13,11 +13,10 @@ // container via the egress proxy, so the token never enters model-reachable // space. +import { getSandbox, type Sandbox } from "@cloudflare/sandbox"; import { createAgent, type FlueContext, type WorkflowRouteHandler } from "@flue/runtime"; import { cfSandboxToSessionEnv } from "@flue/runtime/cloudflare"; -import { getSandbox, type Sandbox } from "@cloudflare/sandbox"; -import { reviewResultSchema, type ReviewResult } from "../lib/review-schema.js"; import { readAppCreds, mintInstallationToken, @@ -26,6 +25,7 @@ import { addEyesReaction, removeReaction, } from "../lib/github.js"; +import { reviewResultSchema, type ReviewResult } from "../lib/review-schema.js"; // Bundled as a SkillReference by the Flue build. Holds the full investigation // protocol (git-only, ported from the ask-bonk auto-reviewer). import review from "../skills/review/SKILL.md" with { type: "skill" }; diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7cd12a05d..301d802b6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -30,8 +30,8 @@ allowBuilds: workerd: true # Transitive @flue/runtime deps. The reviewer ran end-to-end with these # build scripts ignored, so none are needed at runtime. - '@google/genai': false - '@mongodb-js/zstd': false + "@google/genai": false + "@mongodb-js/zstd": false node-liblzma: false protobufjs: false # Reviewed benign trust downgrades (publish-method changes, not takeovers). From 9ef93f9d11d6c558ce6d547fece9f4bf8466ad56 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 30 May 2026 15:02:40 +0100 Subject: [PATCH 6/8] fix(review): address self-review findings; stop auto-running on synchronize Acting on the reviewer's own review of #1233: - Don't auto-review on `synchronize` (every push). Auto-fire is opened / reopened / ready_for_review; re-review is the explicit bot:review label. This also fixes the open+synchronize double-run. - Tighten the git-ref regex to reject a leading "-" per segment (the documented contract), so a ref can't be read as a CLI option when interpolated into git. - Wrap postReview in try/catch: a transient GitHub failure no longer discards the completed review or triggers Flue's at-least-once workflow restart. - Use crypto.subtle.timingSafeEqual over raw MAC bytes instead of a hand-rolled string loop for webhook signature comparison. - Apply the bot-author guard before the manual-label path so labeling a bot-authored PR can't start a self-review loop. - Drop unused/stale wrangler vars (GITHUB_OWNER_LOGIN, GITHUB_REPO). Kept the wrangler `secrets.required` block: the reviewer flagged it as invalid, but it's a real wrangler feature (it blocked deploy until secrets were set). --- infra/flue-review/.flue/lib/webhook.ts | 45 ++++++++++++--------- infra/flue-review/.flue/workflows/review.ts | 18 +++++++-- infra/flue-review/wrangler.jsonc | 3 +- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/infra/flue-review/.flue/lib/webhook.ts b/infra/flue-review/.flue/lib/webhook.ts index 6f2958453..394b3f665 100644 --- a/infra/flue-review/.flue/lib/webhook.ts +++ b/infra/flue-review/.flue/lib/webhook.ts @@ -19,17 +19,19 @@ export async function verifyWebhookSignature( false, ["sign"], ); - const mac = await crypto.subtle.sign("HMAC", key, encoder.encode(rawBody)); - const expected = - "sha256=" + [...new Uint8Array(mac)].map((b) => b.toString(16).padStart(2, "0")).join(""); - return timingSafeEqual(expected, signatureHeader); + const provided = hexToBytes(signatureHeader.slice("sha256=".length)); + if (!provided) return false; + const mac = new Uint8Array(await crypto.subtle.sign("HMAC", key, encoder.encode(rawBody))); + if (provided.length !== mac.length) return false; + // Workers' built-in constant-time comparison over the raw MAC bytes. + return crypto.subtle.timingSafeEqual(provided, mac); } -function timingSafeEqual(a: string, b: string): boolean { - if (a.length !== b.length) return false; - let diff = 0; - for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i); - return diff === 0; +function hexToBytes(hex: string): Uint8Array | null { + if (hex.length === 0 || hex.length % 2 !== 0 || /[^0-9a-fA-F]/.test(hex)) return null; + const out = new Uint8Array(hex.length / 2); + for (let i = 0; i < out.length; i++) out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16); + return out; } export interface GatedPr { @@ -44,9 +46,11 @@ export interface GatedPr { export type GateDecision = { review: true; pr: GatedPr } | { review: false; reason: string }; -// Actions that warrant a (re-)review. `synchronize` = new commits pushed. -const REVIEWABLE_ACTIONS = new Set(["opened", "reopened", "ready_for_review", "synchronize"]); -// Manual trigger: applying this label to a PR. +// Actions that warrant an auto-review. Deliberately NOT `synchronize`: we don't +// re-review on every pushed commit (noisy and costly). Re-review after changes +// is an explicit action via the bot:review label below. +const REVIEWABLE_ACTIONS = new Set(["opened", "reopened", "ready_for_review"]); +// Manual trigger (re-review): applying this label to a PR. const MANUAL_LABEL = "bot:review"; interface PullRequestEvent { @@ -70,23 +74,26 @@ interface PullRequestEvent { * account to avoid self-review loops. */ export function gatePullRequestEvent(event: PullRequestEvent): GateDecision { + const pr = event.pull_request; + if (!pr) return { review: false, reason: "no pull_request in payload" }; + + // Bot-author guard applies to BOTH auto and manual triggers, so labeling a + // bot-authored PR (or emdashbot's own PR) can't kick off a self-review loop. + const author = pr.user?.login ?? ""; + if (author.endsWith("[bot]")) { + return { review: false, reason: `author "${author}" is a bot` }; + } + const action = event.action ?? ""; const isManual = action === "labeled" && event.label?.name === MANUAL_LABEL; if (!isManual && !REVIEWABLE_ACTIONS.has(action)) { return { review: false, reason: `action "${action}" is not reviewable` }; } - const pr = event.pull_request; - if (!pr) return { review: false, reason: "no pull_request in payload" }; if (pr.draft && action !== "ready_for_review" && !isManual) { return { review: false, reason: "PR is a draft" }; } - const author = pr.user?.login ?? ""; - if (author.endsWith("[bot]")) { - return { review: false, reason: `author "${author}" is a bot` }; - } - const owner = event.repository?.owner?.login; const repo = event.repository?.name; const prNumber = pr.number; diff --git a/infra/flue-review/.flue/workflows/review.ts b/infra/flue-review/.flue/workflows/review.ts index 6a7dc1308..f921587b8 100644 --- a/infra/flue-review/.flue/workflows/review.ts +++ b/infra/flue-review/.flue/workflows/review.ts @@ -77,8 +77,10 @@ export const route: WorkflowRouteHandler = async (_c, next) => next(); // GitHub login / repo-name charset. const NAME = /^[A-Za-z0-9._-]+$/; -// Git ref: segments of safe chars joined by "/". No leading "-", no "..". -const REF = /^[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/; +// Git ref: "/"-joined segments; each segment must not start with "-" (so the +// value can't be read as a CLI option when interpolated into git). The caller +// also rejects "..". +const REF = /^[A-Za-z0-9._][A-Za-z0-9._-]*(?:\/[A-Za-z0-9._][A-Za-z0-9._-]*)*$/; function assertSafe(payload: ReviewPayload): void { if (!Number.isInteger(payload.prNumber) || payload.prNumber <= 0) { @@ -181,7 +183,17 @@ export async function run(ctx: FlueContext): Promise Date: Sat, 30 May 2026 19:37:07 +0100 Subject: [PATCH 7/8] fix(review): satisfy oxlint --type-aware --deny-warnings - Hoist regexes to module scope (prefer-static-regex). - Use Response.json() generic instead of unsafe `as` assertions; annotate the parsed webhook event instead of asserting. - toSorted instead of sort; drop a redundant template literal. - One justified disable for the Sandbox DO cast (wrangler types it as ; Flue re-exports the real class at build). --- infra/flue-review/.flue/app.ts | 4 +-- infra/flue-review/.flue/lib/github.ts | 36 ++++++++++++--------- infra/flue-review/.flue/lib/webhook.ts | 3 +- infra/flue-review/.flue/workflows/review.ts | 3 ++ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/infra/flue-review/.flue/app.ts b/infra/flue-review/.flue/app.ts index 9af9c9847..dfc519c63 100644 --- a/infra/flue-review/.flue/app.ts +++ b/infra/flue-review/.flue/app.ts @@ -28,14 +28,14 @@ app.post("/webhook/github", async (c) => { if (eventType === "ping") return c.text("pong", 200); if (eventType !== "pull_request") return c.text(`ignored event: ${eventType}`, 202); - let event: unknown; + let event: Parameters[0]; try { event = JSON.parse(raw); } catch { return c.text("invalid JSON", 400); } - const decision = gatePullRequestEvent(event as Parameters[0]); + const decision = gatePullRequestEvent(event); if (!decision.review) return c.text(`skipped: ${decision.reason}`, 202); // Admit the durable workflow run (fast). The review + post run in the diff --git a/infra/flue-review/.flue/lib/github.ts b/infra/flue-review/.flue/lib/github.ts index 5e5ec3e6c..c450ca372 100644 --- a/infra/flue-review/.flue/lib/github.ts +++ b/infra/flue-review/.flue/lib/github.ts @@ -29,10 +29,17 @@ export function readAppCreds(env: Env): GitHubAppCreds | null { return { appId, privateKeyPem, installationId }; } +const BASE64_PLUS = /\+/g; +const BASE64_SLASH = /\//g; +const BASE64_PADDING = /=+$/; +const PEM_BEGIN = /-----BEGIN [^-]+-----/g; +const PEM_END = /-----END [^-]+-----/g; +const PEM_WHITESPACE = /\s+/g; + function base64UrlFromBytes(bytes: Uint8Array): string { let binary = ""; for (const b of bytes) binary += String.fromCharCode(b); - return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); + return btoa(binary).replace(BASE64_PLUS, "-").replace(BASE64_SLASH, "_").replace(BASE64_PADDING, ""); } function base64UrlFromString(input: string): string { @@ -40,10 +47,7 @@ function base64UrlFromString(input: string): string { } function pemToPkcs8(pem: string): ArrayBuffer { - const body = pem - .replace(/-----BEGIN [^-]+-----/g, "") - .replace(/-----END [^-]+-----/g, "") - .replace(/\s+/g, ""); + const body = pem.replace(PEM_BEGIN, "").replace(PEM_END, "").replace(PEM_WHITESPACE, ""); const binary = atob(body); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); @@ -86,7 +90,7 @@ export async function mintInstallationToken(creds: GitHubAppCreds): Promise(); if (!json.token) throw new Error("installation token response had no token"); return json.token; } @@ -115,15 +119,17 @@ export async function fetchPriorReview( }, ); if (!res.ok) return undefined; - const reviews = (await res.json()) as Array<{ - user?: { login?: string }; - body?: string; - state?: string; - submitted_at?: string; - }>; + const reviews = await res.json< + Array<{ + user?: { login?: string }; + body?: string; + state?: string; + submitted_at?: string; + }> + >(); const ours = reviews .filter((r) => r.user?.login === "emdashbot[bot]" && r.body) - .sort((a, b) => (a.submitted_at ?? "").localeCompare(b.submitted_at ?? "")); + .toSorted((a, b) => (a.submitted_at ?? "").localeCompare(b.submitted_at ?? "")); const latest = ours.at(-1); if (!latest) return undefined; return `Your previous review (state: ${latest.state ?? "unknown"}):\n\n${latest.body}`; @@ -156,7 +162,7 @@ export async function addEyesReaction( body: JSON.stringify({ content: "eyes" }), }); if (!res.ok) return undefined; - const json = (await res.json()) as { id?: number }; + const json = await res.json<{ id?: number }>(); return json.id; } catch { return undefined; @@ -247,7 +253,7 @@ export async function postReview( // Most likely cause: a comment line isn't part of the diff. Fall back to a // body-only review so the summary is never lost. const firstError = await res.text(); - const bodyOnly = { body: `${result.summary}`, event }; + const bodyOnly = { body: result.summary, event }; res = await fetch(url, { method: "POST", headers, body: JSON.stringify(bodyOnly) }); if (!res.ok) { throw new Error( diff --git a/infra/flue-review/.flue/lib/webhook.ts b/infra/flue-review/.flue/lib/webhook.ts index 394b3f665..3f750513f 100644 --- a/infra/flue-review/.flue/lib/webhook.ts +++ b/infra/flue-review/.flue/lib/webhook.ts @@ -1,6 +1,7 @@ // GitHub webhook signature verification and pull_request event gating. const encoder = new TextEncoder(); +const NON_HEX = /[^0-9a-fA-F]/; /** * Verify the `X-Hub-Signature-256` header against the raw request body using @@ -28,7 +29,7 @@ export async function verifyWebhookSignature( } function hexToBytes(hex: string): Uint8Array | null { - if (hex.length === 0 || hex.length % 2 !== 0 || /[^0-9a-fA-F]/.test(hex)) return null; + if (hex.length === 0 || hex.length % 2 !== 0 || NON_HEX.test(hex)) return null; const out = new Uint8Array(hex.length / 2); for (let i = 0; i < out.length; i++) out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16); return out; diff --git a/infra/flue-review/.flue/workflows/review.ts b/infra/flue-review/.flue/workflows/review.ts index f921587b8..f2e4088cf 100644 --- a/infra/flue-review/.flue/workflows/review.ts +++ b/infra/flue-review/.flue/workflows/review.ts @@ -58,6 +58,9 @@ const reviewAgent = createAgent(({ env }) => ({ sandbox: { createSessionEnv: ({ id: sessionId, cwd: sessionCwd }) => cfSandboxToSessionEnv( + // wrangler types the auto-wired DO as DurableObjectNamespace; + // Flue re-exports the real Sandbox class into the bundle at build. + // oxlint-disable-next-line typescript/no-unsafe-type-assertion getSandbox(env.Sandbox as DurableObjectNamespace, sessionId), sessionCwd ?? "/workspace", ), From f301aaca395d4785b5bce35ddab5f058c3df1e96 Mon Sep 17 00:00:00 2001 From: "emdashbot[bot]" Date: Sat, 30 May 2026 18:37:48 +0000 Subject: [PATCH 8/8] style: format --- infra/flue-review/.flue/lib/github.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/infra/flue-review/.flue/lib/github.ts b/infra/flue-review/.flue/lib/github.ts index c450ca372..db9e404e8 100644 --- a/infra/flue-review/.flue/lib/github.ts +++ b/infra/flue-review/.flue/lib/github.ts @@ -39,7 +39,10 @@ const PEM_WHITESPACE = /\s+/g; function base64UrlFromBytes(bytes: Uint8Array): string { let binary = ""; for (const b of bytes) binary += String.fromCharCode(b); - return btoa(binary).replace(BASE64_PLUS, "-").replace(BASE64_SLASH, "_").replace(BASE64_PADDING, ""); + return btoa(binary) + .replace(BASE64_PLUS, "-") + .replace(BASE64_SLASH, "_") + .replace(BASE64_PADDING, ""); } function base64UrlFromString(input: string): string {