From c54636c2940eab26b1437b7c65045af7dfee2501 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Mon, 8 Jun 2026 11:18:21 -0400 Subject: [PATCH 1/3] Upgrade flue to 0.8.0 and lock down agent token access (#16845) * Upgrade flue from 0.3.10 to 0.7.0 * Upgrade flue to 0.8.0 and migrate to agent/workflow split - Bump @flue/cli and @flue/runtime from 0.7.0 to 0.8.0 - Move issue-triage and fix-verification from agents/ to workflows/ - Convert all workflows to createAgent() + run() pattern per 0.8.0 API - Update GitHub Actions to use workflow file paths instead of agent names - Update knip entry patterns for new directory layout * Security: scope GITHUB_TOKEN to read-only, move writes to orchestrator - Scope GITHUB_TOKEN to read-only (contents: read) in issue-triage, fix-verification, and merge-fix workflow permissions - Add gitPush()/gitDeleteBranch() helpers that run outside the sandbox using FREDKBOT_GITHUB_TOKEN via child_process.exec - Replace session.shell('git push') with orchestrator gitPush() in issue-triage, merge-resolve, and merge-fix workflows - Stop passing FREDKBOT_GITHUB_TOKEN into sandbox env in merge-resolve and merge-fix (now use read-only GITHUB_TOKEN_BASE) - Split merge-fix/github.ts headers into readHeaders()/writeHeaders() so reads use the base token and only postPRComment uses privileged * Fix flue 0.8.0 CLI flags and workflow discovery in CI workflows * fix: resolve @tailwindcss/vite peer dep against Vite 7 in example --- .flue/agents/merge-resolve.ts | 2 - .flue/lib/github.ts | 23 + .../{agents => workflows}/fix-verification.ts | 33 +- .flue/{agents => workflows}/issue-triage.ts | 96 +- .flue/workflows/merge-fix.ts | 1 + .flue/workflows/merge-fix/WORKFLOW.ts | 50 +- .flue/workflows/merge-fix/github.ts | 26 +- .flue/workflows/merge-resolve.ts | 1 + .flue/workflows/merge-resolve/WORKFLOW.ts | 55 +- .github/workflows/fix-verification.yml | 5 +- .github/workflows/issue-triage.yml | 3 +- .github/workflows/merge-fix.yml | 11 +- .github/workflows/merge-main-to-next.yml | 3 +- examples/with-tailwindcss/package.json | 3 +- knip.js | 2 +- package.json | 4 +- pnpm-lock.yaml | 2297 +++++++---------- 17 files changed, 1121 insertions(+), 1494 deletions(-) delete mode 100644 .flue/agents/merge-resolve.ts rename .flue/{agents => workflows}/fix-verification.ts (85%) rename .flue/{agents => workflows}/issue-triage.ts (80%) create mode 100644 .flue/workflows/merge-fix.ts create mode 100644 .flue/workflows/merge-resolve.ts diff --git a/.flue/agents/merge-resolve.ts b/.flue/agents/merge-resolve.ts deleted file mode 100644 index 2bdb606ef403..000000000000 --- a/.flue/agents/merge-resolve.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { args, triggers } from '../workflows/merge-resolve/WORKFLOW.ts'; -export { default } from '../workflows/merge-resolve/WORKFLOW.ts'; diff --git a/.flue/lib/github.ts b/.flue/lib/github.ts index da9ddb42bf9b..0d53568ed10d 100644 --- a/.flue/lib/github.ts +++ b/.flue/lib/github.ts @@ -1,5 +1,9 @@ +import { exec as execCb } from 'node:child_process'; +import { promisify } from 'node:util'; import * as v from 'valibot'; +const execAsync = promisify(execCb); + const REPO = process.env.GITHUB_REPOSITORY || 'withastro/astro'; export const GITHUB_TOKEN_BASE = process.env.GITHUB_TOKEN; @@ -207,3 +211,22 @@ export async function removeGitHubLabel(issueNumber: number, label: string): Pro throw new Error(`Failed to remove label (HTTP ${res.status}): ${await res.text()}`); } } + +/** + * Push a branch to origin using the privileged token. Runs outside the sandbox + * so the agent never sees the write-capable token. + */ +export async function gitPush( + branch: string, + options?: { force?: boolean }, +): Promise<{ exitCode: number; stdout: string; stderr: string }> { + assert(GITHUB_TOKEN_PRIVILEGED, 'FREDKBOT_GITHUB_TOKEN token is required.'); + const forceFlag = options?.force ? ' -f' : ''; + const remoteUrl = `https://x-access-token:${GITHUB_TOKEN_PRIVILEGED}@github.com/${REPO}.git`; + try { + const { stdout, stderr } = await execAsync(`git push${forceFlag} ${remoteUrl} ${branch}`); + return { exitCode: 0, stdout, stderr }; + } catch (err: any) { + return { exitCode: err.code ?? 1, stdout: err.stdout ?? '', stderr: err.stderr ?? '' }; + } +} diff --git a/.flue/agents/fix-verification.ts b/.flue/workflows/fix-verification.ts similarity index 85% rename from .flue/agents/fix-verification.ts rename to .flue/workflows/fix-verification.ts index 8436e6e59f0b..09bb58e6beee 100644 --- a/.flue/agents/fix-verification.ts +++ b/.flue/workflows/fix-verification.ts @@ -1,5 +1,5 @@ -import type { FlueContext } from '@flue/sdk/client'; -import { defineCommand } from '@flue/sdk/node'; +import { createAgent, type FlueContext } from '@flue/runtime'; +import { local } from '@flue/runtime/node'; import * as v from 'valibot'; import { GITHUB_TOKEN_BASE, @@ -11,23 +11,21 @@ import { removeGitHubLabel, } from '../lib/github.ts'; -// CLI-only agent: no HTTP trigger. Invoked from GitHub Actions via `flue run fix-verification`. -export const triggers = {}; - -const gh = defineCommand('gh', { env: { GH_TOKEN: GITHUB_TOKEN_BASE } }); -const git = defineCommand('git'); -const node = defineCommand('node'); -const pnpm = defineCommand('pnpm'); +const agent = createAgent(() => ({ + sandbox: local({ + env: { + GH_TOKEN: GITHUB_TOKEN_BASE, + }, + }), + model: 'anthropic/claude-sonnet-4-20250514', +})); -export default async function ({ init, payload }: FlueContext) { +export async function run({ init, payload }: FlueContext) { const issueNumber = payload.issueNumber as number; const branch = `flue/fix-${issueNumber}`; - const agent = await init({ - sandbox: 'local', - model: 'anthropic/claude-sonnet-4-20250514', - }); - const session = await agent.session(); + const harness = await init(agent); + const session = await harness.session(); const issueDetails = await fetchIssueDetails(issueNumber); @@ -42,7 +40,7 @@ export default async function ({ init, payload }: FlueContext) { } // Ask the LLM whether this comment confirms the fix works. - const classification = await session.prompt( + const { data: classification } = await session.prompt( `You are reviewing a GitHub issue comment to determine if the commenter is confirming that a proposed fix works. ## Context @@ -119,7 +117,7 @@ Return your classification.`, } // Use the astro-pr-writer skill to generate a good PR title and body. - const prContent = await session.skill('astro-pr-writer/SKILL.md', { + const { data: prContent } = await session.skill('astro-pr-writer/SKILL.md', { args: { issueNumber, issueDetails, @@ -131,7 +129,6 @@ Generate a PR title and body following the astro-pr-writer conventions. The PR should reference the issue with "Closes #${issueNumber}". Do NOT create the PR yourself — just return the title and body content.`, }, - commands: [gh, git, node, pnpm], result: v.object({ title: v.pipe( v.string(), diff --git a/.flue/agents/issue-triage.ts b/.flue/workflows/issue-triage.ts similarity index 80% rename from .flue/agents/issue-triage.ts rename to .flue/workflows/issue-triage.ts index b263668f9cd3..84dc25dc97ab 100644 --- a/.flue/agents/issue-triage.ts +++ b/.flue/workflows/issue-triage.ts @@ -1,5 +1,5 @@ -import type { FlueContext, FlueSession } from '@flue/sdk/client'; -import { defineCommand } from '@flue/sdk/node'; +import { createAgent, type FlueContext, type FlueSession } from '@flue/runtime'; +import { local } from '@flue/runtime/node'; import * as v from 'valibot'; import { GITHUB_TOKEN_BASE, @@ -8,44 +8,37 @@ import { addGitHubLabels, fetchIssueDetails, fetchRepoLabels, + gitPush, postGitHubComment, removeGitHubLabel, } from '../lib/github.ts'; -// CLI-only agent: no HTTP trigger. Invoked from GitHub Actions via `flue run issue-triage`. -export const triggers = {}; - -// Define commands that are allowed as pass-through to the local GH Actions container. -const bgproc = defineCommand('bgproc'); -const agentBrowser = defineCommand('agent-browser'); -const node = defineCommand('node'); -const npx = defineCommand('npx'); -const pnpm = defineCommand('pnpm'); -// pnpm variant with GitHub Actions env vars forwarded. pkg-pr-new checks these -// to verify it's running inside CI before publishing preview releases. -const pnpmCI = defineCommand('pnpm', { - env: { - GITHUB_ACTIONS: process.env.GITHUB_ACTIONS, - GITHUB_REPOSITORY: process.env.GITHUB_REPOSITORY, - GITHUB_RUN_ID: process.env.GITHUB_RUN_ID, - GITHUB_RUN_ATTEMPT: process.env.GITHUB_RUN_ATTEMPT, - GITHUB_ACTOR_ID: process.env.GITHUB_ACTOR_ID, - GITHUB_SHA: process.env.GITHUB_SHA, - GITHUB_REF_NAME: process.env.GITHUB_REF_NAME, - GITHUB_OUTPUT: process.env.GITHUB_OUTPUT, - GITHUB_EVENT_PATH: process.env.GITHUB_EVENT_PATH, - }, -}); -const gh = defineCommand('gh', { env: { GH_TOKEN: GITHUB_TOKEN_BASE } }); -const git = defineCommand('git'); -const gitWithAuth = defineCommand('git', { env: { GH_TOKEN: GITHUB_TOKEN_BASE } }); +const agent = createAgent(() => ({ + sandbox: local({ + env: { + // Git/GitHub auth + GH_TOKEN: GITHUB_TOKEN_BASE, + // GitHub Actions env vars needed by pkg-pr-new for preview releases + GITHUB_ACTIONS: process.env.GITHUB_ACTIONS, + GITHUB_REPOSITORY: process.env.GITHUB_REPOSITORY, + GITHUB_RUN_ID: process.env.GITHUB_RUN_ID, + GITHUB_RUN_ATTEMPT: process.env.GITHUB_RUN_ATTEMPT, + GITHUB_ACTOR_ID: process.env.GITHUB_ACTOR_ID, + GITHUB_SHA: process.env.GITHUB_SHA, + GITHUB_REF_NAME: process.env.GITHUB_REF_NAME, + GITHUB_OUTPUT: process.env.GITHUB_OUTPUT, + GITHUB_EVENT_PATH: process.env.GITHUB_EVENT_PATH, + }, + }), + model: 'anthropic/claude-opus-4-6', +})); function assert(condition: unknown, message: string): asserts condition { if (!condition) throw new Error(message); } async function shouldRetriage(session: FlueSession, issue: IssueDetails): Promise<'yes' | 'no'> { - return session.prompt( + const { data } = await session.prompt( `You are reviewing a GitHub issue conversation to decide whether a triage re-run is warranted. ## Issue @@ -74,6 +67,7 @@ meaningful reproduction information, respond with "no". Return only "yes" or "no" inside the ---RESULT_START--- / ---RESULT_END--- block.`, { result: v.picklist(['yes', 'no']) }, ); + return data; } async function selectTriageLabels( @@ -87,7 +81,7 @@ async function selectTriageLabels( const priorityLabelNames = priorityLabels.map((l) => l.name); const packageLabelNames = packageLabels.map((l) => l.name); - const labelResult = await session.prompt( + const { data: labelResult } = await session.prompt( `Label the following GitHub issue based on the triage report that was already posted. Select labels for this issue from the lists below based on the triage report. Select exactly one priority label (the report's **Priority** section is a strong hint) and 0-3 package labels based on where the issue lives in the monorepo and how it manifests. @@ -132,7 +126,7 @@ interface PreviewRelease { async function publishPreviewRelease(session: FlueSession): Promise { // Determine which package directories were modified relative to main. - const diffResult = await session.shell('git diff main --name-only', { commands: [git] }); + const diffResult = await session.shell('git diff main --name-only'); if (!diffResult.stdout.trim()) return null; const changedFiles = diffResult.stdout.trim().split('\n'); @@ -149,7 +143,6 @@ async function publishPreviewRelease(session: FlueSession): Promise { - const reproduceResult = await session.skill('triage/reproduce.md', { + const { data: reproduceResult } = await session.skill('triage/reproduce.md', { args: { issueNumber, issueDetails }, - commands: [gh, bgproc, agentBrowser, git, node, npx, pnpm], result: v.object({ reproducible: v.pipe( v.boolean(), @@ -215,9 +206,8 @@ async function runTriagePipeline( }; } - const diagnoseResult = await session.skill('triage/diagnose.md', { + const { data: diagnoseResult } = await session.skill('triage/diagnose.md', { args: { issueDetails }, - commands: [gh, bgproc, agentBrowser, git, node, npx, pnpm], result: v.object({ confidence: v.pipe( v.nullable(v.picklist(['high', 'medium', 'low'])), @@ -225,9 +215,8 @@ async function runTriagePipeline( ), }), }); - const verifyResult = await session.skill('triage/verify.md', { + const { data: verifyResult } = await session.skill('triage/verify.md', { args: { issueDetails }, - commands: [gh, bgproc, agentBrowser, git, node, npx, pnpm], result: v.object({ verdict: v.pipe( v.picklist(['bug', 'intended-behavior', 'unclear']), @@ -252,9 +241,8 @@ async function runTriagePipeline( }; } - const fixResult = await session.skill('triage/fix.md', { + const { data: fixResult } = await session.skill('triage/fix.md', { args: { issueDetails }, - commands: [gh, bgproc, agentBrowser, git, node, npx, pnpm], result: v.object({ fixed: v.pipe( v.boolean(), @@ -279,16 +267,12 @@ async function runTriagePipeline( }; } -export default async function ({ init, payload }: FlueContext) { +export async function run({ init, payload }: FlueContext) { const issueNumber = payload.issueNumber as number; const branch = `flue/fix-${issueNumber}`; - // Initialize the agent and session. - const agent = await init({ - sandbox: 'local', - model: 'anthropic/claude-opus-4-6', - }); - const session = await agent.session(); + const harness = await init(agent); + const session = await harness.session(); const issueDetails = await fetchIssueDetails(issueNumber); @@ -312,22 +296,19 @@ export default async function ({ init, payload }: FlueContext) { // - create a PR from that branch entirely in the GH UI // - ignore it completely { - const diff = await session.shell('git diff main --stat', { commands: [git] }); + const diff = await session.shell('git diff main --stat'); if (diff.stdout.trim()) { - const status = await session.shell('git status --porcelain', { commands: [git] }); + const status = await session.shell('git status --porcelain'); if (status.stdout.trim()) { - await session.shell('git add -A', { commands: [git] }); + await session.shell('git add -A'); const defaultMessage = triageResult.fixed ? 'fix(auto-triage): automated fix' : 'test(auto-triage): failing test and investigation notes'; await session.shell( `git commit -m ${JSON.stringify(triageResult.commitMessage ?? defaultMessage)}`, - { commands: [git] }, ); } - const pushResult = await session.shell(`git push -f origin ${branch}`, { - commands: [gitWithAuth], - }); + const pushResult = await gitPush(branch, { force: true }); console.info('push result:', pushResult); isPushed = pushResult.exitCode === 0; } @@ -353,9 +334,8 @@ export default async function ({ init, payload }: FlueContext) { assert(packageLabels.length > 0, 'no package labels found'); const branchName = isPushed ? branch : null; - const comment = await session.skill('triage/comment.md', { + const { data: comment } = await session.skill('triage/comment.md', { args: { branchName, priorityLabels, issueDetails, previewRelease }, - commands: [gh, git, node, npx, pnpm], result: v.pipe( v.string(), v.description( diff --git a/.flue/workflows/merge-fix.ts b/.flue/workflows/merge-fix.ts new file mode 100644 index 000000000000..d8c81e6759b1 --- /dev/null +++ b/.flue/workflows/merge-fix.ts @@ -0,0 +1 @@ +export { args, run } from './merge-fix/WORKFLOW.ts'; diff --git a/.flue/workflows/merge-fix/WORKFLOW.ts b/.flue/workflows/merge-fix/WORKFLOW.ts index 2207485885d5..db61a673e655 100644 --- a/.flue/workflows/merge-fix/WORKFLOW.ts +++ b/.flue/workflows/merge-fix/WORKFLOW.ts @@ -1,31 +1,30 @@ -import type { FlueContext } from '@flue/sdk/client'; -import { defineCommand } from '@flue/sdk/node'; +import { createAgent, type FlueContext } from '@flue/runtime'; +import { local } from '@flue/runtime/node'; import * as v from 'valibot'; +import { GITHUB_TOKEN_BASE, gitPush } from '../../lib/github.ts'; import { fetchCIFailureLogs, postPRComment } from './github.ts'; -// CLI-only agent: no HTTP trigger. Invoked from GitHub Actions via `flue run merge-fix`. -export const triggers = {}; - -const GITHUB_TOKEN = process.env.FREDKBOT_GITHUB_TOKEN || process.env.GITHUB_TOKEN || ''; -const gh = defineCommand('gh', { env: { GH_TOKEN: GITHUB_TOKEN } }); -const git = defineCommand('git'); -const gitWithAuth = defineCommand('git', { env: { GH_TOKEN: GITHUB_TOKEN } }); -const pnpm = defineCommand('pnpm'); -const node = defineCommand('node'); - export const args = v.object({ prNumber: v.number(), }); -export default async function mergeFix({ init, payload }: FlueContext) { +const agent = createAgent(() => ({ + sandbox: local({ + env: { + // Read-only token for gh CLI reads inside the sandbox. + // Write operations (git push, post comment) go through the orchestrator. + GH_TOKEN: GITHUB_TOKEN_BASE, + }, + }), + model: 'anthropic/claude-opus-4-6', +})); + +export async function run({ init, payload }: FlueContext) { const prNumber = payload.prNumber as number; const branch = 'ci/merge-main-to-next'; - const agent = await init({ - sandbox: 'local', - model: 'anthropic/claude-opus-4-6', - }); - const session = await agent.session(); + const harness = await init(agent); + const session = await harness.session(); // Fetch CI failure logs before entering the sandbox. // The gh CLI doesn't work inside the Flue sandbox (auth goes through a proxy), @@ -36,9 +35,8 @@ export default async function mergeFix({ init, payload }: FlueContext) { // Conflicts have already been resolved by the merge-resolve workflow. // Dependencies are installed but packages may NOT be built yet — the skill // handles building and fixing any errors that come up. - const fixResult = await session.skill('merge/fix-ci.md', { + const { data: fixResult } = await session.skill('merge/fix-ci.md', { args: { prNumber, ciLogs }, - commands: [gh, git, pnpm, node], result: v.object({ ciPass: v.pipe(v.boolean(), v.description('true if build + tests pass after fixes')), fixedFiles: v.pipe( @@ -55,15 +53,11 @@ export default async function mergeFix({ init, payload }: FlueContext) { }); // Commit and push if there are changes - const status = await session.shell('git status --porcelain', { commands: [git] }); + const status = await session.shell('git status --porcelain'); if (status.stdout.trim()) { - await session.shell('git add -A', { commands: [git] }); - await session.shell('git commit -m "chore: fix CI failures for main-to-next merge"', { - commands: [git], - }); - const pushResult = await session.shell(`git push origin ${branch}`, { - commands: [gitWithAuth], - }); + await session.shell('git add -A'); + await session.shell('git commit -m "chore: fix CI failures for main-to-next merge"'); + const pushResult = await gitPush(branch); console.info('push result:', pushResult); if (pushResult.exitCode !== 0) { diff --git a/.flue/workflows/merge-fix/github.ts b/.flue/workflows/merge-fix/github.ts index cf27ede85b50..0a212cd97378 100644 --- a/.flue/workflows/merge-fix/github.ts +++ b/.flue/workflows/merge-fix/github.ts @@ -1,8 +1,20 @@ const REPO = 'withastro/astro'; +const GITHUB_TOKEN_BASE = process.env.GITHUB_TOKEN; +const GITHUB_TOKEN_PRIVILEGED = process.env.FREDKBOT_GITHUB_TOKEN; -function headers(): Record { - const token = process.env.FREDKBOT_GITHUB_TOKEN || process.env.GITHUB_TOKEN; - if (!token) throw new Error('token is not set'); +function readHeaders(): Record { + const token = GITHUB_TOKEN_BASE; + if (!token) throw new Error('GITHUB_TOKEN is not set'); + return { + Authorization: `token ${token}`, + 'Content-Type': 'application/json', + Accept: 'application/vnd.github+json', + }; +} + +function writeHeaders(): Record { + const token = GITHUB_TOKEN_PRIVILEGED; + if (!token) throw new Error('FREDKBOT_GITHUB_TOKEN is not set'); return { Authorization: `token ${token}`, 'Content-Type': 'application/json', @@ -23,7 +35,7 @@ interface WorkflowRun { async function getFailedCIRun(branch: string): Promise { const res = await fetch( `https://api.github.com/repos/${REPO}/actions/runs?branch=${encodeURIComponent(branch)}&status=failure&per_page=5`, - { headers: headers() }, + { headers: readHeaders() }, ); if (!res.ok) { console.error(`Failed to fetch workflow runs (HTTP ${res.status}): ${await res.text()}`); @@ -47,7 +59,7 @@ export async function fetchCIFailureLogs(branch: string): Promise { // Get jobs for this run const jobsRes = await fetch( `https://api.github.com/repos/${REPO}/actions/runs/${run.id}/jobs?filter=failed`, - { headers: headers() }, + { headers: readHeaders() }, ); if (!jobsRes.ok) { return `Failed to fetch jobs (HTTP ${jobsRes.status}). Run ID: ${run.id}`; @@ -74,7 +86,7 @@ export async function fetchCIFailureLogs(branch: string): Promise { for (const job of failedJobs) { const logRes = await fetch(`https://api.github.com/repos/${REPO}/actions/jobs/${job.id}/logs`, { - headers: headers(), + headers: readHeaders(), redirect: 'follow', }); if (!logRes.ok) { @@ -98,7 +110,7 @@ export async function fetchCIFailureLogs(branch: string): Promise { export async function postPRComment(prNumber: number, body: string): Promise { const res = await fetch(`https://api.github.com/repos/${REPO}/issues/${prNumber}/comments`, { method: 'POST', - headers: headers(), + headers: writeHeaders(), body: JSON.stringify({ body }), }); if (!res.ok) { diff --git a/.flue/workflows/merge-resolve.ts b/.flue/workflows/merge-resolve.ts new file mode 100644 index 000000000000..f3835a3aa5bc --- /dev/null +++ b/.flue/workflows/merge-resolve.ts @@ -0,0 +1 @@ +export { args, run } from './merge-resolve/WORKFLOW.ts'; diff --git a/.flue/workflows/merge-resolve/WORKFLOW.ts b/.flue/workflows/merge-resolve/WORKFLOW.ts index 8efecd651da9..fe1394ac0457 100644 --- a/.flue/workflows/merge-resolve/WORKFLOW.ts +++ b/.flue/workflows/merge-resolve/WORKFLOW.ts @@ -1,40 +1,38 @@ -import type { FlueContext } from '@flue/sdk/client'; -import { defineCommand } from '@flue/sdk/node'; +import { createAgent, type FlueContext } from '@flue/runtime'; +import { local } from '@flue/runtime/node'; import * as v from 'valibot'; - -// CLI-only agent: no HTTP trigger. Invoked from GitHub Actions via `flue run merge-resolve`. -export const triggers = {}; - -const GITHUB_TOKEN = process.env.FREDKBOT_GITHUB_TOKEN || process.env.GITHUB_TOKEN || ''; -const gh = defineCommand('gh', { env: { GH_TOKEN: GITHUB_TOKEN } }); -const git = defineCommand('git'); -const gitWithAuth = defineCommand('git', { env: { GH_TOKEN: GITHUB_TOKEN } }); -const pnpm = defineCommand('pnpm'); -const node = defineCommand('node'); +import { GITHUB_TOKEN_BASE, gitPush } from '../../lib/github.ts'; export const args = v.object({ branch: v.string(), hasConflicts: v.boolean(), }); -export default async function mergeResolve({ init, payload }: FlueContext) { +const agent = createAgent(() => ({ + sandbox: local({ + env: { + // Read-only token for gh CLI reads inside the sandbox. + // Write operations (git push) go through the orchestrator. + GH_TOKEN: GITHUB_TOKEN_BASE, + }, + }), + model: 'anthropic/claude-opus-4-6', +})); + +export async function run({ init, payload }: FlueContext) { const branch = payload.branch as string; const hasConflicts = payload.hasConflicts as boolean; - const agent = await init({ - sandbox: 'local', - model: 'anthropic/claude-opus-4-6', - }); - const session = await agent.session(); + const harness = await init(agent); + const session = await harness.session(); // Step 1: Resolve all merge conflicts (source code, JSON, YAML, etc.) // The GitHub Action has already done `git merge origin/main`. If there were // conflicts, the working tree has conflict markers in all affected files. // This skill resolves them intelligently — keeping next-side versions but // preserving important changes from main (new deps, bug fixes, etc.) - const resolveResult = await session.skill('merge/resolve-conflicts.md', { + const { data: resolveResult } = await session.skill('merge/resolve-conflicts.md', { args: { branch, hasConflicts }, - commands: [gh, git, pnpm, node], result: v.object({ resolvedFiles: v.pipe( v.array(v.string()), @@ -44,9 +42,8 @@ export default async function mergeResolve({ init, payload }: FlueContext) { }); // Step 2: Remove stale changesets that were already released on main - const changesetResult = await session.skill('merge/clean-changesets.md', { + const { data: changesetResult } = await session.skill('merge/clean-changesets.md', { args: {}, - commands: [gh, git, pnpm, node], result: v.object({ removedChangesets: v.pipe( v.array(v.string()), @@ -60,9 +57,7 @@ export default async function mergeResolve({ init, payload }: FlueContext) { // correct package.json files (not ones with conflict markers). // We do NOT build here — the merge-fix workflow handles build/type/lint // errors if CI fails after this push. - const installResult = await session.shell('CI=true pnpm install --no-frozen-lockfile', { - commands: [pnpm], - }); + const installResult = await session.shell('CI=true pnpm install --no-frozen-lockfile'); if (installResult.exitCode !== 0) { return { success: false, @@ -74,7 +69,7 @@ export default async function mergeResolve({ init, payload }: FlueContext) { // Step 4: Commit and push // Include the lockfile and any build artifacts in the commit - await session.shell('git add -A', { commands: [git] }); + await session.shell('git add -A'); const commitParts = []; if (resolveResult.resolvedFiles.length > 0) commitParts.push('resolve merge conflicts'); @@ -84,12 +79,8 @@ export default async function mergeResolve({ init, payload }: FlueContext) { ? `chore: ${commitParts.join(' and ')} for main-to-next merge` : 'chore: merge main into next'; - await session.shell(`git commit -m ${JSON.stringify(commitMsg)} --allow-empty`, { - commands: [git], - }); - const pushResult = await session.shell(`git push -f origin ${branch}`, { - commands: [gitWithAuth], - }); + await session.shell(`git commit -m ${JSON.stringify(commitMsg)} --allow-empty`); + const pushResult = await gitPush(branch, { force: true }); if (pushResult.exitCode !== 0) { return { diff --git a/.github/workflows/fix-verification.yml b/.github/workflows/fix-verification.yml index 054e72d990e7..d12f8e71b2ea 100644 --- a/.github/workflows/fix-verification.yml +++ b/.github/workflows/fix-verification.yml @@ -25,8 +25,8 @@ jobs: timeout-minutes: 10 permissions: contents: read # Read repo for flue agent - issues: write # Remove label, post comment - pull-requests: write # Create PR, add labels + issues: read # Read issue details + pull-requests: read # Read PR state steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -53,5 +53,4 @@ jobs: run: | pnpm exec flue run fix-verification \ --target node \ - --id "fix-verification-$ISSUE_NUMBER" \ --payload "{\"issueNumber\": $ISSUE_NUMBER}" diff --git a/.github/workflows/issue-triage.yml b/.github/workflows/issue-triage.yml index c1d2095d94e5..531a180d69b1 100644 --- a/.github/workflows/issue-triage.yml +++ b/.github/workflows/issue-triage.yml @@ -50,7 +50,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 60 permissions: - contents: write # Push fix branches + contents: read # Read repo (push uses FREDKBOT_GITHUB_TOKEN) issues: read # Read issue details for triage id-token: write # OIDC auth for pkg.pr.new preview releases steps: @@ -100,5 +100,4 @@ jobs: run: | pnpm exec flue run issue-triage \ --target node \ - --id "issue-triage-$ISSUE_NUMBER" \ --payload "{\"issueNumber\": $ISSUE_NUMBER}" diff --git a/.github/workflows/merge-fix.yml b/.github/workflows/merge-fix.yml index 07d1eb2565e9..b35e7b097048 100644 --- a/.github/workflows/merge-fix.yml +++ b/.github/workflows/merge-fix.yml @@ -33,8 +33,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 permissions: - contents: write # Push fix commits - pull-requests: write # Update PR + contents: read # Read repo (push uses FREDKBOT_GITHUB_TOKEN) + pull-requests: read # Read PR state packages: read # Pull sandbox image from GHCR steps: - name: Lowercase image name @@ -150,7 +150,6 @@ jobs: ANTHROPIC_API_KEY: ${{ secrets.CI_ANTHROPIC_API_KEY }} PR_NUMBER: ${{ steps.pr.outputs.number }} run: | - pnpm flue run .flue/workflows/merge-fix/WORKFLOW.ts \ - --sandbox $IMAGE:latest \ - --args "{\"prNumber\": $PR_NUMBER}" \ - --model anthropic/claude-sonnet-4-20250514 + pnpm exec flue run merge-fix \ + --target node \ + --payload "{\"prNumber\": $PR_NUMBER}" diff --git a/.github/workflows/merge-main-to-next.yml b/.github/workflows/merge-main-to-next.yml index ef8efbfd18c1..d5513d059df3 100644 --- a/.github/workflows/merge-main-to-next.yml +++ b/.github/workflows/merge-main-to-next.yml @@ -149,9 +149,8 @@ jobs: run: | ../runtime/node_modules/.bin/flue run merge-resolve \ --target node \ - --id "merge-${GITHUB_RUN_ID}" \ --payload "{\"branch\": \"$BRANCH\", \"hasConflicts\": true}" \ - --workspace ../runtime/.flue \ + --root ../runtime \ --output . # Open or update PR (runs for both clean and conflict merges) diff --git a/examples/with-tailwindcss/package.json b/examples/with-tailwindcss/package.json index 9e67815e6e07..6d8b2066f339 100644 --- a/examples/with-tailwindcss/package.json +++ b/examples/with-tailwindcss/package.json @@ -18,6 +18,7 @@ "@types/canvas-confetti": "^1.9.0", "astro": "^6.4.4", "canvas-confetti": "^1.9.4", - "tailwindcss": "^4.2.1" + "tailwindcss": "^4.2.1", + "vite": "^7.3.2" } } diff --git a/knip.js b/knip.js index 8d553d72db41..a42bf17cbb46 100644 --- a/knip.js +++ b/knip.js @@ -23,7 +23,7 @@ export default { // vsce and ovsx are only used in CI for publishing, and due to how we have to publish the VS Code extension have // to be installed in the vscode package, but knip is expecting them to be in the root node_modules ignoreBinaries: ['docgen', 'docgen:errors', 'playwright', 'vsce', 'ovsx'], - entry: ['.flue/agents/*.ts', '.flue/workflows/*/WORKFLOW.ts'], + entry: ['.flue/workflows/*.ts', '.flue/workflows/*/WORKFLOW.ts'], }, 'packages/*': { entry: [srcEntry, dtsEntry, testEntry], diff --git a/package.json b/package.json index 4ff3724c1985..fa640e68062b 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,8 @@ "@biomejs/biome": "2.4.10", "@changesets/changelog-github": "^0.5.2", "@changesets/cli": "^2.29.8", - "@flue/cli": "^0.3.10", - "@flue/sdk": "^0.3.10", + "@flue/cli": "^0.8.0", + "@flue/runtime": "^0.8.0", "@types/node": "^22.10.6", "bgproc": "^0.2.0", "esbuild": "0.25.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a3c47d243f5a..7d460a32464f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,11 +32,11 @@ importers: specifier: ^2.29.8 version: 2.29.8(@types/node@22.19.19) '@flue/cli': - specifier: ^0.3.10 - version: 0.3.10(typescript@6.0.3)(wrangler@4.95.0)(ws@8.20.1)(zod@4.3.6) - '@flue/sdk': - specifier: ^0.3.10 - version: 0.3.10(typescript@6.0.3)(wrangler@4.95.0)(ws@8.20.1)(zod@4.3.6) + specifier: ^0.8.0 + version: 0.8.1(@cloudflare/workers-types@4.20260527.1)(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@types/node@22.19.19)(esbuild@0.25.5)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(typebox@1.1.38)(typescript@6.0.3)(wrangler@4.95.0)(yaml@2.9.0)(zod-to-json-schema@3.25.2)(zod@4.3.6) + '@flue/runtime': + specifier: ^0.8.0 + version: 0.8.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.2)(zod@4.3.6) '@types/node': specifier: ^22.19.0 version: 22.19.19 @@ -54,7 +54,7 @@ importers: version: 3.1.0(eslint@10.4.0) knip: specifier: 5.82.1 - version: 5.82.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@22.19.19)(typescript@6.0.3) + version: 5.82.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.19)(typescript@6.0.3) only-allow: specifier: ^1.2.2 version: 1.2.2 @@ -127,10 +127,10 @@ importers: devDependencies: '@codspeed/vitest-plugin': specifier: 5.2.0 - version: 5.2.0(tinybench@2.9.0)(vite@7.3.2)(vitest@4.1.0) + version: 5.2.0(tinybench@2.9.0)(vite@8.0.16)(vitest@4.1.0) vitest: specifier: ^4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) benchmark/packages/adapter: dependencies: @@ -249,7 +249,7 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: ^4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) devDependencies: '@types/react': specifier: ^18.3.28 @@ -515,6 +515,9 @@ importers: tailwindcss: specifier: ^4.2.1 version: 4.2.2 + vite: + specifier: ^7.3.2 + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) examples/with-vitest: dependencies: @@ -523,7 +526,7 @@ importers: version: link:../../packages/astro vitest: specifier: ^4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) packages/astro: dependencies: @@ -679,7 +682,7 @@ importers: version: 6.0.3 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vitefu: specifier: ^1.1.2 version: 1.1.2(vite@7.3.2) @@ -698,7 +701,7 @@ importers: version: link:../language-tools/astro-check '@astrojs/compiler-rs': specifier: ^0.1.6 - version: 0.1.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + version: 0.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) '@playwright/test': specifier: 1.58.2 version: 1.58.2 @@ -788,7 +791,7 @@ importers: version: 11.0.5 vitest: specifier: ^4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) optionalDependencies: sharp: specifier: ^0.34.0 @@ -1027,7 +1030,7 @@ importers: version: 18.3.7(@types/react@18.3.28) '@vitejs/plugin-vue': specifier: ^6.0.5 - version: 6.0.5(vite@7.3.2)(vue@3.5.30) + version: 6.0.5(vite@8.0.16)(vue@3.5.30) astro: specifier: workspace:* version: link:../../.. @@ -1720,7 +1723,7 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@7.3.2) + version: 4.2.2(vite@8.0.16) astro: specifier: workspace:* version: link:../../.. @@ -2408,7 +2411,7 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@7.3.2) + version: 4.2.2(vite@8.0.16) astro: specifier: workspace:* version: link:../../.. @@ -3411,7 +3414,7 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@7.3.2) + version: 4.2.2(vite@8.0.16) astro: specifier: workspace:* version: link:../../.. @@ -4031,7 +4034,7 @@ importers: version: link:../../../../integrations/mdx '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@7.3.2) + version: 4.2.2(vite@8.0.16) astro: specifier: workspace:* version: link:../../.. @@ -4082,7 +4085,7 @@ importers: version: link:../../.. vitest: specifier: ^4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) packages/astro/test/fixtures/vue-component: dependencies: @@ -4182,7 +4185,7 @@ importers: version: 6.0.3 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) packages/db/test/fixtures/basics: dependencies: @@ -4296,7 +4299,7 @@ importers: version: link:../../../scripts vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) packages/integrations/alpinejs/test/fixtures/basics: dependencies: @@ -4362,7 +4365,7 @@ importers: version: 0.2.16 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) devDependencies: '@cloudflare/workers-types': specifier: ^4.20260526.1 @@ -4559,7 +4562,7 @@ importers: version: link:../../../../mdx '@tailwindcss/vite': specifier: ^4.2.1 - version: 4.2.2(vite@7.3.2) + version: 4.2.2(vite@8.0.16) astro: specifier: workspace:* version: link:../../../../../astro @@ -4719,7 +4722,7 @@ importers: version: 18.3.7(@types/react@18.3.28) '@vitejs/plugin-vue': specifier: ^6.0.4 - version: 6.0.5(vite@7.3.2)(vue@3.5.30) + version: 6.0.5(vite@8.0.16)(vue@3.5.30) astro: specifier: workspace:* version: link:../../../../../astro @@ -4858,7 +4861,7 @@ importers: version: 0.18.12 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) packages/integrations/markdoc/test/fixtures/content-collections: dependencies: @@ -5159,7 +5162,7 @@ importers: version: 11.0.5 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) packages/integrations/mdx/test/fixtures/content-layer: dependencies: @@ -5363,7 +5366,7 @@ importers: version: 0.2.16 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) devDependencies: '@types/node': specifier: ^22.19.0 @@ -5736,7 +5739,7 @@ importers: version: 6.6.6(preact@10.29.0) vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) devDependencies: astro: specifier: workspace:* @@ -5764,7 +5767,7 @@ importers: version: 1.6.0 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) devDependencies: '@types/react': specifier: ^18.3.28 @@ -5910,7 +5913,7 @@ importers: dependencies: vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-plugin-solid: specifier: ^2.11.11 version: 2.11.11(solid-js@1.9.11)(vite@7.3.2) @@ -5935,7 +5938,7 @@ importers: version: 0.7.55(svelte@5.55.3)(typescript@6.0.3) vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vitefu: specifier: ^1.1.2 version: 1.1.2(vite@7.3.2) @@ -6014,7 +6017,7 @@ importers: version: 1.6.1(react@19.2.4)(svelte@5.55.3)(vue@3.5.30) '@vercel/functions': specifier: ^3.4.3 - version: 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.38) + version: 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.48) '@vercel/nft': specifier: ^1.3.2 version: 1.3.2(rollup@4.59.1) @@ -6039,7 +6042,7 @@ importers: version: 1.2.0 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) packages/integrations/vercel/test/fixtures/basic: dependencies: @@ -6237,7 +6240,7 @@ importers: version: 3.5.30 vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-plugin-vue-devtools: specifier: ^8.1.0 version: 8.1.0(vite@7.3.2)(vue@3.5.30) @@ -6978,128 +6981,88 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-bedrock-runtime@3.1041.0': - resolution: {integrity: sha512-1QehYO3jhdvNQ5mOKtwIiNV04y4aywaNZw9HzCp7SSYCX4yy+AGXc2hhYjCiMDUvQPIELuvbR8MXw81NGAj8ZQ==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/core@3.974.8': - resolution: {integrity: sha512-njR2qoG6ZuB0kvAS2FyICsFZJ6gmCcf2X/7JcD14sUvGDm26wiZ5BrA6LOiUxKFEF+IVe7kdroxyE00YlkiYsw==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/credential-provider-env@3.972.34': - resolution: {integrity: sha512-XT0jtf8Fw9JE6ppsQeoNnZRiG+jqRixMT1v1ZR17G60UvVdsQmTG8nbEyHuEPfMxDXEhfdARaM/XiEhca4lGHQ==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/credential-provider-http@3.972.36': - resolution: {integrity: sha512-DPoGWfy7J7RKxvbf5kOKIGQkD2ek3dbKgzKIGrnLuvZBz5myU+Im/H6pmc14QcnFbqHMqxvtWSgRDSJW3qXLQg==} + '@aws-sdk/client-bedrock-runtime@3.1048.0': + resolution: {integrity: sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.38': - resolution: {integrity: sha512-oDzUBu2MGJFgoar05sPMCwSrhw44ASyccrHzj66vO69OZqi7I6hZZxXfuPLC8OCzW7C+sU+bI73XHij41yekgQ==} + '@aws-sdk/core@3.974.17': + resolution: {integrity: sha512-r8o4h2K7j6P9ngno+8ei0aK0U/4JwDb7A2fMMxGVoSqDN8AFlIzSDeZHME9LcVLR2codyhtr1WAAg+/nmkeeMA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.38': - resolution: {integrity: sha512-g1NosS8qe4OF++G2UFCM5ovSkgipC7YYor5KCWatG0UoMSO5YFj9C8muePlyVmOBV/WTI16Jo3/s1NUo/o1Bww==} + '@aws-sdk/credential-provider-env@3.972.43': + resolution: {integrity: sha512-g0XVQKzaA/4cq1vz1IvCQwYM+1Pkv01J9yHDpCTXekVuGZRDEz0wqBQ1AuYTq7FM6uik4uBGH8Tb5d9YvgeA7g==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.39': - resolution: {integrity: sha512-HEswDQyxUtadoZ/bJsPPENHg7R0Lzym5LuMksJeHvqhCOpP+rtkDLKI4/ZChH4w3cf5kG8n6bZuI8PzajoiqMg==} + '@aws-sdk/credential-provider-http@3.972.45': + resolution: {integrity: sha512-w9PuOoKCt6+xoESvY+zlV0u3PKQ0mVL259PcsVR6a3S/uYJJHnIi4r1NxdJHEcNldUVRIciltWnFMGBR4YEm3g==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.34': - resolution: {integrity: sha512-T3IFs4EVmVi1dVN5RciFnklCANSzvrQd/VuHY9ThHSQmYkTogjcGkoJEr+oNUPQZnso52183088NqysMPji1/Q==} + '@aws-sdk/credential-provider-ini@3.972.49': + resolution: {integrity: sha512-83r5MK+PERv9irzky1o5aNbXiLuaLfeB7N8MrktB9USpoebdNtuG0Ek9ieIxpGH1aZ9a0nIaDaLjEr3EmOV3Ng==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.38': - resolution: {integrity: sha512-5ZxG+t0+3Q3QPh8KEjX6syskhgNf7I0MN7oGioTf6Lm1NTjfP7sIcYGNsthXC2qR8vcD3edNZwCr2ovfSSWuRA==} + '@aws-sdk/credential-provider-login@3.972.48': + resolution: {integrity: sha512-amPGeF6fcvLInK4Pu2k2Y2jHFR6MpaIKrZrbaf0QUnV3tjzjWh442eifZ2+KcmzFdsqyvyjBqAhq2JNLt1C5gA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.38': - resolution: {integrity: sha512-lYHFF30DGI20jZcYX8cm6Ns0V7f1dDN6g/MBDLTyD/5iw+bXs3yBr2iAiHDkx4RFU5JgsnZvCHYKiRVPRdmOgw==} + '@aws-sdk/credential-provider-node@3.972.51': + resolution: {integrity: sha512-mbhSY3ytXIGMuBoJsWCivk+63dtVlenT6wstUra07Lar4Ln2MVL8/j5zCTIOog+ig5/FlFJ8gcFU4nQZV+Jh4Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/eventstream-handler-node@3.972.14': - resolution: {integrity: sha512-m4X56gxG76/CKfxNVbOFuYwnAZcHgS6HOH8lgp15HoGHIAVTcZfZrXvcYzJFOMLEJgVn+JHBu6EiNV+xSNXXFg==} + '@aws-sdk/credential-provider-process@3.972.43': + resolution: {integrity: sha512-GPokLNyvTfCmuaHk+v3GKVs4ZT3cMu5kgS2a+NPkOMt96cq6fSIK0g+mZHpGS6Cd4QGrPKesANEaLUKgOskTzg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-eventstream@3.972.10': - resolution: {integrity: sha512-QUqLs7Af1II9X4fCRAu+EGHG3KHyOp4RkuLhRKoA3NuFlh6TL8i+zXBl8w2LUxqm44B/Kom45hgSlwA1SpTsXQ==} + '@aws-sdk/credential-provider-sso@3.972.48': + resolution: {integrity: sha512-tf0sD47SeTgCDfOWYssctzGgwAuk8/ECjb7bom4wZ7P1om0qE8i2yjniUdvysmANm5haARr35O8vZnTe/UEtpQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-host-header@3.972.10': - resolution: {integrity: sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==} + '@aws-sdk/credential-provider-web-identity@3.972.48': + resolution: {integrity: sha512-YYsumc2oe09gl4l+fjfmR64JDn6+0o4Ql5HMBkMuhFazO1tZlE5NjSnZM3oXHwenPjh2qow0TFgSIVjfWfsojg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-logger@3.972.10': - resolution: {integrity: sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==} + '@aws-sdk/eventstream-handler-node@3.972.19': + resolution: {integrity: sha512-MZhrsChY4jwEp7LQnNkcNSvF4KHjDC8es1pgu61h6L48fY7YgRqDfGRoT4ADd7lj4dB+gtOYITgmf7k4QQ2TKg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.11': - resolution: {integrity: sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==} + '@aws-sdk/middleware-eventstream@3.972.15': + resolution: {integrity: sha512-4qYsO6temM6rEawcxHpMPWnRSIiLzsKhuizMlXCVujj54Q+HoGkVlcxk8S+5ekq/hOBdkyRnQjNsZaeRBz60hg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.37': - resolution: {integrity: sha512-Km7M+i8DrLArVzrid1gfxeGhYHBd3uxvE77g0s5a52zPSVosxzQBnJ0gwWb6NIp/DOk8gsBMhi7V+cpJG0ndTA==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-websocket@3.972.25': + resolution: {integrity: sha512-1u/r6SYArJr5qBHWQzwGw8cQu32V5Rcx68qb4v+ZhHXFn6dGDtCG5ImyULCLxhTktibLTh2qaRHOoHmkTKCyvA==} + engines: {node: '>= 14.0.0'} - '@aws-sdk/middleware-user-agent@3.972.38': - resolution: {integrity: sha512-iz+B29TXcAZsJpwB+AwG/TTGA5l/VnmMZ2UxtiySOZjI6gCdmviXPwdgzcmuazMy16rXoPY4mYCGe7zdNKfx5A==} + '@aws-sdk/nested-clients@3.997.16': + resolution: {integrity: sha512-bGvfDgC2KQePjEmZdltScPPLKFoyjPElAXeZcLfvZ58J1AO283//WGtvp9GdnryLHTi7gis0UoCezqh0vl/nig==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-websocket@3.972.16': - resolution: {integrity: sha512-86+S9oCyRVGzoMRpQhxkArp7kD2K75GPmaNevd9B6EyNhWoNvnCZZ3WbgN4j7ZT+jvtvBCGZvI2XHsWZJ+BRIg==} - engines: {node: '>= 14.0.0'} - - '@aws-sdk/nested-clients@3.997.6': - resolution: {integrity: sha512-WBDnqatJl+kGObpfmfSxqnXeYTu3Me8wx8WCtvoxX3pfWrrTv8I4WTMSSs7PZqcRcVh8WeUKMgGFjMG+52SR1w==} + '@aws-sdk/signature-v4-multi-region@3.996.31': + resolution: {integrity: sha512-Kn2up9SlG1KC6wRtwf0d7waTGF6rvp9DxYqB54x6UCKdQ6kyaXCqHL4WGb5vUJga5kS8FxnjhY0LqM28aMvnNQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/region-config-resolver@3.972.13': - resolution: {integrity: sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==} + '@aws-sdk/token-providers@3.1048.0': + resolution: {integrity: sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.25': - resolution: {integrity: sha512-+CMIt3e1VzlklAECmG+DtP1sV8iKq25FuA0OKpnJ4KA0kxUtd7CgClY7/RU6VzJBQwbN4EJ9Ue6plvqx1qGadw==} + '@aws-sdk/token-providers@3.1062.0': + resolution: {integrity: sha512-fvHh53zSm2FoQPgkw9thH5D7sd13bC0nPyuZb+mQJ85l5v7lQnsZ97u6e6YkJJN/LU1Mxm1/DLGrIIRR2L7tZw==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1041.0': - resolution: {integrity: sha512-Th7kPI6YPtvJUcdznooXJMy+9rQWjmEF81LxaJssngBzuysK4a/x+l8kjm1zb7nYsUPbndnBdUnwng/3PLvtGw==} + '@aws-sdk/types@3.973.10': + resolution: {integrity: sha512-992QrTO7G9qCvKD0fx1rMlqcL14plUcRAbwmqqYVsuF3GrqcvlAL9qxR+baMafarEZ+l7DUQ5lCMmt5mbMhF7g==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.973.8': resolution: {integrity: sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-arn-parser@3.972.3': - resolution: {integrity: sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-endpoints@3.996.8': - resolution: {integrity: sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-format-url@3.972.10': - resolution: {integrity: sha512-DEKiHNJVtNxdyTeQspzY+15Po/kHm6sF0Cs4HV9Q2+lplB63+DrvdeiSoOSdWEWAoO2RcY1veoXVDz2tWxWCgQ==} - 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/util-user-agent-browser@3.972.10': - resolution: {integrity: sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==} - - '@aws-sdk/util-user-agent-node@3.973.24': - resolution: {integrity: sha512-ZWwlkjcIp7cEL8ZfTpTAPNkwx25p7xol0xlKoWVVf22+nsjwmLcHYtTPjIV1cSpmB/b6DaK4cb1fSkvCXHgRdw==} - engines: {node: '>=20.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.972.22': - resolution: {integrity: sha512-PMYKKtJd70IsSG0yHrdAbxBr+ZWBKLvzFZfD3/urxgf6hXVMzuU5M+3MJ5G67RpOmLBu1fAUN65SbWuKUCOlAA==} + '@aws-sdk/xml-builder@3.972.27': + resolution: {integrity: sha512-hpsCXCOI436kxWpjtRuIHVvuPP81MOw8f18jzfZeg+UOiiOvlqWcmWChzEhJEu16cOC6+ku4ncBN+7rdt+DZ9g==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.4': @@ -7493,30 +7456,10 @@ packages: '@clack/prompts@1.1.0': resolution: {integrity: sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==} - '@cloudflare/codemode@0.3.4': - resolution: {integrity: sha512-GDzPUnEqgp9qBNYvrjoO1iODXtOjWVhbyvVE40TJ/oaYvHsOgsaws4TnIKDM/+JK8uG3S3GAJ2+ixDIEuicIdw==} - peerDependencies: - '@modelcontextprotocol/sdk': ^1.25.0 - '@tanstack/ai': '>=0.8.0 <1.0.0' - ai: ^6.0.0 - zod: ^4.0.0 - peerDependenciesMeta: - '@modelcontextprotocol/sdk': - optional: true - '@tanstack/ai': - optional: true - ai: - optional: true - zod: - optional: true - '@cloudflare/kv-asset-handler@0.5.0': resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} engines: {node: '>=22.0.0'} - '@cloudflare/shell@0.3.6': - resolution: {integrity: sha512-k2tjxzIAeMU932L98KOOcq0Z37TXdnXY+WrOirCupVfrBYH3UaS7AaiYdjRc5w44NlK/ea9hBQvdHSDI7TTdLQ==} - '@cloudflare/unenv-preset@2.16.1': resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} peerDependencies: @@ -7905,6 +7848,15 @@ packages: resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} engines: {node: '>=18'} + '@earendil-works/pi-agent-core@0.78.1': + resolution: {integrity: sha512-oPwVRkkAvyKPWyM7E4k+EaTNmynbYn7ZLG/LBh9BUnMNb2gvpMp+VQ420R6JCJ20uogSqrHnWTyosSa/rU8lVw==} + engines: {node: '>=22.19.0'} + + '@earendil-works/pi-ai@0.78.1': + resolution: {integrity: sha512-CM2pkTs1iupG/maw381lC9Q/Y/aQaMGK7GILc28ttImD0ci3LDwKroDsGkWbly5JIy3iqxdRxB9JlG7vvzCzTg==} + engines: {node: '>=22.19.0'} + hasBin: true + '@electric-sql/pglite@0.3.16': resolution: {integrity: sha512-mZkZfOd9OqTMHsK+1cje8OSzfAQcpD7JmILXTl5ahdempjUDdmg4euf1biDex5/LfQIDJ3gvCu6qDgdnDxfJmA==} @@ -7929,15 +7881,24 @@ packages: '@emmetio/stream-reader@2.2.0': resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.9.1': resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.9.1': resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@envelop/instrumentation@1.0.0': resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} engines: {node: '>=18.0.0'} @@ -8599,26 +8560,28 @@ packages: '@fastify/static@9.0.0': resolution: {integrity: sha512-r64H8Woe/vfilg5RTy7lwWlE8ZZcTrc3kebYFMEUBrMqlydhQyoiExQXdYAy2REVpST/G35+stAM8WYp1WGmMA==} - '@flue/cli@0.3.10': - resolution: {integrity: sha512-UM1sanm8GtgMnfTxtpobD8p//E3ZdIV/25EdnTniemdWT2OXkSb0Fx6xIvObFi1q4WvgJYcSmBW7t3YWu6qZGw==} + '@flue/cli@0.8.1': + resolution: {integrity: sha512-8aeaSf7RsXj4A4P+eQgTj8l2+17NScrVCK3UcbMuQ2pwAu84v5t6SQR2XvYuqActlidTIFR6+xxWS7dR9T7yZw==} + engines: {node: '>=22.18.0'} hasBin: true - - '@flue/sdk@0.3.10': - resolution: {integrity: sha512-kqTVhH/vyUB19mJ+/ijry88nP28BHxX+5FIrJD6ZnC4o8tQbRKfmXiH1Jatk+O319Uki0SnH5bYUb+CKp+vpBA==} peerDependencies: - wrangler: ^4.0.0 + 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'} + '@fontsource/monofett@5.2.8': resolution: {integrity: sha512-cUtT8ScH3HHsMBkRrXFCrhGpKqRrKVNOhnYVSusECfB7g13YZjOrrLlhlc3o+R2IYpRrQQg/T/febSVD6k2Dhw==} '@fontsource/montserrat@5.2.8': resolution: {integrity: sha512-xTjLxSbSfCycDB0pwmNsfNvdfWPaDaRQ2LC6yt/ZI7SdvXG52zHnzNYC/09mzuAuWNJyShkteutfCoDgym56hQ==} - '@google/genai@1.51.0': - resolution: {integrity: sha512-vTZZF3CSimN7cn2zsLpW2p5WF0eZa5Gz69ITMPCNHpPrDlAstOfGifSfi0p/s9Z9400f7xJRkgvkQNrcM7pJ6w==} + '@google/genai@1.52.0': + resolution: {integrity: sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -8632,6 +8595,18 @@ packages: 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' + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -8946,17 +8921,6 @@ packages: engines: {node: '>=18'} hasBin: true - '@mariozechner/pi-agent-core@0.71.1': - resolution: {integrity: sha512-LMXcKoPmjD06EHwnl7IGMkJs/l3Qdl9z1xKsQGqqyd60ZgdxaATtR40Yyzcku1ogu16NhCHrUg6PJ9XeRcT+qQ==} - engines: {node: '>=20.0.0'} - deprecated: please use @earendil-works/pi-agent-core instead going forward - - '@mariozechner/pi-ai@0.71.1': - resolution: {integrity: sha512-xksl4Y20qnjGbF3/eo0rX+TXEiZkkgRCEO8n/q7tMeVKhQ41migVG+msF+xTJoC3HkrTWfak3Y2Z6UjTUbjeTg==} - engines: {node: '>=20.0.0'} - deprecated: please use @earendil-works/pi-ai instead going forward - hasBin: true - '@markdoc/markdoc@0.5.4': resolution: {integrity: sha512-36YFNlqFk//gVNGm5xZaTWVwbAVF2AOmVjf1tiUrS6tCoD/YSkVy2E3CkAfhc5MlKcjparL/QFHCopxL4zRyaQ==} engines: {node: '>=14.7.0'} @@ -9288,6 +9252,9 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxc-resolver/binding-android-arm-eabi@11.17.1': resolution: {integrity: sha512-+VuZyMYYaap5uDAU1xDU3Kul0FekLqpBS8kI5JozlWfYQKnc/HsZg2gHPkQrj0SC9lt74WMNCfOzZZJlYXSdEQ==} cpu: [arm] @@ -9584,6 +9551,101 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-rc.2': resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} @@ -9593,6 +9655,9 @@ packages: '@rolldown/pluginutils@1.0.0-rc.4': resolution: {integrity: sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -9838,195 +9903,50 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@smithy/config-resolver@4.4.17': - resolution: {integrity: sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==} - engines: {node: '>=18.0.0'} - - '@smithy/core@3.23.17': - resolution: {integrity: sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ==} - engines: {node: '>=18.0.0'} - - '@smithy/credential-provider-imds@4.2.14': - resolution: {integrity: sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-codec@4.2.14': - resolution: {integrity: sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-browser@4.2.14': - resolution: {integrity: sha512-8IelTCtTctWRbb+0Dcy+C0aICh1qa0qWXqgjcXDmMuCvPJRnv26hiDZoAau2ILOniki65mCPKqOQs/BaWvO4CQ==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-config-resolver@4.3.14': - resolution: {integrity: sha512-sqHiHpYRYo3FJlaIxD1J8PhbcmJAm7IuM16mVnwSkCToD7g00IBZzKuiLNMGmftULmEUX6/UAz8/NN5uMP8bVA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-node@4.2.14': - resolution: {integrity: sha512-Ht/8BuGlKfFTy0H3+8eEu0vdpwGztCnaLLXtpXNdQqiR7Hj4vFScU3T436vRAjATglOIPjJXronY+1WxxNLSiw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-universal@4.2.14': - resolution: {integrity: sha512-lWyt4T2XQZUZgK3tQ3Wn0w3XBvZsK/vjTuJl6bXbnGZBHH0ZUSONTYiK9TgjTTzU54xQr3DRFwpjmhp0oLm3gg==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.3.17': - resolution: {integrity: sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==} + '@smithy/core@3.24.6': + resolution: {integrity: sha512-wBXDRup6UU97VKyaiRo8AssnfStPtG0oAAfpq/bC0a1YYau8pM86YB4kM6ccoVi1mS8l/UHbn9oDM+7uozr/ug==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.2.14': - resolution: {integrity: sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g==} + '@smithy/credential-provider-imds@4.3.8': + resolution: {integrity: sha512-5cAM+KZC02sTqDt6NaLXyu50M/GNMd1eTzDVR8Lb0BBsVtu7RWHo47VPPEEv1vt3Yub6uzr+M5FHC+GtoT0USg==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.2.14': - resolution: {integrity: sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw==} + '@smithy/fetch-http-handler@5.4.6': + resolution: {integrity: sha512-FEwEYJ1jlBKdhe9TPzfghEi1bP55ZeEImlDkEa62bBBYzUcnB6RUCyuiS2mqKt6ZVjUbBgcNhzfIctH+Hevx9g==} 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/is-array-buffer@4.2.2': - resolution: {integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.2.14': - resolution: {integrity: sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.4.32': - resolution: {integrity: sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.5.7': - resolution: {integrity: sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.2.20': - resolution: {integrity: sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.2.14': - resolution: {integrity: sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.3.14': - resolution: {integrity: sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.6.1': - resolution: {integrity: sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.2.14': - resolution: {integrity: sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.3.14': - resolution: {integrity: sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.2.14': - resolution: {integrity: sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.2.14': - resolution: {integrity: sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.3.1': - resolution: {integrity: sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.4.9': - resolution: {integrity: sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==} + '@smithy/node-http-handler@4.7.3': + resolution: {integrity: sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.14': - resolution: {integrity: sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==} + '@smithy/node-http-handler@4.7.7': + resolution: {integrity: sha512-ZAFvHXrEk6K180EVhmZVg8GU5pUH5BSFqRs27JW3j1qEFx9YyYwWFx17x/MHcjALYimGAji7qEOlF1++be+G5A==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.12.13': - resolution: {integrity: sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA==} + '@smithy/signature-v4@5.4.6': + resolution: {integrity: sha512-Ojg4B6oIDlIr1R86xCDJt1zJWnYa0VINmqdjfe9qxWjdRivHalZ3iSlQgVqYbW0MdpFOC5XfHEWsnbmdnpIILQ==} engines: {node: '>=18.0.0'} '@smithy/types@4.14.1': resolution: {integrity: sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.14': - resolution: {integrity: sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.3.2': - resolution: {integrity: sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.2.2': - resolution: {integrity: sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.2.3': - resolution: {integrity: sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==} + '@smithy/types@4.14.3': + resolution: {integrity: sha512-YupL0ZWmFtJexUN2cHzkvvF/b9pKrtAIfT1o7/oY/Ppu8IYeZ+lDPM5vZdQJaSeA132dJCqojjGC9NhXeF71VQ==} 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-buffer-from@4.2.2': - resolution: {integrity: sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.2.2': - resolution: {integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.3.49': - resolution: {integrity: sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.2.54': - resolution: {integrity: sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.4.2': - resolution: {integrity: sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.2.2': - resolution: {integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.2.14': - resolution: {integrity: sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.3.6': - resolution: {integrity: sha512-p6/FO1n2KxMeQyna067i0uJ6TSbb165ZhnRtCpWh4Foxqbfc6oW+XITaL8QkFJj3KFnDe2URt4gOhgU06EP9ew==} - engines: {node: '>=18.0.0'} - deprecated: '@smithy/util-retry v4.3.6 contains a bug in Adaptive Retry, see https://github.com/smithy-lang/smithy-typescript/issues/1993. Upgrade to 4.3.7+' - - '@smithy/util-stream@4.5.25': - resolution: {integrity: sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.2.2': - resolution: {integrity: sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==} - engines: {node: '>=18.0.0'} - '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@4.2.2': - resolution: {integrity: sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==} - engines: {node: '>=18.0.0'} - - '@smithy/uuid@1.1.2': - resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} - engines: {node: '>=18.0.0'} - '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} @@ -10038,6 +9958,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==} @@ -10203,9 +10184,6 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -10950,10 +10928,6 @@ packages: resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} engines: {node: '>=18'} - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -10977,9 +10951,6 @@ packages: resolution: {integrity: sha512-jL5skNQLA0YBc1R3bVGXyHew3FqGqsT7AgLzWAVeTLzFkwVMUYvs4/lKJSmS7ygcF1GnHnoKG6++8GL9VtWwGQ==} engines: {node: '>=18.14.1'} - async-lock@1.4.1: - resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} - async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} @@ -11004,10 +10975,6 @@ packages: peerDependencies: postcss: ^8.1.0 - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - avvio@9.2.0: resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==} @@ -11073,10 +11040,6 @@ packages: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true - basic-ftp@5.3.1: - resolution: {integrity: sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==} - engines: {node: '>=10.0.0'} - bcp-47-match@2.0.3: resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} @@ -11196,10 +11159,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} - call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -11301,9 +11260,6 @@ packages: cjs-module-lexer@2.2.0: resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} - clean-git-ref@2.0.1: - resolution: {integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==} - cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -11582,10 +11538,6 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} @@ -11661,10 +11613,6 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -11748,9 +11696,6 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff3@0.0.3: - resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==} - diff@4.0.4: resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} @@ -12247,14 +12192,21 @@ packages: fast-xml-builder@1.1.5: resolution: {integrity: sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==} - fast-xml-parser@5.3.3: - resolution: {integrity: sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==} - hasBin: true + fast-xml-builder@1.2.0: + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} fast-xml-parser@5.7.2: resolution: {integrity: sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==} hasBin: true + 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 + fastify-plugin@5.1.0: resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} @@ -12371,10 +12323,6 @@ packages: resolution: {integrity: sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==} engines: {node: '>=20'} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -12504,10 +12452,6 @@ packages: resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} engines: {node: '>=20.20.0'} - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} - github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -12665,9 +12609,24 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hono@4.12.18: - resolution: {integrity: sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==} - engines: {node: '>=16.9.0'} + 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.18: + resolution: {integrity: sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==} + engines: {node: '>=16.9.0'} hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -12798,10 +12757,6 @@ packages: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} - engines: {node: '>= 12'} - ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -12827,10 +12782,6 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true @@ -12934,10 +12885,6 @@ packages: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -12976,17 +12923,9 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isomorphic-git@1.37.6: - resolution: {integrity: sha512-qr1NFCPsVTZ6YGqTXw0CzamnsHyH9QQ1OTEfeXIweSljRUMzuHFCJdUn0wc6OcjtTDns6knxjPb7N6LmJeftOA==} - engines: {node: '>=14.17'} - hasBin: true - istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -13103,8 +13042,8 @@ packages: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} - just-bash@2.14.3: - resolution: {integrity: sha512-uCFlAvBsGHVUukerfso8ZvJ66IJqe0HUR9Yr4pf4bkkWjBZAWlsxMAeg1WD2B6h6n7Sd0dQ7vbJDABybJB0/rA==} + just-bash@3.0.1: + resolution: {integrity: sha512-YVyzCN08fKarUnwqy7rKOAcX+2MLYLnYInuowmUXn3mqhrtd4ieZNBuzdQG+qYV9DqnIWuv9Whiph0WRIWsBtw==} hasBin: true jwa@2.0.1: @@ -13150,6 +13089,9 @@ packages: engines: {node: '>=8'} hasBin: true + layerr@3.0.0: + resolution: {integrity: sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==} + lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} @@ -13363,10 +13305,6 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - luxon@3.7.2: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} @@ -13719,9 +13657,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minimisted@2.0.1: - resolution: {integrity: sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -13782,6 +13717,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.9: resolution: {integrity: sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw==} engines: {node: ^18 || >=20} @@ -13812,10 +13752,6 @@ packages: netlify-redirector@0.5.0: resolution: {integrity: sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==} - netmask@2.1.1: - resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} - engines: {node: '>= 0.4.0'} - nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} @@ -14004,6 +13940,9 @@ packages: zod: optional: true + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -14095,14 +14034,6 @@ packages: resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} engines: {node: '>=12'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -14297,10 +14228,6 @@ packages: port-authority@2.0.1: resolution: {integrity: sha512-Hz/WvSNt5+7x+Rq1Cn6DetJOZxKtLDehJ1mLCYge6ju4QvSF/PHvRgy94e1SKJVI96AJTcqEdNwkkaAFad+TXQ==} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - postcss-attribute-case-insensitive@8.0.0: resolution: {integrity: sha512-fovIPEV35c2JzVXdmP+sp2xirbBMt54J+upU8u6TSj410kUU5+axgEzvBBSAX8KCybze8CFCelzFAw/FfWg2TA==} engines: {node: '>=20.19.0'} @@ -14471,6 +14398,10 @@ packages: resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + preact-render-to-string@6.6.6: resolution: {integrity: sha512-EfqZJytnjJldV+YaaqhthU2oXsEf5e+6rDv957p+zxAvNfFLQOPfvBOTncscQ+akzu6Wrl7s3Pa0LjUQmWJsGQ==} peerDependencies: @@ -14555,10 +14486,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -14871,6 +14798,11 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.59.1: resolution: {integrity: sha512-iZKH8BeoCwTCBTZBZWQQMreekd4mdomwdjIQ40GC1oZm6o+8PnNMIxFOiCsGMWeS8iDJ7KZcl7KwmKk/0HOQpA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -15014,21 +14946,12 @@ packages: set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sha.js@2.4.12: - resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} - engines: {node: '>= 0.10'} - hasBin: true - sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -15115,10 +15038,6 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smartypants@0.2.2: resolution: {integrity: sha512-TzobUYoEft/xBtb2voRPryAUIvYguG0V7Tt3de79I1WfXgCwelqVsGuZSnu3GFGRZhXR90AeEYIM+icuB/S06Q==} hasBin: true @@ -15127,14 +15046,6 @@ packages: resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.8: - resolution: {integrity: sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - solid-js@1.9.11: resolution: {integrity: sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==} @@ -15290,6 +15201,9 @@ packages: strnum@2.2.3: resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==} + strnum@2.3.0: + resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + strtok3@10.3.5: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} @@ -15438,6 +15352,10 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinyrainbow@3.0.3: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} @@ -15449,10 +15367,6 @@ packages: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} - to-buffer@1.2.2: - resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} - engines: {node: '>= 0.4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -15582,12 +15496,8 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} - typebox@1.1.37: - resolution: {integrity: sha512-jb7jp6KvOvvy5sd+11AfJ0/e0F0AS9RcOXd55oGi2ZnRHIGmFvrTaNF+ZidRmGBmmNTkM5KKl0Z37KzxJ+owEQ==} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + typebox@1.1.38: + resolution: {integrity: sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==} typed-rest-client@1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} @@ -15641,6 +15551,10 @@ packages: resolution: {integrity: sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w==} hasBin: true + ulidx@2.4.1: + resolution: {integrity: sha512-xY7c8LPyzvhvew0Fn+Ek3wBC9STZAuDI/Y5andCKi9AX6/jvfaX45PhsDX8oxgPL0YFp0Jhr8qWMbS/p9375Xg==} + engines: {node: '>=16'} + ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} @@ -15972,6 +15886,49 @@ packages: yaml: optional: true + vite@8.0.16: + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^22.19.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: @@ -16161,10 +16118,6 @@ packages: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} - which-typed-array@1.1.20: - resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -16243,6 +16196,10 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + xml-naming@0.1.0: + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + engines: {node: '>=16.0.0'} + xml2js@0.5.0: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} @@ -16294,6 +16251,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@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -16443,9 +16405,9 @@ snapshots: '@astrojs/compiler-binding-linux-x64-musl@0.1.6': optional: true - '@astrojs/compiler-binding-wasm32-wasi@0.1.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@astrojs/compiler-binding-wasm32-wasi@0.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -16457,7 +16419,7 @@ snapshots: '@astrojs/compiler-binding-win32-x64-msvc@0.1.6': optional: true - '@astrojs/compiler-binding@0.1.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@astrojs/compiler-binding@0.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': optionalDependencies: '@astrojs/compiler-binding-darwin-arm64': 0.1.6 '@astrojs/compiler-binding-darwin-x64': 0.1.6 @@ -16465,16 +16427,16 @@ snapshots: '@astrojs/compiler-binding-linux-arm64-musl': 0.1.6 '@astrojs/compiler-binding-linux-x64-gnu': 0.1.6 '@astrojs/compiler-binding-linux-x64-musl': 0.1.6 - '@astrojs/compiler-binding-wasm32-wasi': 0.1.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@astrojs/compiler-binding-wasm32-wasi': 0.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) '@astrojs/compiler-binding-win32-arm64-msvc': 0.1.6 '@astrojs/compiler-binding-win32-x64-msvc': 0.1.6 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - '@astrojs/compiler-rs@0.1.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@astrojs/compiler-rs@0.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@astrojs/compiler-binding': 0.1.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@astrojs/compiler-binding': 0.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -16515,351 +16477,187 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.1041.0': + '@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.8 - '@aws-sdk/credential-provider-node': 3.972.39 - '@aws-sdk/eventstream-handler-node': 3.972.14 - '@aws-sdk/middleware-eventstream': 3.972.10 - '@aws-sdk/middleware-host-header': 3.972.10 - '@aws-sdk/middleware-logger': 3.972.10 - '@aws-sdk/middleware-recursion-detection': 3.972.11 - '@aws-sdk/middleware-user-agent': 3.972.38 - '@aws-sdk/middleware-websocket': 3.972.16 - '@aws-sdk/region-config-resolver': 3.972.13 - '@aws-sdk/token-providers': 3.1041.0 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@aws-sdk/util-user-agent-browser': 3.972.10 - '@aws-sdk/util-user-agent-node': 3.973.24 - '@smithy/config-resolver': 4.4.17 - '@smithy/core': 3.23.17 - '@smithy/eventstream-serde-browser': 4.2.14 - '@smithy/eventstream-serde-config-resolver': 4.3.14 - '@smithy/eventstream-serde-node': 4.2.14 - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/hash-node': 4.2.14 - '@smithy/invalid-dependency': 4.2.14 - '@smithy/middleware-content-length': 4.2.14 - '@smithy/middleware-endpoint': 4.4.32 - '@smithy/middleware-retry': 4.5.7 - '@smithy/middleware-serde': 4.2.20 - '@smithy/middleware-stack': 4.2.14 - '@smithy/node-config-provider': 4.3.14 - '@smithy/node-http-handler': 4.6.1 - '@smithy/protocol-http': 5.3.14 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-base64': 4.3.2 - '@smithy/util-body-length-browser': 4.2.2 - '@smithy/util-body-length-node': 4.2.3 - '@smithy/util-defaults-mode-browser': 4.3.49 - '@smithy/util-defaults-mode-node': 4.2.54 - '@smithy/util-endpoints': 3.4.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.6 - '@smithy/util-stream': 4.5.25 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.974.8': - dependencies: - '@aws-sdk/types': 3.973.8 - '@aws-sdk/xml-builder': 3.972.22 - '@smithy/core': 3.23.17 - '@smithy/node-config-provider': 4.3.14 - '@smithy/property-provider': 4.2.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.3.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.6 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.972.34': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.972.36': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/node-http-handler': 4.6.1 - '@smithy/property-provider': 4.2.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 - '@smithy/util-stream': 4.5.25 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.972.38': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/credential-provider-env': 3.972.34 - '@aws-sdk/credential-provider-http': 3.972.36 - '@aws-sdk/credential-provider-login': 3.972.38 - '@aws-sdk/credential-provider-process': 3.972.34 - '@aws-sdk/credential-provider-sso': 3.972.38 - '@aws-sdk/credential-provider-web-identity': 3.972.38 - '@aws-sdk/nested-clients': 3.997.6 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/credential-provider-node': 3.972.51 + '@aws-sdk/eventstream-handler-node': 3.972.19 + '@aws-sdk/middleware-eventstream': 3.972.15 + '@aws-sdk/middleware-websocket': 3.972.25 + '@aws-sdk/token-providers': 3.1048.0 '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.2.14 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 + '@smithy/core': 3.24.6 + '@smithy/fetch-http-handler': 5.4.6 + '@smithy/node-http-handler': 4.7.3 '@smithy/types': 4.14.1 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-login@3.972.38': + '@aws-sdk/core@3.974.17': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.10 + '@aws-sdk/xml-builder': 3.972.27 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/core': 3.24.6 + '@smithy/signature-v4': 5.4.6 + '@smithy/types': 4.14.3 + bowser: 2.14.1 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-node@3.972.39': + '@aws-sdk/credential-provider-env@3.972.43': dependencies: - '@aws-sdk/credential-provider-env': 3.972.34 - '@aws-sdk/credential-provider-http': 3.972.36 - '@aws-sdk/credential-provider-ini': 3.972.38 - '@aws-sdk/credential-provider-process': 3.972.34 - '@aws-sdk/credential-provider-sso': 3.972.38 - '@aws-sdk/credential-provider-web-identity': 3.972.38 - '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.2.14 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-process@3.972.34': + '@aws-sdk/credential-provider-http@3.972.45': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/fetch-http-handler': 5.4.6 + '@smithy/node-http-handler': 4.7.7 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.38': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/token-providers': 3.1041.0 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 + '@aws-sdk/credential-provider-ini@3.972.49': + dependencies: + '@aws-sdk/core': 3.974.17 + '@aws-sdk/credential-provider-env': 3.972.43 + '@aws-sdk/credential-provider-http': 3.972.45 + '@aws-sdk/credential-provider-login': 3.972.48 + '@aws-sdk/credential-provider-process': 3.972.43 + '@aws-sdk/credential-provider-sso': 3.972.48 + '@aws-sdk/credential-provider-web-identity': 3.972.48 + '@aws-sdk/nested-clients': 3.997.16 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/credential-provider-imds': 4.3.8 + '@smithy/types': 4.14.3 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.38': + '@aws-sdk/credential-provider-login@3.972.48': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/nested-clients': 3.997.16 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/eventstream-handler-node@3.972.14': - dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/eventstream-codec': 4.2.14 - '@smithy/types': 4.14.1 + '@aws-sdk/credential-provider-node@3.972.51': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.43 + '@aws-sdk/credential-provider-http': 3.972.45 + '@aws-sdk/credential-provider-ini': 3.972.49 + '@aws-sdk/credential-provider-process': 3.972.43 + '@aws-sdk/credential-provider-sso': 3.972.48 + '@aws-sdk/credential-provider-web-identity': 3.972.48 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/credential-provider-imds': 4.3.8 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/middleware-eventstream@3.972.10': + '@aws-sdk/credential-provider-process@3.972.43': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.972.10': + '@aws-sdk/credential-provider-sso@3.972.48': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/nested-clients': 3.997.16 + '@aws-sdk/token-providers': 3.1062.0 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.972.10': + '@aws-sdk/credential-provider-web-identity@3.972.48': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/nested-clients': 3.997.16 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.11': + '@aws-sdk/eventstream-handler-node@3.972.19': dependencies: - '@aws-sdk/types': 3.973.8 - '@aws/lambda-invoke-store': 0.2.4 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.37': + '@aws-sdk/middleware-eventstream@3.972.15': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-arn-parser': 3.972.3 - '@smithy/core': 3.23.17 - '@smithy/node-config-provider': 4.3.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 - '@smithy/util-config-provider': 4.2.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-stream': 4.5.25 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.972.38': - dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@smithy/core': 3.23.17 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 - '@smithy/util-retry': 4.3.6 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/middleware-websocket@3.972.16': + '@aws-sdk/middleware-websocket@3.972.25': dependencies: - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-format-url': 3.972.10 - '@smithy/eventstream-codec': 4.2.14 - '@smithy/eventstream-serde-browser': 4.2.14 - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.3.2 - '@smithy/util-hex-encoding': 4.2.2 - '@smithy/util-utf8': 4.2.2 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/fetch-http-handler': 5.4.6 + '@smithy/signature-v4': 5.4.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.6': + '@aws-sdk/nested-clients@3.997.16': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.974.8 - '@aws-sdk/middleware-host-header': 3.972.10 - '@aws-sdk/middleware-logger': 3.972.10 - '@aws-sdk/middleware-recursion-detection': 3.972.11 - '@aws-sdk/middleware-user-agent': 3.972.38 - '@aws-sdk/region-config-resolver': 3.972.13 - '@aws-sdk/signature-v4-multi-region': 3.996.25 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@aws-sdk/util-user-agent-browser': 3.972.10 - '@aws-sdk/util-user-agent-node': 3.973.24 - '@smithy/config-resolver': 4.4.17 - '@smithy/core': 3.23.17 - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/hash-node': 4.2.14 - '@smithy/invalid-dependency': 4.2.14 - '@smithy/middleware-content-length': 4.2.14 - '@smithy/middleware-endpoint': 4.4.32 - '@smithy/middleware-retry': 4.5.7 - '@smithy/middleware-serde': 4.2.20 - '@smithy/middleware-stack': 4.2.14 - '@smithy/node-config-provider': 4.3.14 - '@smithy/node-http-handler': 4.6.1 - '@smithy/protocol-http': 5.3.14 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-base64': 4.3.2 - '@smithy/util-body-length-browser': 4.2.2 - '@smithy/util-body-length-node': 4.2.3 - '@smithy/util-defaults-mode-browser': 4.3.49 - '@smithy/util-defaults-mode-node': 4.2.54 - '@smithy/util-endpoints': 3.4.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.6 - '@smithy/util-utf8': 4.2.2 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/signature-v4-multi-region': 3.996.31 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/fetch-http-handler': 5.4.6 + '@smithy/node-http-handler': 4.7.7 + '@smithy/types': 4.14.3 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/region-config-resolver@3.972.13': + '@aws-sdk/signature-v4-multi-region@3.996.31': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/config-resolver': 4.4.17 - '@smithy/node-config-provider': 4.3.14 - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.10 + '@smithy/signature-v4': 5.4.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.25': + '@aws-sdk/token-providers@3.1048.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.37 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/nested-clients': 3.997.16 '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 + '@smithy/core': 3.24.6 '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1041.0': + '@aws-sdk/token-providers@3.1062.0': dependencies: - '@aws-sdk/core': 3.974.8 - '@aws-sdk/nested-clients': 3.997.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 + '@aws-sdk/core': 3.974.17 + '@aws-sdk/nested-clients': 3.997.16 + '@aws-sdk/types': 3.973.10 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/types@3.973.8': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.972.3': + '@aws-sdk/types@3.973.10': dependencies: + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.996.8': - dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-endpoints': 3.4.2 - tslib: 2.8.1 - - '@aws-sdk/util-format-url@3.972.10': + '@aws-sdk/types@3.973.8': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/querystring-builder': 4.2.14 '@smithy/types': 4.14.1 tslib: 2.8.1 @@ -16867,27 +16665,10 @@ snapshots: dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.972.10': + '@aws-sdk/xml-builder@3.972.27': dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.1 - bowser: 2.14.1 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.973.24': - dependencies: - '@aws-sdk/middleware-user-agent': 3.972.38 - '@aws-sdk/types': 3.973.8 - '@smithy/node-config-provider': 4.3.14 - '@smithy/types': 4.14.1 - '@smithy/util-config-provider': 4.2.2 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.972.22': - dependencies: - '@nodable/entities': 2.1.0 - '@smithy/types': 4.14.1 - fast-xml-parser: 5.7.2 + '@smithy/types': 4.14.3 + fast-xml-parser: 5.7.3 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.4': {} @@ -17440,26 +17221,8 @@ snapshots: '@clack/core': 1.1.0 sisteransi: 1.0.5 - '@cloudflare/codemode@0.3.4(@modelcontextprotocol/sdk@1.29.0)(zod@4.3.6)': - dependencies: - '@types/json-schema': 7.0.15 - acorn: 8.16.0 - optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0 - zod: 4.3.6 - '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/shell@0.3.6(@modelcontextprotocol/sdk@1.29.0)(zod@4.3.6)': - dependencies: - '@cloudflare/codemode': 0.3.4(@modelcontextprotocol/sdk@1.29.0)(zod@4.3.6) - isomorphic-git: 1.37.6 - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - '@tanstack/ai' - - ai - - zod - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1)': dependencies: unenv: 2.0.0-rc.24 @@ -17471,7 +17234,21 @@ snapshots: '@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: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) + wrangler: 4.95.0(@cloudflare/workers-types@4.20260527.1) + ws: 8.20.1 + transitivePeerDependencies: + - '@cloudflare/workers-types' + - bufferutil + - utf-8-validate + - workerd + + '@cloudflare/vite-plugin@1.39.0(@cloudflare/workers-types@4.20260527.1)(vite@8.0.16)': + 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.16(@types/node@22.19.19)(esbuild@0.25.5)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) wrangler: 4.95.0(@cloudflare/workers-types@4.20260527.1) ws: 8.20.1 transitivePeerDependencies: @@ -17506,12 +17283,12 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@5.2.0(tinybench@2.9.0)(vite@7.3.2)(vitest@4.1.0)': + '@codspeed/vitest-plugin@5.2.0(tinybench@2.9.0)(vite@8.0.16)(vitest@4.1.0)': dependencies: '@codspeed/core': 5.2.0 tinybench: 2.9.0 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.16(@types/node@22.19.19)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - debug @@ -17855,6 +17632,40 @@ snapshots: gonzales-pe: 4.3.0 node-source-walk: 7.0.1 + '@earendil-works/pi-agent-core@0.78.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6)': + dependencies: + '@earendil-works/pi-ai': 0.78.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6) + 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.78.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6)': + dependencies: + '@anthropic-ai/sdk': 0.91.1(zod@4.3.6) + '@aws-sdk/client-bedrock-runtime': 3.1048.0 + '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0) + '@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.20.1)(zod@4.3.6) + partial-json: 0.1.7 + typebox: 1.1.38 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + '@electric-sql/pglite@0.3.16': {} '@emmetio/abbreviation@2.3.3': @@ -17880,12 +17691,23 @@ snapshots: '@emmetio/stream-reader@2.2.0': {} + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + '@emnapi/core@1.9.1': dependencies: '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 @@ -17896,6 +17718,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@envelop/instrumentation@1.0.0': dependencies: '@whatwg-node/promise-helpers': 1.3.2 @@ -18280,55 +18107,86 @@ snapshots: fastq: 1.20.1 glob: 13.0.3 - '@flue/cli@0.3.10(typescript@6.0.3)(wrangler@4.95.0)(ws@8.20.1)(zod@4.3.6)': + '@flue/cli@0.8.1(@cloudflare/workers-types@4.20260527.1)(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@types/node@22.19.19)(esbuild@0.25.5)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(typebox@1.1.38)(typescript@6.0.3)(wrangler@4.95.0)(yaml@2.9.0)(zod-to-json-schema@3.25.2)(zod@4.3.6)': dependencies: - '@flue/sdk': 0.3.10(typescript@6.0.3)(wrangler@4.95.0)(ws@8.20.1)(zod@4.3.6) + '@cloudflare/vite-plugin': 1.39.0(@cloudflare/workers-types@4.20260527.1)(vite@8.0.16) + '@flue/runtime': 0.8.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.2)(zod@4.3.6) '@vercel/detect-agent': 1.2.3 + package-up: 5.0.0 + valibot: 1.2.0(typescript@6.0.3) + vite: 8.0.16(@types/node@22.19.19)(esbuild@0.25.5)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) + optionalDependencies: + wrangler: 4.95.0(@cloudflare/workers-types@4.20260527.1) transitivePeerDependencies: - '@cfworker/json-schema' - - '@tanstack/ai' - - ai - - aws-crt + - '@cloudflare/workers-types' + - '@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 - - wrangler - - ws + - workerd + - yaml - zod + - zod-openapi + - zod-to-json-schema - '@flue/sdk@0.3.10(typescript@6.0.3)(wrangler@4.95.0)(ws@8.20.1)(zod@4.3.6)': + '@flue/runtime@0.8.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.2)(zod@4.3.6)': dependencies: - '@cloudflare/shell': 0.3.6(@modelcontextprotocol/sdk@1.29.0)(zod@4.3.6) - '@hono/node-server': 1.19.14(hono@4.12.18) - '@mariozechner/pi-agent-core': 0.71.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6) - '@mariozechner/pi-ai': 0.71.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6) + '@earendil-works/pi-agent-core': 0.78.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6) + '@earendil-works/pi-ai': 0.78.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6) + '@hono/node-server': 2.0.4(hono@4.12.18) + '@hono/standard-validator': 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.18) '@modelcontextprotocol/sdk': 1.29.0 + '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(@valibot/to-json-schema@1.5.0)(quansync@0.2.11)(typebox@1.1.38)(valibot@1.2.0)(zod-to-json-schema@3.25.2)(zod@4.3.6) + '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5)(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.2.0)(zod@4.3.6) '@valibot/to-json-schema': 1.5.0(valibot@1.2.0) - esbuild: 0.25.5 hono: 4.12.18 - just-bash: 2.14.3 - package-up: 5.0.0 + hono-openapi: 1.3.0(@hono/standard-validator@0.2.2)(@standard-community/standard-json@0.3.5)(@standard-community/standard-openapi@0.2.9)(@types/json-schema@7.0.15)(hono@4.12.18)(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.2.0(typescript@6.0.3) - optionalDependencies: - wrangler: 4.95.0(@cloudflare/workers-types@4.20260527.1) + ws: 8.20.1 transitivePeerDependencies: - '@cfworker/json-schema' - - '@tanstack/ai' - - ai - - aws-crt + - '@standard-schema/spec' + - '@types/json-schema' + - arktype - bufferutil + - effect - supports-color + - sury + - typebox - typescript - utf-8-validate - - ws - zod + - zod-openapi + - zod-to-json-schema '@fontsource/monofett@5.2.8': {} '@fontsource/montserrat@5.2.8': {} - '@google/genai@1.51.0(@modelcontextprotocol/sdk@1.29.0)': + '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0)': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 @@ -18345,6 +18203,15 @@ snapshots: dependencies: hono: 4.12.18 + '@hono/node-server@2.0.4(hono@4.12.18)': + dependencies: + hono: 4.12.18 + + '@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.18)': + dependencies: + '@standard-schema/spec': 1.1.0 + hono: 4.12.18 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -18619,41 +18486,6 @@ snapshots: - encoding - supports-color - '@mariozechner/pi-agent-core@0.71.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6)': - dependencies: - '@mariozechner/pi-ai': 0.71.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6) - typebox: 1.1.37 - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - aws-crt - - bufferutil - - supports-color - - utf-8-validate - - ws - - zod - - '@mariozechner/pi-ai@0.71.1(@modelcontextprotocol/sdk@1.29.0)(ws@8.20.1)(zod@4.3.6)': - dependencies: - '@anthropic-ai/sdk': 0.91.1(zod@4.3.6) - '@aws-sdk/client-bedrock-runtime': 3.1041.0 - '@google/genai': 1.51.0(@modelcontextprotocol/sdk@1.29.0) - '@mistralai/mistralai': 2.2.1 - chalk: 5.6.2 - openai: 6.26.0(ws@8.20.1)(zod@4.3.6) - partial-json: 0.1.7 - proxy-agent: 6.5.0 - typebox: 1.1.37 - undici: 7.24.8 - zod-to-json-schema: 3.25.2(zod@4.3.6) - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - aws-crt - - bufferutil - - supports-color - - utf-8-validate - - ws - - zod - '@markdoc/markdoc@0.5.4(@types/react@18.3.28)(react@19.2.4)': optionalDependencies: '@types/linkify-it': 3.0.5 @@ -18746,6 +18578,13 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.1 + optional: true + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': dependencies: '@emnapi/core': 1.9.1 @@ -19027,7 +18866,7 @@ snapshots: '@netlify/dev': 4.18.3(@azure/identity@4.13.0)(@vercel/functions@3.4.3)(rollup@4.59.1) '@netlify/dev-utils': 4.4.3 dedent: 1.7.1 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -19218,6 +19057,8 @@ snapshots: '@oslojs/encoding@1.1.0': {} + '@oxc-project/types@0.133.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.17.1': optional: true @@ -19266,9 +19107,9 @@ snapshots: '@oxc-resolver/binding-openharmony-arm64@11.17.1': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.17.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@oxc-resolver/binding-wasm32-wasi@11.17.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -19382,7 +19223,7 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) magic-string: 0.30.21 picocolors: 1.1.1 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-prerender-plugin: 0.5.12(vite@7.3.2) zimmerframe: 1.1.4 transitivePeerDependencies: @@ -19413,7 +19254,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.29.0 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -19446,12 +19287,63 @@ snapshots: dependencies: dotenv: 16.6.1 + '@rolldown/binding-android-arm64@1.0.3': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.3': + optional: true + + '@rolldown/binding-darwin-x64@1.0.3': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.3': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.3': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.3': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.3': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.3': + 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.3': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.3': + optional: true + '@rolldown/pluginutils@1.0.0-rc.2': {} '@rolldown/pluginutils@1.0.0-rc.3': {} '@rolldown/pluginutils@1.0.0-rc.4': {} + '@rolldown/pluginutils@1.0.1': {} + '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 @@ -19628,338 +19520,105 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.4 - '@shikijs/engine-oniguruma@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - - '@shikijs/primitive@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/rehype@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - '@types/hast': 3.0.4 - hast-util-to-string: 3.0.1 - shiki: 4.0.2 - unified: 11.0.5 - unist-util-visit: 5.1.0 - - '@shikijs/themes@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - - '@shikijs/twoslash@4.0.2(typescript@6.0.3)': - dependencies: - '@shikijs/core': 4.0.2 - '@shikijs/types': 4.0.2 - twoslash: 0.3.8(typescript@6.0.3) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@shikijs/types@4.0.2': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@sindresorhus/is@7.2.0': {} - - '@sindresorhus/merge-streams@2.3.0': {} - - '@smithy/config-resolver@4.4.17': - dependencies: - '@smithy/node-config-provider': 4.3.14 - '@smithy/types': 4.14.1 - '@smithy/util-config-provider': 4.2.2 - '@smithy/util-endpoints': 3.4.2 - '@smithy/util-middleware': 4.2.14 - tslib: 2.8.1 - - '@smithy/core@3.23.17': - dependencies: - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-base64': 4.3.2 - '@smithy/util-body-length-browser': 4.2.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-stream': 4.5.25 - '@smithy/util-utf8': 4.2.2 - '@smithy/uuid': 1.1.2 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@4.2.14': - dependencies: - '@smithy/node-config-provider': 4.3.14 - '@smithy/property-provider': 4.2.14 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - tslib: 2.8.1 - - '@smithy/eventstream-codec@4.2.14': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.14.1 - '@smithy/util-hex-encoding': 4.2.2 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@4.2.14': - dependencies: - '@smithy/eventstream-serde-universal': 4.2.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@4.3.14': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@4.2.14': - dependencies: - '@smithy/eventstream-serde-universal': 4.2.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@4.2.14': - dependencies: - '@smithy/eventstream-codec': 4.2.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.3.17': - dependencies: - '@smithy/protocol-http': 5.3.14 - '@smithy/querystring-builder': 4.2.14 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.3.2 - tslib: 2.8.1 - - '@smithy/hash-node@4.2.14': - dependencies: - '@smithy/types': 4.14.1 - '@smithy/util-buffer-from': 4.2.2 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.2.14': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.2.2': - dependencies: - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.2.14': - dependencies: - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.4.32': - dependencies: - '@smithy/core': 3.23.17 - '@smithy/middleware-serde': 4.2.20 - '@smithy/node-config-provider': 4.3.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-middleware': 4.2.14 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.5.7': - dependencies: - '@smithy/core': 3.23.17 - '@smithy/node-config-provider': 4.3.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/service-error-classification': 4.3.1 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.6 - '@smithy/uuid': 1.1.2 - tslib: 2.8.1 - - '@smithy/middleware-serde@4.2.20': - dependencies: - '@smithy/core': 3.23.17 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.2.14': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.3.14': - dependencies: - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.6.1': - dependencies: - '@smithy/protocol-http': 5.3.14 - '@smithy/querystring-builder': 4.2.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/property-provider@4.2.14': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/protocol-http@5.3.14': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.2.14': - dependencies: - '@smithy/types': 4.14.1 - '@smithy/util-uri-escape': 4.2.2 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.2.14': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.3.1': + '@shikijs/engine-oniguruma@4.0.2': dependencies: - '@smithy/types': 4.14.1 + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 - '@smithy/shared-ini-file-loader@4.4.9': + '@shikijs/langs@4.0.2': dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 + '@shikijs/types': 4.0.2 - '@smithy/signature-v4@5.3.14': + '@shikijs/primitive@4.0.2': dependencies: - '@smithy/is-array-buffer': 4.2.2 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 - '@smithy/util-hex-encoding': 4.2.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-uri-escape': 4.2.2 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 - '@smithy/smithy-client@4.12.13': + '@shikijs/rehype@4.0.2': dependencies: - '@smithy/core': 3.23.17 - '@smithy/middleware-endpoint': 4.4.32 - '@smithy/middleware-stack': 4.2.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 - '@smithy/util-stream': 4.5.25 - tslib: 2.8.1 + '@shikijs/types': 4.0.2 + '@types/hast': 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 4.0.2 + unified: 11.0.5 + unist-util-visit: 5.1.0 - '@smithy/types@4.14.1': + '@shikijs/themes@4.0.2': dependencies: - tslib: 2.8.1 + '@shikijs/types': 4.0.2 - '@smithy/url-parser@4.2.14': + '@shikijs/twoslash@4.0.2(typescript@6.0.3)': dependencies: - '@smithy/querystring-parser': 4.2.14 - '@smithy/types': 4.14.1 - tslib: 2.8.1 + '@shikijs/core': 4.0.2 + '@shikijs/types': 4.0.2 + twoslash: 0.3.8(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color - '@smithy/util-base64@4.3.2': + '@shikijs/types@4.0.2': dependencies: - '@smithy/util-buffer-from': 4.2.2 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 - '@smithy/util-body-length-browser@4.2.2': - dependencies: - tslib: 2.8.1 + '@shikijs/vscode-textmate@10.0.2': {} - '@smithy/util-body-length-node@4.2.3': - dependencies: - tslib: 2.8.1 + '@sindresorhus/is@7.2.0': {} - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 + '@sindresorhus/merge-streams@2.3.0': {} - '@smithy/util-buffer-from@4.2.2': + '@smithy/core@3.24.6': dependencies: - '@smithy/is-array-buffer': 4.2.2 + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@smithy/util-config-provider@4.2.2': + '@smithy/credential-provider-imds@4.3.8': dependencies: + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.49': + '@smithy/fetch-http-handler@5.4.6': dependencies: - '@smithy/property-provider': 4.2.14 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.54': + '@smithy/is-array-buffer@2.2.0': dependencies: - '@smithy/config-resolver': 4.4.17 - '@smithy/credential-provider-imds': 4.2.14 - '@smithy/node-config-provider': 4.3.14 - '@smithy/property-provider': 4.2.14 - '@smithy/smithy-client': 4.12.13 - '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/util-endpoints@3.4.2': + '@smithy/node-http-handler@4.7.3': dependencies: - '@smithy/node-config-provider': 4.3.14 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@smithy/util-hex-encoding@4.2.2': + '@smithy/node-http-handler@4.7.7': dependencies: + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@smithy/util-middleware@4.2.14': + '@smithy/signature-v4@5.4.6': dependencies: - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 tslib: 2.8.1 - '@smithy/util-retry@4.3.6': + '@smithy/types@4.14.1': dependencies: - '@smithy/service-error-classification': 4.3.1 - '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/util-stream@4.5.25': + '@smithy/types@4.14.3': dependencies: - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/node-http-handler': 4.6.1 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.3.2 - '@smithy/util-buffer-from': 4.2.2 - '@smithy/util-hex-encoding': 4.2.2 - '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/util-uri-escape@4.2.2': + '@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': @@ -19967,15 +19626,6 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.2.2': - dependencies: - '@smithy/util-buffer-from': 4.2.2 - tslib: 2.8.1 - - '@smithy/uuid@1.1.2': - dependencies: - tslib: 2.8.1 - '@so-ric/colorspace@1.1.6': dependencies: color: 5.0.3 @@ -19987,6 +19637,28 @@ 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.5.0)(quansync@0.2.11)(typebox@1.1.38)(valibot@1.2.0)(zod-to-json-schema@3.25.2)(zod@4.3.6)': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/json-schema': 7.0.15 + quansync: 0.2.11 + optionalDependencies: + '@valibot/to-json-schema': 1.5.0(valibot@1.2.0) + typebox: 1.1.38 + valibot: 1.2.0(typescript@6.0.3) + zod: 4.3.6 + zod-to-json-schema: 3.25.2(zod@4.3.6) + + '@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5)(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.2.0)(zod@4.3.6)': + 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.5.0)(quansync@0.2.11)(typebox@1.1.38)(valibot@1.2.0)(zod-to-json-schema@3.25.2)(zod@4.3.6) + '@standard-schema/spec': 1.1.0 + openapi-types: 12.1.3 + optionalDependencies: + typebox: 1.1.38 + valibot: 1.2.0(typescript@6.0.3) + zod: 4.3.6 + '@standard-schema/spec@1.1.0': {} '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': @@ -19998,7 +19670,7 @@ snapshots: '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.55.3)(vite@7.3.2) obug: 2.1.1 svelte: 5.55.3 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.55.3)(vite@7.3.2)': dependencies: @@ -20007,7 +19679,7 @@ snapshots: magic-string: 0.30.21 obug: 2.1.1 svelte: 5.55.3 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vitefu: 1.1.2(vite@7.3.2) '@tailwindcss/node@4.2.2': @@ -20076,7 +19748,14 @@ snapshots: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) + + '@tailwindcss/vite@4.2.2(vite@8.0.16)': + dependencies: + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 + tailwindcss: 4.2.2 + vite: 8.0.16(@types/node@22.19.19)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) '@test/server-entry-fake-adapter@file:packages/astro/test/fixtures/server-entry/fake-adapter': dependencies: @@ -20103,8 +19782,8 @@ snapshots: '@testing-library/svelte-core': 1.0.0(svelte@5.55.3) svelte: 5.55.3 optionalDependencies: - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) '@textlint/ast-node-types@15.5.1': {} @@ -20144,8 +19823,6 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@tootallnate/quickjs-emscripten@0.23.0': {} - '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -20508,11 +20185,11 @@ snapshots: '@vercel/detect-agent@1.2.3': {} - '@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.38)': + '@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.48)': dependencies: '@vercel/oidc': 3.2.0 optionalDependencies: - '@aws-sdk/credential-provider-web-identity': 3.972.38 + '@aws-sdk/credential-provider-web-identity': 3.972.48 '@vercel/nft@0.29.4(rollup@4.59.1)': dependencies: @@ -20569,7 +20246,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -20580,7 +20257,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-rc.4 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vue: 3.5.30(typescript@6.0.3) transitivePeerDependencies: - supports-color @@ -20588,7 +20265,13 @@ snapshots: '@vitejs/plugin-vue@6.0.5(vite@7.3.2)(vue@3.5.30)': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) + vue: 3.5.30(typescript@6.0.3) + + '@vitejs/plugin-vue@6.0.5(vite@8.0.16)(vue@3.5.30)': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 8.0.16(@types/node@22.19.19)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vue: 3.5.30(typescript@6.0.3) '@vitest/expect@4.1.0': @@ -20606,7 +20289,7 @@ snapshots: estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.0': dependencies: @@ -21131,10 +20814,6 @@ snapshots: ast-module-types@6.0.1: {} - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - astral-regex@2.0.0: {} astring@1.9.0: {} @@ -21164,8 +20843,6 @@ snapshots: marked-smartypants: 1.1.11(marked@12.0.2) ultrahtml: 1.6.0 - async-lock@1.4.1: {} - async-sema@3.1.1: {} async@3.2.6: {} @@ -21209,10 +20886,6 @@ snapshots: postcss: 8.5.12 postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - avvio@9.2.0: dependencies: '@fastify/error': 4.2.0 @@ -21269,8 +20942,6 @@ snapshots: baseline-browser-mapping@2.9.19: {} - basic-ftp@5.3.1: {} - bcp-47-match@2.0.3: {} better-ajv-errors@1.2.0(ajv@8.20.0): @@ -21405,13 +21076,6 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -21516,8 +21180,6 @@ snapshots: cjs-module-lexer@2.2.0: {} - clean-git-ref@2.0.1: {} - cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -21758,8 +21420,6 @@ snapshots: data-uri-to-buffer@4.0.1: {} - data-uri-to-buffer@6.0.2: {} - dataloader@1.4.0: {} debug@4.4.3(supports-color@8.1.1): @@ -21783,6 +21443,7 @@ snapshots: decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 + optional: true dedent-js@1.0.1: {} @@ -21818,12 +21479,6 @@ snapshots: defu@6.1.7: {} - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - delayed-stream@1.0.0: {} depd@1.1.2: {} @@ -21904,8 +21559,6 @@ snapshots: dependencies: dequal: 2.0.3 - diff3@0.0.3: {} - diff@4.0.4: {} diff@7.0.0: {} @@ -22455,9 +22108,10 @@ snapshots: dependencies: path-expression-matcher: 1.5.0 - fast-xml-parser@5.3.3: + fast-xml-builder@1.2.0: dependencies: - strnum: 2.2.3 + path-expression-matcher: 1.5.0 + xml-naming: 0.1.0 fast-xml-parser@5.7.2: dependencies: @@ -22466,6 +22120,21 @@ snapshots: path-expression-matcher: 1.5.0 strnum: 2.2.3 + fast-xml-parser@5.7.3: + dependencies: + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.2.3 + + fast-xml-parser@5.8.0: + dependencies: + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 + xml-naming: 0.1.0 + fastify-plugin@5.1.0: {} fastify@5.8.5: @@ -22597,10 +22266,6 @@ snapshots: dependencies: tiny-inflate: 1.0.3 - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -22734,14 +22399,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.5: - dependencies: - basic-ftp: 5.3.1 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - github-from-package@0.0.0: optional: true @@ -23034,6 +22691,16 @@ snapshots: he@1.2.0: {} + hono-openapi@1.3.0(@hono/standard-validator@0.2.2)(@standard-community/standard-json@0.3.5)(@standard-community/standard-openapi@0.2.9)(@types/json-schema@7.0.15)(hono@4.12.18)(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.5.0)(quansync@0.2.11)(typebox@1.1.38)(valibot@1.2.0)(zod-to-json-schema@3.25.2)(zod@4.3.6) + '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5)(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(valibot@1.2.0)(zod@4.3.6) + '@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.18) + hono: 4.12.18 + hono@4.12.18: {} hookable@5.5.3: {} @@ -23150,8 +22817,6 @@ snapshots: ip-address@10.1.0: {} - ip-address@10.2.0: {} - ipaddr.js@1.9.1: {} ipaddr.js@2.3.0: {} @@ -23208,8 +22873,6 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-callable@1.2.7: {} - is-ci@2.0.0: dependencies: ci-info: 2.0.0 @@ -23276,10 +22939,6 @@ snapshots: dependencies: better-path-resolve: 1.0.0 - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.20 - is-unicode-supported@0.1.0: {} is-unicode-supported@1.3.0: {} @@ -23304,24 +22963,8 @@ snapshots: isarray@1.0.0: {} - isarray@2.0.5: {} - isexe@2.0.0: {} - isomorphic-git@1.37.6: - dependencies: - async-lock: 1.4.1 - clean-git-ref: 2.0.1 - crc-32: 1.2.2 - diff3: 0.0.3 - ignore: 5.3.2 - minimisted: 2.0.1 - pako: 1.0.11 - pify: 4.0.1 - readable-stream: 4.7.0 - sha.js: 2.4.12 - simple-get: 4.0.1 - istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -23441,10 +23084,10 @@ snapshots: junk@4.0.1: {} - just-bash@2.14.3: + just-bash@3.0.1: dependencies: diff: 8.0.3 - fast-xml-parser: 5.3.3 + fast-xml-parser: 5.8.0 file-type: 21.3.4 ini: 6.0.0 minimatch: 10.2.4 @@ -23493,7 +23136,7 @@ snapshots: kleur@4.1.5: {} - knip@5.82.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@22.19.19)(typescript@6.0.3): + knip@5.82.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.19)(typescript@6.0.3): dependencies: '@nodelib/fs.walk': 1.2.8 '@types/node': 22.19.19 @@ -23502,7 +23145,7 @@ snapshots: jiti: 2.6.1 js-yaml: 4.1.1 minimist: 1.2.8 - oxc-resolver: 11.17.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + oxc-resolver: 11.17.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picocolors: 1.1.1 picomatch: 4.0.4 smol-toml: 1.6.1 @@ -23523,6 +23166,8 @@ snapshots: dotenv: 16.6.1 winston: 3.19.0 + layerr@3.0.0: {} + lazystream@1.0.1: dependencies: readable-stream: 2.3.8 @@ -23734,8 +23379,6 @@ snapshots: dependencies: yallist: 4.0.0 - lru-cache@7.18.3: {} - luxon@3.7.2: {} lz-string@1.5.0: {} @@ -24327,7 +23970,8 @@ snapshots: mimic-function@5.0.1: {} - mimic-response@3.1.0: {} + mimic-response@3.1.0: + optional: true miniflare@4.20260526.0: dependencies: @@ -24359,10 +24003,6 @@ snapshots: minimist@1.2.8: {} - minimisted@2.0.1: - dependencies: - minimist: 1.2.8 - minipass@7.1.2: {} minizlib@3.1.0: @@ -24428,6 +24068,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.12: {} + nanoid@5.1.9: {} nanostores@1.1.1: {} @@ -24445,8 +24087,6 @@ snapshots: netlify-redirector@0.5.0: {} - netmask@2.1.1: {} - nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -24618,6 +24258,8 @@ snapshots: ws: 8.20.1 zod: 4.3.6 + openapi-types@12.1.3: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -24655,7 +24297,7 @@ snapshots: - debug - supports-color - oxc-resolver@11.17.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + oxc-resolver@11.17.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.17.1 '@oxc-resolver/binding-android-arm64': 11.17.1 @@ -24673,7 +24315,7 @@ snapshots: '@oxc-resolver/binding-linux-x64-gnu': 11.17.1 '@oxc-resolver/binding-linux-x64-musl': 11.17.1 '@oxc-resolver/binding-openharmony-arm64': 11.17.1 - '@oxc-resolver/binding-wasm32-wasi': 11.17.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@oxc-resolver/binding-wasm32-wasi': 11.17.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) '@oxc-resolver/binding-win32-arm64-msvc': 11.17.1 '@oxc-resolver/binding-win32-ia32-msvc': 11.17.1 '@oxc-resolver/binding-win32-x64-msvc': 11.17.1 @@ -24747,24 +24389,6 @@ snapshots: dependencies: p-timeout: 6.1.4 - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3(supports-color@8.1.1) - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.1.1 - package-json-from-dist@1.0.1: {} package-manager-detector@0.2.11: @@ -24940,8 +24564,6 @@ snapshots: port-authority@2.0.1: {} - possible-typed-array-names@1.1.0: {} - postcss-attribute-case-insensitive@8.0.0(postcss@8.5.12): dependencies: postcss: 8.5.12 @@ -25184,6 +24806,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 + preact-render-to-string@6.6.6(preact@10.29.0): dependencies: preact: 10.29.0 @@ -25284,19 +24912,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@8.1.1) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - proxy-from-env@1.1.0: {} publint@0.3.17: @@ -25726,6 +25341,27 @@ snapshots: rfdc@1.4.1: {} + rolldown@1.0.3: + dependencies: + '@oxc-project/types': 0.133.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 + rollup@4.59.1: dependencies: '@types/estree': 1.0.8 @@ -25912,25 +25548,10 @@ snapshots: set-cookie-parser@2.7.2: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - setimmediate@1.0.5: {} setprototypeof@1.2.0: {} - sha.js@2.4.12: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - to-buffer: 1.2.2 - sharp@0.34.5: dependencies: '@img/colour': 1.0.0 @@ -26017,13 +25638,15 @@ snapshots: dependencies: kolorist: 1.8.0 - simple-concat@1.0.1: {} + simple-concat@1.0.1: + optional: true simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 + optional: true simple-invariant@2.0.1: {} @@ -26059,25 +25682,10 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 - smart-buffer@4.2.0: {} - smartypants@0.2.2: {} smol-toml@1.6.1: {} - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@8.1.1) - socks: 2.8.8 - transitivePeerDependencies: - - supports-color - - socks@2.8.8: - dependencies: - ip-address: 10.2.0 - smart-buffer: 4.2.0 - solid-js@1.9.11: dependencies: csstype: 3.2.3 @@ -26231,6 +25839,8 @@ snapshots: strnum@2.2.3: {} + strnum@2.3.0: {} + strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -26422,6 +26032,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinyrainbow@3.0.3: {} tmp-promise@3.0.3: @@ -26430,12 +26045,6 @@ snapshots: tmp@0.2.5: {} - to-buffer@1.2.2: - dependencies: - isarray: 2.0.5 - safe-buffer: 5.2.1 - typed-array-buffer: 1.0.3 - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -26550,13 +26159,7 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typebox@1.1.37: {} - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 + typebox@1.1.38: {} typed-rest-client@1.8.11: dependencies: @@ -26605,6 +26208,10 @@ snapshots: ulid@3.0.2: {} + ulidx@2.4.1: + dependencies: + layerr: 3.0.0 + ultrahtml@1.6.0: {} uncrypto@0.1.3: {} @@ -26732,7 +26339,7 @@ snapshots: optionalDependencies: '@azure/identity': 4.13.0 '@netlify/blobs': 10.7.5 - '@vercel/functions': 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.38) + '@vercel/functions': 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.48) untun@0.1.3: dependencies: @@ -26807,12 +26414,12 @@ snapshots: vite-dev-rpc@1.1.0(vite@7.3.2): dependencies: birpc: 2.9.0 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-hot-client: 2.1.0(vite@7.3.2) vite-hot-client@2.1.0(vite@7.3.2): dependencies: - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-plugin-inspect@11.3.3(vite@7.3.2): dependencies: @@ -26824,7 +26431,7 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-dev-rpc: 1.1.0(vite@7.3.2) transitivePeerDependencies: - supports-color @@ -26837,7 +26444,7 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.11 solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vitefu: 1.1.2(vite@7.3.2) transitivePeerDependencies: - supports-color @@ -26848,7 +26455,7 @@ snapshots: '@vue/devtools-kit': 8.1.0 '@vue/devtools-shared': 8.1.0 sirv: 3.0.2 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-plugin-inspect: 11.3.3(vite@7.3.2) vite-plugin-vue-inspector: 5.3.2(vite@7.3.2) transitivePeerDependencies: @@ -26867,7 +26474,7 @@ snapshots: '@vue/compiler-dom': 3.5.30 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -26879,7 +26486,7 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) vite-svg-loader@5.1.1(vue@3.5.30): dependencies: @@ -26889,7 +26496,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite@7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.4) @@ -26904,13 +26511,45 @@ snapshots: lightningcss: 1.32.0 sass: 1.98.0 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 + + vite@8.0.16(@types/node@22.19.19)(esbuild@0.25.5)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.0.3 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.19.19 + esbuild: 0.25.5 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.98.0 + tsx: 4.21.0 + yaml: 2.9.0 + + vite@8.0.16(@types/node@22.19.19)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.0.3 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.19.19 + esbuild: 0.28.0 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.98.0 + tsx: 4.21.0 + yaml: 2.9.0 vitefu@1.1.2(vite@7.3.2): optionalDependencies: - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0): dependencies: '@vitest/expect': 4.1.0 '@vitest/mocker': 4.1.0(vite@7.3.2) @@ -26930,7 +26569,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.16 tinyrainbow: 3.0.3 - vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.19)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -27098,16 +26737,6 @@ snapshots: which-pm-runs@1.1.0: {} - which-typed-array@1.1.20: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -27200,6 +26829,8 @@ snapshots: dependencies: is-wsl: 3.1.1 + xml-naming@0.1.0: {} + xml2js@0.5.0: dependencies: sax: 1.6.0 @@ -27247,6 +26878,8 @@ snapshots: yaml@2.8.3: {} + yaml@2.9.0: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 From d4b0cd111ca0958e5da8772e34dd4fdc3e3a89dc Mon Sep 17 00:00:00 2001 From: MA2153 <26630797+MA2153@users.noreply.github.com> Date: Mon, 8 Jun 2026 18:18:36 +0300 Subject: [PATCH 2/3] fix(cloudflare): inject headers for caching the assets folder (#16571) Co-authored-by: Claude Sonnet 4.6 Co-authored-by: Florian Lefebvre Co-authored-by: Malloo <26630797+Pouf5@users.noreply.github.com> --- .changeset/fix-cf-asset-cache-headers.md | 7 + packages/integrations/cloudflare/src/index.ts | 47 ++++- .../cloudflare/src/utils/headers.ts | 102 ++++++++++ .../cloudflare/test/headers.test.ts | 180 ++++++++++++++++++ .../cloudflare/test/with-base.test.ts | 22 +++ 5 files changed, 356 insertions(+), 2 deletions(-) create mode 100644 .changeset/fix-cf-asset-cache-headers.md create mode 100644 packages/integrations/cloudflare/src/utils/headers.ts create mode 100644 packages/integrations/cloudflare/test/headers.test.ts diff --git a/.changeset/fix-cf-asset-cache-headers.md b/.changeset/fix-cf-asset-cache-headers.md new file mode 100644 index 000000000000..cd09c8f219a6 --- /dev/null +++ b/.changeset/fix-cf-asset-cache-headers.md @@ -0,0 +1,7 @@ +--- +'@astrojs/cloudflare': minor +--- + +Sets immutable cache headers for static assets + +Static assets under `_astro` can be cached to improve performance. The adapter now automatically injects a `Cache-Control` header at build time when possible. diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index 44c3f57f3d02..0b88326c7053 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -1,15 +1,19 @@ import { createReadStream, existsSync, readFileSync } from 'node:fs'; -import { appendFile, readFile, rename, stat, writeFile } from 'node:fs/promises'; +import { appendFile, readFile, rename, stat, unlink, writeFile } from 'node:fs/promises'; import { relative } from 'node:path'; import { fileURLToPath } from 'node:url'; import { normalizePath } from 'vite'; import { createInterface } from 'node:readline/promises'; -import { removeLeadingForwardSlash } from '@astrojs/internal-helpers/path'; +import { + removeLeadingForwardSlash, + removeTrailingForwardSlash, +} from '@astrojs/internal-helpers/path'; import { createRedirectsFromAstroRoutes, printAsRedirects } from '@astrojs/underscore-redirects'; import { cloudflare as cfVitePlugin, type PluginConfig } from '@cloudflare/vite-plugin'; import type { AstroConfig, AstroIntegration, IntegrationResolvedRoute } from 'astro'; import { astroFrontmatterScanPlugin } from './esbuild-plugin-astro-frontmatter.js'; import { getParts } from './utils/generate-routes-json.js'; +import { buildAssetsHeadersContent } from './utils/headers.js'; import { type ImageServiceConfig, normalizeImageServiceConfig, @@ -529,6 +533,45 @@ export default function createIntegration({ } } + // Inject an immutable Cache-Control rule for hashed assets so browsers + // cache them across deploys. Skip when assets are served from another + // origin (build.assetsPrefix) or when the user's _headers already sets + // Cache-Control on a rule that would match the assets path — Cloudflare + // merges duplicate header values with a comma, which would otherwise + // produce a contradictory directive. + if (_config.build.assetsPrefix) { + logger.debug( + 'Skipping Cache-Control injection for assets — `build.assetsPrefix` is set, so assets are served from a different origin.', + ); + } else { + const headersPath = new URL('./_headers', _originalClientDir); + const result = await buildAssetsHeadersContent( + { + assetsDir: _config.build.assets, + basePrefix: removeTrailingForwardSlash(_config.base), + headersPath, + }, + (path) => readFile(path, 'utf-8'), + ); + if (result === null) { + logger.debug( + `Skipping Cache-Control injection — _headers already sets Cache-Control on a matching rule.`, + ); + } else { + // Atomic write: stage to a temp file, then rename, so a crash + // mid-write can't leave the user's _headers truncated. + const tempPath = new URL('./_headers.tmp', _originalClientDir); + try { + await writeFile(tempPath, result.content); + await rename(tempPath, headersPath); + } catch (err) { + await unlink(tempPath).catch(() => {}); + throw err; + } + logger.info(`Injected immutable Cache-Control for ${result.assetsPattern} into _headers.`); + } + } + let redirectsExists = false; try { const redirectsStat = await stat(new URL('./_redirects', _originalClientDir)); diff --git a/packages/integrations/cloudflare/src/utils/headers.ts b/packages/integrations/cloudflare/src/utils/headers.ts new file mode 100644 index 000000000000..ccf3ee3c72d7 --- /dev/null +++ b/packages/integrations/cloudflare/src/utils/headers.ts @@ -0,0 +1,102 @@ +/** + * Convert a Cloudflare `_headers` URL pattern (path portion) into a regex. + * + * Pattern syntax per Cloudflare docs: + * - `*` is a splat that matches anything greedily (one allowed per pattern). + * - `:name` is a placeholder that matches non-delimiter chars (no `/`). + * Names match `[A-Za-z]\w*`. + * - All other characters are literal. + */ +function cfHeadersPatternToRegex(pattern: string): RegExp { + let regexStr = ''; + let i = 0; + while (i < pattern.length) { + const ch = pattern[i]; + if (ch === '*') { + regexStr += '.*'; + i++; + } else if (ch === ':' && /[A-Za-z]/.test(pattern[i + 1] ?? '')) { + i++; + while (i < pattern.length && /\w/.test(pattern[i])) i++; + regexStr += '[^/]+'; + } else { + regexStr += ch.replace(/[.+?^${}()|[\]\\]/g, '\\$&'); + i++; + } + } + return new RegExp(`^${regexStr}$`); +} + +/** + * Returns true if the given `_headers` content already declares (or detaches) + * a `Cache-Control` directive on any rule whose URL pattern matches `path`. + * + * Used to avoid emitting a second `Cache-Control` rule for hashed assets when + * the user already has one — Cloudflare merges duplicate header values across + * matching rules with a comma, which produces contradictory cache directives. + */ +export function headersFileHasCacheControlForPath(content: string, path: string): boolean { + let matchesCurrentSection = false; + for (const rawLine of content.split('\n')) { + const trimmed = rawLine.trim(); + if (!trimmed || trimmed.startsWith('#')) continue; + // Any non-indented non-empty line is treated as a section header. This is + // intentionally loose: a line at column 0 that isn't a valid CF pattern will + // produce a regex that never matches, and the section will be silently skipped. + const isSectionHeader = !/^\s/.test(rawLine); + if (isSectionHeader) { + const pathOnly = trimmed.replace(/^https?:\/\/[^/]+/, ''); + try { + matchesCurrentSection = cfHeadersPatternToRegex(pathOnly).test(path); + } catch { + matchesCurrentSection = false; + } + } else if ( + matchesCurrentSection && + // Either `Cache-Control: value` (set) or `! Cache-Control` (detach). + /^\s+(?:!\s+cache-control\s*$|cache-control\s*:)/i.test(rawLine) + ) { + return true; + } + } + return false; +} + +/** + * Computes the content to write to `_headers` to inject an immutable + * Cache-Control rule for the hashed assets directory. + * + * Returns `null` when injection should be skipped because the existing + * `_headers` already declares `Cache-Control` on a rule matching the assets + * path — Cloudflare merges duplicate header values with a comma, which would + * produce contradictory directives. + */ +export async function buildAssetsHeadersContent( + opts: { + assetsDir: string; + basePrefix: string; + headersPath: URL; + }, + readFile: (path: URL) => Promise, +): Promise<{ content: string; assetsPattern: string } | null> { + const { assetsDir, basePrefix, headersPath } = opts; + const assetsPattern = `${basePrefix}/${assetsDir}/*`; + const probePath = `${basePrefix}/${assetsDir}/probe`; + + let existingHeaders = ''; + try { + existingHeaders = await readFile(headersPath); + } catch { + // _headers doesn't exist yet — start from scratch + } + + if (headersFileHasCacheControlForPath(existingHeaders, probePath)) { + return null; + } + + const cacheBlock = `${assetsPattern}\n Cache-Control: public, max-age=31536000, immutable\n`; + const normalizedExisting = + existingHeaders && !existingHeaders.endsWith('\n') ? existingHeaders + '\n' : existingHeaders; + const content = normalizedExisting ? `${cacheBlock}\n${normalizedExisting}` : cacheBlock; + return { content, assetsPattern }; +} diff --git a/packages/integrations/cloudflare/test/headers.test.ts b/packages/integrations/cloudflare/test/headers.test.ts new file mode 100644 index 000000000000..3a44c9afa1f7 --- /dev/null +++ b/packages/integrations/cloudflare/test/headers.test.ts @@ -0,0 +1,180 @@ +import * as assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; +import { buildAssetsHeadersContent, headersFileHasCacheControlForPath } from '../src/utils/headers.ts'; + +describe('headersFileHasCacheControlForPath', () => { + it('returns false for an empty file', () => { + assert.equal(headersFileHasCacheControlForPath('', '/_astro/probe'), false); + }); + + it('detects an exact-pattern Cache-Control rule', () => { + const content = ['/_astro/*', ' Cache-Control: max-age=60', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); + + it('detects a global splat rule that matches the assets path', () => { + // The dedup must not be fooled by the user putting Cache-Control on `/*`, + // since Cloudflare merges matching rules' headers with a comma. + const content = ['/*', ' Cache-Control: no-cache', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); + + it('detects a Cache-Control detach (! prefix) on a matching rule', () => { + // `! Cache-Control` is a deliberate user instruction; respect it. + const content = ['/_astro/*', ' ! Cache-Control', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); + + it('returns false when Cache-Control is on a non-matching rule', () => { + const content = ['/api/*', ' Cache-Control: no-store', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), false); + }); + + it('returns false when only non-Cache-Control headers exist on matching rules', () => { + const content = ['/*', ' X-Custom: 1', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), false); + }); + + it('matches placeholder patterns against the assets path', () => { + // `:dir` matches a single path segment. + const content = ['/:dir/*', ' Cache-Control: max-age=0', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); + + it('does not match placeholder when the path has the wrong shape', () => { + // `:dir` cannot span a `/`. + const content = ['/:dir', ' Cache-Control: max-age=0', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), false); + }); + + it('respects host-prefixed patterns', () => { + const content = ['https://example.com/_astro/*', ' Cache-Control: max-age=60', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); + + it('ignores comments and blank lines', () => { + const content = ['# a comment', '', '/api/*', ' X-Foo: bar', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), false); + }); + + it('matches a base-prefixed assets path', () => { + const content = ['/blog/_astro/*', ' Cache-Control: max-age=10', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/blog/_astro/probe'), true); + }); + + it('case-insensitive on the Cache-Control header name', () => { + const content = ['/*', ' cache-control: no-cache', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); + + // Tests for non-default build.assets (e.g. build.assets: '_custom') + it('detects a Cache-Control rule for a custom assets dir', () => { + const content = ['/_custom/*', ' Cache-Control: max-age=60', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_custom/probe'), true); + }); + + it('does not match _astro/* rule when the probe path uses a custom assets dir', () => { + const content = ['/_astro/*', ' Cache-Control: max-age=60', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_custom/probe'), false); + }); + + it('does not match _custom/* rule when the probe path uses the default assets dir', () => { + const content = ['/_custom/*', ' Cache-Control: max-age=60', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), false); + }); + + it('handles CRLF line endings correctly', () => { + const content = ['/_astro/*', ' Cache-Control: max-age=60', ''].join('\r\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); + + it('treats Cache-Control with no value as set', () => { + // An empty value still sets the header to empty per CF docs — treat as present. + const content = ['/_astro/*', ' Cache-Control:', ''].join('\n'); + assert.equal(headersFileHasCacheControlForPath(content, '/_astro/probe'), true); + }); +}); + +const DUMMY_HEADERS_PATH = new URL('file:///project/dist/client/_headers'); + +/** readFile mock that always throws ENOENT (file doesn't exist). */ +const noFile = async (_path: URL): Promise => { + throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' }); +}; + +/** readFile mock that returns a fixed string. */ +const fileWith = (content: string) => async (_path: URL): Promise => content; + +describe('buildAssetsHeadersContent', () => { + it('creates _headers from scratch with the default assets dir', async () => { + const result = await buildAssetsHeadersContent( + { assetsDir: '_astro', basePrefix: '', headersPath: DUMMY_HEADERS_PATH }, + noFile, + ); + assert.ok(result !== null); + assert.equal(result.content, '/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n'); + assert.equal(result.assetsPattern, '/_astro/*'); + }); + + it('creates _headers from scratch with a custom assets dir', async () => { + const result = await buildAssetsHeadersContent( + { assetsDir: '_custom', basePrefix: '', headersPath: DUMMY_HEADERS_PATH }, + noFile, + ); + assert.ok(result !== null); + assert.equal(result.content, '/_custom/*\n Cache-Control: public, max-age=31536000, immutable\n'); + }); + + it('prepends the cache block before existing _headers content', async () => { + const existing = '/api/*\n X-Robots-Tag: noindex\n'; + const result = await buildAssetsHeadersContent( + { assetsDir: '_astro', basePrefix: '', headersPath: DUMMY_HEADERS_PATH }, + fileWith(existing), + ); + assert.ok(result !== null); + assert.equal( + result.content, + '/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n\n/api/*\n X-Robots-Tag: noindex\n', + ); + }); + + it('returns null when existing _headers already has Cache-Control on a matching rule', async () => { + const existing = '/*\n Cache-Control: max-age=60\n'; + const result = await buildAssetsHeadersContent( + { assetsDir: '_astro', basePrefix: '', headersPath: DUMMY_HEADERS_PATH }, + fileWith(existing), + ); + assert.equal(result, null); + }); + + it('returns null when existing _headers has Cache-Control on an exact assets pattern', async () => { + const existing = '/_astro/*\n Cache-Control: max-age=60\n'; + const result = await buildAssetsHeadersContent( + { assetsDir: '_astro', basePrefix: '', headersPath: DUMMY_HEADERS_PATH }, + fileWith(existing), + ); + assert.equal(result, null); + }); + + it('respects a base prefix in the assets pattern', async () => { + const result = await buildAssetsHeadersContent( + { assetsDir: '_astro', basePrefix: '/blog', headersPath: DUMMY_HEADERS_PATH }, + noFile, + ); + assert.ok(result !== null); + assert.equal( + result.content, + '/blog/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n', + ); + assert.equal(result.assetsPattern, '/blog/_astro/*'); + }); + + it('does not add a leading blank line when existing _headers is empty', async () => { + const result = await buildAssetsHeadersContent( + { assetsDir: '_astro', basePrefix: '', headersPath: DUMMY_HEADERS_PATH }, + fileWith(''), + ); + assert.ok(result !== null); + assert.equal(result.content, '/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n'); + }); +}); diff --git a/packages/integrations/cloudflare/test/with-base.test.ts b/packages/integrations/cloudflare/test/with-base.test.ts index 0075a89d3b39..4afddbb109fc 100644 --- a/packages/integrations/cloudflare/test/with-base.test.ts +++ b/packages/integrations/cloudflare/test/with-base.test.ts @@ -75,6 +75,28 @@ describe('base', () => { ); }); + it('injects cache headers for assets with base prefix', async () => { + const content = await fixture.readFile('client/_headers'); + assert.match(content, /\/blog\/_astro\/\*/); + assert.match(content, /Cache-Control: public, max-age=31536000, immutable/); + }); + + it('preserves existing user-defined headers', async () => { + const content = await fixture.readFile('client/_headers'); + assert.match(content, /X-Custom-Header: 67/); + }); + + it('places the injected cache block before existing user-defined headers', async () => { + // Ordering matters when both rules match the same path: per Cloudflare + // docs, multiple matching rules' headers are merged, and we want the + // asset-specific rule to be readable first in the file. + const content = await fixture.readFile('client/_headers'); + const cacheIdx = content.indexOf('/blog/_astro/*'); + const userIdx = content.indexOf('X-Custom-Header: 67'); + assert.ok(cacheIdx >= 0 && userIdx >= 0, 'both blocks should exist'); + assert.ok(cacheIdx < userIdx, 'cache block should appear before user headers'); + }); + it('sets assets.directory to the un-prefixed client root in wrangler.json', async () => { const raw = await fixture.readFile('server/wrangler.json'); const config = JSON.parse(raw); From ca26d0e233002cde049e212507270cd80bec9350 Mon Sep 17 00:00:00 2001 From: MA2153 Date: Mon, 8 Jun 2026 15:20:13 +0000 Subject: [PATCH 3/3] [ci] format --- packages/integrations/cloudflare/src/index.ts | 4 ++- .../cloudflare/test/headers.test.ts | 25 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index 0b88326c7053..dce0e5afa860 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -568,7 +568,9 @@ export default function createIntegration({ await unlink(tempPath).catch(() => {}); throw err; } - logger.info(`Injected immutable Cache-Control for ${result.assetsPattern} into _headers.`); + logger.info( + `Injected immutable Cache-Control for ${result.assetsPattern} into _headers.`, + ); } } diff --git a/packages/integrations/cloudflare/test/headers.test.ts b/packages/integrations/cloudflare/test/headers.test.ts index 3a44c9afa1f7..b2b23a04728f 100644 --- a/packages/integrations/cloudflare/test/headers.test.ts +++ b/packages/integrations/cloudflare/test/headers.test.ts @@ -1,6 +1,9 @@ import * as assert from 'node:assert/strict'; import { describe, it } from 'node:test'; -import { buildAssetsHeadersContent, headersFileHasCacheControlForPath } from '../src/utils/headers.ts'; +import { + buildAssetsHeadersContent, + headersFileHasCacheControlForPath, +} from '../src/utils/headers.ts'; describe('headersFileHasCacheControlForPath', () => { it('returns false for an empty file', () => { @@ -103,7 +106,10 @@ const noFile = async (_path: URL): Promise => { }; /** readFile mock that returns a fixed string. */ -const fileWith = (content: string) => async (_path: URL): Promise => content; +const fileWith = + (content: string) => + async (_path: URL): Promise => + content; describe('buildAssetsHeadersContent', () => { it('creates _headers from scratch with the default assets dir', async () => { @@ -112,7 +118,10 @@ describe('buildAssetsHeadersContent', () => { noFile, ); assert.ok(result !== null); - assert.equal(result.content, '/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n'); + assert.equal( + result.content, + '/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n', + ); assert.equal(result.assetsPattern, '/_astro/*'); }); @@ -122,7 +131,10 @@ describe('buildAssetsHeadersContent', () => { noFile, ); assert.ok(result !== null); - assert.equal(result.content, '/_custom/*\n Cache-Control: public, max-age=31536000, immutable\n'); + assert.equal( + result.content, + '/_custom/*\n Cache-Control: public, max-age=31536000, immutable\n', + ); }); it('prepends the cache block before existing _headers content', async () => { @@ -175,6 +187,9 @@ describe('buildAssetsHeadersContent', () => { fileWith(''), ); assert.ok(result !== null); - assert.equal(result.content, '/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n'); + assert.equal( + result.content, + '/_astro/*\n Cache-Control: public, max-age=31536000, immutable\n', + ); }); });