diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dd6ea70..2ffe6aed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,21 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and [中文版](CHANGELOG.zh.md) · [README](README.md) · [Contributing](CONTRIBUTING.md) +## [2.0.0] - 2026-09-22 + +### Added + +- **Native MCP registration** — Added `bl mcp connect` and `bl mcp disconnect` to add or remove Bailian MCP servers in Agent-native configurations: + - Supports `streamable-http` and SSE, targeting an individual Agent or all installed Agents with `--agent all`. + - Supports Codex, Claude Code, Cursor, Qoder, Qoder Work, QwenWork, Qwen Code, Gemini, OpenCode, OpenClaw, DeepSeek Harness, ZCode, and WorkBuddy. + - Never overwrites unmanaged entries and preserves registrations modified by users during removal. +- **Broader Skill delivery** — Skill installation and updates now support WorkBuddy, Trae CLI, and DeepSeek DSH through their global Skill directories. + +### Fixed + +- **Skill operation previews** — `bl skill init`, `add`, `update`, and `remove` now honor `--dry-run`, showing the planned Skills, Agents, and target paths without writing. Invalid requests retain the same failure status as real execution. +- **Safer Skill cleanup** — `bl skill remove` previews and executions now use the same managed-link discovery scope, recognize historical managed links, and recheck targets immediately before deletion to avoid removing changed or unmanaged content. + ## [1.28.0] - 2026-09-20 ### Added diff --git a/CHANGELOG.zh.md b/CHANGELOG.zh.md index 9da2dc10..178d27e4 100644 --- a/CHANGELOG.zh.md +++ b/CHANGELOG.zh.md @@ -6,6 +6,21 @@ [English](CHANGELOG.md) · [README](README.zh.md) · [参与贡献](CONTRIBUTING.zh.md) +## [2.0.0] - 2026-09-22 + +### 新增 + +- **原生 MCP 注册** —— 新增 `bl mcp connect` 和 `bl mcp disconnect`,支持在 Agent 原生配置中接入或移除百炼 MCP 服务: + - 支持 `streamable-http` 与 SSE,可指定单个 Agent 或使用 `--agent all`。 + - 支持 Codex、Claude Code、Cursor、Qoder、Qoder Work、QwenWork、Qwen Code、Gemini、OpenCode、OpenClaw、DeepSeek Harness、ZCode 和 WorkBuddy。 + - 不会覆盖非 CLI 管理的同名配置;移除时会保留已被用户修改的注册项。 +- **扩展 Skill 分发范围** —— Skill 安装和更新新增支持 WorkBuddy、Trae CLI 与 DeepSeek DSH,并使用各自的全局 Skill 目录。 + +### 修复 + +- **Skill 操作预览** —— `bl skill init`、`add`、`update` 和 `remove` 现在会正确响应 `--dry-run`,只读展示计划操作的 Skill、Agent 和目标路径;无效请求的失败状态与实际执行保持一致。 +- **Skill 清理安全性** —— `bl skill remove` 的预览与实际执行现在使用相同的托管链接发现范围,可识别历史托管链接,并在删除前重新校验目标,避免误删已变化或不再由 CLI 管理的内容。 + ## [1.28.0] - 2026-09-20 ### 新增 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0d25145a..dd8c7cf5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Developer guide for `bailian-cli` — the official CLI for Aliyun Model Studio ( ## Prerequisites -- Node.js ≥ 22.12 (required for developing this repo) +- Node.js ^22.18 or >=24.11 (required for developing this repo) - End users installing the published CLI only need Node.js >= 18.17 - pnpm 10.33.2 (`npm i -g pnpm@10.33.2`) - A DashScope API key for running e2e tests diff --git a/CONTRIBUTING.zh.md b/CONTRIBUTING.zh.md index 7dad8b59..87fae184 100644 --- a/CONTRIBUTING.zh.md +++ b/CONTRIBUTING.zh.md @@ -6,7 +6,7 @@ ## 环境要求 -- 参与本仓库开发:Node.js ≥ 22.12 +- 参与本仓库开发:Node.js ^22.18 或 >=24.11 - 仅安装/使用已发布的 CLI:Node.js >= 18.17 - pnpm 10.33.2(`npm i -g pnpm@10.33.2`) - 跑 e2e 需要一个百炼 API Key diff --git a/README.md b/README.md index fe1550a2..b951ab9b 100644 --- a/README.md +++ b/README.md @@ -26,11 +26,12 @@ _Built for AI Agents. Every command works as a structured tool call._ - **Model generation** — Full-modality generation across text, image, video, and speech, with editing and reference-based generation - **Asset understanding** — Parse and ask questions about images, documents, audio, and long videos - **App orchestration** — Call Managed Agents, agents, and workflows published on Aliyun Model Studio, wired to knowledge bases, memory, web search, and MCP tools +- **Native MCP setup** — Register Bailian MCP servers in Codex, Claude Code, Cursor, Qoder, Qoder Work, QwenWork (千问办公), Qwen Code, or Gemini CLI with channel attribution preserved - **Training & deployment** — Validate and upload datasets, fine-tune models, deploy dedicated models as endpoints - **Account operations** — Login, UI-based configuration, model marketplace, usage and quota, rate-limit increases, team seat management - **Plan onboarding** — Connect subscription plans such as Token Plan to the CLI and common coding agents in one step -> **Note:** App orchestration, training & deployment, account operations, and plan onboarding are currently available only to China site (aliyun.com) account holders and are not yet supported for international / global site accounts. +> **Note:** App orchestration, native MCP setup, training & deployment, account operations, and plan onboarding are currently available only to China site (aliyun.com) account holders and are not yet supported for international / global site accounts. ## Showcase 1: A Cinematic Short Film from One Sentence diff --git a/README.zh.md b/README.zh.md index e64a3da4..93605443 100644 --- a/README.zh.md +++ b/README.zh.md @@ -25,11 +25,12 @@ _专为 AI Agent 打造,每个命令均可作为结构化工具调用。_ - **模型生成** — 文本、图像、视频、语音全模态生成,支持编辑与参考生成 - **素材理解** — 图像、文档、音频、长视频的解析与问答 - **应用编排** — 调用百炼已发布的 Managed Agent、智能体和工作流,接入知识库、记忆库、联网搜索与 MCP 工具 +- **原生 MCP 接入** — 将百炼 MCP 服务注册到 Codex、Claude Code、Cursor、Qoder、Qoder Work、千问办公(QwenWork)、Qwen Code 或 Gemini CLI,并保留渠道归因 - **模型训推** — 数据集校验上传、模型精调、专属模型部署上线 - **账号运维** — 授权登录、界面化配置、模型市场、用量与额度、限流提额、团队席位管理 - **套餐接入** — 支持 Token Plan 等订阅计划一键接到 CLI 和常见 Coding Agent -> **注意:** 应用编排、模型训推、账号运维和套餐接入目前仅支持中国站(aliyun.com)账号,暂不支持国际站 / 全球站账号。 +> **注意:** 应用编排、原生 MCP 接入、模型训推、账号运维和套餐接入目前仅支持中国站(aliyun.com)账号,暂不支持国际站 / 全球站账号。 ## 示例 1:一句话生成一部电影短片 diff --git a/docs/agents/lint-toolchain.md b/docs/agents/lint-toolchain.md index e64ba7ae..e4dfb5c5 100644 --- a/docs/agents/lint-toolchain.md +++ b/docs/agents/lint-toolchain.md @@ -12,7 +12,7 @@ ### A. 版本一致性 -- [ ] 发布包(`cli` 等)的 `engines.node` 与 README 的 Node.js 徽章一致;根/e2e 开发要求(`>=22.12`)与 CONTRIBUTING 一致 +- [ ] 发布包(`cli` 等)的 `engines.node` 与 README 的 Node.js 徽章一致;根/e2e 开发要求(`^22.18 || >=24.11`)与 CONTRIBUTING 一致 - [ ] `pnpm-lock.yaml` 同步生成(运行 `pnpm install`) - [ ] 各源码包 `tsconfig.json`(根 + core + runtime + commands + cli + kscli)的 target / module 设置一致 diff --git a/docs/agents/telemetry-change.md b/docs/agents/telemetry-change.md index c69e1d2f..600c8302 100644 --- a/docs/agents/telemetry-change.md +++ b/docs/agents/telemetry-change.md @@ -27,20 +27,20 @@ ### 1. 三套鉴权与埋点标识 -| 命令声明 | 凭证 / 请求域 | 主要请求出口 | 后端埋点标识 | 前端埋点标识(AEM) | -| ----------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------ | -| `auth: "apiKey"` | API Key;DashScope / OpenAI-compatible 模型域 | `Client.request/requestJson`、`McpClient`、Managed Agent instrumented fetch、上传策略 | 有:`User-Agent`、`x-dashscope-source-config` | 有:`pid=bailian-cli-node`、`authMethod=apiKey` | -| `auth: "console"` | Console access token;Bailian Console Gateway | `callConsoleGateway()` → `/cli/api.json` | 有:Console Gateway 后端直接标识 | 有:`pid=bailian-cli-node`、`authMethod=console` | -| `auth: "openapi"` | AccessKey ID/Secret,可选 STS token;阿里云 OpenAPI | `Client.openApiJson()` | 有:`x-dashscope-source-config` | 有:`pid=bailian-cli-node`、`authMethod=openapi` | -| `auth: "none"` | 无凭证域 | 本地逻辑或命令自行管理的登录/配置流程 | 无 | 有:`pid=bailian-cli-node`、`authMethod=none` | +| 命令声明 | 凭证 / 请求域 | 主要请求出口 | 后端埋点标识 | 前端埋点标识(AEM) | +| ----------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------ | +| `auth: "apiKey"` | API Key;DashScope / OpenAI-compatible 模型域 | `Client.request/requestJson`、`McpClient`、Managed Agent instrumented fetch、上传策略 | 有:`User-Agent`、`x-dashscope-source-config`、`X-Dashscope-Service: bailian-cli` | 有:`pid=bailian-cli-node`、`authMethod=apiKey` | +| `auth: "console"` | Console access token;Bailian Console Gateway | `callConsoleGateway()` → `/cli/api.json` | 有:Console Gateway 后端直接标识 | 有:`pid=bailian-cli-node`、`authMethod=console` | +| `auth: "openapi"` | AccessKey ID/Secret,可选 STS token;阿里云 OpenAPI | `Client.openApiJson()` | 有:`x-dashscope-source-config`、`X-Dashscope-Service: bailian-cli` | 有:`pid=bailian-cli-node`、`authMethod=openapi` | +| `auth: "none"` | 无凭证域 | 本地逻辑或命令自行管理的登录/配置流程 | 无 | 有:`pid=bailian-cli-node`、`authMethod=none` | `authMethod` 记录的是命令声明的鉴权域,不是凭证来源。它不会区分 API Key 来自 flag、env 还是 config。 鉴权域是命令的准入门槛和主请求域,不保证命令内部只有一种网络出口;例如部分 `apiKey` 命令也可能读取匿名 Console 公共目录,Managed Agent 还可能访问其他 provider。 表中的后端埋点按该鉴权域的主要业务请求填写: -- Managed Agent 的 `User-Agent` 对所有 SDK 请求注入;`x-dashscope-source-config` 仅对阿里云 host 注入 -- DashScope 上传策略 `getPolicy` 只有 `x-dashscope-source-config`,没有显式 CLI `User-Agent` +- Managed Agent 的 `User-Agent` 对所有 SDK 请求注入;`x-dashscope-source-config` 与 `X-Dashscope-Service` 仅对阿里云 host 注入 +- DashScope 上传策略 `getPolicy` 走 `trackingHeaders()`(含 source-config 与 `X-Dashscope-Service`),没有显式 CLI `User-Agent` - Console Gateway 用户数据由后端直接区分,不依赖 `x-dashscope-source-config`;AEM 的 `authMethod=console` 是独立的命令侧统计 - OpenAPI 的 ACS 签名头,以及 Console Gateway 的 `product`、`action`、`api` 是鉴权或路由字段,不计为埋点标识 @@ -63,6 +63,7 @@ - `t3` 取产品 `identity.version`,由产品入口的 `package.json` 注入 - `channel` 与 `t1` 是当前固定口径 - `User-Agent` 是独立标识:`bl` 为 `bailian-cli/`,`kscli` 为 `knowledge-studio-cli/` +- `X-Dashscope-Service: bailian-cli` 与 source-config 一起由 `trackingHeaders()` 注入;凡走该函数的百炼 / DashScope 请求(含 MCP 注册与 JSON-RPC)都会带上。OSS、结果文件下载、npm / Skill 仍不发送。 source-config 只用于百炼 / DashScope API 侧消费,不发送到通用网络传输: diff --git a/package.json b/package.json index a120ae71..23f2fb7a 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "vite-plus": "catalog:" }, "engines": { - "node": ">=22.12.0" + "node": "^22.18.0 || >=24.11.0" }, "packageManager": "pnpm@10.33.2" } diff --git a/packages/cli/README.md b/packages/cli/README.md index fe1550a2..b951ab9b 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -26,11 +26,12 @@ _Built for AI Agents. Every command works as a structured tool call._ - **Model generation** — Full-modality generation across text, image, video, and speech, with editing and reference-based generation - **Asset understanding** — Parse and ask questions about images, documents, audio, and long videos - **App orchestration** — Call Managed Agents, agents, and workflows published on Aliyun Model Studio, wired to knowledge bases, memory, web search, and MCP tools +- **Native MCP setup** — Register Bailian MCP servers in Codex, Claude Code, Cursor, Qoder, Qoder Work, QwenWork (千问办公), Qwen Code, or Gemini CLI with channel attribution preserved - **Training & deployment** — Validate and upload datasets, fine-tune models, deploy dedicated models as endpoints - **Account operations** — Login, UI-based configuration, model marketplace, usage and quota, rate-limit increases, team seat management - **Plan onboarding** — Connect subscription plans such as Token Plan to the CLI and common coding agents in one step -> **Note:** App orchestration, training & deployment, account operations, and plan onboarding are currently available only to China site (aliyun.com) account holders and are not yet supported for international / global site accounts. +> **Note:** App orchestration, native MCP setup, training & deployment, account operations, and plan onboarding are currently available only to China site (aliyun.com) account holders and are not yet supported for international / global site accounts. ## Showcase 1: A Cinematic Short Film from One Sentence diff --git a/packages/cli/README.zh.md b/packages/cli/README.zh.md index e64a3da4..93605443 100644 --- a/packages/cli/README.zh.md +++ b/packages/cli/README.zh.md @@ -25,11 +25,12 @@ _专为 AI Agent 打造,每个命令均可作为结构化工具调用。_ - **模型生成** — 文本、图像、视频、语音全模态生成,支持编辑与参考生成 - **素材理解** — 图像、文档、音频、长视频的解析与问答 - **应用编排** — 调用百炼已发布的 Managed Agent、智能体和工作流,接入知识库、记忆库、联网搜索与 MCP 工具 +- **原生 MCP 接入** — 将百炼 MCP 服务注册到 Codex、Claude Code、Cursor、Qoder、Qoder Work、千问办公(QwenWork)、Qwen Code 或 Gemini CLI,并保留渠道归因 - **模型训推** — 数据集校验上传、模型精调、专属模型部署上线 - **账号运维** — 授权登录、界面化配置、模型市场、用量与额度、限流提额、团队席位管理 - **套餐接入** — 支持 Token Plan 等订阅计划一键接到 CLI 和常见 Coding Agent -> **注意:** 应用编排、模型训推、账号运维和套餐接入目前仅支持中国站(aliyun.com)账号,暂不支持国际站 / 全球站账号。 +> **注意:** 应用编排、原生 MCP 接入、模型训推、账号运维和套餐接入目前仅支持中国站(aliyun.com)账号,暂不支持国际站 / 全球站账号。 ## 示例 1:一句话生成一部电影短片 diff --git a/packages/cli/package.json b/packages/cli/package.json index 9a1051df..c03cc6d0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "bailian-cli", - "version": "1.28.0", + "version": "2.0.0", "description": "CLI for Aliyun Model Studio (DashScope) AI Platform.", "keywords": [ "agent", @@ -65,7 +65,7 @@ "e2e": "workspace:*", "typescript": "^6.0.2", "undici": "catalog:", - "vite-plus": "0.1.22", + "vite-plus": "catalog:", "yaml": "catalog:" }, "engines": { diff --git a/packages/cli/src/commands.ts b/packages/cli/src/commands.ts index 9a21bf5d..b8a86c11 100644 --- a/packages/cli/src/commands.ts +++ b/packages/cli/src/commands.ts @@ -65,6 +65,8 @@ import { knowledgeCollectionGet, knowledgeDocImportOss, mcpCall, + mcpConnect, + mcpDisconnect, mcpList, mcpTools, searchWeb, @@ -339,6 +341,8 @@ export const commands: Record = { "knowledge file get": knowledgeFileGet, "knowledge file delete": knowledgeFileDelete, "mcp call": mcpCall, + "mcp connect": mcpConnect, + "mcp disconnect": mcpDisconnect, "mcp list": mcpList, "mcp tools": mcpTools, "search web": searchWeb, diff --git a/packages/cli/vite.config.ts b/packages/cli/vite.config.ts index dc315e34..5e967ec2 100644 --- a/packages/cli/vite.config.ts +++ b/packages/cli/vite.config.ts @@ -17,9 +17,7 @@ export default defineConfig({ outputOptions: { codeSplitting: false, }, - dts: { - tsgo: true, - }, + dts: true, exports: true, }, lint: { diff --git a/packages/commands/package.json b/packages/commands/package.json index cd1bfc0c..706d9908 100644 --- a/packages/commands/package.json +++ b/packages/commands/package.json @@ -1,6 +1,6 @@ { "name": "bailian-cli-commands", - "version": "1.28.0", + "version": "2.0.0", "description": "Command library for bailian-cli products (knowledge, memory, media, …). See https://www.npmjs.com/package/bailian-cli for usage.", "homepage": "https://bailian.console.aliyun.com/cli", "bugs": { @@ -26,11 +26,11 @@ "./package.json": "./package.json" }, "publishConfig": { - "access": "public", "exports": { ".": "./dist/index.mjs", "./package.json": "./package.json" }, + "access": "public", "registry": "https://registry.npmjs.org/" }, "scripts": { @@ -53,7 +53,7 @@ "@typescript/native-preview": "7.0.0-dev.20260328.1", "e2e": "workspace:*", "typescript": "^6.0.2", - "vite-plus": "0.1.22" + "vite-plus": "catalog:" }, "engines": { "node": ">=18.17.0" diff --git a/packages/commands/src/commands/config/inventory.ts b/packages/commands/src/commands/config/inventory.ts index b5a17757..3c771d2b 100644 --- a/packages/commands/src/commands/config/inventory.ts +++ b/packages/commands/src/commands/config/inventory.ts @@ -19,6 +19,7 @@ import { import { inflateRawSync } from "node:zlib"; import yaml from "yaml"; import { parse as parseToml } from "smol-toml"; +import { qwenworkMcpPath, workbuddyMcpPaths } from "../mcp/agent-config.ts"; /** * Where an item comes from. Everything discovered on disk today is `local`; @@ -397,7 +398,9 @@ function transportOf(entry: Record): { const url = typeof entry.url === "string" ? entry.url : undefined; if (url) { const type = typeof entry.type === "string" ? entry.type.toLowerCase() : ""; - return { transport: type === "sse" ? "sse" : "http", detail: url }; + const transportField = typeof entry.transport === "string" ? entry.transport.toLowerCase() : ""; + if (type === "sse" || transportField === "sse") return { transport: "sse", detail: url }; + return { transport: "http", detail: url }; } return { transport: "unknown", detail: "" }; } @@ -453,22 +456,65 @@ export function listMcpServers(home: string = homedir()): McpServerInfo[] { const opencode = readJsonSafe(join(home, ".config", "opencode", "opencode.json")); if (opencode) collectMcpMap(opencode.mcp, "opencode", "global", out, true); - // Cursor, Windsurf, Gemini, QoderWork, OpenClaw, Claude Desktop: all JSON with - // a top-level `mcpServers` map (Claude/Cursor convention). + // Cursor, Windsurf, Gemini, Qoder, Qoder Work, QwenWork (千问办公), OpenClaw, + // Claude Desktop: JSON with a top-level `mcpServers` map. const cursor = readJsonSafe(join(home, ".cursor", "mcp.json")); if (cursor) collectMcpMap(cursor.mcpServers, "cursor", "global", out, true); + const qoder = readJsonSafe(join(home, ".qoder", "mcp.json")); + if (qoder) collectMcpMap(qoder.mcpServers, "qoder", "global", out, true); + + const qoderwork = readJsonSafe(join(home, ".qoderwork", "mcp.json")); + if (qoderwork) collectMcpMap(qoderwork.mcpServers, "qoderwork", "global", out, true); + + const qwenwork = readJsonSafe(qwenworkMcpPath(home)); + if (qwenwork) collectMcpMap(qwenwork.mcpServers, "qwenwork", "global", out, true); + const windsurf = readJsonSafe(join(home, ".codeium", "windsurf", "mcp_config.json")); if (windsurf) collectMcpMap(windsurf.mcpServers, "windsurf", "global", out, true); const gemini = readJsonSafe(join(home, ".gemini", "settings.json")); if (gemini) collectMcpMap(gemini.mcpServers, "gemini", "global", out, true); - const qoder = readJsonSafe(join(home, ".qoderwork", "mcp.json")); - if (qoder) collectMcpMap(qoder.mcpServers, "qoderwork", "global", out, true); - const openclaw = readJsonSafe(join(home, ".openclaw", "openclaw.json")); - if (openclaw) collectMcpMap(openclaw.mcpServers, "openclaw", "global", out, true); + if (openclaw) { + const mcp = asRecord(openclaw.mcp); + collectMcpMap(mcp?.servers ?? openclaw.mcpServers, "openclaw", "global", out, true); + } + + const zcode = readJsonSafe(join(home, ".zcode", "cli", "config.json")); + if (zcode) collectMcpMap(asRecord(zcode.mcp)?.servers, "zcode", "global", out, true); + + for (const file of workbuddyMcpPaths(home)) { + const workbuddy = readJsonSafe(file); + if (workbuddy) collectMcpMap(workbuddy.mcpServers, "workbuddy", file, out, true); + } + + const dshPatch = readText(join(home, ".dsh", "cordis.patch.yml")); + if (dshPatch) { + try { + const parsed = yaml.parse(dshPatch) as unknown; + const items = Array.isArray(parsed) ? parsed : []; + const dshServers: Record = {}; + for (const item of items) { + const entries = asRecord(item)?.insert; + const list = Array.isArray(entries) ? entries : [item]; + for (const entry of list) { + const record = asRecord(entry); + const config = record ? asRecord(record.config) : undefined; + if ( + record?.name === "@deepseek-ai/dsh-mcp-client" && + typeof config?.serverName === "string" + ) { + dshServers[config.serverName] = config; + } + } + } + collectMcpMap(dshServers, "deepseek-harness", "global", out, false); + } catch { + /* ignore malformed yaml */ + } + } const claudeDesktop = readJsonSafe(claudeDesktopConfigPath(home)); if (claudeDesktop) collectMcpMap(claudeDesktop.mcpServers, "claude-desktop", "global", out, true); @@ -507,6 +553,8 @@ function claudeDesktopConfigPath(home: string): string { interface McpWriteTarget { file: string; mapKey: string; + /** When set, the server map lives at parentKey.mapKey (e.g. mcp.servers). */ + parentKey?: string; /** Claude stores project-scoped servers under projects[scope][mapKey]. */ projectScoped: boolean; } @@ -553,15 +601,41 @@ function mcpWriteTarget(source: string, scope: string, home: string): McpWriteTa mapKey: "mcpServers", projectScoped: false, }; + if (source === "qoder") + return { + file: join(home, ".qoder", "mcp.json"), + mapKey: "mcpServers", + projectScoped: false, + }; if (source === "qoderwork") return { file: join(home, ".qoderwork", "mcp.json"), mapKey: "mcpServers", projectScoped: false, }; + if (source === "qwenwork") + return { + file: qwenworkMcpPath(home), + mapKey: "mcpServers", + projectScoped: false, + }; if (source === "openclaw") return { file: join(home, ".openclaw", "openclaw.json"), + mapKey: "servers", + parentKey: "mcp", + projectScoped: false, + }; + if (source === "zcode") + return { + file: join(home, ".zcode", "cli", "config.json"), + mapKey: "servers", + parentKey: "mcp", + projectScoped: false, + }; + if (source === "workbuddy") + return { + file: workbuddyMcpPaths(home)[0] ?? join(home, ".workbuddy-ai", "mcp.json"), mapKey: "mcpServers", projectScoped: false, }; @@ -604,6 +678,45 @@ function unmaskMcpConfig(submitted: unknown, stored: unknown): unknown { return submitted; } +function mcpMapContainer( + root: Record, + target: McpWriteTarget, + scope: string, +): Record | undefined { + let container: Record | undefined = root; + if (target.projectScoped) { + const projects = asRecord(root.projects); + container = projects ? asRecord(projects[scope]) : undefined; + } + if (!container) return undefined; + if (target.parentKey) { + const parent = asRecord(container[target.parentKey]); + return parent; + } + return container; +} + +function ensureMcpMapContainer( + root: Record, + target: McpWriteTarget, + scope: string, +): Record { + let container: Record = root; + if (target.projectScoped) { + const projects = asRecord(root.projects) ?? {}; + root.projects = projects; + const proj = asRecord(projects[scope]) ?? {}; + projects[scope] = proj; + container = proj; + } + if (target.parentKey) { + const parent = asRecord(container[target.parentKey]) ?? {}; + container[target.parentKey] = parent; + return parent; + } + return container; +} + /** Create or update one MCP server entry, writing back to its source file. */ export function writeMcpServer( source: string, @@ -620,14 +733,7 @@ export function writeMcpServer( if (!cfg) throw new Error("Config must be a JSON object."); const root = readJsonSafe(target.file) ?? {}; - let container: Record = root; - if (target.projectScoped) { - const projects = asRecord(root.projects) ?? {}; - root.projects = projects; - const proj = asRecord(projects[scope]) ?? {}; - projects[scope] = proj; - container = proj; - } + const container = ensureMcpMapContainer(root, target, scope); const map = asRecord(container[target.mapKey]) ?? {}; container[target.mapKey] = map; @@ -648,11 +754,7 @@ export function deleteMcpServer( if (!target) throw new Error("This MCP source is read-only and cannot be edited here."); const root = readJsonSafe(target.file); if (!root) throw new Error("Config file not found."); - let container: Record | undefined = root; - if (target.projectScoped) { - const projects = asRecord(root.projects); - container = projects ? asRecord(projects[scope]) : undefined; - } + const container = mcpMapContainer(root, target, scope); const map = container ? asRecord(container[target.mapKey]) : undefined; if (!map || !(name in map)) throw new Error("Server not found: " + name); delete map[name]; diff --git a/packages/commands/src/commands/config/ui-html.ts b/packages/commands/src/commands/config/ui-html.ts index 7d23af46..154040e5 100644 --- a/packages/commands/src/commands/config/ui-html.ts +++ b/packages/commands/src/commands/config/ui-html.ts @@ -1639,7 +1639,10 @@ const PAGE_HTML = ` { id: 'gemini', label: 'Gemini' }, { id: 'opencode', label: 'OpenCode' }, { id: 'openclaw', label: 'OpenClaw' }, - { id: 'qoderwork', label: 'QoderWork' } + { id: 'qoderwork', label: 'QoderWork' }, + { id: 'zcode', label: 'ZCode' }, + { id: 'workbuddy', label: 'WorkBuddy' }, + { id: 'deepseek-harness', label: 'DeepSeek Harness' } ]; function copyButton(getText) { var b = uiEl('button', 'copy-btn', 'Copy'); b.type = 'button'; diff --git a/packages/commands/src/commands/mcp/agent-config.ts b/packages/commands/src/commands/mcp/agent-config.ts new file mode 100644 index 00000000..d98793b1 --- /dev/null +++ b/packages/commands/src/commands/mcp/agent-config.ts @@ -0,0 +1,698 @@ +import { createHash } from "node:crypto"; +import { existsSync, readFileSync, unlinkSync } from "node:fs"; +import { join } from "node:path"; +import { BailianError, ExitCode } from "bailian-cli-core"; +import { parse as parseToml, stringify as stringifyToml } from "smol-toml"; +import yaml from "yaml"; +import { + backup, + stripJsonc, + writeJsonAtomic, + writeTextAtomic, +} from "../config/agent/writers/utils.ts"; + +export const MCP_AGENT_IDS = [ + "codex", + "claude-code", + "cursor", + "qoder", + "qoderwork", + "qwenwork", + "qwen-code", + "gemini", + "opencode", + "openclaw", + "deepseek-harness", + "zcode", + "workbuddy", +] as const; + +const DSH_MCP_PLUGIN = "@deepseek-ai/dsh-mcp-client"; +const DSH_OTHER_PATCHES = "__dshOtherPatches"; +const DSH_SERVERS = "mcpServers"; +const WORKBUDDY_DIRS = [".workbuddy-ai", ".workbuddy", ".codebuddy"] as const; +const OPENCLAW_DIRS = [".openclaw", ".clawdbot", ".moltbot"] as const; + +export type NativeMcpAgent = (typeof MCP_AGENT_IDS)[number]; +export type McpTransport = "streamable-http" | "sse"; + +export interface McpConnectionSpec { + name: string; + serverCode: string; + transport: McpTransport; + endpoint: string; + headers: Record; +} + +export interface McpAgentResult { + agent: NativeMcpAgent; + path: string; + status: "added" | "updated" | "unchanged" | "removed" | "absent"; +} + +interface ManagedRegistration { + agent: NativeMcpAgent; + name: string; + serverCode: string; + transport: McpTransport; + endpoint: string; + path: string; + fingerprint: string; + cliVersion: string; + updatedAt: string; +} + +interface RegistrationManifest { + version: 1; + registrations: Record; +} + +interface AgentAdapter { + path(home: string): string; + paths?(home: string): string[]; + installed(home: string): boolean; + supports(transport: McpTransport): boolean; + parse(path: string): Record; + serialize(config: Record): string; + getServers(config: Record): Record; + buildEntry(spec: McpConnectionSpec): Record; +} + +interface ConnectOptions { + agents: NativeMcpAgent[]; + spec: McpConnectionSpec; + cliVersion: string; + home: string; + configDir: string; +} + +interface DisconnectOptions { + agents: NativeMcpAgent[]; + name: string; + home: string; + configDir: string; +} + +interface PlannedWrite { + path: string; + original?: string; + content: string; +} + +function isObject(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} + +function parseObject(path: string, parser: (content: string) => unknown): Record { + if (!existsSync(path)) return {}; + try { + const parsed = parser(readFileSync(path, "utf8")); + if (!isObject(parsed)) throw new Error("root value is not an object"); + return parsed; + } catch (error) { + throw new BailianError( + `Cannot update MCP configuration because ${path} is invalid.`, + ExitCode.GENERAL, + "Fix the existing configuration file and retry; it was not changed.", + { cause: error }, + ); + } +} + +function parseJson(path: string): Record { + return parseObject(path, (content) => JSON.parse(stripJsonc(content))); +} + +function parseTomlObject(path: string): Record { + return parseObject(path, parseToml); +} + +function serverMap(config: Record, key: string): Record { + const current = config[key]; + if (current === undefined) { + const created: Record = {}; + config[key] = created; + return created; + } + if (!isObject(current)) { + throw new BailianError( + `Cannot update MCP configuration because ${key} is not an object.`, + ExitCode.GENERAL, + ); + } + return current; +} + +function nestedServerMap(config: Record, keys: string[]): Record { + let current = config; + for (const key of keys) { + current = serverMap(current, key); + } + return current; +} + +function adapterWritePaths(adapter: AgentAdapter, home: string): string[] { + const listed = adapter.paths?.(home); + if (listed && listed.length > 0) return listed; + return [adapter.path(home)]; +} + +function envOrHomePath(envValue: string | undefined, home: string, fallbackDir: string): string { + const trimmed = envValue?.trim(); + return trimmed ? trimmed : join(home, fallbackDir); +} + +function mergeConnectStatus( + current: McpAgentResult["status"] | undefined, + next: "added" | "updated" | "unchanged", +): McpAgentResult["status"] { + if (current === undefined || current === "unchanged") return next; + if (next === "updated" || current === "updated") return "updated"; + return current; +} + +function unsupportedSseError(agent: NativeMcpAgent): BailianError { + const label = + agent === "codex" ? "Codex" : agent === "deepseek-harness" ? "DeepSeek Harness" : agent; + return new BailianError( + `${label} does not support SSE MCP servers; use --transport streamable-http.`, + ExitCode.USAGE, + ); +} + +const QWENWORK_DIRS = [".qwenworkcn", ".qwenwork"] as const; + +function qwenworkConfigDirs(home: string): string[] { + return QWENWORK_DIRS.map((dir) => join(home, dir)); +} + +/** QwenWork / 千问办公 stores MCP config in `~/.qwenworkcn/mcp.json` (or `~/.qwenwork/mcp.json`). */ +export function qwenworkMcpPath(home: string): string { + const dirs = qwenworkConfigDirs(home); + for (const dir of dirs) { + const file = join(dir, "mcp.json"); + if (existsSync(file)) return file; + } + for (const dir of dirs) { + if (existsSync(dir)) return join(dir, "mcp.json"); + } + return join(dirs[0], "mcp.json"); +} + +export function opencodeMcpPath(home: string): string { + return join(home, ".config", "opencode", "opencode.json"); +} + +export function openclawMcpPath(home: string): string { + const fromEnv = process.env.OPENCLAW_CONFIG_PATH?.trim(); + if (fromEnv) return fromEnv; + const existing = OPENCLAW_DIRS.map((dir) => join(home, dir)).find((dir) => existsSync(dir)); + return join(existing ?? join(home, OPENCLAW_DIRS[0]), "openclaw.json"); +} + +export function dshHomeDir(home: string): string { + return envOrHomePath(process.env.DSH_HOME, home, ".dsh"); +} + +export function dshMcpPath(home: string): string { + return join(dshHomeDir(home), "cordis.patch.yml"); +} + +export function zcodeMcpPath(home: string): string { + return join(envOrHomePath(process.env.ZCODE_HOME, home, ".zcode"), "cli", "config.json"); +} + +function workbuddyProductDirs(home: string): string[] { + return WORKBUDDY_DIRS.map((dir) => join(home, dir)); +} + +function workbuddyFileInDir(dir: string): string { + const recommended = join(dir, ".mcp.json"); + if (existsSync(recommended)) return recommended; + return join(dir, "mcp.json"); +} + +export function workbuddyMcpPaths(home: string): string[] { + const existing = workbuddyProductDirs(home).filter((dir) => existsSync(dir)); + const dirs = existing.length > 0 ? existing : [join(home, WORKBUDDY_DIRS[0])]; + return dirs.map((dir) => workbuddyFileInDir(dir)); +} + +function isDshMcpEntry(value: unknown): value is Record { + return isObject(value) && value.name === DSH_MCP_PLUGIN && isObject(value.config); +} + +function dshServerName(entry: Record): string | undefined { + const config = entry.config; + if (!isObject(config) || typeof config.serverName !== "string" || config.serverName === "") { + return undefined; + } + return config.serverName; +} + +function parseDshPatch(path: string): Record { + if (!existsSync(path)) return { [DSH_OTHER_PATCHES]: [], [DSH_SERVERS]: {} }; + let parsed: unknown; + try { + parsed = yaml.parse(readFileSync(path, "utf8")); + } catch (error) { + throw new BailianError( + `Cannot update MCP configuration because ${path} is invalid.`, + ExitCode.GENERAL, + "Fix the existing configuration file and retry; it was not changed.", + { cause: error }, + ); + } + if (parsed === null || parsed === undefined) { + return { [DSH_OTHER_PATCHES]: [], [DSH_SERVERS]: {} }; + } + if (!Array.isArray(parsed)) { + throw new BailianError( + `Cannot update MCP configuration because ${path} is invalid.`, + ExitCode.GENERAL, + "Fix the existing configuration file and retry; it was not changed.", + ); + } + + const otherPatches: unknown[] = []; + const servers: Record = {}; + for (const item of parsed) { + if (isObject(item) && Array.isArray(item.insert)) { + const otherEntries: unknown[] = []; + for (const entry of item.insert) { + if (isDshMcpEntry(entry)) { + const name = dshServerName(entry); + if (name) { + servers[name] = entry; + continue; + } + } + otherEntries.push(entry); + } + if (otherEntries.length > 0) otherPatches.push({ ...item, insert: otherEntries }); + continue; + } + if (isDshMcpEntry(item)) { + const name = dshServerName(item); + if (name) { + servers[name] = item; + continue; + } + } + otherPatches.push(item); + } + return { [DSH_OTHER_PATCHES]: otherPatches, [DSH_SERVERS]: servers }; +} + +function serializeDshPatch(config: Record): string { + const otherPatches = Array.isArray(config[DSH_OTHER_PATCHES]) ? config[DSH_OTHER_PATCHES] : []; + const servers = isObject(config[DSH_SERVERS]) ? config[DSH_SERVERS] : {}; + const patches = [...otherPatches]; + const mcpEntries = Object.values(servers); + if (mcpEntries.length > 0) patches.push({ insert: mcpEntries }); + return yaml.stringify(patches); +} + +function jsonMcpAdapter(options: { + path: (home: string) => string; + paths?: (home: string) => string[]; + installed: (home: string) => boolean; + supports?: (transport: McpTransport) => boolean; + typed?: boolean; + serverKeys?: string[]; + buildEntry?: (spec: McpConnectionSpec) => Record; +}): AgentAdapter { + const serverKeys = options.serverKeys ?? ["mcpServers"]; + return { + path: options.path, + paths: options.paths, + installed: options.installed, + supports: options.supports ?? (() => true), + parse: parseJson, + serialize: (config) => `${JSON.stringify(config, null, 2)}\n`, + getServers: (config) => nestedServerMap(config, serverKeys), + buildEntry: + options.buildEntry ?? + ((spec) => + options.typed + ? { + type: spec.transport === "sse" ? "sse" : "http", + url: spec.endpoint, + headers: spec.headers, + } + : { url: spec.endpoint, headers: spec.headers }), + }; +} + +const adapters: Record = { + codex: { + path: (home) => join(process.env.CODEX_HOME || join(home, ".codex"), "config.toml"), + installed: (home) => + existsSync(process.env.CODEX_HOME || join(home, ".codex")) || + existsSync(join(process.env.CODEX_HOME || join(home, ".codex"), "config.toml")), + supports: (transport) => transport === "streamable-http", + parse: parseTomlObject, + serialize: (config) => `${stringifyToml(config)}\n`, + getServers: (config) => serverMap(config, "mcp_servers"), + buildEntry: (spec) => ({ url: spec.endpoint, http_headers: spec.headers }), + }, + "claude-code": { + path: (home) => join(home, ".claude.json"), + installed: (home) => + existsSync(join(home, ".claude")) || existsSync(join(home, ".claude.json")), + supports: () => true, + parse: parseJson, + serialize: (config) => `${JSON.stringify(config, null, 2)}\n`, + getServers: (config) => serverMap(config, "mcpServers"), + buildEntry: (spec) => ({ + type: spec.transport === "sse" ? "sse" : "http", + url: spec.endpoint, + headers: spec.headers, + }), + }, + cursor: jsonMcpAdapter({ + path: (home) => join(home, ".cursor", "mcp.json"), + installed: (home) => + existsSync(join(home, ".cursor")) || existsSync(join(home, ".cursor", "mcp.json")), + }), + qoder: jsonMcpAdapter({ + path: (home) => join(home, ".qoder", "mcp.json"), + installed: (home) => + existsSync(join(home, ".qoder")) || existsSync(join(home, ".qoder", "mcp.json")), + }), + qoderwork: jsonMcpAdapter({ + path: (home) => join(home, ".qoderwork", "mcp.json"), + installed: (home) => + existsSync(join(home, ".qoderwork")) || existsSync(join(home, ".qoderwork", "mcp.json")), + }), + qwenwork: jsonMcpAdapter({ + path: qwenworkMcpPath, + installed: (home) => + qwenworkConfigDirs(home).some((dir) => existsSync(dir) || existsSync(join(dir, "mcp.json"))), + buildEntry: (spec) => ({ + type: spec.transport === "sse" ? "sse" : "streamable-http", + url: spec.endpoint, + headers: spec.headers, + }), + }), + "qwen-code": { + path: (home) => join(home, ".qwen", "settings.json"), + installed: (home) => existsSync(join(home, ".qwen")), + supports: () => true, + parse: parseJson, + serialize: (config) => `${JSON.stringify(config, null, 2)}\n`, + getServers: (config) => serverMap(config, "mcpServers"), + buildEntry: (spec) => + spec.transport === "sse" + ? { url: spec.endpoint, headers: spec.headers } + : { httpUrl: spec.endpoint, headers: spec.headers }, + }, + gemini: { + path: (home) => join(home, ".gemini", "settings.json"), + installed: (home) => existsSync(join(home, ".gemini")), + supports: () => true, + parse: parseJson, + serialize: (config) => `${JSON.stringify(config, null, 2)}\n`, + getServers: (config) => serverMap(config, "mcpServers"), + buildEntry: (spec) => + spec.transport === "sse" + ? { url: spec.endpoint, headers: spec.headers } + : { httpUrl: spec.endpoint, headers: spec.headers }, + }, + opencode: jsonMcpAdapter({ + path: opencodeMcpPath, + installed: (home) => + existsSync(join(home, ".config", "opencode")) || existsSync(opencodeMcpPath(home)), + serverKeys: ["mcp"], + buildEntry: (spec) => ({ + type: "remote", + url: spec.endpoint, + enabled: true, + oauth: false, + headers: spec.headers, + }), + }), + openclaw: jsonMcpAdapter({ + path: openclawMcpPath, + installed: (home) => + Boolean(process.env.OPENCLAW_CONFIG_PATH?.trim()) || + OPENCLAW_DIRS.some((dir) => existsSync(join(home, dir))) || + existsSync(openclawMcpPath(home)), + serverKeys: ["mcp", "servers"], + buildEntry: (spec) => ({ + url: spec.endpoint, + transport: spec.transport === "sse" ? "sse" : "streamable-http", + headers: spec.headers, + }), + }), + "deepseek-harness": { + path: dshMcpPath, + installed: (home) => existsSync(dshHomeDir(home)), + supports: (transport) => transport === "streamable-http", + parse: parseDshPatch, + serialize: serializeDshPatch, + getServers: (config) => serverMap(config, DSH_SERVERS), + buildEntry: (spec) => ({ + id: `mcp-bailian-${spec.name}`, + name: DSH_MCP_PLUGIN, + config: { + serverName: spec.name, + transport: "streamable-http", + url: spec.endpoint, + headers: spec.headers, + }, + }), + }, + zcode: jsonMcpAdapter({ + path: zcodeMcpPath, + installed: (home) => existsSync(envOrHomePath(process.env.ZCODE_HOME, home, ".zcode")), + serverKeys: ["mcp", "servers"], + buildEntry: (spec) => ({ + type: spec.transport === "sse" ? "sse" : "http", + url: spec.endpoint, + enabled: true, + headers: spec.headers, + }), + }), + workbuddy: jsonMcpAdapter({ + path: (home) => workbuddyMcpPaths(home)[0] ?? join(home, WORKBUDDY_DIRS[0], "mcp.json"), + paths: workbuddyMcpPaths, + installed: (home) => workbuddyProductDirs(home).some((dir) => existsSync(dir)), + typed: true, + }), +}; + +function stableJson(value: unknown): string { + if (Array.isArray(value)) return `[${value.map(stableJson).join(",")}]`; + if (isObject(value)) { + return `{${Object.keys(value) + .sort() + .map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`) + .join(",")}}`; + } + return JSON.stringify(value); +} + +function fingerprint(value: unknown): string { + return createHash("sha256").update(stableJson(value)).digest("hex"); +} + +function registrationKey(agent: NativeMcpAgent, name: string): string { + return `${agent}:${name}`; +} + +function manifestPath(configDir: string): string { + return join(configDir, "mcp-registrations.json"); +} + +function readManifest(configDir: string): RegistrationManifest { + const path = manifestPath(configDir); + if (!existsSync(path)) return { version: 1, registrations: {} }; + const parsed = parseJson(path); + if (parsed.version !== 1 || !isObject(parsed.registrations)) { + throw new BailianError( + `Cannot update MCP registrations because ${path} has an unsupported format.`, + ExitCode.GENERAL, + ); + } + return parsed as unknown as RegistrationManifest; +} + +function assertManagedEntry( + existing: unknown, + managed: ManagedRegistration | undefined, + agent: NativeMcpAgent, + name: string, +): void { + if (existing === undefined) return; + if (!managed) { + throw new BailianError( + `MCP server "${name}" already exists in ${agent} and is not managed by bailian-cli.`, + ExitCode.GENERAL, + "Choose another server name or remove the existing entry yourself.", + ); + } + if (fingerprint(existing) !== managed.fingerprint) { + throw new BailianError( + `MCP server "${name}" in ${agent} conflicts with the last bailian-cli registration.`, + ExitCode.GENERAL, + "The entry was changed after registration; resolve it manually before retrying.", + ); + } +} + +function restoreWrites(writes: PlannedWrite[]): void { + for (const write of writes.reverse()) { + try { + if (write.original === undefined) unlinkSync(write.path); + else writeTextAtomic(write.path, write.original); + } catch { + // Preserve the original failure; timestamped backups remain available. + } + } +} + +function applyWrites( + writes: PlannedWrite[], + manifest: RegistrationManifest, + configDir: string, +): void { + const completed: PlannedWrite[] = []; + try { + for (const write of writes) { + backup(write.path); + writeTextAtomic(write.path, write.content); + completed.push(write); + } + writeJsonAtomic(manifestPath(configDir), manifest); + } catch (error) { + restoreWrites(completed); + throw new BailianError( + "Failed to update MCP Agent configuration.", + ExitCode.GENERAL, + undefined, + { + cause: error, + }, + ); + } +} + +export function resolveMcpAgentTargets( + target: NativeMcpAgent | "all", + home: string, +): NativeMcpAgent[] { + if (target !== "all") return [target]; + return MCP_AGENT_IDS.filter((agent) => adapters[agent].installed(home)); +} + +export function connectMcpAgents(options: ConnectOptions): McpAgentResult[] { + const manifest = readManifest(options.configDir); + const writes: PlannedWrite[] = []; + const results: McpAgentResult[] = []; + + for (const agent of options.agents) { + const adapter = adapters[agent]; + if (!adapter.supports(options.spec.transport)) { + throw unsupportedSseError(agent); + } + + const paths = adapterWritePaths(adapter, options.home); + const primaryPath = adapter.path(options.home); + const key = registrationKey(agent, options.spec.name); + const managed = manifest.registrations[key]; + const desired = adapter.buildEntry(options.spec); + const desiredFingerprint = fingerprint(desired); + let status: McpAgentResult["status"] | undefined; + + for (const path of paths) { + const config = adapter.parse(path); + const servers = adapter.getServers(config); + const existing = servers[options.spec.name]; + assertManagedEntry(existing, managed, agent, options.spec.name); + const pathStatus = + existing === undefined + ? "added" + : fingerprint(existing) === desiredFingerprint + ? "unchanged" + : "updated"; + status = mergeConnectStatus(status, pathStatus); + if (pathStatus !== "unchanged") { + servers[options.spec.name] = desired; + writes.push({ + path, + original: existsSync(path) ? readFileSync(path, "utf8") : undefined, + content: adapter.serialize(config), + }); + } + } + + const resolvedStatus = status ?? "unchanged"; + results.push({ agent, path: primaryPath, status: resolvedStatus }); + if (resolvedStatus !== "unchanged") { + manifest.registrations[key] = { + agent, + name: options.spec.name, + serverCode: options.spec.serverCode, + transport: options.spec.transport, + endpoint: options.spec.endpoint, + path: primaryPath, + fingerprint: desiredFingerprint, + cliVersion: options.cliVersion, + updatedAt: new Date().toISOString(), + }; + } + } + + if (writes.length > 0) applyWrites(writes, manifest, options.configDir); + return results; +} + +export function disconnectMcpAgents(options: DisconnectOptions): McpAgentResult[] { + const manifest = readManifest(options.configDir); + const writes: PlannedWrite[] = []; + const results: McpAgentResult[] = []; + let manifestChanged = false; + + for (const agent of options.agents) { + const adapter = adapters[agent]; + const primaryPath = adapter.path(options.home); + const key = registrationKey(agent, options.name); + const managed = manifest.registrations[key]; + if (!managed) { + results.push({ agent, path: primaryPath, status: "absent" }); + continue; + } + + let removed = false; + let sawExisting = false; + for (const path of adapterWritePaths(adapter, options.home)) { + const config = adapter.parse(path); + const servers = adapter.getServers(config); + const existing = servers[options.name]; + if (existing === undefined) continue; + sawExisting = true; + assertManagedEntry(existing, managed, agent, options.name); + delete servers[options.name]; + removed = true; + writes.push({ + path, + original: readFileSync(path, "utf8"), + content: adapter.serialize(config), + }); + } + + delete manifest.registrations[key]; + manifestChanged = true; + results.push({ + agent, + path: primaryPath, + status: sawExisting && removed ? "removed" : "absent", + }); + } + + if (writes.length > 0 || manifestChanged) { + applyWrites(writes, manifest, options.configDir); + } + return results; +} diff --git a/packages/commands/src/commands/mcp/connect.ts b/packages/commands/src/commands/mcp/connect.ts new file mode 100644 index 00000000..a303948e --- /dev/null +++ b/packages/commands/src/commands/mcp/connect.ts @@ -0,0 +1,144 @@ +import { homedir } from "node:os"; +import { + BailianError, + ExitCode, + REGIONS, + bailianMcpPath, + bailianMcpSsePath, + defineCommand, + detectOutputFormat, + getConfigDir, + trackingHeaders, + type FlagsDef, +} from "bailian-cli-core"; +import { emitResult } from "bailian-cli-runtime"; +import { + MCP_AGENT_IDS, + connectMcpAgents, + resolveMcpAgentTargets, + type McpTransport, + type NativeMcpAgent, +} from "./agent-config.ts"; + +const AGENT_CHOICES = [...MCP_AGENT_IDS, "all"] as const; +const TRANSPORT_CHOICES = ["streamable-http", "sse"] as const; + +const FLAGS = { + server: { + type: "string", + valueHint: "", + description: { + "en-US": "Bailian MCP Server Code, such as TextGenerateImage", + "zh-CN": "百炼 MCP Server Code,例如 TextGenerateImage", + }, + required: true, + }, + transport: { + type: "string", + valueHint: "", + choices: TRANSPORT_CHOICES, + description: { + "en-US": "MCP transport exposed by the server: streamable-http or sse", + "zh-CN": "服务端提供的 MCP 传输协议:streamable-http 或 sse", + }, + required: true, + }, + agent: { + type: "string", + valueHint: "", + choices: AGENT_CHOICES, + description: { + "en-US": `Target Agent: ${AGENT_CHOICES.join(", ")}`, + "zh-CN": `目标 Agent:${AGENT_CHOICES.join(", ")}`, + }, + required: true, + }, +} satisfies FlagsDef; + +export default defineCommand({ + description: { + "en-US": "Register a Bailian MCP server in an Agent's native configuration", + "zh-CN": "将百炼 MCP 服务注册到 Agent 的原生配置中", + }, + auth: "apiKey", + usageArgs: "--server --transport --agent ", + flags: FLAGS, + notes: [ + { + "en-US": + "This release registers the official China-site MCP endpoint; the model API --base-url does not change the MCP endpoint.", + "zh-CN": "本期固定注册中国站官方 MCP 地址;模型 API 的 --base-url 不会改变 MCP 地址。", + }, + { + "en-US": + "The resolved API key is written to the selected Agent's private local configuration. Existing unmanaged entries are never overwritten.", + "zh-CN": "解析出的 API Key 会写入所选 Agent 的本地私有配置;CLI 不会覆盖非其管理的同名条目。", + }, + { + "en-US": + "qoder, qoderwork, and qwenwork are independent products. qwenwork is QwenWork (千问办公); qoderwork is Qoder Work.", + "zh-CN": + "qoder、qoderwork、qwenwork 是彼此独立的产品。qwenwork 是千问办公(QwenWork);qoderwork 是 Qoder Work。", + }, + { + "en-US": + "workbuddy covers CodeBuddy / WorkBuddy. deepseek-harness is DeepSeek Harness and only accepts streamable-http.", + "zh-CN": + "workbuddy 覆盖 CodeBuddy / WorkBuddy。deepseek-harness 是 DeepSeek Harness,仅支持 streamable-http。", + }, + ], + exampleArgs: [ + "--server TextGenerateImage --transport streamable-http --agent cursor", + "--server VideoGenerate --transport sse --agent claude-code", + "--server TextGenerateImage --transport streamable-http --agent all", + ], + async run(ctx) { + const { flags, settings } = ctx; + const transport = flags.transport as McpTransport; + const target = flags.agent as NativeMcpAgent | "all"; + const agents = resolveMcpAgentTargets(target, homedir()); + if (agents.length === 0) { + throw new BailianError( + "No supported installed Agent was found for --agent all.", + ExitCode.USAGE, + ); + } + + const endpointPath = + transport === "sse" ? bailianMcpSsePath(flags.server) : bailianMcpPath(flags.server); + const endpoint = `${REGIONS.cn}${endpointPath}`; + const channelHeaders = trackingHeaders(ctx.identity); + const headerNames = ["Authorization", ...Object.keys(channelHeaders)]; + const format = detectOutputFormat(settings.output); + + if (settings.dryRun) { + emitResult( + { + server: flags.server, + transport, + endpoint, + agents, + header_names: headerNames, + }, + format, + ); + return; + } + + const results = connectMcpAgents({ + agents, + spec: { + name: flags.server, + serverCode: flags.server, + transport, + endpoint, + headers: ctx.client.bailianMcpRegistrationHeaders(), + }, + cliVersion: ctx.identity.version, + home: homedir(), + configDir: getConfigDir(), + }); + + emitResult({ server: flags.server, transport, endpoint, results }, format); + }, +}); diff --git a/packages/commands/src/commands/mcp/disconnect.ts b/packages/commands/src/commands/mcp/disconnect.ts new file mode 100644 index 00000000..82d1c141 --- /dev/null +++ b/packages/commands/src/commands/mcp/disconnect.ts @@ -0,0 +1,83 @@ +import { homedir } from "node:os"; +import { + BailianError, + ExitCode, + defineCommand, + detectOutputFormat, + getConfigDir, + type FlagsDef, +} from "bailian-cli-core"; +import { emitResult } from "bailian-cli-runtime"; +import { + MCP_AGENT_IDS, + disconnectMcpAgents, + resolveMcpAgentTargets, + type NativeMcpAgent, +} from "./agent-config.ts"; + +const AGENT_CHOICES = [...MCP_AGENT_IDS, "all"] as const; + +const FLAGS = { + server: { + type: "string", + valueHint: "", + description: { + "en-US": "Bailian MCP Server Code used during connect", + "zh-CN": "connect 时使用的百炼 MCP Server Code", + }, + required: true, + }, + agent: { + type: "string", + valueHint: "", + choices: AGENT_CHOICES, + description: { + "en-US": `Target Agent: ${AGENT_CHOICES.join(", ")}`, + "zh-CN": `目标 Agent:${AGENT_CHOICES.join(", ")}`, + }, + required: true, + }, +} satisfies FlagsDef; + +export default defineCommand({ + description: { + "en-US": "Remove an unchanged MCP registration previously managed by bailian-cli", + "zh-CN": "移除此前由 bailian-cli 管理且未被修改的 MCP 注册", + }, + auth: "none", + usageArgs: "--server --agent ", + flags: FLAGS, + notes: [ + { + "en-US": "A registration changed after connect is left untouched and reported as a conflict.", + "zh-CN": "如果注册项在 connect 后被修改,CLI 会保留该配置并报告冲突。", + }, + ], + exampleArgs: [ + "--server TextGenerateImage --agent cursor", + "--server TextGenerateImage --agent all", + ], + async run(ctx) { + const { flags, settings } = ctx; + const target = flags.agent as NativeMcpAgent | "all"; + const agents = resolveMcpAgentTargets(target, homedir()); + if (agents.length === 0) { + throw new BailianError( + "No supported installed Agent was found for --agent all.", + ExitCode.USAGE, + ); + } + const format = detectOutputFormat(settings.output); + if (settings.dryRun) { + emitResult({ server: flags.server, agents, action: "disconnect" }, format); + return; + } + const results = disconnectMcpAgents({ + agents, + name: flags.server, + home: homedir(), + configDir: getConfigDir(), + }); + emitResult({ server: flags.server, results }, format); + }, +}); diff --git a/packages/commands/src/index.ts b/packages/commands/src/index.ts index e977b6e5..600da7a0 100644 --- a/packages/commands/src/index.ts +++ b/packages/commands/src/index.ts @@ -68,6 +68,8 @@ export { default as knowledgeCollectionCreate } from "./commands/knowledge/colle export { default as knowledgeCollectionGet } from "./commands/knowledge/collection-get.ts"; export { default as knowledgeDocImportOss } from "./commands/knowledge/doc-import-oss.ts"; export { default as mcpCall } from "./commands/mcp/call.ts"; +export { default as mcpConnect } from "./commands/mcp/connect.ts"; +export { default as mcpDisconnect } from "./commands/mcp/disconnect.ts"; export { default as mcpList } from "./commands/mcp/list.ts"; export { default as mcpTools } from "./commands/mcp/tools.ts"; export { default as searchWeb } from "./commands/search/web.ts"; diff --git a/packages/commands/tests/e2e/mcp.e2e.test.ts b/packages/commands/tests/e2e/mcp.e2e.test.ts index bcf0d3d2..6cb74472 100644 --- a/packages/commands/tests/e2e/mcp.e2e.test.ts +++ b/packages/commands/tests/e2e/mcp.e2e.test.ts @@ -1,3 +1,7 @@ +import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { parse as parseToml } from "smol-toml"; import { describe, expect, test } from "vite-plus/test"; import { isDashScopeE2EReady, parseStdoutJson, runCommandHelp, runCommandE2e } from "./helpers.ts"; import { MCP_ROUTES } from "./topic-routes.ts"; @@ -35,6 +39,163 @@ describe("e2e: mcp", () => { expect(stderr).toMatch(/call|--target|--arg|--json/i); }); + test("mcp connect/disconnect --help 展示原生 Agent 注册参数", async () => { + const connect = await runCommandHelp(MCP_ROUTES, ["mcp", "connect", "--help"]); + expect(connect.exitCode, connect.stderr).toBe(0); + expect(connect.stderr).toMatch(/--server|--transport|streamable-http|--agent/i); + expect(connect.stderr).toMatch(/cursor/); + expect(connect.stderr).toMatch(/qoder/); + expect(connect.stderr).toMatch(/qoderwork/); + expect(connect.stderr).toMatch(/qwenwork/); + expect(connect.stderr).toMatch(/opencode/); + expect(connect.stderr).toMatch(/openclaw/); + expect(connect.stderr).toMatch(/deepseek-harness/); + expect(connect.stderr).toMatch(/zcode/); + expect(connect.stderr).toMatch(/workbuddy/); + + const disconnect = await runCommandHelp(MCP_ROUTES, ["mcp", "disconnect", "--help"]); + expect(disconnect.exitCode, disconnect.stderr).toBe(0); + expect(disconnect.stderr).toMatch(/--server|--agent/i); + }); + + test("mcp connect 缺少必填参数时退出为用法错误 (2)", async () => { + for (const args of [ + ["mcp", "connect", "--transport", "streamable-http", "--agent", "codex"], + ["mcp", "connect", "--server", "ImageGenerate", "--agent", "codex"], + ["mcp", "connect", "--server", "ImageGenerate", "--transport", "streamable-http"], + ]) { + const { exitCode } = await runCommandE2e(MCP_ROUTES, [...args, "--quiet"]); + expect(exitCode).toBe(2); + } + }); + + test("mcp connect --dry-run 输出端点和 Header 名但不写配置", async () => { + const tempHome = mkdtempSync(join(tmpdir(), "bl-mcp-connect-dry-")); + try { + const { stdout, stderr, exitCode } = await runCommandE2e( + MCP_ROUTES, + [ + "mcp", + "connect", + "--server", + "ImageGenerate", + "--transport", + "streamable-http", + "--agent", + "codex", + "--base-url", + "https://custom-model-gateway.example.com", + "--dry-run", + "--output", + "json", + ], + { + HOME: tempHome, + CODEX_HOME: join(tempHome, ".codex"), + BAILIAN_CONFIG_DIR: join(tempHome, ".bailian"), + }, + ); + expect(exitCode, stderr).toBe(0); + const data = parseStdoutJson<{ + server?: string; + transport?: string; + endpoint?: string; + header_names?: string[]; + }>(stdout); + expect(data.server).toBe("ImageGenerate"); + expect(data.transport).toBe("streamable-http"); + expect(data.endpoint).toBe("https://dashscope.aliyuncs.com/api/v1/mcps/ImageGenerate/mcp"); + expect(data.header_names).toEqual( + expect.arrayContaining([ + "Authorization", + "x-dashscope-openapisource", + "x-dashscope-source-config", + "X-Dashscope-Service", + ]), + ); + expect(existsSync(join(tempHome, ".codex", "config.toml"))).toBe(false); + } finally { + rmSync(tempHome, { recursive: true, force: true }); + } + }); + + test("mcp connect/disconnect 可在隔离 HOME 内完成 Codex 配置闭环", async () => { + const tempHome = mkdtempSync(join(tmpdir(), "bl-mcp-connect-write-")); + const codexDir = join(tempHome, ".codex"); + const configDir = join(tempHome, ".bailian"); + const configPath = join(codexDir, "config.toml"); + mkdirSync(codexDir, { recursive: true }); + writeFileSync(configPath, 'model = "gpt-5"\n'); + const env = { HOME: tempHome, CODEX_HOME: codexDir, BAILIAN_CONFIG_DIR: configDir }; + + try { + const connected = await runCommandE2e( + MCP_ROUTES, + [ + "mcp", + "connect", + "--server", + "ImageGenerate", + "--transport", + "streamable-http", + "--agent", + "codex", + "--api-key", + "sk-test-secret", + "--base-url", + "https://dashscope.aliyuncs.com", + "--output", + "json", + ], + env, + ); + expect(connected.exitCode, connected.stderr).toBe(0); + const config = parseToml(readFileSync(configPath, "utf8")) as Record; + expect(config.model).toBe("gpt-5"); + const registered = (config.mcp_servers as Record>) + .ImageGenerate; + expect(registered).toBeDefined(); + const httpHeaders = registered.http_headers as Record; + expect(httpHeaders["X-Dashscope-Service"]).toBe("bailian-cli"); + expect(httpHeaders["x-dashscope-openapisource"]).toBe("BailianCLI"); + expect(readFileSync(join(configDir, "mcp-registrations.json"), "utf8")).not.toContain( + "sk-test-secret", + ); + + const preview = await runCommandE2e( + MCP_ROUTES, + [ + "mcp", + "disconnect", + "--server", + "ImageGenerate", + "--agent", + "codex", + "--dry-run", + "--output", + "json", + ], + env, + ); + expect(preview.exitCode, preview.stderr).toBe(0); + expect( + (parseToml(readFileSync(configPath, "utf8")).mcp_servers as Record) + .ImageGenerate, + ).toBeDefined(); + + const disconnected = await runCommandE2e( + MCP_ROUTES, + ["mcp", "disconnect", "--server", "ImageGenerate", "--agent", "codex", "--output", "json"], + env, + ); + expect(disconnected.exitCode, disconnected.stderr).toBe(0); + const after = parseToml(readFileSync(configPath, "utf8")) as Record; + expect((after.mcp_servers as Record).ImageGenerate).toBeUndefined(); + } finally { + rmSync(tempHome, { recursive: true, force: true }); + } + }); + test("mcp list --help 不暴露 --all 入口(市场全量已下线)", async () => { const { stderr, exitCode } = await runCommandHelp(MCP_ROUTES, ["mcp", "list", "--help"]); expect(exitCode, stderr).toBe(0); diff --git a/packages/commands/tests/e2e/topic-routes.ts b/packages/commands/tests/e2e/topic-routes.ts index b4c4fe3e..e39164c7 100644 --- a/packages/commands/tests/e2e/topic-routes.ts +++ b/packages/commands/tests/e2e/topic-routes.ts @@ -81,6 +81,8 @@ export const SPEECH_ROUTES: E2eRouteExports = { export const MCP_ROUTES: E2eRouteExports = { "mcp call": "mcpCall", + "mcp connect": "mcpConnect", + "mcp disconnect": "mcpDisconnect", "mcp list": "mcpList", "mcp tools": "mcpTools", }; diff --git a/packages/commands/tests/inventory.test.ts b/packages/commands/tests/inventory.test.ts index 66fc573b..0fa28a78 100644 --- a/packages/commands/tests/inventory.test.ts +++ b/packages/commands/tests/inventory.test.ts @@ -1,6 +1,6 @@ import { mkdtempSync, mkdirSync, writeFileSync, rmSync, symlinkSync } from "node:fs"; import { tmpdir } from "node:os"; -import { join } from "node:path"; +import { join, relative } from "node:path"; import { expect, test } from "vite-plus/test"; import { listSkills, @@ -8,6 +8,7 @@ import { listAgents, getSkillDetail, } from "../src/commands/config/inventory.ts"; +import { qwenworkMcpPath } from "../src/commands/mcp/agent-config.ts"; /** Build an isolated fake $HOME and clean it up afterwards. */ function withHome(fn: (home: string) => void): void { @@ -145,6 +146,32 @@ test("listMcpServers 无配置时返回空数组", () => { }); }); +test("listMcpServers 区分 Qoder、Qoder Work 与千问办公 QwenWork", () => { + withHome((home) => { + write( + home, + ".qoder/mcp.json", + JSON.stringify({ mcpServers: { qoder: { url: "https://qoder" } } }), + ); + write( + home, + ".qoderwork/mcp.json", + JSON.stringify({ mcpServers: { qoderwork: { url: "https://qoderwork" } } }), + ); + write( + home, + relative(home, qwenworkMcpPath(home)), + JSON.stringify({ mcpServers: { qwenwork: { type: "http", url: "https://qwenwork" } } }), + ); + + const servers = listMcpServers(home); + const byName = Object.fromEntries(servers.map((s) => [s.name, s])); + expect(byName.qoder).toMatchObject({ source: "qoder" }); + expect(byName.qoderwork).toMatchObject({ source: "qoderwork" }); + expect(byName.qwenwork).toMatchObject({ source: "qwenwork" }); + }); +}); + test("listAgents 报告安装与已连接 bailian-cli 的状态", () => { withHome((home) => { // Claude Code: installed + configured (base url present). diff --git a/packages/commands/tests/mcp-agent-config.test.ts b/packages/commands/tests/mcp-agent-config.test.ts new file mode 100644 index 00000000..747ca617 --- /dev/null +++ b/packages/commands/tests/mcp-agent-config.test.ts @@ -0,0 +1,502 @@ +import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { parse as parseToml } from "smol-toml"; +import { afterEach, beforeEach, describe, expect, test } from "vite-plus/test"; +import { + connectMcpAgents, + disconnectMcpAgents, + dshMcpPath, + opencodeMcpPath, + openclawMcpPath, + qwenworkMcpPath, + resolveMcpAgentTargets, + workbuddyMcpPaths, + zcodeMcpPath, + type McpConnectionSpec, +} from "../src/commands/mcp/agent-config.ts"; + +let home = ""; +let configDir = ""; + +beforeEach(() => { + home = mkdtempSync(join(tmpdir(), "bl-mcp-agent-")); + configDir = join(home, ".bailian"); +}); + +afterEach(() => { + rmSync(home, { recursive: true, force: true }); +}); + +function spec(transport: "streamable-http" | "sse" = "streamable-http"): McpConnectionSpec { + return { + name: "ImageGenerate", + serverCode: "ImageGenerate", + transport, + endpoint: `https://dashscope.aliyuncs.com/api/v1/mcps/ImageGenerate/${transport === "sse" ? "sse" : "mcp"}`, + headers: { + Authorization: "Bearer sk-test-secret", + "x-dashscope-openapisource": "BailianCLI", + "x-dashscope-source-config": + '{"channel":"bailian-cli","tags":{"t1":"public","t2":"bl","t3":"1.18.2"}}', + }, + }; +} + +function readJson(path: string): Record { + return JSON.parse(readFileSync(path, "utf8")) as Record; +} + +describe("MCP Agent registration", () => { + test("Codex writes a Streamable HTTP server without a type field", () => { + const codexDir = join(home, ".codex"); + mkdirSync(codexDir, { recursive: true }); + writeFileSync(join(codexDir, "config.toml"), 'model = "gpt-5"\n\n[features]\nfoo = true\n'); + + const [result] = connectMcpAgents({ + agents: ["codex"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + + expect(result.status).toBe("added"); + const config = parseToml(readFileSync(join(codexDir, "config.toml"), "utf8")) as Record< + string, + unknown + >; + expect(config.model).toBe("gpt-5"); + expect(config.features).toEqual({ foo: true }); + const entry = (config.mcp_servers as Record>).ImageGenerate; + expect(entry).toEqual({ + url: "https://dashscope.aliyuncs.com/api/v1/mcps/ImageGenerate/mcp", + http_headers: spec().headers, + }); + expect(entry.type).toBeUndefined(); + }); + + test("Codex rejects SSE before changing its config", () => { + const codexDir = join(home, ".codex"); + const configPath = join(codexDir, "config.toml"); + mkdirSync(codexDir, { recursive: true }); + writeFileSync(configPath, 'model = "gpt-5"\n'); + + expect(() => + connectMcpAgents({ + agents: ["codex"], + spec: spec("sse"), + cliVersion: "1.18.2", + home, + configDir, + }), + ).toThrow(/Codex.*SSE|SSE.*Codex/); + expect(readFileSync(configPath, "utf8")).toBe('model = "gpt-5"\n'); + }); + + test.each([ + { + agent: "claude-code" as const, + path: [".claude.json"], + streamable: { type: "http", url: spec().endpoint, headers: spec().headers }, + sse: { type: "sse", url: spec("sse").endpoint, headers: spec("sse").headers }, + }, + { + agent: "qwen-code" as const, + path: [".qwen", "settings.json"], + streamable: { httpUrl: spec().endpoint, headers: spec().headers }, + sse: { url: spec("sse").endpoint, headers: spec("sse").headers }, + }, + { + agent: "gemini" as const, + path: [".gemini", "settings.json"], + streamable: { httpUrl: spec().endpoint, headers: spec().headers }, + sse: { url: spec("sse").endpoint, headers: spec("sse").headers }, + }, + { + agent: "cursor" as const, + path: [".cursor", "mcp.json"], + streamable: { url: spec().endpoint, headers: spec().headers }, + sse: { url: spec("sse").endpoint, headers: spec("sse").headers }, + }, + { + agent: "qoder" as const, + path: [".qoder", "mcp.json"], + streamable: { url: spec().endpoint, headers: spec().headers }, + sse: { url: spec("sse").endpoint, headers: spec("sse").headers }, + }, + { + agent: "qoderwork" as const, + path: [".qoderwork", "mcp.json"], + streamable: { url: spec().endpoint, headers: spec().headers }, + sse: { url: spec("sse").endpoint, headers: spec("sse").headers }, + }, + { + agent: "qwenwork" as const, + path: [".qwenworkcn", "mcp.json"], + streamable: { type: "streamable-http", url: spec().endpoint, headers: spec().headers }, + sse: { type: "sse", url: spec("sse").endpoint, headers: spec("sse").headers }, + }, + ])( + "$agent maps both remote transports to its native JSON format", + ({ agent, path, streamable, sse }) => { + const configPath = join(home, ...path); + mkdirSync(join(configPath, ".."), { recursive: true }); + writeFileSync(configPath, JSON.stringify({ keep: { user: true } })); + + connectMcpAgents({ + agents: [agent], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(readJson(configPath)).toMatchObject({ + keep: { user: true }, + mcpServers: { ImageGenerate: streamable }, + }); + + connectMcpAgents({ + agents: [agent], + spec: spec("sse"), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(readJson(configPath)).toMatchObject({ + keep: { user: true }, + mcpServers: { ImageGenerate: sse }, + }); + }, + ); + + test("reconnect is idempotent and an unmanaged same-name server is never overwritten", () => { + const first = connectMcpAgents({ + agents: ["claude-code"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + const second = connectMcpAgents({ + agents: ["claude-code"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(first[0].status).toBe("added"); + expect(second[0].status).toBe("unchanged"); + + const otherHome = mkdtempSync(join(tmpdir(), "bl-mcp-agent-unmanaged-")); + try { + writeFileSync( + join(otherHome, ".claude.json"), + JSON.stringify({ mcpServers: { ImageGenerate: { type: "http", url: "https://user" } } }), + ); + expect(() => + connectMcpAgents({ + agents: ["claude-code"], + spec: spec(), + cliVersion: "1.18.2", + home: otherHome, + configDir: join(otherHome, ".bailian"), + }), + ).toThrow(/not managed|conflict/i); + expect( + (readJson(join(otherHome, ".claude.json")).mcpServers as Record) + .ImageGenerate, + ).toEqual({ type: "http", url: "https://user" }); + } finally { + rmSync(otherHome, { recursive: true, force: true }); + } + }); + + test("disconnect removes only an unchanged managed entry and never stores the API key in manifest", () => { + const claudePath = join(home, ".claude.json"); + writeFileSync( + claudePath, + JSON.stringify({ mcpServers: { userServer: { type: "http", url: "https://user" } } }), + ); + connectMcpAgents({ + agents: ["claude-code"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + + const manifestPath = join(configDir, "mcp-registrations.json"); + expect(readFileSync(manifestPath, "utf8")).not.toContain("sk-test-secret"); + + const [removed] = disconnectMcpAgents({ + agents: ["claude-code"], + name: "ImageGenerate", + home, + configDir, + }); + expect(removed.status).toBe("removed"); + const servers = readJson(claudePath).mcpServers as Record; + expect(servers.ImageGenerate).toBeUndefined(); + expect(servers.userServer).toEqual({ type: "http", url: "https://user" }); + }); + + test("all targets only installed supported agents", () => { + mkdirSync(join(home, ".codex"), { recursive: true }); + mkdirSync(join(home, ".gemini"), { recursive: true }); + mkdirSync(join(home, ".cursor"), { recursive: true }); + mkdirSync(join(home, ".qoderwork"), { recursive: true }); + + expect(resolveMcpAgentTargets("all", home)).toEqual(["codex", "cursor", "qoderwork", "gemini"]); + expect(resolveMcpAgentTargets("qwen-code", home)).toEqual(["qwen-code"]); + expect(existsSync(join(home, ".qwen"))).toBe(false); + + mkdirSync(join(qwenworkMcpPath(home), ".."), { recursive: true }); + expect(resolveMcpAgentTargets("all", home)).toEqual([ + "codex", + "cursor", + "qoderwork", + "qwenwork", + "gemini", + ]); + }); + + test("qoderwork writes ~/.qoderwork/mcp.json", () => { + mkdirSync(join(home, ".qoderwork"), { recursive: true }); + const [result] = connectMcpAgents({ + agents: ["qoderwork"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(result.status).toBe("added"); + expect(result.path).toBe(join(home, ".qoderwork", "mcp.json")); + expect(readJson(result.path)).toMatchObject({ + mcpServers: { ImageGenerate: { url: spec().endpoint, headers: spec().headers } }, + }); + }); + + test("qwenwork writes ~/.qwenworkcn/mcp.json and never uses Qoder Work", () => { + mkdirSync(join(home, ".qoderwork"), { recursive: true }); + const [result] = connectMcpAgents({ + agents: ["qwenwork"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(result.status).toBe("added"); + expect(result.path).toBe(join(home, ".qwenworkcn", "mcp.json")); + expect(result.path).not.toContain(".qoderwork"); + expect(existsSync(join(home, ".qoderwork", "mcp.json"))).toBe(false); + expect(readJson(result.path)).toMatchObject({ + mcpServers: { + ImageGenerate: { type: "streamable-http", url: spec().endpoint, headers: spec().headers }, + }, + }); + }); + + test("qwenwork prefers an existing ~/.qwenwork/mcp.json over creating .qwenworkcn", () => { + const intlPath = join(home, ".qwenwork", "mcp.json"); + mkdirSync(join(intlPath, ".."), { recursive: true }); + writeFileSync(intlPath, JSON.stringify({ keep: true })); + + const [result] = connectMcpAgents({ + agents: ["qwenwork"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(result.path).toBe(intlPath); + expect(readJson(intlPath)).toMatchObject({ + keep: true, + mcpServers: { + ImageGenerate: { type: "streamable-http", url: spec().endpoint, headers: spec().headers }, + }, + }); + }); + + test("disconnecting an unmanaged absent server does not create a manifest", () => { + const [result] = disconnectMcpAgents({ + agents: ["codex"], + name: "NotRegistered", + home, + configDir, + }); + + expect(result.status).toBe("absent"); + expect(existsSync(join(configDir, "mcp-registrations.json"))).toBe(false); + }); + + test("opencode writes remote MCP entries under mcp", () => { + mkdirSync(join(home, ".config", "opencode"), { recursive: true }); + const [result] = connectMcpAgents({ + agents: ["opencode"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(result.status).toBe("added"); + expect(result.path).toBe(opencodeMcpPath(home)); + expect(readJson(result.path)).toMatchObject({ + mcp: { + ImageGenerate: { + type: "remote", + url: spec().endpoint, + enabled: true, + oauth: false, + headers: spec().headers, + }, + }, + }); + }); + + test("openclaw writes mcp.servers with native transport names", () => { + mkdirSync(join(home, ".openclaw"), { recursive: true }); + connectMcpAgents({ + agents: ["openclaw"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(readJson(openclawMcpPath(home))).toMatchObject({ + mcp: { + servers: { + ImageGenerate: { + url: spec().endpoint, + transport: "streamable-http", + headers: spec().headers, + }, + }, + }, + }); + connectMcpAgents({ + agents: ["openclaw"], + spec: spec("sse"), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(readJson(openclawMcpPath(home))).toMatchObject({ + mcp: { + servers: { + ImageGenerate: { + url: spec("sse").endpoint, + transport: "sse", + headers: spec("sse").headers, + }, + }, + }, + }); + }); + + test("zcode writes mcp.servers with http and sse types", () => { + mkdirSync(join(home, ".zcode", "cli"), { recursive: true }); + const [result] = connectMcpAgents({ + agents: ["zcode"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(result.path).toBe(zcodeMcpPath(home)); + expect(readJson(result.path)).toMatchObject({ + mcp: { + servers: { + ImageGenerate: { + type: "http", + url: spec().endpoint, + enabled: true, + headers: spec().headers, + }, + }, + }, + }); + }); + + test("workbuddy writes mcp.json into each installed product directory", () => { + mkdirSync(join(home, ".workbuddy"), { recursive: true }); + mkdirSync(join(home, ".codebuddy"), { recursive: true }); + const [result] = connectMcpAgents({ + agents: ["workbuddy"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(result.status).toBe("added"); + const paths = workbuddyMcpPaths(home); + expect(paths).toEqual([ + join(home, ".workbuddy", "mcp.json"), + join(home, ".codebuddy", "mcp.json"), + ]); + for (const path of paths) { + expect(readJson(path)).toMatchObject({ + mcpServers: { + ImageGenerate: { type: "http", url: spec().endpoint, headers: spec().headers }, + }, + }); + } + expect(existsSync(join(home, ".workbuddy-ai"))).toBe(false); + + const [removed] = disconnectMcpAgents({ + agents: ["workbuddy"], + name: "ImageGenerate", + home, + configDir, + }); + expect(removed.status).toBe("removed"); + for (const path of paths) { + expect(readJson(path).mcpServers).toEqual({}); + } + }); + + test("deepseek-harness injects a streamable-http MCP client patch and preserves other inserts", () => { + mkdirSync(join(home, ".dsh"), { recursive: true }); + writeFileSync( + dshMcpPath(home), + ["- insert:", " - id: tool-other", " name: other-plugin", ""].join("\n"), + ); + const [result] = connectMcpAgents({ + agents: ["deepseek-harness"], + spec: spec(), + cliVersion: "1.18.2", + home, + configDir, + }); + expect(result.status).toBe("added"); + const content = readFileSync(dshMcpPath(home), "utf8"); + expect(content).toContain("tool-other"); + expect(content).toContain("@deepseek-ai/dsh-mcp-client"); + expect(content).toContain("streamable-http"); + expect(content).toContain(spec().endpoint); + expect(() => + connectMcpAgents({ + agents: ["deepseek-harness"], + spec: spec("sse"), + cliVersion: "1.18.2", + home, + configDir, + }), + ).toThrow(/DeepSeek Harness.*SSE|SSE.*DeepSeek Harness/); + }); + + test("all targets include newly supported agents when installed", () => { + mkdirSync(join(home, ".config", "opencode"), { recursive: true }); + mkdirSync(join(home, ".openclaw"), { recursive: true }); + mkdirSync(join(home, ".dsh"), { recursive: true }); + mkdirSync(join(home, ".zcode"), { recursive: true }); + mkdirSync(join(home, ".workbuddy-ai"), { recursive: true }); + expect(resolveMcpAgentTargets("all", home)).toEqual([ + "opencode", + "openclaw", + "deepseek-harness", + "zcode", + "workbuddy", + ]); + }); +}); diff --git a/packages/commands/vite.config.ts b/packages/commands/vite.config.ts index f1a02345..732788c3 100644 --- a/packages/commands/vite.config.ts +++ b/packages/commands/vite.config.ts @@ -8,9 +8,7 @@ export default defineConfig({ }, pack: { minify: true, - dts: { - tsgo: true, - }, + dts: true, }, lint: { options: { diff --git a/packages/core/lib/remote-telemetry/tracker.cjs b/packages/core/lib/remote-telemetry/tracker.cjs index 1de5d9da..4f4f7e8c 100644 --- a/packages/core/lib/remote-telemetry/tracker.cjs +++ b/packages/core/lib/remote-telemetry/tracker.cjs @@ -709,7 +709,7 @@ module.exports = (function (e) { e = this._processData(this._queue, n); } catch (e) {} if (e && e.length < t) return ((this._queue = []), void this.send(e)); - for (var r, o = []; this._queue.length; ) { + for (var r, o = []; this._queue.length;) { o.push(this._queue.shift()); try { r = this._processData(o, n); @@ -1080,7 +1080,7 @@ module.exports = (function (e) { var u, p = D(a); try { - for (p.s(); !(u = p.n()).done; ) { + for (p.s(); !(u = p.n()).done;) { var l = u.value; if (!1 === e.test(l.mac)) return l.mac; } diff --git a/packages/core/package.json b/packages/core/package.json index 1dfdd37b..1228a0a1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "bailian-cli-core", - "version": "1.28.0", + "version": "2.0.0", "description": "Core SDK for bailian-cli. See https://www.npmjs.com/package/bailian-cli for usage.", "homepage": "https://bailian.console.aliyun.com/cli", "bugs": { @@ -26,11 +26,11 @@ "./package.json": "./package.json" }, "publishConfig": { - "access": "public", "exports": { ".": "./dist/index.mjs", "./package.json": "./package.json" }, + "access": "public", "registry": "https://registry.npmjs.org/" }, "scripts": { diff --git a/packages/core/src/client/client.ts b/packages/core/src/client/client.ts index 067c5231..fd0a2716 100644 --- a/packages/core/src/client/client.ts +++ b/packages/core/src/client/client.ts @@ -110,6 +110,18 @@ export class Client { return this.deps.apiCred; } + /** + * Headers for registering a Bailian MCP endpoint in an external Agent. + * Credential resolution and channel attribution remain owned by the client. + */ + bailianMcpRegistrationHeaders(): Record { + const credential = this.requireApi(); + return { + Authorization: `Bearer ${credential.token}`, + ...trackingHeaders(this.deps.identity), + }; + } + /** * Full URL for a model-domain path. Services may supply a lazy default origin, * evaluated only when no flag/env/profile base URL was configured. diff --git a/packages/core/src/client/headers.ts b/packages/core/src/client/headers.ts index 5f8d30e9..05c066c7 100644 --- a/packages/core/src/client/headers.ts +++ b/packages/core/src/client/headers.ts @@ -1,10 +1,10 @@ /** * Shared HTTP request headers for all outgoing requests. * - * Centralises the `x-dashscope-source-config` and `x-dashscope-openapisource` - * headers so Bailian/DashScope API transports use the same product identity. - * Generic npm, OSS, and result-file transfers deliberately do not send this - * gateway-consumed metadata. + * Centralises the `x-dashscope-source-config`, `x-dashscope-openapisource`, + * and `X-Dashscope-Service` headers so Bailian/DashScope API transports use + * the same product identity. Generic npm, OSS, and result-file transfers + * deliberately do not send this gateway-consumed metadata. */ import type { Identity } from "../config/schema.ts"; @@ -14,6 +14,9 @@ export const CHANNEL = "bailian-cli"; /** Static source identifier advertised to the DashScope/Bailian OpenAPI gateway. */ export const OPEN_API_SOURCE = "BailianCLI"; +/** Marketplace / service attribution header (HTTP names are case-insensitive). */ +export const DASHSCOPE_SERVICE_HEADER = "X-Dashscope-Service"; + export type TrackingIdentity = Pick; export function sourceConfig(identity: TrackingIdentity): string { @@ -32,5 +35,6 @@ export function trackingHeaders(identity: TrackingIdentity): Record { }), ); expect(headers.get("x-dashscope-openapisource")).toBe("BailianCLI"); + expect(headers.get("x-dashscope-service")).toBe("bailian-cli"); expect(headers.get("authorization")).toBe("Bearer k"); }); @@ -68,6 +69,7 @@ test("adds UA but no tracking header on third-party hosts", async () => { expect(headers.get("user-agent")).toBe("bailian-cli/1.2.3"); expect(headers.get("x-dashscope-source-config")).toBeNull(); expect(headers.get("x-dashscope-openapisource")).toBeNull(); + expect(headers.get("x-dashscope-service")).toBeNull(); }); test("does not override a caller-provided User-Agent", async () => { @@ -89,6 +91,7 @@ test("passes non-URL-parseable inputs through without tracking headers", async ( expect(url).toBe("/relative/path"); expect(headers.get("x-dashscope-source-config")).toBeNull(); expect(headers.get("x-dashscope-openapisource")).toBeNull(); + expect(headers.get("x-dashscope-service")).toBeNull(); }); test("uses kscli identity and version in source config", () => { diff --git a/packages/core/tests/mcp-registration-headers.test.ts b/packages/core/tests/mcp-registration-headers.test.ts new file mode 100644 index 00000000..30729e90 --- /dev/null +++ b/packages/core/tests/mcp-registration-headers.test.ts @@ -0,0 +1,63 @@ +import { describe, expect, test } from "vite-plus/test"; +import { Client } from "../src/client/client.ts"; + +describe("Client.bailianMcpRegistrationHeaders", () => { + test("returns API authorization and CLI channel attribution headers", () => { + const client = new Client({ + identity: { + binName: "bl", + version: "1.18.2", + npmPackage: "bailian-cli", + clientName: "bailian-cli-test", + }, + settings: { + output: "json", + outputExplicit: false, + timeout: 30, + watermark: true, + verbose: false, + quiet: true, + dryRun: false, + telemetry: false, + }, + baseUrl: "https://dashscope.aliyuncs.com", + apiCred: { + token: "sk-test", + baseUrl: "https://dashscope.aliyuncs.com", + source: "flag", + }, + }); + + expect(client.bailianMcpRegistrationHeaders()).toEqual({ + Authorization: "Bearer sk-test", + "x-dashscope-openapisource": "BailianCLI", + "x-dashscope-source-config": + '{"channel":"bailian-cli","tags":{"t1":"public","t2":"bl","t3":"1.18.2"}}', + "X-Dashscope-Service": "bailian-cli", + }); + }); + + test("requires a model-domain credential", () => { + const client = new Client({ + identity: { + binName: "bl", + version: "test", + npmPackage: "bailian-cli", + clientName: "bailian-cli-test", + }, + settings: { + output: "json", + outputExplicit: false, + timeout: 30, + watermark: true, + verbose: false, + quiet: true, + dryRun: false, + telemetry: false, + }, + baseUrl: "https://dashscope.aliyuncs.com", + }); + + expect(() => client.bailianMcpRegistrationHeaders()).toThrow(/model-domain API key/); + }); +}); diff --git a/packages/core/tests/mcp.test.ts b/packages/core/tests/mcp.test.ts index 51009779..a502fbf0 100644 --- a/packages/core/tests/mcp.test.ts +++ b/packages/core/tests/mcp.test.ts @@ -393,8 +393,10 @@ test("McpSseClient:string JSON-RPC id 可匹配;仅认 event:endpoint", asyn test("McpClient:支持 text/event-stream 响应体", async () => { const originalFetch = globalThis.fetch; + const sentHeaders: Headers[] = []; globalThis.fetch = async (_input, init) => { + sentHeaders.push(new Headers(init?.headers)); const body = typeof init?.body === "string" ? JSON.parse(init.body) : {}; if (body.method === "notifications/initialized") { return new Response(null, { status: 202 }); @@ -417,6 +419,10 @@ test("McpClient:支持 text/event-stream 响应体", async () => { try { const client = new McpClient(testDeps(), "https://example.test/mcp", "sk-test"); await client.initialize(); + expect(sentHeaders.length).toBeGreaterThan(0); + for (const headers of sentHeaders) { + expect(headers.get("X-Dashscope-Service")).toBe("bailian-cli"); + } } finally { globalThis.fetch = originalFetch; } diff --git a/packages/core/vite.config.ts b/packages/core/vite.config.ts index 7550a27a..b7c609ae 100644 --- a/packages/core/vite.config.ts +++ b/packages/core/vite.config.ts @@ -3,9 +3,7 @@ import { defineConfig } from "vite-plus"; export default defineConfig({ pack: { minify: true, - dts: { - tsgo: true, - }, + dts: true, }, lint: { options: { diff --git a/packages/e2e/package.json b/packages/e2e/package.json index f1d55400..9e9797de 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -18,9 +18,9 @@ "devDependencies": { "@types/node": "catalog:", "typescript": "^6.0.2", - "vite-plus": "0.1.22" + "vite-plus": "catalog:" }, "engines": { - "node": ">=22.12.0" + "node": "^22.18.0 || >=24.11.0" } } diff --git a/packages/kscli/package.json b/packages/kscli/package.json index 2927dbd0..3475d000 100644 --- a/packages/kscli/package.json +++ b/packages/kscli/package.json @@ -1,6 +1,6 @@ { "name": "knowledge-studio-cli", - "version": "1.28.0", + "version": "2.0.0", "description": "Lightweight RAG CLI for Aliyun Model Studio — focused on knowledge-base retrieval.", "keywords": [ "alibaba-cloud", @@ -62,7 +62,7 @@ "e2e": "workspace:*", "typescript": "^6.0.2", "undici": "catalog:", - "vite-plus": "0.1.22", + "vite-plus": "catalog:", "yaml": "catalog:" }, "engines": { diff --git a/packages/kscli/vite.config.ts b/packages/kscli/vite.config.ts index f8bef246..f8c61f9b 100644 --- a/packages/kscli/vite.config.ts +++ b/packages/kscli/vite.config.ts @@ -17,9 +17,7 @@ export default defineConfig({ outputOptions: { codeSplitting: false, }, - dts: { - tsgo: true, - }, + dts: true, exports: true, }, lint: { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 0699ccad..d4009cb9 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "bailian-cli-runtime", - "version": "1.28.0", + "version": "2.0.0", "description": "Runtime framework for bailian-cli (createCli, registry, args, output, pipeline). See https://www.npmjs.com/package/bailian-cli for usage.", "homepage": "https://bailian.console.aliyun.com/cli", "bugs": { @@ -26,11 +26,11 @@ "./package.json": "./package.json" }, "publishConfig": { - "access": "public", "exports": { ".": "./dist/index.mjs", "./package.json": "./package.json" }, + "access": "public", "registry": "https://registry.npmjs.org/" }, "scripts": { @@ -52,7 +52,7 @@ "ajv": "catalog:", "e2e": "workspace:*", "typescript": "^6.0.2", - "vite-plus": "0.1.22", + "vite-plus": "catalog:", "yaml": "catalog:" }, "engines": { diff --git a/packages/runtime/vite.config.ts b/packages/runtime/vite.config.ts index f1a02345..732788c3 100644 --- a/packages/runtime/vite.config.ts +++ b/packages/runtime/vite.config.ts @@ -8,9 +8,7 @@ export default defineConfig({ }, pack: { minify: true, - dts: { - tsgo: true, - }, + dts: true, }, lint: { options: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56306c92..b9d42d57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,8 +40,8 @@ catalogs: specifier: ^6.27.0 version: 6.27.0 vite-plus: - specifier: latest - version: 0.1.22 + specifier: 0.3.3 + version: 0.3.3 yaml: specifier: ^2.8.3 version: 2.8.3 @@ -50,8 +50,9 @@ catalogs: version: 3.4.0 overrides: - vite: npm:@voidzero-dev/vite-plus-core@latest - vitest: npm:@voidzero-dev/vite-plus-test@latest + vite: npm:@voidzero-dev/vite-plus-core@0.3.3 + vitest: 4.1.11 + ws@>=8.0.0 <8.21.0: 8.21.3 importers: @@ -62,7 +63,7 @@ importers: version: 4.23.0 vite-plus: specifier: 'catalog:' - version: 0.1.22(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) packages/bailian-kb-dsh: dependencies: @@ -135,7 +136,7 @@ importers: version: 5.9.3 vite-plus: specifier: 'catalog:' - version: 0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) + version: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3) packages/cli: dependencies: @@ -180,8 +181,8 @@ importers: specifier: 'catalog:' version: 6.27.0 vite-plus: - specifier: 0.1.22 - version: 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) + specifier: 'catalog:' + version: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) yaml: specifier: 'catalog:' version: 2.8.3 @@ -223,8 +224,8 @@ importers: specifier: ^6.0.2 version: 6.0.3 vite-plus: - specifier: 0.1.22 - version: 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) + specifier: 'catalog:' + version: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) packages/core: dependencies: @@ -255,7 +256,7 @@ importers: version: 6.0.3 vite-plus: specifier: 'catalog:' - version: 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) + version: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) packages/e2e: dependencies: @@ -270,8 +271,8 @@ importers: specifier: ^6.0.2 version: 6.0.3 vite-plus: - specifier: 0.1.22 - version: 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0) + specifier: 'catalog:' + version: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) packages/kscli: dependencies: @@ -313,8 +314,8 @@ importers: specifier: 'catalog:' version: 6.27.0 vite-plus: - specifier: 0.1.22 - version: 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) + specifier: 'catalog:' + version: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) yaml: specifier: 'catalog:' version: 2.8.3 @@ -353,8 +354,8 @@ importers: specifier: ^6.0.2 version: 6.0.3 vite-plus: - specifier: 0.1.22 - version: 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) + specifier: 'catalog:' + version: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) yaml: specifier: 'catalog:' version: 2.8.3 @@ -950,15 +951,6 @@ packages: '@deepseek-ai/schemastery@3.18.1': resolution: {integrity: sha512-Qn0FCSwCQnpnj6SB31I6i2sIKgKWnkbJM8O0EU91Gv2UsYVvtZTl6IA0sCwk2e2MZf5S8w5hpq9QkeVvK9qwxg==} - '@emnapi/core@1.10.0': - resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - - '@emnapi/wasi-threads@1.2.1': - resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@esbuild/aix-ppc64@0.28.1': resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} @@ -1118,597 +1110,296 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@napi-rs/wasm-runtime@1.1.4': - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - '@openagentpack/sdk@0.7.1': resolution: {integrity: sha512-OENks8UdfWFanvhJIVbqyUX1+XGavHnrxDiFx4SoJoGRXi45cOgyYtWWbG5VdDI2I5Dpo9eGNaw/JtDnkdxUcg==} engines: {node: '>=18.17.0'} - '@oxc-project/runtime@0.129.0': - resolution: {integrity: sha512-0+S67blQakgeNqoKGozOUp5rQBrz2ynXZ2QIINXZPiafsD0YL0UogB9hAWc1S7k6VSNwKYC/N7MqT0V6IzpHkQ==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@oxc-project/runtime@0.133.0': - resolution: {integrity: sha512-PkvjA1Lq5++V5S1E6Patr92ZVcieE6EalDr1VJTqv4BnjZdOUC4W3p8k1wMXSd5/2aFP4b/A6N5sg2Bkzcr9vQ==} + '@oxc-project/runtime@0.150.0': + resolution: {integrity: sha512-vC4tN4n2c+gVq69Oi6CoZxGk/1mYjLiN4hVEYwvtuns/S4QwUBiJYViwLGLxPaLQnsY5FQDgGs+h6moAmSedvA==} engines: {node: ^20.19.0 || >=22.12.0} - '@oxc-project/runtime@0.143.0': - resolution: {integrity: sha512-zIuXUf+YGIgsPk0xlQmzTY8NCSc8jE/pSfDodlQ9H3EGZABmr+AtIjXRrnpQAXuXzhDSNqZz9cuhud8hDDLvpg==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@oxc-project/types@0.127.0': - resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} - - '@oxc-project/types@0.129.0': - resolution: {integrity: sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==} - - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} - - '@oxc-project/types@0.143.0': - resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} - '@oxc-project/types@0.146.0': resolution: {integrity: sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==} - '@oxfmt/binding-android-arm-eabi@0.48.0': - resolution: {integrity: sha512-uwqk+/KhQvBIpULD8SMM/zAafMRC/+DV/xsEQjkkIsJ/kLmEI/2bxonVowcYTiXqqZ/a0FEW8DPkZY3VvwELDA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] + '@oxc-project/types@0.150.0': + resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==} - '@oxfmt/binding-android-arm-eabi@0.62.0': - resolution: {integrity: sha512-pdsv0C4gPjJ8H1+sd8u0BDx+yLACTL+rgeMIOL1ln4ihSnhw8CWXtYWgvcSkyTfgGBIzFKab+d8rx9Xl4en/Kw==} + '@oxfmt/binding-android-arm-eabi@0.68.0': + resolution: {integrity: sha512-dhfYPbzv/h9JgHjNkl2R6sOjUfxDyLGOZVb3g8/ScaTNwwJcYgmHh8kcYFDUhinuy1QAoANCWUvw1jlk+z6gAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.48.0': - resolution: {integrity: sha512-VUCiKuXK5+McVssgHEJdrcGK7hRJzrRb36zm9/jwzMholyYt4BgXhw5Nm1V1DX6Ce717Zi/1jk432b/tgmQgtQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@oxfmt/binding-android-arm64@0.62.0': - resolution: {integrity: sha512-WC3YQ7uS/KtDrjmqwBviwFKe9qeoi+eXx8aX1z/ffG23Md75myjrJaQqTuJvdOLPoa4EYTjDWH0dHXfwulCVog==} + '@oxfmt/binding-android-arm64@0.68.0': + resolution: {integrity: sha512-v3Njdi6qY0O/5eGfg01ww2w6gTn2mUvZ72Bnx1/UN53A9wruh3Nk6otc3WkgJLkXD4Qgz1SOcVQieH1oD03V9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.48.0': - resolution: {integrity: sha512-IkKp8rnIyQLW6Jt+6jragCbUVYSayk55lapiprLjIVvt4NczLyO/nwX2GgefLQ5iaBdfS8UEAFgCs/pLO6Cl0w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@oxfmt/binding-darwin-arm64@0.62.0': - resolution: {integrity: sha512-GM8Yf3LjjaR1I8PD0SfeoIlwhsh9GvSF+cQ8sf624Yxnjsyumn95aFzYfKJVefblfDIiOAnZ7QVm2sa21Er/0Q==} + '@oxfmt/binding-darwin-arm64@0.68.0': + resolution: {integrity: sha512-ei4MCMzHFREmZwPJ7KuWUB4kBuHdsgDrnXGJVcEAopU7fj7S42I8BChdFILWdHvhFqR08FLJtOfbZIr2CDw0cA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.48.0': - resolution: {integrity: sha512-+aFuhsGIuvnoOjXyKVHMhPKJZR1kQkAl8QyrKoMlA7yJsSTC3N0Asl53La8TChSHhW8epToQ/Q0nvLmEmfNmLg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@oxfmt/binding-darwin-x64@0.62.0': - resolution: {integrity: sha512-d5THp7F8bCxLqNogEXDORRsQD6dosf3EyFtnXfBer6v+8tGdcWIjoDX9WaXrrF/26zOmL8qHpPTKCEvpBDmZkQ==} + '@oxfmt/binding-darwin-x64@0.68.0': + resolution: {integrity: sha512-UrKgzZxYhwB9DSvTX+vdgl9M32wLUNKJcAKIoiyx/Kzn/zveqi7W6kYVcRroFMhS3Kwz0KhTk3WBeSuQn4YCTg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.48.0': - resolution: {integrity: sha512-fbqzQL8FjI9gGnktI7RIo0dksDziTAYBy7xlI7jU7eID5fxLF/25fS4Xj6GydD8Y5oWHL83U4NK160QaOAxtyg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@oxfmt/binding-freebsd-x64@0.62.0': - resolution: {integrity: sha512-1DnrtXGZooOZ0fHgAXZUaDQzBVh1CM2MNW4oBXyQ2aWKvCHjyljvT9fgBkOM0fEOb96X5eqtcfJ0YUVt9jj66g==} + '@oxfmt/binding-freebsd-x64@0.68.0': + resolution: {integrity: sha512-6jrEKgpJbilM1QaRv7hEtKXr4p4AK4jvvyOtajwyhu0kOz3e0O7OLnSTk6tBotRqCcUC4ehZRJ1Zx+Y99wieLw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.48.0': - resolution: {integrity: sha512-hn4i0zhAyTiB3ZHjQfYUZkDvrbVkohw1S7pySWxWUoZ87HnkDoTFThj7QTxk40hNPOTUP0vHbPRNamFIv1HBJQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxfmt/binding-linux-arm-gnueabihf@0.62.0': - resolution: {integrity: sha512-4pQDHOYRH+Huqe0StIaWyvk2CVl/aTaqSrbZpA3/pLS2xH24ME7lBgYprhQF2fRkHBzhGGGKliwxFsDdHwx59g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxfmt/binding-linux-arm-musleabihf@0.48.0': - resolution: {integrity: sha512-R4WBD9qF3QM9hqgdAa+fBGXmquTvDUujrPQ36t2Sjk8RPOSKGHDeN7l/khr10hqbQaOq9KCgPHG9ubNET/X/RQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.68.0': + resolution: {integrity: sha512-YOIVnKOBaLeGullskS179N12hjSAdFYnzLjOaKiLhAKNWgnShq9w4xRdtmUm6BlnP65l2/EA9Aw/KlftNxDM7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.62.0': - resolution: {integrity: sha512-X0jAaZJFMCVKhB6YyWVTQ/wN2DLsBcZKSMqTS76bF6riT+XZdtg2FPEdjDvdVbunO9cG+tWiVaEs4Zs38lxYog==} + '@oxfmt/binding-linux-arm-musleabihf@0.68.0': + resolution: {integrity: sha512-xW5XoEHVNqydPBv2KXvk9lmEzyAlOQHVEazKoXUuAacqekjya+OdiaFjjEBl0oJD02raG8g3TRl9OVCh9PDIHA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.48.0': - resolution: {integrity: sha512-5bVdwSwlm1M8wbYCorLOxWxUBw/8tBvHYyQNIfwWVPwOJaj5vg1APSGJQVpwJfV5VNE9PSrR91UKEpoNwHhqUA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-arm64-gnu@0.62.0': - resolution: {integrity: sha512-682Z8T5s8T5ATArYtsejKvbIfd8LEAXyyDkKkoZVq8HND7Vx8TYLlrDjDSeYfodMeVwHOgkj13lJYR8cj6vUSg==} + '@oxfmt/binding-linux-arm64-gnu@0.68.0': + resolution: {integrity: sha512-QCvYwVVQieu6oyJglAgV9vH/YMDxZyR4cwVSYtoq9oOXd5N+D3TDUBjNwxFrLn5AdcJZOcvn/7IB17vJGp+2Og==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.48.0': - resolution: {integrity: sha512-vCS3Fk7gFslTqE1lUE2IlroyVV7u/9SmMA/uBqDoshuck2psGWcjW0ePyPZI3rM3+qtf2pDaMVIKMHozraifuw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-linux-arm64-musl@0.62.0': - resolution: {integrity: sha512-lk25fAl7KWaLWVJcW0CHEXB7QlQZtx5eDkjpaGMK0hzXTjUe0Wmlu8IKuFHoviSOcEJedRTs4VE/506VqGxGew==} + '@oxfmt/binding-linux-arm64-musl@0.68.0': + resolution: {integrity: sha512-4TVz5iFQ8ndrHnhX50UXiz9BIWAtUSOHJ6Nus4qWFfJBXq/Ed/krXbF/ehJu42BXM5tIvBs99jNIM22s9agY5A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.48.0': - resolution: {integrity: sha512-gKtfFfueUClXDumyoHUbymqRf7prHejOOyzJK0eIJn93GF9JBdFHdo60TM1ZBHxkEwZvjuOgHmKtneKbEOc/Eg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-ppc64-gnu@0.62.0': - resolution: {integrity: sha512-SFyNqHQLwySceWNLhiSldx7wPXRAzP0L0WcW9GegP3uWrpZGJiZlQO85NbHAFPEfxR9PhZ9qSnZryEh7+v+4Gw==} + '@oxfmt/binding-linux-ppc64-gnu@0.68.0': + resolution: {integrity: sha512-qLe3ao0RP84bnPxBvRI+GnlK/jybo538NWu0Xrm+zYeTmJtpzqLhnnd5BH21NafqKnplbGZjtN1cnrOlWF73lw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.48.0': - resolution: {integrity: sha512-SYt0UhOvZD/UwZz9sXq6J2uAw8o24f5VZpLB2DH01f6MevshmlgakQlZe2lwek2sZJkd07eLu7mZa0g7yeiw7Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-riscv64-gnu@0.62.0': - resolution: {integrity: sha512-KYj55C1ywJfHo6+aKDuEmUtVEdJALsC5GwayDGsI6FGz2GxFqNr/mA8nxVsNbJzm7sE5MRqTQ9ziImSzhYXysA==} + '@oxfmt/binding-linux-riscv64-gnu@0.68.0': + resolution: {integrity: sha512-Yvyl7a6gbb0vM6r925KW2dO+/CmXySO5TVbcX7o/uZJ+d108HFOG0TxIyHApmn5USuj5mhDPxzhiVwOlGP7uSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.48.0': - resolution: {integrity: sha512-JLbrwck2AopG4ud/XklZO5N+qxGC7cS7ROvXZVNfx0MCLDDL2kGOLvzuWORkVjnjAM0CMAfIMU2zNBtQbM+4dw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-linux-riscv64-musl@0.62.0': - resolution: {integrity: sha512-BhZDNo5GOU5nC378RhD0/XpvaEBHsH3HLgJp8YZX3A0InC7oivzA63HsRmiXFLtLSHAstEVrDf6fbC7Rs8Jh/A==} + '@oxfmt/binding-linux-riscv64-musl@0.68.0': + resolution: {integrity: sha512-mJlFuFVCxzrYM5sFStN433D/s/mb6Wq4aCQAM02vs/OudHywnaSAd2rb1vlYUJtqdYIciJtiasuxvfbYkv5fLg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.48.0': - resolution: {integrity: sha512-mdxt5L8OQLxkQH+JVpdC/lknZNe0lX4hlO3d8+xvw2wToo+iDrid9tiGOd5bmHfUVd5wVhrUry0qlu5vq66NkQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-s390x-gnu@0.62.0': - resolution: {integrity: sha512-UyAFmyHkgSgUJ/wOM4p3U8AC2yAFvRH5PNBs7TnK0fObTT/XSWcdr/lAzPSWaekHaZFaMeFZyk9n93Joq3J93A==} + '@oxfmt/binding-linux-s390x-gnu@0.68.0': + resolution: {integrity: sha512-RlfSg++qs1hbKltRR6lYvV9EoI3MdlfSQD9w1hdHVYjHqjIn1tkH4FWOpMSmjKGN20zr+nI+W9o4ARogCDudGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.48.0': - resolution: {integrity: sha512-oEz1BQwMrV7OMEFx/3VPDU3n9TM0AnxpktDYXjEg5i6nTX87wo18wSfBvkl4tzAICdKtoAQAdBIl7Y7hsPlx5w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-x64-gnu@0.62.0': - resolution: {integrity: sha512-1iYMP0leytWazFubD/WnINJuIrzRPuoL1aWEJdlGezEzDbTxcd29R4r8IUzP2oWeKst5V02uMJgR2NILlPlG6w==} + '@oxfmt/binding-linux-x64-gnu@0.68.0': + resolution: {integrity: sha512-nyzRB9U+dlYUKu3pMo3afHzZBUv/oTHZMG36ZfJViNVfOIzp70Q4GS8FFRGgYJ/p0zcyDCgpBvYISOdJOMh+jQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.48.0': - resolution: {integrity: sha512-g2SKTTurP5mWjd8Ecait0erYqmltL4IqW1EwttM25BxM6NiTt4ubobJYMR1uox1V2QgG4UfHH10CGRvWlUixjw==} + '@oxfmt/binding-linux-x64-musl@0.68.0': + resolution: {integrity: sha512-iCx3sbZRIvGrL1RafphEiUKBaW1lc0/tAjKOIB/Wjw2+STRBEdu5+fH1Gc1faEWEmc2k5Ks4iUUV54Zd5C9a1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-x64-musl@0.62.0': - resolution: {integrity: sha512-4rA/URtJSTVNVAQz6Q8wf7SaRvOXVy+TizriT9hs/Y1XhLR/R+92uWKRQG8yFWRAIEBbFHJ6WevQcl/G9SXEfw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-openharmony-arm64@0.48.0': - resolution: {integrity: sha512-CIg24VgheEpvolHL2gQuax5qcQ602bRMHrJ9g8XsQr3iVj9aSPgopigBKuMqrXsupwkrU+RQCn5cG8PgFntR6w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@oxfmt/binding-openharmony-arm64@0.62.0': - resolution: {integrity: sha512-mSZuFHU2ar1KLUjXpI2QBQcJ1VsOB3mOCgQXuXCpKs19dgh4u+OaovNfrWDfiJb+ihJ2+f7YFcaO9bS2dlTCXA==} + '@oxfmt/binding-openharmony-arm64@0.68.0': + resolution: {integrity: sha512-x2X5AZez7OgyLLFpwIgItoXBUqudDM7yiaTsxv8R8vKQ6e81l0jVw0NFeUCXzcl1sAJq8h+tC8N4mY8EiMeL4w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.48.0': - resolution: {integrity: sha512-zeaWkcxcEULwkGF3I/HgEvcDPN8buYDrxibBUa/IFh5Vmwyge+KpLO+hEwSovW349H0O/C0Z2kaFmEzEDm00/Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@oxfmt/binding-win32-arm64-msvc@0.62.0': - resolution: {integrity: sha512-OfwuhkcjDlqC4EgDojtiV9mzpLqeB9KqTOWPOjLEYBVdDCVSxqW3qzp/xcIxsbtI0UgGCnKvAqYKyY25kf5JZw==} + '@oxfmt/binding-win32-arm64-msvc@0.68.0': + resolution: {integrity: sha512-AHVPjXkenLPQUh6kB8zSC8pX2ct9r4T1Edk9r/RNJyov6wPsS5uAfYtipwG4chn6+3bPFG5rI/3DxEeH8vib1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.48.0': - resolution: {integrity: sha512-yiEKnIAGvx5CyZQOlMaNlZkAbwT7/Quk0j3WLt+PR5hK+qYjPTRRJYDfD77wCBPLvEYAG41v4KG3iL0H+uxoxg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@oxfmt/binding-win32-ia32-msvc@0.62.0': - resolution: {integrity: sha512-P9uDDNFRzghO3X8QAzhkjKhK7JvtABsVn8UYtFX7uor12IAnwNt8nNIctvfWj1JkQU/kE+fmLRPiw7XlrIHsZw==} + '@oxfmt/binding-win32-ia32-msvc@0.68.0': + resolution: {integrity: sha512-n09SjEk5VH7z8Hl4WVP7hho+cCwGViENkQFiM45vbW85dJd7kEhWaHRUobaPzEmrWyu6uumd4EuNfNyDKLtzDA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.48.0': - resolution: {integrity: sha512-GSD2+7t2UoVMV2NgxXypa4bKewflPMAjYnF0Xw9/ht82ZfafAHhb8STwrEd7wlH2PFogt5zw3WVCxYJaHUdbeQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@oxfmt/binding-win32-x64-msvc@0.62.0': - resolution: {integrity: sha512-dlI5SY7XYQCiCBafntWagCR6HcAJB/NpsLtdlPx8x08+Osz8Ok1HHz1GZuusegCe/VoJ6pAnF5a4pd5OZAq7qQ==} + '@oxfmt/binding-win32-x64-msvc@0.68.0': + resolution: {integrity: sha512-gPe+dJLXaPuWPWqlpklDAJp0k+K9KhQPYiQLHfb+i2rmFuUGfJ/5Qlj6tr1mO6of5g0DiLjG/XCFHIaPhotqqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint-tsgolint/darwin-arm64@0.22.1': - resolution: {integrity: sha512-4150Lpgc1YM09GcjA6GSrra1JoPjC7aOpfywLjWEY4vW0Sd1qKzqHF1WRaiw0/qUZ40OATYdv3aRd7ipPkWQbw==} - cpu: [arm64] - os: [darwin] - '@oxlint-tsgolint/darwin-arm64@7.0.2001': resolution: {integrity: sha512-CUJEdbSZ54+Xy9OXqOhWLTKZKV0BBiV7C2i/ygyVmXtkUNXx5YCzN8DpSSshTAKktoL7S+tnQ/ftFG/i7X896w==} cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.22.1': - resolution: {integrity: sha512-vFWcPWYOgZs4HWcgS1EjUZg33NLcNfEYU49KGImmCfZWkflENrmBYV4HN/C0YeAPum6ZZ/goPSvQrB/cOD+NfA==} - cpu: [x64] - os: [darwin] - '@oxlint-tsgolint/darwin-x64@7.0.2001': resolution: {integrity: sha512-pXfBb5BqONCcgrXQNUZWXgiYmRSWJzd97S8i41VVOh6ut0tyo+cJ5FKFpczDHxiVNfj/3e7c9B4MtztNdpIVCw==} cpu: [x64] os: [darwin] - '@oxlint-tsgolint/linux-arm64@0.22.1': - resolution: {integrity: sha512-6LiUpP0Zir3+29FvBm7Y28q/dBjSHqTZ5MhG1Ckw4fGhI4cAvbcwXaKvbjx1TP7rRmBNOoq/M5xdpHjTb+GAew==} - cpu: [arm64] - os: [linux] - '@oxlint-tsgolint/linux-arm64@7.0.2001': resolution: {integrity: sha512-roP7zujb/QDPzDwEKsFFpzNHHy91/Y7oX9vQXk78ekyZtcQj1QXDIMH33gjDdHBfRl4K9pZ36xhRgrP4Zr+R8A==} cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.22.1': - resolution: {integrity: sha512-fuX1hEQfpHauUbXADsfqVhRzrUrGabzGXbj5wsp2vKhV5uk/Rze8Mba9GdjFGECzvXudMGqHqxB4r6jGRdhxVA==} - cpu: [x64] - os: [linux] - '@oxlint-tsgolint/linux-x64@7.0.2001': resolution: {integrity: sha512-UDezNqdECVmngu2TPnjaS1YoAmcTaBoI5lV9vk3VahBxoi+I5r9k3iJTT7qZoYWOXTD/7T7bNcwRgrocR6BscQ==} cpu: [x64] os: [linux] - '@oxlint-tsgolint/win32-arm64@0.22.1': - resolution: {integrity: sha512-8SZidAj+jrbZf9ZjBEYW0tiNZ+KasqB2zgW26qdiPpQSF/DzURnPmXz651IeA9YsmbVdHGIooEHUmev6QJdquA==} - cpu: [arm64] - os: [win32] - '@oxlint-tsgolint/win32-arm64@7.0.2001': resolution: {integrity: sha512-uJZhqB6pdXLuN+AD1F5082byyQti/NPmJA77GtcFlmT2HzRelqbNls3SaIqxpjdFgvSBF9g0yOKGBkGFg7kX8Q==} cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.22.1': - resolution: {integrity: sha512-QweSk9H5lFh5Y+WUf2Kq/OAN88V6+62ZwGhP38gqdRotI90luXSMkruFTj7Q2rYrzH4ZVNaSqx7NY8JpSfIzqg==} - cpu: [x64] - os: [win32] - '@oxlint-tsgolint/win32-x64@7.0.2001': resolution: {integrity: sha512-FkDRm8hx9OwzGQqyWG1tO5QrTLRApff9DzSgpz9QZau37BR8d1VYKOxMLGf6shPZntJFoTwIIJYT68VndYDCog==} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.63.0': - resolution: {integrity: sha512-A9xLtQt7i0OA1PoB/meog6kikXI9CdwEp7ZwQqmgnpKn3G3b1orvTDy8CQ6T7w1HvDrgWGB78PkFKcWgibcTCg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - - '@oxlint/binding-android-arm-eabi@1.77.0': - resolution: {integrity: sha512-E06sKWS6PiI6HRxS1wyQg22HvApt01hI7fV+T3wUk3OSbaaP4a3hYGY/MIQDmASqCiRjBdpRQYkgMkqH82cWmQ==} + '@oxlint/binding-android-arm-eabi@1.83.0': + resolution: {integrity: sha512-0yGY24EwsLk5YDe6F+VkmZyRHSwJDALa3nIrPpq7FXmp2lV2d0TzvBCGeZk+wgiULRGr5blhyr4QMp5KCXJUqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.63.0': - resolution: {integrity: sha512-SQo+ZMvdR9l3CxZp5W5gFNxSiDxclY6lOzzNpKYLF8asESpm3Pwumx0gER5T7aHLF1/2BAAtLD3DiDkdgy4V1A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@oxlint/binding-android-arm64@1.77.0': - resolution: {integrity: sha512-NvsKz0KZxTp9cYWPLf+FXaSZwB3oO3peAjtukpOMBgse2vhQSoIIVqeO1yR0lEo/UcdZIDL18uq+kL0LzQ0ytA==} + '@oxlint/binding-android-arm64@1.83.0': + resolution: {integrity: sha512-hHfJ0vc17A4iUjH5p9BsTUPYbYRNxGpvD2lbu1aBRk54bzNIx9o5TtYF39QPZcV95DagZd+4DEAw2RH3G2ZsMg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.63.0': - resolution: {integrity: sha512-6W82XjJDTmMnjg30427l0dufpnyLoq7wEukKdM6/g2VIybRVuQiBVh43EA4b+UxZ3+tLcKm+Or/pXGNgLCEU8g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@oxlint/binding-darwin-arm64@1.77.0': - resolution: {integrity: sha512-bgjTn6nW4bQCFBvSvuHCpDD+sONvmpo4lGI4PxzMt1quBA+xYxhczk6RiCn3GZ9gY8uhaBbwhj9MdKGfu6T9DA==} + '@oxlint/binding-darwin-arm64@1.83.0': + resolution: {integrity: sha512-hsOjYjszLb/3zym/TkzUMPAoQlTJcuzSyEPOAyA+skXJIX9M0o+4JfOtqopX/Vf4hSLrJ98j0nvFo23gzk8auQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.63.0': - resolution: {integrity: sha512-CnWd/YCuVG5W1BYkjJEVbJG11o526O9qAwBEQM+nh8K19CRFUkFdROXCyYkGmroHEYQe4vgQ6+lh3550Lp35Xw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@oxlint/binding-darwin-x64@1.77.0': - resolution: {integrity: sha512-aotaIttH1R6j1Rwhx0M0htgeZyGtVQqYNTVEYMN/UcgHPquGA6kmk9OyuDc3a2GKUQBC+3C3GVQCcrRPMYqAFA==} + '@oxlint/binding-darwin-x64@1.83.0': + resolution: {integrity: sha512-mjh5oH2EA+wl5yRJYT9K9G61O2zFlpuv+yf2JwZOi0+dq2FnTUtm1h8i+5Ik0fXPWIu/k84I1psZR9aQsLAnyA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.63.0': - resolution: {integrity: sha512-a4eZAqrmtajqcxfdAzC+l7g3PaE3V8hpAYqqeD3fTxLXOMFdK3eNTZrU80n4dDEVm0JXy1aL5PqvqWldBl6zYA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@oxlint/binding-freebsd-x64@1.77.0': - resolution: {integrity: sha512-nNx/wta7ksRAdYvq+l4AWjXkLxEXHALhENxjj2cYbQAIR4ybaA5L+hCbE63HOmft5czQ6ks+hb8vmEAnn7YGPg==} + '@oxlint/binding-freebsd-x64@1.83.0': + resolution: {integrity: sha512-fNHr64/YaO8YssuoDVC8+F4Uk5enR86q5uxfHkQrjAPs1dbAILOrD2uaud+J7MO8Fx774g44ERLD0IGIvZE48w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.63.0': - resolution: {integrity: sha512-tYUtU9TdbU3uXF5D62g5zXJ13iniFGhXQx5vp9cyEjGdbSAY3VdFBSaldYvyoDmgMZ0ZYuwQP1Y4t2Fhejwa0w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxlint/binding-linux-arm-gnueabihf@1.77.0': - resolution: {integrity: sha512-tMLLjM7xXtzXisVCzkOTXNCy9bZVId2wteNwjohlFDR/jY6WagpEDA1c1wu4xRc20Hojaxj+V6DSR7gbKxijWA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxlint/binding-linux-arm-musleabihf@1.63.0': - resolution: {integrity: sha512-I5r3twFf776UZg9dmRo2xbrKt00tTkORXEVe0ctg4vdTkQvJAjiCHxnbAU2HL1AiJ9cqADA76MAliuilsAWnvg==} + '@oxlint/binding-linux-arm-gnueabihf@1.83.0': + resolution: {integrity: sha512-Qpwy3zzAwMj+8/lyYItHmkSMwbkprFNWTK7jPYDOxSyxEhaSLOWYUTCMkjF334J8/WD0nznCCsoBbIH6hpsuIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.77.0': - resolution: {integrity: sha512-MiAFDFaqR0tmHTAyo0YDcZ5hyLREdYw/RQhc2R3cbT+8O3tB+zqPM2th9TTQ+Uo3jn/embS+DO+HyX9ztCPkOQ==} + '@oxlint/binding-linux-arm-musleabihf@1.83.0': + resolution: {integrity: sha512-s+BirYLFq7JL2k9sP0XI3ZXJ9dYvJ8sX3jLCLoag7tt+zrSHpZxP0jqznfL+Gdgwu7ay0dYgGYJXrQvq3iWloA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.63.0': - resolution: {integrity: sha512-t7ltUkg6FFh4b564QyGir8xIj/QZbXu8FlcRkcyW9+ztr/mfRHlvUOFd95pJCXi9s/L5DrUeWWgpXRS+V+6igQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-arm64-gnu@1.77.0': - resolution: {integrity: sha512-/xqQ3B16i1T4cyt/9Mn+4CpzhUXoBXp7kVpIwzOXNFLj5JmK1bIjsbSnX296Gg8A/o7oDtKWikFgBx0SLwztkw==} + '@oxlint/binding-linux-arm64-gnu@1.83.0': + resolution: {integrity: sha512-7lihXt3vKr+GIyapNbHrnFHm/biiW30le6Zv/DExbAFPF6YwCQXVFlONPFehxs0CpGO4CBfYPM9rdDT+XMoIlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.63.0': - resolution: {integrity: sha512-Q5mmZy/XWjuYFUuQyYjOvZ5U/JkKEwnpir6hGxhh6HcdP0V/BKxLo8dqkfF/t7r7AguB17dfS/8+go5AQDRR6g==} + '@oxlint/binding-linux-arm64-musl@1.83.0': + resolution: {integrity: sha512-q63JalLYVkZiZvls1z3PPUnpmQluOMXp0khqQMznCeAPLGydfNY8JhvuA4WlK57JfrvikU8wB5lPVveqpIXvew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-arm64-musl@1.77.0': - resolution: {integrity: sha512-LSbwuRKiNCenPDcbARqAZ5RfBy7gmj7vOvfJRLeCDU3gFtSxWbhv/+VTlaUqzUhNj1gFLHB8h7ALnxa/Az6z6g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxlint/binding-linux-ppc64-gnu@1.63.0': - resolution: {integrity: sha512-uBGtuZ0TzLB4x5wVa82HGNvYqY8buwDhyCnCP0R0gkk9szqVsP0MeTtD5HX7EsEuFIt+aYmYxuxeVxs3nTSwtQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-ppc64-gnu@1.77.0': - resolution: {integrity: sha512-QWdcH31mXEUe5Nq1s0CfCpceaKjIo9uZtwDjAuL681g1axf+5x8xrg/eXWaw//4NCxYZ4V4e5Hu5tvdR+pTBlg==} + '@oxlint/binding-linux-ppc64-gnu@1.83.0': + resolution: {integrity: sha512-krQmDF+dRbxvdqVPV88ZuOoPPu8X5BuqDA8Hd+qcS4YMRQCb+nexA57DazgGsc/rGdKBe3QmV0mnv0bdpW/p5g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.63.0': - resolution: {integrity: sha512-h4s6FwxE+9MeA181o0dnDwHP32Y/bG8EiB/vrD6Ib+AMt6haigDc/0bUtI/sLmQDBMJnUfaCmtSSrEAqjtEVrA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-riscv64-gnu@1.77.0': - resolution: {integrity: sha512-GnOfYgJxbcElOiPZaDFDl406ONddwvOWk2jvAAAEjwAl4GofNoHF+/HHUIBYa6bFCArlcGPi0XjC4cU1pkgF/Q==} + '@oxlint/binding-linux-riscv64-gnu@1.83.0': + resolution: {integrity: sha512-MmOl8Y6txEAXZU1RG8Rr264jQ6D7VPmqFsU/45x/FeWsGe32hklTqGrLE6UxHzp5Rjt0wP+20tY8YXKgSFB3mw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.63.0': - resolution: {integrity: sha512-2EaNcCBR8Mcjl5ARtuN3BdEpVkX7KpjSjMGZ/mJMIeaXgTtdz5ytg2VwygMSStA/k0ixfvZFoZOfjDEcouV5vQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@oxlint/binding-linux-riscv64-musl@1.77.0': - resolution: {integrity: sha512-AyEMTUCf0xY+hHF+IxqXFQIX0yQOIR8ykpY0lJNOw9xYqOzUX8dyZfRvlG0RfXwuQn2eonf/8NrMmDSZJjdqsA==} + '@oxlint/binding-linux-riscv64-musl@1.83.0': + resolution: {integrity: sha512-u1rMymh0W3JZkq370kzQsYPULGWqhE09pZRqnZvUSoYaI9pVO5yVX+iYIslmWuEgwuzH9YAaOsScJiobWCHoOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.63.0': - resolution: {integrity: sha512-p4hlf/fd7TrYYl3QrWWD0GocqJefwMu3cHQhmi2FvEB/YOvFb5DZN3SMBaPi7B1TM5DeypkEtrVib674q1KKPg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-s390x-gnu@1.77.0': - resolution: {integrity: sha512-sPLzEcNvxd/oyVQ5oZo92CiHkFkpBeRop13E/P3TPY+hZfXHKCOWKI70TE2RYwMKFJDc20EMjH16L7NZICtKTw==} + '@oxlint/binding-linux-s390x-gnu@1.83.0': + resolution: {integrity: sha512-y0zK3HNwGysu7rqtE+BQG/d0bx5gh/KwlOtghN8oWeK1KcWzeaLqtZrbm8owqdma1lFyrce/hTO5ismuNu+INQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.63.0': - resolution: {integrity: sha512-Vgq9rkRVcPcjbcH+ihYTfpeR7vCXfqpd+z5ItTGc0yYUV59L5ceHYN1iV4H9bKGV7Rn5hkVc7x3mSvHegduENA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-x64-gnu@1.77.0': - resolution: {integrity: sha512-1Oh2ssH2L7lwyvkdSqaMUfsGfwU2Wfvew+obBUYjRVqhpBcUpwnsPSEr1IzVi9XqkuY10geiLsNKecqaZC34Dw==} + '@oxlint/binding-linux-x64-gnu@1.83.0': + resolution: {integrity: sha512-rS5gM0NgD7ngmuJmbIehsidtrOwKkLFwCQbKEeb9KuyQrrWNq5Zkn0uV6AYdXOMJ0grrWEiLwBuvMxt8w5vsNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.63.0': - resolution: {integrity: sha512-3/Lkq/ncooA61rorrC+ZQed1Bc4VpGj+WnGsp58zmxKgvZ2vhreu+dcVyr3mX8NUpq7mfZ4gDDTou/yrF1Pd7A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxlint/binding-linux-x64-musl@1.77.0': - resolution: {integrity: sha512-0j/2wRgNGO+Qj/M1uu/p57h/hFTTWWcfie0ufkbabeus2s5+/QqkCflnMOwLLN5m2GsNeWp4xdl4cPa4n7QCOQ==} + '@oxlint/binding-linux-x64-musl@1.83.0': + resolution: {integrity: sha512-W2IH4EtpcPaWcvNGCA95YoDg4vxqE/ZiPCi3arrxEEpsK7+JQN9WYwrlYFx9pcdP6KPXqRqkv3zdQPHcx7b6YQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.63.0': - resolution: {integrity: sha512-0/EdD/6hDkx5Mfd769PTjvEM8mZ/6Dfukp1dBCL/2PjlIVGEtYdNZyok6ChqYPsT9JcFnlQnUeQzO0/1L/oC9w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@oxlint/binding-openharmony-arm64@1.77.0': - resolution: {integrity: sha512-BJ/j54qS0usEnyDkLYURMj2iiD9h5Cyy+ppzeMSXBGRXaGRNWnj1Mw14NqWMR5E/PzdgB30OOCCzLzbRoduafw==} + '@oxlint/binding-openharmony-arm64@1.83.0': + resolution: {integrity: sha512-6LyKkUyoajssTPLlZmDbZIbu4IZ5B4bGuRUnBgCGpEvHP3FQMaYITncHA/unPUo7q+Z+pIu2HhdkQ+8d1SG7iA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.63.0': - resolution: {integrity: sha512-wb0CUkN8ngwPiRQBjD1Cj0LsHeNvm+Xt6YBHDMtj2DVQVD6Oj8Ri7g6BD+KICf6LaBqZlmzOvy6nF9E/8yyGOg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@oxlint/binding-win32-arm64-msvc@1.77.0': - resolution: {integrity: sha512-Yh8w+g2Lpx7StrvtYkoz9JJvXjB9wxgFChFNb85nrXm/wj/XTwGWS1hve9+900HL7llrntYB3YP+y32E3tRqzA==} + '@oxlint/binding-win32-arm64-msvc@1.83.0': + resolution: {integrity: sha512-Uz/fObEtF0jmNJQJ8CGRBKfefYstS0/wjD3s6IGzP8nUwsJykHQJBiN3npHwKiGRGn/vvBEgNr4B3cCzmmatvg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.63.0': - resolution: {integrity: sha512-BX5iq+ovdNlVYhSn5qPMUIT0uwAwt2lmEnCnzK+Gkhw4DovIvhGb96OFhV8yzQNUnQxn/xGkOR+X+BLrLDNm8w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@oxlint/binding-win32-ia32-msvc@1.77.0': - resolution: {integrity: sha512-zja5b7+6a7UsRFgAQSrnax5vrzliEyNPLCjfXONu/vTWswaIVZGFajJZptaeRvPE4LghtFdAzVFlexTm7MVTGA==} + '@oxlint/binding-win32-ia32-msvc@1.83.0': + resolution: {integrity: sha512-u7XcvPW6Bk58tY5iWs2ESb0vJjoE/kuSpHxopbwp/p3ZtWVQXZ6wor5w3ssVTHOqd/v8b+QdhSFWQ4grEUNWpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.63.0': - resolution: {integrity: sha512-QeN/WELOfsXMeYwxvfgQrl6CbVftYUCZsGXHjXQd5Trccm8+i4gmtxaOui4xbJQaiDlviF8F3yLSBloQUeFsfA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@oxlint/binding-win32-x64-msvc@1.77.0': - resolution: {integrity: sha512-+teyvPDZ2RjUvo+SuCqS/UhaJl1QtdW5fWT5NJTV61V5MIuIS90Db9LixmtEGvXixyttiK62P96MSu3UlpviBw==} + '@oxlint/binding-win32-x64-msvc@1.83.0': + resolution: {integrity: sha512-LZRubd7ph13QmAg4fFecTYVZkiYbROR2Htaxh/ufWRkDhPOm2wrwaEYR89e0YpPFD3dqBrPoxS7myBw5hmYA7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint/plugins@1.61.0': - resolution: {integrity: sha512-nkOyZEF1vH527CkdQtOp1HMrVFEM4ResURvI2JFeGoup+h+43J/k/FgdOR9b9Isxg+Yae7qVDa7y3nssE8b3TQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@oxlint/plugins@1.73.0': - resolution: {integrity: sha512-OhgMQeMmZA0dcFcX4/priaJZWdFECxiClgq6mRX6aatZEcV9PbKC3P3/v8U1hVjviT1i5U+vR8lAtBV6m4FXAA==} + '@oxlint/plugins@1.79.0': + resolution: {integrity: sha512-S0uyoxakDINJ4DPgqxGlEEvrdSMeQb7Z2lKVjxoY2gwsbZbfg2Xr8Klfeo5ZeraHmmdBCELFUHkSe6KEmBpMvg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@polka/url@1.0.0-next.29': @@ -1723,73 +1414,36 @@ packages: cpu: [arm] os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.17': - resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@rolldown/binding-android-arm64@1.2.5': resolution: {integrity: sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.17': - resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - '@rolldown/binding-darwin-arm64@1.2.5': resolution: {integrity: sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.17': - resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - '@rolldown/binding-darwin-x64@1.2.5': resolution: {integrity: sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.17': - resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - '@rolldown/binding-freebsd-x64@1.2.5': resolution: {integrity: sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': - resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.2.5': resolution: {integrity: sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.2.5': resolution: {integrity: sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1797,13 +1451,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': - resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.2.5': resolution: {integrity: sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1811,13 +1458,6 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.2.5': resolution: {integrity: sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1825,13 +1465,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.5': resolution: {integrity: sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1839,13 +1472,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.5': resolution: {integrity: sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1853,13 +1479,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': - resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - '@rolldown/binding-linux-x64-musl@1.2.5': resolution: {integrity: sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1867,50 +1486,24 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': - resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.2.5': resolution: {integrity: sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': - resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': - resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.2.5': resolution: {integrity: sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': - resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.5': resolution: {integrity: sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.17': - resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} - '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -1927,9 +1520,6 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1999,21 +1589,21 @@ packages: resolution: {integrity: sha512-e2f1LaETJ1wFIZSZAJwsAumWixGaRslUjESf0nSrZGUensq3ZwXddoDJPPoDLkSAr/Fa3v5aff+dJ39UbNfbNQ==} hasBin: true - '@vitest/browser-preview@4.1.10': - resolution: {integrity: sha512-14MJrL59ZFkqXLjwfSk6RzTDy5Czf9UG4+8q8L6Gxjs2aPjEce/cVNYV14bXAc2BvMjUNu904+ZEZA1Xc1wtvQ==} + '@vitest/browser-preview@4.1.11': + resolution: {integrity: sha512-iPKSE6Ibayey6HFgK1V1/aHgyhx7HSRk1YMi+lnBZGmlIiNV5Uc7xRkD9Su8RDylTxDECK23t7kTHdRKoqSYDQ==} peerDependencies: - vitest: 4.1.10 + vitest: 4.1.11 - '@vitest/browser@4.1.10': - resolution: {integrity: sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==} + '@vitest/browser@4.1.11': + resolution: {integrity: sha512-bwMovvAeuTFOK5kIFevw4VEf+1gVEICv4SYK4k3knJOxl6b1zEWud8mYKD73e1B0odAn174h1MofURy2TPWf3w==} peerDependencies: - vitest: 4.1.10 + vitest: 4.1.11 - '@vitest/expect@4.1.10': - resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} + '@vitest/expect@4.1.11': + resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - '@vitest/mocker@4.1.10': - resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} + '@vitest/mocker@4.1.11': + resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2023,154 +1613,28 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.10': - resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} + '@vitest/pretty-format@4.1.11': + resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - '@vitest/runner@4.1.10': - resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} + '@vitest/runner@4.1.11': + resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - '@vitest/snapshot@4.1.10': - resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} + '@vitest/snapshot@4.1.11': + resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - '@vitest/spy@4.1.10': - resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} + '@vitest/spy@4.1.11': + resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - '@vitest/utils@4.1.10': - resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + '@vitest/utils@4.1.11': + resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} - '@voidzero-dev/vite-plus-core@0.1.22': - resolution: {integrity: sha512-OC7tChagbJCoY7YKzD5MuyxJO1km5IF42B3ltZoQ9Twc8UuPrMuWZrVoP984tJKYd/gFJuQFM/lrbNtBm9kyDg==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.0 - '@tsdown/exe': 0.22.0 - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 - esbuild: ^0.27.0 || ^0.28.0 - jiti: '>=1.21.0' - less: ^4.0.0 - publint: ^0.3.8 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - typescript: ^5.0.0 || ^6.0.0 - unplugin-unused: ^0.5.0 - unrun: '*' - yaml: ^2.4.2 - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - '@tsdown/css': - optional: true - '@tsdown/exe': - optional: true - '@types/node': - optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - optional: true - publint: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - typescript: - optional: true - unplugin-unused: - optional: true - unrun: - optional: true - yaml: - optional: true - - '@voidzero-dev/vite-plus-core@0.1.24': - resolution: {integrity: sha512-iXPGBABnQnrDMx89H6MOCGcTZp+QW+3rY4YMVKdE6ydchSvPk2O3MI2vgaRVfOtWJ2IjnxSnf1n2yjP67ZBRFQ==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.1 - '@tsdown/exe': 0.22.1 - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 - esbuild: ^0.27.0 || ^0.28.0 - jiti: '>=1.21.0' - less: ^4.0.0 - publint: ^0.3.8 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - typescript: ^5.0.0 || ^6.0.0 - unplugin-unused: ^0.5.0 - unrun: '*' - yaml: ^2.4.2 - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - '@tsdown/css': - optional: true - '@tsdown/exe': - optional: true - '@types/node': - optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - optional: true - publint: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - typescript: - optional: true - unplugin-unused: - optional: true - unrun: - optional: true - yaml: - optional: true - - '@voidzero-dev/vite-plus-core@0.2.9': - resolution: {integrity: sha512-dWqScAAwa8h/i9jCiGAMs7YarzQWInHZ5gCJNbQkHXA6Zp6A2T2anN9YMFVPpb7CwVFwkI2iPF5yl/DXtq+zUA==} + '@voidzero-dev/vite-plus-core@0.3.3': + resolution: {integrity: sha512-Ui92VENIZG+p0nMJuVGMsHBHrQqgUNxXObdo5PlSDEBOdRmD8AHKr8tOClZTVU1U5blLQKtHKplxtTun0yZEmw==} engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0} peerDependencies: '@arethetypeswrong/core': ^0.18.1 '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.4.0 + '@vitejs/devtools': ^0.7.1 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -2182,7 +1646,7 @@ packages: terser: ^5.16.0 tsx: ^4.8.1 typescript: ^5.0.0 || ^6.0.0 || ^7.0.0 - unplugin-unused: ^0.5.0 + unplugin-unused: '>=0.5.0' unrun: '*' yaml: ^2.4.2 peerDependenciesMeta: @@ -2221,168 +1685,54 @@ packages: yaml: optional: true - '@voidzero-dev/vite-plus-darwin-arm64@0.1.22': - resolution: {integrity: sha512-+6sRVGCAQSpO96WC0EZtSLJ01VzNiZL/eQUQ8NLVl1oH+0+KgHF2UXyqUXGCGf/JCu34egEwBEjDU3WUwN2mxg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@voidzero-dev/vite-plus-darwin-arm64@0.2.9': - resolution: {integrity: sha512-/qJHqMfyy/LiCJk4UYZfFW6Comsfm8zDuy4P8UFWnFqRjmefYvZbMK4ThYNM87tKNWYWjsnClzssjJOmDTAc8w==} + '@voidzero-dev/vite-plus-darwin-arm64@0.3.3': + resolution: {integrity: sha512-1hwUfQGqvzlO+qQ7r1i5XQWkKaWq/JcdAAZOPloMQsZq7P8rgiY1pq/0q4stzcNxFF74k4aEFOlDUKi6D149YA==} engines: {node: '>=20.0.0'} cpu: [arm64] os: [darwin] - '@voidzero-dev/vite-plus-darwin-x64@0.1.22': - resolution: {integrity: sha512-rqsCW/Brt2froW7VhLE+gVHKtGniyLdHlfcmTLfuM5vnd5skdQlymibRw/lviJU+mSl0x8pGcXZbvA4TLHbCoA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@voidzero-dev/vite-plus-darwin-x64@0.2.9': - resolution: {integrity: sha512-3MGnNeazgYAqQTaC7JIbZyrTHmxSXTWFr9G1yAdeItKasB1R8HKIkCS1Qnr49Ge4S/cyOODivdbcpqFkrT93ng==} + '@voidzero-dev/vite-plus-darwin-x64@0.3.3': + resolution: {integrity: sha512-nM2+EC1BPochRhtf48FWZX3wPnrsy8aBSI5TPqjxr0OS0bydvPavrhdSUmgUGZG9/hp0NTeXhhqY9A7yuvZLZQ==} engines: {node: '>=20.0.0'} cpu: [x64] os: [darwin] - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.22': - resolution: {integrity: sha512-OL/WT6pvJpFS1L+hWe8g2LCEHCJfEBSgxV0vbSoQDdfTuilUJaVK8rljVWgtIVjUQSjIx8jKfPsl/I8iEBh0GQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.2.9': - resolution: {integrity: sha512-6LmukER8qD4UBIRqMNv4Ilq7CxfRhngLUXlMv8vbTupeLRWPJSKvKEHyRxCwr6JP57Gxfr8KrX1ye42WzcZF0g==} + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.3.3': + resolution: {integrity: sha512-WC8/kT0/btxnwgYR5QvvelbgUaLQ6lbxs8aMQpjc63p1QdMTNZEbp3vnTV2l9KgoUYeyHnALJVBW9l1CJAM+fA==} engines: {node: '>=20.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.22': - resolution: {integrity: sha512-SdZLL2aXm9XlbNfygsIifxhTjnRa2gI5oXNCh9QmLmXN36yhXt816I5Tl5IQ5DJwxhnG1+5Uqp2D6tHaT5g6nQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@voidzero-dev/vite-plus-linux-arm64-musl@0.2.9': - resolution: {integrity: sha512-cBs626GWkyJlwKP0nsdHlMWpuTl9xOWRxAUoqtxXPtw80bVy4WM5eNS4SXPC5pX10jR7DRIkRpzNAsy7fv8Faw==} + '@voidzero-dev/vite-plus-linux-arm64-musl@0.3.3': + resolution: {integrity: sha512-iy3AgJK9wwOGjlEzq0Sm1bqK5pDSWF4nz29Ey5BmK7bGciyfufeKRqRASKJdMhRMEQ7WVUQz5luC5GddLEDwXg==} engines: {node: '>=20.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.22': - resolution: {integrity: sha512-Qn6WPTn61A47ZBCPm+v8kCrMgXlI5p10pllKYkce2PFeCotN6v1bqu2GBZIkLVSi534ywGqdkiG1kaesM9e1vw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@voidzero-dev/vite-plus-linux-x64-gnu@0.2.9': - resolution: {integrity: sha512-2Iy8x4PCPMNzXeu3pREevlggoeK8PwtdUiCpoSybAZBtR/aqMxsJREyt/eKv45F8lsiNlA8PbIWEvPxLSgzFLQ==} + '@voidzero-dev/vite-plus-linux-x64-gnu@0.3.3': + resolution: {integrity: sha512-ZHN3RCA422XrGYmSDE9IZqx/eM5PsFCXHn8hUttQEwcSVXsuKBArDyb/uxonn1n0bPNW8c4G4HvNmIS3ckLXzA==} engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@voidzero-dev/vite-plus-linux-x64-musl@0.1.22': - resolution: {integrity: sha512-DsVE09IgvYBR2PY2Bohd08tScYDa8K8KJkIGc8Y6uRXR14NEldoufmWJdCmEsGLA8puRv5HV3ZheWFFjmw5Liw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@voidzero-dev/vite-plus-linux-x64-musl@0.2.9': - resolution: {integrity: sha512-zuGx+eRotWPd9cmh1X9AfsC2tN/Ad9Hk6LAzlxoKJUjEkTsY3WjVJ6Da0z48SAUFuenI0JkdqXnMCrePtGvWHg==} + '@voidzero-dev/vite-plus-linux-x64-musl@0.3.3': + resolution: {integrity: sha512-lDmmjrgh6qNvBlzapzKMjxiqRigkyPjIimkxrk8CSz+/AyQp6I/wuIAyjBmNfeh14SQoDNVgf03CTJzmJycrpg==} engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@voidzero-dev/vite-plus-test@0.1.22': - resolution: {integrity: sha512-6VKDNXH+ygDyTXpBYn+g+2a9j3zuAZRlP2ZSx0RcjPMdGUMpX6Mox4CmdK8SkZUvi+f6a1siX50ZnCOcQoTgmQ==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/coverage-istanbul': 4.1.6 - '@vitest/coverage-v8': 4.1.6 - '@vitest/ui': 4.1.6 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/coverage-istanbul': - optional: true - '@vitest/coverage-v8': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - '@voidzero-dev/vite-plus-test@0.1.24': - resolution: {integrity: sha512-9NiG6UadG0iOaPL1AMsO5sDKkx6MADHw4/mMOmHWZUhhUwqzfVtnnptMK37vD71e6KyR7yAscx19FrtOWWtjvA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/coverage-istanbul': 4.1.8 - '@vitest/coverage-v8': 4.1.8 - '@vitest/ui': 4.1.8 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/coverage-istanbul': - optional: true - '@vitest/coverage-v8': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.22': - resolution: {integrity: sha512-/1JDhTu7SAIjpqJVAN3D3zmN/O8cCRwdn63Qs0ep5GzNYh3+TtVyw3xdUY7YHeyuSypgKlqnr6IPeMlNijOG/Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.2.9': - resolution: {integrity: sha512-kaKb5Q8ReYTBfvLgUhdpLJG3aoNF8HOVJpf8qBm+THsd4WRrkRwsBHp2ITsU8oXl2gnDjFGhPDaURegd/z6Wxw==} + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.3.3': + resolution: {integrity: sha512-/5/YdLItQH9KC+jL49uw9CidC7MeO3Q8ojRcuOPcH5ujU5tU4P4lO2qJ9RbM8ckC1lfiZYTtVtJUSkbPn1R/YQ==} engines: {node: '>=20.0.0'} cpu: [arm64] os: [win32] - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.22': - resolution: {integrity: sha512-GITqtIWeTaWZ7mo1799sIB6XhhSAL1TmuJvrtBz8e3SAUpjDsIYACDYumUDhowPdIHRO3rasyJg9jJZA82BjKQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@voidzero-dev/vite-plus-win32-x64-msvc@0.2.9': - resolution: {integrity: sha512-/fEk3gbQTJknCiYM/GTL/L++Azsav8rCAjmtKrjmCbqEif5IMzqTfvM68n+PiLB3JVoQJGF/mg2niODr0IE/2w==} + '@voidzero-dev/vite-plus-win32-x64-msvc@0.3.3': + resolution: {integrity: sha512-npbLQAAKdWHEB0qOFkmF/2OUzdraNBe1w7gY1LjXQFvqORAKZlHyQ2rgF5nBtG5+LKvbKWL6XpvyP+cQEh7MZg==} engines: {node: '>=20.0.0'} cpu: [x64] os: [win32] @@ -2392,19 +1742,19 @@ packages: cpu: [arm64] os: [android] - '@yuku-codegen/binding-darwin-arm64@0.5.48': - resolution: {integrity: sha512-yo96Oef12WzqnphInfz/eexVse3+kWgfGS5g2S3rFS3dcGn1ENW9xLFDZUP9rh+yP76DOq38wBoFi1+I9+6qBg==} + '@yuku-codegen/binding-android-arm64@0.9.5': + resolution: {integrity: sha512-jrOY5WM+AaAqkv51fHP1x28ifto4WgcZVzodLUyMU1jMWn5Sq+VciRdk/n8E0Ey5w4p4cWWE+m5GfXWOYh7Kzw==} cpu: [arm64] - os: [darwin] + os: [android] '@yuku-codegen/binding-darwin-arm64@0.8.7': resolution: {integrity: sha512-/u+REDMI4a0/lsJXTM4c53/w31OGZLOReZIyg62uhgLs0kc8NHsj/nOcxTdlQjq5gi0zhdkccD9LaLTXcdzPvw==} cpu: [arm64] os: [darwin] - '@yuku-codegen/binding-darwin-x64@0.5.48': - resolution: {integrity: sha512-aRCTw0EZC4bVosmw//0OMYP5tGWFE0Cu5yUBFkUbhXx/iBzvORcJ2xPNlOp/vtCCo9Ys4vp8b0DigJV6uOVb2g==} - cpu: [x64] + '@yuku-codegen/binding-darwin-arm64@0.9.5': + resolution: {integrity: sha512-4O4lkCQIzPZGjiNB1GORSI6hBECbiiSBS/APZXPvNKYH+nhY4uuqv03LNXA+SET3hoBjvr95P5rIhY8KQaQUBA==} + cpu: [arm64] os: [darwin] '@yuku-codegen/binding-darwin-x64@0.8.7': @@ -2412,21 +1762,20 @@ packages: cpu: [x64] os: [darwin] - '@yuku-codegen/binding-freebsd-x64@0.5.48': - resolution: {integrity: sha512-CA0AQAEApDkbw51PdLWMtKPJ41/7rvXsS3SJs+phG7fHJI+MuFzWuLbkucZfZoEOiDscmcsfYIdgL8BsfuyKKQ==} + '@yuku-codegen/binding-darwin-x64@0.9.5': + resolution: {integrity: sha512-9EvoUO0SEhD6/d8VHdWuPerepPMSR1y84+UEgz8Un1Ope14Oe7xMvePpEQLTLovoIFZ8Zg3iZ8z8E11pZMqC3g==} cpu: [x64] - os: [freebsd] + os: [darwin] '@yuku-codegen/binding-freebsd-x64@0.8.7': resolution: {integrity: sha512-MpdpKXix9P+Y1rKgjvcNeNtGjXeL1CmttNhYINrWls8kRpm4xM/oBGTmn6w7to8lAlwj5jm8q03dQPl5mRv4Qw==} cpu: [x64] os: [freebsd] - '@yuku-codegen/binding-linux-arm-gnu@0.5.48': - resolution: {integrity: sha512-DuSQlk8bH4gpmW3/00P0NLagAcMv8jOxjT40cQmxKRkktr+SUOALCfkT89tdDq3qtY95NR2GXOZ7AjNh7KKqCw==} - cpu: [arm] - os: [linux] - libc: [glibc] + '@yuku-codegen/binding-freebsd-x64@0.9.5': + resolution: {integrity: sha512-HqT78WwgHTmp8lwujoUa9CrIortX4DdpuiVC18ZPSGvuuJf4ylpIEI6QrQEM78Zwz3muhAWAOXZ5irdiYY+AyA==} + cpu: [x64] + os: [freebsd] '@yuku-codegen/binding-linux-arm-gnu@0.8.7': resolution: {integrity: sha512-rr1srFLlPAmC1vtxfc9C1YLDe3iH09YjfSeeIidBqKhzx1MATjOAq4mjlRUOnhr/L27MotWIYOFKwVsd5JZFOg==} @@ -2434,11 +1783,11 @@ packages: os: [linux] libc: [glibc] - '@yuku-codegen/binding-linux-arm-musl@0.5.48': - resolution: {integrity: sha512-bxj4Ee+wlaJcWJwft2ReJXWw5sfl1qavDz6+dlRdU1xfTEtjPSNiAWhiCHnJR0R4Ygd57DnzSQmAVGvFv6RcGw==} + '@yuku-codegen/binding-linux-arm-gnu@0.9.5': + resolution: {integrity: sha512-QJXwIW6Ms3QIawbcBIedmrmXnfdpuAOjZJ/eAABq5XTzWvSxZ7lutu9W5yIHahlaTaFnBo7ikrVMD1szLTpPUw==} cpu: [arm] os: [linux] - libc: [musl] + libc: [glibc] '@yuku-codegen/binding-linux-arm-musl@0.8.7': resolution: {integrity: sha512-eAufXh8qBRpiSO6ueaMDL+yyoXIGLhpUce72YbcACtZU2qhExwBIJyEtQf5kH2Ki0X2aqkSjSfog4OPtKXan3Q==} @@ -2446,11 +1795,11 @@ packages: os: [linux] libc: [musl] - '@yuku-codegen/binding-linux-arm64-gnu@0.5.48': - resolution: {integrity: sha512-mk5JVWh+0JOe5ue8k17kbYX8uGBoKt3ZqoCyxNh4nYAAcX7+X1tFUiU7jbjctu4vHeejCBFSTdQ021+V31cUCQ==} - cpu: [arm64] + '@yuku-codegen/binding-linux-arm-musl@0.9.5': + resolution: {integrity: sha512-eHbFy3IHGb+IYarrYwAo0yWSEQV3eAmEn6VrsKA6I1Wy1YPJxWqSJlV69JhqsHtJuJlljUIF3ex0y46yaKIu9w==} + cpu: [arm] os: [linux] - libc: [glibc] + libc: [musl] '@yuku-codegen/binding-linux-arm64-gnu@0.8.7': resolution: {integrity: sha512-gw4w6wPoHObBrdIC4duVWLmJOvpdE25j5D7yrM5mACNlK4klRz/lv8hK+ssQk9EJHBgZjSaqZIJVFgqNYbfv7A==} @@ -2458,11 +1807,11 @@ packages: os: [linux] libc: [glibc] - '@yuku-codegen/binding-linux-arm64-musl@0.5.48': - resolution: {integrity: sha512-4q3vkrNghbllyxOm2KesFLxCPKHF7r3JyQ7BWZccY1j2Y05yKoIFhoWCqIuQ2W/dpte9RI0+OVfwyxnrKg6fkA==} + '@yuku-codegen/binding-linux-arm64-gnu@0.9.5': + resolution: {integrity: sha512-ByoJMbySTaDhjAXSu8q6Lh7HKg3YoesXpcT72aYk0Aiw4PCznmY4ybpLTq0RCvp0RIPhFm/6yECFiGBwyCC1nw==} cpu: [arm64] os: [linux] - libc: [musl] + libc: [glibc] '@yuku-codegen/binding-linux-arm64-musl@0.8.7': resolution: {integrity: sha512-L68N6Y4XkqcIaKo3Ra88JEvBEH4AHff44A4INcrxeVWZ8CZtu2tCpfVxe3hR8qQQMcvBSQlDn24KpkCKEhVvfA==} @@ -2470,11 +1819,11 @@ packages: os: [linux] libc: [musl] - '@yuku-codegen/binding-linux-x64-gnu@0.5.48': - resolution: {integrity: sha512-csd4M1EVrGaohM8acM6gq1zpUA/Rwe2ulUMBKUcwQXm/k6n7cq1A++qdew78SOVb4do3JH1WE+WFwoGQAcWc1w==} - cpu: [x64] + '@yuku-codegen/binding-linux-arm64-musl@0.9.5': + resolution: {integrity: sha512-gD9vfXIoBw1toSxhO9rgmSu/FEfy3PMznJAxVjIuH8DrWEiDKXmJO0pJKfj1Ltbe/TmtWVZR+TjISqeSIGQzMg==} + cpu: [arm64] os: [linux] - libc: [glibc] + libc: [musl] '@yuku-codegen/binding-linux-x64-gnu@0.8.7': resolution: {integrity: sha512-dzyAbltJmf3Cqlb8HcFuYIf5Yn0fl1vTr3XJ9HiVNNvOlhqPSArOqtw9vI1p6/VTXTjrMLXlU+s+/kNHiIy/Cw==} @@ -2482,11 +1831,11 @@ packages: os: [linux] libc: [glibc] - '@yuku-codegen/binding-linux-x64-musl@0.5.48': - resolution: {integrity: sha512-KcDuEOT+GFoVKdvAWOv1v9iYjwnmvMZlO+j1Rw+5PYdeFLGWGzv/DD11y4SAAdwXIFcil4T0hibeIaF82WStMg==} + '@yuku-codegen/binding-linux-x64-gnu@0.9.5': + resolution: {integrity: sha512-BARvdnvqMGjOr5Iel2JH+9H5vAIE0R6H0Z2fsT02xrvmI/1ZXNB8lkuX+ZGevPhZb3zJ9WeC/R8JZstrsUOK5g==} cpu: [x64] os: [linux] - libc: [musl] + libc: [glibc] '@yuku-codegen/binding-linux-x64-musl@0.8.7': resolution: {integrity: sha512-Otw4MH3404q0Bbvl+YTdW9aoUV5vXmUw8260bWvt1XlaoIX/ceSgI4ygheRDMfBPoHt6FDayQaO9OLVUZAgkFA==} @@ -2494,19 +1843,20 @@ packages: os: [linux] libc: [musl] - '@yuku-codegen/binding-win32-arm64@0.5.48': - resolution: {integrity: sha512-HI8qNrI8dWM5BuqIMKsqornRvTNFrE6sm5zToIJ9YIa9zt5+29P7fJ7Nr39EVf6dAWSb6q7JSpScJnRsQ+FgZA==} - cpu: [arm64] - os: [win32] + '@yuku-codegen/binding-linux-x64-musl@0.9.5': + resolution: {integrity: sha512-x8flcevS1fbb7ESrmpOY/pON4eInSaE/7Ktjqx2udOE2W33BNSZmJuwpyUgo54AoHNqrcaM7szqydyJn5fNvew==} + cpu: [x64] + os: [linux] + libc: [musl] '@yuku-codegen/binding-win32-arm64@0.8.7': resolution: {integrity: sha512-qo/jyrzryiBuKEsFiuWaBCBe3tRMynQ0qFWFgOEjcCMQeZfBm+wKiVEUEFXXLc7bh8YezguAWp0Mtnhq4ARNyA==} cpu: [arm64] os: [win32] - '@yuku-codegen/binding-win32-x64@0.5.48': - resolution: {integrity: sha512-X5YWJLO6EfBZpeBqO0AYESnUizbpFDWArcvVD61w0PEWQ3CaFRLnbQXs+kpM4ZZfGMfIE22zfA08QSY67q7TNQ==} - cpu: [x64] + '@yuku-codegen/binding-win32-arm64@0.9.5': + resolution: {integrity: sha512-KOL/rBatWqH4ZpCNoF8ZtSNdOJbAxBJLmk/VeRciepGROPTbPum1A9t67GpFgOU7qrkUWlPJdJ+KHKbvbmOt+w==} + cpu: [arm64] os: [win32] '@yuku-codegen/binding-win32-x64@0.8.7': @@ -2514,24 +1864,29 @@ packages: cpu: [x64] os: [win32] + '@yuku-codegen/binding-win32-x64@0.9.5': + resolution: {integrity: sha512-FxENahEjWSan59Syh/us/Kf4wNq8qrJLFJ3R2N4Oiwtb6yNdz/rWLNTIoNSssnsp7IoWJdUP6o/Z8ppg7lXMcg==} + cpu: [x64] + os: [win32] + '@yuku-parser/binding-android-arm64@0.8.7': resolution: {integrity: sha512-eGKYiUDX7Y0V7tDTmg+JTVnXnjMqfXXsorZ+EDf5kxwchQ3Or1HS14MzI2fw+jFhHR85fCWt+mtX33Yao73hIQ==} cpu: [arm64] os: [android] - '@yuku-parser/binding-darwin-arm64@0.5.48': - resolution: {integrity: sha512-If8mb7HH3vqghJ2NNZ8SuHfhsnjVzOxJpB8xcNOXS5WjYrs2mUhHIh5KOIvK13hDOzh0htGeGK3A6MsiEqE7HQ==} + '@yuku-parser/binding-android-arm64@0.9.5': + resolution: {integrity: sha512-A2JCFCSHfnficqYEw4Iujpx7XrkMM3UfFcgJFmYpZSo9zM4nyhmdIIE0FogSduuU60lhM0/UcfuUBXIVNBMlGQ==} cpu: [arm64] - os: [darwin] + os: [android] '@yuku-parser/binding-darwin-arm64@0.8.7': resolution: {integrity: sha512-Re0RHelKLnjEURulY2/KxW+Ngb8zuNA4BRZuMwgGQNzVumT6u4U2N2hc01oeYVNVof0i7GrXE4UCNBgbpRRnjQ==} cpu: [arm64] os: [darwin] - '@yuku-parser/binding-darwin-x64@0.5.48': - resolution: {integrity: sha512-EimvPXfspzxf1K11eB6tCW5oiQEXB8g84T2wP1TwzQagdDKo33bkmmVF0B32vTIpXnk/Ifu5IB61izZ1MylljA==} - cpu: [x64] + '@yuku-parser/binding-darwin-arm64@0.9.5': + resolution: {integrity: sha512-3PiyU+Eare4YuKaQ22N98/yAiROPY5o/NQJHraICzDvk4pgS+m+bgLKOvkGBRn33OnV95Vdv1Mn38b+MQHpULQ==} + cpu: [arm64] os: [darwin] '@yuku-parser/binding-darwin-x64@0.8.7': @@ -2539,21 +1894,20 @@ packages: cpu: [x64] os: [darwin] - '@yuku-parser/binding-freebsd-x64@0.5.48': - resolution: {integrity: sha512-0GcUMrumLHheThY9r5Tp46gaZYzn0irWPS1Zba6WY+vVQfhUtzGiWgXxI6tuXX0N32kEaaEVRpkKctvo6Kx3aQ==} + '@yuku-parser/binding-darwin-x64@0.9.5': + resolution: {integrity: sha512-blFMAFI7AInI83XaiOF8cIeiRM46Nz9EfpZtZPRLbKxSA9aAr5v8aHYpmfN6NoyXxAv/10pwS4gsAuc1W6fy5Q==} cpu: [x64] - os: [freebsd] + os: [darwin] '@yuku-parser/binding-freebsd-x64@0.8.7': resolution: {integrity: sha512-bAP2OV8wRuzplX/jYxv9+vvqQT8JxyNphI8fLfXGL054Xs+4/J5u33cIm3y4rxY8rdoLmmdiJs2Tq7r7lrDRfA==} cpu: [x64] os: [freebsd] - '@yuku-parser/binding-linux-arm-gnu@0.5.48': - resolution: {integrity: sha512-8S5T5wjCC73dmmpQeZ49aYsSunIUM3D4Fc6rdK96c+Ayg/p3FmeSPF3xuLZHejcTmqJIIvnbfPlUF+rB6DITjQ==} - cpu: [arm] - os: [linux] - libc: [glibc] + '@yuku-parser/binding-freebsd-x64@0.9.5': + resolution: {integrity: sha512-TsNuL4qsZdO0tHp5GW43Y5fHeLPpPHA675wdcPNTcdq2ZO5AvsQWFFoiDg8CH4oBktfsQ9tdvKhjLnLYwKvp4g==} + cpu: [x64] + os: [freebsd] '@yuku-parser/binding-linux-arm-gnu@0.8.7': resolution: {integrity: sha512-kTYwJQQgmZeAWdDIWabiReIZMpmfLueIj1tCmjStUtFGhR1Z0qwxonKVfUC4N7h/VhGGzLZ//7O1kgt1QKqgCg==} @@ -2561,11 +1915,11 @@ packages: os: [linux] libc: [glibc] - '@yuku-parser/binding-linux-arm-musl@0.5.48': - resolution: {integrity: sha512-tTmbxvnUHcK2/crS9547vk2SMmsajH1yqJ8ltXhIuHJgqR1v+d9n9KT+kSayo/5CS76LegeYxhMFjEivBH2hFA==} + '@yuku-parser/binding-linux-arm-gnu@0.9.5': + resolution: {integrity: sha512-b0afYK5gHeV8RdmOcqAlgM8ONsye4cax4DMnIBaoJyPMd1UTGvTbpkqQcPVdhmHlcfcGVGMV1laeVovlr/dscw==} cpu: [arm] os: [linux] - libc: [musl] + libc: [glibc] '@yuku-parser/binding-linux-arm-musl@0.8.7': resolution: {integrity: sha512-uL4jE8HPT2BLlxAXyD10LqgPuXa9eDa0BKpCdSANmzIJghq/2eZo3/gQNtaxPZMupWoxjYzSad9IXrwu7aYPXQ==} @@ -2573,11 +1927,11 @@ packages: os: [linux] libc: [musl] - '@yuku-parser/binding-linux-arm64-gnu@0.5.48': - resolution: {integrity: sha512-KGYCBMqI2zfwyhgq5tpPVNe7jpUeYTBm8DhjdS+zqWNumde/PEC170QE5RHxcOAlsirIDeIUk0jqx+r/axoFSw==} - cpu: [arm64] + '@yuku-parser/binding-linux-arm-musl@0.9.5': + resolution: {integrity: sha512-fD3lKzl+r6j6n8DwiMY53qnh5DLqD8KJjCp+NbVud54Nnh3Q9Wprqss3YzyMHP3NSJk663Wlg1E1X5qOuFVFig==} + cpu: [arm] os: [linux] - libc: [glibc] + libc: [musl] '@yuku-parser/binding-linux-arm64-gnu@0.8.7': resolution: {integrity: sha512-3gVN4pWSKZmXiNX7cU164dR9MPvesCHnlH6nPfpK+yQsCuYphjKKplcb4SnZBrhiqmXbgb2HR0c2TS0IZUPhgA==} @@ -2585,11 +1939,11 @@ packages: os: [linux] libc: [glibc] - '@yuku-parser/binding-linux-arm64-musl@0.5.48': - resolution: {integrity: sha512-2wTSMsCSXLTc2lZUjMAuU5X4cje55u205WJqfV5NWNF6j9pW/tXyxr15dJeekj8ziLqBXzIsj4DbRh4sY/WcjA==} + '@yuku-parser/binding-linux-arm64-gnu@0.9.5': + resolution: {integrity: sha512-aRU/aCphV1MWCl/lvI6NX8LgucHQ68Fx+vz7NBb/5MEr2EuzCxiPOQqeFcMdWh+2AED/p0AvAREch0c+cSnlhA==} cpu: [arm64] os: [linux] - libc: [musl] + libc: [glibc] '@yuku-parser/binding-linux-arm64-musl@0.8.7': resolution: {integrity: sha512-S0mwfEjoLpxzXeZw802Wa4RaELsQiPtWqG6INcy8j4GtvNFtl4LCX3eGO1XLn9pyLAISLzTRyU3zUCBUPin8lg==} @@ -2597,11 +1951,11 @@ packages: os: [linux] libc: [musl] - '@yuku-parser/binding-linux-x64-gnu@0.5.48': - resolution: {integrity: sha512-d/6v9UnGglVu1WC2JQyv/5aWSi5fXZeGSlidCfmHp4+N65N1GDKUnFtys5MK5eAPeAjTgSHGGtOc/yCcKTlv3A==} - cpu: [x64] + '@yuku-parser/binding-linux-arm64-musl@0.9.5': + resolution: {integrity: sha512-5+Guro0l8H473YXlEjVNBRLN/IbPbJdnQh1zo0OLt49xxnON+XMJRRaEyTOTfkn9QSRg0+BhEKGR4W9Gu2uZJQ==} + cpu: [arm64] os: [linux] - libc: [glibc] + libc: [musl] '@yuku-parser/binding-linux-x64-gnu@0.8.7': resolution: {integrity: sha512-lnbWdPmerE5D1uH1G4IEZKnPzCrWCStRGrtgpSIe1RibAo5bZIjDbbbPYXmMHCEh4F+x/JaJpElh26a3r+BPbg==} @@ -2609,11 +1963,11 @@ packages: os: [linux] libc: [glibc] - '@yuku-parser/binding-linux-x64-musl@0.5.48': - resolution: {integrity: sha512-gX19gw6u4ApPy7SYMPKfFlEkrtj6WlORvrTKK3sBQqjyV+8+mUAkQgxXNjHw4RnOiAmVYg7TOlZcg8d+Qqod9A==} + '@yuku-parser/binding-linux-x64-gnu@0.9.5': + resolution: {integrity: sha512-pwwSyV9q+GlvzSXlsMZBMlgk22L5bud714/vqZCdeUTivzeUVltQzUaf3IQXOGXdpc59JYTeuMCtbGquaAUoCA==} cpu: [x64] os: [linux] - libc: [musl] + libc: [glibc] '@yuku-parser/binding-linux-x64-musl@0.8.7': resolution: {integrity: sha512-769uwndMvMzUvATWbAcEvyLHKA+DzhHSCl/obBUrRdYfRo26yxui6S8y3z7uJ+Naup7UKrDxrpK7OnQkxkl9KQ==} @@ -2621,19 +1975,20 @@ packages: os: [linux] libc: [musl] - '@yuku-parser/binding-win32-arm64@0.5.48': - resolution: {integrity: sha512-w6cQQLbqj3Jcom5Q7ifm103NUOQ9d+Cb4VU5lkrZDjMnwVJ9Hzzg1vCQR7miJuF44vhCXldbme5UryE3giEKlA==} - cpu: [arm64] - os: [win32] + '@yuku-parser/binding-linux-x64-musl@0.9.5': + resolution: {integrity: sha512-z18j6JN3lBHH8vzN7gG1M8fI0nlgItSfnC9PfbmUbt97iHViKfw2iA2G9fGwRMe5LyPRZBrejIlapbygPbpdaw==} + cpu: [x64] + os: [linux] + libc: [musl] '@yuku-parser/binding-win32-arm64@0.8.7': resolution: {integrity: sha512-mEB/9PlaAkisJ6KWGz0zvywXoU6+80dTlR2LwS7s/jcXXoU6fm2+sitBZXtqu3+Q4DcDgPxM45uWMCzPs0TSRw==} cpu: [arm64] os: [win32] - '@yuku-parser/binding-win32-x64@0.5.48': - resolution: {integrity: sha512-4gO0HmG7fzFxrw1rs0dUdnnaY9YgennjETqDWrTSp7x9fmTUOAoN4VsMfP7YyliQeG1WJJHc55O+rOhmsLppow==} - cpu: [x64] + '@yuku-parser/binding-win32-arm64@0.9.5': + resolution: {integrity: sha512-s6Gwttb1dQvtPX6Bgkw+UPC9IO3UBDXc6Zezog8MMgvu3UfJBBB9TQqKBX/2quu0Eyh+lLSAyNlIyyecaagUPg==} + cpu: [arm64] os: [win32] '@yuku-parser/binding-win32-x64@0.8.7': @@ -2641,12 +1996,17 @@ packages: cpu: [x64] os: [win32] - '@yuku-toolchain/types@0.5.43': - resolution: {integrity: sha512-kSpvPntnXw5+lYjO71ffBEnQ5ycQ74KGIYknh0TS4xeyCuBkOqxyJumxZkMhLBBUCLjDAbx2+Icnr3Zh4ftjpQ==} + '@yuku-parser/binding-win32-x64@0.9.5': + resolution: {integrity: sha512-FrERt9YWatY3bJfSUdi4YWY+6iQcyo3MzCC821BxlWM5TFZEHijnpz/bknR79VHlXY/9CvXz8ZlaAGPsTtN3nw==} + cpu: [x64] + os: [win32] '@yuku-toolchain/types@0.8.7': resolution: {integrity: sha512-2Z53dNxAJL6UvFoIrDZvYf3zlO8s4VJK4O2hhaB4mXVwwpX/7ajtss3cmfqKvamlNLWyt9FSWs4eoYdlbxpnHA==} + '@yuku-toolchain/types@0.9.5': + resolution: {integrity: sha512-KiuLNNgX9uNealaWAR+G3/cMXnRk9x4TY2EkYe/KIag+UPdwiA0RRf1hr1WAxzTP8KGzCTkqUdLPvqh32sEO3w==} + ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} @@ -2794,8 +2154,8 @@ packages: resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} engines: {node: '>=14'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} esbuild@0.28.1: resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} @@ -2808,6 +2168,10 @@ packages: events-universal@1.0.1: resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3053,20 +2417,12 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - obug@2.1.4: resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} engines: {node: '>=12.20.0'} - oxfmt@0.48.0: - resolution: {integrity: sha512-AVaLh+7XeGx+R1zfFV+f6VV61nT2MWVJXVUDhbTm5LBWGyNt64xAyh3NYYyjeY2WykNt9AvqSQLPHcbWquYF9g==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - oxfmt@0.62.0: - resolution: {integrity: sha512-vxgGHTmnDU9j4CX7dDBLzxgmHxfda/yPcgJkGCMUSCwRmz+euo/V08xXLNgXTeqAB9Fhf3Pe2nO1RNKLCVgphQ==} + oxfmt@0.68.0: + resolution: {integrity: sha512-Z0XMofcXCGUXbcpBHnWyUiX93BGiw1B+lcHNbQDWEtOhX06ewoFfu4zXkyiLhRrNnMq0twqXRHUcJetf+GsiQQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3078,26 +2434,12 @@ packages: vite-plus: optional: true - oxlint-tsgolint@0.22.1: - resolution: {integrity: sha512-YUSGSLUnoolsu8gxISEDio3q1rtsCozwfOzASUn3DT2mR2EeQ93uEEnen7s+6LpF+lyTQFln1pQfqwBh/fsVEg==} - hasBin: true - oxlint-tsgolint@7.0.2001: resolution: {integrity: sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==} hasBin: true - oxlint@1.63.0: - resolution: {integrity: sha512-9TGXetdjgIHOJ9OiReomP7nnrMkV9HxC1xM2ramJSLQpzxjsAJtQwa4wqkJN2f/uCrqZuJseFuSlWDdvcruveg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - oxlint-tsgolint: '>=0.22.1' - peerDependenciesMeta: - oxlint-tsgolint: - optional: true - - oxlint@1.77.0: - resolution: {integrity: sha512-qnGh8XJHaQ0dprrDXNQZgS0FgjI6v+V3+X8DwmaV++5Aamy6jGKfDdQ1TUvhUxtmKFAbEf4/WeO5QZX+5WSngg==} + oxlint@1.83.0: + resolution: {integrity: sha512-cyDzSzaw3uzP0TeCeq3lLRPPoaUxkbB4ZOXj+kn+5r+BX9V+4bNVGk9lxer+WrgcpebH4JxLlJ3KQjveVztOLQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3121,18 +2463,10 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} - picomatch@4.0.5: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - pixelmatch@7.2.0: - resolution: {integrity: sha512-xhcb4yHu9sM/G7foGzoLtXYcC0zHEaOXXjRKhGup0fw78Nf2Tkiapv4EQyMzrbcmQPsllAI7DbFY2UT7PlI9Pg==} - hasBin: true - pngjs@7.0.0: resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} engines: {node: '>=14.19.0'} @@ -3187,11 +2521,6 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-rc.17: - resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - rolldown@1.2.5: resolution: {integrity: sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3203,6 +2532,9 @@ packages: setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -3218,6 +2550,9 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} @@ -3255,24 +2590,16 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.1.2: - resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} - engines: {node: '>=18'} - tinyexec@1.3.0: resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tinypool@2.1.0: - resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + tinypool@2.1.2: + resolution: {integrity: sha512-9YodfrxS9g9IbFr/KOjE5bAeJ0p61n3bW6mqvy0jtoeKd1kTW1Cxm0oulm6KX2lyM9Gl6WIe8nEbY7LWv5ZJww==} engines: {node: ^20.0.0 || >=22.0.0} tinyrainbow@3.1.1: @@ -3321,9 +2648,6 @@ packages: unrun: optional: true - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.23.0: resolution: {integrity: sha512-eUdUIaCr963q2h5u3+QwvYp0+eqPvn+egeqZUm0hwERCqqx1E3kK5ehbGCvqSE5MQAULr67ww0cA3jKc3YkM1w==} engines: {node: '>=18.0.0'} @@ -3368,67 +2692,65 @@ packages: resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==} engines: {node: '>=18.12.0'} - vite-plus@0.1.22: - resolution: {integrity: sha512-fCCmEKjI+Hv74PdL/MKcrBkdYPHFNcqD5568KxwN0sa4SGxtcbs55i/577LxKs0w5zIjuLRZZ0zQPu9MO+9itg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - vite-plus@0.2.9: - resolution: {integrity: sha512-8uRNqAxh9no3AU4Lep8BEYhkim07+3NO+mhuxTWiN0k30syGT/2+ue/DtWYhtzQ7yi2f2WKpjOhoI4/QkWWbUg==} + vite-plus@0.3.3: + resolution: {integrity: sha512-gr3t8ZIsytJnpPE0YPxtkouf+asMsc+TWlKXYzEdY6rRXUdCGYxgaPmzRePx1Gyip2gmARRLogAwoMMW9BvSUA==} engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0} hasBin: true peerDependencies: - '@vitest/browser-playwright': 4.1.10 - '@vitest/browser-webdriverio': 4.1.10 + '@vitest/browser-playwright': 4.1.11 + '@vitest/browser-webdriverio': 4.1.11 peerDependenciesMeta: '@vitest/browser-playwright': optional: true '@vitest/browser-webdriverio': optional: true - vite@8.0.10: - resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} - engines: {node: ^20.19.0 || >=22.12.0} + vitest@4.1.11: + resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.0 - esbuild: ^0.27.0 || ^0.28.0 - jiti: '>=1.21.0' - less: ^4.0.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.11 + '@vitest/browser-preview': 4.1.11 + '@vitest/browser-webdriverio': 4.1.11 + '@vitest/coverage-istanbul': 4.1.11 + '@vitest/coverage-v8': 4.1.11 + '@vitest/ui': 4.1.11 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: - '@types/node': - optional: true - '@vitejs/devtools': + '@edge-runtime/vm': optional: true - esbuild: + '@opentelemetry/api': optional: true - jiti: + '@types/node': optional: true - less: + '@vitest/browser-playwright': optional: true - sass: + '@vitest/browser-preview': optional: true - sass-embedded: + '@vitest/browser-webdriverio': optional: true - stylus: + '@vitest/coverage-istanbul': optional: true - sugarss: + '@vitest/coverage-v8': optional: true - terser: + '@vitest/ui': optional: true - tsx: + happy-dom: optional: true - yaml: + jsdom: optional: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@5.0.0: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} @@ -3437,18 +2759,6 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.21.3: resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} @@ -3478,18 +2788,21 @@ packages: yuku-ast@0.8.7: resolution: {integrity: sha512-h6+4bDfyootiMB9vckk5uKo5r5j0GHrkr17FQTDNfEsFT3DWlN9uu1HJwQwc64pgmLCI945fWM3lbTIqxjT3GQ==} - yuku-codegen@0.5.48: - resolution: {integrity: sha512-p7HxD5Xl4jzDzqMrGePAOeSHmRY4g58h4HuGq15weQFPxuPWd/W6e7nqp/+Lea6JfpOdBwJOAyXFqIZ/J9Zfnw==} + yuku-ast@0.9.5: + resolution: {integrity: sha512-Q8qW8WwQnN5Cm0ZZivdRIfv0sRLTjUq0YumXJkw8CYN1aCdICH9rk4C47/4n6kA5EqDtlj+F608twoTSV2MwdQ==} yuku-codegen@0.8.7: resolution: {integrity: sha512-adwDZSh8oVDzhE6Du9PwVWxcOxeV0e2EVhUuMKWfhSY4wkrDq9eqixlxFF3l/XGUV1E7UFzhpz9393MUumkyNw==} - yuku-parser@0.5.48: - resolution: {integrity: sha512-OWBfhrpgK9+/4+IXG9oT8Bao4AhViQA7vdyNNH7EUg8dQYgwa70XtIBWTpCEme1P1ECyoDNYkn0wT63f8XRcVA==} + yuku-codegen@0.9.5: + resolution: {integrity: sha512-zGUVyDpSK4b6c9B0yyxi2P0wujn1XZTbG9dCb7d6gyAoP63EMgyLzUwPUvwxPG5jgYqhlI7w+S3oCyapqGr4PA==} yuku-parser@0.8.7: resolution: {integrity: sha512-vRD9nwt4L3aYpxNqeSC4WqLv58xrXef0Ong1Mc45CTXTIpvLafx7JO05sczmQZwdLEZvywrLOGdNC5+Rp5N1BQ==} + yuku-parser@0.9.5: + resolution: {integrity: sha512-IBnAdNVMswWbJcM7woPluOudectJzFjJ1N8jVRxP9Uq4CIv5hZdBIcdmtRbFDYF/Ph2j2gVup4YJ4N9mh0jYFA==} + zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -4184,22 +3497,6 @@ snapshots: '@deepseek-ai/cosmokit': 1.8.2 '@standard-schema/spec': 1.1.0 - '@emnapi/core@1.10.0': - dependencies: - '@emnapi/wasi-threads': 1.2.1 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.10.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.1': - dependencies: - tslib: 2.8.1 - optional: true - '@esbuild/aix-ppc64@0.28.1': optional: true @@ -4280,302 +3577,151 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 - optional: true - '@openagentpack/sdk@0.7.1': dependencies: jszip: 3.10.1 yaml: 2.9.0 zod: 4.4.3 - '@oxc-project/runtime@0.129.0': {} - - '@oxc-project/runtime@0.133.0': {} - - '@oxc-project/runtime@0.143.0': {} - - '@oxc-project/types@0.127.0': {} - - '@oxc-project/types@0.129.0': {} - - '@oxc-project/types@0.133.0': {} - - '@oxc-project/types@0.143.0': {} + '@oxc-project/runtime@0.150.0': {} '@oxc-project/types@0.146.0': {} - '@oxfmt/binding-android-arm-eabi@0.48.0': - optional: true - - '@oxfmt/binding-android-arm-eabi@0.62.0': - optional: true - - '@oxfmt/binding-android-arm64@0.48.0': - optional: true - - '@oxfmt/binding-android-arm64@0.62.0': - optional: true - - '@oxfmt/binding-darwin-arm64@0.48.0': - optional: true - - '@oxfmt/binding-darwin-arm64@0.62.0': - optional: true - - '@oxfmt/binding-darwin-x64@0.48.0': - optional: true - - '@oxfmt/binding-darwin-x64@0.62.0': - optional: true - - '@oxfmt/binding-freebsd-x64@0.48.0': - optional: true - - '@oxfmt/binding-freebsd-x64@0.62.0': - optional: true - - '@oxfmt/binding-linux-arm-gnueabihf@0.48.0': - optional: true - - '@oxfmt/binding-linux-arm-gnueabihf@0.62.0': - optional: true - - '@oxfmt/binding-linux-arm-musleabihf@0.48.0': - optional: true - - '@oxfmt/binding-linux-arm-musleabihf@0.62.0': - optional: true - - '@oxfmt/binding-linux-arm64-gnu@0.48.0': - optional: true - - '@oxfmt/binding-linux-arm64-gnu@0.62.0': - optional: true - - '@oxfmt/binding-linux-arm64-musl@0.48.0': - optional: true - - '@oxfmt/binding-linux-arm64-musl@0.62.0': - optional: true - - '@oxfmt/binding-linux-ppc64-gnu@0.48.0': - optional: true - - '@oxfmt/binding-linux-ppc64-gnu@0.62.0': - optional: true + '@oxc-project/types@0.150.0': {} - '@oxfmt/binding-linux-riscv64-gnu@0.48.0': + '@oxfmt/binding-android-arm-eabi@0.68.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.62.0': + '@oxfmt/binding-android-arm64@0.68.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.48.0': + '@oxfmt/binding-darwin-arm64@0.68.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.62.0': + '@oxfmt/binding-darwin-x64@0.68.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.48.0': + '@oxfmt/binding-freebsd-x64@0.68.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.62.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.68.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.48.0': + '@oxfmt/binding-linux-arm-musleabihf@0.68.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.62.0': + '@oxfmt/binding-linux-arm64-gnu@0.68.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.48.0': + '@oxfmt/binding-linux-arm64-musl@0.68.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.62.0': + '@oxfmt/binding-linux-ppc64-gnu@0.68.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.48.0': + '@oxfmt/binding-linux-riscv64-gnu@0.68.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.62.0': + '@oxfmt/binding-linux-riscv64-musl@0.68.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.48.0': + '@oxfmt/binding-linux-s390x-gnu@0.68.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.62.0': + '@oxfmt/binding-linux-x64-gnu@0.68.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.48.0': + '@oxfmt/binding-linux-x64-musl@0.68.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.62.0': + '@oxfmt/binding-openharmony-arm64@0.68.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.48.0': + '@oxfmt/binding-win32-arm64-msvc@0.68.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.62.0': + '@oxfmt/binding-win32-ia32-msvc@0.68.0': optional: true - '@oxlint-tsgolint/darwin-arm64@0.22.1': + '@oxfmt/binding-win32-x64-msvc@0.68.0': optional: true '@oxlint-tsgolint/darwin-arm64@7.0.2001': optional: true - '@oxlint-tsgolint/darwin-x64@0.22.1': - optional: true - '@oxlint-tsgolint/darwin-x64@7.0.2001': optional: true - '@oxlint-tsgolint/linux-arm64@0.22.1': - optional: true - '@oxlint-tsgolint/linux-arm64@7.0.2001': optional: true - '@oxlint-tsgolint/linux-x64@0.22.1': - optional: true - '@oxlint-tsgolint/linux-x64@7.0.2001': optional: true - '@oxlint-tsgolint/win32-arm64@0.22.1': - optional: true - '@oxlint-tsgolint/win32-arm64@7.0.2001': optional: true - '@oxlint-tsgolint/win32-x64@0.22.1': - optional: true - '@oxlint-tsgolint/win32-x64@7.0.2001': optional: true - '@oxlint/binding-android-arm-eabi@1.63.0': - optional: true - - '@oxlint/binding-android-arm-eabi@1.77.0': - optional: true - - '@oxlint/binding-android-arm64@1.63.0': - optional: true - - '@oxlint/binding-android-arm64@1.77.0': - optional: true - - '@oxlint/binding-darwin-arm64@1.63.0': - optional: true - - '@oxlint/binding-darwin-arm64@1.77.0': - optional: true - - '@oxlint/binding-darwin-x64@1.63.0': - optional: true - - '@oxlint/binding-darwin-x64@1.77.0': - optional: true - - '@oxlint/binding-freebsd-x64@1.63.0': - optional: true - - '@oxlint/binding-freebsd-x64@1.77.0': - optional: true - - '@oxlint/binding-linux-arm-gnueabihf@1.63.0': - optional: true - - '@oxlint/binding-linux-arm-gnueabihf@1.77.0': - optional: true - - '@oxlint/binding-linux-arm-musleabihf@1.63.0': - optional: true - - '@oxlint/binding-linux-arm-musleabihf@1.77.0': - optional: true - - '@oxlint/binding-linux-arm64-gnu@1.63.0': - optional: true - - '@oxlint/binding-linux-arm64-gnu@1.77.0': - optional: true - - '@oxlint/binding-linux-arm64-musl@1.63.0': - optional: true - - '@oxlint/binding-linux-arm64-musl@1.77.0': - optional: true - - '@oxlint/binding-linux-ppc64-gnu@1.63.0': - optional: true - - '@oxlint/binding-linux-ppc64-gnu@1.77.0': + '@oxlint/binding-android-arm-eabi@1.83.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.63.0': + '@oxlint/binding-android-arm64@1.83.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.77.0': + '@oxlint/binding-darwin-arm64@1.83.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.63.0': + '@oxlint/binding-darwin-x64@1.83.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.77.0': + '@oxlint/binding-freebsd-x64@1.83.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.63.0': + '@oxlint/binding-linux-arm-gnueabihf@1.83.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.77.0': + '@oxlint/binding-linux-arm-musleabihf@1.83.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.63.0': + '@oxlint/binding-linux-arm64-gnu@1.83.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.77.0': + '@oxlint/binding-linux-arm64-musl@1.83.0': optional: true - '@oxlint/binding-linux-x64-musl@1.63.0': + '@oxlint/binding-linux-ppc64-gnu@1.83.0': optional: true - '@oxlint/binding-linux-x64-musl@1.77.0': + '@oxlint/binding-linux-riscv64-gnu@1.83.0': optional: true - '@oxlint/binding-openharmony-arm64@1.63.0': + '@oxlint/binding-linux-riscv64-musl@1.83.0': optional: true - '@oxlint/binding-openharmony-arm64@1.77.0': + '@oxlint/binding-linux-s390x-gnu@1.83.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.63.0': + '@oxlint/binding-linux-x64-gnu@1.83.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.77.0': + '@oxlint/binding-linux-x64-musl@1.83.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.63.0': + '@oxlint/binding-openharmony-arm64@1.83.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.77.0': + '@oxlint/binding-win32-arm64-msvc@1.83.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.63.0': + '@oxlint/binding-win32-ia32-msvc@1.83.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.77.0': + '@oxlint/binding-win32-x64-msvc@1.83.0': optional: true - '@oxlint/plugins@1.61.0': {} - - '@oxlint/plugins@1.73.0': {} + '@oxlint/plugins@1.79.0': {} '@polka/url@1.0.0-next.29': {} @@ -4586,99 +3732,48 @@ snapshots: '@rolldown/binding-android-arm-eabi@1.2.5': optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.17': - optional: true - '@rolldown/binding-android-arm64@1.2.5': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.17': - optional: true - '@rolldown/binding-darwin-arm64@1.2.5': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.17': - optional: true - '@rolldown/binding-darwin-x64@1.2.5': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.17': - optional: true - '@rolldown/binding-freebsd-x64@1.2.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': - optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': - optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': - optional: true - '@rolldown/binding-linux-arm64-musl@1.2.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': - optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': - optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': - optional: true - '@rolldown/binding-linux-x64-gnu@1.2.5': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': - optional: true - '@rolldown/binding-linux-x64-musl@1.2.5': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': - optional: true - '@rolldown/binding-openharmony-arm64@1.2.5': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': - optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': - optional: true - '@rolldown/binding-win32-x64-msvc@1.2.5': optional: true - '@rolldown/pluginutils@1.0.0-rc.17': {} - '@rolldown/pluginutils@1.0.1': {} '@standard-schema/spec@1.1.0': {} @@ -4698,11 +3793,6 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - '@types/aria-query@5.0.4': {} '@types/chai@5.2.3': @@ -4768,114 +3858,144 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260328.1 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260328.1 - '@vitest/browser-preview@4.1.10(@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))': + '@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11)': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/user-event': 14.6.6(@testing-library/dom@10.4.1) - '@vitest/browser': 4.1.10(@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3)) - vitest: '@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)' + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + vitest: 4.1.11(@types/node@25.6.0)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.10(@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))': + '@vitest/browser@4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.10(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3)) - '@vitest/utils': 4.1.10 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + '@vitest/utils': 4.1.11 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.1 - vitest: '@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)' - ws: 8.20.0 + vitest: 4.1.11(@types/node@25.6.0)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + ws: 8.21.3 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/expect@4.1.10': + '@vitest/expect@4.1.11': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.10 - '@vitest/utils': 4.1.10 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.10(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.10 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3) + vite: '@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)' - '@vitest/pretty-format@4.1.10': + '@vitest/pretty-format@4.1.11': dependencies: tinyrainbow: 3.1.1 - '@vitest/runner@4.1.10': + '@vitest/runner@4.1.11': dependencies: - '@vitest/utils': 4.1.10 + '@vitest/utils': 4.1.11 pathe: 2.0.3 - '@vitest/snapshot@4.1.10': + '@vitest/snapshot@4.1.11': dependencies: - '@vitest/pretty-format': 4.1.10 - '@vitest/utils': 4.1.10 + '@vitest/pretty-format': 4.1.11 + '@vitest/utils': 4.1.11 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.10': {} + '@vitest/spy@4.1.11': {} - '@vitest/utils@4.1.10': + '@vitest/utils@4.1.11': dependencies: - '@vitest/pretty-format': 4.1.10 + '@vitest/pretty-format': 4.1.11 convert-source-map: 2.0.0 tinyrainbow: 3.1.1 - '@voidzero-dev/vite-plus-core@0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3)': + '@voidzero-dev/vite-plus-core@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)': dependencies: - '@oxc-project/runtime': 0.129.0 - '@oxc-project/types': 0.129.0 - lightningcss: 1.32.0 + '@oxc-project/runtime': 0.150.0 + '@oxc-project/types': 0.150.0 + lightningcss: 1.33.0 postcss: 8.5.12 + yuku-codegen: 0.9.5 + yuku-parser: 0.9.5 optionalDependencies: '@types/node': 24.12.2 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.23.0 - typescript: 6.0.3 + typescript: 5.9.3 yaml: 2.8.3 - '@voidzero-dev/vite-plus-core@0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)': + '@voidzero-dev/vite-plus-core@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3)': dependencies: - '@oxc-project/runtime': 0.129.0 - '@oxc-project/types': 0.129.0 - lightningcss: 1.32.0 + '@oxc-project/runtime': 0.150.0 + '@oxc-project/types': 0.150.0 + lightningcss: 1.33.0 postcss: 8.5.12 + yuku-codegen: 0.9.5 + yuku-parser: 0.9.5 optionalDependencies: '@types/node': 24.12.2 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.23.0 typescript: 6.0.3 - yaml: 2.9.0 + yaml: 2.8.3 - '@voidzero-dev/vite-plus-core@0.1.22(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)': + '@voidzero-dev/vite-plus-core@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)': dependencies: - '@oxc-project/runtime': 0.129.0 - '@oxc-project/types': 0.129.0 - lightningcss: 1.32.0 + '@oxc-project/runtime': 0.150.0 + '@oxc-project/types': 0.150.0 + lightningcss: 1.33.0 postcss: 8.5.12 + yuku-codegen: 0.9.5 + yuku-parser: 0.9.5 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 24.12.2 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 @@ -4883,396 +4003,203 @@ snapshots: typescript: 6.0.3 yaml: 2.9.0 - '@voidzero-dev/vite-plus-core@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)': - dependencies: - '@oxc-project/runtime': 0.133.0 - '@oxc-project/types': 0.133.0 - lightningcss: 1.32.0 - postcss: 8.5.12 - optionalDependencies: - '@types/node': 24.12.2 - esbuild: 0.28.1 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.23.0 - typescript: 5.9.3 - yaml: 2.8.3 - - '@voidzero-dev/vite-plus-core@0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)': + '@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)': dependencies: - '@oxc-project/runtime': 0.143.0 - '@oxc-project/types': 0.143.0 + '@oxc-project/runtime': 0.150.0 + '@oxc-project/types': 0.150.0 lightningcss: 1.33.0 postcss: 8.5.12 - yuku-codegen: 0.5.48 - yuku-parser: 0.5.48 + yuku-codegen: 0.9.5 + yuku-parser: 0.9.5 optionalDependencies: - '@types/node': 24.12.2 - '@voidzero-dev/vite-plus-darwin-arm64': 0.2.9 - '@voidzero-dev/vite-plus-darwin-x64': 0.2.9 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.2.9 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.2.9 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.2.9 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.2.9 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.2.9 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.2.9 + '@types/node': 25.6.0 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.23.0 - typescript: 5.9.3 - yaml: 2.8.3 - - '@voidzero-dev/vite-plus-darwin-arm64@0.1.22': - optional: true - - '@voidzero-dev/vite-plus-darwin-arm64@0.2.9': - optional: true - - '@voidzero-dev/vite-plus-darwin-x64@0.1.22': - optional: true - - '@voidzero-dev/vite-plus-darwin-x64@0.2.9': - optional: true - - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.22': - optional: true - - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.2.9': - optional: true - - '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.22': - optional: true - - '@voidzero-dev/vite-plus-linux-arm64-musl@0.2.9': - optional: true + typescript: 6.0.3 + yaml: 2.9.0 - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.22': + '@voidzero-dev/vite-plus-darwin-arm64@0.3.3': optional: true - '@voidzero-dev/vite-plus-linux-x64-gnu@0.2.9': + '@voidzero-dev/vite-plus-darwin-x64@0.3.3': optional: true - '@voidzero-dev/vite-plus-linux-x64-musl@0.1.22': + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.3.3': optional: true - '@voidzero-dev/vite-plus-linux-x64-musl@0.2.9': + '@voidzero-dev/vite-plus-linux-arm64-musl@0.3.3': optional: true - '@voidzero-dev/vite-plus-test@0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.1.2 - tinyglobby: 0.2.16 - vite: 8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3) - ws: 8.20.0 - optionalDependencies: - '@types/node': 24.12.2 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - yaml - - '@voidzero-dev/vite-plus-test@0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.1.2 - tinyglobby: 0.2.16 - vite: 8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0) - ws: 8.20.0 - optionalDependencies: - '@types/node': 24.12.2 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - yaml - - '@voidzero-dev/vite-plus-test@0.1.22(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.22(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.1.2 - tinyglobby: 0.2.16 - vite: 8.0.10(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0) - ws: 8.20.0 - optionalDependencies: - '@types/node': 25.6.0 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - yaml - - '@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.1.2 - tinyglobby: 0.2.16 - vite: 8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3) - ws: 8.20.0 - optionalDependencies: - '@types/node': 24.12.2 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - yaml - - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.22': + '@voidzero-dev/vite-plus-linux-x64-gnu@0.3.3': optional: true - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.2.9': + '@voidzero-dev/vite-plus-linux-x64-musl@0.3.3': optional: true - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.22': + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.3.3': optional: true - '@voidzero-dev/vite-plus-win32-x64-msvc@0.2.9': + '@voidzero-dev/vite-plus-win32-x64-msvc@0.3.3': optional: true '@yuku-codegen/binding-android-arm64@0.8.7': optional: true - '@yuku-codegen/binding-darwin-arm64@0.5.48': + '@yuku-codegen/binding-android-arm64@0.9.5': optional: true '@yuku-codegen/binding-darwin-arm64@0.8.7': optional: true - '@yuku-codegen/binding-darwin-x64@0.5.48': + '@yuku-codegen/binding-darwin-arm64@0.9.5': optional: true '@yuku-codegen/binding-darwin-x64@0.8.7': optional: true - '@yuku-codegen/binding-freebsd-x64@0.5.48': + '@yuku-codegen/binding-darwin-x64@0.9.5': optional: true '@yuku-codegen/binding-freebsd-x64@0.8.7': optional: true - '@yuku-codegen/binding-linux-arm-gnu@0.5.48': + '@yuku-codegen/binding-freebsd-x64@0.9.5': optional: true '@yuku-codegen/binding-linux-arm-gnu@0.8.7': optional: true - '@yuku-codegen/binding-linux-arm-musl@0.5.48': + '@yuku-codegen/binding-linux-arm-gnu@0.9.5': optional: true '@yuku-codegen/binding-linux-arm-musl@0.8.7': optional: true - '@yuku-codegen/binding-linux-arm64-gnu@0.5.48': + '@yuku-codegen/binding-linux-arm-musl@0.9.5': optional: true '@yuku-codegen/binding-linux-arm64-gnu@0.8.7': optional: true - '@yuku-codegen/binding-linux-arm64-musl@0.5.48': + '@yuku-codegen/binding-linux-arm64-gnu@0.9.5': optional: true '@yuku-codegen/binding-linux-arm64-musl@0.8.7': optional: true - '@yuku-codegen/binding-linux-x64-gnu@0.5.48': + '@yuku-codegen/binding-linux-arm64-musl@0.9.5': optional: true '@yuku-codegen/binding-linux-x64-gnu@0.8.7': optional: true - '@yuku-codegen/binding-linux-x64-musl@0.5.48': + '@yuku-codegen/binding-linux-x64-gnu@0.9.5': optional: true '@yuku-codegen/binding-linux-x64-musl@0.8.7': optional: true - '@yuku-codegen/binding-win32-arm64@0.5.48': + '@yuku-codegen/binding-linux-x64-musl@0.9.5': optional: true '@yuku-codegen/binding-win32-arm64@0.8.7': optional: true - '@yuku-codegen/binding-win32-x64@0.5.48': + '@yuku-codegen/binding-win32-arm64@0.9.5': optional: true '@yuku-codegen/binding-win32-x64@0.8.7': optional: true + '@yuku-codegen/binding-win32-x64@0.9.5': + optional: true + '@yuku-parser/binding-android-arm64@0.8.7': optional: true - '@yuku-parser/binding-darwin-arm64@0.5.48': + '@yuku-parser/binding-android-arm64@0.9.5': optional: true '@yuku-parser/binding-darwin-arm64@0.8.7': optional: true - '@yuku-parser/binding-darwin-x64@0.5.48': + '@yuku-parser/binding-darwin-arm64@0.9.5': optional: true '@yuku-parser/binding-darwin-x64@0.8.7': optional: true - '@yuku-parser/binding-freebsd-x64@0.5.48': + '@yuku-parser/binding-darwin-x64@0.9.5': optional: true '@yuku-parser/binding-freebsd-x64@0.8.7': optional: true - '@yuku-parser/binding-linux-arm-gnu@0.5.48': + '@yuku-parser/binding-freebsd-x64@0.9.5': optional: true '@yuku-parser/binding-linux-arm-gnu@0.8.7': optional: true - '@yuku-parser/binding-linux-arm-musl@0.5.48': + '@yuku-parser/binding-linux-arm-gnu@0.9.5': optional: true '@yuku-parser/binding-linux-arm-musl@0.8.7': optional: true - '@yuku-parser/binding-linux-arm64-gnu@0.5.48': + '@yuku-parser/binding-linux-arm-musl@0.9.5': optional: true '@yuku-parser/binding-linux-arm64-gnu@0.8.7': optional: true - '@yuku-parser/binding-linux-arm64-musl@0.5.48': + '@yuku-parser/binding-linux-arm64-gnu@0.9.5': optional: true '@yuku-parser/binding-linux-arm64-musl@0.8.7': optional: true - '@yuku-parser/binding-linux-x64-gnu@0.5.48': + '@yuku-parser/binding-linux-arm64-musl@0.9.5': optional: true '@yuku-parser/binding-linux-x64-gnu@0.8.7': optional: true - '@yuku-parser/binding-linux-x64-musl@0.5.48': + '@yuku-parser/binding-linux-x64-gnu@0.9.5': optional: true '@yuku-parser/binding-linux-x64-musl@0.8.7': optional: true - '@yuku-parser/binding-win32-arm64@0.5.48': + '@yuku-parser/binding-linux-x64-musl@0.9.5': optional: true '@yuku-parser/binding-win32-arm64@0.8.7': optional: true - '@yuku-parser/binding-win32-x64@0.5.48': + '@yuku-parser/binding-win32-arm64@0.9.5': optional: true '@yuku-parser/binding-win32-x64@0.8.7': optional: true - '@yuku-toolchain/types@0.5.43': {} + '@yuku-parser/binding-win32-x64@0.9.5': + optional: true '@yuku-toolchain/types@0.8.7': {} + '@yuku-toolchain/types@0.9.5': {} + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -5376,7 +4303,7 @@ snapshots: empathic@2.0.1: {} - es-module-lexer@1.7.0: {} + es-module-lexer@2.3.2: {} esbuild@0.28.1: optionalDependencies: @@ -5417,16 +4344,14 @@ snapshots: transitivePeerDependencies: - bare-abort-controller + expect-type@1.4.0: {} + fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} fast-uri@3.1.2: {} - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - fdir@6.5.0(picomatch@4.0.5): optionalDependencies: picomatch: 4.0.5 @@ -5590,67 +4515,107 @@ snapshots: nanoid@3.3.11: {} - obug@2.1.1: {} - obug@2.1.4: {} - oxfmt@0.48.0: + oxfmt@0.68.0(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)): dependencies: - tinypool: 2.1.0 + tinypool: 2.1.2 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.48.0 - '@oxfmt/binding-android-arm64': 0.48.0 - '@oxfmt/binding-darwin-arm64': 0.48.0 - '@oxfmt/binding-darwin-x64': 0.48.0 - '@oxfmt/binding-freebsd-x64': 0.48.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.48.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.48.0 - '@oxfmt/binding-linux-arm64-gnu': 0.48.0 - '@oxfmt/binding-linux-arm64-musl': 0.48.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.48.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.48.0 - '@oxfmt/binding-linux-riscv64-musl': 0.48.0 - '@oxfmt/binding-linux-s390x-gnu': 0.48.0 - '@oxfmt/binding-linux-x64-gnu': 0.48.0 - '@oxfmt/binding-linux-x64-musl': 0.48.0 - '@oxfmt/binding-openharmony-arm64': 0.48.0 - '@oxfmt/binding-win32-arm64-msvc': 0.48.0 - '@oxfmt/binding-win32-ia32-msvc': 0.48.0 - '@oxfmt/binding-win32-x64-msvc': 0.48.0 - - oxfmt@0.62.0(vite-plus@0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)): - dependencies: - tinypool: 2.1.0 + '@oxfmt/binding-android-arm-eabi': 0.68.0 + '@oxfmt/binding-android-arm64': 0.68.0 + '@oxfmt/binding-darwin-arm64': 0.68.0 + '@oxfmt/binding-darwin-x64': 0.68.0 + '@oxfmt/binding-freebsd-x64': 0.68.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.68.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.68.0 + '@oxfmt/binding-linux-arm64-gnu': 0.68.0 + '@oxfmt/binding-linux-arm64-musl': 0.68.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-musl': 0.68.0 + '@oxfmt/binding-linux-s390x-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-musl': 0.68.0 + '@oxfmt/binding-openharmony-arm64': 0.68.0 + '@oxfmt/binding-win32-arm64-msvc': 0.68.0 + '@oxfmt/binding-win32-ia32-msvc': 0.68.0 + '@oxfmt/binding-win32-x64-msvc': 0.68.0 + vite-plus: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3) + + oxfmt@0.68.0(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3)): + dependencies: + tinypool: 2.1.2 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.62.0 - '@oxfmt/binding-android-arm64': 0.62.0 - '@oxfmt/binding-darwin-arm64': 0.62.0 - '@oxfmt/binding-darwin-x64': 0.62.0 - '@oxfmt/binding-freebsd-x64': 0.62.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.62.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.62.0 - '@oxfmt/binding-linux-arm64-gnu': 0.62.0 - '@oxfmt/binding-linux-arm64-musl': 0.62.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.62.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.62.0 - '@oxfmt/binding-linux-riscv64-musl': 0.62.0 - '@oxfmt/binding-linux-s390x-gnu': 0.62.0 - '@oxfmt/binding-linux-x64-gnu': 0.62.0 - '@oxfmt/binding-linux-x64-musl': 0.62.0 - '@oxfmt/binding-openharmony-arm64': 0.62.0 - '@oxfmt/binding-win32-arm64-msvc': 0.62.0 - '@oxfmt/binding-win32-ia32-msvc': 0.62.0 - '@oxfmt/binding-win32-x64-msvc': 0.62.0 - vite-plus: 0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) - - oxlint-tsgolint@0.22.1: + '@oxfmt/binding-android-arm-eabi': 0.68.0 + '@oxfmt/binding-android-arm64': 0.68.0 + '@oxfmt/binding-darwin-arm64': 0.68.0 + '@oxfmt/binding-darwin-x64': 0.68.0 + '@oxfmt/binding-freebsd-x64': 0.68.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.68.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.68.0 + '@oxfmt/binding-linux-arm64-gnu': 0.68.0 + '@oxfmt/binding-linux-arm64-musl': 0.68.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-musl': 0.68.0 + '@oxfmt/binding-linux-s390x-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-musl': 0.68.0 + '@oxfmt/binding-openharmony-arm64': 0.68.0 + '@oxfmt/binding-win32-arm64-msvc': 0.68.0 + '@oxfmt/binding-win32-ia32-msvc': 0.68.0 + '@oxfmt/binding-win32-x64-msvc': 0.68.0 + vite-plus: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) + + oxfmt@0.68.0(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)): + dependencies: + tinypool: 2.1.2 optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.22.1 - '@oxlint-tsgolint/darwin-x64': 0.22.1 - '@oxlint-tsgolint/linux-arm64': 0.22.1 - '@oxlint-tsgolint/linux-x64': 0.22.1 - '@oxlint-tsgolint/win32-arm64': 0.22.1 - '@oxlint-tsgolint/win32-x64': 0.22.1 + '@oxfmt/binding-android-arm-eabi': 0.68.0 + '@oxfmt/binding-android-arm64': 0.68.0 + '@oxfmt/binding-darwin-arm64': 0.68.0 + '@oxfmt/binding-darwin-x64': 0.68.0 + '@oxfmt/binding-freebsd-x64': 0.68.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.68.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.68.0 + '@oxfmt/binding-linux-arm64-gnu': 0.68.0 + '@oxfmt/binding-linux-arm64-musl': 0.68.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-musl': 0.68.0 + '@oxfmt/binding-linux-s390x-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-musl': 0.68.0 + '@oxfmt/binding-openharmony-arm64': 0.68.0 + '@oxfmt/binding-win32-arm64-msvc': 0.68.0 + '@oxfmt/binding-win32-ia32-msvc': 0.68.0 + '@oxfmt/binding-win32-x64-msvc': 0.68.0 + vite-plus: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) + + oxfmt@0.68.0(vite-plus@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)): + dependencies: + tinypool: 2.1.2 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.68.0 + '@oxfmt/binding-android-arm64': 0.68.0 + '@oxfmt/binding-darwin-arm64': 0.68.0 + '@oxfmt/binding-darwin-x64': 0.68.0 + '@oxfmt/binding-freebsd-x64': 0.68.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.68.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.68.0 + '@oxfmt/binding-linux-arm64-gnu': 0.68.0 + '@oxfmt/binding-linux-arm64-musl': 0.68.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.68.0 + '@oxfmt/binding-linux-riscv64-musl': 0.68.0 + '@oxfmt/binding-linux-s390x-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-gnu': 0.68.0 + '@oxfmt/binding-linux-x64-musl': 0.68.0 + '@oxfmt/binding-openharmony-arm64': 0.68.0 + '@oxfmt/binding-win32-arm64-msvc': 0.68.0 + '@oxfmt/binding-win32-ia32-msvc': 0.68.0 + '@oxfmt/binding-win32-x64-msvc': 0.68.0 + vite-plus: 0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) oxlint-tsgolint@7.0.2001: optionalDependencies: @@ -5661,52 +4626,101 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 7.0.2001 '@oxlint-tsgolint/win32-x64': 7.0.2001 - oxlint@1.63.0(oxlint-tsgolint@0.22.1): + oxlint@1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.83.0 + '@oxlint/binding-android-arm64': 1.83.0 + '@oxlint/binding-darwin-arm64': 1.83.0 + '@oxlint/binding-darwin-x64': 1.83.0 + '@oxlint/binding-freebsd-x64': 1.83.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.83.0 + '@oxlint/binding-linux-arm-musleabihf': 1.83.0 + '@oxlint/binding-linux-arm64-gnu': 1.83.0 + '@oxlint/binding-linux-arm64-musl': 1.83.0 + '@oxlint/binding-linux-ppc64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-musl': 1.83.0 + '@oxlint/binding-linux-s390x-gnu': 1.83.0 + '@oxlint/binding-linux-x64-gnu': 1.83.0 + '@oxlint/binding-linux-x64-musl': 1.83.0 + '@oxlint/binding-openharmony-arm64': 1.83.0 + '@oxlint/binding-win32-arm64-msvc': 1.83.0 + '@oxlint/binding-win32-ia32-msvc': 1.83.0 + '@oxlint/binding-win32-x64-msvc': 1.83.0 + oxlint-tsgolint: 7.0.2001 + vite-plus: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3) + + oxlint@1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3)): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.83.0 + '@oxlint/binding-android-arm64': 1.83.0 + '@oxlint/binding-darwin-arm64': 1.83.0 + '@oxlint/binding-darwin-x64': 1.83.0 + '@oxlint/binding-freebsd-x64': 1.83.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.83.0 + '@oxlint/binding-linux-arm-musleabihf': 1.83.0 + '@oxlint/binding-linux-arm64-gnu': 1.83.0 + '@oxlint/binding-linux-arm64-musl': 1.83.0 + '@oxlint/binding-linux-ppc64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-musl': 1.83.0 + '@oxlint/binding-linux-s390x-gnu': 1.83.0 + '@oxlint/binding-linux-x64-gnu': 1.83.0 + '@oxlint/binding-linux-x64-musl': 1.83.0 + '@oxlint/binding-openharmony-arm64': 1.83.0 + '@oxlint/binding-win32-arm64-msvc': 1.83.0 + '@oxlint/binding-win32-ia32-msvc': 1.83.0 + '@oxlint/binding-win32-x64-msvc': 1.83.0 + oxlint-tsgolint: 7.0.2001 + vite-plus: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) + + oxlint@1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.63.0 - '@oxlint/binding-android-arm64': 1.63.0 - '@oxlint/binding-darwin-arm64': 1.63.0 - '@oxlint/binding-darwin-x64': 1.63.0 - '@oxlint/binding-freebsd-x64': 1.63.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.63.0 - '@oxlint/binding-linux-arm-musleabihf': 1.63.0 - '@oxlint/binding-linux-arm64-gnu': 1.63.0 - '@oxlint/binding-linux-arm64-musl': 1.63.0 - '@oxlint/binding-linux-ppc64-gnu': 1.63.0 - '@oxlint/binding-linux-riscv64-gnu': 1.63.0 - '@oxlint/binding-linux-riscv64-musl': 1.63.0 - '@oxlint/binding-linux-s390x-gnu': 1.63.0 - '@oxlint/binding-linux-x64-gnu': 1.63.0 - '@oxlint/binding-linux-x64-musl': 1.63.0 - '@oxlint/binding-openharmony-arm64': 1.63.0 - '@oxlint/binding-win32-arm64-msvc': 1.63.0 - '@oxlint/binding-win32-ia32-msvc': 1.63.0 - '@oxlint/binding-win32-x64-msvc': 1.63.0 - oxlint-tsgolint: 0.22.1 - - oxlint@1.77.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)): + '@oxlint/binding-android-arm-eabi': 1.83.0 + '@oxlint/binding-android-arm64': 1.83.0 + '@oxlint/binding-darwin-arm64': 1.83.0 + '@oxlint/binding-darwin-x64': 1.83.0 + '@oxlint/binding-freebsd-x64': 1.83.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.83.0 + '@oxlint/binding-linux-arm-musleabihf': 1.83.0 + '@oxlint/binding-linux-arm64-gnu': 1.83.0 + '@oxlint/binding-linux-arm64-musl': 1.83.0 + '@oxlint/binding-linux-ppc64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-musl': 1.83.0 + '@oxlint/binding-linux-s390x-gnu': 1.83.0 + '@oxlint/binding-linux-x64-gnu': 1.83.0 + '@oxlint/binding-linux-x64-musl': 1.83.0 + '@oxlint/binding-openharmony-arm64': 1.83.0 + '@oxlint/binding-win32-arm64-msvc': 1.83.0 + '@oxlint/binding-win32-ia32-msvc': 1.83.0 + '@oxlint/binding-win32-x64-msvc': 1.83.0 + oxlint-tsgolint: 7.0.2001 + vite-plus: 0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) + + oxlint@1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.77.0 - '@oxlint/binding-android-arm64': 1.77.0 - '@oxlint/binding-darwin-arm64': 1.77.0 - '@oxlint/binding-darwin-x64': 1.77.0 - '@oxlint/binding-freebsd-x64': 1.77.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.77.0 - '@oxlint/binding-linux-arm-musleabihf': 1.77.0 - '@oxlint/binding-linux-arm64-gnu': 1.77.0 - '@oxlint/binding-linux-arm64-musl': 1.77.0 - '@oxlint/binding-linux-ppc64-gnu': 1.77.0 - '@oxlint/binding-linux-riscv64-gnu': 1.77.0 - '@oxlint/binding-linux-riscv64-musl': 1.77.0 - '@oxlint/binding-linux-s390x-gnu': 1.77.0 - '@oxlint/binding-linux-x64-gnu': 1.77.0 - '@oxlint/binding-linux-x64-musl': 1.77.0 - '@oxlint/binding-openharmony-arm64': 1.77.0 - '@oxlint/binding-win32-arm64-msvc': 1.77.0 - '@oxlint/binding-win32-ia32-msvc': 1.77.0 - '@oxlint/binding-win32-x64-msvc': 1.77.0 + '@oxlint/binding-android-arm-eabi': 1.83.0 + '@oxlint/binding-android-arm64': 1.83.0 + '@oxlint/binding-darwin-arm64': 1.83.0 + '@oxlint/binding-darwin-x64': 1.83.0 + '@oxlint/binding-freebsd-x64': 1.83.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.83.0 + '@oxlint/binding-linux-arm-musleabihf': 1.83.0 + '@oxlint/binding-linux-arm64-gnu': 1.83.0 + '@oxlint/binding-linux-arm64-musl': 1.83.0 + '@oxlint/binding-linux-ppc64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-gnu': 1.83.0 + '@oxlint/binding-linux-riscv64-musl': 1.83.0 + '@oxlint/binding-linux-s390x-gnu': 1.83.0 + '@oxlint/binding-linux-x64-gnu': 1.83.0 + '@oxlint/binding-linux-x64-musl': 1.83.0 + '@oxlint/binding-openharmony-arm64': 1.83.0 + '@oxlint/binding-win32-arm64-msvc': 1.83.0 + '@oxlint/binding-win32-ia32-msvc': 1.83.0 + '@oxlint/binding-win32-x64-msvc': 1.83.0 oxlint-tsgolint: 7.0.2001 - vite-plus: 0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) + vite-plus: 0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) pako@1.0.11: {} @@ -5716,14 +4730,8 @@ snapshots: picocolors@1.1.1: {} - picomatch@4.0.4: {} - picomatch@4.0.5: {} - pixelmatch@7.2.0: - dependencies: - pngjs: 7.0.0 - pngjs@7.0.0: {} postcss@8.5.12: @@ -5776,27 +4784,6 @@ snapshots: transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0-rc.17: - dependencies: - '@oxc-project/types': 0.127.0 - '@rolldown/pluginutils': 1.0.0-rc.17 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.17 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 - '@rolldown/binding-darwin-x64': 1.0.0-rc.17 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 - rolldown@1.2.5: dependencies: '@oxc-project/types': 0.146.0 @@ -5822,6 +4809,8 @@ snapshots: setimmediate@1.0.5: {} + siginfo@2.0.0: {} + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -5834,6 +4823,8 @@ snapshots: source-map-js@1.2.1: {} + stackback@0.0.2: {} + std-env@4.1.0: {} streamx@2.28.0: @@ -5895,21 +4886,14 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.1.2: {} - tinyexec@1.3.0: {} - tinyglobby@0.2.16: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - tinypool@2.1.0: {} + tinypool@2.1.2: {} tinyrainbow@3.1.1: {} @@ -5943,9 +4927,6 @@ snapshots: - oxc-resolver - vue-tsc - tslib@2.8.1: - optional: true - tsx@4.23.0: dependencies: esbuild: 0.28.1 @@ -5977,30 +4958,37 @@ snapshots: verkit@0.3.2: {} - vite-plus@0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3): - dependencies: - '@oxc-project/types': 0.129.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3) - '@voidzero-dev/vite-plus-test': 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3) - oxfmt: 0.48.0 - oxlint: 1.63.0(oxlint-tsgolint@0.22.1) - oxlint-tsgolint: 0.22.1 + vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3): + dependencies: + '@oxc-project/types': 0.150.0 + '@oxlint/plugins': 1.79.0 + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + oxfmt: 0.68.0(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)) + oxlint: 1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)) + oxlint-tsgolint: 7.0.2001 + vite: '@voidzero-dev/vite-plus-core@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3)' + vitest: 4.1.11(@types/node@24.12.2)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.22 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.22 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.22 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.22 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.22 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.22 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.22 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.22 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - '@types/node' - '@vitejs/devtools' - '@vitest/coverage-istanbul' @@ -6012,44 +5000,52 @@ snapshots: - jiti - jsdom - less + - msw - publint - sass - sass-embedded - stylus - sugarss + - svelte - terser - tsx - typescript - unplugin-unused - unrun - utf-8-validate - - vite - yaml - vite-plus@0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.129.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.22(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.48.0 - oxlint: 1.63.0(oxlint-tsgolint@0.22.1) - oxlint-tsgolint: 0.22.1 + vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3): + dependencies: + '@oxc-project/types': 0.150.0 + '@oxlint/plugins': 1.79.0 + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + oxfmt: 0.68.0(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3)) + oxlint: 1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3)) + oxlint-tsgolint: 7.0.2001 + vite: '@voidzero-dev/vite-plus-core@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.8.3)' + vitest: 4.1.11(@types/node@24.12.2)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.22 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.22 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.22 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.22 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.22 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.22 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.22 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.22 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - '@types/node' - '@vitejs/devtools' - '@vitest/coverage-istanbul' @@ -6061,44 +5057,52 @@ snapshots: - jiti - jsdom - less + - msw - publint - sass - sass-embedded - stylus - sugarss + - svelte - terser - tsx - typescript - unplugin-unused - unrun - utf-8-validate - - vite - yaml - vite-plus@0.1.22(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.129.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.22(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.22(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.48.0 - oxlint: 1.63.0(oxlint-tsgolint@0.22.1) - oxlint-tsgolint: 0.22.1 + vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0): + dependencies: + '@oxc-project/types': 0.150.0 + '@oxlint/plugins': 1.79.0 + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + oxfmt: 0.68.0(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + oxlint: 1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + oxlint-tsgolint: 7.0.2001 + vite: '@voidzero-dev/vite-plus-core@0.3.3(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)' + vitest: 4.1.11(@types/node@24.12.2)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.22 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.22 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.22 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.22 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.22 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.22 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.22 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.22 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - '@types/node' - '@vitejs/devtools' - '@vitest/coverage-istanbul' @@ -6110,53 +5114,52 @@ snapshots: - jiti - jsdom - less + - msw - publint - sass - sass-embedded - stylus - sugarss + - svelte - terser - tsx - typescript - unplugin-unused - unrun - utf-8-validate - - vite - yaml - vite-plus@0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3): - dependencies: - '@oxc-project/types': 0.143.0 - '@oxlint/plugins': 1.73.0 - '@vitest/browser': 4.1.10(@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3)) - '@vitest/browser-preview': 4.1.10(@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3)) - '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.10 - '@vitest/runner': 4.1.10 - '@vitest/snapshot': 4.1.10 - '@vitest/spy': 4.1.10 - '@vitest/utils': 4.1.10 - '@voidzero-dev/vite-plus-core': 0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.8.3) - oxfmt: 0.62.0(vite-plus@0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)) - oxlint: 1.77.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.2.9(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)) + vite-plus@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0): + dependencies: + '@oxc-project/types': 0.150.0 + '@oxlint/plugins': 1.79.0 + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + oxfmt: 0.68.0(vite-plus@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + oxlint: 1.83.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) oxlint-tsgolint: 7.0.2001 - vitest: '@voidzero-dev/vite-plus-test@0.1.24(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3))(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)' + vitest: 4.1.11(@types/node@25.6.0)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.2.9 - '@voidzero-dev/vite-plus-darwin-x64': 0.2.9 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.2.9 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.2.9 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.2.9 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.2.9 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.2.9 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.2.9 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.3 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.3 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.3 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.3 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.3 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - '@types/node' - '@vitejs/devtools' - '@vitest/coverage-istanbul' @@ -6181,53 +5184,68 @@ snapshots: - unplugin-unused - unrun - utf-8-validate - - vite - yaml - vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.8.3): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.12 - rolldown: 1.0.0-rc.17 - tinyglobby: 0.2.16 + vitest@4.1.11(@types/node@24.12.2)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 + pathe: 2.0.3 + picomatch: 4.0.5 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: '@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)' + why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.12.2 - esbuild: 0.28.1 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.23.0 - yaml: 2.8.3 + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + transitivePeerDependencies: + - msw - vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.12 - rolldown: 1.0.0-rc.17 - tinyglobby: 0.2.16 + vitest@4.1.11(@types/node@25.6.0)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 + pathe: 2.0.3 + picomatch: 4.0.5 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: '@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0)' + why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.12.2 - esbuild: 0.28.1 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.23.0 - yaml: 2.9.0 + '@types/node': 25.6.0 + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.3(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(typescript@6.0.3)(yaml@2.9.0))(vitest@4.1.11) + transitivePeerDependencies: + - msw - vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.0)(yaml@2.9.0): + why-is-node-running@2.3.0: dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.12 - rolldown: 1.0.0-rc.17 - tinyglobby: 0.2.16 - optionalDependencies: - '@types/node': 25.6.0 - esbuild: 0.28.1 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.23.0 - yaml: 2.9.0 + siginfo: 2.0.0 + stackback: 0.0.2 widest-line@5.0.0: dependencies: @@ -6239,8 +5257,6 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 - ws@8.20.0: {} - ws@8.21.3: {} yaml@2.8.3: {} @@ -6255,21 +5271,9 @@ snapshots: dependencies: '@yuku-toolchain/types': 0.8.7 - yuku-codegen@0.5.48: + yuku-ast@0.9.5: dependencies: - '@yuku-toolchain/types': 0.5.43 - optionalDependencies: - '@yuku-codegen/binding-darwin-arm64': 0.5.48 - '@yuku-codegen/binding-darwin-x64': 0.5.48 - '@yuku-codegen/binding-freebsd-x64': 0.5.48 - '@yuku-codegen/binding-linux-arm-gnu': 0.5.48 - '@yuku-codegen/binding-linux-arm-musl': 0.5.48 - '@yuku-codegen/binding-linux-arm64-gnu': 0.5.48 - '@yuku-codegen/binding-linux-arm64-musl': 0.5.48 - '@yuku-codegen/binding-linux-x64-gnu': 0.5.48 - '@yuku-codegen/binding-linux-x64-musl': 0.5.48 - '@yuku-codegen/binding-win32-arm64': 0.5.48 - '@yuku-codegen/binding-win32-x64': 0.5.48 + '@yuku-toolchain/types': 0.9.5 yuku-codegen@0.8.7: dependencies: @@ -6288,21 +5292,22 @@ snapshots: '@yuku-codegen/binding-win32-arm64': 0.8.7 '@yuku-codegen/binding-win32-x64': 0.8.7 - yuku-parser@0.5.48: + yuku-codegen@0.9.5: dependencies: - '@yuku-toolchain/types': 0.5.43 + '@yuku-toolchain/types': 0.9.5 optionalDependencies: - '@yuku-parser/binding-darwin-arm64': 0.5.48 - '@yuku-parser/binding-darwin-x64': 0.5.48 - '@yuku-parser/binding-freebsd-x64': 0.5.48 - '@yuku-parser/binding-linux-arm-gnu': 0.5.48 - '@yuku-parser/binding-linux-arm-musl': 0.5.48 - '@yuku-parser/binding-linux-arm64-gnu': 0.5.48 - '@yuku-parser/binding-linux-arm64-musl': 0.5.48 - '@yuku-parser/binding-linux-x64-gnu': 0.5.48 - '@yuku-parser/binding-linux-x64-musl': 0.5.48 - '@yuku-parser/binding-win32-arm64': 0.5.48 - '@yuku-parser/binding-win32-x64': 0.5.48 + '@yuku-codegen/binding-android-arm64': 0.9.5 + '@yuku-codegen/binding-darwin-arm64': 0.9.5 + '@yuku-codegen/binding-darwin-x64': 0.9.5 + '@yuku-codegen/binding-freebsd-x64': 0.9.5 + '@yuku-codegen/binding-linux-arm-gnu': 0.9.5 + '@yuku-codegen/binding-linux-arm-musl': 0.9.5 + '@yuku-codegen/binding-linux-arm64-gnu': 0.9.5 + '@yuku-codegen/binding-linux-arm64-musl': 0.9.5 + '@yuku-codegen/binding-linux-x64-gnu': 0.9.5 + '@yuku-codegen/binding-linux-x64-musl': 0.9.5 + '@yuku-codegen/binding-win32-arm64': 0.9.5 + '@yuku-codegen/binding-win32-x64': 0.9.5 yuku-parser@0.8.7: dependencies: @@ -6322,6 +5327,24 @@ snapshots: '@yuku-parser/binding-win32-arm64': 0.8.7 '@yuku-parser/binding-win32-x64': 0.8.7 + yuku-parser@0.9.5: + dependencies: + '@yuku-toolchain/types': 0.9.5 + yuku-ast: 0.9.5 + optionalDependencies: + '@yuku-parser/binding-android-arm64': 0.9.5 + '@yuku-parser/binding-darwin-arm64': 0.9.5 + '@yuku-parser/binding-darwin-x64': 0.9.5 + '@yuku-parser/binding-freebsd-x64': 0.9.5 + '@yuku-parser/binding-linux-arm-gnu': 0.9.5 + '@yuku-parser/binding-linux-arm-musl': 0.9.5 + '@yuku-parser/binding-linux-arm64-gnu': 0.9.5 + '@yuku-parser/binding-linux-arm64-musl': 0.9.5 + '@yuku-parser/binding-linux-x64-gnu': 0.9.5 + '@yuku-parser/binding-linux-x64-musl': 0.9.5 + '@yuku-parser/binding-win32-arm64': 0.9.5 + '@yuku-parser/binding-win32-x64': 0.9.5 + zod@4.4.3: {} zustand@4.4.7(@types/react@18.3.31)(immer@10.2.0)(react@18.3.1): diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 611df313..94221803 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,9 +14,9 @@ catalog: tsx: ^4.23.0 typescript: ^5 undici: ^6.27.0 - vite: npm:@voidzero-dev/vite-plus-core@latest - vite-plus: latest - vitest: npm:@voidzero-dev/vite-plus-test@latest + vite: npm:@voidzero-dev/vite-plus-core@0.3.3 + vite-plus: 0.3.3 + vitest: 4.1.11 yaml: ^2.8.3 yauzl: ^3.4.0 @@ -24,6 +24,7 @@ catalogMode: prefer overrides: vite: "catalog:" vitest: "catalog:" + "ws@>=8.0.0 <8.21.0": 8.21.3 peerDependencyRules: allowAny: - vite diff --git a/skills/bailian-cli/SKILL.md b/skills/bailian-cli/SKILL.md index 53ea8f50..f130239c 100644 --- a/skills/bailian-cli/SKILL.md +++ b/skills/bailian-cli/SKILL.md @@ -1,7 +1,7 @@ --- name: bailian-cli metadata: - version: "1.28.0" + version: "2.0.0" requires: bins: ["bl"] description: >- @@ -58,35 +58,38 @@ Do not guess flags — use the reference files or `--help`. Use this table only after the decision table in [`bailian-protocol`](../bailian-protocol/SKILL.md#provider-selection-and-consent) has routed the request to `bl` (class 4, or class 2 after the user picks Bailian). Hub-owned intents only — for media / fine-tune / agents.yaml / Sandbox, soft hand-off to the domain skill. -| User intent | Command | Notes | -| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| Explicit Bailian model chat / text execution | `bl text chat` | Default `qwen3.8-max` | -| Bailian agent / workflow | `bl app call` | Needs `--app-id` | -| Find app by name | `bl app list` then `bl app call` | Console auth | -| Bailian app memory CRUD (not host-agent memory) | `bl memory *` | [`reference/memory.md`](reference/memory.md) | -| Bailian knowledge base RAG | `bl knowledge search` / `chat` | API key + agent/workspace IDs | -| Upload a file as a step of a Bailian workflow | `bl file upload` | When you need `oss://` URL explicitly; not for generic hosting | -| Bailian model selection / recommendation | `bl advisor recommend` | Intent → candidate recall → LLM ranking | -| Bailian model catalog / pricing / params | `bl model list` | No auth (public catalog); `--model ` for detail, `--enrich` for input params | -| Find a model by keyword / modality | `bl model search` | Weighted ranking; `--input-modality` / `--output-modality`; offline models hidden by default | -| SDK sample code for calling a model | `bl model code` | `--sdk openai\|dashscope`, `--lang`; text output is the snippet alone, safe to redirect | -| Install / list / update / remove registry skills | `bl skill add` / `list` / `update` / `remove` | Bailian skill registry; see [`reference/skill.md`](reference/skill.md) | -| Bailian MCP marketplace discovery / call | `bl mcp list` / `tools` / `call` | — | -| Bailian pipeline workflow (a step in a bl flow) | `bl pipeline run` / `validate` | JSON/YAML workflow definitions | -| Bailian rate limits / quota | `bl quota list` / `check` / `request` | Console auth; class 2 — ask which product first if unnamed | -| Bailian free tier / usage stats | `bl usage free` / `stats` / `freetier` | Console auth; class 2 — ask which product first if unnamed | -| Bailian Token Plan quota usage | `bl usage token-plan` | Console auth; class 2 — ask which product first if unnamed | -| Bailian Coding Plan quota usage | `bl usage coding-plan` | Console auth; class 2 — ask which product first if unnamed | -| Model monitoring (calls, latency, errors, delivery) | `bl monitor overview` / `models` / `metrics` / `errors` / `delivery *` | Console auth; see [`reference/monitor.md`](reference/monitor.md) | -| Model call logs / traces | `bl log audit *` / `bl log inference *` / `bl log status` / `bl log trace *` | Console auth; audit and inference logs have separate APIs and switches; see [`reference/log.md`](reference/log.md) | -| Model alert rules / templates / history | `bl alert list` / `create` / `update` / `delete` / `enable` / `disable` / `history` / `metrics` / `template *` | Console auth; contacts are managed in the CloudMonitor console; see [`reference/alert.md`](reference/alert.md) | -| Console API (advanced) | `bl console call` | Console auth | -| Bailian workspace listing | `bl workspace list` | Console auth | -| Switch CLI Help / Quick Start language | `bl config set --key language --value zh-CN` | Use `en-US` to switch back; follows the active config profile | -| Image / video / speech / omni / vision | → skill `bailian-gen` | Fallback: `bl image\|video\|speech\|omni\|vision --help` | -| Dataset / fine-tune / deploy | → skill `bailian-finetune` | Fallback: `bl dataset\|finetune\|deploy --help` | -| agents.yaml IaC / managed-agent sessions | → skill `bailian-managed-agent` | Fallback: `bl managed-agent --help`; `apply`/`destroy` need `--yes` after `plan` | -| Web search (model-aware routing) | → skill `bailian-web-search` | Token Plan vs MCP path + fallback; fallback: `bl search web --help` | +| User intent | Command | Notes | +| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| Explicit Bailian model chat / text execution | `bl text chat` | Default `qwen3.8-max` | +| Bailian agent / workflow | `bl app call` | Needs `--app-id` | +| Find app by name | `bl app list` then `bl app call` | Console auth | +| Bailian app memory CRUD (not host-agent memory) | `bl memory *` | [`reference/memory.md`](reference/memory.md) | +| Bailian knowledge base RAG | `bl knowledge search` / `chat` | API key + agent/workspace IDs | +| Upload a file as a step of a Bailian workflow | `bl file upload` | When you need `oss://` URL explicitly; not for generic hosting | +| Bailian model selection / recommendation | `bl advisor recommend` | Intent → candidate recall → LLM ranking | +| Bailian model catalog / pricing / params | `bl model list` | No auth (public catalog); `--model ` for detail, `--enrich` for input params | +| Find a model by keyword / modality | `bl model search` | Weighted ranking; `--input-modality` / `--output-modality`; offline models hidden by default | +| SDK sample code for calling a model | `bl model code` | `--sdk openai\|dashscope`, `--lang`; text output is the snippet alone, safe to redirect | +| Install / list / update / remove registry skills | `bl skill add` / `list` / `update` / `remove` | Bailian skill registry; see [`reference/skill.md`](reference/skill.md) | +| Bailian MCP marketplace discovery / call | `bl mcp list` / `tools` / `call` | — | +| Register or remove a Bailian MCP in an Agent | `bl mcp connect` / `disconnect` | Codex, Claude Code, Cursor, Qoder, Qoder Work, QwenWork, Qwen Code, Gemini, OpenCode, OpenClaw, DeepSeek Harness, ZCode, WorkBuddy | +| Bailian pipeline workflow (a step in a bl flow) | `bl pipeline run` / `validate` | JSON/YAML workflow definitions | +| Bailian rate limits / quota | `bl quota list` / `check` / `request` | Console auth; class 2 — ask which product first if unnamed | +| Bailian free tier / usage stats | `bl usage free` / `stats` / `freetier` | Console auth; class 2 — ask which product first if unnamed | +| Bailian Token Plan quota usage | `bl usage token-plan` | Console auth; class 2 — ask which product first if unnamed | +| Token Plan harness entitlement quota | `bl token-plan harness-quota` | Console auth; issued quota usage + still-issuing harnesses | +| Bailian Coding Plan quota usage | `bl usage coding-plan` | Console auth; class 2 — ask which product first if unnamed | +| Model monitoring (calls, latency, errors, delivery) | `bl monitor overview` / `models` / `metrics` / `errors` / `delivery *` | Console auth; see [`reference/monitor.md`](reference/monitor.md) | +| Model call logs / traces | `bl log audit *` / `bl log inference *` / `bl log status` / `bl log trace *` | Console auth; audit and inference logs have separate APIs and switches; see [`reference/log.md`](reference/log.md) | +| Model alert rules / templates / history | `bl alert list` / `create` / `update` / `delete` / `enable` / `disable` / `history` / `metrics` / `template *` | Console auth; contacts are managed in the CloudMonitor console; see [`reference/alert.md`](reference/alert.md) | +| Console API (advanced) | `bl console call` | Console auth | +| Bailian workspace listing | `bl workspace list` | Console auth | +| Switch CLI Help / Quick Start language | `bl config set --key language --value zh-CN` | Use `en-US` to switch back; follows the active config profile | +| Image / video / speech / omni / vision | → skill `bailian-gen` | Fallback: `bl image\|video\|speech\|omni\|vision --help` | +| Dataset / fine-tune / deploy | → skill `bailian-finetune` | Fallback: `bl dataset\|finetune\|deploy --help` | +| agents.yaml IaC / managed-agent sessions | → skill `bailian-managed-agent` | Fallback: `bl managed-agent --help`; `apply`/`destroy` need `--yes` after `plan` | +| Bailian Sandbox instance / template lifecycle | → skill `bailian-sandbox` | Fallback: `bl sandbox --help` | +| Web search (model-aware routing) | → skill `bailian-web-search` | Token Plan vs MCP path + fallback; fallback: `bl search web --help` | Flags, usage, and examples: see hub [`reference/`](reference/index.md) or `bl --help` — do not guess flags. Domain command details live in the owning skill's `reference/`. diff --git a/skills/bailian-cli/reference/config.md b/skills/bailian-cli/reference/config.md index 2ca6348b..9e3cc9b8 100644 --- a/skills/bailian-cli/reference/config.md +++ b/skills/bailian-cli/reference/config.md @@ -35,7 +35,7 @@ Index: [index.md](index.md) | `--base-url ` | string | no | API base URL | | `--region ` | string | no | Model Studio region (e.g. cn-beijing, ap-southeast-1); converted into --base-url. Token Plan only | | `--api-key ` | string | no | API key | -| `--key ` | string | no | Obfuscated API key from the web console (starts with "o1\_"); decoded into --api-key | +| `--key ` | string | no | Obfuscated API key from the web console (starts with "o1_"); decoded into --api-key | | `--model ` | string | yes | Default model name | | `--context-window ` | number | no | OpenClaw only: model context window in tokens (default: 256000) | | `--wire-api ` | string | no | Codex only: wire protocol (default: responses). "chat" only works with legacy Codex <= 0.80.0 | @@ -88,10 +88,10 @@ bl config list --output json #### Flags -| Flag | Type | Required | Description | -| ----------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `--key ` | string | yes | Config key (language, base*url, output, output_dir, timeout, watermark, api_key, api_key_capabilities, access_token, access_key_id, access_key_secret, security_token, default*\*\_model, workspace_id) | -| `--value ` | string | yes | Value to set | +| Flag | Type | Required | Description | +| ----------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--key ` | string | yes | Config key (language, base_url, output, output_dir, timeout, watermark, api_key, api_key_capabilities, access_token, access_key_id, access_key_secret, security_token, default_*_model, workspace_id) | +| `--value ` | string | yes | Value to set | #### Examples diff --git a/skills/bailian-cli/reference/index.md b/skills/bailian-cli/reference/index.md index 30d49495..b3f9c402 100644 --- a/skills/bailian-cli/reference/index.md +++ b/skills/bailian-cli/reference/index.md @@ -4,7 +4,7 @@ > Regenerate: `pnpm --filter bailian-cli run generate:reference`. Command **details** are in sibling `.md` files in this directory. -This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-\* skills. +This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-* skills. Use this index for the skill-scoped quick index and global flags. ## Quick index @@ -65,7 +65,7 @@ Use this index for the skill-scoped quick index and global flags. | `bl knowledge list` | API Key | List knowledge bases in the workspace | [knowledge.md](knowledge.md) | | `bl knowledge retrieve` | API Key | Retrieve from a Bailian knowledge base (deprecated, use `search` instead) | [knowledge.md](knowledge.md) | | `bl knowledge search` | API Key | Search a Bailian knowledge base (RAG semantic retrieval) | [knowledge.md](knowledge.md) | -| `bl knowledge service copy` | API Key | Copy a service into a new draft (name gets a copy\_ prefix) | [knowledge.md](knowledge.md) | +| `bl knowledge service copy` | API Key | Copy a service into a new draft (name gets a copy_ prefix) | [knowledge.md](knowledge.md) | | `bl knowledge service create` | API Key | Create a retrieval / Q&A service (initial status: draft, version: beta) | [knowledge.md](knowledge.md) | | `bl knowledge service delete` | API Key | Delete a retrieval / Q&A service (soft delete, idempotent) | [knowledge.md](knowledge.md) | | `bl knowledge service deploy` | API Key | Publish the beta draft of a service as a new version | [knowledge.md](knowledge.md) | @@ -89,6 +89,8 @@ Use this index for the skill-scoped quick index and global flags. | `bl log trace list` | Console | List call traces for a model or app | [log.md](log.md) | | `bl log trace stats` | Console | Show per-resource trace statistics (calls, tokens, latency) | [log.md](log.md) | | `bl mcp call` | API Key | Call a tool on an MCP server (tools/call) | [mcp.md](mcp.md) | +| `bl mcp connect` | API Key | Register a Bailian MCP server in an Agent's native configuration | [mcp.md](mcp.md) | +| `bl mcp disconnect` | No Auth | Remove an unchanged MCP registration previously managed by bailian-cli | [mcp.md](mcp.md) | | `bl mcp list` | Console | List MCP servers activated under your Bailian account | [mcp.md](mcp.md) | | `bl mcp tools` | API Key | List tools exposed by an MCP server (tools/list) | [mcp.md](mcp.md) | | `bl memory add` | API Key | Add memory from messages or custom content | [memory.md](memory.md) | @@ -124,7 +126,7 @@ Use this index for the skill-scoped quick index and global flags. | `bl quota update` | API Key | Update model rate limits (QPM/TPM) | [quota.md](quota.md) | | `bl search web` | API Key | Search the web using DashScope MCP WebSearch service | [search.md](search.md) | | `bl skill add` | No Auth | Install skills from the Bailian skill registry into local agents | [skill.md](skill.md) | -| `bl skill init` | No Auth | Install all bailian-\* skills (one-shot bootstrap for new environments) | [skill.md](skill.md) | +| `bl skill init` | No Auth | Install all bailian-* skills (one-shot bootstrap for new environments) | [skill.md](skill.md) | | `bl skill list` | No Auth | List registry skills and diff against local installs | [skill.md](skill.md) | | `bl skill remove` | No Auth | Remove locally installed skills (registry is untouched) | [skill.md](skill.md) | | `bl skill update` | No Auth | Update installed skills to the latest registry versions | [skill.md](skill.md) | @@ -158,7 +160,7 @@ Use this index for the skill-scoped quick index and global flags. | `file` | `upload` | [file.md](file.md) | | `knowledge` | `category add`, `category delete`, `category list`, `chat`, `chunk add`, `chunk delete`, `chunk list`, `chunk update`, `collection create`, `collection get`, `create`, `delete`, `doc delete`, `doc import-oss`, `doc list`, `doc status`, `doc tag`, `doc upload`, `file delete`, `file get`, `file list`, `info`, `list`, `retrieve`, `search`, `service copy`, `service create`, `service delete`, `service deploy`, `service get`, `service list`, `service update`, `stats`, `update` | [knowledge.md](knowledge.md) | | `log` | `audit count`, `audit disable`, `audit enable`, `audit get`, `audit list`, `inference count`, `inference disable`, `inference enable`, `inference get`, `inference list`, `status`, `trace get`, `trace list`, `trace stats` | [log.md](log.md) | -| `mcp` | `call`, `list`, `tools` | [mcp.md](mcp.md) | +| `mcp` | `call`, `connect`, `disconnect`, `list`, `tools` | [mcp.md](mcp.md) | | `memory` | `add`, `delete`, `list`, `profile create`, `profile get`, `search`, `update` | [memory.md](memory.md) | | `model` | `code`, `list`, `search` | [model.md](model.md) | | `monitor` | `delivery disable`, `delivery enable`, `delivery status`, `errors`, `metrics`, `models`, `overview` | [monitor.md](monitor.md) | diff --git a/skills/bailian-cli/reference/knowledge.md b/skills/bailian-cli/reference/knowledge.md index 8e49e997..052b72f7 100644 --- a/skills/bailian-cli/reference/knowledge.md +++ b/skills/bailian-cli/reference/knowledge.md @@ -34,7 +34,7 @@ Index: [index.md](index.md) | `bl knowledge list` | API Key | List knowledge bases in the workspace | | `bl knowledge retrieve` | API Key | Retrieve from a Bailian knowledge base (deprecated, use `search` instead) | | `bl knowledge search` | API Key | Search a Bailian knowledge base (RAG semantic retrieval) | -| `bl knowledge service copy` | API Key | Copy a service into a new draft (name gets a copy\_ prefix) | +| `bl knowledge service copy` | API Key | Copy a service into a new draft (name gets a copy_ prefix) | | `bl knowledge service create` | API Key | Create a retrieval / Q&A service (initial status: draft, version: beta) | | `bl knowledge service delete` | API Key | Delete a retrieval / Q&A service (soft delete, idempotent) | | `bl knowledge service deploy` | API Key | Publish the beta draft of a service as a new version | @@ -307,7 +307,7 @@ bl knowledge chunk delete --index-id idx-xxx --chunk-id chunk-a --yes #### Notes -- Use metadata.\_id as the chunk id and metadata.doc_id as the document id in chunk update/delete commands. +- Use metadata._id as the chunk id and metadata.doc_id as the document id in chunk update/delete commands. - Page size defaults to 20 (server default), max 100. #### Examples @@ -334,7 +334,7 @@ bl knowledge chunk list --index-id idx-xxx --doc-id file-xxx --page-size 50 | Flag | Type | Required | Description | | ----------------------- | ------ | -------- | ------------------------------------------------------------------------- | | `--index-id ` | string | yes | Knowledge base ID | -| `--chunk-id ` | string | yes | Chunk ID (metadata.\_id from the chunk list output) | +| `--chunk-id ` | string | yes | Chunk ID (metadata._id from the chunk list output) | | `--doc-id ` | string | yes | Document ID owning the chunk (metadata.doc_id from the chunk list output) | | `--content ` | string | no | New chunk content, 10-6000 chars; alternative to --content-file | | `--content-file ` | string | no | Read new content from a UTF-8 plain text file (.md/.txt etc.) | @@ -991,12 +991,12 @@ bl knowledge search --api-key $DASHSCOPE_API_KEY --query "test search" --agent-i ### `bl knowledge service copy` -| Field | Value | -| ------------------ | ----------------------------------------------------------- | -| **Name** | `knowledge service copy` | -| **Description** | Copy a service into a new draft (name gets a copy\_ prefix) | -| **Authentication** | API Key | -| **Usage** | `bl knowledge service copy --agent-id [flags]` | +| Field | Value | +| ------------------ | ---------------------------------------------------------- | +| **Name** | `knowledge service copy` | +| **Description** | Copy a service into a new draft (name gets a copy_ prefix) | +| **Authentication** | API Key | +| **Usage** | `bl knowledge service copy --agent-id [flags]` | #### Flags diff --git a/skills/bailian-cli/reference/mcp.md b/skills/bailian-cli/reference/mcp.md index 1efe9d71..29004f93 100644 --- a/skills/bailian-cli/reference/mcp.md +++ b/skills/bailian-cli/reference/mcp.md @@ -7,11 +7,13 @@ Index: [index.md](index.md) ## Commands in this group -| Command | Authentication | Description | -| -------------- | -------------- | ----------------------------------------------------- | -| `bl mcp call` | API Key | Call a tool on an MCP server (tools/call) | -| `bl mcp list` | Console | List MCP servers activated under your Bailian account | -| `bl mcp tools` | API Key | List tools exposed by an MCP server (tools/list) | +| Command | Authentication | Description | +| ------------------- | -------------- | ---------------------------------------------------------------------- | +| `bl mcp call` | API Key | Call a tool on an MCP server (tools/call) | +| `bl mcp connect` | API Key | Register a Bailian MCP server in an Agent's native configuration | +| `bl mcp disconnect` | No Auth | Remove an unchanged MCP registration previously managed by bailian-cli | +| `bl mcp list` | Console | List MCP servers activated under your Bailian account | +| `bl mcp tools` | API Key | List tools exposed by an MCP server (tools/list) | ## Command details @@ -50,6 +52,76 @@ bl mcp call --target market-cmapi00073529.FinQuery --json '{"q":"Guizhou Maotai" bl mcp call --target market-cmapi00073529.SmartFundSelection --arg riskLevel=R3 --arg minScale=10 ``` +### `bl mcp connect` + +| Field | Value | +| ------------------ | ---------------------------------------------------------------------------------------- | +| **Name** | `mcp connect` | +| **Description** | Register a Bailian MCP server in an Agent's native configuration | +| **Authentication** | API Key | +| **Usage** | `bl mcp connect --server --transport --agent ` | + +#### Flags + +| Flag | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--server ` | string | yes | Bailian MCP Server Code, such as TextGenerateImage | +| `--transport ` | string | yes | MCP transport exposed by the server: streamable-http or sse | +| `--agent ` | string | yes | Target Agent: codex, claude-code, cursor, qoder, qoderwork, qwenwork, qwen-code, gemini, opencode, openclaw, deepseek-harness, zcode, workbuddy, all | +| `--api-key ` | string | no | API key | +| `--base-url ` | string | no | API base URL | + +#### Notes + +- This release registers the official China-site MCP endpoint; the model API --base-url does not change the MCP endpoint. +- The resolved API key is written to the selected Agent's private local configuration. Existing unmanaged entries are never overwritten. +- qoder, qoderwork, and qwenwork are independent products. qwenwork is QwenWork (千问办公); qoderwork is Qoder Work. +- workbuddy covers CodeBuddy / WorkBuddy. deepseek-harness is DeepSeek Harness and only accepts streamable-http. + +#### Examples + +```bash +bl mcp connect --server TextGenerateImage --transport streamable-http --agent cursor +``` + +```bash +bl mcp connect --server VideoGenerate --transport sse --agent claude-code +``` + +```bash +bl mcp connect --server TextGenerateImage --transport streamable-http --agent all +``` + +### `bl mcp disconnect` + +| Field | Value | +| ------------------ | ---------------------------------------------------------------------- | +| **Name** | `mcp disconnect` | +| **Description** | Remove an unchanged MCP registration previously managed by bailian-cli | +| **Authentication** | No Auth | +| **Usage** | `bl mcp disconnect --server --agent ` | + +#### Flags + +| Flag | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--server ` | string | yes | Bailian MCP Server Code used during connect | +| `--agent ` | string | yes | Target Agent: codex, claude-code, cursor, qoder, qoderwork, qwenwork, qwen-code, gemini, opencode, openclaw, deepseek-harness, zcode, workbuddy, all | + +#### Notes + +- A registration changed after connect is left untouched and reported as a conflict. + +#### Examples + +```bash +bl mcp disconnect --server TextGenerateImage --agent cursor +``` + +```bash +bl mcp disconnect --server TextGenerateImage --agent all +``` + ### `bl mcp list` | Field | Value | diff --git a/skills/bailian-cli/reference/skill.md b/skills/bailian-cli/reference/skill.md index 809838cd..807eb662 100644 --- a/skills/bailian-cli/reference/skill.md +++ b/skills/bailian-cli/reference/skill.md @@ -7,13 +7,13 @@ Index: [index.md](index.md) ## Commands in this group -| Command | Authentication | Description | -| ----------------- | -------------- | ----------------------------------------------------------------------- | -| `bl skill add` | No Auth | Install skills from the Bailian skill registry into local agents | -| `bl skill init` | No Auth | Install all bailian-\* skills (one-shot bootstrap for new environments) | -| `bl skill list` | No Auth | List registry skills and diff against local installs | -| `bl skill remove` | No Auth | Remove locally installed skills (registry is untouched) | -| `bl skill update` | No Auth | Update installed skills to the latest registry versions | +| Command | Authentication | Description | +| ----------------- | -------------- | ---------------------------------------------------------------------- | +| `bl skill add` | No Auth | Install skills from the Bailian skill registry into local agents | +| `bl skill init` | No Auth | Install all bailian-* skills (one-shot bootstrap for new environments) | +| `bl skill list` | No Auth | List registry skills and diff against local installs | +| `bl skill remove` | No Auth | Remove locally installed skills (registry is untouched) | +| `bl skill update` | No Auth | Update installed skills to the latest registry versions | ## Command details @@ -45,12 +45,12 @@ bl skill add --name spark-video,bailian-model-recommend ### `bl skill init` -| Field | Value | -| ------------------ | ----------------------------------------------------------------------- | -| **Name** | `skill init` | -| **Description** | Install all bailian-\* skills (one-shot bootstrap for new environments) | -| **Authentication** | No Auth | -| **Usage** | `bl skill init` | +| Field | Value | +| ------------------ | ---------------------------------------------------------------------- | +| **Name** | `skill init` | +| **Description** | Install all bailian-* skills (one-shot bootstrap for new environments) | +| **Authentication** | No Auth | +| **Usage** | `bl skill init` | #### Flags diff --git a/skills/bailian-finetune/SKILL.md b/skills/bailian-finetune/SKILL.md index 95f7c179..a94a60bf 100644 --- a/skills/bailian-finetune/SKILL.md +++ b/skills/bailian-finetune/SKILL.md @@ -1,7 +1,7 @@ --- name: bailian-finetune metadata: - version: "1.28.0" + version: "2.0.0" requires: bins: ["bl"] description: >- diff --git a/skills/bailian-finetune/reference/index.md b/skills/bailian-finetune/reference/index.md index 3dff1281..90c11e42 100644 --- a/skills/bailian-finetune/reference/index.md +++ b/skills/bailian-finetune/reference/index.md @@ -4,7 +4,7 @@ > Regenerate: `pnpm --filter bailian-cli run generate:reference`. Command **details** are in sibling `.md` files in this directory. -This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-\* skills. +This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-* skills. Use this index for the skill-scoped quick index and global flags. ## Quick index diff --git a/skills/bailian-gen/SKILL.md b/skills/bailian-gen/SKILL.md index c4290282..29292ac0 100644 --- a/skills/bailian-gen/SKILL.md +++ b/skills/bailian-gen/SKILL.md @@ -1,7 +1,7 @@ --- name: bailian-gen metadata: - version: "1.28.0" + version: "2.0.0" requires: bins: ["bl"] description: >- diff --git a/skills/bailian-gen/reference/image.md b/skills/bailian-gen/reference/image.md index b90506ef..a35c7d29 100644 --- a/skills/bailian-gen/reference/image.md +++ b/skills/bailian-gen/reference/image.md @@ -25,25 +25,25 @@ Index: [index.md](index.md) #### Flags -| Flag | Type | Required | Description | -| --------------------------- | ------- | -------- | -------------------------------------------------------------------------------------------------- | -| `--image ` | array | yes | Source image URL or local file path (repeatable for multi-image merge) | -| `--prompt ` | string | yes | Edit instruction text | -| `--model ` | string | no | Model ID (default: qwen-image-3.0) | -| `--size ` | string | no | Output image size: ratio (3:4, 16:9) or pixels (2048\*2048) | -| `--n ` | number | no | Number of images (default: 1, max: 6) | -| `--seed ` | number | no | Random seed for reproducible results | -| `--negative-prompt ` | string | no | Negative prompt to exclude unwanted content | -| `--function ` | string | no | wanx\*-imageedit function (default: description_edit). Examples: stylization_all, description_edit | -| `--prompt-extend ` | boolean | no | Enable prompt extend (true/false). Omit flag to use CLI default (true). | -| `--watermark ` | boolean | no | Enable watermark (true/false). Omit flag to use the Profile setting or CLI default (true). | -| `--out-dir ` | string | no | Download images to directory | -| `--out-prefix ` | string | no | Filename prefix (default: edited) | -| `--async` | switch | no | Return async task id without waiting | -| `--concurrent ` | number | no | Run N parallel requests (default: 1) | -| `--poll-interval ` | number | no | Polling interval when waiting (default: 3) | -| `--api-key ` | string | no | API key | -| `--base-url ` | string | no | API base URL | +| Flag | Type | Required | Description | +| --------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------- | +| `--image ` | array | yes | Source image URL or local file path (repeatable for multi-image merge) | +| `--prompt ` | string | yes | Edit instruction text | +| `--model ` | string | no | Model ID (default: qwen-image-3.0) | +| `--size ` | string | no | Output image size: ratio (3:4, 16:9) or pixels (2048*2048) | +| `--n ` | number | no | Number of images (default: 1, max: 6) | +| `--seed ` | number | no | Random seed for reproducible results | +| `--negative-prompt ` | string | no | Negative prompt to exclude unwanted content | +| `--function ` | string | no | wanx*-imageedit function (default: description_edit). Examples: stylization_all, description_edit | +| `--prompt-extend ` | boolean | no | Enable prompt extend (true/false). Omit flag to use CLI default (true). | +| `--watermark ` | boolean | no | Enable watermark (true/false). Omit flag to use the Profile setting or CLI default (true). | +| `--out-dir ` | string | no | Download images to directory | +| `--out-prefix ` | string | no | Filename prefix (default: edited) | +| `--async` | switch | no | Return async task id without waiting | +| `--concurrent ` | number | no | Run N parallel requests (default: 1) | +| `--poll-interval ` | number | no | Polling interval when waiting (default: 3) | +| `--api-key ` | string | no | API key | +| `--base-url ` | string | no | API base URL | #### Examples @@ -94,7 +94,7 @@ bl image edit --image ./photo.png --prompt "Replace the background with a beach" | --------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | | `--prompt ` | string | yes | Image description | | `--model ` | string | no | Model ID (default: qwen-image-3.0) | -| `--size ` | string | no | Image size: ratio (3:4, 16:9, 1:1) or pixels (2048\*2048) | +| `--size ` | string | no | Image size: ratio (3:4, 16:9, 1:1) or pixels (2048*2048) | | `--n ` | number | no | Number of images per request (default: 1, max: 6) | | `--seed ` | number | no | Random seed for reproducible generation | | `--negative-prompt ` | string | no | Negative prompt to exclude unwanted content | diff --git a/skills/bailian-gen/reference/index.md b/skills/bailian-gen/reference/index.md index 57bb3297..512e7df6 100644 --- a/skills/bailian-gen/reference/index.md +++ b/skills/bailian-gen/reference/index.md @@ -4,7 +4,7 @@ > Regenerate: `pnpm --filter bailian-cli run generate:reference`. Command **details** are in sibling `.md` files in this directory. -This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-\* skills. +This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-* skills. Use this index for the skill-scoped quick index and global flags. ## Quick index diff --git a/skills/bailian-gen/reference/speech.md b/skills/bailian-gen/reference/speech.md index 324e8021..7bbc5a32 100644 --- a/skills/bailian-gen/reference/speech.md +++ b/skills/bailian-gen/reference/speech.md @@ -33,7 +33,7 @@ Index: [index.md](index.md) | Flag | Type | Required | Description | | --------------------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--url ` | array | yes | Audio file URL or local file path (repeatable, max 100) | -| `--model ` | string | no | Model ID (default: configured Profile ASR model, otherwise fun-asr). Async: fun-asr / _-filetrans / paraformer-_; sync: qwen3-asr-flash* / fun-asr-flash* / qwen-audio-\*-asr-flash | +| `--model ` | string | no | Model ID (default: configured Profile ASR model, otherwise fun-asr). Async: fun-asr / _-filetrans / paraformer-_; sync: qwen3-asr-flash* / fun-asr-flash* / qwen-audio-*-asr-flash | | `--language ` | string | no | Language hint (e.g. zh, en, ja). Classic async/input-audio: language_hints; qwen3-filetrans: language; qwen3 sync: asr_options.language | | `--diarization` | switch | no | Enable automatic speaker diarization | | `--speaker-count ` | number | no | Expected number of speakers (requires --diarization) | diff --git a/skills/bailian-managed-agent/SKILL.md b/skills/bailian-managed-agent/SKILL.md index 430c4064..3eda71b7 100644 --- a/skills/bailian-managed-agent/SKILL.md +++ b/skills/bailian-managed-agent/SKILL.md @@ -1,7 +1,7 @@ --- name: bailian-managed-agent metadata: - version: "1.28.0" + version: "2.0.0" requires: bins: ["bl"] description: >- diff --git a/skills/bailian-managed-agent/reference/index.md b/skills/bailian-managed-agent/reference/index.md index 2fcb704a..7058a243 100644 --- a/skills/bailian-managed-agent/reference/index.md +++ b/skills/bailian-managed-agent/reference/index.md @@ -4,7 +4,7 @@ > Regenerate: `pnpm --filter bailian-cli run generate:reference`. Command **details** are in sibling `.md` files in this directory. -This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-\* skills. +This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-* skills. Use this index for the skill-scoped quick index and global flags. ## Quick index diff --git a/skills/bailian-managed-agent/reference/managed-agent.md b/skills/bailian-managed-agent/reference/managed-agent.md index da7a1dd0..a830d3c9 100644 --- a/skills/bailian-managed-agent/reference/managed-agent.md +++ b/skills/bailian-managed-agent/reference/managed-agent.md @@ -1230,7 +1230,7 @@ bl managed-agent project build --project ./my-agent #### Notes - Without --project, creates a managed-agent/ subdirectory. Enter it before running other project commands. Use --project . to initialize in place or convert the current agents.yaml; existing project files are not overwritten. -- New projects include Skill, File, Vault, and Environment examples under each resource directory's \_examples/. They are not referenced by agent.json and are excluded from Build/Publish. Copy an example outside \_examples/ to enable it, then configure its Agent reference. +- New projects include Skill, File, Vault, and Environment examples under each resource directory's _examples/. They are not referenced by agent.json and are excluded from Build/Publish. Copy an example outside _examples/ to enable it, then configure its Agent reference. #### Examples diff --git a/skills/bailian-protocol/SKILL.md b/skills/bailian-protocol/SKILL.md index 44da3290..a18fda40 100644 --- a/skills/bailian-protocol/SKILL.md +++ b/skills/bailian-protocol/SKILL.md @@ -1,7 +1,7 @@ --- name: bailian-protocol metadata: - version: "1.28.0" + version: "2.0.0" requires: bins: ["bl"] description: >- diff --git a/skills/bailian-sandbox/SKILL.md b/skills/bailian-sandbox/SKILL.md index 87a3510c..5b875654 100644 --- a/skills/bailian-sandbox/SKILL.md +++ b/skills/bailian-sandbox/SKILL.md @@ -1,7 +1,7 @@ --- name: bailian-sandbox metadata: - version: "1.28.0" + version: "2.0.0" requires: bins: ["bl"] description: >- diff --git a/skills/bailian-sandbox/reference/index.md b/skills/bailian-sandbox/reference/index.md index d3ef5216..b501041a 100644 --- a/skills/bailian-sandbox/reference/index.md +++ b/skills/bailian-sandbox/reference/index.md @@ -4,7 +4,7 @@ > Regenerate: `pnpm --filter bailian-cli run generate:reference`. Command **details** are in sibling `.md` files in this directory. -This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-\* skills. +This index only covers groups owned by this skill. Other `bl` groups live in sibling bailian-* skills. Use this index for the skill-scoped quick index and global flags. ## Quick index diff --git a/skills/bailian-web-search/SKILL.md b/skills/bailian-web-search/SKILL.md index 1da2facb..9a814228 100644 --- a/skills/bailian-web-search/SKILL.md +++ b/skills/bailian-web-search/SKILL.md @@ -1,7 +1,7 @@ --- name: bailian-web-search metadata: - version: "1.28.0" + version: "2.0.0" requires: bins: ["bl"] description: >- diff --git a/vite.config.ts b/vite.config.ts index ecf8dc7b..38ce1c26 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -25,8 +25,11 @@ type CommandCapability = CommandCapabilityRestriction["property"]; function restrictCommandCapabilities( allowed?: CommandCapability, -): ["error", ...CommandCapabilityRestriction[]] { - return ["error", ...commandCapabilityRestrictions.filter(({ property }) => property !== allowed)]; +): ["error", CommandCapabilityRestriction, ...CommandCapabilityRestriction[]] { + return [ + "error", + ...commandCapabilityRestrictions.filter(({ property }) => property !== allowed), + ] as ["error", CommandCapabilityRestriction, ...CommandCapabilityRestriction[]]; } export default defineConfig({