From 17c25660ade701e83c3f7e5a907aec4b6b652c3f Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Sun, 5 Apr 2026 11:11:03 +0100 Subject: [PATCH 1/4] feat: add `use step` to all tools for workflow durability --- .changeset/add-durable-workflow-tools.md | 5 ++ packages/github-tools/README.md | 61 +++++++++++++-- packages/github-tools/package.json | 20 ++++- packages/github-tools/src/agents.ts | 29 ++++---- packages/github-tools/src/index.ts | 74 +++++++++---------- packages/github-tools/src/tools/commits.ts | 14 +++- packages/github-tools/src/tools/gists.ts | 31 ++++++-- packages/github-tools/src/tools/issues.ts | 23 ++++-- .../github-tools/src/tools/pull-requests.ts | 23 ++++-- packages/github-tools/src/tools/repository.ts | 31 ++++++-- packages/github-tools/src/tools/search.ts | 10 ++- packages/github-tools/src/tools/workflows.ts | 31 ++++++-- packages/github-tools/src/workflow.ts | 68 +++++++++++++++++ packages/github-tools/tsdown.config.ts | 3 + 14 files changed, 321 insertions(+), 102 deletions(-) create mode 100644 .changeset/add-durable-workflow-tools.md create mode 100644 packages/github-tools/src/workflow.ts diff --git a/.changeset/add-durable-workflow-tools.md b/.changeset/add-durable-workflow-tools.md new file mode 100644 index 0000000..37abd7a --- /dev/null +++ b/.changeset/add-durable-workflow-tools.md @@ -0,0 +1,5 @@ +--- +"@github-tools/sdk": minor +--- + +Add native `"use step"` to every tool for Vercel Workflow SDK durability. Tool factories now take `token: string` instead of `Octokit` and create their own client internally, making closures serializable for durable step execution. Add `@github-tools/sdk/workflow` subpath with `createDurableGithubAgent` powered by `DurableAgent`. diff --git a/packages/github-tools/README.md b/packages/github-tools/README.md index 0e2881c..7679878 100644 --- a/packages/github-tools/README.md +++ b/packages/github-tools/README.md @@ -75,16 +75,18 @@ Omit `preset` to get all tools (same as `maintainer`). You can also import individual tool factories for full control: ```ts -import { createOctokit, listPullRequests, createIssue } from '@github-tools/sdk' +import { listPullRequests, createIssue } from '@github-tools/sdk' -const octokit = createOctokit(process.env.GITHUB_TOKEN!) +const token = process.env.GITHUB_TOKEN! const tools = { - listPullRequests: listPullRequests(octokit), - createIssue: createIssue(octokit), + listPullRequests: listPullRequests(token), + createIssue: createIssue(token), } ``` +Each tool factory accepts a `token` string and creates its own client internally. This makes every tool natively compatible with Vercel Workflow SDK — see [Durable Agents](#durable-agents-vercel-workflow-sdk) below. + ## Approval Control Write operations (creating issues, merging PRs, pushing files, …) require user approval by default. This is designed for human-in-the-loop agent workflows. @@ -140,6 +142,26 @@ const result = await generateText({ Each step, toolpick picks the best ~5 tools using keyword + semantic search. All tools remain callable — only the visible set changes. See [toolpick docs](https://github.com/pontusab/toolpick) for LLM re-ranking, caching, and model-driven discovery options. +## Durable Agents (Vercel Workflow SDK) + +Every tool includes a built-in `"use step"` directive, making it natively durable when used inside a Vercel Workflow function. Each tool call becomes a retryable, crash-safe step with no extra configuration. + +Import from the `@github-tools/sdk/workflow` subpath to get `createDurableGithubAgent`: + +```ts +import { createDurableGithubAgent } from '@github-tools/sdk/workflow' + +const agent = createDurableGithubAgent({ + model: 'anthropic/claude-sonnet-4.6', + token: process.env.GITHUB_TOKEN!, + preset: 'maintainer', +}) +``` + +This works with all presets and supports the same approval control as the standard agent. + +> `workflow` and `@workflow/ai` are optional peer dependencies — install them only when using the workflow subpath. + ## Available Tools ### Repository @@ -309,9 +331,38 @@ const stream = reviewer.stream({ prompt: 'Review PR #42 on vercel/ai' }) All other `ToolLoopAgent` options (`stopWhen`, `toolChoice`, `onStepFinish`, etc.) are passed through. +### `createDurableGithubAgent(options)` + +Returns a `DurableAgent` instance for use inside Vercel Workflow SDK functions. Every tool call runs as a durable step with automatic retries and crash recovery. + +Requires the optional peer dependencies `workflow` and `@workflow/ai`: + +```sh +pnpm add workflow @workflow/ai +``` + +```ts +import { createDurableGithubAgent } from '@github-tools/sdk/workflow' +import { getWritable } from 'workflow' +import type { ModelMessage, UIMessageChunk } from 'ai' + +async function chatWorkflow(messages: ModelMessage[], token: string) { + "use workflow" + const agent = createDurableGithubAgent({ + model: 'anthropic/claude-sonnet-4.6', + token, + preset: 'code-review', + }) + const writable = getWritable() + await agent.stream({ messages, writable }) +} +``` + +All presets (`code-review`, `issue-triage`, `ci-ops`, `repo-explorer`, `maintainer`) work with `createDurableGithubAgent`. The options are the same as `createGithubAgent` except it returns a `DurableAgent` instead of a `ToolLoopAgent`. + ### `createOctokit(token)` -Returns a configured [`@octokit/rest`](https://github.com/octokit/rest.js) instance. Useful when cherry-picking individual tools or building custom ones. +Returns a configured [`octokit`](https://github.com/octokit/octokit.js) instance. Useful for building custom tools. ## License diff --git a/packages/github-tools/package.json b/packages/github-tools/package.json index 635e134..30c5423 100644 --- a/packages/github-tools/package.json +++ b/packages/github-tools/package.json @@ -18,6 +18,10 @@ ".": { "types": "./dist/index.d.mts", "import": "./dist/index.mjs" + }, + "./workflow": { + "types": "./dist/workflow.d.mts", + "import": "./dist/workflow.mjs" } }, "main": "./dist/index.mjs", @@ -38,7 +42,9 @@ "ai-sdk", "github", "tools", - "agent" + "agent", + "workflow", + "durable" ], "license": "MIT", "dependencies": { @@ -46,7 +52,17 @@ }, "peerDependencies": { "ai": "^6.0.97", - "zod": "^4.3.6" + "zod": "^4.3.6", + "workflow": "^1.0.0", + "@workflow/ai": "^1.0.0" + }, + "peerDependenciesMeta": { + "workflow": { + "optional": true + }, + "@workflow/ai": { + "optional": true + } }, "devDependencies": { "@types/node": "^24.10.13", diff --git a/packages/github-tools/src/agents.ts b/packages/github-tools/src/agents.ts index 6bad573..4c002ae 100644 --- a/packages/github-tools/src/agents.ts +++ b/packages/github-tools/src/agents.ts @@ -69,6 +69,20 @@ When maintaining repos: ${SHARED_RULES}` } +export function resolveInstructions(options: { + preset?: GithubToolPreset | GithubToolPreset[] + instructions?: string + additionalInstructions?: string +}): string { + const defaultPrompt = options.preset && !Array.isArray(options.preset) + ? PRESET_INSTRUCTIONS[options.preset] + : DEFAULT_INSTRUCTIONS + + if (options.instructions) return options.instructions + if (options.additionalInstructions) return `${defaultPrompt}\n\n${options.additionalInstructions}` + return defaultPrompt +} + type AgentOptions = Omit export type CreateGithubAgentOptions = AgentOptions & { @@ -112,22 +126,9 @@ export function createGithubAgent({ }: CreateGithubAgentOptions) { const tools = createGithubTools({ token, requireApproval, preset }) - const defaultPrompt = preset && !Array.isArray(preset) - ? PRESET_INSTRUCTIONS[preset] - : DEFAULT_INSTRUCTIONS - - let resolvedInstructions: string - if (instructions) { - resolvedInstructions = instructions - } else if (additionalInstructions) { - resolvedInstructions = `${defaultPrompt}\n\n${additionalInstructions}` - } else { - resolvedInstructions = defaultPrompt - } - return new ToolLoopAgent({ ...agentOptions, tools, - instructions: resolvedInstructions + instructions: resolveInstructions({ preset, instructions, additionalInstructions }) }) } diff --git a/packages/github-tools/src/index.ts b/packages/github-tools/src/index.ts index e2327fb..fbb9c36 100644 --- a/packages/github-tools/src/index.ts +++ b/packages/github-tools/src/index.ts @@ -1,4 +1,3 @@ -import { createOctokit } from './client' import { getRepository, listBranches, getFileContent, createBranch, forkRepository, createRepository, createOrUpdateFile } from './tools/repository' import { listPullRequests, getPullRequest, createPullRequest, mergePullRequest, addPullRequestComment } from './tools/pull-requests' import { listIssues, getIssue, createIssue, addIssueComment, closeIssue } from './tools/issues' @@ -164,47 +163,46 @@ export function createGithubTools({ token, requireApproval = true, preset }: Git if (!resolvedToken) { throw new Error('GitHub token is required. Pass it as `token` or set the GITHUB_TOKEN environment variable.') } - const octokit = createOctokit(resolvedToken) const approval = (name: GithubWriteToolName) => ({ needsApproval: resolveApproval(name, requireApproval) }) const allowed = preset ? resolvePresetTools(preset) : null const allTools = { - getRepository: getRepository(octokit), - listBranches: listBranches(octokit), - getFileContent: getFileContent(octokit), - listPullRequests: listPullRequests(octokit), - getPullRequest: getPullRequest(octokit), - listIssues: listIssues(octokit), - getIssue: getIssue(octokit), - searchCode: searchCode(octokit), - searchRepositories: searchRepositories(octokit), - listCommits: listCommits(octokit), - getCommit: getCommit(octokit), - getBlame: getBlame(octokit), - createBranch: createBranch(octokit, approval('createBranch')), - forkRepository: forkRepository(octokit, approval('forkRepository')), - createRepository: createRepository(octokit, approval('createRepository')), - createOrUpdateFile: createOrUpdateFile(octokit, approval('createOrUpdateFile')), - createPullRequest: createPullRequest(octokit, approval('createPullRequest')), - mergePullRequest: mergePullRequest(octokit, approval('mergePullRequest')), - addPullRequestComment: addPullRequestComment(octokit, approval('addPullRequestComment')), - createIssue: createIssue(octokit, approval('createIssue')), - addIssueComment: addIssueComment(octokit, approval('addIssueComment')), - closeIssue: closeIssue(octokit, approval('closeIssue')), - listGists: listGists(octokit), - getGist: getGist(octokit), - listGistComments: listGistComments(octokit), - createGist: createGist(octokit, approval('createGist')), - updateGist: updateGist(octokit, approval('updateGist')), - deleteGist: deleteGist(octokit, approval('deleteGist')), - createGistComment: createGistComment(octokit, approval('createGistComment')), - listWorkflows: listWorkflows(octokit), - listWorkflowRuns: listWorkflowRuns(octokit), - getWorkflowRun: getWorkflowRun(octokit), - listWorkflowJobs: listWorkflowJobs(octokit), - triggerWorkflow: triggerWorkflow(octokit, approval('triggerWorkflow')), - cancelWorkflowRun: cancelWorkflowRun(octokit, approval('cancelWorkflowRun')), - rerunWorkflowRun: rerunWorkflowRun(octokit, approval('rerunWorkflowRun')), + getRepository: getRepository(resolvedToken), + listBranches: listBranches(resolvedToken), + getFileContent: getFileContent(resolvedToken), + listPullRequests: listPullRequests(resolvedToken), + getPullRequest: getPullRequest(resolvedToken), + listIssues: listIssues(resolvedToken), + getIssue: getIssue(resolvedToken), + searchCode: searchCode(resolvedToken), + searchRepositories: searchRepositories(resolvedToken), + listCommits: listCommits(resolvedToken), + getCommit: getCommit(resolvedToken), + getBlame: getBlame(resolvedToken), + createBranch: createBranch(resolvedToken, approval('createBranch')), + forkRepository: forkRepository(resolvedToken, approval('forkRepository')), + createRepository: createRepository(resolvedToken, approval('createRepository')), + createOrUpdateFile: createOrUpdateFile(resolvedToken, approval('createOrUpdateFile')), + createPullRequest: createPullRequest(resolvedToken, approval('createPullRequest')), + mergePullRequest: mergePullRequest(resolvedToken, approval('mergePullRequest')), + addPullRequestComment: addPullRequestComment(resolvedToken, approval('addPullRequestComment')), + createIssue: createIssue(resolvedToken, approval('createIssue')), + addIssueComment: addIssueComment(resolvedToken, approval('addIssueComment')), + closeIssue: closeIssue(resolvedToken, approval('closeIssue')), + listGists: listGists(resolvedToken), + getGist: getGist(resolvedToken), + listGistComments: listGistComments(resolvedToken), + createGist: createGist(resolvedToken, approval('createGist')), + updateGist: updateGist(resolvedToken, approval('updateGist')), + deleteGist: deleteGist(resolvedToken, approval('deleteGist')), + createGistComment: createGistComment(resolvedToken, approval('createGistComment')), + listWorkflows: listWorkflows(resolvedToken), + listWorkflowRuns: listWorkflowRuns(resolvedToken), + getWorkflowRun: getWorkflowRun(resolvedToken), + listWorkflowJobs: listWorkflowJobs(resolvedToken), + triggerWorkflow: triggerWorkflow(resolvedToken, approval('triggerWorkflow')), + cancelWorkflowRun: cancelWorkflowRun(resolvedToken, approval('cancelWorkflowRun')), + rerunWorkflowRun: rerunWorkflowRun(resolvedToken, approval('rerunWorkflowRun')), } if (!allowed) return allTools diff --git a/packages/github-tools/src/tools/commits.ts b/packages/github-tools/src/tools/commits.ts index f9cd511..7ddbda6 100644 --- a/packages/github-tools/src/tools/commits.ts +++ b/packages/github-tools/src/tools/commits.ts @@ -1,6 +1,6 @@ import { tool } from 'ai' import { z } from 'zod' -import type { Octokit } from '../types' +import { createOctokit } from '../client' const BLAME_QUERY = ` query ($owner: String!, $name: String!, $expression: String!, $path: String!) { @@ -62,7 +62,7 @@ type BlameQueryData = { } | null } -export const listCommits = (octokit: Octokit) => +export const listCommits = (token: string) => tool({ description: 'List commits for a GitHub repository. Filter by file path to see commits that touched a file. For line-by-line attribution at a given ref, use getBlame instead.', @@ -77,6 +77,8 @@ export const listCommits = (octokit: Octokit) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), }), execute: async ({ owner, repo, path, sha, author, since, until, perPage }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.repos.listCommits({ owner, repo, @@ -98,7 +100,7 @@ export const listCommits = (octokit: Octokit) => }, }) -export const getCommit = (octokit: Octokit) => +export const getCommit = (token: string) => tool({ description: 'Get detailed information about a specific commit, including the list of files changed with additions and deletions', inputSchema: z.object({ @@ -107,6 +109,8 @@ export const getCommit = (octokit: Octokit) => ref: z.string().describe('Commit SHA, branch name, or tag'), }), execute: async ({ owner, repo, ref }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.repos.getCommit({ owner, repo, ref }) return { sha: data.sha, @@ -131,7 +135,7 @@ export const getCommit = (octokit: Octokit) => }, }) -export const getBlame = (octokit: Octokit) => +export const getBlame = (token: string) => tool({ description: 'Line-level git blame for a file at a commit-like ref (branch, tag, or SHA). Returns contiguous ranges mapping lines to the commits that last modified them — use this to see who introduced a line and when (GitHub GraphQL API).', @@ -163,6 +167,8 @@ export const getBlame = (octokit: Octokit) => .describe('When used with lineStart, only return ranges overlapping this window'), }), execute: async ({ owner, repo, path, ref, line, lineStart, lineEnd }) => { + "use step" + const octokit = createOctokit(token) let expression = ref if (!expression) { const { data } = await octokit.rest.repos.get({ owner, repo }) diff --git a/packages/github-tools/src/tools/gists.ts b/packages/github-tools/src/tools/gists.ts index 9925155..7927cf3 100644 --- a/packages/github-tools/src/tools/gists.ts +++ b/packages/github-tools/src/tools/gists.ts @@ -1,8 +1,9 @@ import { tool } from 'ai' import { z } from 'zod' -import type { Octokit, ToolOptions } from '../types' +import { createOctokit } from '../client' +import type { ToolOptions } from '../types' -export const listGists = (octokit: Octokit) => +export const listGists = (token: string) => tool({ description: 'List gists for the authenticated user or a specific user', inputSchema: z.object({ @@ -11,6 +12,8 @@ export const listGists = (octokit: Octokit) => page: z.number().optional().default(1).describe('Page number for pagination'), }), execute: async ({ username, perPage, page }) => { + "use step" + const octokit = createOctokit(token) const { data } = username ? await octokit.rest.gists.listForUser({ username, per_page: perPage, page }) : await octokit.rest.gists.list({ per_page: perPage, page }) @@ -28,13 +31,15 @@ export const listGists = (octokit: Octokit) => }, }) -export const getGist = (octokit: Octokit) => +export const getGist = (token: string) => tool({ description: 'Get a gist by ID, including file contents', inputSchema: z.object({ gistId: z.string().describe('Gist ID'), }), execute: async ({ gistId }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.gists.get({ gist_id: gistId }) return { id: data.id, @@ -55,7 +60,7 @@ export const getGist = (octokit: Octokit) => }, }) -export const listGistComments = (octokit: Octokit) => +export const listGistComments = (token: string) => tool({ description: 'List comments on a gist', inputSchema: z.object({ @@ -64,6 +69,8 @@ export const listGistComments = (octokit: Octokit) => page: z.number().optional().default(1).describe('Page number for pagination'), }), execute: async ({ gistId, perPage, page }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.gists.listComments({ gist_id: gistId, per_page: perPage, page }) return data.map(comment => ({ id: comment.id, @@ -76,7 +83,7 @@ export const listGistComments = (octokit: Octokit) => }, }) -export const createGist = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const createGist = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new gist with one or more files', needsApproval, @@ -87,6 +94,8 @@ export const createGist = (octokit: Octokit, { needsApproval = true }: ToolOptio isPublic: z.boolean().optional().default(false).describe('Whether the gist is public'), }), execute: async ({ description, files, isPublic }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.gists.create({ description, files, @@ -103,7 +112,7 @@ export const createGist = (octokit: Octokit, { needsApproval = true }: ToolOptio }, }) -export const updateGist = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const updateGist = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Update an existing gist — edit description, update files, or remove files', needsApproval, @@ -115,6 +124,8 @@ export const updateGist = (octokit: Octokit, { needsApproval = true }: ToolOptio filesToDelete: z.array(z.string()).optional().describe('Filenames to remove from the gist'), }), execute: async ({ gistId, description, files, filesToDelete }) => { + "use step" + const octokit = createOctokit(token) const fileUpdates: Record = {} if (files) Object.assign(fileUpdates, files) if (filesToDelete) { @@ -134,7 +145,7 @@ export const updateGist = (octokit: Octokit, { needsApproval = true }: ToolOptio }, }) -export const deleteGist = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const deleteGist = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Delete a gist permanently', needsApproval, @@ -142,12 +153,14 @@ export const deleteGist = (octokit: Octokit, { needsApproval = true }: ToolOptio gistId: z.string().describe('Gist ID to delete'), }), execute: async ({ gistId }) => { + "use step" + const octokit = createOctokit(token) await octokit.rest.gists.delete({ gist_id: gistId }) return { deleted: true, gistId } }, }) -export const createGistComment = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const createGistComment = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Add a comment to a gist', needsApproval, @@ -156,6 +169,8 @@ export const createGistComment = (octokit: Octokit, { needsApproval = true }: To body: z.string().describe('Comment text (supports Markdown)'), }), execute: async ({ gistId, body }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.gists.createComment({ gist_id: gistId, body }) return { id: data.id, diff --git a/packages/github-tools/src/tools/issues.ts b/packages/github-tools/src/tools/issues.ts index 76ec71a..ab45479 100644 --- a/packages/github-tools/src/tools/issues.ts +++ b/packages/github-tools/src/tools/issues.ts @@ -1,8 +1,9 @@ import { tool } from 'ai' import { z } from 'zod' -import type { Octokit, ToolOptions } from '../types' +import { createOctokit } from '../client' +import type { ToolOptions } from '../types' -export const listIssues = (octokit: Octokit) => +export const listIssues = (token: string) => tool({ description: 'List issues for a GitHub repository (excludes pull requests)', inputSchema: z.object({ @@ -13,6 +14,8 @@ export const listIssues = (octokit: Octokit) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), }), execute: async ({ owner, repo, state, labels, perPage }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.issues.listForRepo({ owner, repo, @@ -35,7 +38,7 @@ export const listIssues = (octokit: Octokit) => }, }) -export const getIssue = (octokit: Octokit) => +export const getIssue = (token: string) => tool({ description: 'Get detailed information about a specific issue', inputSchema: z.object({ @@ -44,6 +47,8 @@ export const getIssue = (octokit: Octokit) => issueNumber: z.number().describe('Issue number'), }), execute: async ({ owner, repo, issueNumber }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.issues.get({ owner, repo, issue_number: issueNumber }) return { number: data.number, @@ -62,7 +67,7 @@ export const getIssue = (octokit: Octokit) => }, }) -export const createIssue = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const createIssue = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new issue in a GitHub repository', needsApproval, @@ -75,6 +80,8 @@ export const createIssue = (octokit: Octokit, { needsApproval = true }: ToolOpti assignees: z.array(z.string()).optional().describe('GitHub usernames to assign to the issue'), }), execute: async ({ owner, repo, title, body, labels, assignees }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.issues.create({ owner, repo, title, body, labels, assignees }) return { number: data.number, @@ -86,7 +93,7 @@ export const createIssue = (octokit: Octokit, { needsApproval = true }: ToolOpti }, }) -export const addIssueComment = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const addIssueComment = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Add a comment to a GitHub issue', needsApproval, @@ -97,6 +104,8 @@ export const addIssueComment = (octokit: Octokit, { needsApproval = true }: Tool body: z.string().describe('Comment text (supports Markdown)'), }), execute: async ({ owner, repo, issueNumber, body }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: issueNumber, body }) return { id: data.id, @@ -108,7 +117,7 @@ export const addIssueComment = (octokit: Octokit, { needsApproval = true }: Tool }, }) -export const closeIssue = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const closeIssue = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Close an open GitHub issue', needsApproval, @@ -119,6 +128,8 @@ export const closeIssue = (octokit: Octokit, { needsApproval = true }: ToolOptio stateReason: z.enum(['completed', 'not_planned']).optional().default('completed').describe('Reason for closing'), }), execute: async ({ owner, repo, issueNumber, stateReason }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.issues.update({ owner, repo, diff --git a/packages/github-tools/src/tools/pull-requests.ts b/packages/github-tools/src/tools/pull-requests.ts index edc7b19..357a49b 100644 --- a/packages/github-tools/src/tools/pull-requests.ts +++ b/packages/github-tools/src/tools/pull-requests.ts @@ -1,8 +1,9 @@ import { tool } from 'ai' import { z } from 'zod' -import type { Octokit, ToolOptions } from '../types' +import { createOctokit } from '../client' +import type { ToolOptions } from '../types' -export const listPullRequests = (octokit: Octokit) => +export const listPullRequests = (token: string) => tool({ description: 'List pull requests for a GitHub repository', inputSchema: z.object({ @@ -12,6 +13,8 @@ export const listPullRequests = (octokit: Octokit) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), }), execute: async ({ owner, repo, state, perPage }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.pulls.list({ owner, repo, state, per_page: perPage }) return data.map(pr => ({ number: pr.number, @@ -28,7 +31,7 @@ export const listPullRequests = (octokit: Octokit) => }, }) -export const getPullRequest = (octokit: Octokit) => +export const getPullRequest = (token: string) => tool({ description: 'Get detailed information about a specific pull request', inputSchema: z.object({ @@ -37,6 +40,8 @@ export const getPullRequest = (octokit: Octokit) => pullNumber: z.number().describe('Pull request number'), }), execute: async ({ owner, repo, pullNumber }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.pulls.get({ owner, repo, pull_number: pullNumber }) return { number: data.number, @@ -60,7 +65,7 @@ export const getPullRequest = (octokit: Octokit) => }, }) -export const createPullRequest = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const createPullRequest = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new pull request in a GitHub repository', needsApproval, @@ -74,6 +79,8 @@ export const createPullRequest = (octokit: Octokit, { needsApproval = true }: To draft: z.boolean().optional().default(false).describe('Create as draft pull request'), }), execute: async ({ owner, repo, title, body, head, base, draft }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.pulls.create({ owner, repo, title, body, head, base, draft }) return { number: data.number, @@ -87,7 +94,7 @@ export const createPullRequest = (octokit: Octokit, { needsApproval = true }: To }, }) -export const mergePullRequest = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const mergePullRequest = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Merge a pull request', needsApproval, @@ -100,6 +107,8 @@ export const mergePullRequest = (octokit: Octokit, { needsApproval = true }: Too mergeMethod: z.enum(['merge', 'squash', 'rebase']).optional().default('merge').describe('Merge strategy'), }), execute: async ({ owner, repo, pullNumber, commitTitle, commitMessage, mergeMethod }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.pulls.merge({ owner, repo, @@ -116,7 +125,7 @@ export const mergePullRequest = (octokit: Octokit, { needsApproval = true }: Too }, }) -export const addPullRequestComment = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const addPullRequestComment = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Add a comment to a pull request', needsApproval, @@ -127,6 +136,8 @@ export const addPullRequestComment = (octokit: Octokit, { needsApproval = true } body: z.string().describe('Comment text (supports Markdown)'), }), execute: async ({ owner, repo, pullNumber, body }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: pullNumber, body }) return { id: data.id, diff --git a/packages/github-tools/src/tools/repository.ts b/packages/github-tools/src/tools/repository.ts index 51fe281..d21f5a0 100644 --- a/packages/github-tools/src/tools/repository.ts +++ b/packages/github-tools/src/tools/repository.ts @@ -1,8 +1,9 @@ import { tool } from 'ai' import { z } from 'zod' -import type { Octokit, ToolOptions } from '../types' +import { createOctokit } from '../client' +import type { ToolOptions } from '../types' -export const getRepository = (octokit: Octokit) => +export const getRepository = (token: string) => tool({ description: 'Get information about a GitHub repository including description, stars, forks, language, and default branch', inputSchema: z.object({ @@ -10,6 +11,8 @@ export const getRepository = (octokit: Octokit) => repo: z.string().describe('Repository name'), }), execute: async ({ owner, repo }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.repos.get({ owner, repo }) return { name: data.name, @@ -28,7 +31,7 @@ export const getRepository = (octokit: Octokit) => }, }) -export const listBranches = (octokit: Octokit) => +export const listBranches = (token: string) => tool({ description: 'List branches in a GitHub repository', inputSchema: z.object({ @@ -37,6 +40,8 @@ export const listBranches = (octokit: Octokit) => perPage: z.number().optional().default(30).describe('Number of branches to return (max 100)'), }), execute: async ({ owner, repo, perPage }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.repos.listBranches({ owner, repo, per_page: perPage }) return data.map(branch => ({ name: branch.name, @@ -46,7 +51,7 @@ export const listBranches = (octokit: Octokit) => }, }) -export const getFileContent = (octokit: Octokit) => +export const getFileContent = (token: string) => tool({ description: 'Get the content of a file from a GitHub repository', inputSchema: z.object({ @@ -56,6 +61,8 @@ export const getFileContent = (octokit: Octokit) => ref: z.string().optional().describe('Branch, tag, or commit SHA (defaults to the default branch)'), }), execute: async ({ owner, repo, path, ref }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.repos.getContent({ owner, repo, path, ref }) if (Array.isArray(data)) { return { type: 'directory', entries: data.map(e => ({ name: e.name, type: e.type, path: e.path })) } @@ -74,7 +81,7 @@ export const getFileContent = (octokit: Octokit) => }, }) -export const createBranch = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const createBranch = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new branch in a GitHub repository from an existing branch or commit SHA', needsApproval, @@ -85,6 +92,8 @@ export const createBranch = (octokit: Octokit, { needsApproval = true }: ToolOpt from: z.string().optional().describe('Source branch name or commit SHA to branch from (defaults to the default branch)'), }), execute: async ({ owner, repo, branch, from }) => { + "use step" + const octokit = createOctokit(token) let sha = from if (!sha || !sha.match(/^[0-9a-f]{40}$/i)) { const { data: ref } = await octokit.rest.git.getRef({ @@ -108,7 +117,7 @@ export const createBranch = (octokit: Octokit, { needsApproval = true }: ToolOpt }, }) -export const forkRepository = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const forkRepository = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Fork a GitHub repository to the authenticated user account or a specified organization', needsApproval, @@ -119,6 +128,8 @@ export const forkRepository = (octokit: Octokit, { needsApproval = true }: ToolO name: z.string().optional().describe('Name for the forked repository (defaults to the original name)'), }), execute: async ({ owner, repo, organization, name }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.repos.createFork({ owner, repo, @@ -138,7 +149,7 @@ export const forkRepository = (octokit: Octokit, { needsApproval = true }: ToolO }, }) -export const createRepository = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const createRepository = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new GitHub repository for the authenticated user or a specified organization', needsApproval, @@ -152,6 +163,8 @@ export const createRepository = (octokit: Octokit, { needsApproval = true }: Too org: z.string().optional().describe('Organization to create the repository in (omit for personal repo)'), }), execute: async ({ name, description, isPrivate, autoInit, gitignoreTemplate, licenseTemplate, org }) => { + "use step" + const octokit = createOctokit(token) const params = { name, description, @@ -179,7 +192,7 @@ export const createRepository = (octokit: Octokit, { needsApproval = true }: Too }, }) -export const createOrUpdateFile = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const createOrUpdateFile = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create or update a file in a GitHub repository. Provide the SHA when updating an existing file.', needsApproval, @@ -193,6 +206,8 @@ export const createOrUpdateFile = (octokit: Octokit, { needsApproval = true }: T sha: z.string().optional().describe('SHA of the file being replaced (required when updating an existing file)'), }), execute: async ({ owner, repo, path, message, content, branch, sha }) => { + "use step" + const octokit = createOctokit(token) const encoded = Buffer.from(content).toString('base64') const { data } = await octokit.rest.repos.createOrUpdateFileContents({ owner, diff --git a/packages/github-tools/src/tools/search.ts b/packages/github-tools/src/tools/search.ts index bfca7c6..317bea1 100644 --- a/packages/github-tools/src/tools/search.ts +++ b/packages/github-tools/src/tools/search.ts @@ -1,8 +1,8 @@ import { tool } from 'ai' import { z } from 'zod' -import type { Octokit } from '../types' +import { createOctokit } from '../client' -export const searchCode = (octokit: Octokit) => +export const searchCode = (token: string) => tool({ description: 'Search for code in GitHub repositories. Use qualifiers like "repo:owner/name" to scope the search.', inputSchema: z.object({ @@ -10,6 +10,8 @@ export const searchCode = (octokit: Octokit) => perPage: z.number().optional().default(10).describe('Number of results to return (max 30)'), }), execute: async ({ query, perPage }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.search.code({ q: query, per_page: perPage }) return { totalCount: data.total_count, @@ -24,7 +26,7 @@ export const searchCode = (octokit: Octokit) => }, }) -export const searchRepositories = (octokit: Octokit) => +export const searchRepositories = (token: string) => tool({ description: 'Search for GitHub repositories by keyword, topic, language, or other qualifiers', inputSchema: z.object({ @@ -34,6 +36,8 @@ export const searchRepositories = (octokit: Octokit) => order: z.enum(['asc', 'desc']).optional().default('desc').describe('Sort order'), }), execute: async ({ query, perPage, sort, order }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.search.repos({ q: query, per_page: perPage, sort, order }) return { totalCount: data.total_count, diff --git a/packages/github-tools/src/tools/workflows.ts b/packages/github-tools/src/tools/workflows.ts index 792da62..8ccf388 100644 --- a/packages/github-tools/src/tools/workflows.ts +++ b/packages/github-tools/src/tools/workflows.ts @@ -1,8 +1,9 @@ import { tool } from 'ai' import { z } from 'zod' -import type { Octokit, ToolOptions } from '../types' +import { createOctokit } from '../client' +import type { ToolOptions } from '../types' -export const listWorkflows = (octokit: Octokit) => +export const listWorkflows = (token: string) => tool({ description: 'List GitHub Actions workflows in a repository', inputSchema: z.object({ @@ -12,6 +13,8 @@ export const listWorkflows = (octokit: Octokit) => page: z.number().optional().default(1).describe('Page number for pagination'), }), execute: async ({ owner, repo, perPage, page }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.actions.listRepoWorkflows({ owner, repo, per_page: perPage, page }) return { totalCount: data.total_count, @@ -28,7 +31,7 @@ export const listWorkflows = (octokit: Octokit) => }, }) -export const listWorkflowRuns = (octokit: Octokit) => +export const listWorkflowRuns = (token: string) => tool({ description: 'List workflow runs for a repository, optionally filtered by workflow, branch, status, or event', inputSchema: z.object({ @@ -42,6 +45,8 @@ export const listWorkflowRuns = (octokit: Octokit) => page: z.number().optional().default(1).describe('Page number for pagination'), }), execute: async ({ owner, repo, workflowId, branch, event, status, perPage, page }) => { + "use step" + const octokit = createOctokit(token) const params: Record = { owner, repo, per_page: perPage, page } if (branch) params.branch = branch if (event) params.event = event @@ -71,7 +76,7 @@ export const listWorkflowRuns = (octokit: Octokit) => }, }) -export const getWorkflowRun = (octokit: Octokit) => +export const getWorkflowRun = (token: string) => tool({ description: 'Get details of a specific workflow run including status, timing, and trigger info', inputSchema: z.object({ @@ -80,6 +85,8 @@ export const getWorkflowRun = (octokit: Octokit) => runId: z.number().describe('Workflow run ID'), }), execute: async ({ owner, repo, runId }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.actions.getWorkflowRun({ owner, repo, run_id: runId }) return { id: data.id, @@ -100,7 +107,7 @@ export const getWorkflowRun = (octokit: Octokit) => }, }) -export const listWorkflowJobs = (octokit: Octokit) => +export const listWorkflowJobs = (token: string) => tool({ description: 'List jobs for a workflow run, including step-level status and timing', inputSchema: z.object({ @@ -112,6 +119,8 @@ export const listWorkflowJobs = (octokit: Octokit) => page: z.number().optional().default(1).describe('Page number for pagination'), }), execute: async ({ owner, repo, runId, filter, perPage, page }) => { + "use step" + const octokit = createOctokit(token) const { data } = await octokit.rest.actions.listJobsForWorkflowRun({ owner, repo, run_id: runId, filter, per_page: perPage, page }) return { totalCount: data.total_count, @@ -137,7 +146,7 @@ export const listWorkflowJobs = (octokit: Octokit) => }, }) -export const triggerWorkflow = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const triggerWorkflow = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Trigger a workflow via workflow_dispatch event', needsApproval, @@ -149,6 +158,8 @@ export const triggerWorkflow = (octokit: Octokit, { needsApproval = true }: Tool inputs: z.record(z.string(), z.string()).optional().describe('Input parameters defined in the workflow_dispatch trigger'), }), execute: async ({ owner, repo, workflowId, ref, inputs }) => { + "use step" + const octokit = createOctokit(token) await octokit.rest.actions.createWorkflowDispatch({ owner, repo, @@ -160,7 +171,7 @@ export const triggerWorkflow = (octokit: Octokit, { needsApproval = true }: Tool }, }) -export const cancelWorkflowRun = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const cancelWorkflowRun = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Cancel an in-progress workflow run', needsApproval, @@ -170,12 +181,14 @@ export const cancelWorkflowRun = (octokit: Octokit, { needsApproval = true }: To runId: z.number().describe('Workflow run ID to cancel'), }), execute: async ({ owner, repo, runId }) => { + "use step" + const octokit = createOctokit(token) await octokit.rest.actions.cancelWorkflowRun({ owner, repo, run_id: runId }) return { cancelled: true, runId } }, }) -export const rerunWorkflowRun = (octokit: Octokit, { needsApproval = true }: ToolOptions = {}) => +export const rerunWorkflowRun = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Re-run a workflow run, optionally only the failed jobs', needsApproval, @@ -186,6 +199,8 @@ export const rerunWorkflowRun = (octokit: Octokit, { needsApproval = true }: Too onlyFailedJobs: z.boolean().optional().default(false).describe('Only re-run failed jobs instead of the entire workflow'), }), execute: async ({ owner, repo, runId, onlyFailedJobs }) => { + "use step" + const octokit = createOctokit(token) if (onlyFailedJobs) { await octokit.rest.actions.reRunWorkflowFailedJobs({ owner, repo, run_id: runId }) } else { diff --git a/packages/github-tools/src/workflow.ts b/packages/github-tools/src/workflow.ts new file mode 100644 index 0000000..5696d43 --- /dev/null +++ b/packages/github-tools/src/workflow.ts @@ -0,0 +1,68 @@ +import { DurableAgent } from '@workflow/ai/agent' +import type { LanguageModel } from 'ai' +import { createGithubTools } from './index' +import { resolveInstructions } from './agents' +import type { GithubToolPreset, ApprovalConfig } from './index' + +export type CreateDurableGithubAgentOptions = { + model: string | LanguageModel + /** + * GitHub personal access token. + * Falls back to `process.env.GITHUB_TOKEN` when omitted. + */ + token?: string + preset?: GithubToolPreset | GithubToolPreset[] + requireApproval?: ApprovalConfig + instructions?: string + additionalInstructions?: string + /** Maximum number of LLM calls before stopping. Unlimited by default. */ + maxSteps?: number + temperature?: number +} + +/** + * Create a pre-configured durable GitHub agent powered by Vercel Workflow SDK's `DurableAgent`. + * + * Each tool call runs as a durable step with automatic retries and observability. + * Must be used inside a `"use workflow"` function. + * + * @example + * ```ts + * import { createDurableGithubAgent } from '@github-tools/sdk/workflow' + * import { getWritable } from 'workflow' + * import type { ModelMessage, UIMessageChunk } from 'ai' + * + * async function chatWorkflow(messages: ModelMessage[], token: string) { + * "use workflow" + * const agent = createDurableGithubAgent({ + * model: 'anthropic/claude-sonnet-4.6', + * token, + * preset: 'code-review', + * }) + * const writable = getWritable() + * await agent.stream({ messages, writable }) + * } + * ``` + */ +export function createDurableGithubAgent({ + model, + token, + preset, + requireApproval, + instructions, + additionalInstructions, + ...agentOptions +}: CreateDurableGithubAgentOptions) { + const tools = createGithubTools({ token, requireApproval, preset }) + + return new DurableAgent({ + ...agentOptions, + model, + tools, + instructions: resolveInstructions({ preset, instructions, additionalInstructions }), + }) +} + +export { createGithubTools, createGithubAgent } from './index' +export type { GithubTools, GithubToolsOptions, GithubToolPreset, GithubWriteToolName, ApprovalConfig } from './index' +export type { CreateGithubAgentOptions } from './agents' diff --git a/packages/github-tools/tsdown.config.ts b/packages/github-tools/tsdown.config.ts index 03f6158..3914a0f 100644 --- a/packages/github-tools/tsdown.config.ts +++ b/packages/github-tools/tsdown.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from 'tsdown' export default defineConfig({ entry: { index: 'src/index.ts', + workflow: 'src/workflow.ts', }, format: 'esm', dts: true, @@ -11,5 +12,7 @@ export default defineConfig({ external: [ 'ai', 'zod', + 'workflow', + '@workflow/ai', ], }) From 4a6524d29f345bd0b2483e7c1f23602ff6198d0f Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Sun, 5 Apr 2026 11:16:26 +0100 Subject: [PATCH 2/4] up --- apps/chat/package.json | 4 +- packages/github-tools/package.json | 4 +- pnpm-lock.yaml | 3723 ++++++++++++++++++++++++++-- 3 files changed, 3461 insertions(+), 270 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index a1e1b6c..ea91ea7 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -38,7 +38,9 @@ "shiki-stream": "^0.1.4", "striptags": "3.2.0", "tailwindcss": "^4.2.1", - "zod": "^4.3.6" + "zod": "^4.3.6", + "workflow": "^4.2.0-beta.76", + "@workflow/ai": "^4.1.0-beta.60" }, "devDependencies": { "@nuxt/eslint": "^1.15.1", diff --git a/packages/github-tools/package.json b/packages/github-tools/package.json index 30c5423..77fc4c6 100644 --- a/packages/github-tools/package.json +++ b/packages/github-tools/package.json @@ -53,8 +53,8 @@ "peerDependencies": { "ai": "^6.0.97", "zod": "^4.3.6", - "workflow": "^1.0.0", - "@workflow/ai": "^1.0.0" + "workflow": "^4.2.0-beta.76", + "@workflow/ai": "^4.1.0-beta.60" }, "peerDependenciesMeta": { "workflow": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d2a7d9..254251b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,10 +43,10 @@ importers: version: 0.17.0 '@nuxt/ui': specifier: ^4.4.0 - version: 4.4.0(@nuxt/content@3.11.2(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(magicast@0.5.2))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@vercel/blob@2.3.0)(change-case@5.4.4)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(embla-carousel@8.6.0)(ioredis@5.9.3)(magicast@0.5.2)(tailwindcss@4.2.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6) + version: 4.4.0(5bf42a65b4dde4f9dc838beaca0a8087) '@nuxthub/core': specifier: ^0.10.6 - version: 0.10.6(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3)) + version: 0.10.6(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3)) '@nuxtjs/mdc': specifier: ^0.20.1 version: 0.20.1(magicast@0.5.2) @@ -56,6 +56,9 @@ importers: '@vueuse/core': specifier: ^14.2.1 version: 14.2.1(vue@3.5.28(typescript@5.9.3)) + '@workflow/ai': + specifier: ^4.1.0-beta.60 + version: 4.1.0-beta.60(@opentelemetry/api@1.9.0)(ai@6.0.97(zod@4.3.6))(workflow@4.2.0-beta.76(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(magicast@0.5.2)(typescript@5.9.3)) ai: specifier: ^6.0.97 version: 6.0.97(zod@4.3.6) @@ -70,7 +73,7 @@ importers: version: 1.10.3(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) nuxt: specifier: ^4.3.1 - version: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2) + version: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2) nuxt-auth-utils: specifier: ^0.5.29 version: 0.5.29(magicast@0.5.2) @@ -92,6 +95,9 @@ importers: tailwindcss: specifier: ^4.2.1 version: 4.2.1 + workflow: + specifier: ^4.2.0-beta.76 + version: 4.2.0-beta.76(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(magicast@0.5.2)(typescript@5.9.3) zod: specifier: ^4.3.6 version: 4.3.6 @@ -128,10 +134,10 @@ importers: version: 12.6.2 docus: specifier: ^5.6.1 - version: 5.6.1(965b5caba7b8f1c76d0b8a9386bcd9ab) + version: 5.6.1(22fe5abb88d1e8ca32cd6ab67f25be31) nuxt: specifier: ^4.3.1 - version: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + version: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) zod: specifier: ^4.3.6 version: 4.3.6 @@ -148,12 +154,18 @@ importers: packages/github-tools: dependencies: + '@workflow/ai': + specifier: ^4.1.0-beta.60 + version: 4.1.0-beta.60(@opentelemetry/api@1.9.0)(ai@6.0.97(zod@4.3.6))(workflow@4.2.0-beta.76(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(magicast@0.5.2)(typescript@5.9.3)) ai: specifier: ^6.0.97 version: 6.0.97(zod@4.3.6) octokit: specifier: ^5.0.5 version: 5.0.5 + workflow: + specifier: ^4.2.0-beta.76 + version: 4.2.0-beta.76(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(magicast@0.5.2)(typescript@5.9.3) zod: specifier: ^4.3.6 version: 4.3.6 @@ -188,6 +200,12 @@ packages: bcrypt: optional: true + '@ai-sdk/anthropic@3.0.66': + resolution: {integrity: sha512-yJpQ2x6ACwbXo5D6HsVWd2FFnnWcetfGx4oxkG66P8FawusvrY2vL2qMiiNTruWrxEYDy+YHc3ctv8C769MMJA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/gateway@3.0.46': resolution: {integrity: sha512-zH1UbNRjG5woOXXFOrVCZraqZuFTtmPvLardMGcgLkzpxKV0U3tAGoyWKSZ862H+eBJfI/Hf2yj/zzGJcCkycg==} engines: {node: '>=18'} @@ -200,18 +218,42 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/google@3.0.58': + resolution: {integrity: sha512-7P7s8g/FoIxesx2y32eK8idAMLOFHN2f4gs5KYi8q2QaScuubXFjgFMFqbjYF5bc92akiOd/C6OG0vIDlV7t2Q==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/mcp@1.0.21': resolution: {integrity: sha512-dRX2X6GDadZNpiylNnw0HP7zJC8ggVOOJV/JtxuF6CgtP8CKnc7a/wEzpUw1m/4AGdD3mTDhKnKFwC4y10a8FQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/openai-compatible@2.0.38': + resolution: {integrity: sha512-rwyHjQRl93dv+/YftsnBd+nhIip92ltOcpP0iCawSptO09rabYclh2o/7G3QXNtTtVhFgESpbwjcBKTmWP3k2A==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai@3.0.50': + resolution: {integrity: sha512-7M7bklrS+gckzPdpQpC3iG5aN5aQPRJdAJQ5jt7sEgYCqDgUuef9x4Nd570+ghIfKTZvV6tSqeeTuD6De/bZig==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider-utils@4.0.15': resolution: {integrity: sha512-8XiKWbemmCbvNN0CLR9u3PQiet4gtEVIrX4zzLxnCj06AwsEDJwJVBbKrEI4t6qE8XRSIvU2irka0dcpziKW6w==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider-utils@4.0.22': + resolution: {integrity: sha512-B2OTFcRw/Pdka9ZTjpXv6T6qZ6RruRuLokyb8HwW+aoW9ndJ3YasA3/mVswyJw7VMBF8ofXgqvcrCt9KYvFifg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider@3.0.8': resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==} engines: {node: '>=18'} @@ -228,6 +270,12 @@ packages: peerDependencies: vue: ^3.3.4 + '@ai-sdk/xai@3.0.77': + resolution: {integrity: sha512-D06/KZJpF2hsh1lxzcoXbnIkBedf75PpNvddhl9JRUYNbIHIrm2MaLnkUzg9plOAJkRDunpDCl7a6GTv5wMWFA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -241,6 +289,83 @@ packages: peerDependencies: '@types/json-schema': ^7.0.15 + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/core@3.973.26': + resolution: {integrity: sha512-A/E6n2W42ruU+sfWk+mMUOyVXbsSgGrY3MJ9/0Az5qUdG67y8I6HYzzoAa+e/lzxxl1uCYmEL6BTMi9ZiZnplQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.13': + resolution: {integrity: sha512-a6iFMh1pgUH0TdcouBppLJUfPM7Yd3R9S1xFodPtCRoLqCz2RQFA3qjA8x4112PVYXEd4/pHX2eihapq39w0rA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-host-header@3.972.8': + resolution: {integrity: sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-logger@3.972.8': + resolution: {integrity: sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.972.9': + resolution: {integrity: sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-user-agent@3.972.28': + resolution: {integrity: sha512-cfWZFlVh7Va9lRay4PN2A9ARFzaBYcA097InT5M2CdRS05ECF5yaz86jET8Wsl2WcyKYEvVr/QNmKtYtafUHtQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/nested-clients@3.996.18': + resolution: {integrity: sha512-c7ZSIXrESxHKx2Mcopgd8AlzZgoXMr20fkx5ViPWPOLBvmyhw9VwJx/Govg8Ef/IhEon5R9l53Z8fdYSEmp6VA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/region-config-resolver@3.972.10': + resolution: {integrity: sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/types@3.973.6': + resolution: {integrity: sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/util-endpoints@3.996.5': + resolution: {integrity: sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw==} + 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.8': + resolution: {integrity: sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA==} + + '@aws-sdk/util-user-agent-node@3.973.14': + resolution: {integrity: sha512-vNSB/DYaPOyujVZBg/zUznH9QC142MaTHVmaFlF7uzzfg3CgT9f/l4C0Yi+vU/tbBhxVcXVB90Oohk5+o+ZbWw==} + engines: {node: '>=20.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.972.16': + resolution: {integrity: sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A==} + engines: {node: '>=20.0.0'} + + '@aws/lambda-invoke-store@0.2.4': + resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} + engines: {node: '>=18.0.0'} + '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -398,10 +523,43 @@ packages: commander: optional: true + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + '@capsizecss/unpack@3.0.1': resolution: {integrity: sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==} engines: {node: '>=18'} + '@cbor-extract/cbor-extract-darwin-arm64@2.2.2': + resolution: {integrity: sha512-ZKZ/F8US7JR92J4DMct6cLW/Y66o2K576+zjlEN/MevH70bFIsB10wkZEQPLzl2oNh2SMGy55xpJ9JoBRl5DOA==} + cpu: [arm64] + os: [darwin] + + '@cbor-extract/cbor-extract-darwin-x64@2.2.2': + resolution: {integrity: sha512-32b1mgc+P61Js+KW9VZv/c+xRw5EfmOcPx990JbCBSkYJFY0l25VinvyyWfl+3KjibQmAcYwmyzKF9J4DyKP/Q==} + cpu: [x64] + os: [darwin] + + '@cbor-extract/cbor-extract-linux-arm64@2.2.2': + resolution: {integrity: sha512-wfqgzqCAy/Vn8i6WVIh7qZd0DdBFaWBjPdB6ma+Wihcjv0gHqD/mw3ouVv7kbbUNrab6dKEx/w3xQZEdeXIlzg==} + cpu: [arm64] + os: [linux] + + '@cbor-extract/cbor-extract-linux-arm@2.2.2': + resolution: {integrity: sha512-tNg0za41TpQfkhWjptD+0gSD2fggMiDCSacuIeELyb2xZhr7PrhPe5h66Jc67B/5dmpIhI2QOUtv4SBsricyYQ==} + cpu: [arm] + os: [linux] + + '@cbor-extract/cbor-extract-linux-x64@2.2.2': + resolution: {integrity: sha512-rpiLnVEsqtPJ+mXTdx1rfz4RtUGYIUg2rUAZgd1KjiC1SehYUSkJN7Yh+aVfSjvCGtVP0/bfkQkXpPXKbmSUaA==} + cpu: [x64] + os: [linux] + + '@cbor-extract/cbor-extract-win32-x64@2.2.2': + resolution: {integrity: sha512-dI+9P7cfWxkTQ+oE+7Aa6onEn92PHgfWXZivjNheCRmTBDBf2fx6RyTi0cmgpYLnD1KLZK9ZYrMxaPZ4oiXhGA==} + cpu: [x64] + os: [win32] + '@changesets/apply-release-plan@7.0.14': resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==} @@ -1379,6 +1537,9 @@ packages: '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -1442,6 +1603,10 @@ packages: cpu: [x64] os: [win32] + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -1495,6 +1660,119 @@ packages: '@cfworker/json-schema': optional: true + '@napi-rs/nice-android-arm-eabi@1.1.1': + resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/nice-android-arm64@1.1.1': + resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/nice-darwin-arm64@1.1.1': + resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/nice-darwin-x64@1.1.1': + resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/nice-freebsd-x64@1.1.1': + resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/nice-linux-arm64-gnu@1.1.1': + resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-arm64-musl@1.1.1': + resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-s390x-gnu@1.1.1': + resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-x64-gnu@1.1.1': + resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-x64-musl@1.1.1': + resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@napi-rs/nice-openharmony-arm64@1.1.1': + resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [openharmony] + + '@napi-rs/nice-win32-arm64-msvc@1.1.1': + resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/nice-win32-ia32-msvc@1.1.1': + resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/nice-win32-x64-msvc@1.1.1': + resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/nice@1.1.1': + resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==} + engines: {node: '>= 10'} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -1504,6 +1782,37 @@ packages: '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} + '@nestjs/common@11.1.18': + resolution: {integrity: sha512-0sLq8Z+TIjLnz1Tqp0C/x9BpLbqpt1qEu0VcH4/fkE0y3F5JxhfK1AdKQ/SPbKhKgwqVDoY4gS8GQr2G6ujaWg==} + peerDependencies: + class-transformer: '>=0.4.1' + class-validator: '>=0.13.2' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/core@11.1.18': + resolution: {integrity: sha512-wR3DtGyk/LUAiPtbXDuWJJwVkWElKBY0sqnTzf9d4uM3+X18FRZhK7WFc47czsIGOdWuRsMeLYV+1Z9dO4zDEQ==} + engines: {node: '>= 20'} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/microservices': ^11.0.0 + '@nestjs/platform-express': ^11.0.0 + '@nestjs/websockets': ^11.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1616,12 +1925,21 @@ packages: resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==} engines: {node: '>=18.12.0'} + '@nuxt/kit@4.4.2': + resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==} + engines: {node: '>=18.12.0'} + '@nuxt/nitro-server@4.3.1': resolution: {integrity: sha512-4aNiM69Re02gI1ywnDND0m6QdVKXhWzDdtvl/16veytdHZj3FSq57ZCwOClNJ7HQkEMqXgS+bi6S2HmJX+et+g==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: nuxt: ^4.3.1 + '@nuxt/opencollective@0.4.1': + resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} + engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} + hasBin: true + '@nuxt/schema@4.3.1': resolution: {integrity: sha512-S+wHJdYDuyk9I43Ej27y5BeWMZgi7R/UVql3b3qtT35d0fbpXW7fUenzhLRCCDC6O10sjguc6fcMcR9sMKvV8g==} engines: {node: ^14.18.0 || >=16.10.0} @@ -1708,6 +2026,14 @@ packages: zod: optional: true + '@oclif/core@4.8.1': + resolution: {integrity: sha512-07mq0vKCWNsB85ZHeBMlTAiO0KLFqHyAeRK3bD2K8CI1tX3tiwkWw1lZQZkiw8MUBrhxdROhMkYMY4Q0l7JHqA==} + engines: {node: '>=18.0.0'} + + '@oclif/plugin-help@6.2.37': + resolution: {integrity: sha512-5N/X/FzlJaYfpaHwDC0YHzOzKDWa41s9t+4FpCDu4f9OMReds4JeNBaaWk9rlIzdKjh2M6AC5Q18ORfECRkHGA==} + engines: {node: '>=18.0.0'} + '@octokit/app@16.1.2': resolution: {integrity: sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==} engines: {node: '>= 20'} @@ -3055,81 +3381,342 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@socket.io/component-emitter@3.1.2': - resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@smithy/config-resolver@4.4.13': + resolution: {integrity: sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg==} + engines: {node: '>=18.0.0'} - '@speed-highlight/core@1.2.14': - resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} + '@smithy/core@3.23.13': + resolution: {integrity: sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q==} + engines: {node: '>=18.0.0'} - '@sqlite.org/sqlite-wasm@3.50.4-build1': - resolution: {integrity: sha512-Qig2Wso7gPkU1PtXwFzndh+CTRzrIFxVGqv6eCetjU7YqxlHItj+GvQYwYTppCRgAPawtRN/4AJcEgB9xDHGug==} - hasBin: true + '@smithy/credential-provider-imds@4.2.12': + resolution: {integrity: sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg==} + engines: {node: '>=18.0.0'} - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@smithy/fetch-http-handler@5.3.15': + resolution: {integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==} + engines: {node: '>=18.0.0'} - '@stylistic/eslint-plugin@5.9.0': - resolution: {integrity: sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^9.0.0 || ^10.0.0 + '@smithy/hash-node@4.2.12': + resolution: {integrity: sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w==} + engines: {node: '>=18.0.0'} - '@swc/helpers@0.5.19': - resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==} + '@smithy/invalid-dependency@4.2.12': + resolution: {integrity: sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g==} + engines: {node: '>=18.0.0'} - '@tailwindcss/node@4.2.0': - resolution: {integrity: sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q==} + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} - '@tailwindcss/oxide-android-arm64@4.2.0': - resolution: {integrity: sha512-F0QkHAVaW/JNBWl4CEKWdZ9PMb0khw5DCELAOnu+RtjAfx5Zgw+gqCHFvqg3AirU1IAd181fwOtJQ5I8Yx5wtw==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [android] + '@smithy/is-array-buffer@4.2.2': + resolution: {integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-darwin-arm64@4.2.0': - resolution: {integrity: sha512-I0QylkXsBsJMZ4nkUNSR04p6+UptjcwhcVo3Zu828ikiEqHjVmQL9RuQ6uT/cVIiKpvtVA25msu/eRV97JeNSA==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [darwin] + '@smithy/middleware-content-length@4.2.12': + resolution: {integrity: sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-darwin-x64@4.2.0': - resolution: {integrity: sha512-6TmQIn4p09PBrmnkvbYQ0wbZhLtbaksCDx7Y7R3FYYx0yxNA7xg5KP7dowmQ3d2JVdabIHvs3Hx4K3d5uCf8xg==} - engines: {node: '>= 20'} - cpu: [x64] - os: [darwin] + '@smithy/middleware-endpoint@4.4.28': + resolution: {integrity: sha512-p1gfYpi91CHcs5cBq982UlGlDrxoYUX6XdHSo91cQ2KFuz6QloHosO7Jc60pJiVmkWrKOV8kFYlGFFbQ2WUKKQ==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-freebsd-x64@4.2.0': - resolution: {integrity: sha512-qBudxDvAa2QwGlq9y7VIzhTvp2mLJ6nD/G8/tI70DCDoneaUeLWBJaPcbfzqRIWraj+o969aDQKvKW9dvkUizw==} - engines: {node: '>= 20'} - cpu: [x64] - os: [freebsd] + '@smithy/middleware-retry@4.4.46': + resolution: {integrity: sha512-SpvWNNOPOrKQGUqZbEPO+es+FRXMWvIyzUKUOYdDgdlA6BdZj/R58p4umoQ76c2oJC44PiM7mKizyyex1IJzow==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0': - resolution: {integrity: sha512-7XKkitpy5NIjFZNUQPeUyNJNJn1CJeV7rmMR+exHfTuOsg8rxIO9eNV5TSEnqRcaOK77zQpsyUkBWmPy8FgdSg==} - engines: {node: '>= 20'} - cpu: [arm] - os: [linux] + '@smithy/middleware-serde@4.2.16': + resolution: {integrity: sha512-beqfV+RZ9RSv+sQqor3xroUUYgRFCGRw6niGstPG8zO9LgTl0B0MCucxjmrH/2WwksQN7UUgI7KNANoZv+KALA==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-arm64-gnu@4.2.0': - resolution: {integrity: sha512-Mff5a5Q3WoQR01pGU1gr29hHM1N93xYrKkGXfPw/aRtK4bOc331Ho4Tgfsm5WDGvpevqMpdlkCojT3qlCQbCpA==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [glibc] + '@smithy/middleware-stack@4.2.12': + resolution: {integrity: sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-arm64-musl@4.2.0': - resolution: {integrity: sha512-XKcSStleEVnbH6W/9DHzZv1YhjE4eSS6zOu2eRtYAIh7aV4o3vIBs+t/B15xlqoxt6ef/0uiqJVB6hkHjWD/0A==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [musl] + '@smithy/node-config-provider@4.3.12': + resolution: {integrity: sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-x64-gnu@4.2.0': - resolution: {integrity: sha512-/hlXCBqn9K6fi7eAM0RsobHwJYa5V/xzWspVTzxnX+Ft9v6n+30Pz8+RxCn7sQL/vRHHLS30iQPrHQunu6/vJA==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - libc: [glibc] + '@smithy/node-http-handler@4.5.1': + resolution: {integrity: sha512-ejjxdAXjkPIs9lyYyVutOGNOraqUE9v/NjGMKwwFrfOM354wfSD8lmlj8hVwUzQmlLLF4+udhfCX9Exnbmvfzw==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.2.12': + resolution: {integrity: sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.3.12': + resolution: {integrity: sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.2.12': + resolution: {integrity: sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.2.12': + resolution: {integrity: sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.2.12': + resolution: {integrity: sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.4.7': + resolution: {integrity: sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.3.12': + resolution: {integrity: sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.12.8': + resolution: {integrity: sha512-aJaAX7vHe5i66smoSSID7t4rKY08PbD8EBU7DOloixvhOozfYWdcSYE4l6/tjkZ0vBZhGjheWzB2mh31sLgCMA==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.13.1': + resolution: {integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.2.12': + resolution: {integrity: sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA==} + 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==} + 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.44': + resolution: {integrity: sha512-eZg6XzaCbVr2S5cAErU5eGBDaOVTuTo1I65i4tQcHENRcZ8rMWhQy1DaIYUSLyZjsfXvmCqZrstSMYyGFocvHA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.2.48': + resolution: {integrity: sha512-FqOKTlqSaoV3nzO55pMs5NBnZX8EhoI0DGmn9kbYeXWppgHD6dchyuj2HLqp4INJDJbSrj6OFYJkAh/WhSzZPg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.3.3': + resolution: {integrity: sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig==} + 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.12': + resolution: {integrity: sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.2.13': + resolution: {integrity: sha512-qQQsIvL0MGIbUjeSrg0/VlQ3jGNKyM3/2iU3FPNgy01z+Sp4OvcaxbgIoFOTvB61ZoohtutuOvOcgmhbD0katQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.5.21': + resolution: {integrity: sha512-KzSg+7KKywLnkoKejRtIBXDmwBfjGvg1U1i/etkC7XSWUyFCoLno1IohV2c74IzQqdhX5y3uE44r/8/wuK+A7Q==} + 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'} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@speed-highlight/core@1.2.14': + resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} + + '@sqlite.org/sqlite-wasm@3.50.4-build1': + resolution: {integrity: sha512-Qig2Wso7gPkU1PtXwFzndh+CTRzrIFxVGqv6eCetjU7YqxlHItj+GvQYwYTppCRgAPawtRN/4AJcEgB9xDHGug==} + hasBin: true + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@stylistic/eslint-plugin@5.9.0': + resolution: {integrity: sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + + '@swc/cli@0.8.1': + resolution: {integrity: sha512-L+ACCGHCiS0VqHVep/INLVnvRvJ2XooQFLZq4L8snhxw1jsqz+XRcY313UsyPVturPPE1shW3jic7rt3qEQTSQ==} + engines: {node: '>= 20.19.0'} + hasBin: true + peerDependencies: + '@swc/core': ^1.2.66 + chokidar: ^5.0.0 + peerDependenciesMeta: + chokidar: + optional: true + + '@swc/core-darwin-arm64@1.15.3': + resolution: {integrity: sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.15.3': + resolution: {integrity: sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.15.3': + resolution: {integrity: sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.15.3': + resolution: {integrity: sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-arm64-musl@1.15.3': + resolution: {integrity: sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@swc/core-linux-x64-gnu@1.15.3': + resolution: {integrity: sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-musl@1.15.3': + resolution: {integrity: sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@swc/core-win32-arm64-msvc@1.15.3': + resolution: {integrity: sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.15.3': + resolution: {integrity: sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.15.3': + resolution: {integrity: sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.15.3': + resolution: {integrity: sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.19': + resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==} + + '@swc/types@0.1.26': + resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} + + '@tailwindcss/node@4.2.0': + resolution: {integrity: sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q==} + + '@tailwindcss/oxide-android-arm64@4.2.0': + resolution: {integrity: sha512-F0QkHAVaW/JNBWl4CEKWdZ9PMb0khw5DCELAOnu+RtjAfx5Zgw+gqCHFvqg3AirU1IAd181fwOtJQ5I8Yx5wtw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.0': + resolution: {integrity: sha512-I0QylkXsBsJMZ4nkUNSR04p6+UptjcwhcVo3Zu828ikiEqHjVmQL9RuQ6uT/cVIiKpvtVA25msu/eRV97JeNSA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.0': + resolution: {integrity: sha512-6TmQIn4p09PBrmnkvbYQ0wbZhLtbaksCDx7Y7R3FYYx0yxNA7xg5KP7dowmQ3d2JVdabIHvs3Hx4K3d5uCf8xg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.0': + resolution: {integrity: sha512-qBudxDvAa2QwGlq9y7VIzhTvp2mLJ6nD/G8/tI70DCDoneaUeLWBJaPcbfzqRIWraj+o969aDQKvKW9dvkUizw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0': + resolution: {integrity: sha512-7XKkitpy5NIjFZNUQPeUyNJNJn1CJeV7rmMR+exHfTuOsg8rxIO9eNV5TSEnqRcaOK77zQpsyUkBWmPy8FgdSg==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.0': + resolution: {integrity: sha512-Mff5a5Q3WoQR01pGU1gr29hHM1N93xYrKkGXfPw/aRtK4bOc331Ho4Tgfsm5WDGvpevqMpdlkCojT3qlCQbCpA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.0': + resolution: {integrity: sha512-XKcSStleEVnbH6W/9DHzZv1YhjE4eSS6zOu2eRtYAIh7aV4o3vIBs+t/B15xlqoxt6ef/0uiqJVB6hkHjWD/0A==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.0': + resolution: {integrity: sha512-/hlXCBqn9K6fi7eAM0RsobHwJYa5V/xzWspVTzxnX+Ft9v6n+30Pz8+RxCn7sQL/vRHHLS30iQPrHQunu6/vJA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.2.0': resolution: {integrity: sha512-lKUaygq4G7sWkhQbfdRRBkaq4LY39IriqBQ+Gk6l5nKq6Ay2M2ZZb1tlIyRNgZKS8cbErTwuYSor0IIULC0SHw==} @@ -3409,6 +3996,13 @@ packages: y-protocols: ^1.0.1 yjs: ^13.5.38 + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@turf/boolean-point-in-polygon@7.3.4': resolution: {integrity: sha512-v/4hfyY90Vz9cDgs2GwjQf+Lft8o7mNCLJOTz/iv8SHAIgMMX0czEoIaNVOJr7tBqPqwin1CGwsncrkf5C9n8Q==} @@ -3547,6 +4141,9 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} + '@types/jsesc@2.5.1': resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} @@ -3931,6 +4528,18 @@ packages: resolution: {integrity: sha512-oYWiJbWRQ7gz9Mj0X/NHFJ3OcLMOBzq/2b3j6zeNrQmtFo6dHwU8FAwNpxVIYddVMd+g8eqEi7iRueYx8FtM0Q==} engines: {node: '>=20.0.0'} + '@vercel/cli-auth@0.0.1': + resolution: {integrity: sha512-CnqiuMlZ4pjs2LCPYiR6aLKPPd3Xb8SBI1Y7eotXKgpx6qgrGNY+E7EIyUt5ErGHJGIrCZyGG5WEo4bHtVmz2Q==} + + '@vercel/functions@3.4.3': + resolution: {integrity: sha512-kA14KIUVgAY6VXbhZ5jjY+s0883cV3cZqIU3WhrSRxuJ9KvxatMjtmzl0K23HK59oOUjYl7HaE/eYMmhmqpZzw==} + engines: {node: '>= 20'} + peerDependencies: + '@aws-sdk/credential-provider-web-identity': '*' + peerDependenciesMeta: + '@aws-sdk/credential-provider-web-identity': + optional: true + '@vercel/nft@1.3.1': resolution: {integrity: sha512-ihNT1rswiq3cy4WKQAV5kJi6UjWX1vLUzlLc+Vvq83G8CU9nMgfDWz5f1tOnSlS8LeC4Wp4qTB3+HGj/ccUrFQ==} engines: {node: '>=20'} @@ -3940,6 +4549,14 @@ packages: resolution: {integrity: sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w==} engines: {node: '>= 20'} + '@vercel/oidc@3.2.0': + resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} + engines: {node: '>= 20'} + + '@vercel/queue@0.1.4': + resolution: {integrity: sha512-wo+jCycmCX078vQSbkX+RcLvySONDCK0f9aQp5UMKQD1+B+xKt3YVbIYbZukvoHQpbm5nnk6If+ADSeK/PmCgQ==} + engines: {node: '>=20.0.0'} + '@vercel/speed-insights@1.3.1': resolution: {integrity: sha512-PbEr7FrMkUrGYvlcLHGkXdCkxnylCWePx7lPxxq36DNdfo9mcUjLOmqOyPDHAOgnfqgGGdmE3XI9L/4+5fr+vQ==} peerDependencies: @@ -4133,6 +4750,149 @@ packages: '@webcontainer/env@1.1.1': resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + '@workflow/ai@4.1.0-beta.60': + resolution: {integrity: sha512-u0qQ4mtDwDDS6+N3i9lO3JHhzJpyH97999OboIzb2QieRndIvwgrg4KSf+wt4ofb77qIU8tIxwG9SxbFfFccWQ==} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + ai: ^6 + workflow: ^4.2.0-beta.76 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/astro@4.0.0-beta.50': + resolution: {integrity: sha512-NI5eqOCBApqd88fRPZ27NW8tMtiG+UjjkMNMD0zb7sD6LwKhChTGHO/fk3brvnyxUy0zRca8am9IRAeXAra9jg==} + + '@workflow/builders@4.0.1-beta.67': + resolution: {integrity: sha512-TX6nAFsebscncVaPHRAS18otBuK5ZnhSeq4rS3A6CGaSJiST8tv3kQcbXyZu4pJiSPmGKxn4uy9/KbReyCl7DQ==} + + '@workflow/cli@4.2.0-beta.76': + resolution: {integrity: sha512-fauuVTDuxqovptTZrbkhgqVqDATDXaiO4F/+nmpMUNTlvBuWfEIULGZT3nMOpgUsF8159inTyCX56vdFlwXYJw==} + hasBin: true + + '@workflow/core@4.2.0-beta.76': + resolution: {integrity: sha512-W/P85lrf2/nE0RWfB07t3Bem0BwDuqnXoknRuSrOOq+WO6Hxc9/CiEN3S1lk9L/QVgzBLWZOCS5IhBwTt3VR1A==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/errors@4.1.0-beta.20': + resolution: {integrity: sha512-V54ssJo7vUXFCueX5TssM4NhTKsmG5umoG/hYtVPVgJUDL1i17kB8Fm41FJfh4dg/PWta0ruJCAFs58Udz/2sg==} + + '@workflow/nest@0.0.0-beta.25': + resolution: {integrity: sha512-g5u4gWW7IzzbfHkDqCHuQld9cWaeS53dU0V385da7+bLYvy6XPJ0yvABqKAtJFm8xOsWlm06QDH19ymjaUkl+g==} + hasBin: true + peerDependencies: + '@nestjs/common': '>=10.0.0' + '@nestjs/core': '>=10.0.0' + '@swc/cli': '>=0.4.0' + '@swc/core': '>=1.5.0' + + '@workflow/next@4.0.1-beta.72': + resolution: {integrity: sha512-QgcdkLkjs2hPG/EnYfK+d4iYfJyQVg8KuxON3K/LiP1Ijagn/1xu4vC+hZocM8UbpXg46LzsASxY9p5bgVaY1Q==} + peerDependencies: + next: '>13' + peerDependenciesMeta: + next: + optional: true + + '@workflow/nitro@4.0.1-beta.71': + resolution: {integrity: sha512-g6cSM/KUlgz49kgqUC3eshzTldbNPzkB60adnksqqBnt7wZbY/GTBjsKAScR7QFSTzMZfSZ5SdGkQJixCtkFDw==} + + '@workflow/nuxt@4.0.1-beta.60': + resolution: {integrity: sha512-ywHvVVwJ1BUuU7m4zPP8CG4/T59bd9FJoC3xsdiFgqTjFXyOFqzkQYnujvhp4zqv6Rmldp2bb3sLkSAJJhVniQ==} + + '@workflow/rollup@4.0.0-beta.33': + resolution: {integrity: sha512-g0Rd5eV80nvOqP222N9YhByBkrtGgH+9fjQuiG1kDdSYNu/ZEArNdBhpwVK5ZDrjTXZgmbYDsg8GzkVcDmOvrg==} + + '@workflow/serde@4.1.0-beta.2': + resolution: {integrity: sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww==} + + '@workflow/sveltekit@4.0.0-beta.65': + resolution: {integrity: sha512-aBZCvCOK4NC2VTddn/0jPEpO7XgopACV8eZQFVRQEln5W3bCNzSYqAmUefKQ7a96BBwNSTDcBX7/30ypOH/SYg==} + + '@workflow/swc-plugin@4.1.0-beta.21': + resolution: {integrity: sha512-CcZG8T3oxMNils93OTomXT54pMwqH2IPheiZjg4bEz2aQtIQXGyU3ul0NRCDyLFgQa9tb3mgW18yOsOqajr0Tg==} + peerDependencies: + '@swc/core': 1.15.3 + + '@workflow/typescript-plugin@4.0.1-beta.5': + resolution: {integrity: sha512-5upSEmro3cYqB5JS7qjUVJKovlSIy+Yg3ets2OEQxMn6UATeCf5Qxbrb2EOy02pW2QUdkfu1wZ2XUsbahRQjRg==} + peerDependencies: + typescript: '>=5.0.0' + + '@workflow/utils@4.1.0-beta.13': + resolution: {integrity: sha512-3vVuXZVfLVeJ78MM6D0gNXg6hMZdDYAzmF92p+HxItI0B2Yk1EuDIIUfBXKWwTOKCCuKF4iroZt2u9BFqrs2AQ==} + + '@workflow/vite@4.0.0-beta.26': + resolution: {integrity: sha512-TuOdcX0v7miHIcs5+kera70kWkvygAXTKHAqkBb4pHmmlqKOrlwbCu1Z/qNI3qOWd5Jtpu9IItHaiwR9uu/dUg==} + + '@workflow/web@4.1.0-beta.47': + resolution: {integrity: sha512-1D7uRpN7pBXIm4yS/26s9g110uiU8n7UfD7oAK2+5eI4HSyYfBvr/+iUFvpCClyadeUlxNdzVPqSNFoX60QVSg==} + + '@workflow/world-local@4.1.0-beta.49': + resolution: {integrity: sha512-juVuEeDcx0wPwGW3HnFrmHUNRgnZkq2aRkhU43X0eqL7wxJDBsBQi7MV1Rfrf6gFh9CnEmV6/jFpbdY1kc5KiA==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/world-vercel@4.1.0-beta.47': + resolution: {integrity: sha512-jIgVu95a5Thu+2tJJHZiSBJawplfXSQ6jyNwQY2rsEXkL2H6WigxryaeHTUlp4ntyFzdjAdojQYQTbAM9Dc4Ug==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/world@4.1.0-beta.15': + resolution: {integrity: sha512-/eoYOF7WdxGTlHVYMA66dRIENtJpgEfJPbQbl+JZoui1V/6uA0ZmXP742qEwbref5+tq4tzLT4nnC+WJbdUqXQ==} + peerDependencies: + zod: 4.3.6 + + '@xhmikosr/archive-type@8.0.1': + resolution: {integrity: sha512-toXuiWChyfOpEiCPsIw6HGHaNji5LVkvB6EREL548vGWr+hGaehwxG4LzN20vm9aGFXwnA/Jty8yW2/SmV+1zQ==} + engines: {node: '>=20'} + + '@xhmikosr/bin-check@8.2.1': + resolution: {integrity: sha512-DNruLq+kalxcE7JeDxtqrN9kyWjLW8VqsQPLRTwD1t9ck/1rF4qBL0mX5Fe2/xLOMjo5wPb67BNX2kSAhzfLjA==} + engines: {node: '>=20'} + + '@xhmikosr/bin-wrapper@14.2.2': + resolution: {integrity: sha512-4me/0Tw0ORrrRLliLc1w6K0unrnclVaFAp69z8fNu1rcYtD/pKtI1lZWvZ8htiRQtqhoqxBiQ2qfkZBN8q2KAw==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-tar@9.0.1': + resolution: {integrity: sha512-4AkVR1SoqTxYY22IRRYKDeLirPIDGqMqYsqgjKYuwhgRcBb+yDP4t5Xph33UCzL/nahK/aADmlMEjTNstbX7kw==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-tarbz2@9.0.1': + resolution: {integrity: sha512-aFONnsbqEOuXudvK7V7wB8dcEAKR389oUYQfZhrQZA8OtogJpDjrUAvEH3Qlc9yFqTU6r5/svTEcRwtXhoIJbQ==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-targz@9.0.1': + resolution: {integrity: sha512-1JXu2b6yrpm5EuBoOzMU57B4qrHXJKWQQ7LlMynNEiz85mEjDciO3ayf//GXaTLLCEKiHjWlU3q3THjgf7uODA==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-unzip@8.1.0': + resolution: {integrity: sha512-hVcpEZIS8avXU1ioR0Pb2LcBYHfah1lzzTQPDItkBi3W+kSE/DxSeEgOoHJB8rn+Izm0ArWZxxlpsvEK4ySjaw==} + engines: {node: '>=20'} + + '@xhmikosr/decompress@11.1.1': + resolution: {integrity: sha512-KdjwFbTzcpGaTIPncNaPLOHocBSF1hHo4s7gr+ZzzoB2bzVzFumzawqKTij0Vpw0idM4C2FZFPktIfyznkeJTQ==} + engines: {node: '>=20'} + + '@xhmikosr/downloader@16.1.1': + resolution: {integrity: sha512-1B2ZqYDpIHn9bjah48rEo33GbmoV8hufXap/3KHStgIM9R9/QDm1pajqDwEgqDORMl2eZ7Dpbz71Xi854y3m3Q==} + engines: {node: '>=20'} + + '@xhmikosr/os-filter-obj@4.0.0': + resolution: {integrity: sha512-CBJYipR5lrtQQZl9ylarWyh1qhcs/tMy9ydSHte/Hefn3ev8NMvS3ss+eqiXEoBr2wBVgKj2qjcViXO9P/8K4A==} + engines: {node: '>=20'} + abbrev@3.0.1: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4141,6 +4901,10 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} @@ -4193,10 +4957,21 @@ packages: alien-signals@3.1.2: resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -4213,6 +4988,10 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + ansis@3.17.0: + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + engines: {node: '>=14'} + ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} @@ -4221,6 +5000,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + arch@3.0.0: + resolution: {integrity: sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q==} + archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} @@ -4243,6 +5025,9 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -4259,6 +5044,10 @@ packages: resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} engines: {node: '>=20.19.0'} + async-listen@3.0.0: + resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} + engines: {node: '>= 14'} + async-lock@1.4.1: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} @@ -4335,6 +5124,14 @@ packages: resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} + binary-version-check@6.1.0: + resolution: {integrity: sha512-REKdLKmuViV2WrtWXvNSiPX04KbIjfUV3Cy8batUeOg+FtmowavzJorfFhWq95cVJzINnL/44ixP26TrdJZACA==} + engines: {node: '>=18'} + + binary-version@7.1.0: + resolution: {integrity: sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw==} + engines: {node: '>=18'} + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -4347,6 +5144,10 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + body-parser@1.20.4: + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} @@ -4357,6 +5158,13 @@ packages: bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -4367,6 +5175,10 @@ packages: resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} engines: {node: 18 || 20 || >=22} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -4379,6 +5191,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} @@ -4406,6 +5221,10 @@ packages: peerDependencies: esbuild: '>=0.18' + byte-counter@0.1.0: + resolution: {integrity: sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==} + engines: {node: '>=20'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -4422,6 +5241,14 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@13.0.18: + resolution: {integrity: sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==} + engines: {node: '>=18'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -4438,6 +5265,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} @@ -4451,6 +5282,13 @@ packages: resolution: {integrity: sha512-wljhAjDDIv/hM2FzgJnYQg90AWmZMNtESCjTeLH680qTzdo0nErlCxOmgzgX4ZsZAtIvqHyD87ES8QyriXB+BQ==} engines: {node: '>=18'} + cbor-extract@2.2.2: + resolution: {integrity: sha512-hlSxxI9XO2yQfe9g6msd3g4xCfDqK5T5P0fRMLuaLHhxn4ViPrm+a+MUfhrvH2W962RGxcBwEGzLQyjbDG1gng==} + hasBin: true + + cbor-x@1.6.0: + resolution: {integrity: sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -4458,6 +5296,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -4521,6 +5363,22 @@ packages: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} + clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + clipboardy@4.0.0: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} @@ -4529,6 +5387,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -4560,10 +5422,18 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + comment-parser@1.4.5: resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==} engines: {node: '>= 12.0.0'} @@ -4591,6 +5461,10 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + content-disposition@1.0.1: resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} engines: {node: '>=18'} @@ -4599,6 +5473,10 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -4611,6 +5489,9 @@ packages: cookie-es@2.0.0: resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + cookie-signature@1.2.2: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} @@ -4923,6 +5804,14 @@ packages: sqlite3: optional: true + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -4935,6 +5824,10 @@ packages: decode-named-character-reference@1.3.0: resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + decompress-response@10.0.0: + resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==} + engines: {node: '>=20'} + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -4958,6 +5851,13 @@ packages: resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defaults@2.0.2: + resolution: {integrity: sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==} + engines: {node: '>=16'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -4991,6 +5891,10 @@ packages: destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detab@3.0.2: resolution: {integrity: sha512-7Bp16Bk8sk0Y6gdXiCtnpGbghn8atnTJdd/82aWvS5ESnlcNvgUc10U2NYS0PAiDSGjWiI8qs/Cv1b2uSGdQ8w==} @@ -5175,9 +6079,17 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + easy-table@1.2.0: + resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.5.302: resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} @@ -5232,6 +6144,9 @@ packages: resolution: {integrity: sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==} engines: {node: '>=10.0.0'} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5282,6 +6197,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -5544,13 +6463,28 @@ packages: peerDependencies: express: '>= 4.11' + express@4.22.1: + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} + engines: {node: '>= 0.10.0'} + express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + + ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5579,9 +6513,19 @@ packages: fast-npm-meta@1.2.1: resolution: {integrity: sha512-vTHOCEbzcbQEfYL0sPzcz+HF5asxoy60tPBVaiYzsCfuyhbXZCSqXL+LgPGV22nuAYimoGMeDpywMQB4aOw8HQ==} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-xml-builder@1.1.4: + resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==} + + fast-xml-parser@5.5.8: + resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==} + hasBin: true + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -5609,13 +6553,32 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + filelist@1.0.6: + resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} + + filename-reserved-regex@4.0.0: + resolution: {integrity: sha512-9ZT504KxEQDamsOogZImAWGEN24R1uFAxU3ZS4AZqn2ooidmN68Olh7n4/RcA4lLatZztjA0ZSuxeLHVoCc8JA==} + engines: {node: '>=20'} + + filenamify@7.0.1: + resolution: {integrity: sha512-9b4rfnaX2MkJCgp27wypV6DAMvj4WMOSgJ+TdcpJIO84Dql+Cv6iJjdG4XDTLubOWkfNiBv3joO59sau/TXw+Q==} + engines: {node: '>=20'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} + engines: {node: '>= 0.8'} + finalhandler@2.1.1: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} @@ -5635,10 +6598,18 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + find-up@8.0.0: resolution: {integrity: sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==} engines: {node: '>=20'} + find-versions@6.0.0: + resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} + engines: {node: '>=18'} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -5679,6 +6650,10 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + form-data-encoder@4.1.0: + resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} + engines: {node: '>= 18'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -5704,6 +6679,10 @@ packages: react-dom: optional: true + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -5711,6 +6690,10 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} + engines: {node: '>=14.14'} + fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -5727,6 +6710,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} + engines: {node: '>=18'} + fuse.js@7.1.0: resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} engines: {node: '>=10'} @@ -5749,10 +6736,18 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + get-port-please@3.2.0: resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} @@ -5806,6 +6801,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -5847,6 +6845,10 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@14.6.6: + resolution: {integrity: sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==} + engines: {node: '>=20'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -5861,6 +6863,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -5956,6 +6962,9 @@ packages: html-whitespace-sensitive-tag-names@3.0.1: resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -5964,6 +6973,10 @@ packages: resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -6029,6 +7042,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -6043,6 +7060,9 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inspect-with-kind@1.0.5: + resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} + internmap@1.0.1: resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} @@ -6135,6 +7155,10 @@ packages: resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} engines: {node: '>=18'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -6149,6 +7173,10 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -6182,6 +7210,10 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + is-unicode-supported@2.1.0: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} @@ -6219,6 +7251,10 @@ packages: resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} engines: {node: '>=18'} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} + isomorphic-git@1.37.2: resolution: {integrity: sha512-HCQBBKmXIMPdHgYGstSBNp6MNmVcMQBbUqJF8xfywFmlpNseO4KKex59YlXqNxhRxmv3fUZwvNWvMyOdc1VvhA==} engines: {node: '>=14.17'} @@ -6227,9 +7263,18 @@ packages: isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -6302,12 +7347,18 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + kdbush@3.0.0: resolution: {integrity: sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==} keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -6448,6 +7499,10 @@ packages: resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} hasBin: true + load-esm@1.0.3: + resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==} + engines: {node: '>=13.2.0'} + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6464,6 +7519,10 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@8.0.0: resolution: {integrity: sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==} engines: {node: '>=20'} @@ -6492,9 +7551,17 @@ packages: lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -6518,6 +7585,10 @@ packages: magicast@0.5.2: resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + make-asynchronous@1.1.0: + resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} + engines: {node: '>=18'} + maplibre-gl@2.4.0: resolution: {integrity: sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==} @@ -6585,10 +7656,17 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} @@ -6600,6 +7678,10 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + mgrs@1.0.0: resolution: {integrity: sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==} @@ -6691,14 +7773,27 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mime-types@3.0.2: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + mime@4.1.0: resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} engines: {node: '>=16'} @@ -6708,10 +7803,18 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + minimark@0.2.0: resolution: {integrity: sha512-AmtWU9pO0C2/3AM2pikaVhJ//8E5rOpJ7+ioFQfjIq+wCsBeuZoxPd97hBFZ9qrI7DMHZudwGH3r8A7BMnsIew==} @@ -6722,6 +7825,10 @@ packages: resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -6750,12 +7857,23 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mixpart@0.0.4: + resolution: {integrity: sha512-RAoaOSXnMLrfUfmFbNynRYjeMru/bhgAYRy/GQVI8gmRq7vm9V9c2gGVYnYoQ008X6YTmRIu5b0397U7vb0bIA==} + engines: {node: '>=22.0.0'} + + mixpart@0.0.5: + resolution: {integrity: sha512-TpWi9/2UIr7VWCVAM7NB4WR4yOglAetBkuKfxs3K0vFcUukqAaW1xsgX0v1gNGiDKzYhPHFcHgarC7jmnaOy4w==} + engines: {node: '>=20.0.0'} + mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + mocked-exports@0.1.1: resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==} @@ -6779,6 +7897,9 @@ packages: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -6812,6 +7933,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -6862,6 +7987,10 @@ packages: resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} engines: {node: '>= 6.13.0'} + node-gyp-build-optional-packages@5.1.1: + resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} + hasBin: true + node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -6881,6 +8010,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6998,6 +8131,10 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -7008,6 +8145,10 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + open@8.4.0: + resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + engines: {node: '>=12'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -7019,9 +8160,17 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + os-paths@4.4.0: + resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} + engines: {node: '>= 6.0'} + outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -7055,6 +8204,14 @@ packages: peerDependencies: oxc-parser: '>=0.98.0' + p-cancelable@4.0.1: + resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} + engines: {node: '>=14.16'} + + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -7087,6 +8244,10 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -7154,6 +8315,14 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-expression-matcher@1.2.1: + resolution: {integrity: sha512-d7gQQmLvAKXKXE2GeP9apIGbMYKz88zWdsn/BN2HRWVQsDFdUY36WSLTY0Jvd4HWi7Fb30gQ62oAOzdgJA6fZw==} + engines: {node: '>=14.0.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -7173,9 +8342,15 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} + path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -7190,6 +8365,9 @@ packages: resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} hasBin: true + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} @@ -7242,6 +8420,9 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + piscina@4.9.2: + resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==} + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} @@ -7582,6 +8763,10 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qs@6.14.2: + resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} + engines: {node: '>=0.6'} + qs@6.15.0: resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} @@ -7595,6 +8780,10 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + quickselect@2.0.0: resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} @@ -7608,6 +8797,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} + engines: {node: '>= 0.8'} + raw-body@3.0.2: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} @@ -7660,6 +8853,9 @@ packages: resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -7738,6 +8934,9 @@ packages: resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} engines: {node: '>=18'} + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -7757,6 +8956,14 @@ packages: engines: {node: '>= 0.4'} hasBin: true + responselike@4.0.2: + resolution: {integrity: sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==} + engines: {node: '>=20'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} @@ -7860,6 +9067,9 @@ packages: rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -7898,6 +9108,21 @@ packages: secure-json-parse@4.1.0: resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + + seek-bzip@2.0.0: + resolution: {integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==} + hasBin: true + + semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} + + semver-truncate@3.0.0: + resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} + engines: {node: '>=12'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -7907,6 +9132,10 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} + engines: {node: '>= 0.8.0'} + send@1.2.1: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} @@ -7921,6 +9150,10 @@ packages: serve-placeholder@2.0.2: resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==} + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} + engines: {node: '>= 0.8.0'} + serve-static@2.2.1: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} @@ -8039,6 +9272,14 @@ packages: resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==} engines: {node: '>=10.0.0'} + sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + + sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -8103,6 +9344,10 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} @@ -8114,6 +9359,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} @@ -8138,6 +9387,9 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-dirs@3.0.0: + resolution: {integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -8164,6 +9416,13 @@ packages: striptags@3.2.0: resolution: {integrity: sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==} + strnum@2.2.2: + resolution: {integrity: sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==} + + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} + structured-clone-es@1.0.0: resolution: {integrity: sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ==} @@ -8176,6 +9435,10 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} + engines: {node: '>=18'} + supercluster@7.1.5: resolution: {integrity: sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==} @@ -8191,6 +9454,14 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@4.4.0: + resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + engines: {node: '>=20'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -8254,6 +9525,10 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + terminal-link@5.0.0: + resolution: {integrity: sha512-qFAy10MTMwjzjU8U16YS4YoZD+NQLHzLssFMNqgravjbvIPNiqkGFR4yjhJfmY9R5OFU7+yHxc6y+uGHkKwLRA==} + engines: {node: '>=20'} + terser@5.46.0: resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} engines: {node: '>=10'} @@ -8273,6 +9548,13 @@ packages: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} + tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -8310,6 +9592,10 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + topojson-client@3.1.0: resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==} hasBin: true @@ -8438,10 +9724,22 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + type-fest@5.4.4: resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} engines: {node: '>=20'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -8476,9 +9774,24 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + + ulid@3.0.2: + resolution: {integrity: sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w==} + hasBin: true + ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + unconfig-core@7.5.0: resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} @@ -8495,6 +9808,10 @@ packages: resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} engines: {node: '>=18.17'} + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + engines: {node: '>=20.18.1'} + unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} @@ -8511,6 +9828,10 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -8560,6 +9881,10 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -8722,6 +10047,10 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -8922,6 +10251,13 @@ packages: w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + watchpack@2.5.1: + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -8929,6 +10265,9 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -8960,6 +10299,14 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + wkt-parser@1.5.2: resolution: {integrity: sha512-1ZUiV1FTwSiSrgWzV9KXJuOF2BVW91KY/mau04BhnmgOdroRQea7Q0s5TVqwGLm0D2tZwObd/tBYXW49sSxp3Q==} @@ -8967,6 +10314,18 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workflow@4.2.0-beta.76: + resolution: {integrity: sha512-Qpc7wD6oFrs/UYB4ypVf9TfuCzH2a8iOmslnF/QGppHEdtld01dz/DdjbckvuI9ge/zy+PiopzDT7Duk7/LFRQ==} + hasBin: true + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -8975,6 +10334,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -9006,6 +10369,14 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + xdg-app-paths@5.1.0: + resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} + engines: {node: '>=6'} + + xdg-portable@7.3.0: + resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} + engines: {node: '>= 6.0'} + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -9061,6 +10432,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yauzl@3.3.0: + resolution: {integrity: sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==} + engines: {node: '>=12'} + yjs@13.6.29: resolution: {integrity: sha512-kHqDPdltoXH+X4w1lVmMtddE3Oeqq48nM40FD5ojTd8xYhQpzIDcfE2keMSU5bAgRPJBe225WTUdyUgj1DtbiQ==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} @@ -9101,6 +10476,9 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.1.11: + resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -9114,6 +10492,13 @@ snapshots: '@phc/format': 1.0.0 '@poppinss/utils': 6.10.1 + '@ai-sdk/anthropic@3.0.66(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.22(zod@4.3.6) + zod: 4.3.6 + optional: true + '@ai-sdk/gateway@3.0.46(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 @@ -9128,6 +10513,13 @@ snapshots: '@vercel/oidc': 3.1.0 zod: 4.3.6 + '@ai-sdk/google@3.0.58(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.22(zod@4.3.6) + zod: 4.3.6 + optional: true + '@ai-sdk/mcp@1.0.21(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 @@ -9135,6 +10527,20 @@ snapshots: pkce-challenge: 5.0.1 zod: 4.3.6 + '@ai-sdk/openai-compatible@2.0.38(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.22(zod@4.3.6) + zod: 4.3.6 + optional: true + + '@ai-sdk/openai@3.0.50(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.22(zod@4.3.6) + zod: 4.3.6 + optional: true + '@ai-sdk/provider-utils@4.0.15(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 @@ -9142,6 +10548,14 @@ snapshots: eventsource-parser: 3.0.6 zod: 4.3.6 + '@ai-sdk/provider-utils@4.0.22(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.0.6 + zod: 4.3.6 + optional: true + '@ai-sdk/provider@3.0.8': dependencies: json-schema: 0.4.0 @@ -9164,6 +10578,14 @@ snapshots: transitivePeerDependencies: - zod + '@ai-sdk/xai@3.0.77(zod@4.3.6)': + dependencies: + '@ai-sdk/openai-compatible': 2.0.38(zod@4.3.6) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.22(zod@4.3.6) + zod: 4.3.6 + optional: true + '@alloc/quick-lru@5.2.0': {} '@antfu/install-pkg@1.1.0': @@ -9176,6 +10598,184 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.1 + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.6 + '@aws-sdk/util-locate-window': 3.965.5 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.6 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/core@3.973.26': + dependencies: + '@aws-sdk/types': 3.973.6 + '@aws-sdk/xml-builder': 3.972.16 + '@smithy/core': 3.23.13 + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/signature-v4': 5.3.12 + '@smithy/smithy-client': 4.12.8 + '@smithy/types': 4.13.1 + '@smithy/util-base64': 4.3.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.972.13': + dependencies: + '@aws-sdk/core': 3.973.26 + '@aws-sdk/nested-clients': 3.996.18 + '@aws-sdk/types': 3.973.6 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.972.9': + dependencies: + '@aws-sdk/types': 3.973.6 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.972.28': + dependencies: + '@aws-sdk/core': 3.973.26 + '@aws-sdk/types': 3.973.6 + '@aws-sdk/util-endpoints': 3.996.5 + '@smithy/core': 3.23.13 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-retry': 4.2.13 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.996.18': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.26 + '@aws-sdk/middleware-host-header': 3.972.8 + '@aws-sdk/middleware-logger': 3.972.8 + '@aws-sdk/middleware-recursion-detection': 3.972.9 + '@aws-sdk/middleware-user-agent': 3.972.28 + '@aws-sdk/region-config-resolver': 3.972.10 + '@aws-sdk/types': 3.973.6 + '@aws-sdk/util-endpoints': 3.996.5 + '@aws-sdk/util-user-agent-browser': 3.972.8 + '@aws-sdk/util-user-agent-node': 3.973.14 + '@smithy/config-resolver': 4.4.13 + '@smithy/core': 3.23.13 + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/hash-node': 4.2.12 + '@smithy/invalid-dependency': 4.2.12 + '@smithy/middleware-content-length': 4.2.12 + '@smithy/middleware-endpoint': 4.4.28 + '@smithy/middleware-retry': 4.4.46 + '@smithy/middleware-serde': 4.2.16 + '@smithy/middleware-stack': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/node-http-handler': 4.5.1 + '@smithy/protocol-http': 5.3.12 + '@smithy/smithy-client': 4.12.8 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@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.44 + '@smithy/util-defaults-mode-node': 4.2.48 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.13 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.972.10': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/config-resolver': 4.4.13 + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@aws-sdk/types@3.973.6': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.996.5': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-endpoints': 3.3.3 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.965.5': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/types': 4.13.1 + bowser: 2.14.1 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.973.14': + dependencies: + '@aws-sdk/middleware-user-agent': 3.972.28 + '@aws-sdk/types': 3.973.6 + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-config-provider': 4.2.2 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.972.16': + dependencies: + '@smithy/types': 4.13.1 + fast-xml-parser: 5.5.8 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.2.4': {} + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -9197,7 +10797,7 @@ snapshots: '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -9353,7 +10953,7 @@ snapshots: '@babel/parser': 7.29.0 '@babel/template': 7.28.6 '@babel/types': 7.29.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9372,9 +10972,29 @@ snapshots: cac: 6.7.14 citty: 0.2.1 - '@capsizecss/unpack@3.0.1': - dependencies: - fontkit: 2.0.4 + '@borewit/text-codec@0.2.2': {} + + '@capsizecss/unpack@3.0.1': + dependencies: + fontkit: 2.0.4 + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-darwin-x64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-linux-arm64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-linux-arm@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-linux-x64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-win32-x64@2.2.2': + optional: true '@changesets/apply-release-plan@7.0.14': dependencies: @@ -9892,7 +11512,7 @@ snapshots: '@eslint/config-array@0.21.1': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -9931,7 +11551,7 @@ snapshots: '@eslint/eslintrc@3.3.4': dependencies: ajv: 6.14.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -10181,7 +11801,7 @@ snapshots: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 pathe: 2.0.3 picocolors: 1.1.1 @@ -10248,9 +11868,11 @@ snapshots: '@juggle/resize-observer@3.4.0': {} + '@keyv/serialize@1.1.1': {} + '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -10318,6 +11940,8 @@ snapshots: '@libsql/win32-x64-msvc@0.5.22': optional: true + '@lukeed/csprng@1.1.0': {} + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.28.6 @@ -10396,6 +12020,78 @@ snapshots: transitivePeerDependencies: - supports-color + '@napi-rs/nice-android-arm-eabi@1.1.1': + optional: true + + '@napi-rs/nice-android-arm64@1.1.1': + optional: true + + '@napi-rs/nice-darwin-arm64@1.1.1': + optional: true + + '@napi-rs/nice-darwin-x64@1.1.1': + optional: true + + '@napi-rs/nice-freebsd-x64@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm64-musl@1.1.1': + optional: true + + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-s390x-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-x64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-x64-musl@1.1.1': + optional: true + + '@napi-rs/nice-openharmony-arm64@1.1.1': + optional: true + + '@napi-rs/nice-win32-arm64-msvc@1.1.1': + optional: true + + '@napi-rs/nice-win32-ia32-msvc@1.1.1': + optional: true + + '@napi-rs/nice-win32-x64-msvc@1.1.1': + optional: true + + '@napi-rs/nice@1.1.1': + optionalDependencies: + '@napi-rs/nice-android-arm-eabi': 1.1.1 + '@napi-rs/nice-android-arm64': 1.1.1 + '@napi-rs/nice-darwin-arm64': 1.1.1 + '@napi-rs/nice-darwin-x64': 1.1.1 + '@napi-rs/nice-freebsd-x64': 1.1.1 + '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1 + '@napi-rs/nice-linux-arm64-gnu': 1.1.1 + '@napi-rs/nice-linux-arm64-musl': 1.1.1 + '@napi-rs/nice-linux-ppc64-gnu': 1.1.1 + '@napi-rs/nice-linux-riscv64-gnu': 1.1.1 + '@napi-rs/nice-linux-s390x-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-musl': 1.1.1 + '@napi-rs/nice-openharmony-arm64': 1.1.1 + '@napi-rs/nice-win32-arm64-msvc': 1.1.1 + '@napi-rs/nice-win32-ia32-msvc': 1.1.1 + '@napi-rs/nice-win32-x64-msvc': 1.1.1 + optional: true + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.8.1 @@ -10412,6 +12108,30 @@ snapshots: '@neon-rs/load@0.0.4': {} + '@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + file-type: 21.3.4 + iterare: 1.2.1 + load-esm: 1.0.3 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + transitivePeerDependencies: + - supports-color + + '@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + '@nestjs/common': 11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nuxt/opencollective': 0.4.1 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 8.4.2 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -10433,7 +12153,7 @@ snapshots: confbox: 0.2.4 consola: 3.4.2 copy-paste: 2.2.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) defu: 6.1.4 exsolve: 1.0.8 fuse.js: 7.1.0 @@ -10653,7 +12373,7 @@ snapshots: - utf-8-validate - vite - '@nuxt/fonts@0.12.1(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))': + '@nuxt/fonts@0.12.1(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))': dependencies: '@nuxt/devtools-kit': 3.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) '@nuxt/kit': 4.3.1(magicast@0.5.2) @@ -10662,7 +12382,7 @@ snapshots: defu: 6.1.4 esbuild: 0.25.12 fontaine: 0.7.0 - fontless: 0.1.0(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) + fontless: 0.1.0(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) h3: 1.15.5 jiti: 2.6.1 magic-regexp: 0.10.0 @@ -10675,7 +12395,7 @@ snapshots: ufo: 1.6.3 unifont: 0.6.0 unplugin: 2.3.11 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10720,7 +12440,7 @@ snapshots: - vite - vue - '@nuxt/image@2.0.0(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)': + '@nuxt/image@2.0.0(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.2) consola: 3.4.2 @@ -10733,7 +12453,7 @@ snapshots: std-env: 3.10.0 ufo: 1.6.3 optionalDependencies: - ipx: 3.1.1(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + ipx: 3.1.1(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10807,7 +12527,32 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.3.1(400f8177f093c449f1573ab1a32e9f47)': + '@nuxt/kit@4.4.2(magicast@0.5.2)': + dependencies: + c12: 3.3.3(magicast@0.5.2) + consola: 3.4.2 + defu: 6.1.4 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.0.8 + ignore: 7.0.5 + jiti: 2.6.1 + klona: 2.0.6 + mlly: 1.8.2 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rc9: 3.0.0 + scule: 1.3.0 + semver: 7.7.4 + tinyglobby: 0.2.15 + ufo: 1.6.3 + unctx: 2.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + + '@nuxt/nitro-server@4.3.1(62d7c7822b526ec0c5bbbed6d96da593)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.3.1(magicast@0.5.2) @@ -10824,8 +12569,8 @@ snapshots: impound: 1.0.0 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-beta.57) - nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2) + nitropack: 2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-rc.3) + nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -10833,7 +12578,7 @@ snapshots: std-env: 3.10.0 ufo: 1.6.3 unctx: 2.5.0 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) vue: 3.5.28(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 @@ -10872,7 +12617,7 @@ snapshots: - uploadthing - xml2js - '@nuxt/nitro-server@4.3.1(790c95757f2f7467bb4fd8a744cc2e48)': + '@nuxt/nitro-server@4.3.1(fdd9b1731a4f94ca9c00c121b2d15946)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.3.1(magicast@0.5.2) @@ -10889,8 +12634,8 @@ snapshots: impound: 1.0.0 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-rc.3) - nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + nitropack: 2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-beta.57) + nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -10898,7 +12643,7 @@ snapshots: std-env: 3.10.0 ufo: 1.6.3 unctx: 2.5.0 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) vue: 3.5.28(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 @@ -10937,6 +12682,10 @@ snapshots: - uploadthing - xml2js + '@nuxt/opencollective@0.4.1': + dependencies: + consola: 3.4.2 + '@nuxt/schema@4.3.1': dependencies: '@vue/shared': 3.5.28 @@ -10954,13 +12703,13 @@ snapshots: rc9: 3.0.0 std-env: 3.10.0 - '@nuxt/ui@4.4.0(@nuxt/content@3.11.2(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(magicast@0.5.2))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@vercel/blob@2.3.0)(change-case@5.4.4)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(embla-carousel@8.6.0)(ioredis@5.9.3)(magicast@0.5.2)(tailwindcss@4.2.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6)': + '@nuxt/ui@4.4.0(5bf42a65b4dde4f9dc838beaca0a8087)': dependencies: '@floating-ui/dom': 1.7.5 '@iconify/vue': 5.0.0(vue@3.5.28(typescript@5.9.3)) '@internationalized/date': 3.11.0 '@internationalized/number': 3.6.5 - '@nuxt/fonts': 0.12.1(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) + '@nuxt/fonts': 0.12.1(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) '@nuxt/kit': 4.3.1(magicast@0.5.2) '@nuxt/schema': 4.3.1 @@ -11068,7 +12817,7 @@ snapshots: - vue - yjs - '@nuxt/vite-builder@4.3.1(410e5b1c633e46c5212a5703603ee210)': + '@nuxt/vite-builder@4.3.1(51a80641fde0ae90f952699bb57e9545)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.59.0) @@ -11087,7 +12836,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2) + nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 @@ -11128,7 +12877,7 @@ snapshots: - vue-tsc - yaml - '@nuxt/vite-builder@4.3.1(@types/node@24.10.13)(eslint@9.39.3(jiti@2.6.1))(lightningcss@1.31.1)(magicast@0.5.2)(nuxt@4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2)': + '@nuxt/vite-builder@4.3.1(d1622356b88f547906a5a432b6f7144c)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.59.0) @@ -11147,7 +12896,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 @@ -11188,7 +12937,7 @@ snapshots: - vue-tsc - yaml - '@nuxthub/core@0.10.6(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3))': + '@nuxthub/core@0.10.6(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3))': dependencies: '@cloudflare/workers-types': 4.20260228.0 '@nuxt/kit': 4.3.1(magicast@0.5.2) @@ -11213,7 +12962,7 @@ snapshots: tsdown: 0.18.4(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3)) ufo: 1.6.3 uncrypto: 0.1.3 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) zod: 4.3.6 transitivePeerDependencies: - '@arethetypeswrong/core' @@ -11257,7 +13006,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.2.3(@vercel/blob@2.3.0)(@vue/compiler-dom@3.5.28)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.59.0)(vue@3.5.28(typescript@5.9.3))': + '@nuxtjs/i18n@10.2.3(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-dom@3.5.28)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.59.0)(vue@3.5.28(typescript@5.9.3))': dependencies: '@intlify/core': 11.2.8 '@intlify/h3': 0.7.4 @@ -11284,7 +13033,7 @@ snapshots: ufo: 1.6.3 unplugin: 2.3.11 unplugin-vue-router: 0.16.2(@vue/compiler-sfc@3.5.28)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) vue-i18n: 11.2.8(vue@3.5.28(typescript@5.9.3)) vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3)) transitivePeerDependencies: @@ -11342,7 +13091,7 @@ snapshots: '@types/mdast': 4.0.4 '@vue/compiler-core': 3.5.28 consola: 3.4.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) defu: 6.1.4 destr: 2.0.5 detab: 3.0.2 @@ -11401,6 +13150,31 @@ snapshots: - vite - vue + '@oclif/core@4.8.1': + dependencies: + ansi-escapes: 4.3.2 + ansis: 3.17.0 + clean-stack: 3.0.1 + cli-spinners: 2.9.2 + debug: 4.4.3(supports-color@8.1.1) + ejs: 3.1.10 + get-package-type: 0.1.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + lilconfig: 3.1.3 + minimatch: 10.2.2 + semver: 7.7.4 + string-width: 4.2.3 + supports-color: 8.1.1 + tinyglobby: 0.2.15 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + + '@oclif/plugin-help@6.2.37': + dependencies: + '@oclif/core': 4.8.1 + '@octokit/app@16.1.2': dependencies: '@octokit/auth-app': 8.2.0 @@ -12272,43 +14046,386 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@10.0.2': {} + '@shikijs/vscode-textmate@10.0.2': {} + + '@shuding/opentype.js@1.4.0-beta.0': + dependencies: + fflate: 0.7.4 + string.prototype.codepointat: 0.2.1 + + '@sindresorhus/base62@1.0.0': {} + + '@sindresorhus/is@4.6.0': {} + + '@sindresorhus/is@7.2.0': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@smithy/config-resolver@4.4.13': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-config-provider': 4.2.2 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + tslib: 2.8.1 + + '@smithy/core@3.23.13': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-stream': 4.5.21 + '@smithy/util-utf8': 4.2.2 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.2.12': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.3.15': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/querystring-builder': 4.2.12 + '@smithy/types': 4.13.1 + '@smithy/util-base64': 4.3.2 + tslib: 2.8.1 + + '@smithy/hash-node@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.2.12': + dependencies: + '@smithy/types': 4.13.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.12': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.4.28': + dependencies: + '@smithy/core': 3.23.13 + '@smithy/middleware-serde': 4.2.16 + '@smithy/node-config-provider': 4.3.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-middleware': 4.2.12 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.46': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/service-error-classification': 4.2.12 + '@smithy/smithy-client': 4.12.8 + '@smithy/types': 4.13.1 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.13 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.2.16': + dependencies: + '@smithy/core': 3.23.13 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.3.12': + dependencies: + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.5.1': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/querystring-builder': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/property-provider@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/protocol-http@5.3.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/util-uri-escape': 4.2.2 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + + '@smithy/shared-ini-file-loader@4.4.7': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/signature-v4@5.3.12': + dependencies: + '@smithy/is-array-buffer': 4.2.2 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-uri-escape': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + + '@smithy/smithy-client@4.12.8': + dependencies: + '@smithy/core': 3.23.13 + '@smithy/middleware-endpoint': 4.4.28 + '@smithy/middleware-stack': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-stream': 4.5.21 + tslib: 2.8.1 + + '@smithy/types@4.13.1': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.2.12': + dependencies: + '@smithy/querystring-parser': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/util-base64@4.3.2': + dependencies: + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.2.2': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.2.3': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.2.2': + dependencies: + '@smithy/is-array-buffer': 4.2.2 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.2.2': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.3.44': + dependencies: + '@smithy/property-provider': 4.2.12 + '@smithy/smithy-client': 4.12.8 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.2.48': + dependencies: + '@smithy/config-resolver': 4.4.13 + '@smithy/credential-provider-imds': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/smithy-client': 4.12.8 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.3.3': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.2.2': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/util-retry@4.2.13': + dependencies: + '@smithy/service-error-classification': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + + '@smithy/util-stream@4.5.21': + dependencies: + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/node-http-handler': 4.5.1 + '@smithy/types': 4.13.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': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@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 + + '@socket.io/component-emitter@3.1.2': {} + + '@speed-highlight/core@1.2.14': {} + + '@sqlite.org/sqlite-wasm@3.50.4-build1': {} + + '@standard-schema/spec@1.0.0': {} + + '@standard-schema/spec@1.1.0': {} + + '@stylistic/eslint-plugin@5.9.0(eslint@9.39.3(jiti@2.6.1))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@typescript-eslint/types': 8.56.0 + eslint: 9.39.3(jiti@2.6.1) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.3 + + '@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0)': + dependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@swc/counter': 0.1.3 + '@xhmikosr/bin-wrapper': 14.2.2 + commander: 8.3.0 + minimatch: 9.0.6 + piscina: 4.9.2 + semver: 7.7.4 + slash: 3.0.0 + source-map: 0.7.6 + tinyglobby: 0.2.15 + optionalDependencies: + chokidar: 5.0.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color + + '@swc/core-darwin-arm64@1.15.3': + optional: true - '@shuding/opentype.js@1.4.0-beta.0': - dependencies: - fflate: 0.7.4 - string.prototype.codepointat: 0.2.1 + '@swc/core-darwin-x64@1.15.3': + optional: true - '@sindresorhus/base62@1.0.0': {} + '@swc/core-linux-arm-gnueabihf@1.15.3': + optional: true - '@sindresorhus/is@4.6.0': {} + '@swc/core-linux-arm64-gnu@1.15.3': + optional: true - '@sindresorhus/is@7.2.0': {} + '@swc/core-linux-arm64-musl@1.15.3': + optional: true - '@sindresorhus/merge-streams@4.0.0': {} + '@swc/core-linux-x64-gnu@1.15.3': + optional: true - '@socket.io/component-emitter@3.1.2': {} + '@swc/core-linux-x64-musl@1.15.3': + optional: true - '@speed-highlight/core@1.2.14': {} + '@swc/core-win32-arm64-msvc@1.15.3': + optional: true - '@sqlite.org/sqlite-wasm@3.50.4-build1': {} + '@swc/core-win32-ia32-msvc@1.15.3': + optional: true - '@standard-schema/spec@1.1.0': {} + '@swc/core-win32-x64-msvc@1.15.3': + optional: true - '@stylistic/eslint-plugin@5.9.0(eslint@9.39.3(jiti@2.6.1))': + '@swc/core@1.15.3(@swc/helpers@0.5.19)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) - '@typescript-eslint/types': 8.56.0 - eslint: 9.39.3(jiti@2.6.1) - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - estraverse: 5.3.0 - picomatch: 4.0.3 + '@swc/counter': 0.1.3 + '@swc/types': 0.1.26 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.3 + '@swc/core-darwin-x64': 1.15.3 + '@swc/core-linux-arm-gnueabihf': 1.15.3 + '@swc/core-linux-arm64-gnu': 1.15.3 + '@swc/core-linux-arm64-musl': 1.15.3 + '@swc/core-linux-x64-gnu': 1.15.3 + '@swc/core-linux-x64-musl': 1.15.3 + '@swc/core-win32-arm64-msvc': 1.15.3 + '@swc/core-win32-ia32-msvc': 1.15.3 + '@swc/core-win32-x64-msvc': 1.15.3 + '@swc/helpers': 0.5.19 + + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.19': dependencies: tslib: 2.8.1 + '@swc/types@0.1.26': + dependencies: + '@swc/counter': 0.1.3 + '@tailwindcss/node@4.2.0': dependencies: '@jridgewell/remapping': 2.3.5 @@ -12629,6 +14746,15 @@ snapshots: y-protocols: 1.0.7(yjs@13.6.29) yjs: 13.6.29 + '@tokenizer/inflate@0.4.1': + dependencies: + debug: 4.4.3(supports-color@8.1.1) + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color + + '@tokenizer/token@0.3.0': {} + '@turf/boolean-point-in-polygon@7.3.4': dependencies: '@turf/helpers': 7.3.4 @@ -12800,6 +14926,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/http-cache-semantics@4.2.0': {} + '@types/jsesc@2.5.1': {} '@types/json-schema@7.0.15': {} @@ -12934,7 +15062,7 @@ snapshots: '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -12946,7 +15074,7 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -12956,7 +15084,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) '@typescript-eslint/types': 8.56.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12965,7 +15093,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) '@typescript-eslint/types': 8.56.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12993,7 +15121,7 @@ snapshots: '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 @@ -13005,7 +15133,7 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 @@ -13022,7 +15150,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) '@typescript-eslint/types': 8.56.0 '@typescript-eslint/visitor-keys': 8.56.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 9.0.6 semver: 7.7.4 tinyglobby: 0.2.15 @@ -13037,7 +15165,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.2 semver: 7.7.4 tinyglobby: 0.2.15 @@ -13270,6 +15398,19 @@ snapshots: throttleit: 2.1.0 undici: 6.23.0 + '@vercel/cli-auth@0.0.1': + dependencies: + async-listen: 3.0.0 + open: 8.4.0 + xdg-app-paths: 5.1.0 + zod: 4.1.11 + + '@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13)': + dependencies: + '@vercel/oidc': 3.2.0 + optionalDependencies: + '@aws-sdk/credential-provider-web-identity': 3.972.13 + '@vercel/nft@1.3.1(rollup@4.59.0)': dependencies: '@mapbox/node-pre-gyp': 2.0.3 @@ -13291,6 +15432,15 @@ snapshots: '@vercel/oidc@3.1.0': {} + '@vercel/oidc@3.2.0': {} + + '@vercel/queue@0.1.4': + dependencies: + '@vercel/oidc': 3.1.0 + minimatch: 10.2.5 + mixpart: 0.0.5 + picocolors: 1.1.1 + '@vercel/speed-insights@1.3.1(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))': optionalDependencies: vue: 3.5.28(typescript@5.9.3) @@ -13378,144 +15528,502 @@ snapshots: '@vue/compiler-core': 3.5.28 '@vue/shared': 3.5.28 - '@vue/compiler-sfc@3.5.28': + '@vue/compiler-sfc@3.5.28': + dependencies: + '@babel/parser': 7.29.0 + '@vue/compiler-core': 3.5.28 + '@vue/compiler-dom': 3.5.28 + '@vue/compiler-ssr': 3.5.28 + '@vue/shared': 3.5.28 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.28': + dependencies: + '@vue/compiler-dom': 3.5.28 + '@vue/shared': 3.5.28 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-core@8.0.6(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@vue/devtools-kit': 8.0.6 + '@vue/devtools-shared': 8.0.6 + mitt: 3.0.1 + nanoid: 5.1.6 + pathe: 2.0.3 + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) + vue: 3.5.28(typescript@5.9.3) + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@8.0.6': + dependencies: + '@vue/devtools-shared': 8.0.6 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 2.1.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-shared@8.0.6': + dependencies: + rfdc: 1.4.1 + + '@vue/language-core@3.2.5': + dependencies: + '@volar/language-core': 2.4.28 + '@vue/compiler-dom': 3.5.28 + '@vue/shared': 3.5.28 + alien-signals: 3.1.2 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.3 + + '@vue/reactivity@3.5.28': + dependencies: + '@vue/shared': 3.5.28 + + '@vue/runtime-core@3.5.28': + dependencies: + '@vue/reactivity': 3.5.28 + '@vue/shared': 3.5.28 + + '@vue/runtime-dom@3.5.28': + dependencies: + '@vue/reactivity': 3.5.28 + '@vue/runtime-core': 3.5.28 + '@vue/shared': 3.5.28 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.28 + '@vue/shared': 3.5.28 + vue: 3.5.28(typescript@5.9.3) + + '@vue/shared@3.5.28': {} + + '@vueuse/core@10.11.1(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.5.28(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.28(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@12.8.2(typescript@5.9.3)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.28(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.2.1 + '@vueuse/shared': 14.2.1(vue@3.5.28(typescript@5.9.3)) + vue: 3.5.28(typescript@5.9.3) + + '@vueuse/integrations@14.2.1(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) + '@vueuse/shared': 14.2.1(vue@3.5.28(typescript@5.9.3)) + vue: 3.5.28(typescript@5.9.3) + optionalDependencies: + change-case: 5.4.4 + fuse.js: 7.1.0 + + '@vueuse/metadata@10.11.1': {} + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/metadata@14.2.1': {} + + '@vueuse/shared@10.11.1(vue@3.5.28(typescript@5.9.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.28(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@12.8.2(typescript@5.9.3)': + dependencies: + vue: 3.5.28(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@vueuse/shared@14.2.1(vue@3.5.28(typescript@5.9.3))': + dependencies: + vue: 3.5.28(typescript@5.9.3) + + '@webcontainer/env@1.1.1': {} + + '@workflow/ai@4.1.0-beta.60(@opentelemetry/api@1.9.0)(ai@6.0.97(zod@4.3.6))(workflow@4.2.0-beta.76(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(magicast@0.5.2)(typescript@5.9.3))': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@workflow/serde': 4.1.0-beta.2 + ai: 6.0.97(zod@4.3.6) + workflow: 4.2.0-beta.76(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(magicast@0.5.2)(typescript@5.9.3) + zod: 4.3.6 + optionalDependencies: + '@ai-sdk/anthropic': 3.0.66(zod@4.3.6) + '@ai-sdk/gateway': 3.0.53(zod@4.3.6) + '@ai-sdk/google': 3.0.58(zod@4.3.6) + '@ai-sdk/openai': 3.0.50(zod@4.3.6) + '@ai-sdk/xai': 3.0.77(zod@4.3.6) + '@opentelemetry/api': 1.9.0 + + '@workflow/astro@4.0.0-beta.50(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': + dependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/rollup': 4.0.0-beta.33(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + '@workflow/vite': 4.0.0-beta.26(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + exsolve: 1.0.8 + pathe: 2.0.3 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color + + '@workflow/builders@4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': + dependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@workflow/core': 4.2.0-beta.76(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.0-beta.20 + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + '@workflow/utils': 4.1.0-beta.13 + builtin-modules: 5.0.0 + chalk: 5.6.2 + enhanced-resolve: 5.19.0 + esbuild: 0.27.3 + find-up: 7.0.0 + json5: 2.2.3 + tinyglobby: 0.2.15 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color + + '@workflow/cli@4.2.0-beta.76(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': + dependencies: + '@oclif/core': 4.8.1 + '@oclif/plugin-help': 6.2.37 + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@vercel/cli-auth': 0.0.1 + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/core': 4.2.0-beta.76(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.0-beta.20 + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + '@workflow/utils': 4.1.0-beta.13 + '@workflow/web': 4.1.0-beta.47 + '@workflow/world': 4.1.0-beta.15(zod@4.3.6) + '@workflow/world-local': 4.1.0-beta.49(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.1.0-beta.47(@opentelemetry/api@1.9.0) + boxen: 8.0.1 + builtin-modules: 5.0.0 + chalk: 5.6.2 + chokidar: 4.0.3 + date-fns: 4.1.0 + dotenv: 17.3.1 + easy-table: 1.2.0 + enhanced-resolve: 5.19.0 + esbuild: 0.27.3 + find-up: 7.0.0 + mixpart: 0.0.4 + open: 10.2.0 + ora: 8.2.0 + terminal-link: 5.0.0 + tinyglobby: 0.2.15 + xdg-app-paths: 5.1.0 + zod: 4.3.6 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color + + '@workflow/core@4.2.0-beta.76(@opentelemetry/api@1.9.0)': + dependencies: + '@aws-sdk/credential-provider-web-identity': 3.972.13 + '@jridgewell/trace-mapping': 0.3.31 + '@standard-schema/spec': 1.0.0 + '@types/ms': 2.1.0 + '@vercel/functions': 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13) + '@workflow/errors': 4.1.0-beta.20 + '@workflow/serde': 4.1.0-beta.2 + '@workflow/utils': 4.1.0-beta.13 + '@workflow/world': 4.1.0-beta.15(zod@4.3.6) + '@workflow/world-local': 4.1.0-beta.49(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.1.0-beta.47(@opentelemetry/api@1.9.0) + debug: 4.4.3(supports-color@8.1.1) + devalue: 5.6.3 + ms: 2.1.3 + nanoid: 5.1.6 + seedrandom: 3.0.5 + semver: 7.7.4 + ulid: 3.0.2 + zod: 4.3.6 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + transitivePeerDependencies: + - aws-crt + - supports-color + + '@workflow/errors@4.1.0-beta.20': + dependencies: + '@workflow/utils': 4.1.0-beta.13 + ms: 2.1.3 + + '@workflow/nest@0.0.0-beta.25(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)': + dependencies: + '@nestjs/common': 11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@swc/cli': 0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0) + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + pathe: 2.0.3 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color + + '@workflow/next@4.0.1-beta.72(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': + dependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/core': 4.2.0-beta.76(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + semver: 7.7.4 + watchpack: 2.5.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color + + '@workflow/nitro@4.0.1-beta.71(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': + dependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/core': 4.2.0-beta.76(@opentelemetry/api@1.9.0) + '@workflow/rollup': 4.0.0-beta.33(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + '@workflow/vite': 4.0.0-beta.26(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + exsolve: 1.0.8 + pathe: 2.0.3 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color + + '@workflow/nuxt@4.0.1-beta.60(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)(magicast@0.5.2)': dependencies: - '@babel/parser': 7.29.0 - '@vue/compiler-core': 3.5.28 - '@vue/compiler-dom': 3.5.28 - '@vue/compiler-ssr': 3.5.28 - '@vue/shared': 3.5.28 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.6 - source-map-js: 1.2.1 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@workflow/nitro': 4.0.1-beta.71(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - magicast + - supports-color - '@vue/compiler-ssr@3.5.28': + '@workflow/rollup@4.0.0-beta.33(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': dependencies: - '@vue/compiler-dom': 3.5.28 - '@vue/shared': 3.5.28 + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + exsolve: 1.0.7 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color - '@vue/devtools-api@6.6.4': {} + '@workflow/serde@4.1.0-beta.2': {} - '@vue/devtools-core@8.0.6(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))': + '@workflow/sveltekit@4.0.0-beta.65(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': dependencies: - '@vue/devtools-kit': 8.0.6 - '@vue/devtools-shared': 8.0.6 - mitt: 3.0.1 - nanoid: 5.1.6 + '@swc/core': 1.15.3(@swc/helpers@0.5.19) + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/rollup': 4.0.0-beta.33(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19)) + '@workflow/vite': 4.0.0-beta.26(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + exsolve: 1.0.8 + fs-extra: 11.3.4 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) - vue: 3.5.28(typescript@5.9.3) transitivePeerDependencies: - - vite + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color - '@vue/devtools-kit@8.0.6': + '@workflow/swc-plugin@4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.19))': dependencies: - '@vue/devtools-shared': 8.0.6 - birpc: 2.9.0 - hookable: 5.5.3 - mitt: 3.0.1 - perfect-debounce: 2.1.0 - speakingurl: 14.0.1 - superjson: 2.2.6 + '@swc/core': 1.15.3(@swc/helpers@0.5.19) - '@vue/devtools-shared@8.0.6': + '@workflow/typescript-plugin@4.0.1-beta.5(typescript@5.9.3)': dependencies: - rfdc: 1.4.1 + typescript: 5.9.3 - '@vue/language-core@3.2.5': + '@workflow/utils@4.1.0-beta.13': dependencies: - '@volar/language-core': 2.4.28 - '@vue/compiler-dom': 3.5.28 - '@vue/shared': 3.5.28 - alien-signals: 3.1.2 - muggle-string: 0.4.1 - path-browserify: 1.0.1 - picomatch: 4.0.3 + ms: 2.1.3 - '@vue/reactivity@3.5.28': + '@workflow/vite@4.0.0-beta.26(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)': dependencies: - '@vue/shared': 3.5.28 + '@workflow/builders': 4.0.1-beta.67(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@swc/helpers' + - aws-crt + - supports-color - '@vue/runtime-core@3.5.28': + '@workflow/web@4.1.0-beta.47': dependencies: - '@vue/reactivity': 3.5.28 - '@vue/shared': 3.5.28 + express: 4.22.1 + transitivePeerDependencies: + - supports-color - '@vue/runtime-dom@3.5.28': + '@workflow/world-local@4.1.0-beta.49(@opentelemetry/api@1.9.0)': dependencies: - '@vue/reactivity': 3.5.28 - '@vue/runtime-core': 3.5.28 - '@vue/shared': 3.5.28 - csstype: 3.2.3 + '@vercel/queue': 0.1.4 + '@workflow/errors': 4.1.0-beta.20 + '@workflow/utils': 4.1.0-beta.13 + '@workflow/world': 4.1.0-beta.15(zod@4.3.6) + async-sema: 3.1.1 + ulid: 3.0.2 + undici: 7.22.0 + zod: 4.3.6 + optionalDependencies: + '@opentelemetry/api': 1.9.0 - '@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3))': + '@workflow/world-vercel@4.1.0-beta.47(@opentelemetry/api@1.9.0)': dependencies: - '@vue/compiler-ssr': 3.5.28 - '@vue/shared': 3.5.28 - vue: 3.5.28(typescript@5.9.3) - - '@vue/shared@3.5.28': {} + '@vercel/oidc': 3.2.0 + '@vercel/queue': 0.1.4 + '@workflow/errors': 4.1.0-beta.20 + '@workflow/world': 4.1.0-beta.15(zod@4.3.6) + cbor-x: 1.6.0 + undici: 7.22.0 + zod: 4.3.6 + optionalDependencies: + '@opentelemetry/api': 1.9.0 - '@vueuse/core@10.11.1(vue@3.5.28(typescript@5.9.3))': + '@workflow/world@4.1.0-beta.15(zod@4.3.6)': dependencies: - '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.28(typescript@5.9.3)) - vue-demi: 0.14.10(vue@3.5.28(typescript@5.9.3)) - transitivePeerDependencies: - - '@vue/composition-api' - - vue + ulid: 3.0.2 + zod: 4.3.6 - '@vueuse/core@12.8.2(typescript@5.9.3)': + '@xhmikosr/archive-type@8.0.1': dependencies: - '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 12.8.2 - '@vueuse/shared': 12.8.2(typescript@5.9.3) - vue: 3.5.28(typescript@5.9.3) + file-type: 21.3.4 transitivePeerDependencies: - - typescript + - supports-color - '@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3))': + '@xhmikosr/bin-check@8.2.1': dependencies: - '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 14.2.1 - '@vueuse/shared': 14.2.1(vue@3.5.28(typescript@5.9.3)) - vue: 3.5.28(typescript@5.9.3) + execa: 9.6.1 + isexe: 4.0.0 - '@vueuse/integrations@14.2.1(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.28(typescript@5.9.3))': + '@xhmikosr/bin-wrapper@14.2.2': dependencies: - '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) - '@vueuse/shared': 14.2.1(vue@3.5.28(typescript@5.9.3)) - vue: 3.5.28(typescript@5.9.3) - optionalDependencies: - change-case: 5.4.4 - fuse.js: 7.1.0 + '@xhmikosr/bin-check': 8.2.1 + '@xhmikosr/downloader': 16.1.1 + '@xhmikosr/os-filter-obj': 4.0.0 + binary-version-check: 6.1.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@vueuse/metadata@10.11.1': {} + '@xhmikosr/decompress-tar@9.0.1': + dependencies: + file-type: 21.3.4 + is-stream: 4.0.1 + tar-stream: 3.1.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@vueuse/metadata@12.8.2': {} + '@xhmikosr/decompress-tarbz2@9.0.1': + dependencies: + '@xhmikosr/decompress-tar': 9.0.1 + file-type: 21.3.4 + is-stream: 4.0.1 + seek-bzip: 2.0.0 + unbzip2-stream: 1.4.3 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@vueuse/metadata@14.2.1': {} + '@xhmikosr/decompress-targz@9.0.1': + dependencies: + '@xhmikosr/decompress-tar': 9.0.1 + file-type: 21.3.4 + is-stream: 4.0.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@vueuse/shared@10.11.1(vue@3.5.28(typescript@5.9.3))': + '@xhmikosr/decompress-unzip@8.1.0': dependencies: - vue-demi: 0.14.10(vue@3.5.28(typescript@5.9.3)) + file-type: 21.3.4 + get-stream: 9.0.1 + yauzl: 3.3.0 transitivePeerDependencies: - - '@vue/composition-api' - - vue + - supports-color - '@vueuse/shared@12.8.2(typescript@5.9.3)': + '@xhmikosr/decompress@11.1.1': dependencies: - vue: 3.5.28(typescript@5.9.3) + '@xhmikosr/decompress-tar': 9.0.1 + '@xhmikosr/decompress-tarbz2': 9.0.1 + '@xhmikosr/decompress-targz': 9.0.1 + '@xhmikosr/decompress-unzip': 8.1.0 + graceful-fs: 4.2.11 + strip-dirs: 3.0.0 transitivePeerDependencies: - - typescript + - bare-abort-controller + - react-native-b4a + - supports-color - '@vueuse/shared@14.2.1(vue@3.5.28(typescript@5.9.3))': + '@xhmikosr/downloader@16.1.1': dependencies: - vue: 3.5.28(typescript@5.9.3) + '@xhmikosr/archive-type': 8.0.1 + '@xhmikosr/decompress': 11.1.1 + content-disposition: 1.0.1 + defaults: 2.0.2 + ext-name: 5.0.0 + file-type: 21.3.4 + filenamify: 7.0.1 + get-stream: 9.0.1 + got: 14.6.6 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@webcontainer/env@1.1.1': {} + '@xhmikosr/os-filter-obj@4.0.0': + dependencies: + arch: 3.0.0 abbrev@3.0.1: {} @@ -13523,6 +16031,11 @@ snapshots: dependencies: event-target-shim: 5.0.1 + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + accepts@2.0.0: dependencies: mime-types: 3.0.2 @@ -13576,8 +16089,20 @@ snapshots: alien-signals@3.1.2: {} + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -13588,6 +16113,8 @@ snapshots: ansi-styles@6.2.3: {} + ansis@3.17.0: {} + ansis@4.2.0: {} anymatch@3.1.3: @@ -13595,6 +16122,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + arch@3.0.0: {} + archiver-utils@5.0.2: dependencies: glob: 10.5.0 @@ -13630,6 +16159,8 @@ snapshots: dependencies: tslib: 2.8.1 + array-flatten@1.1.1: {} + array-union@2.1.0: {} ast-kit@2.2.0: @@ -13648,6 +16179,8 @@ snapshots: '@babel/parser': 7.29.0 ast-kit: 2.2.0 + async-listen@3.0.0: {} + async-lock@1.4.1: {} async-retry@1.3.3: @@ -13704,6 +16237,17 @@ snapshots: bindings: 1.5.0 prebuild-install: 7.1.3 + binary-version-check@6.1.0: + dependencies: + binary-version: 7.1.0 + semver: 7.7.4 + semver-truncate: 3.0.0 + + binary-version@7.1.0: + dependencies: + execa: 8.0.1 + find-versions: 6.0.0 + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -13718,11 +16262,28 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + body-parser@1.20.4: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.14.2 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + body-parser@2.2.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 @@ -13736,6 +16297,19 @@ snapshots: bottleneck@2.19.5: {} + bowser@2.14.1: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -13749,6 +16323,10 @@ snapshots: dependencies: balanced-match: 4.0.4 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -13765,6 +16343,8 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer-crc32@0.2.13: {} + buffer-crc32@1.0.0: {} buffer-from@1.1.2: {} @@ -13790,6 +16370,8 @@ snapshots: esbuild: 0.27.3 load-tsconfig: 0.2.5 + byte-counter@0.1.0: {} + bytes@3.1.2: {} c12@3.3.3(magicast@0.5.2): @@ -13811,6 +16393,18 @@ snapshots: cac@6.7.14: {} + cacheable-lookup@7.0.0: {} + + cacheable-request@13.0.18: + dependencies: + '@types/http-cache-semantics': 4.2.0 + get-stream: 9.0.1 + http-cache-semantics: 4.2.0 + keyv: 5.6.0 + mimic-response: 4.0.0 + normalize-url: 8.1.1 + responselike: 4.0.2 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -13830,6 +16424,8 @@ snapshots: callsites@3.1.0: {} + camelcase@8.0.0: {} + camelize@1.0.1: {} caniuse-api@3.0.0: @@ -13843,6 +16439,22 @@ snapshots: case-anything@3.1.2: {} + cbor-extract@2.2.2: + dependencies: + node-gyp-build-optional-packages: 5.1.1 + optionalDependencies: + '@cbor-extract/cbor-extract-darwin-arm64': 2.2.2 + '@cbor-extract/cbor-extract-darwin-x64': 2.2.2 + '@cbor-extract/cbor-extract-linux-arm': 2.2.2 + '@cbor-extract/cbor-extract-linux-arm64': 2.2.2 + '@cbor-extract/cbor-extract-linux-x64': 2.2.2 + '@cbor-extract/cbor-extract-win32-x64': 2.2.2 + optional: true + + cbor-x@1.6.0: + optionalDependencies: + cbor-extract: 2.2.2 + ccount@2.0.1: {} chalk@4.1.2: @@ -13850,6 +16462,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + change-case@5.4.4: {} char-regex@1.0.2: {} @@ -13901,6 +16515,18 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + clean-stack@3.0.1: + dependencies: + escape-string-regexp: 4.0.0 + + cli-boxes@3.0.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + clipboardy@4.0.0: dependencies: execa: 8.0.1 @@ -13913,6 +16539,9 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone@1.0.4: + optional: true + clone@2.1.2: {} cluster-key-slot@1.1.2: {} @@ -13933,8 +16562,12 @@ snapshots: commander@2.20.3: {} + commander@6.2.1: {} + commander@7.2.0: {} + commander@8.3.0: {} + comment-parser@1.4.5: {} commondir@1.0.1: {} @@ -13957,10 +16590,16 @@ snapshots: consola@3.4.2: {} + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + content-disposition@1.0.1: {} content-type@1.0.5: {} + convert-hrtime@5.0.0: {} + convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} @@ -13969,6 +16608,8 @@ snapshots: cookie-es@2.0.0: {} + cookie-signature@1.0.7: {} + cookie-signature@1.2.2: {} cookie@0.7.2: {} @@ -14311,14 +16952,24 @@ snapshots: better-sqlite3: 12.6.2 drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0) - debug@4.4.3: + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 + decompress-response@10.0.0: + dependencies: + mimic-response: 4.0.0 + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -14336,6 +16987,13 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.1 + defaults@1.0.4: + dependencies: + clone: 1.0.4 + optional: true + + defaults@2.0.2: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -14360,6 +17018,8 @@ snapshots: destr@2.0.5: {} + destroy@1.2.0: {} + detab@3.0.2: {} detect-indent@6.1.0: {} @@ -14384,7 +17044,7 @@ snapshots: dependencies: path-type: 4.0.0 - docus@5.6.1(965b5caba7b8f1c76d0b8a9386bcd9ab): + docus@5.6.1(22fe5abb88d1e8ca32cd6ab67f25be31): dependencies: '@ai-sdk/gateway': 3.0.53(zod@4.3.6) '@ai-sdk/mcp': 1.0.21(zod@4.3.6) @@ -14393,10 +17053,10 @@ snapshots: '@iconify-json/simple-icons': 1.2.71 '@iconify-json/vscode-icons': 1.2.43 '@nuxt/content': 3.11.2(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(magicast@0.5.2) - '@nuxt/image': 2.0.0(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2) + '@nuxt/image': 2.0.0(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(magicast@0.5.2) '@nuxt/kit': 4.3.1(magicast@0.5.2) - '@nuxt/ui': 4.4.0(@nuxt/content@3.11.2(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(magicast@0.5.2))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@vercel/blob@2.3.0)(change-case@5.4.4)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(embla-carousel@8.6.0)(ioredis@5.9.3)(magicast@0.5.2)(tailwindcss@4.2.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6) - '@nuxtjs/i18n': 10.2.3(@vercel/blob@2.3.0)(@vue/compiler-dom@3.5.28)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.59.0)(vue@3.5.28(typescript@5.9.3)) + '@nuxt/ui': 4.4.0(5bf42a65b4dde4f9dc838beaca0a8087) + '@nuxtjs/i18n': 10.2.3(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-dom@3.5.28)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.59.0)(vue@3.5.28(typescript@5.9.3)) '@nuxtjs/mcp-toolkit': 0.7.0(magicast@0.5.2)(zod@4.3.6) '@nuxtjs/mdc': 0.20.1(magicast@0.5.2) '@nuxtjs/robots': 5.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6) @@ -14412,9 +17072,9 @@ snapshots: git-url-parse: 16.1.0 minimark: 1.0.0 motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) - nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + nuxt: 4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) nuxt-llms: 0.2.0(magicast@0.5.2) - nuxt-og-image: 5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) + nuxt-og-image: 5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) pkg-types: 2.3.0 scule: 1.3.0 shiki-stream: 0.1.4(vue@3.5.28(typescript@5.9.3)) @@ -14546,8 +17206,18 @@ snapshots: eastasianwidth@0.2.0: {} + easy-table@1.2.0: + dependencies: + ansi-regex: 5.0.1 + optionalDependencies: + wcwidth: 1.0.1 + ee-first@1.1.1: {} + ejs@3.1.10: + dependencies: + jake: 10.9.4 + electron-to-chromium@1.5.302: {} elkjs@0.10.2: {} @@ -14591,6 +17261,8 @@ snapshots: emoji-regex-xs@2.0.1: {} + emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -14610,7 +17282,7 @@ snapshots: engine.io-client@6.6.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) engine.io-parser: 5.2.3 ws: 8.18.3 xmlhttprequest-ssl: 2.1.2 @@ -14637,6 +17309,8 @@ snapshots: entities@7.0.1: {} + environment@1.1.0: {} + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -14657,7 +17331,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.25.12): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) esbuild: 0.25.12 transitivePeerDependencies: - supports-color @@ -14792,7 +17466,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.56.0 comment-parser: 1.4.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 @@ -14811,7 +17485,7 @@ snapshots: '@es-joy/resolve.exports': 1.2.0 are-docs-informative: 0.0.2 comment-parser: 1.4.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 9.39.3(jiti@2.6.1) espree: 11.1.1 @@ -14918,7 +17592,7 @@ snapshots: ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -15032,6 +17706,42 @@ snapshots: express: 5.2.1 ip-address: 10.0.1 + express@4.22.1: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.4 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.2 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.13 + proxy-addr: 2.0.7 + qs: 6.14.2 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.2 + serve-static: 1.16.3 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + express@5.2.1: dependencies: accepts: 2.0.0 @@ -15040,7 +17750,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 @@ -15065,8 +17775,19 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.7: {} + exsolve@1.0.8: {} + ext-list@2.2.2: + dependencies: + mime-db: 1.54.0 + + ext-name@5.0.0: + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + extend@3.0.2: {} extendable-error@0.1.7: {} @@ -15091,8 +17812,20 @@ snapshots: fast-npm-meta@1.2.1: {} + fast-safe-stringify@2.1.1: {} + fast-uri@3.1.0: {} + fast-xml-builder@1.1.4: + dependencies: + path-expression-matcher: 1.2.1 + + fast-xml-parser@5.5.8: + dependencies: + fast-xml-builder: 1.1.4 + path-expression-matcher: 1.2.1 + strnum: 2.2.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -15116,15 +17849,46 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-type@21.3.4: + dependencies: + '@tokenizer/inflate': 0.4.1 + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color + file-uri-to-path@1.0.0: {} + filelist@1.0.6: + dependencies: + minimatch: 5.1.7 + + filename-reserved-regex@4.0.0: {} + + filenamify@7.0.1: + dependencies: + filename-reserved-regex: 4.0.0 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + finalhandler@1.3.2: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + finalhandler@2.1.1: dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -15147,11 +17911,22 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + find-up@8.0.0: dependencies: locate-path: 8.0.0 unicorn-magic: 0.3.0 + find-versions@6.0.0: + dependencies: + semver-regex: 4.0.5 + super-regex: 1.1.0 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -15185,7 +17960,7 @@ snapshots: unicode-properties: 1.4.1 unicode-trie: 2.0.0 - fontless@0.1.0(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)): + fontless@0.1.0(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)): dependencies: consola: 3.4.2 css-tree: 3.1.0 @@ -15199,7 +17974,7 @@ snapshots: pathe: 2.0.3 ufo: 1.6.3 unifont: 0.6.0 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) optionalDependencies: vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2) transitivePeerDependencies: @@ -15232,6 +18007,8 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data-encoder@4.1.0: {} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -15246,10 +18023,18 @@ snapshots: motion-utils: 12.29.2 tslib: 2.8.1 + fresh@0.5.2: {} + fresh@2.0.0: {} fs-constants@1.0.0: {} + fs-extra@11.3.4: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -15267,6 +18052,8 @@ snapshots: function-bind@1.1.2: {} + function-timeout@1.0.2: {} + fuse.js@7.1.0: {} fzf@0.5.2: {} @@ -15279,6 +18066,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -15292,6 +18081,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-package-type@0.1.0: {} + get-port-please@3.2.0: {} get-proto@1.0.1: @@ -15346,6 +18137,8 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + glob@10.5.0: dependencies: foreground-child: 3.3.1 @@ -15397,6 +18190,21 @@ snapshots: gopd@1.2.0: {} + got@14.6.6: + dependencies: + '@sindresorhus/is': 7.2.0 + byte-counter: 0.1.0 + cacheable-lookup: 7.0.0 + cacheable-request: 13.0.18 + decompress-response: 10.0.0 + form-data-encoder: 4.1.0 + http2-wrapper: 2.2.1 + keyv: 5.6.0 + lowercase-keys: 3.0.0 + p-cancelable: 4.0.1 + responselike: 4.0.2 + type-fest: 4.41.0 + graceful-fs@4.2.11: {} gzip-size@7.0.0: @@ -15417,6 +18225,8 @@ snapshots: has-flag@4.0.0: {} + has-flag@5.0.1: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -15589,6 +18399,8 @@ snapshots: html-whitespace-sensitive-tag-names@3.0.1: {} + http-cache-semantics@4.2.0: {} + http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -15599,10 +18411,15 @@ snapshots: http-shutdown@1.2.2: {} + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -15653,6 +18470,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + indent-string@5.0.0: {} inherits@2.0.4: {} @@ -15661,6 +18480,10 @@ snapshots: ini@4.1.1: {} + inspect-with-kind@1.0.5: + dependencies: + kind-of: 6.0.3 + internmap@1.0.1: {} internmap@2.0.3: {} @@ -15669,7 +18492,7 @@ snapshots: dependencies: '@ioredis/commands': 1.5.0 cluster-key-slot: 1.1.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -15683,7 +18506,7 @@ snapshots: ipaddr.js@1.9.1: {} - ipx@3.1.1(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3): + ipx@3.1.1(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3): dependencies: '@fastify/accept-negotiator': 2.0.1 citty: 0.1.6 @@ -15699,7 +18522,7 @@ snapshots: sharp: 0.34.5 svgo: 4.0.0 ufo: 1.6.3 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) xss: 1.0.15 transitivePeerDependencies: - '@azure/app-configuration' @@ -15773,6 +18596,8 @@ snapshots: global-directory: 4.0.1 is-path-inside: 4.0.0 + is-interactive@2.0.0: {} + is-module@1.0.0: {} is-node-process@1.2.0: {} @@ -15781,6 +18606,8 @@ snapshots: is-path-inside@4.0.0: {} + is-plain-obj@1.1.0: {} + is-plain-obj@4.1.0: {} is-promise@4.0.0: {} @@ -15807,6 +18634,8 @@ snapshots: dependencies: which-typed-array: 1.1.20 + is-unicode-supported@1.3.0: {} + is-unicode-supported@2.1.0: {} is-what@5.5.0: {} @@ -15833,6 +18662,8 @@ snapshots: isexe@3.1.5: {} + isexe@4.0.0: {} + isomorphic-git@1.37.2: dependencies: async-lock: 1.4.1 @@ -15849,12 +18680,20 @@ snapshots: isomorphic.js@0.2.5: {} + iterare@1.2.1: {} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.6 + picocolors: 1.1.1 + jiti@2.6.1: {} jose@6.1.3: {} @@ -15912,12 +18751,22 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + kdbush@3.0.0: {} keyv@4.5.4: dependencies: json-buffer: 3.0.1 + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 + kind-of@6.0.3: {} kleur@3.0.3: {} @@ -15965,7 +18814,7 @@ snapshots: lighthouse-logger@2.0.2: dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) marky: 1.3.0 transitivePeerDependencies: - supports-color @@ -16055,6 +18904,8 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 + load-esm@1.0.3: {} + load-tsconfig@0.2.5: {} local-pkg@1.1.2: @@ -16071,6 +18922,10 @@ snapshots: dependencies: p-locate: 5.0.0 + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + locate-path@8.0.0: dependencies: p-locate: 6.0.0 @@ -16091,8 +18946,15 @@ snapshots: lodash@4.17.23: {} + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + longest-streak@3.1.0: {} + lowercase-keys@3.0.0: {} + lru-cache@10.4.3: {} lru-cache@11.2.6: {} @@ -16125,6 +18987,12 @@ snapshots: '@babel/types': 7.29.0 source-map-js: 1.2.1 + make-asynchronous@1.1.0: + dependencies: + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.5.0 + maplibre-gl@2.4.0: dependencies: '@mapbox/geojson-rewind': 0.5.2 @@ -16289,14 +19157,20 @@ snapshots: mdurl@2.0.0: {} + media-typer@0.3.0: {} + media-typer@1.1.0: {} + merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} merge-stream@2.0.0: {} merge2@1.4.1: {} + methods@1.1.2: {} + mgrs@1.0.0: {} micromark-core-commonmark@2.0.3: @@ -16471,7 +19345,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -16495,18 +19369,30 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mime-types@3.0.2: dependencies: mime-db: 1.54.0 + mime@1.6.0: {} + mime@4.1.0: {} mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + mimic-response@3.1.0: {} + mimic-response@4.0.0: {} + minimark@0.2.0: {} minimark@1.0.0: @@ -16518,6 +19404,10 @@ snapshots: dependencies: brace-expansion: 5.0.3 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 @@ -16544,6 +19434,10 @@ snapshots: mitt@3.0.1: {} + mixpart@0.0.4: {} + + mixpart@0.0.5: {} + mkdirp-classic@0.5.3: {} mlly@1.8.0: @@ -16553,6 +19447,13 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.3 + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + mocked-exports@0.1.1: {} motion-dom@12.34.3: @@ -16577,6 +19478,8 @@ snapshots: mrmime@2.0.1: {} + ms@2.0.0: {} + ms@2.1.3: {} muggle-string@0.4.1: {} @@ -16595,9 +19498,11 @@ snapshots: natural-compare@1.4.0: {} + negotiator@0.6.3: {} + negotiator@1.0.0: {} - nitropack@2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-beta.57): + nitropack@2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-beta.57): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.59.0) @@ -16664,7 +19569,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 5.6.0 unplugin-utils: 0.3.1 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.0-beta.14 @@ -16699,7 +19604,7 @@ snapshots: - supports-color - uploadthing - nitropack@2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-rc.3): + nitropack@2.13.1(@libsql/client@0.17.0)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(rolldown@1.0.0-rc.3): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.59.0) @@ -16766,7 +19671,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 5.6.0 unplugin-utils: 0.3.1 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.0-beta.14 @@ -16830,6 +19735,11 @@ snapshots: node-forge@1.3.3: {} + node-gyp-build-optional-packages@5.1.1: + dependencies: + detect-libc: 2.1.2 + optional: true + node-gyp-build@4.8.4: {} node-mock-http@1.0.4: {} @@ -16842,6 +19752,8 @@ snapshots: normalize-path@3.0.0: {} + normalize-url@8.1.1: {} + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -16901,7 +19813,7 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-og-image@5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)): + nuxt-og-image@5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)): dependencies: '@nuxt/devtools-kit': 3.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) '@nuxt/kit': 4.3.1(magicast@0.5.2) @@ -16932,7 +19844,7 @@ snapshots: strip-literal: 3.1.0 ufo: 1.6.3 unplugin: 2.3.11 - unstorage: 1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) + unstorage: 1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3) unwasm: 0.5.3 yoga-wasm-web: 0.3.3 transitivePeerDependencies: @@ -16968,16 +19880,16 @@ snapshots: - vite - vue - nuxt@4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2): + nuxt@4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.57)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2): dependencies: '@dxup/nuxt': 0.3.2(magicast@0.5.2) '@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.1(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) '@nuxt/kit': 4.3.1(magicast@0.5.2) - '@nuxt/nitro-server': 4.3.1(400f8177f093c449f1573ab1a32e9f47) + '@nuxt/nitro-server': 4.3.1(fdd9b1731a4f94ca9c00c121b2d15946) '@nuxt/schema': 4.3.1 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2)) - '@nuxt/vite-builder': 4.3.1(410e5b1c633e46c5212a5703603ee210) + '@nuxt/vite-builder': 4.3.1(51a80641fde0ae90f952699bb57e9545) '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) '@vue/shared': 3.5.28 c12: 3.3.3(magicast@0.5.2) @@ -17091,16 +20003,16 @@ snapshots: - xml2js - yaml - nuxt@4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2): + nuxt@4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2): dependencies: '@dxup/nuxt': 0.3.2(magicast@0.5.2) '@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.1(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) '@nuxt/kit': 4.3.1(magicast@0.5.2) - '@nuxt/nitro-server': 4.3.1(790c95757f2f7467bb4fd8a744cc2e48) + '@nuxt/nitro-server': 4.3.1(62d7c7822b526ec0c5bbbed6d96da593) '@nuxt/schema': 4.3.1 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2)) - '@nuxt/vite-builder': 4.3.1(@types/node@24.10.13)(eslint@9.39.3(jiti@2.6.1))(lightningcss@1.31.1)(magicast@0.5.2)(nuxt@4.3.1(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@24.10.13)(@vercel/blob@2.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0))(eslint@9.39.3(jiti@2.6.1))(ioredis@5.9.3)(lightningcss@1.31.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2) + '@nuxt/vite-builder': 4.3.1(d1622356b88f547906a5a432b6f7144c) '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) '@vue/shared': 3.5.28 c12: 3.3.3(magicast@0.5.2) @@ -17268,6 +20180,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.4: @@ -17283,6 +20199,12 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 + open@8.4.0: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -17303,8 +20225,22 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.2 + orderedmap@2.1.1: {} + os-paths@4.4.0: {} + outdent@0.5.0: {} oxc-minify@0.112.0: @@ -17426,6 +20362,12 @@ snapshots: magic-regexp: 0.10.0 oxc-parser: 0.112.0 + p-cancelable@4.0.1: {} + + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -17456,6 +20398,8 @@ snapshots: p-map@2.1.0: {} + p-timeout@6.1.4: {} + p-try@2.2.0: {} package-json-from-dist@1.0.1: {} @@ -17527,6 +20471,10 @@ snapshots: path-exists@4.0.0: {} + path-exists@5.0.0: {} + + path-expression-matcher@1.2.1: {} + path-key@3.1.1: {} path-key@4.0.0: {} @@ -17543,8 +20491,12 @@ snapshots: lru-cache: 11.2.6 minipass: 7.1.3 + path-to-regexp@0.1.13: {} + path-to-regexp@8.3.0: {} + path-to-regexp@8.4.2: {} + path-type@4.0.0: {} pathe@1.1.2: {} @@ -17556,6 +20508,8 @@ snapshots: ieee754: 1.2.1 resolve-protobuf-schema: 2.1.0 + pend@1.2.0: {} + perfect-debounce@2.1.0: {} pg-cloudflare@1.3.0: @@ -17601,6 +20555,10 @@ snapshots: pify@4.0.1: {} + piscina@4.9.2: + optionalDependencies: + '@napi-rs/nice': 1.1.1 + pkce-challenge@5.0.1: {} pkg-types@1.3.1: @@ -17963,6 +20921,10 @@ snapshots: punycode@2.3.1: {} + qs@6.14.2: + dependencies: + side-channel: 1.1.0 + qs@6.15.0: dependencies: side-channel: 1.1.0 @@ -17973,6 +20935,8 @@ snapshots: queue-microtask@1.2.3: {} + quick-lru@5.1.1: {} + quickselect@2.0.0: {} radix3@1.1.2: {} @@ -17983,6 +20947,13 @@ snapshots: range-parser@1.2.1: {} + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + raw-body@3.0.2: dependencies: bytes: 3.1.2 @@ -18056,6 +21027,8 @@ snapshots: dependencies: '@eslint-community/regexpp': 4.12.2 + reflect-metadata@0.2.2: {} + regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -18212,6 +21185,8 @@ snapshots: reserved-identifiers@1.2.0: {} + resolve-alpn@1.2.1: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -18228,6 +21203,15 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + responselike@4.0.2: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + restructure@3.0.2: {} retry@0.13.1: {} @@ -18368,7 +21352,7 @@ snapshots: router@2.2.0: dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -18384,6 +21368,10 @@ snapshots: rw@1.3.3: {} + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -18436,13 +21424,43 @@ snapshots: secure-json-parse@4.1.0: {} + seedrandom@3.0.5: {} + + seek-bzip@2.0.0: + dependencies: + commander: 6.2.1 + + semver-regex@4.0.5: {} + + semver-truncate@3.0.0: + dependencies: + semver: 7.7.4 + semver@6.3.1: {} semver@7.7.4: {} + send@0.19.2: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + send@1.2.1: dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -18466,6 +21484,15 @@ snapshots: dependencies: defu: 6.1.4 + serve-static@1.16.3: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2 + transitivePeerDependencies: + - supports-color + serve-static@2.2.1: dependencies: encodeurl: 2.0.0 @@ -18591,7 +21618,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -18623,7 +21650,7 @@ snapshots: socket.io-client@4.8.3: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) engine.io-client: 6.6.4 socket.io-parser: 4.2.5 transitivePeerDependencies: @@ -18634,10 +21661,18 @@ snapshots: socket.io-parser@4.2.5: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color + sort-keys-length@1.0.1: + dependencies: + sort-keys: 1.1.2 + + sort-keys@1.1.2: + dependencies: + is-plain-obj: 1.1.0 + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -18683,6 +21718,8 @@ snapshots: std-env@3.10.0: {} + stdin-discarder@0.2.2: {} + streamx@2.23.0: dependencies: events-universal: 1.0.1 @@ -18704,6 +21741,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.2 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 + string.prototype.codepointat@0.2.1: {} string_decoder@1.1.1: @@ -18729,6 +21772,11 @@ snapshots: strip-bom@3.0.0: {} + strip-dirs@3.0.0: + dependencies: + inspect-with-kind: 1.0.5 + is-plain-obj: 1.1.0 + strip-final-newline@3.0.0: {} strip-final-newline@4.0.0: {} @@ -18745,6 +21793,12 @@ snapshots: striptags@3.2.0: {} + strnum@2.2.2: {} + + strtok3@10.3.5: + dependencies: + '@tokenizer/token': 0.3.0 + structured-clone-es@1.0.0: {} stylehacks@7.0.7(postcss@8.5.6): @@ -18755,6 +21809,12 @@ snapshots: stylis@4.2.0: {} + super-regex@1.1.0: + dependencies: + function-timeout: 1.0.2 + make-asynchronous: 1.1.0 + time-span: 5.1.0 + supercluster@7.1.5: dependencies: kdbush: 3.0.0 @@ -18769,6 +21829,15 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@4.4.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + supports-preserve-symlinks-flag@1.0.0: {} svgo@4.0.0: @@ -18837,6 +21906,11 @@ snapshots: term-size@2.2.1: {} + terminal-link@5.0.0: + dependencies: + ansi-escapes: 7.3.0 + supports-hyperlinks: 4.4.0 + terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 @@ -18856,6 +21930,12 @@ snapshots: throttleit@2.1.0: {} + through@2.3.8: {} + + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 + tiny-inflate@1.0.3: {} tiny-invariant@1.3.3: {} @@ -18888,6 +21968,12 @@ snapshots: toidentifier@1.0.1: {} + token-types@6.1.2: + dependencies: + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + topojson-client@3.1.0: dependencies: commander: 2.20.3 @@ -19001,10 +22087,19 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@0.21.3: {} + + type-fest@4.41.0: {} + type-fest@5.4.4: dependencies: tagged-tag: 1.0.0 + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -19038,8 +22133,21 @@ snapshots: ufo@1.6.3: {} + uid@2.0.2: + dependencies: + '@lukeed/csprng': 1.1.0 + + uint8array-extras@1.5.0: {} + + ulid@3.0.2: {} + ultrahtml@1.6.0: {} + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + unconfig-core@7.5.0: dependencies: '@quansync/fs': 1.0.0 @@ -19058,6 +22166,8 @@ snapshots: undici@6.23.0: {} + undici@7.22.0: {} + unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -19078,6 +22188,8 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 + unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} unicorn-magic@0.4.0: {} @@ -19153,6 +22265,8 @@ snapshots: universalify@0.1.2: {} + universalify@2.0.1: {} + unpipe@1.0.0: {} unplugin-auto-import@21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3))): @@ -19283,7 +22397,7 @@ snapshots: dependencies: rolldown: 1.0.0-rc.3 - unstorage@1.17.4(@vercel/blob@2.3.0)(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3): + unstorage@1.17.4(@vercel/blob@2.3.0)(@vercel/functions@3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13))(db0@0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)))(ioredis@5.9.3): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -19295,6 +22409,7 @@ snapshots: ufo: 1.6.3 optionalDependencies: '@vercel/blob': 2.3.0 + '@vercel/functions': 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13) db0: 0.3.4(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260228.0)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(better-sqlite3@12.6.2)(pg@8.18.0)) ioredis: 5.9.3 @@ -19335,6 +22450,8 @@ snapshots: util-deprecate@1.0.2: {} + utils-merge@1.0.1: {} + vary@1.1.2: {} vaul-vue@0.4.1(reka-ui@2.7.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)): @@ -19410,7 +22527,7 @@ snapshots: vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.1(magicast@0.5.2))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)): dependencies: ansis: 4.2.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) error-stack-parser-es: 1.0.5 ohash: 2.0.11 open: 10.2.0 @@ -19491,7 +22608,7 @@ snapshots: vue-eslint-parser@10.4.0(eslint@9.39.3(jiti@2.6.1)): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) eslint-scope: 9.1.1 eslint-visitor-keys: 5.0.1 @@ -19531,10 +22648,22 @@ snapshots: w3c-keyname@2.2.8: {} + watchpack@2.5.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + optional: true + web-namespaces@2.0.1: {} web-streams-polyfill@3.3.3: {} + web-worker@1.5.0: {} + webidl-conversions@3.0.1: {} webpack-virtual-modules@0.6.2: {} @@ -19568,10 +22697,49 @@ snapshots: dependencies: isexe: 3.1.5 + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + wkt-parser@1.5.2: {} word-wrap@1.2.5: {} + wordwrap@1.0.0: {} + + workflow@4.2.0-beta.76(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(magicast@0.5.2)(typescript@5.9.3): + dependencies: + '@workflow/astro': 4.0.0-beta.50(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/cli': 4.2.0-beta.76(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/core': 4.2.0-beta.76(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.0-beta.20 + '@workflow/nest': 0.0.0-beta.25(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18(@nestjs/common@11.1.18(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.19))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.19))(@swc/helpers@0.5.19) + '@workflow/next': 4.0.1-beta.72(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/nitro': 4.0.1-beta.71(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/nuxt': 4.0.1-beta.60(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19)(magicast@0.5.2) + '@workflow/rollup': 4.0.0-beta.33(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/sveltekit': 4.0.0-beta.65(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.19) + '@workflow/typescript-plugin': 4.0.1-beta.5(typescript@5.9.3) + '@workflow/utils': 4.1.0-beta.13 + ms: 2.1.3 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + transitivePeerDependencies: + - '@nestjs/common' + - '@nestjs/core' + - '@swc/cli' + - '@swc/core' + - '@swc/helpers' + - aws-crt + - magicast + - next + - supports-color + - typescript + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -19584,6 +22752,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.2 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + wrappy@1.0.2: {} ws@8.18.3: {} @@ -19594,6 +22768,14 @@ snapshots: dependencies: is-wsl: 3.1.1 + xdg-app-paths@5.1.0: + dependencies: + xdg-portable: 7.3.0 + + xdg-portable@7.3.0: + dependencies: + os-paths: 4.4.0 + xml-name-validator@4.0.0: {} xmlhttprequest-ssl@2.1.2: {} @@ -19638,6 +22820,11 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yauzl@3.3.0: + dependencies: + buffer-crc32: 0.2.13 + pend: 1.2.0 + yjs@13.6.29: dependencies: lib0: 0.2.117 @@ -19681,6 +22868,8 @@ snapshots: zod@3.25.76: {} + zod@4.1.11: {} + zod@4.3.6: {} zwitch@2.0.4: {} From 289062b6b09c8bb609696ecf0feac2543273d3b9 Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Sun, 5 Apr 2026 11:17:51 +0100 Subject: [PATCH 3/4] chore: symlink root README to packages/github-tools --- README.md | 321 +----------------------------------------------------- 1 file changed, 1 insertion(+), 320 deletions(-) mode change 100644 => 120000 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 0e2881c..0000000 --- a/README.md +++ /dev/null @@ -1,320 +0,0 @@ -GitHub Tools banner - -# @github-tools/sdk - -[![npm version](https://img.shields.io/npm/v/@github-tools/sdk?color=black)](https://npmjs.com/package/@github-tools/sdk) -[![npm downloads](https://img.shields.io/npm/dm/@github-tools/sdk?color=black)](https://npm.chart.dev/@github-tools/sdk) -[![TypeScript](https://img.shields.io/badge/TypeScript-black?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) -[![license](https://img.shields.io/github/license/vercel-labs/github-tools?color=black)](https://github.com/vercel-labs/github-tools/blob/main/LICENSE) - -GitHub tools for the [AI SDK](https://ai-sdk.dev) — wrap GitHub's REST API as ready-to-use tools for any agent or `generateText` / `streamText` call. - -36 tools covering repositories, branches, pull requests, issues, commits, search, gists, and workflows. Write operations support granular approval control out of the box. - -## Installation - -```sh -pnpm add @github-tools/sdk -``` - -`ai` and `zod` are peer dependencies: - -```sh -pnpm add ai zod -``` - -## Quick Start - -```ts -import { createGithubTools } from '@github-tools/sdk' -import { generateText } from 'ai' - -const result = await generateText({ - model: yourModel, - tools: createGithubTools({ token: process.env.GITHUB_TOKEN! }), - prompt: 'List the open pull requests on vercel/ai and summarize them.', -}) -``` - -### Presets - -Use `preset` to get only the tools relevant to a specific use case: - -```ts -// Code-review agent — PRs, commits, file content, and comments -createGithubTools({ token, preset: 'code-review' }) - -// Issue triage — read/create/close issues, search -createGithubTools({ token, preset: 'issue-triage' }) - -// Read-only exploration — browse repos without write access -createGithubTools({ token, preset: 'repo-explorer' }) - -// Full maintenance — all tools -createGithubTools({ token, preset: 'maintainer' }) -``` - -Presets are composable — pass an array to combine them: - -```ts -createGithubTools({ token, preset: ['code-review', 'issue-triage'] }) -``` - -| Preset | Tools included | -|---|---| -| `code-review` | `getPullRequest`, `listPullRequests`, `getFileContent`, `listCommits`, `getCommit`, `getBlame`, `getRepository`, `listBranches`, `searchCode`, `addPullRequestComment` | -| `issue-triage` | `listIssues`, `getIssue`, `createIssue`, `addIssueComment`, `closeIssue`, `getRepository`, `searchRepositories`, `searchCode` | -| `repo-explorer` | All read-only tools including gists and workflows (no write operations) | -| `ci-ops` | `listWorkflows`, `listWorkflowRuns`, `getWorkflowRun`, `listWorkflowJobs`, `triggerWorkflow`, `cancelWorkflowRun`, `rerunWorkflowRun`, `getRepository`, `listBranches`, `listCommits`, `getCommit` | -| `maintainer` | All 36 tools | - -Omit `preset` to get all tools (same as `maintainer`). - -### Cherry-Picking Tools - -You can also import individual tool factories for full control: - -```ts -import { createOctokit, listPullRequests, createIssue } from '@github-tools/sdk' - -const octokit = createOctokit(process.env.GITHUB_TOKEN!) - -const tools = { - listPullRequests: listPullRequests(octokit), - createIssue: createIssue(octokit), -} -``` - -## Approval Control - -Write operations (creating issues, merging PRs, pushing files, …) require user approval by default. This is designed for human-in-the-loop agent workflows. - -```ts -// All writes need approval (default) -createGithubTools({ token }) - -// No approval needed -createGithubTools({ token, requireApproval: false }) - -// Granular: only destructive actions need approval -createGithubTools({ - token, - requireApproval: { - mergePullRequest: true, - createOrUpdateFile: true, - closeIssue: true, - createPullRequest: false, - addPullRequestComment: false, - createIssue: false, - addIssueComment: false, - }, -}) -``` - -Write tools: `createOrUpdateFile`, `createPullRequest`, `mergePullRequest`, `addPullRequestComment`, `createIssue`, `addIssueComment`, `closeIssue`, `createGist`, `updateGist`, `deleteGist`, `createGistComment`, `triggerWorkflow`, `cancelWorkflowRun`, `rerunWorkflowRun`. - -All other tools are read-only and never require approval. - -## Tool Selection with toolpick - -With dozens of tools, context window usage adds up. [toolpick](https://github.com/pontusab/toolpick) selects only the most relevant tools per step so the model sees what it needs: - -```ts -import { createGithubTools } from '@github-tools/sdk' -import { createToolIndex } from 'toolpick' -import { generateText } from 'ai' -import { openai } from '@ai-sdk/openai' - -const tools = createGithubTools() -const index = createToolIndex(tools, { - embeddingModel: openai.embeddingModel('text-embedding-3-small'), -}) - -const result = await generateText({ - model: openai('gpt-4o'), - tools, - prepareStep: index.prepareStep(), - prompt: 'List open PRs on vercel/ai and summarize them.', -}) -``` - -Each step, toolpick picks the best ~5 tools using keyword + semantic search. All tools remain callable — only the visible set changes. See [toolpick docs](https://github.com/pontusab/toolpick) for LLM re-ranking, caching, and model-driven discovery options. - -## Available Tools - -### Repository - -| Tool | Description | -|---|---| -| `getRepository` | Get repository metadata (stars, language, default branch, …) | -| `listBranches` | List branches | -| `getFileContent` | Read a file or directory listing | -| `createOrUpdateFile` | Create or update a file and commit it | - -### Pull Requests - -| Tool | Description | -|---|---| -| `listPullRequests` | List PRs filtered by state | -| `getPullRequest` | Get a PR's full details (diff stats, body, merge status) | -| `createPullRequest` | Open a new PR | -| `mergePullRequest` | Merge a PR (merge, squash, or rebase) | -| `addPullRequestComment` | Post a comment on a PR | - -### Issues - -| Tool | Description | -|---|---| -| `listIssues` | List issues filtered by state and labels | -| `getIssue` | Get an issue's full details | -| `createIssue` | Open a new issue | -| `addIssueComment` | Post a comment on an issue | -| `closeIssue` | Close an issue (completed or not planned) | - -### Gists - -| Tool | Description | -|---|---| -| `listGists` | List gists for the authenticated user or a specific user | -| `getGist` | Get a gist including file contents | -| `listGistComments` | List comments on a gist | -| `createGist` | Create a new gist with one or more files | -| `updateGist` | Update a gist's description or files | -| `deleteGist` | Delete a gist permanently | -| `createGistComment` | Post a comment on a gist | - -### Workflows - -| Tool | Description | -|---|---| -| `listWorkflows` | List GitHub Actions workflows in a repository | -| `listWorkflowRuns` | List workflow runs filtered by workflow, branch, status, or event | -| `getWorkflowRun` | Get a workflow run's status, timing, and trigger info | -| `listWorkflowJobs` | List jobs in a workflow run with step-level status | -| `triggerWorkflow` | Trigger a workflow via workflow_dispatch event | -| `cancelWorkflowRun` | Cancel an in-progress workflow run | -| `rerunWorkflowRun` | Re-run a workflow run, optionally only failed jobs | - -### Commits - -| Tool | Description | -|---|---| -| `listCommits` | List commits, optionally filtered by file path, author, or date range | -| `getCommit` | Get a commit's full details including changed files and diffs | -| `getBlame` | Line-level git blame for a file (GitHub GraphQL) | - -### Search - -| Tool | Description | -|---|---| -| `searchCode` | Search code across GitHub with qualifier support | -| `searchRepositories` | Search repositories by keyword, topic, language, stars, … | - -## GitHub Token - -All tools authenticate with a GitHub personal access token (PAT). - -### Fine-grained token (recommended) - -Create one at **GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens**. - -| Permission | Level | Required for | -|---|---|---| -| **Metadata** | Read-only | Always required (auto-included) | -| **Contents** | Read-only | `getRepository`, `listBranches`, `getFileContent`, `listCommits`, `getCommit`, `getBlame` | -| **Contents** | Read and write | `createOrUpdateFile` | -| **Pull requests** | Read-only | `listPullRequests`, `getPullRequest` | -| **Pull requests** | Read and write | `createPullRequest`, `mergePullRequest`, `addPullRequestComment` | -| **Issues** | Read-only | `listIssues`, `getIssue` | -| **Issues** | Read and write | `createIssue`, `addIssueComment`, `closeIssue` | - -| **Gists** | Read-only | `listGists`, `getGist`, `listGistComments` | -| **Gists** | Read and write | `createGist`, `updateGist`, `deleteGist`, `createGistComment` | -| **Actions** | Read-only | `listWorkflows`, `listWorkflowRuns`, `getWorkflowRun`, `listWorkflowJobs` | -| **Actions** | Read and write | `triggerWorkflow`, `cancelWorkflowRun`, `rerunWorkflowRun` | - -Search tools (`searchCode`, `searchRepositories`) work with any token. - -### Classic token - -| Scope | Required for | -|---|---| -| `public_repo` | All tools on public repositories | -| `repo` | All tools on public and private repositories | - -## API - -### `createGithubTools(options)` - -Returns an object of tools, ready to spread into `tools` of any AI SDK call. - -```ts -type GithubToolsOptions = { - token?: string // defaults to process.env.GITHUB_TOKEN - requireApproval?: boolean | Partial> - preset?: GithubToolPreset | GithubToolPreset[] -} - -type GithubToolPreset = 'code-review' | 'issue-triage' | 'repo-explorer' | 'ci-ops' | 'maintainer' -``` - -### `createGithubAgent(options)` - -Returns a `ToolLoopAgent` instance with `.generate()` and `.stream()` methods, pre-configured with GitHub tools and tailored instructions. - -```ts -import { createGithubAgent } from '@github-tools/sdk' - -// Minimal — all tools, generic prompt -const agent = createGithubAgent({ - model: 'anthropic/claude-sonnet-4.6', - token: process.env.GITHUB_TOKEN!, -}) - -// With preset — scoped tools + tailored prompt -const reviewer = createGithubAgent({ - model: 'anthropic/claude-sonnet-4.6', - token: process.env.GITHUB_TOKEN!, - preset: 'code-review', -}) - -// Add context to the built-in prompt -const triager = createGithubAgent({ - model: 'anthropic/claude-sonnet-4.6', - token: process.env.GITHUB_TOKEN!, - preset: 'issue-triage', - additionalInstructions: 'Focus on the nuxt/ui repository. Always respond in French.', -}) - -// Full override — replace the built-in prompt entirely -const custom = createGithubAgent({ - model: 'anthropic/claude-sonnet-4.6', - token: process.env.GITHUB_TOKEN!, - instructions: 'You are a security auditor. Only flag security-related issues.', -}) - -// Use the agent -const result = await reviewer.generate({ prompt: 'Review PR #42 on vercel/ai' }) -const stream = reviewer.stream({ prompt: 'Review PR #42 on vercel/ai' }) -``` - -| Option | Description | -|---|---| -| `model` | Language model — string (`'anthropic/claude-sonnet-4.6'`) or provider instance | -| `token` | GitHub personal access token | -| `preset` | Optional preset or array of presets to scope tools | -| `requireApproval` | Approval config (same as `createGithubTools`) | -| `instructions` | Replaces the built-in system prompt entirely | -| `additionalInstructions` | Appended to the built-in system prompt | - -All other `ToolLoopAgent` options (`stopWhen`, `toolChoice`, `onStepFinish`, etc.) are passed through. - -### `createOctokit(token)` - -Returns a configured [`@octokit/rest`](https://github.com/octokit/rest.js) instance. Useful when cherry-picking individual tools or building custom ones. - -## License - -[MIT](./LICENSE) - -Made by [@HugoRCD](https://github.com/HugoRCD) diff --git a/README.md b/README.md new file mode 120000 index 0000000..5156a80 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +packages/github-tools/README.md \ No newline at end of file From 56babe2ac193f0281ff9e1f3d6876c29219ac87f Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Sun, 5 Apr 2026 11:25:25 +0100 Subject: [PATCH 4/4] add durable chat --- .changeset/add-durable-workflow-tools.md | 2 +- .gitignore | 3 +- apps/chat/app/composables/useModels.ts | 4 +- apps/chat/app/pages/chat/[id].vue | 16 +- apps/chat/app/pages/index.vue | 11 + apps/chat/nuxt.config.ts | 3 +- .../server/api/workflow/chats/[id].post.ts | 110 +++++++ apps/chat/server/workflows/chat.ts | 27 ++ package.json | 1 + packages/github-tools/README.md | 14 +- packages/github-tools/package.json | 2 +- packages/github-tools/src/tools/commits.ts | 220 ++++++------- packages/github-tools/src/tools/gists.ts | 228 +++++++------- packages/github-tools/src/tools/issues.ts | 178 ++++++----- .../github-tools/src/tools/pull-requests.ts | 178 ++++++----- packages/github-tools/src/tools/repository.ts | 294 +++++++++--------- packages/github-tools/src/tools/search.ts | 70 +++-- packages/github-tools/src/tools/workflows.ts | 253 +++++++-------- packages/github-tools/src/workflow.ts | 14 +- 19 files changed, 936 insertions(+), 692 deletions(-) create mode 100644 apps/chat/server/api/workflow/chats/[id].post.ts create mode 100644 apps/chat/server/workflows/chat.ts diff --git a/.changeset/add-durable-workflow-tools.md b/.changeset/add-durable-workflow-tools.md index 37abd7a..21ceaa8 100644 --- a/.changeset/add-durable-workflow-tools.md +++ b/.changeset/add-durable-workflow-tools.md @@ -2,4 +2,4 @@ "@github-tools/sdk": minor --- -Add native `"use step"` to every tool for Vercel Workflow SDK durability. Tool factories now take `token: string` instead of `Octokit` and create their own client internally, making closures serializable for durable step execution. Add `@github-tools/sdk/workflow` subpath with `createDurableGithubAgent` powered by `DurableAgent`. +Add Vercel Workflow SDK support. Tool factories now take `token: string` instead of `Octokit`. Each tool uses a named module-level step function with `"use step"` for proper step registration and full Node.js access in the workflow sandbox. Add `@github-tools/sdk/workflow` subpath with `createDurableGithubAgent` powered by `DurableAgent`. Note: `requireApproval` is accepted for forward-compatibility but currently ignored by `DurableAgent`. diff --git a/.gitignore b/.gitignore index 735c22a..fde5457 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ logs !.env.example apps/chat/.data -.turbo/ \ No newline at end of file +.turbo/ +.workflow-data/ \ No newline at end of file diff --git a/apps/chat/app/composables/useModels.ts b/apps/chat/app/composables/useModels.ts index 971de55..934cbd5 100644 --- a/apps/chat/app/composables/useModels.ts +++ b/apps/chat/app/composables/useModels.ts @@ -6,9 +6,11 @@ export function useModels() { ] const model = useCookie('model', { default: () => 'openai/gpt-5-nano' }) + const durable = useCookie('durable', { default: () => false }) return { models, - model + model, + durable } } diff --git a/apps/chat/app/pages/chat/[id].vue b/apps/chat/app/pages/chat/[id].vue index bb4eee4..d83ac57 100644 --- a/apps/chat/app/pages/chat/[id].vue +++ b/apps/chat/app/pages/chat/[id].vue @@ -16,7 +16,7 @@ const components = { const route = useRoute() const toast = useToast() const clipboard = useClipboard() -const { model } = useModels() +const { model, durable } = useModels() function getFileName(url: string): string { try { @@ -48,11 +48,13 @@ if (!data.value) { } const input = ref('') +const chatApiBase = durable.value ? '/api/workflow/chats' : '/api/chats' + const chat = new Chat({ id: data.value.id, messages: data.value.messages, transport: new DefaultChatTransport({ - api: `/api/chats/${data.value.id}`, + api: `${chatApiBase}/${data.value.id}`, body: { model: model.value } @@ -215,6 +217,16 @@ onMounted(() => { + + + + + + + + diff --git a/apps/chat/nuxt.config.ts b/apps/chat/nuxt.config.ts index 485174f..744f658 100644 --- a/apps/chat/nuxt.config.ts +++ b/apps/chat/nuxt.config.ts @@ -6,7 +6,8 @@ export default defineNuxtConfig({ '@nuxtjs/mdc', '@nuxthub/core', 'nuxt-auth-utils', - 'nuxt-charts' + 'nuxt-charts', + 'workflow/nuxt' ], devtools: { diff --git a/apps/chat/server/api/workflow/chats/[id].post.ts b/apps/chat/server/api/workflow/chats/[id].post.ts new file mode 100644 index 0000000..26f4dc4 --- /dev/null +++ b/apps/chat/server/api/workflow/chats/[id].post.ts @@ -0,0 +1,110 @@ +import { convertToModelMessages, createUIMessageStream, createUIMessageStreamResponse, generateText } from 'ai' +import { start } from 'workflow/api' +import { z } from 'zod' +import { db, schema } from 'hub:db' +import { and, eq } from 'drizzle-orm' +import type { UIMessage } from 'ai' +import { durableChatWorkflow } from '../../../workflows/chat' + +defineRouteMeta({ + openAPI: { + description: 'Chat with AI using a durable workflow agent.', + tags: ['ai', 'workflow'] + } +}) + +export default defineEventHandler(async (event) => { + const session = await getUserSession(event) + + const { id } = await getValidatedRouterParams(event, z.object({ + id: z.string() + }).parse) + + const { model, messages } = await readValidatedBody(event, z.object({ + model: z.string(), + messages: z.array(z.custom()) + }).parse) + + const { githubToken: configToken } = useRuntimeConfig() + const token = session.secure?.githubToken ?? configToken + + const chat = await db.query.chats.findFirst({ + where: () => and( + eq(schema.chats.id, id as string), + eq(schema.chats.userId, session.user?.id || session.id) + ), + with: { messages: true } + }) + if (!chat) { + throw createError({ statusCode: 404, statusMessage: 'Chat not found' }) + } + + const lastMessage = messages[messages.length - 1] + const isContinuation = lastMessage?.role === 'assistant' + + if (!chat.title && !isContinuation) { + const { text: title } = await generateText({ + model: 'openai/gpt-4o-mini', + system: `You are a title generator for a chat: + - Generate a short title based on the first user's message + - The title should be less than 30 characters long + - The title should be a summary of the user's message + - Do not use quotes (' or ") or colons (:) or any other punctuation + - Do not use markdown, just plain text`, + prompt: JSON.stringify(messages[0]) + }) + await db.update(schema.chats).set({ title }).where(eq(schema.chats.id, id as string)) + } + + if (lastMessage?.role === 'user' && messages.length > 1) { + await db.insert(schema.messages).values({ + chatId: id as string, + role: 'user', + parts: lastMessage.parts + }) + } + + const additionalInstructions = [ + session.user?.username ? `The user's name is ${session.user.username}.` : '', + '**FORMATTING RULES (CRITICAL):**', + '- ABSOLUTELY NO MARKDOWN HEADINGS: Never use #, ##, ###, ####, #####, or ######', + '- NO underline-style headings with === or ---', + '- Use **bold text** for emphasis and section labels instead', + '- Start all responses with content, never with a heading' + ].filter(Boolean).join('\n') + + const modelMessages = await convertToModelMessages(messages) + const maxSteps = token ? 20 : 5 + + const run = await start(durableChatWorkflow, [modelMessages, token || '', model, additionalInstructions, maxSteps]) + + const stream = createUIMessageStream({ + originalMessages: messages, + execute: async ({ writer }) => { + if (!chat.title && !isContinuation) { + writer.write({ type: 'data-chat-title', data: { message: 'Generating title...' }, transient: true }) + } + writer.merge(run.readable) + }, + onFinish: async ({ responseMessage, isContinuation: isCont }) => { + if (isCont) { + const lastDbAssistant = chat.messages + .filter(m => m.role === 'assistant') + .pop() + if (lastDbAssistant) { + await db.update(schema.messages) + .set({ parts: responseMessage.parts }) + .where(eq(schema.messages.id, lastDbAssistant.id)) + } + } else { + await db.insert(schema.messages).values({ + chatId: chat.id, + role: responseMessage.role as 'user' | 'assistant', + parts: responseMessage.parts + }) + } + } + }) + + return createUIMessageStreamResponse({ stream }) +}) diff --git a/apps/chat/server/workflows/chat.ts b/apps/chat/server/workflows/chat.ts new file mode 100644 index 0000000..1271477 --- /dev/null +++ b/apps/chat/server/workflows/chat.ts @@ -0,0 +1,27 @@ +import { getWritable } from 'workflow' +import { createDurableGithubAgent } from '@github-tools/sdk/workflow' +import type { ModelMessage, UIMessageChunk } from 'ai' + +export async function durableChatWorkflow( + messages: ModelMessage[], + token: string, + model: string, + additionalInstructions: string, + maxSteps: number +) { + 'use workflow' + + const writable = getWritable() + + const agent = createDurableGithubAgent({ + model, + token, + additionalInstructions, + maxSteps + }) + + await agent.stream({ + messages, + writable + }) +} diff --git a/package.json b/package.json index 3c4b771..520f483 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "lint": "turbo run lint", "lint:fix": "turbo run lint:fix", "typecheck": "turbo run typecheck", + "workflow": "pnpm --filter @github-tools/chat exec workflow web", "changeset": "changeset", "version-packages": "changeset version", "release": "turbo run build --filter=@github-tools/sdk && changeset publish" diff --git a/packages/github-tools/README.md b/packages/github-tools/README.md index 7679878..d3dffd2 100644 --- a/packages/github-tools/README.md +++ b/packages/github-tools/README.md @@ -85,7 +85,7 @@ const tools = { } ``` -Each tool factory accepts a `token` string and creates its own client internally. This makes every tool natively compatible with Vercel Workflow SDK — see [Durable Agents](#durable-agents-vercel-workflow-sdk) below. +Each tool factory accepts a `token` string. Tools use named module-level step functions with `"use step"` internally, ensuring proper step registration and full Node.js access when running inside a Vercel Workflow sandbox. See [Durable Agents](#durable-agents-vercel-workflow-sdk). ## Approval Control @@ -144,9 +144,9 @@ Each step, toolpick picks the best ~5 tools using keyword + semantic search. All ## Durable Agents (Vercel Workflow SDK) -Every tool includes a built-in `"use step"` directive, making it natively durable when used inside a Vercel Workflow function. Each tool call becomes a retryable, crash-safe step with no extra configuration. +All tools include `"use step"` directives with named, module-level step functions, making them natively compatible with the Vercel Workflow SDK. Each tool execution runs as a properly registered durable step with full Node.js access in the workflow sandbox. -Import from the `@github-tools/sdk/workflow` subpath to get `createDurableGithubAgent`: +Use `DurableAgent` via the `@github-tools/sdk/workflow` subpath to make every LLM call and tool execution a retryable, crash-safe step: ```ts import { createDurableGithubAgent } from '@github-tools/sdk/workflow' @@ -158,7 +158,9 @@ const agent = createDurableGithubAgent({ }) ``` -This works with all presets and supports the same approval control as the standard agent. +All presets work with `createDurableGithubAgent`. + +> **Approval control limitation**: `requireApproval` is accepted for forward-compatibility but is currently ignored by `DurableAgent`. The Workflow SDK does not yet support interactive tool approval — all tools execute immediately. Use `createGithubAgent` (standard `ToolLoopAgent`) when human-in-the-loop approval is required. > `workflow` and `@workflow/ai` are optional peer dependencies — install them only when using the workflow subpath. @@ -333,7 +335,7 @@ All other `ToolLoopAgent` options (`stopWhen`, `toolChoice`, `onStepFinish`, etc ### `createDurableGithubAgent(options)` -Returns a `DurableAgent` instance for use inside Vercel Workflow SDK functions. Every tool call runs as a durable step with automatic retries and crash recovery. +Returns a `DurableAgent` instance for use inside Vercel Workflow SDK functions. Every LLM call and tool execution runs as a durable step with automatic retries and crash recovery. Requires the optional peer dependencies `workflow` and `@workflow/ai`: @@ -360,6 +362,8 @@ async function chatWorkflow(messages: ModelMessage[], token: string) { All presets (`code-review`, `issue-triage`, `ci-ops`, `repo-explorer`, `maintainer`) work with `createDurableGithubAgent`. The options are the same as `createGithubAgent` except it returns a `DurableAgent` instead of a `ToolLoopAgent`. +> **Note:** `requireApproval` is accepted but currently ignored by `DurableAgent` — the Workflow SDK does not yet support interactive tool approval. + ### `createOctokit(token)` Returns a configured [`octokit`](https://github.com/octokit/octokit.js) instance. Useful for building custom tools. diff --git a/packages/github-tools/package.json b/packages/github-tools/package.json index 77fc4c6..05fda1c 100644 --- a/packages/github-tools/package.json +++ b/packages/github-tools/package.json @@ -13,7 +13,7 @@ "url": "https://github.com/vercel-labs/github-tools/issues" }, "type": "module", - "sideEffects": false, + "sideEffects": ["./dist/agents-*.mjs"], "exports": { ".": { "types": "./dist/index.d.mts", diff --git a/packages/github-tools/src/tools/commits.ts b/packages/github-tools/src/tools/commits.ts index 7ddbda6..feac0e1 100644 --- a/packages/github-tools/src/tools/commits.ts +++ b/packages/github-tools/src/tools/commits.ts @@ -62,6 +62,29 @@ type BlameQueryData = { } | null } +async function listCommitsStep({ token, owner, repo, path, sha, author, since, until, perPage }: { token: string, owner: string, repo: string, path?: string, sha?: string, author?: string, since?: string, until?: string, perPage: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.repos.listCommits({ + owner, + repo, + path, + sha, + author, + since, + until, + per_page: perPage, + }) + return data.map(commit => ({ + sha: commit.sha, + message: commit.commit.message, + author: commit.commit.author?.name, + authorLogin: commit.author?.login, + date: commit.commit.author?.date, + url: commit.html_url, + })) +} + export const listCommits = (token: string) => tool({ description: @@ -76,30 +99,35 @@ export const listCommits = (token: string) => until: z.string().optional().describe('Only commits before this date (ISO 8601 format)'), perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), }), - execute: async ({ owner, repo, path, sha, author, since, until, perPage }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.repos.listCommits({ - owner, - repo, - path, - sha, - author, - since, - until, - per_page: perPage, - }) - return data.map(commit => ({ - sha: commit.sha, - message: commit.commit.message, - author: commit.commit.author?.name, - authorLogin: commit.author?.login, - date: commit.commit.author?.date, - url: commit.html_url, - })) - }, + execute: async args => listCommitsStep({ token, ...args }), }) +async function getCommitStep({ token, owner, repo, ref }: { token: string, owner: string, repo: string, ref: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.repos.getCommit({ owner, repo, ref }) + return { + sha: data.sha, + message: data.commit.message, + author: data.commit.author?.name, + authorLogin: data.author?.login, + date: data.commit.author?.date, + url: data.html_url, + stats: data.stats ? { + additions: data.stats.additions, + deletions: data.stats.deletions, + total: data.stats.total, + } : null, + files: data.files?.map(file => ({ + filename: file.filename, + status: file.status, + additions: file.additions, + deletions: file.deletions, + patch: file.patch, + })), + } +} + export const getCommit = (token: string) => tool({ description: 'Get detailed information about a specific commit, including the list of files changed with additions and deletions', @@ -108,33 +136,70 @@ export const getCommit = (token: string) => repo: z.string().describe('Repository name'), ref: z.string().describe('Commit SHA, branch name, or tag'), }), - execute: async ({ owner, repo, ref }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.repos.getCommit({ owner, repo, ref }) - return { - sha: data.sha, - message: data.commit.message, - author: data.commit.author?.name, - authorLogin: data.author?.login, - date: data.commit.author?.date, - url: data.html_url, - stats: data.stats ? { - additions: data.stats.additions, - deletions: data.stats.deletions, - total: data.stats.total, - } : null, - files: data.files?.map(file => ({ - filename: file.filename, - status: file.status, - additions: file.additions, - deletions: file.deletions, - patch: file.patch, - })), - } - }, + execute: async args => getCommitStep({ token, ...args }), }) +async function getBlameStep({ token, owner, repo, path, ref, line, lineStart, lineEnd }: { token: string, owner: string, repo: string, path: string, ref?: string, line?: number, lineStart?: number, lineEnd?: number }) { + "use step" + const octokit = createOctokit(token) + let expression = ref + if (!expression) { + const { data } = await octokit.rest.repos.get({ owner, repo }) + expression = data.default_branch + } + + const data = (await octokit.graphql(BLAME_QUERY, { + owner, + name: repo, + expression, + path, + })) as BlameQueryData + + if (!data.repository) { + return { error: `Repository not found: ${owner}/${repo}` } + } + + const obj = data.repository.object + if (!obj?.oid || !obj?.blame) { + return { + error: + `Ref "${expression}" did not resolve to a commit for this repository (or the path is invalid). Pass a branch name, tag, or full commit SHA.`, + } + } + + let ranges = obj.blame.ranges.map(r => ({ + startingLine: r.startingLine, + endingLine: r.endingLine, + age: r.age, + commit: { + sha: r.commit.oid, + abbreviatedSha: r.commit.abbreviatedOid, + messageHeadline: r.commit.messageHeadline, + authoredDate: r.commit.authoredDate, + url: r.commit.url, + authorName: r.commit.author?.name ?? null, + authorEmail: r.commit.author?.email ?? null, + authorLogin: r.commit.author?.user?.login ?? null, + }, + })) + + if (line != null) { + ranges = ranges.filter(r => line >= r.startingLine && line <= r.endingLine) + } else if (lineStart != null || lineEnd != null) { + const start = lineStart ?? 1 + const end = lineEnd ?? Number.MAX_SAFE_INTEGER + ranges = ranges.filter(r => r.endingLine >= start && r.startingLine <= end) + } + + return { + ref: expression, + tipSha: obj.oid, + path, + rangeCount: ranges.length, + ranges, + } +} + export const getBlame = (token: string) => tool({ description: @@ -166,64 +231,5 @@ export const getBlame = (token: string) => .optional() .describe('When used with lineStart, only return ranges overlapping this window'), }), - execute: async ({ owner, repo, path, ref, line, lineStart, lineEnd }) => { - "use step" - const octokit = createOctokit(token) - let expression = ref - if (!expression) { - const { data } = await octokit.rest.repos.get({ owner, repo }) - expression = data.default_branch - } - - const data = (await octokit.graphql(BLAME_QUERY, { - owner, - name: repo, - expression, - path, - })) as BlameQueryData - - if (!data.repository) { - return { error: `Repository not found: ${owner}/${repo}` } - } - - const obj = data.repository.object - if (!obj?.oid || !obj?.blame) { - return { - error: - `Ref "${expression}" did not resolve to a commit for this repository (or the path is invalid). Pass a branch name, tag, or full commit SHA.`, - } - } - - let ranges = obj.blame.ranges.map(r => ({ - startingLine: r.startingLine, - endingLine: r.endingLine, - age: r.age, - commit: { - sha: r.commit.oid, - abbreviatedSha: r.commit.abbreviatedOid, - messageHeadline: r.commit.messageHeadline, - authoredDate: r.commit.authoredDate, - url: r.commit.url, - authorName: r.commit.author?.name ?? null, - authorEmail: r.commit.author?.email ?? null, - authorLogin: r.commit.author?.user?.login ?? null, - }, - })) - - if (line != null) { - ranges = ranges.filter(r => line >= r.startingLine && line <= r.endingLine) - } else if (lineStart != null || lineEnd != null) { - const start = lineStart ?? 1 - const end = lineEnd ?? Number.MAX_SAFE_INTEGER - ranges = ranges.filter(r => r.endingLine >= start && r.startingLine <= end) - } - - return { - ref: expression, - tipSha: obj.oid, - path, - rangeCount: ranges.length, - ranges, - } - }, + execute: async args => getBlameStep({ token, ...args }), }) diff --git a/packages/github-tools/src/tools/gists.ts b/packages/github-tools/src/tools/gists.ts index 7927cf3..25aae8b 100644 --- a/packages/github-tools/src/tools/gists.ts +++ b/packages/github-tools/src/tools/gists.ts @@ -3,6 +3,25 @@ import { z } from 'zod' import { createOctokit } from '../client' import type { ToolOptions } from '../types' +async function listGistsStep({ token, username, perPage, page }: { token: string, username?: string, perPage: number, page: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = username + ? await octokit.rest.gists.listForUser({ username, per_page: perPage, page }) + : await octokit.rest.gists.list({ per_page: perPage, page }) + return data.map(gist => ({ + id: gist.id, + description: gist.description, + public: gist.public, + url: gist.html_url, + files: Object.keys(gist.files ?? {}), + owner: gist.owner?.login, + comments: gist.comments, + createdAt: gist.created_at, + updatedAt: gist.updated_at, + })) +} + export const listGists = (token: string) => tool({ description: 'List gists for the authenticated user or a specific user', @@ -11,55 +30,54 @@ export const listGists = (token: string) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), page: z.number().optional().default(1).describe('Page number for pagination'), }), - execute: async ({ username, perPage, page }) => { - "use step" - const octokit = createOctokit(token) - const { data } = username - ? await octokit.rest.gists.listForUser({ username, per_page: perPage, page }) - : await octokit.rest.gists.list({ per_page: perPage, page }) - return data.map(gist => ({ - id: gist.id, - description: gist.description, - public: gist.public, - url: gist.html_url, - files: Object.keys(gist.files ?? {}), - owner: gist.owner?.login, - comments: gist.comments, - createdAt: gist.created_at, - updatedAt: gist.updated_at, - })) - }, + execute: async args => listGistsStep({ token, ...args }), }) +async function getGistStep({ token, gistId }: { token: string, gistId: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.gists.get({ gist_id: gistId }) + return { + id: data.id, + description: data.description, + public: data.public, + url: data.html_url, + owner: data.owner?.login, + files: Object.values(data.files ?? {}).map(file => ({ + filename: file?.filename, + language: file?.language, + size: file?.size, + content: file?.content, + })), + comments: data.comments, + createdAt: data.created_at, + updatedAt: data.updated_at, + } +} + export const getGist = (token: string) => tool({ description: 'Get a gist by ID, including file contents', inputSchema: z.object({ gistId: z.string().describe('Gist ID'), }), - execute: async ({ gistId }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.gists.get({ gist_id: gistId }) - return { - id: data.id, - description: data.description, - public: data.public, - url: data.html_url, - owner: data.owner?.login, - files: Object.values(data.files ?? {}).map(file => ({ - filename: file?.filename, - language: file?.language, - size: file?.size, - content: file?.content, - })), - comments: data.comments, - createdAt: data.created_at, - updatedAt: data.updated_at, - } - }, + execute: async args => getGistStep({ token, ...args }), }) +async function listGistCommentsStep({ token, gistId, perPage, page }: { token: string, gistId: string, perPage: number, page: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.gists.listComments({ gist_id: gistId, per_page: perPage, page }) + return data.map(comment => ({ + id: comment.id, + body: comment.body, + author: comment.user?.login, + url: comment.url, + createdAt: comment.created_at, + updatedAt: comment.updated_at, + })) +} + export const listGistComments = (token: string) => tool({ description: 'List comments on a gist', @@ -68,20 +86,26 @@ export const listGistComments = (token: string) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), page: z.number().optional().default(1).describe('Page number for pagination'), }), - execute: async ({ gistId, perPage, page }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.gists.listComments({ gist_id: gistId, per_page: perPage, page }) - return data.map(comment => ({ - id: comment.id, - body: comment.body, - author: comment.user?.login, - url: comment.url, - createdAt: comment.created_at, - updatedAt: comment.updated_at, - })) - }, + execute: async args => listGistCommentsStep({ token, ...args }), + }) + +async function createGistStep({ token, description, files, isPublic }: { token: string, description?: string, files: Record, isPublic: boolean }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.gists.create({ + description, + files, + public: isPublic, }) + return { + id: data.id, + description: data.description, + public: data.public, + url: data.html_url, + files: Object.keys(data.files ?? {}), + owner: data.owner?.login, + } +} export const createGist = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ @@ -93,25 +117,30 @@ export const createGist = (token: string, { needsApproval = true }: ToolOptions .describe('Files to include, keyed by filename'), isPublic: z.boolean().optional().default(false).describe('Whether the gist is public'), }), - execute: async ({ description, files, isPublic }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.gists.create({ - description, - files, - public: isPublic, - }) - return { - id: data.id, - description: data.description, - public: data.public, - url: data.html_url, - files: Object.keys(data.files ?? {}), - owner: data.owner?.login, - } - }, + execute: async args => createGistStep({ token, ...args }), }) +async function updateGistStep({ token, gistId, description, files, filesToDelete }: { token: string, gistId: string, description?: string, files?: Record, filesToDelete?: string[] }) { + "use step" + const octokit = createOctokit(token) + const fileUpdates: Record = {} + if (files) Object.assign(fileUpdates, files) + if (filesToDelete) { + for (const name of filesToDelete) fileUpdates[name] = null + } + const { data } = await octokit.rest.gists.update({ + gist_id: gistId, + description, + files: fileUpdates as Record, + }) + return { + id: data.id, + description: data.description, + url: data.html_url, + files: Object.keys(data.files ?? {}), + } +} + export const updateGist = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Update an existing gist — edit description, update files, or remove files', @@ -123,28 +152,16 @@ export const updateGist = (token: string, { needsApproval = true }: ToolOptions .optional().describe('Files to add or update, keyed by filename'), filesToDelete: z.array(z.string()).optional().describe('Filenames to remove from the gist'), }), - execute: async ({ gistId, description, files, filesToDelete }) => { - "use step" - const octokit = createOctokit(token) - const fileUpdates: Record = {} - if (files) Object.assign(fileUpdates, files) - if (filesToDelete) { - for (const name of filesToDelete) fileUpdates[name] = null - } - const { data } = await octokit.rest.gists.update({ - gist_id: gistId, - description, - files: fileUpdates as Record, - }) - return { - id: data.id, - description: data.description, - url: data.html_url, - files: Object.keys(data.files ?? {}), - } - }, + execute: async args => updateGistStep({ token, ...args }), }) +async function deleteGistStep({ token, gistId }: { token: string, gistId: string }) { + "use step" + const octokit = createOctokit(token) + await octokit.rest.gists.delete({ gist_id: gistId }) + return { deleted: true, gistId } +} + export const deleteGist = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Delete a gist permanently', @@ -152,14 +169,22 @@ export const deleteGist = (token: string, { needsApproval = true }: ToolOptions inputSchema: z.object({ gistId: z.string().describe('Gist ID to delete'), }), - execute: async ({ gistId }) => { - "use step" - const octokit = createOctokit(token) - await octokit.rest.gists.delete({ gist_id: gistId }) - return { deleted: true, gistId } - }, + execute: async args => deleteGistStep({ token, ...args }), }) +async function createGistCommentStep({ token, gistId, body }: { token: string, gistId: string, body: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.gists.createComment({ gist_id: gistId, body }) + return { + id: data.id, + url: data.url, + body: data.body, + author: data.user?.login, + createdAt: data.created_at, + } +} + export const createGistComment = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Add a comment to a gist', @@ -168,16 +193,5 @@ export const createGistComment = (token: string, { needsApproval = true }: ToolO gistId: z.string().describe('Gist ID'), body: z.string().describe('Comment text (supports Markdown)'), }), - execute: async ({ gistId, body }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.gists.createComment({ gist_id: gistId, body }) - return { - id: data.id, - url: data.url, - body: data.body, - author: data.user?.login, - createdAt: data.created_at, - } - }, + execute: async args => createGistCommentStep({ token, ...args }), }) diff --git a/packages/github-tools/src/tools/issues.ts b/packages/github-tools/src/tools/issues.ts index ab45479..6f017e8 100644 --- a/packages/github-tools/src/tools/issues.ts +++ b/packages/github-tools/src/tools/issues.ts @@ -3,6 +3,30 @@ import { z } from 'zod' import { createOctokit } from '../client' import type { ToolOptions } from '../types' +async function listIssuesStep({ token, owner, repo, state, labels, perPage }: { token: string, owner: string, repo: string, state: 'open' | 'closed' | 'all', labels?: string, perPage: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.issues.listForRepo({ + owner, + repo, + state, + labels, + per_page: perPage, + }) + return data + .filter(issue => !issue.pull_request) + .map(issue => ({ + number: issue.number, + title: issue.title, + state: issue.state, + url: issue.html_url, + author: issue.user?.login, + labels: issue.labels.map(l => (typeof l === 'string' ? l : l.name)), + createdAt: issue.created_at, + updatedAt: issue.updated_at, + })) +} + export const listIssues = (token: string) => tool({ description: 'List issues for a GitHub repository (excludes pull requests)', @@ -13,31 +37,29 @@ export const listIssues = (token: string) => labels: z.string().optional().describe('Comma-separated list of label names to filter by'), perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), }), - execute: async ({ owner, repo, state, labels, perPage }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.issues.listForRepo({ - owner, - repo, - state, - labels, - per_page: perPage, - }) - return data - .filter(issue => !issue.pull_request) - .map(issue => ({ - number: issue.number, - title: issue.title, - state: issue.state, - url: issue.html_url, - author: issue.user?.login, - labels: issue.labels.map(l => (typeof l === 'string' ? l : l.name)), - createdAt: issue.created_at, - updatedAt: issue.updated_at, - })) - }, + execute: async args => listIssuesStep({ token, ...args }), }) +async function getIssueStep({ token, owner, repo, issueNumber }: { token: string, owner: string, repo: string, issueNumber: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.issues.get({ owner, repo, issue_number: issueNumber }) + return { + number: data.number, + title: data.title, + body: data.body, + state: data.state, + url: data.html_url, + author: data.user?.login, + assignees: data.assignees?.map(a => a.login), + labels: data.labels.map(l => (typeof l === 'string' ? l : l.name)), + comments: data.comments, + createdAt: data.created_at, + updatedAt: data.updated_at, + closedAt: data.closed_at, + } +} + export const getIssue = (token: string) => tool({ description: 'Get detailed information about a specific issue', @@ -46,27 +68,22 @@ export const getIssue = (token: string) => repo: z.string().describe('Repository name'), issueNumber: z.number().describe('Issue number'), }), - execute: async ({ owner, repo, issueNumber }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.issues.get({ owner, repo, issue_number: issueNumber }) - return { - number: data.number, - title: data.title, - body: data.body, - state: data.state, - url: data.html_url, - author: data.user?.login, - assignees: data.assignees?.map(a => a.login), - labels: data.labels.map(l => (typeof l === 'string' ? l : l.name)), - comments: data.comments, - createdAt: data.created_at, - updatedAt: data.updated_at, - closedAt: data.closed_at, - } - }, + execute: async args => getIssueStep({ token, ...args }), }) +async function createIssueStep({ token, owner, repo, title, body, labels, assignees }: { token: string, owner: string, repo: string, title: string, body?: string, labels?: string[], assignees?: string[] }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.issues.create({ owner, repo, title, body, labels, assignees }) + return { + number: data.number, + title: data.title, + url: data.html_url, + state: data.state, + labels: data.labels.map(l => (typeof l === 'string' ? l : l.name)), + } +} + export const createIssue = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new issue in a GitHub repository', @@ -79,20 +96,22 @@ export const createIssue = (token: string, { needsApproval = true }: ToolOptions labels: z.array(z.string()).optional().describe('Labels to apply to the issue'), assignees: z.array(z.string()).optional().describe('GitHub usernames to assign to the issue'), }), - execute: async ({ owner, repo, title, body, labels, assignees }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.issues.create({ owner, repo, title, body, labels, assignees }) - return { - number: data.number, - title: data.title, - url: data.html_url, - state: data.state, - labels: data.labels.map(l => (typeof l === 'string' ? l : l.name)), - } - }, + execute: async args => createIssueStep({ token, ...args }), }) +async function addIssueCommentStep({ token, owner, repo, issueNumber, body }: { token: string, owner: string, repo: string, issueNumber: number, body: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: issueNumber, body }) + return { + id: data.id, + url: data.html_url, + body: data.body, + author: data.user?.login, + createdAt: data.created_at, + } +} + export const addIssueComment = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Add a comment to a GitHub issue', @@ -103,19 +122,27 @@ export const addIssueComment = (token: string, { needsApproval = true }: ToolOpt issueNumber: z.number().describe('Issue number'), body: z.string().describe('Comment text (supports Markdown)'), }), - execute: async ({ owner, repo, issueNumber, body }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: issueNumber, body }) - return { - id: data.id, - url: data.html_url, - body: data.body, - author: data.user?.login, - createdAt: data.created_at, - } - }, + execute: async args => addIssueCommentStep({ token, ...args }), + }) + +async function closeIssueStep({ token, owner, repo, issueNumber, stateReason }: { token: string, owner: string, repo: string, issueNumber: number, stateReason: 'completed' | 'not_planned' }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.issues.update({ + owner, + repo, + issue_number: issueNumber, + state: 'closed', + state_reason: stateReason, }) + return { + number: data.number, + title: data.title, + state: data.state, + url: data.html_url, + closedAt: data.closed_at, + } +} export const closeIssue = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ @@ -127,22 +154,5 @@ export const closeIssue = (token: string, { needsApproval = true }: ToolOptions issueNumber: z.number().describe('Issue number to close'), stateReason: z.enum(['completed', 'not_planned']).optional().default('completed').describe('Reason for closing'), }), - execute: async ({ owner, repo, issueNumber, stateReason }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.issues.update({ - owner, - repo, - issue_number: issueNumber, - state: 'closed', - state_reason: stateReason, - }) - return { - number: data.number, - title: data.title, - state: data.state, - url: data.html_url, - closedAt: data.closed_at, - } - }, + execute: async args => closeIssueStep({ token, ...args }), }) diff --git a/packages/github-tools/src/tools/pull-requests.ts b/packages/github-tools/src/tools/pull-requests.ts index 357a49b..56c84e5 100644 --- a/packages/github-tools/src/tools/pull-requests.ts +++ b/packages/github-tools/src/tools/pull-requests.ts @@ -3,6 +3,24 @@ import { z } from 'zod' import { createOctokit } from '../client' import type { ToolOptions } from '../types' +async function listPullRequestsStep({ token, owner, repo, state, perPage }: { token: string, owner: string, repo: string, state: 'open' | 'closed' | 'all', perPage: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.pulls.list({ owner, repo, state, per_page: perPage }) + return data.map(pr => ({ + number: pr.number, + title: pr.title, + state: pr.state, + url: pr.html_url, + author: pr.user?.login, + branch: pr.head.ref, + base: pr.base.ref, + draft: pr.draft, + createdAt: pr.created_at, + updatedAt: pr.updated_at, + })) +} + export const listPullRequests = (token: string) => tool({ description: 'List pull requests for a GitHub repository', @@ -12,25 +30,34 @@ export const listPullRequests = (token: string) => state: z.enum(['open', 'closed', 'all']).optional().default('open').describe('Filter by state'), perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), }), - execute: async ({ owner, repo, state, perPage }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.pulls.list({ owner, repo, state, per_page: perPage }) - return data.map(pr => ({ - number: pr.number, - title: pr.title, - state: pr.state, - url: pr.html_url, - author: pr.user?.login, - branch: pr.head.ref, - base: pr.base.ref, - draft: pr.draft, - createdAt: pr.created_at, - updatedAt: pr.updated_at, - })) - }, + execute: async args => listPullRequestsStep({ token, ...args }), }) +async function getPullRequestStep({ token, owner, repo, pullNumber }: { token: string, owner: string, repo: string, pullNumber: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.pulls.get({ owner, repo, pull_number: pullNumber }) + return { + number: data.number, + title: data.title, + body: data.body, + state: data.state, + url: data.html_url, + author: data.user?.login, + branch: data.head.ref, + base: data.base.ref, + draft: data.draft, + merged: data.merged, + mergeable: data.mergeable, + additions: data.additions, + deletions: data.deletions, + changedFiles: data.changed_files, + createdAt: data.created_at, + updatedAt: data.updated_at, + mergedAt: data.merged_at, + } +} + export const getPullRequest = (token: string) => tool({ description: 'Get detailed information about a specific pull request', @@ -39,32 +66,24 @@ export const getPullRequest = (token: string) => repo: z.string().describe('Repository name'), pullNumber: z.number().describe('Pull request number'), }), - execute: async ({ owner, repo, pullNumber }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.pulls.get({ owner, repo, pull_number: pullNumber }) - return { - number: data.number, - title: data.title, - body: data.body, - state: data.state, - url: data.html_url, - author: data.user?.login, - branch: data.head.ref, - base: data.base.ref, - draft: data.draft, - merged: data.merged, - mergeable: data.mergeable, - additions: data.additions, - deletions: data.deletions, - changedFiles: data.changed_files, - createdAt: data.created_at, - updatedAt: data.updated_at, - mergedAt: data.merged_at, - } - }, + execute: async args => getPullRequestStep({ token, ...args }), }) +async function createPullRequestStep({ token, owner, repo, title, body, head, base, draft }: { token: string, owner: string, repo: string, title: string, body?: string, head: string, base: string, draft: boolean }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.pulls.create({ owner, repo, title, body, head, base, draft }) + return { + number: data.number, + title: data.title, + url: data.html_url, + state: data.state, + draft: data.draft, + branch: data.head.ref, + base: data.base.ref, + } +} + export const createPullRequest = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new pull request in a GitHub repository', @@ -78,22 +97,27 @@ export const createPullRequest = (token: string, { needsApproval = true }: ToolO base: z.string().describe('Branch to merge into'), draft: z.boolean().optional().default(false).describe('Create as draft pull request'), }), - execute: async ({ owner, repo, title, body, head, base, draft }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.pulls.create({ owner, repo, title, body, head, base, draft }) - return { - number: data.number, - title: data.title, - url: data.html_url, - state: data.state, - draft: data.draft, - branch: data.head.ref, - base: data.base.ref, - } - }, + execute: async args => createPullRequestStep({ token, ...args }), }) +async function mergePullRequestStep({ token, owner, repo, pullNumber, commitTitle, commitMessage, mergeMethod }: { token: string, owner: string, repo: string, pullNumber: number, commitTitle?: string, commitMessage?: string, mergeMethod: 'merge' | 'squash' | 'rebase' }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.pulls.merge({ + owner, + repo, + pull_number: pullNumber, + commit_title: commitTitle, + commit_message: commitMessage, + merge_method: mergeMethod, + }) + return { + merged: data.merged, + message: data.message, + sha: data.sha, + } +} + export const mergePullRequest = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Merge a pull request', @@ -106,25 +130,22 @@ export const mergePullRequest = (token: string, { needsApproval = true }: ToolOp commitMessage: z.string().optional().describe('Extra detail to append to automatic commit message'), mergeMethod: z.enum(['merge', 'squash', 'rebase']).optional().default('merge').describe('Merge strategy'), }), - execute: async ({ owner, repo, pullNumber, commitTitle, commitMessage, mergeMethod }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.pulls.merge({ - owner, - repo, - pull_number: pullNumber, - commit_title: commitTitle, - commit_message: commitMessage, - merge_method: mergeMethod, - }) - return { - merged: data.merged, - message: data.message, - sha: data.sha, - } - }, + execute: async args => mergePullRequestStep({ token, ...args }), }) +async function addPullRequestCommentStep({ token, owner, repo, pullNumber, body }: { token: string, owner: string, repo: string, pullNumber: number, body: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: pullNumber, body }) + return { + id: data.id, + url: data.html_url, + body: data.body, + author: data.user?.login, + createdAt: data.created_at, + } +} + export const addPullRequestComment = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Add a comment to a pull request', @@ -135,16 +156,5 @@ export const addPullRequestComment = (token: string, { needsApproval = true }: T pullNumber: z.number().describe('Pull request number'), body: z.string().describe('Comment text (supports Markdown)'), }), - execute: async ({ owner, repo, pullNumber, body }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: pullNumber, body }) - return { - id: data.id, - url: data.html_url, - body: data.body, - author: data.user?.login, - createdAt: data.created_at, - } - }, + execute: async args => addPullRequestCommentStep({ token, ...args }), }) diff --git a/packages/github-tools/src/tools/repository.ts b/packages/github-tools/src/tools/repository.ts index d21f5a0..188afc9 100644 --- a/packages/github-tools/src/tools/repository.ts +++ b/packages/github-tools/src/tools/repository.ts @@ -3,6 +3,26 @@ import { z } from 'zod' import { createOctokit } from '../client' import type { ToolOptions } from '../types' +async function getRepositoryStep({ token, owner, repo }: { token: string, owner: string, repo: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.repos.get({ owner, repo }) + return { + name: data.name, + fullName: data.full_name, + description: data.description, + url: data.html_url, + defaultBranch: data.default_branch, + stars: data.stargazers_count, + forks: data.forks_count, + openIssues: data.open_issues_count, + language: data.language, + private: data.private, + createdAt: data.created_at, + updatedAt: data.updated_at, + } +} + export const getRepository = (token: string) => tool({ description: 'Get information about a GitHub repository including description, stars, forks, language, and default branch', @@ -10,27 +30,20 @@ export const getRepository = (token: string) => owner: z.string().describe('Repository owner (user or organization)'), repo: z.string().describe('Repository name'), }), - execute: async ({ owner, repo }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.repos.get({ owner, repo }) - return { - name: data.name, - fullName: data.full_name, - description: data.description, - url: data.html_url, - defaultBranch: data.default_branch, - stars: data.stargazers_count, - forks: data.forks_count, - openIssues: data.open_issues_count, - language: data.language, - private: data.private, - createdAt: data.created_at, - updatedAt: data.updated_at, - } - }, + execute: async args => getRepositoryStep({ token, ...args }), }) +async function listBranchesStep({ token, owner, repo, perPage }: { token: string, owner: string, repo: string, perPage: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.repos.listBranches({ owner, repo, per_page: perPage }) + return data.map(branch => ({ + name: branch.name, + sha: branch.commit.sha, + protected: branch.protected, + })) +} + export const listBranches = (token: string) => tool({ description: 'List branches in a GitHub repository', @@ -39,18 +52,29 @@ export const listBranches = (token: string) => repo: z.string().describe('Repository name'), perPage: z.number().optional().default(30).describe('Number of branches to return (max 100)'), }), - execute: async ({ owner, repo, perPage }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.repos.listBranches({ owner, repo, per_page: perPage }) - return data.map(branch => ({ - name: branch.name, - sha: branch.commit.sha, - protected: branch.protected, - })) - }, + execute: async args => listBranchesStep({ token, ...args }), }) +async function getFileContentStep({ token, owner, repo, path, ref }: { token: string, owner: string, repo: string, path: string, ref?: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.repos.getContent({ owner, repo, path, ref }) + if (Array.isArray(data)) { + return { type: 'directory', entries: data.map(e => ({ name: e.name, type: e.type, path: e.path })) } + } + if (data.type !== 'file') { + return { type: data.type, path: data.path } + } + const content = Buffer.from(data.content, 'base64').toString('utf-8') + return { + type: 'file', + path: data.path, + sha: data.sha, + size: data.size, + content, + } +} + export const getFileContent = (token: string) => tool({ description: 'Get the content of a file from a GitHub repository', @@ -60,27 +84,34 @@ export const getFileContent = (token: string) => path: z.string().describe('Path to the file in the repository'), ref: z.string().optional().describe('Branch, tag, or commit SHA (defaults to the default branch)'), }), - execute: async ({ owner, repo, path, ref }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.repos.getContent({ owner, repo, path, ref }) - if (Array.isArray(data)) { - return { type: 'directory', entries: data.map(e => ({ name: e.name, type: e.type, path: e.path })) } - } - if (data.type !== 'file') { - return { type: data.type, path: data.path } - } - const content = Buffer.from(data.content, 'base64').toString('utf-8') - return { - type: 'file', - path: data.path, - sha: data.sha, - size: data.size, - content, - } - }, + execute: async args => getFileContentStep({ token, ...args }), }) +async function createBranchStep({ token, owner, repo, branch, from }: { token: string, owner: string, repo: string, branch: string, from?: string }) { + "use step" + const octokit = createOctokit(token) + let sha = from + if (!sha || !sha.match(/^[0-9a-f]{40}$/i)) { + const { data: ref } = await octokit.rest.git.getRef({ + owner, + repo, + ref: `heads/${from || (await octokit.rest.repos.get({ owner, repo })).data.default_branch}`, + }) + sha = ref.object.sha + } + const { data } = await octokit.rest.git.createRef({ + owner, + repo, + ref: `refs/heads/${branch}`, + sha, + }) + return { + ref: data.ref, + sha: data.object.sha, + url: data.url, + } +} + export const createBranch = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new branch in a GitHub repository from an existing branch or commit SHA', @@ -91,31 +122,29 @@ export const createBranch = (token: string, { needsApproval = true }: ToolOption branch: z.string().describe('Name for the new branch'), from: z.string().optional().describe('Source branch name or commit SHA to branch from (defaults to the default branch)'), }), - execute: async ({ owner, repo, branch, from }) => { - "use step" - const octokit = createOctokit(token) - let sha = from - if (!sha || !sha.match(/^[0-9a-f]{40}$/i)) { - const { data: ref } = await octokit.rest.git.getRef({ - owner, - repo, - ref: `heads/${from || (await octokit.rest.repos.get({ owner, repo })).data.default_branch}`, - }) - sha = ref.object.sha - } - const { data } = await octokit.rest.git.createRef({ - owner, - repo, - ref: `refs/heads/${branch}`, - sha, - }) - return { - ref: data.ref, - sha: data.object.sha, - url: data.url, - } - }, + execute: async args => createBranchStep({ token, ...args }), + }) + +async function forkRepositoryStep({ token, owner, repo, organization, name }: { token: string, owner: string, repo: string, organization?: string, name?: string }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.repos.createFork({ + owner, + repo, + organization, + name, }) + return { + name: data.name, + fullName: data.full_name, + url: data.html_url, + cloneUrl: data.clone_url, + sshUrl: data.ssh_url, + defaultBranch: data.default_branch, + private: data.private, + parent: data.parent ? { fullName: data.parent.full_name, url: data.parent.html_url } : null, + } +} export const forkRepository = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ @@ -127,28 +156,38 @@ export const forkRepository = (token: string, { needsApproval = true }: ToolOpti organization: z.string().optional().describe('Organization to fork into (omit to fork to your personal account)'), name: z.string().optional().describe('Name for the forked repository (defaults to the original name)'), }), - execute: async ({ owner, repo, organization, name }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.repos.createFork({ - owner, - repo, - organization, - name, - }) - return { - name: data.name, - fullName: data.full_name, - url: data.html_url, - cloneUrl: data.clone_url, - sshUrl: data.ssh_url, - defaultBranch: data.default_branch, - private: data.private, - parent: data.parent ? { fullName: data.parent.full_name, url: data.parent.html_url } : null, - } - }, + execute: async args => forkRepositoryStep({ token, ...args }), }) +async function createRepositoryStep({ token, name, description, isPrivate, autoInit, gitignoreTemplate, licenseTemplate, org }: { token: string, name: string, description?: string, isPrivate: boolean, autoInit: boolean, gitignoreTemplate?: string, licenseTemplate?: string, org?: string }) { + "use step" + const octokit = createOctokit(token) + const params = { + name, + description, + private: isPrivate, + auto_init: autoInit, + gitignore_template: gitignoreTemplate, + license_template: licenseTemplate, + } + + const { data } = org + ? await octokit.rest.repos.createInOrg({ org, ...params }) + : await octokit.rest.repos.createForAuthenticatedUser(params) + + return { + name: data.name, + fullName: data.full_name, + description: data.description, + url: data.html_url, + cloneUrl: data.clone_url, + sshUrl: data.ssh_url, + defaultBranch: data.default_branch, + private: data.private, + createdAt: data.created_at, + } +} + export const createRepository = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Create a new GitHub repository for the authenticated user or a specified organization', @@ -162,35 +201,29 @@ export const createRepository = (token: string, { needsApproval = true }: ToolOp licenseTemplate: z.string().optional().describe('License keyword (e.g. "mit", "apache-2.0")'), org: z.string().optional().describe('Organization to create the repository in (omit for personal repo)'), }), - execute: async ({ name, description, isPrivate, autoInit, gitignoreTemplate, licenseTemplate, org }) => { - "use step" - const octokit = createOctokit(token) - const params = { - name, - description, - private: isPrivate, - auto_init: autoInit, - gitignore_template: gitignoreTemplate, - license_template: licenseTemplate, - } - - const { data } = org - ? await octokit.rest.repos.createInOrg({ org, ...params }) - : await octokit.rest.repos.createForAuthenticatedUser(params) - - return { - name: data.name, - fullName: data.full_name, - description: data.description, - url: data.html_url, - cloneUrl: data.clone_url, - sshUrl: data.ssh_url, - defaultBranch: data.default_branch, - private: data.private, - createdAt: data.created_at, - } - }, + execute: async args => createRepositoryStep({ token, ...args }), + }) + +async function createOrUpdateFileStep({ token, owner, repo, path, message, content, branch, sha }: { token: string, owner: string, repo: string, path: string, message: string, content: string, branch?: string, sha?: string }) { + "use step" + const octokit = createOctokit(token) + const encoded = Buffer.from(content).toString('base64') + const { data } = await octokit.rest.repos.createOrUpdateFileContents({ + owner, + repo, + path, + message, + content: encoded, + branch, + sha, }) + return { + path: data.content?.path, + sha: data.content?.sha, + commitSha: data.commit.sha, + commitUrl: data.commit.html_url, + } +} export const createOrUpdateFile = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ @@ -205,24 +238,5 @@ export const createOrUpdateFile = (token: string, { needsApproval = true }: Tool branch: z.string().optional().describe('Branch to commit to (defaults to the default branch)'), sha: z.string().optional().describe('SHA of the file being replaced (required when updating an existing file)'), }), - execute: async ({ owner, repo, path, message, content, branch, sha }) => { - "use step" - const octokit = createOctokit(token) - const encoded = Buffer.from(content).toString('base64') - const { data } = await octokit.rest.repos.createOrUpdateFileContents({ - owner, - repo, - path, - message, - content: encoded, - branch, - sha, - }) - return { - path: data.content?.path, - sha: data.content?.sha, - commitSha: data.commit.sha, - commitUrl: data.commit.html_url, - } - }, + execute: async args => createOrUpdateFileStep({ token, ...args }), }) diff --git a/packages/github-tools/src/tools/search.ts b/packages/github-tools/src/tools/search.ts index 317bea1..52e8077 100644 --- a/packages/github-tools/src/tools/search.ts +++ b/packages/github-tools/src/tools/search.ts @@ -2,6 +2,22 @@ import { tool } from 'ai' import { z } from 'zod' import { createOctokit } from '../client' +async function searchCodeStep({ token, query, perPage }: { token: string, query: string, perPage: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.search.code({ q: query, per_page: perPage }) + return { + totalCount: data.total_count, + items: data.items.map(item => ({ + name: item.name, + path: item.path, + url: item.html_url, + repository: item.repository.full_name, + sha: item.sha, + })), + } +} + export const searchCode = (token: string) => tool({ description: 'Search for code in GitHub repositories. Use qualifiers like "repo:owner/name" to scope the search.', @@ -9,23 +25,28 @@ export const searchCode = (token: string) => query: z.string().describe('Search query. Supports GitHub search qualifiers, e.g. "useState repo:facebook/react"'), perPage: z.number().optional().default(10).describe('Number of results to return (max 30)'), }), - execute: async ({ query, perPage }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.search.code({ q: query, per_page: perPage }) - return { - totalCount: data.total_count, - items: data.items.map(item => ({ - name: item.name, - path: item.path, - url: item.html_url, - repository: item.repository.full_name, - sha: item.sha, - })), - } - }, + execute: async args => searchCodeStep({ token, ...args }), }) +async function searchRepositoriesStep({ token, query, perPage, sort, order }: { token: string, query: string, perPage: number, sort?: 'stars' | 'forks' | 'help-wanted-issues' | 'updated', order: 'asc' | 'desc' }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.search.repos({ q: query, per_page: perPage, sort, order }) + return { + totalCount: data.total_count, + items: data.items.map(repo => ({ + name: repo.name, + fullName: repo.full_name, + description: repo.description, + url: repo.html_url, + stars: repo.stargazers_count, + forks: repo.forks_count, + language: repo.language, + topics: repo.topics, + })), + } +} + export const searchRepositories = (token: string) => tool({ description: 'Search for GitHub repositories by keyword, topic, language, or other qualifiers', @@ -35,22 +56,5 @@ export const searchRepositories = (token: string) => sort: z.enum(['stars', 'forks', 'help-wanted-issues', 'updated']).optional().describe('Sort field'), order: z.enum(['asc', 'desc']).optional().default('desc').describe('Sort order'), }), - execute: async ({ query, perPage, sort, order }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.search.repos({ q: query, per_page: perPage, sort, order }) - return { - totalCount: data.total_count, - items: data.items.map(repo => ({ - name: repo.name, - fullName: repo.full_name, - description: repo.description, - url: repo.html_url, - stars: repo.stargazers_count, - forks: repo.forks_count, - language: repo.language, - topics: repo.topics, - })), - } - }, + execute: async args => searchRepositoriesStep({ token, ...args }), }) diff --git a/packages/github-tools/src/tools/workflows.ts b/packages/github-tools/src/tools/workflows.ts index 8ccf388..1bb3524 100644 --- a/packages/github-tools/src/tools/workflows.ts +++ b/packages/github-tools/src/tools/workflows.ts @@ -3,6 +3,24 @@ import { z } from 'zod' import { createOctokit } from '../client' import type { ToolOptions } from '../types' +async function listWorkflowsStep({ token, owner, repo, perPage, page }: { token: string, owner: string, repo: string, perPage: number, page: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.actions.listRepoWorkflows({ owner, repo, per_page: perPage, page }) + return { + totalCount: data.total_count, + workflows: data.workflows.map(wf => ({ + id: wf.id, + name: wf.name, + path: wf.path, + state: wf.state, + url: wf.html_url, + createdAt: wf.created_at, + updatedAt: wf.updated_at, + })), + } +} + export const listWorkflows = (token: string) => tool({ description: 'List GitHub Actions workflows in a repository', @@ -12,25 +30,35 @@ export const listWorkflows = (token: string) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), page: z.number().optional().default(1).describe('Page number for pagination'), }), - execute: async ({ owner, repo, perPage, page }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.actions.listRepoWorkflows({ owner, repo, per_page: perPage, page }) - return { - totalCount: data.total_count, - workflows: data.workflows.map(wf => ({ - id: wf.id, - name: wf.name, - path: wf.path, - state: wf.state, - url: wf.html_url, - createdAt: wf.created_at, - updatedAt: wf.updated_at, - })), - } - }, + execute: async args => listWorkflowsStep({ token, ...args }), }) +async function listWorkflowRunsStep({ token, owner, repo, workflowId, branch, event, status, perPage, page }: { token: string, owner: string, repo: string, workflowId?: string | number, branch?: string, event?: string, status?: string, perPage: number, page: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = workflowId + ? await octokit.rest.actions.listWorkflowRuns({ owner, repo, workflow_id: workflowId, per_page: perPage, page, ...branch && { branch }, ...event && { event }, ...status && { status } }) + : await octokit.rest.actions.listWorkflowRunsForRepo({ owner, repo, per_page: perPage, page, ...branch && { branch }, ...event && { event }, ...status && { status } }) + + return { + totalCount: data.total_count, + runs: data.workflow_runs.map(run => ({ + id: run.id, + name: run.name, + status: run.status, + conclusion: run.conclusion, + branch: run.head_branch, + event: run.event, + url: run.html_url, + actor: run.actor?.login, + createdAt: run.created_at, + updatedAt: run.updated_at, + runNumber: run.run_number, + runAttempt: run.run_attempt, + })), + } +} + export const listWorkflowRuns = (token: string) => tool({ description: 'List workflow runs for a repository, optionally filtered by workflow, branch, status, or event', @@ -44,38 +72,31 @@ export const listWorkflowRuns = (token: string) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), page: z.number().optional().default(1).describe('Page number for pagination'), }), - execute: async ({ owner, repo, workflowId, branch, event, status, perPage, page }) => { - "use step" - const octokit = createOctokit(token) - const params: Record = { owner, repo, per_page: perPage, page } - if (branch) params.branch = branch - if (event) params.event = event - if (status) params.status = status - - const { data } = workflowId - ? await octokit.rest.actions.listWorkflowRuns({ owner, repo, workflow_id: workflowId, per_page: perPage, page, ...branch && { branch }, ...event && { event }, ...status && { status } }) - : await octokit.rest.actions.listWorkflowRunsForRepo({ owner, repo, per_page: perPage, page, ...branch && { branch }, ...event && { event }, ...status && { status } }) - - return { - totalCount: data.total_count, - runs: data.workflow_runs.map(run => ({ - id: run.id, - name: run.name, - status: run.status, - conclusion: run.conclusion, - branch: run.head_branch, - event: run.event, - url: run.html_url, - actor: run.actor?.login, - createdAt: run.created_at, - updatedAt: run.updated_at, - runNumber: run.run_number, - runAttempt: run.run_attempt, - })), - } - }, + execute: async args => listWorkflowRunsStep({ token, ...args }), }) +async function getWorkflowRunStep({ token, owner, repo, runId }: { token: string, owner: string, repo: string, runId: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.actions.getWorkflowRun({ owner, repo, run_id: runId }) + return { + id: data.id, + name: data.name, + status: data.status, + conclusion: data.conclusion, + branch: data.head_branch, + sha: data.head_sha, + event: data.event, + url: data.html_url, + actor: data.actor?.login, + runNumber: data.run_number, + runAttempt: data.run_attempt, + createdAt: data.created_at, + updatedAt: data.updated_at, + runStartedAt: data.run_started_at, + } +} + export const getWorkflowRun = (token: string) => tool({ description: 'Get details of a specific workflow run including status, timing, and trigger info', @@ -84,29 +105,36 @@ export const getWorkflowRun = (token: string) => repo: z.string().describe('Repository name'), runId: z.number().describe('Workflow run ID'), }), - execute: async ({ owner, repo, runId }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.actions.getWorkflowRun({ owner, repo, run_id: runId }) - return { - id: data.id, - name: data.name, - status: data.status, - conclusion: data.conclusion, - branch: data.head_branch, - sha: data.head_sha, - event: data.event, - url: data.html_url, - actor: data.actor?.login, - runNumber: data.run_number, - runAttempt: data.run_attempt, - createdAt: data.created_at, - updatedAt: data.updated_at, - runStartedAt: data.run_started_at, - } - }, + execute: async args => getWorkflowRunStep({ token, ...args }), }) +async function listWorkflowJobsStep({ token, owner, repo, runId, filter, perPage, page }: { token: string, owner: string, repo: string, runId: number, filter: 'latest' | 'all', perPage: number, page: number }) { + "use step" + const octokit = createOctokit(token) + const { data } = await octokit.rest.actions.listJobsForWorkflowRun({ owner, repo, run_id: runId, filter, per_page: perPage, page }) + return { + totalCount: data.total_count, + jobs: data.jobs.map(job => ({ + id: job.id, + name: job.name, + status: job.status, + conclusion: job.conclusion, + url: job.html_url, + startedAt: job.started_at, + completedAt: job.completed_at, + runnerName: job.runner_name, + steps: job.steps?.map(step => ({ + name: step.name, + status: step.status, + conclusion: step.conclusion, + number: step.number, + startedAt: step.started_at, + completedAt: step.completed_at, + })), + })), + } +} + export const listWorkflowJobs = (token: string) => tool({ description: 'List jobs for a workflow run, including step-level status and timing', @@ -118,33 +146,21 @@ export const listWorkflowJobs = (token: string) => perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'), page: z.number().optional().default(1).describe('Page number for pagination'), }), - execute: async ({ owner, repo, runId, filter, perPage, page }) => { - "use step" - const octokit = createOctokit(token) - const { data } = await octokit.rest.actions.listJobsForWorkflowRun({ owner, repo, run_id: runId, filter, per_page: perPage, page }) - return { - totalCount: data.total_count, - jobs: data.jobs.map(job => ({ - id: job.id, - name: job.name, - status: job.status, - conclusion: job.conclusion, - url: job.html_url, - startedAt: job.started_at, - completedAt: job.completed_at, - runnerName: job.runner_name, - steps: job.steps?.map(step => ({ - name: step.name, - status: step.status, - conclusion: step.conclusion, - number: step.number, - startedAt: step.started_at, - completedAt: step.completed_at, - })), - })), - } - }, + execute: async args => listWorkflowJobsStep({ token, ...args }), + }) + +async function triggerWorkflowStep({ token, owner, repo, workflowId, ref, inputs }: { token: string, owner: string, repo: string, workflowId: string | number, ref: string, inputs?: Record }) { + "use step" + const octokit = createOctokit(token) + await octokit.rest.actions.createWorkflowDispatch({ + owner, + repo, + workflow_id: workflowId, + ref, + inputs, }) + return { triggered: true, workflowId, ref } +} export const triggerWorkflow = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ @@ -157,20 +173,16 @@ export const triggerWorkflow = (token: string, { needsApproval = true }: ToolOpt ref: z.string().describe('Git ref (branch or tag) to run the workflow on'), inputs: z.record(z.string(), z.string()).optional().describe('Input parameters defined in the workflow_dispatch trigger'), }), - execute: async ({ owner, repo, workflowId, ref, inputs }) => { - "use step" - const octokit = createOctokit(token) - await octokit.rest.actions.createWorkflowDispatch({ - owner, - repo, - workflow_id: workflowId, - ref, - inputs, - }) - return { triggered: true, workflowId, ref } - }, + execute: async args => triggerWorkflowStep({ token, ...args }), }) +async function cancelWorkflowRunStep({ token, owner, repo, runId }: { token: string, owner: string, repo: string, runId: number }) { + "use step" + const octokit = createOctokit(token) + await octokit.rest.actions.cancelWorkflowRun({ owner, repo, run_id: runId }) + return { cancelled: true, runId } +} + export const cancelWorkflowRun = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Cancel an in-progress workflow run', @@ -180,14 +192,20 @@ export const cancelWorkflowRun = (token: string, { needsApproval = true }: ToolO repo: z.string().describe('Repository name'), runId: z.number().describe('Workflow run ID to cancel'), }), - execute: async ({ owner, repo, runId }) => { - "use step" - const octokit = createOctokit(token) - await octokit.rest.actions.cancelWorkflowRun({ owner, repo, run_id: runId }) - return { cancelled: true, runId } - }, + execute: async args => cancelWorkflowRunStep({ token, ...args }), }) +async function rerunWorkflowRunStep({ token, owner, repo, runId, onlyFailedJobs }: { token: string, owner: string, repo: string, runId: number, onlyFailedJobs: boolean }) { + "use step" + const octokit = createOctokit(token) + if (onlyFailedJobs) { + await octokit.rest.actions.reRunWorkflowFailedJobs({ owner, repo, run_id: runId }) + } else { + await octokit.rest.actions.reRunWorkflow({ owner, repo, run_id: runId }) + } + return { rerun: true, runId, onlyFailedJobs } +} + export const rerunWorkflowRun = (token: string, { needsApproval = true }: ToolOptions = {}) => tool({ description: 'Re-run a workflow run, optionally only the failed jobs', @@ -198,14 +216,5 @@ export const rerunWorkflowRun = (token: string, { needsApproval = true }: ToolOp runId: z.number().describe('Workflow run ID to re-run'), onlyFailedJobs: z.boolean().optional().default(false).describe('Only re-run failed jobs instead of the entire workflow'), }), - execute: async ({ owner, repo, runId, onlyFailedJobs }) => { - "use step" - const octokit = createOctokit(token) - if (onlyFailedJobs) { - await octokit.rest.actions.reRunWorkflowFailedJobs({ owner, repo, run_id: runId }) - } else { - await octokit.rest.actions.reRunWorkflow({ owner, repo, run_id: runId }) - } - return { rerun: true, runId, onlyFailedJobs } - }, + execute: async args => rerunWorkflowRunStep({ token, ...args }), }) diff --git a/packages/github-tools/src/workflow.ts b/packages/github-tools/src/workflow.ts index 5696d43..86a51c3 100644 --- a/packages/github-tools/src/workflow.ts +++ b/packages/github-tools/src/workflow.ts @@ -1,11 +1,11 @@ import { DurableAgent } from '@workflow/ai/agent' -import type { LanguageModel } from 'ai' +import type { CompatibleLanguageModel } from '@workflow/ai/agent' import { createGithubTools } from './index' import { resolveInstructions } from './agents' import type { GithubToolPreset, ApprovalConfig } from './index' export type CreateDurableGithubAgentOptions = { - model: string | LanguageModel + model: string | CompatibleLanguageModel | (() => Promise) /** * GitHub personal access token. * Falls back to `process.env.GITHUB_TOKEN` when omitted. @@ -26,6 +26,10 @@ export type CreateDurableGithubAgentOptions = { * Each tool call runs as a durable step with automatic retries and observability. * Must be used inside a `"use workflow"` function. * + * **Note:** `requireApproval` is accepted for forward-compatibility but is currently + * ignored by `DurableAgent` — the Workflow SDK does not yet support interactive tool + * approval. All tools execute immediately without user confirmation. + * * @example * ```ts * import { createDurableGithubAgent } from '@github-tools/sdk/workflow' @@ -55,9 +59,13 @@ export function createDurableGithubAgent({ }: CreateDurableGithubAgentOptions) { const tools = createGithubTools({ token, requireApproval, preset }) + const resolvedModel = typeof model === 'string' || typeof model === 'function' + ? model + : () => Promise.resolve(model) + return new DurableAgent({ ...agentOptions, - model, + model: resolvedModel, tools, instructions: resolveInstructions({ preset, instructions, additionalInstructions }), })