diff --git a/.claude/wiki.md b/.claude/wiki.md index 1081eb3..7bfe449 100644 --- a/.claude/wiki.md +++ b/.claude/wiki.md @@ -1,5 +1,32 @@ # polyskill Project Wiki +## CLI version comes from package.json at runtime — never hardcode it + + + +`packages/cli/src/index.ts` reads its version via `createRequire(import.meta.url)("../package.json")`. +Do not reintroduce a hardcoded `.version("x.y.z")` string. + +**Why:** the old hardcoded string drifted in production — npm's `@polyskill/cli@0.1.13` +reports `0.1.12` from `--version` because the publish bumped only package.json. +CONTRIBUTING's "bump in two places" step didn't prevent it; a single source of truth does. + +## getting-started skill: repo is canonical, but published version can run AHEAD of repo + + + +The registry's published `@polyskill/getting-started` was 1.0.8 while the repo said 1.0.7 — +and the published 1.0.8 content was STALE (taught `--sort downloads`, which the live API +rejects: "Must be one of: relevance, name, recent"; removed from the repo in commit 9110cd6). +Repo bumped to 1.0.9 on 2026-07-02 so the corrected content is publishable again; it still +needs an authenticated `polyskill publish skills/getting-started` to go live. + +**Why:** publishing without committing the version bump (or vice versa) forks the two copies, +and the registry rejects re-publishing at or below the published version — so a stale published +skill silently becomes unfixable until someone notices and bumps past it. After any publish of +this skill, verify `curl -s https://polyskill.ai/api/skills/%40polyskill%2Fgetting-started | jq .version` +matches `skills/getting-started/skill.json`. + ## Terminal/exit paths must live OUTSIDE the registry-fetch try/catch in `install.ts` diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f062cfc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + build-and-test: + runs-on: ubuntu-latest + strategy: + matrix: + node: [20, 22] + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm build + - run: pnpm test diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5375b7a..62f38c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,7 +57,7 @@ skills/ Example skills Both `@polyskill/core` and `@polyskill/cli` are published to npm. Always use `pnpm publish` (not `npm publish`) — it resolves `workspace:*` dependencies to concrete versions automatically. ```bash -# 1. Bump version in package.json AND src/index.ts (CLI has a hardcoded .version() call) +# 1. Bump version in the package's package.json (the CLI reads its version from there at runtime) # 2. Build and test pnpm build && pnpm test diff --git a/package.json b/package.json index 1414405..781586e 100644 --- a/package.json +++ b/package.json @@ -10,5 +10,6 @@ }, "engines": { "node": ">=18" - } + }, + "packageManager": "pnpm@10.29.1" } diff --git a/packages/cli/LICENSE b/packages/cli/LICENSE new file mode 100644 index 0000000..9ea25b6 --- /dev/null +++ b/packages/cli/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 PolySkill + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/cli/README.md b/packages/cli/README.md new file mode 100644 index 0000000..92703b2 --- /dev/null +++ b/packages/cli/README.md @@ -0,0 +1,67 @@ +# @polyskill/cli + +**The CLI for [PolySkill](https://polyskill.ai) — the open registry for AI agent skills.** Search, install, create, and publish portable, LLM-agnostic skills for Claude Code, Codex, OpenCode, OpenClaw, and any agent. + +## Install + +```bash +npm install -g @polyskill/cli +``` + +## Usage + +```bash +# Search for skills +polyskill search "code review" + +# Install a skill (auto-detects your coding assistant) +polyskill install @polyskill/getting-started + +# Create a new skill +polyskill init my-skill + +# Authenticate and publish +polyskill login # GitHub PAT or agent API key +polyskill validate my-skill +polyskill build my-skill +polyskill publish my-skill + +# Or register as an agent +polyskill agent register +``` + +## Install Targets + +The CLI auto-detects which coding assistant you have and installs skills in the right format. Override with `--target `. + +| Target | Directory | Format | +|--------|-----------|--------| +| `claude-code` | `~/.claude/skills//` | `SKILL.md` | +| `codex` | `~/.codex/skills//` | `SKILL.md` | +| `openclaw` | `~/.openclaw/skills//` | `SKILL.md` | +| `opencode` | `~/.config/opencode/skills//` | `SKILL.md` | +| `local` | `./skills/@scope__name/` | `skill.json` + `instructions.md` + `tools.json` + `dist/` | + +## Commands + +| Command | Description | +|---------|-------------| +| `polyskill init [dir]` | Scaffold a new skill project | +| `polyskill validate [dir]` | Validate manifest + tools against the spec | +| `polyskill build [dir]` | Generate platform adapter outputs | +| `polyskill publish [dir]` | Publish to the PolySkill registry | +| `polyskill install [version]` | Install a skill from the registry | +| `polyskill search [query]` | Search the registry | +| `polyskill login` / `logout` | Manage authentication | +| `polyskill agent register` | Register an agent and get an API key | + +## Links + +- **Browse skills**: [polyskill.ai](https://polyskill.ai) +- **Docs**: [polyskill.ai/docs](https://polyskill.ai/docs) +- **Source & issues**: [github.com/MrSpacemann/polyskill](https://github.com/MrSpacemann/polyskill) +- **Skill format & programmatic use**: [`@polyskill/core`](https://www.npmjs.com/package/@polyskill/core) + +## License + +MIT diff --git a/packages/cli/package.json b/packages/cli/package.json index 0d6bb69..198371c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -2,6 +2,27 @@ "name": "@polyskill/cli", "version": "0.1.13", "description": "CLI for creating, validating, and publishing PolySkill skills", + "license": "MIT", + "homepage": "https://polyskill.ai", + "repository": { + "type": "git", + "url": "git+https://github.com/MrSpacemann/polyskill.git", + "directory": "packages/cli" + }, + "bugs": "https://github.com/MrSpacemann/polyskill/issues", + "keywords": [ + "polyskill", + "skills", + "llm", + "agents", + "claude-code", + "codex", + "opencode", + "cli" + ], + "engines": { + "node": ">=18" + }, "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -15,20 +36,22 @@ "clean": "rm -rf dist" }, "dependencies": { + "@inquirer/prompts": "^7.10.1", "@polyskill/core": "workspace:*", - "commander": "^13.0.0", - "chalk": "^5.4.0", - "@inquirer/prompts": "^7.0.0", - "tar": "^7.4.3" + "chalk": "^5.6.2", + "commander": "^13.1.0", + "tar": "^7.5.19" }, - "files": ["dist"], + "files": [ + "dist" + ], "publishConfig": { "access": "public" }, "devDependencies": { - "typescript": "^5.7.0", - "tsx": "^4.19.0", - "@types/node": "^22.0.0", - "vitest": "^3.0.0" + "@types/node": "^22.20.0", + "tsx": "^4.22.5", + "typescript": "^5.9.3", + "vitest": "^3.2.6" } } diff --git a/packages/cli/src/__tests__/install.test.ts b/packages/cli/src/__tests__/install.test.ts index d7fc092..f6fff35 100644 --- a/packages/cli/src/__tests__/install.test.ts +++ b/packages/cli/src/__tests__/install.test.ts @@ -228,6 +228,36 @@ describe("install command", () => { }); }); +describe("install command — name validation", () => { + it("rejects a non-scoped name before any network call", async () => { + await expect( + installCommand.parseAsync(["not-scoped", "--output", "/tmp/output"], { + from: "user", + }) + ).rejects.toMatchObject({ code: 1 }); + + expect(fetch).not.toHaveBeenCalled(); + expect(console.log).toHaveBeenCalledWith( + expect.stringContaining("Invalid skill name") + ); + }); + + it("rejects a malformed name in the registry response before writing files", async () => { + mockFetchResponse(200, { ...fullSkillResponse, name: "..\\..\\evil" }); + + await expect( + installCommand.parseAsync(["@test/my-skill", "--output", "/tmp/output"], { + from: "user", + }) + ).rejects.toMatchObject({ code: 1 }); + + expect(writeFile).not.toHaveBeenCalled(); + expect(console.log).toHaveBeenCalledWith( + expect.stringContaining("malformed skill name") + ); + }); +}); + describe("install command — npm mirror fallback", () => { it("falls back to npm when registry returns 403 (sandbox block)", async () => { vi.mocked(fetch).mockResolvedValueOnce({ diff --git a/packages/cli/src/__tests__/search.test.ts b/packages/cli/src/__tests__/search.test.ts index aa7a968..a7a07c7 100644 --- a/packages/cli/src/__tests__/search.test.ts +++ b/packages/cli/src/__tests__/search.test.ts @@ -142,6 +142,39 @@ describe("search command", () => { expect(process.exit).toHaveBeenCalledWith(1); }); + it("includes the HTTP status even when statusText is empty (HTTP/2)", async () => { + vi.mocked(fetch).mockResolvedValue({ + ok: false, + status: 502, + statusText: "", + json: () => Promise.resolve({}), + } as Response); + + await expect( + searchCommand.parseAsync(["weather"], { from: "user" }) + ).rejects.toThrow(ExitError); + + expect(console.log).toHaveBeenCalledWith(expect.stringContaining("502")); + }); + + it("prints error and exits when the registry returns invalid JSON", async () => { + vi.mocked(fetch).mockResolvedValue({ + ok: true, + status: 200, + statusText: "OK", + json: () => Promise.reject(new SyntaxError("Unexpected token <")), + } as Response); + + await expect( + searchCommand.parseAsync(["weather"], { from: "user" }) + ).rejects.toThrow(ExitError); + + expect(console.log).toHaveBeenCalledWith( + expect.stringContaining("invalid response from registry") + ); + expect(process.exit).toHaveBeenCalledWith(1); + }); + it("passes --category filter to the API", async () => { mockFetchResponse(200, { skills: [], total: 0 }); diff --git a/packages/cli/src/commands/install.ts b/packages/cli/src/commands/install.ts index 7a1c545..02d5adb 100644 --- a/packages/cli/src/commands/install.ts +++ b/packages/cli/src/commands/install.ts @@ -1,14 +1,20 @@ /* * Install flow state machine (source of truth — keep in sync with logic): * - * FETCH_REGISTRY - * ├─ res.ok ─────────────────────────────────→ HAVE_SKILL - * ├─ status == 404 ──────────────────────────→ NOT_FOUND (exit 1) - * └─ throw | status 403 | status 5xx ────────→ FETCH_NPM - * ├─ ok ──────→ HAVE_SKILL + * VALIDATE_NAME (typed arg) + * ├─ invalid ────────────────────────────────→ BAD_NAME (exit 1) + * └─ ok ──→ FETCH_REGISTRY + * ├─ res.ok ─────────────────────→ CHECK_NAME + * ├─ status == 404 ──────────────→ NOT_FOUND (exit 1) + * └─ throw | status 403 | 5xx ───→ FETCH_NPM + * ├─ ok ──────→ CHECK_NAME * └─ NpmNotFound * | throw ─→ BOTH_FAILED (exit 1) * + * CHECK_NAME (response name shapes fs paths) + * ├─ malformed ──────────────────────────────→ BAD_RESPONSE (exit 1) + * └─ ok ──→ HAVE_SKILL + * * HAVE_SKILL ──→ RESOLVE_TARGET ──→ WRITE_FILES ──→ SUCCESS * │ └──→ WRITE_ERR (EACCES, ENOSPC, ...) * └──→ UNKNOWN_TARGET / AMBIGUOUS_TARGET @@ -23,6 +29,7 @@ import chalk from "chalk"; import { REGISTRY_URL } from "../config.js"; import { resolveTarget } from "../targets/index.js"; import { fetchSkillFromNpm, NpmNotFound } from "../npmFetch.js"; +import { SKILL_NAME_RE } from "../npmName.js"; export const installCommand = new Command("install") .description("Install a Skill from the PolySkill registry") @@ -42,6 +49,14 @@ export const installCommand = new Command("install") ) => { const registryUrl = options.registry; + if (!SKILL_NAME_RE.test(name)) { + console.log( + chalk.red(`\nInvalid skill name: ${name}`) + + chalk.dim("\nExpected @scope/name (lowercase letters, digits, hyphens)\n") + ); + process.exit(1); + } + console.log(chalk.bold(`\nInstalling ${name}${version ? `@${version}` : ""}...`)); // Fetch from registry @@ -95,6 +110,13 @@ export const installCommand = new Command("install") } } + // The response's name is used to build filesystem paths — never write + // anywhere a malformed/hostile response could point (e.g. `..` segments). + if (typeof skill.name !== "string" || !SKILL_NAME_RE.test(skill.name)) { + console.log(chalk.red(`\nRegistry returned a malformed skill name: ${skill.name}\n`)); + process.exit(1); + } + // Resolve target (--target flag, --output implies local, or auto-detect) const target = resolveTarget(options.target, options.output !== undefined); const outputDir = resolve(process.cwd(), options.output ?? "."); diff --git a/packages/cli/src/commands/publish.ts b/packages/cli/src/commands/publish.ts index 025051f..4d3a38c 100644 --- a/packages/cli/src/commands/publish.ts +++ b/packages/cli/src/commands/publish.ts @@ -56,6 +56,8 @@ export const publishCommand = new Command("publish") const adapter = getAdapter(platform); if (adapter) { adapters[platform] = adapter.transpile(skill); + } else { + console.log(chalk.yellow(` Skipping unknown adapter: ${platform}`)); } } diff --git a/packages/cli/src/commands/search.ts b/packages/cli/src/commands/search.ts index 65c1754..451f006 100644 --- a/packages/cli/src/commands/search.ts +++ b/packages/cli/src/commands/search.ts @@ -80,11 +80,19 @@ export const searchCommand = new Command("search") } if (!res.ok) { - console.log(chalk.red(`\nSearch failed: ${res.statusText}\n`)); + // statusText is empty over HTTP/2 — always include the numeric status + const reason = res.statusText ? `${res.status} ${res.statusText}` : `HTTP ${res.status}`; + console.log(chalk.red(`\nSearch failed: ${reason}\n`)); process.exit(1); } - const data = (await res.json()) as SearchResponse; + let data: SearchResponse; + try { + data = (await res.json()) as SearchResponse; + } catch { + console.log(chalk.red("\nSearch failed: invalid response from registry\n")); + process.exit(1); + } // JSON mode: dump raw response and exit if (options.json) { diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 40e483a..4c98454 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,4 +1,5 @@ #!/usr/bin/env node +import { createRequire } from "node:module"; import { Command } from "commander"; import { initCommand } from "./commands/init.js"; import { validateCommand } from "./commands/validate.js"; @@ -10,12 +11,17 @@ import { loginCommand } from "./commands/login.js"; import { logoutCommand } from "./commands/logout.js"; import { agentCommand } from "./commands/agent.js"; +// Single source of truth for the version — resolves to packages/cli/package.json +// from both src/ (tsx dev) and dist/ (published build). +const require = createRequire(import.meta.url); +const { version } = require("../package.json") as { version: string }; + const program = new Command(); program .name("polyskill") .description("CLI for the PolySkill marketplace") - .version("0.1.12"); + .version(version); program.addCommand(initCommand); program.addCommand(validateCommand); @@ -27,4 +33,4 @@ program.addCommand(loginCommand); program.addCommand(logoutCommand); program.addCommand(agentCommand); -program.parse(); +await program.parseAsync(); diff --git a/packages/cli/src/npmName.ts b/packages/cli/src/npmName.ts index 74423ef..85e7c88 100644 --- a/packages/cli/src/npmName.ts +++ b/packages/cli/src/npmName.ts @@ -1,4 +1,5 @@ -const SKILL_NAME_RE = /^@([a-z0-9-]+)\/([a-z0-9-]+)$/; +/** Canonical skill-name shape — mirrors the `name` pattern in skill-manifest.schema.json */ +export const SKILL_NAME_RE = /^@([a-z0-9-]+)\/([a-z0-9-]+)$/; /** `@scope/name` -> `@polyskill/scope.name` (injective; `.` illegal in * polyskill names, legal in npm scoped package names). */ diff --git a/packages/cli/src/templates/skill.json.template b/packages/cli/src/templates/skill.json.template index 50a92cb..4ef9127 100644 --- a/packages/cli/src/templates/skill.json.template +++ b/packages/cli/src/templates/skill.json.template @@ -7,7 +7,6 @@ "author": { "name": "{{authorName}}" }, - "main": "./src/index.ts", "skill": { "instructions": "./instructions.md", "tools": "./tools.json" diff --git a/packages/core/LICENSE b/packages/core/LICENSE new file mode 100644 index 0000000..9ea25b6 --- /dev/null +++ b/packages/core/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 PolySkill + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 0000000..8685795 --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,46 @@ +# @polyskill/core + +**Core library for [PolySkill](https://polyskill.ai) skills** — the skill spec, JSON-schema validation, disk loading, and adapter transpilation to platform-specific formats (OpenAI, Anthropic, Grok, Gemini, Kimi). + +Most users want the CLI instead: [`@polyskill/cli`](https://www.npmjs.com/package/@polyskill/cli). + +## Install + +```bash +npm install @polyskill/core +``` + +## Usage + +```typescript +import { validateManifest, loadSkill, getAdapter } from "@polyskill/core"; + +// Validate a skill.json manifest +const result = validateManifest(manifest); +if (!result.valid) console.error(result.errors); + +// Load a skill directory (skill.json + instructions.md + tools.json) +const skill = await loadSkill("./my-skill"); + +// Transpile to a platform format +const adapter = getAdapter("openai"); +const { systemPrompt, tools } = adapter.transpile(skill); +``` + +## What's inside + +- **JSON schemas** for `skill.json` and `tools.json` +- **Validator** using ajv with strict schema checking +- **Loader** to read and resolve skills from disk +- **Adapters** to transpile skills into platform-specific formats, plus an + `openaiCompatibleAdapter(platform)` factory for any OpenAI-compatible runtime + +## Links + +- **Browse skills**: [polyskill.ai](https://polyskill.ai) +- **Docs**: [polyskill.ai/docs](https://polyskill.ai/docs) +- **Source & issues**: [github.com/MrSpacemann/polyskill](https://github.com/MrSpacemann/polyskill) + +## License + +MIT diff --git a/packages/core/package.json b/packages/core/package.json index 8096441..180cafe 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,6 +2,26 @@ "name": "@polyskill/core", "version": "0.1.4", "description": "Core types, validation, and adapters for PolySkill", + "license": "MIT", + "homepage": "https://polyskill.ai", + "repository": { + "type": "git", + "url": "git+https://github.com/MrSpacemann/polyskill.git", + "directory": "packages/core" + }, + "bugs": "https://github.com/MrSpacemann/polyskill/issues", + "keywords": [ + "polyskill", + "skills", + "llm", + "agents", + "claude-code", + "json-schema", + "function-calling" + ], + "engines": { + "node": ">=18" + }, "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -12,7 +32,7 @@ "clean": "rm -rf dist" }, "dependencies": { - "ajv": "^8.17.1", + "ajv": "^8.20.0", "ajv-formats": "^3.0.1" }, "files": [ @@ -22,8 +42,8 @@ "access": "public" }, "devDependencies": { - "@types/node": "^22.0.0", - "typescript": "^5.7.0", - "vitest": "^3.0.0" + "@types/node": "^22.20.0", + "typescript": "^5.9.3", + "vitest": "^3.2.6" } } diff --git a/packages/core/src/adapters/grok.ts b/packages/core/src/adapters/grok.ts index 02d6350..e5a4a95 100644 --- a/packages/core/src/adapters/grok.ts +++ b/packages/core/src/adapters/grok.ts @@ -1,26 +1,4 @@ -import type { Adapter } from "./types.js"; -import type { SkillDefinition, TranspileResult, CanonicalTool } from "../types.js"; +import { openaiCompatibleAdapter } from "./openai-compatible.js"; -/** Transpile a canonical tool to Grok (xAI) function-calling format (OpenAI-compatible) */ -function transpileTool(tool: CanonicalTool) { - return { - type: "function" as const, - function: { - name: tool.name, - description: tool.description, - parameters: tool.parameters, - }, - }; -} - -export const grokAdapter: Adapter = { - platform: "grok", - - transpile(skill: SkillDefinition): TranspileResult { - return { - platform: this.platform, - systemPrompt: skill.instructions, - tools: skill.tools.map(transpileTool), - }; - }, -}; +/** Grok (xAI) uses the OpenAI-compatible function-calling format */ +export const grokAdapter = openaiCompatibleAdapter("grok"); diff --git a/packages/core/src/adapters/index.ts b/packages/core/src/adapters/index.ts index f8e5784..bc9570b 100644 --- a/packages/core/src/adapters/index.ts +++ b/packages/core/src/adapters/index.ts @@ -6,6 +6,7 @@ import { geminiAdapter } from "./gemini.js"; import { kimiAdapter } from "./kimi.js"; export type { Adapter } from "./types.js"; +export { openaiCompatibleAdapter } from "./openai-compatible.js"; export { openaiAdapter } from "./openai.js"; export { anthropicAdapter } from "./anthropic.js"; export { grokAdapter } from "./grok.js"; diff --git a/packages/core/src/adapters/kimi.ts b/packages/core/src/adapters/kimi.ts index ba0f570..a40f50e 100644 --- a/packages/core/src/adapters/kimi.ts +++ b/packages/core/src/adapters/kimi.ts @@ -1,26 +1,4 @@ -import type { Adapter } from "./types.js"; -import type { SkillDefinition, TranspileResult, CanonicalTool } from "../types.js"; +import { openaiCompatibleAdapter } from "./openai-compatible.js"; -/** Transpile a canonical tool to Kimi (Moonshot) function-calling format (OpenAI-compatible) */ -function transpileTool(tool: CanonicalTool) { - return { - type: "function" as const, - function: { - name: tool.name, - description: tool.description, - parameters: tool.parameters, - }, - }; -} - -export const kimiAdapter: Adapter = { - platform: "kimi", - - transpile(skill: SkillDefinition): TranspileResult { - return { - platform: this.platform, - systemPrompt: skill.instructions, - tools: skill.tools.map(transpileTool), - }; - }, -}; +/** Kimi (Moonshot) uses the OpenAI-compatible function-calling format */ +export const kimiAdapter = openaiCompatibleAdapter("kimi"); diff --git a/packages/core/src/adapters/openai-compatible.ts b/packages/core/src/adapters/openai-compatible.ts new file mode 100644 index 0000000..7efd5fa --- /dev/null +++ b/packages/core/src/adapters/openai-compatible.ts @@ -0,0 +1,32 @@ +import type { Adapter } from "./types.js"; +import type { SkillDefinition, TranspileResult, CanonicalTool } from "../types.js"; + +/** Transpile a canonical tool to OpenAI function-calling format */ +function transpileTool(tool: CanonicalTool) { + return { + type: "function" as const, + function: { + name: tool.name, + description: tool.description, + parameters: tool.parameters, + }, + }; +} + +/** + * Build an adapter for a platform that uses the OpenAI function-calling + * format (OpenAI, Grok, Kimi, ...). They differ only by platform name. + */ +export function openaiCompatibleAdapter(platform: string): Adapter { + return { + platform, + + transpile(skill: SkillDefinition): TranspileResult { + return { + platform, + systemPrompt: skill.instructions, + tools: skill.tools.map(transpileTool), + }; + }, + }; +} diff --git a/packages/core/src/adapters/openai.ts b/packages/core/src/adapters/openai.ts index f0aa541..9bea6f9 100644 --- a/packages/core/src/adapters/openai.ts +++ b/packages/core/src/adapters/openai.ts @@ -1,26 +1,3 @@ -import type { Adapter } from "./types.js"; -import type { SkillDefinition, TranspileResult, CanonicalTool } from "../types.js"; +import { openaiCompatibleAdapter } from "./openai-compatible.js"; -/** Transpile a canonical tool to OpenAI function-calling format */ -function transpileTool(tool: CanonicalTool) { - return { - type: "function" as const, - function: { - name: tool.name, - description: tool.description, - parameters: tool.parameters, - }, - }; -} - -export const openaiAdapter: Adapter = { - platform: "openai", - - transpile(skill: SkillDefinition): TranspileResult { - return { - platform: this.platform, - systemPrompt: skill.instructions, - tools: skill.tools.map(transpileTool), - }; - }, -}; +export const openaiAdapter = openaiCompatibleAdapter("openai"); diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 8ef898c..93108c6 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -17,4 +17,4 @@ export type { ValidationResult } from "./validator.js"; export { loadSkill } from "./loader.js"; export type { Adapter } from "./adapters/index.js"; -export { getAdapter, listAdapters, openaiAdapter, anthropicAdapter, grokAdapter, geminiAdapter, kimiAdapter } from "./adapters/index.js"; +export { getAdapter, listAdapters, openaiCompatibleAdapter, openaiAdapter, anthropicAdapter, grokAdapter, geminiAdapter, kimiAdapter } from "./adapters/index.js"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bdc325c..97d1552 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,207 +11,207 @@ importers: packages/cli: dependencies: '@inquirer/prompts': - specifier: ^7.0.0 - version: 7.10.1(@types/node@22.19.11) + specifier: ^7.10.1 + version: 7.10.1(@types/node@22.20.0) '@polyskill/core': specifier: workspace:* version: link:../core chalk: - specifier: ^5.4.0 + specifier: ^5.6.2 version: 5.6.2 commander: - specifier: ^13.0.0 + specifier: ^13.1.0 version: 13.1.0 tar: - specifier: ^7.4.3 - version: 7.5.15 + specifier: ^7.5.19 + version: 7.5.19 devDependencies: '@types/node': - specifier: ^22.0.0 - version: 22.19.11 + specifier: ^22.20.0 + version: 22.20.0 tsx: - specifier: ^4.19.0 - version: 4.21.0 + specifier: ^4.22.5 + version: 4.22.5 typescript: - specifier: ^5.7.0 + specifier: ^5.9.3 version: 5.9.3 vitest: - specifier: ^3.0.0 - version: 3.2.4(@types/node@22.19.11)(tsx@4.21.0) + specifier: ^3.2.6 + version: 3.2.6(@types/node@22.20.0)(tsx@4.22.5) packages/core: dependencies: ajv: - specifier: ^8.17.1 - version: 8.17.1 + specifier: ^8.20.0 + version: 8.20.0 ajv-formats: specifier: ^3.0.1 - version: 3.0.1(ajv@8.17.1) + version: 3.0.1(ajv@8.20.0) devDependencies: '@types/node': - specifier: ^22.0.0 - version: 22.19.11 + specifier: ^22.20.0 + version: 22.20.0 typescript: - specifier: ^5.7.0 + specifier: ^5.9.3 version: 5.9.3 vitest: - specifier: ^3.0.0 - version: 3.2.4(@types/node@22.19.11)(tsx@4.21.0) + specifier: ^3.2.6 + version: 3.2.6(@types/node@22.20.0)(tsx@4.22.5) packages: - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -357,141 +357,141 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + '@rollup/rollup-android-arm-eabi@4.62.2': + resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + '@rollup/rollup-android-arm64@4.62.2': + resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + '@rollup/rollup-darwin-arm64@4.62.2': + resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + '@rollup/rollup-darwin-x64@4.62.2': + resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + '@rollup/rollup-freebsd-arm64@4.62.2': + resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + '@rollup/rollup-freebsd-x64@4.62.2': + resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + '@rollup/rollup-linux-arm64-gnu@4.62.2': + resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + '@rollup/rollup-linux-arm64-musl@4.62.2': + resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + '@rollup/rollup-linux-loong64-gnu@4.62.2': + resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + '@rollup/rollup-linux-loong64-musl@4.62.2': + resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + '@rollup/rollup-linux-ppc64-musl@4.62.2': + resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + '@rollup/rollup-linux-riscv64-musl@4.62.2': + resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + '@rollup/rollup-linux-s390x-gnu@4.62.2': + resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + '@rollup/rollup-linux-x64-gnu@4.62.2': + resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + '@rollup/rollup-linux-x64-musl@4.62.2': + resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + '@rollup/rollup-openbsd-x64@4.62.2': + resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + '@rollup/rollup-openharmony-arm64@4.62.2': + resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + '@rollup/rollup-win32-arm64-msvc@4.62.2': + resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + '@rollup/rollup-win32-ia32-msvc@4.62.2': + resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + '@rollup/rollup-win32-x64-gnu@4.62.2': + resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + '@rollup/rollup-win32-x64-msvc@4.62.2': + resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} cpu: [x64] os: [win32] @@ -501,17 +501,17 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@22.19.11': - resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} + '@types/node@22.20.0': + resolution: {integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==} - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@3.2.6': + resolution: {integrity: sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==} - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@3.2.6': + resolution: {integrity: sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 @@ -521,20 +521,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@3.2.6': + resolution: {integrity: sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@3.2.6': + resolution: {integrity: sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@3.2.6': + resolution: {integrity: sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@3.2.6': + resolution: {integrity: sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@3.2.6': + resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==} ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} @@ -544,8 +544,8 @@ packages: ajv: optional: true - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -571,8 +571,8 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chardet@2.1.1: - resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} check-error@2.1.3: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} @@ -616,23 +616,23 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + 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==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.3: + resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -648,9 +648,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} - iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} @@ -686,8 +683,8 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -701,23 +698,20 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + rollup@4.62.2: + resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -752,8 +746,8 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - tar@7.5.15: - resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} + tar@7.5.19: + resolution: {integrity: sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==} engines: {node: '>=18'} tinybench@2.9.0: @@ -762,8 +756,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} tinypool@1.1.1: @@ -778,8 +772,8 @@ packages: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.22.5: + resolution: {integrity: sha512-F7JnSfPl5ASt6LqwWyUQ3T8BwN3q0eQEbFMYa2iRWaVQmmudo0d7fRmwM4O002gsvW1bs0yBYioutsAjqLJMvQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -796,8 +790,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.6: + resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -836,16 +830,16 @@ packages: yaml: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + vitest@3.2.6: + resolution: {integrity: sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@vitest/browser': 3.2.6 + '@vitest/ui': 3.2.6 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -883,208 +877,208 @@ packages: snapshots: - '@esbuild/aix-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.28.1': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/android-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm@0.28.1': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-x64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/darwin-arm64@0.28.1': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-x64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/freebsd-arm64@0.28.1': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-x64@0.28.1': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/linux-arm64@0.28.1': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm@0.28.1': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-ia32@0.28.1': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-loong64@0.28.1': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-mips64el@0.28.1': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-ppc64@0.28.1': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-riscv64@0.28.1': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-x64@0.28.1': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-x64@0.28.1': optional: true '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@22.19.11)': + '@inquirer/checkbox@4.3.2(@types/node@22.20.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/type': 3.0.10(@types/node@22.20.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/confirm@5.1.21(@types/node@22.19.11)': + '@inquirer/confirm@5.1.21(@types/node@22.20.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.11) - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/core@10.3.2(@types/node@22.19.11)': + '@inquirer/core@10.3.2(@types/node@22.20.0)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/type': 3.0.10(@types/node@22.20.0) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/editor@4.2.23(@types/node@22.19.11)': + '@inquirer/editor@4.2.23(@types/node@22.20.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.11) - '@inquirer/external-editor': 1.0.3(@types/node@22.19.11) - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/external-editor': 1.0.3(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/expand@4.0.23(@types/node@22.19.11)': + '@inquirer/expand@4.0.23(@types/node@22.20.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.11) - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/external-editor@1.0.3(@types/node@22.19.11)': + '@inquirer/external-editor@1.0.3(@types/node@22.20.0)': dependencies: - chardet: 2.1.1 + chardet: 2.2.0 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@22.19.11)': + '@inquirer/input@4.3.1(@types/node@22.20.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.11) - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/number@3.0.23(@types/node@22.19.11)': + '@inquirer/number@3.0.23(@types/node@22.20.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.11) - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/password@4.0.23(@types/node@22.19.11)': + '@inquirer/password@4.0.23(@types/node@22.20.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.11) - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/prompts@7.10.1(@types/node@22.19.11)': + '@inquirer/prompts@7.10.1(@types/node@22.20.0)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@22.19.11) - '@inquirer/confirm': 5.1.21(@types/node@22.19.11) - '@inquirer/editor': 4.2.23(@types/node@22.19.11) - '@inquirer/expand': 4.0.23(@types/node@22.19.11) - '@inquirer/input': 4.3.1(@types/node@22.19.11) - '@inquirer/number': 3.0.23(@types/node@22.19.11) - '@inquirer/password': 4.0.23(@types/node@22.19.11) - '@inquirer/rawlist': 4.1.11(@types/node@22.19.11) - '@inquirer/search': 3.2.2(@types/node@22.19.11) - '@inquirer/select': 4.4.2(@types/node@22.19.11) + '@inquirer/checkbox': 4.3.2(@types/node@22.20.0) + '@inquirer/confirm': 5.1.21(@types/node@22.20.0) + '@inquirer/editor': 4.2.23(@types/node@22.20.0) + '@inquirer/expand': 4.0.23(@types/node@22.20.0) + '@inquirer/input': 4.3.1(@types/node@22.20.0) + '@inquirer/number': 3.0.23(@types/node@22.20.0) + '@inquirer/password': 4.0.23(@types/node@22.20.0) + '@inquirer/rawlist': 4.1.11(@types/node@22.20.0) + '@inquirer/search': 3.2.2(@types/node@22.20.0) + '@inquirer/select': 4.4.2(@types/node@22.20.0) optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/rawlist@4.1.11(@types/node@22.19.11)': + '@inquirer/rawlist@4.1.11(@types/node@22.20.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.11) - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/search@3.2.2(@types/node@22.19.11)': + '@inquirer/search@3.2.2(@types/node@22.20.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/type': 3.0.10(@types/node@22.20.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/select@4.4.2(@types/node@22.19.11)': + '@inquirer/select@4.4.2(@types/node@22.20.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.11) + '@inquirer/core': 10.3.2(@types/node@22.20.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.11) + '@inquirer/type': 3.0.10(@types/node@22.20.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 - '@inquirer/type@3.0.10(@types/node@22.19.11)': + '@inquirer/type@3.0.10(@types/node@22.20.0)': optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 '@isaacs/fs-minipass@4.0.1': dependencies: @@ -1092,79 +1086,79 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} - '@rollup/rollup-android-arm-eabi@4.57.1': + '@rollup/rollup-android-arm-eabi@4.62.2': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@rollup/rollup-android-arm64@4.62.2': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@rollup/rollup-darwin-arm64@4.62.2': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@rollup/rollup-darwin-x64@4.62.2': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@rollup/rollup-freebsd-arm64@4.62.2': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@rollup/rollup-freebsd-x64@4.62.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@rollup/rollup-linux-arm-musleabihf@4.62.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@rollup/rollup-linux-arm64-musl@4.62.2': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@rollup/rollup-linux-loong64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@rollup/rollup-linux-loong64-musl@4.62.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@rollup/rollup-linux-ppc64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@rollup/rollup-linux-ppc64-musl@4.62.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@rollup/rollup-linux-riscv64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@rollup/rollup-linux-riscv64-musl@4.62.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@rollup/rollup-linux-s390x-gnu@4.62.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@rollup/rollup-linux-x64-musl@4.62.2': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@rollup/rollup-openbsd-x64@4.62.2': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@rollup/rollup-openharmony-arm64@4.62.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.62.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@rollup/rollup-win32-ia32-msvc@4.62.2': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@rollup/rollup-win32-x64-gnu@4.62.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true '@types/chai@5.2.3': @@ -1174,62 +1168,62 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} - '@types/node@22.19.11': + '@types/node@22.20.0': dependencies: undici-types: 6.21.0 - '@vitest/expect@3.2.4': + '@vitest/expect@3.2.6': dependencies: '@types/chai': 5.2.3 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 + '@vitest/spy': 3.2.6 + '@vitest/utils': 3.2.6 chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@22.19.11)(tsx@4.21.0))': + '@vitest/mocker@3.2.6(vite@7.3.6(@types/node@22.20.0)(tsx@4.22.5))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 3.2.6 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.19.11)(tsx@4.21.0) + vite: 7.3.6(@types/node@22.20.0)(tsx@4.22.5) - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@3.2.6': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.2.4': + '@vitest/runner@3.2.6': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 3.2.6 pathe: 2.0.3 strip-literal: 3.1.0 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@3.2.6': dependencies: - '@vitest/pretty-format': 3.2.4 + '@vitest/pretty-format': 3.2.6 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.4': + '@vitest/spy@3.2.6': dependencies: tinyspy: 4.0.4 - '@vitest/utils@3.2.4': + '@vitest/utils@3.2.6': dependencies: - '@vitest/pretty-format': 3.2.4 + '@vitest/pretty-format': 3.2.6 loupe: 3.2.1 tinyrainbow: 2.0.0 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.20.0 - ajv@8.17.1: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -1253,7 +1247,7 @@ snapshots: chalk@5.6.2: {} - chardet@2.1.1: {} + chardet@2.2.0: {} check-error@2.1.3: {} @@ -1279,56 +1273,52 @@ snapshots: es-module-lexer@1.7.0: {} - esbuild@0.27.3: + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 - expect-type@1.3.0: {} + expect-type@1.4.0: {} fast-deep-equal@3.1.3: {} - fast-uri@3.1.0: {} + fast-uri@3.1.3: {} - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fsevents@2.3.3: optional: true - get-tsconfig@4.13.6: - dependencies: - resolve-pkg-maps: 1.0.0 - iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -1355,7 +1345,7 @@ snapshots: mute-stream@2.0.0: {} - nanoid@3.3.11: {} + nanoid@3.3.15: {} pathe@2.0.3: {} @@ -1363,47 +1353,45 @@ snapshots: picocolors@1.1.1: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} - postcss@8.5.6: + postcss@8.5.16: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.15 picocolors: 1.1.1 source-map-js: 1.2.1 require-from-string@2.0.2: {} - resolve-pkg-maps@1.0.0: {} - - rollup@4.57.1: + rollup@4.62.2: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 + '@rollup/rollup-android-arm-eabi': 4.62.2 + '@rollup/rollup-android-arm64': 4.62.2 + '@rollup/rollup-darwin-arm64': 4.62.2 + '@rollup/rollup-darwin-x64': 4.62.2 + '@rollup/rollup-freebsd-arm64': 4.62.2 + '@rollup/rollup-freebsd-x64': 4.62.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 + '@rollup/rollup-linux-arm-musleabihf': 4.62.2 + '@rollup/rollup-linux-arm64-gnu': 4.62.2 + '@rollup/rollup-linux-arm64-musl': 4.62.2 + '@rollup/rollup-linux-loong64-gnu': 4.62.2 + '@rollup/rollup-linux-loong64-musl': 4.62.2 + '@rollup/rollup-linux-ppc64-gnu': 4.62.2 + '@rollup/rollup-linux-ppc64-musl': 4.62.2 + '@rollup/rollup-linux-riscv64-gnu': 4.62.2 + '@rollup/rollup-linux-riscv64-musl': 4.62.2 + '@rollup/rollup-linux-s390x-gnu': 4.62.2 + '@rollup/rollup-linux-x64-gnu': 4.62.2 + '@rollup/rollup-linux-x64-musl': 4.62.2 + '@rollup/rollup-openbsd-x64': 4.62.2 + '@rollup/rollup-openharmony-arm64': 4.62.2 + '@rollup/rollup-win32-arm64-msvc': 4.62.2 + '@rollup/rollup-win32-ia32-msvc': 4.62.2 + '@rollup/rollup-win32-x64-gnu': 4.62.2 + '@rollup/rollup-win32-x64-msvc': 4.62.2 fsevents: 2.3.3 safer-buffer@2.1.2: {} @@ -1432,7 +1420,7 @@ snapshots: dependencies: js-tokens: 9.0.1 - tar@7.5.15: + tar@7.5.19: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -1444,10 +1432,10 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.15: + tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinypool@1.1.1: {} @@ -1455,10 +1443,9 @@ snapshots: tinyspy@4.0.4: {} - tsx@4.21.0: + tsx@4.22.5: dependencies: - esbuild: 0.27.3 - get-tsconfig: 4.13.6 + esbuild: 0.28.1 optionalDependencies: fsevents: 2.3.3 @@ -1466,13 +1453,13 @@ snapshots: undici-types@6.21.0: {} - vite-node@3.2.4(@types/node@22.19.11)(tsx@4.21.0): + vite-node@3.2.4(@types/node@22.20.0)(tsx@4.22.5): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@22.19.11)(tsx@4.21.0) + vite: 7.3.6(@types/node@22.20.0)(tsx@4.22.5) transitivePeerDependencies: - '@types/node' - jiti @@ -1487,46 +1474,46 @@ snapshots: - tsx - yaml - vite@7.3.1(@types/node@22.19.11)(tsx@4.21.0): + vite@7.3.6(@types/node@22.20.0)(tsx@4.22.5): dependencies: - esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.57.1 - tinyglobby: 0.2.15 + esbuild: 0.28.1 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.16 + rollup: 4.62.2 + tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 fsevents: 2.3.3 - tsx: 4.21.0 + tsx: 4.22.5 - vitest@3.2.4(@types/node@22.19.11)(tsx@4.21.0): + vitest@3.2.6(@types/node@22.20.0)(tsx@4.22.5): dependencies: '@types/chai': 5.2.3 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@22.19.11)(tsx@4.21.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 + '@vitest/expect': 3.2.6 + '@vitest/mocker': 3.2.6(vite@7.3.6(@types/node@22.20.0)(tsx@4.22.5)) + '@vitest/pretty-format': 3.2.6 + '@vitest/runner': 3.2.6 + '@vitest/snapshot': 3.2.6 + '@vitest/spy': 3.2.6 + '@vitest/utils': 3.2.6 chai: 5.3.3 debug: 4.4.3 - expect-type: 1.3.0 + expect-type: 1.4.0 magic-string: 0.30.21 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@22.19.11)(tsx@4.21.0) - vite-node: 3.2.4(@types/node@22.19.11)(tsx@4.21.0) + vite: 7.3.6(@types/node@22.20.0)(tsx@4.22.5) + vite-node: 3.2.4(@types/node@22.20.0)(tsx@4.22.5) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.20.0 transitivePeerDependencies: - jiti - less diff --git a/skills/getting-started/skill.json b/skills/getting-started/skill.json index 9133892..8f57300 100644 --- a/skills/getting-started/skill.json +++ b/skills/getting-started/skill.json @@ -1,6 +1,6 @@ { "name": "@polyskill/getting-started", - "version": "1.0.7", + "version": "1.0.9", "description": "Learn how to use the PolySkill CLI to search, install, create, and publish skills", "type": "prompt", "license": "MIT",